
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@gmail.com] Sent: Monday, May 27, 2013 6:52 AM To: Fleming Andy-AFLEMING Cc: Xie Shaohui-B21989; u-boot@lists.denx.de; Chris Packham Subject: [PATCH] powerpc/CoreNet: Allow pbl images to take u-boot images != 512K
From: Chris Packham chris.packham@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@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.