@ -26,18 +26,14 @@
# include "pblimage.h"
/*
* The PBL can load up to 64 bytes at a time , so we split the U - Boot
* image into 64 byte chunks . PBL needs a command for each piece , of
* the form " 81xxxxxx " , where " xxxxxx " is the offset . SYS_TEXT_BASE
* is 0xFFF80000 for PBL boot , and PBL only cares about low 24 - bit ,
* so it starts from 0x81F80000 .
* Initialize to an invalid value .
*/
static uint32_t next_pbl_cmd = 0x81F8 0000 ;
static uint32_t next_pbl_cmd = 0x82000000 ;
/*
* need to store all bytes in memory for calculating crc32 , then write the
* bytes to image file for PBL boot .
*/
static unsigned char mem_buf [ 6 00000] ;
static unsigned char mem_buf [ 10 00000] ;
static unsigned char * pmem_buf = mem_buf ;
static int pbl_size ;
static char * fname = " Unknown " ;
@ -52,6 +48,27 @@ static union
# define ENDIANNESS ((char)endian_test.l)
/*
* The PBL can load up to 64 bytes at a time , so we split the U - Boot
* image into 64 byte chunks . PBL needs a command for each piece , of
* the form " 81xxxxxx " , where " xxxxxx " is the offset . Calculate the
* start offset by subtracting the size of the u - boot image from the
* top of the allowable 24 - bit range .
*/
static void init_next_pbl_cmd ( FILE * fp_uboot )
{
struct stat st ;
int fd = fileno ( fp_uboot ) ;
if ( fstat ( fd , & st ) = = - 1 ) {
printf ( " Error: Could not determine u-boot image size. %s \n " ,
strerror ( errno ) ) ;
exit ( EXIT_FAILURE ) ;
}
next_pbl_cmd = 0x82000000 - st . st_size ;
}
static void generate_pbl_cmd ( void )
{
uint32_t val = next_pbl_cmd ;
@ -80,6 +97,7 @@ static void pbl_fget(size_t size, FILE *stream)
/* load split u-boot with PBI command 81xxxxxx. */
static void load_uboot ( FILE * fp_uboot )
{
init_next_pbl_cmd ( fp_uboot ) ;
while ( next_pbl_cmd < 0x82000000 ) {
generate_pbl_cmd ( ) ;
pbl_fget ( 64 , fp_uboot ) ;