[U-Boot] [PATCH] powerpc/CoreNet: Allow pbl images to take u-boot images != 512K

Chris Packham judge.packham at gmail.com
Mon May 27 12:15:52 CEST 2013


On 27/05/13 18:18, Xie Shaohui-B21989 wrote:
> Hi, Chris,
> 
> For the init value of "next_pbl_cmd", there was a patch at below link can be used:
> http://lists.denx.de/pipermail/u-boot/2013-March/150260.html
> 

Thanks for the pointer. I did check the main u-boot.git tree but didn't
search the list.

I don't know if it's a concern for u-boot but the patch linked above
assumes something that isn't quite true for my usage. My board uses the
SPI booting option for factory boot-strap. The "normal" method is
booting from NOR. When I build a NOR image I prepend a standalone
application image to the bootloader for convenience of only having to
program one image to NOR. In my case CONFIG_SYS_TEXT_BASE is not the
base address of the binary I'm trying to wrap in a pbl image.

Another advantage of my version is that you don't necessarily have to be
using mkimage/pblimage on the current u-boot configuration. It could be
an externally built image and we're just using mkimage/pblimage to wrap
it into something that we can program into SPI.

> this patch with your modification below should can meet your requirement:
>> -static unsigned char mem_buf[600000];
>> +static unsigned char mem_buf[1000000];
> 
> Best Regards, 
> Shaohui Xie
>> -----Original Message-----
>> From: Chris Packham [mailto:judge.packham at gmail.com]
>> Sent: Monday, May 27, 2013 6:52 AM
>> To: Fleming Andy-AFLEMING
>> Cc: Xie Shaohui-B21989; u-boot at lists.denx.de; Chris Packham
>> Subject: [PATCH] powerpc/CoreNet: Allow pbl images to take u-boot
>> images != 512K
>>
>> From: Chris Packham <chris.packham at alliedtelesis.co.nz>
>>
>> Instead of assuming that SYS_TEXT_BASE is 0xFFF80000 calculate the
>> initial pbl command offset by subtracting the image size from the top of
>> the 24-bit address range. Also increase the size of the memory buffer to
>> accommodate a larger output image.
>>
>> Signed-off-by: Chris Packham <chris.packham at alliedtelesis.co.nz>
>> ---
>> Hi,
>>
>> I was trying to get a SPIFLASH image working for my board based on a
>> P2040 and found that the pblimage tool assumes that u-boot.bin is always
>> 512K. In my case it's actually larger. This patch is my attempt to allow
>> for an arbitrary u-boot.bin image size.
>>
>> Thanks,
>> Chris
>>
>>  tools/pblimage.c |   33 ++++++++++++++++++++++++++-------
>>  1 file changed, 26 insertions(+), 7 deletions(-)
>>
>> diff --git a/tools/pblimage.c b/tools/pblimage.c index 508a747..3582ada
>> 100644
>> --- a/tools/pblimage.c
>> +++ b/tools/pblimage.c
>> @@ -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 = 0x81F80000;
>> +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[600000];
>> +static unsigned char mem_buf[1000000];
>>  static unsigned char *pmem_buf = mem_buf;  static int pbl_size;  static
>> char *fname = "Unknown"; @@ -52,6 +48,28 @@ 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);
>> +	size_t size;
>> +
>> +	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 +98,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);
>> --
>> 1.7.9.5
>>
>>
>> NOTICE: This message contains privileged and confidential
>> information intended only for the use of the addressee
>> named above. If you are not the intended recipient of
>> this message you are hereby notified that you must not
>> disseminate, copy or take any action in reliance on it.
>> If you have received this message in error please
>> notify Allied Telesis Labs Ltd immediately.
>> Any views expressed in this message are those of the
>> individual sender, except where the sender has the
>> authority to issue and specifically states them to
>> be the views of Allied Telesis Labs.
> 
> 



More information about the U-Boot mailing list