[U-Boot] [PATCH] configs: ti: armv7: Fixes bug in fit_loadaddr for ramfs boot

From: Madan Srinivas madans@ti.com
The load address of ramdisk, rdaddr is 0x88080000 and fit_loadaddr is defined as 0x88000000. This leaves only 512Kbytes for the fit image. When the FIT images are larger than this, it will overwite the ramdisk and cause the boot to fail.
For eg, The K2 HS fit images are a few MB and end up overwriting the ramdsk. This patch moves the fit_loadaddr to 0x87000000, leaving a 16MB window for the fit image. This memory can be reclaimed once the kernel starts running.
Signed-off-by: Madan Srinivas madans@ti.com --- include/configs/ti_armv7_common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/configs/ti_armv7_common.h b/include/configs/ti_armv7_common.h index a4676d3a7f..16ea22857f 100644 --- a/include/configs/ti_armv7_common.h +++ b/include/configs/ti_armv7_common.h @@ -53,7 +53,7 @@
#define DEFAULT_FIT_TI_ARGS \ "boot_fit=0\0" \ - "fit_loadaddr=0x88000000\0" \ + "fit_loadaddr=0x87000000\0" \ "fit_bootfile=fitImage\0" \ "update_to_fit=setenv loadaddr ${fit_loadaddr}; setenv bootfile ${fit_bootfile}\0" \ "loadfit=run args_mmc; bootm ${loadaddr}#${fdtfile};\0" \

On Mon, Jul 17, 2017 at 01:01:36PM -0500, Andrew F. Davis wrote:
From: Madan Srinivas madans@ti.com
The load address of ramdisk, rdaddr is 0x88080000 and fit_loadaddr is defined as 0x88000000. This leaves only 512Kbytes for the fit image. When the FIT images are larger than this, it will overwite the ramdisk and cause the boot to fail.
For eg, The K2 HS fit images are a few MB and end up overwriting the ramdsk. This patch moves the fit_loadaddr to 0x87000000, leaving a 16MB window for the fit image. This memory can be reclaimed once the kernel starts running.
Signed-off-by: Madan Srinivas madans@ti.com
include/configs/ti_armv7_common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/configs/ti_armv7_common.h b/include/configs/ti_armv7_common.h index a4676d3a7f..16ea22857f 100644 --- a/include/configs/ti_armv7_common.h +++ b/include/configs/ti_armv7_common.h @@ -53,7 +53,7 @@
#define DEFAULT_FIT_TI_ARGS \ "boot_fit=0\0" \
- "fit_loadaddr=0x88000000\0" \
- "fit_loadaddr=0x87000000\0" \ "fit_bootfile=fitImage\0" \ "update_to_fit=setenv loadaddr ${fit_loadaddr}; setenv bootfile ${fit_bootfile}\0" \ "loadfit=run args_mmc; bootm ${loadaddr}#${fdtfile};\0" \
OK, why is fit_loadaddr different from loadaddr?

On 07/18/2017 07:59 AM, Tom Rini wrote:
On Mon, Jul 17, 2017 at 01:01:36PM -0500, Andrew F. Davis wrote:
From: Madan Srinivas madans@ti.com
The load address of ramdisk, rdaddr is 0x88080000 and fit_loadaddr is defined as 0x88000000. This leaves only 512Kbytes for the fit image. When the FIT images are larger than this, it will overwite the ramdisk and cause the boot to fail.
For eg, The K2 HS fit images are a few MB and end up overwriting the ramdsk. This patch moves the fit_loadaddr to 0x87000000, leaving a 16MB window for the fit image. This memory can be reclaimed once the kernel starts running.
Signed-off-by: Madan Srinivas madans@ti.com
include/configs/ti_armv7_common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/configs/ti_armv7_common.h b/include/configs/ti_armv7_common.h index a4676d3a7f..16ea22857f 100644 --- a/include/configs/ti_armv7_common.h +++ b/include/configs/ti_armv7_common.h @@ -53,7 +53,7 @@
#define DEFAULT_FIT_TI_ARGS \ "boot_fit=0\0" \
- "fit_loadaddr=0x88000000\0" \
- "fit_loadaddr=0x87000000\0" \ "fit_bootfile=fitImage\0" \ "update_to_fit=setenv loadaddr ${fit_loadaddr}; setenv bootfile ${fit_bootfile}\0" \ "loadfit=run args_mmc; bootm ${loadaddr}#${fdtfile};\0" \
OK, why is fit_loadaddr different from loadaddr?
Are you asking why they are different addresses? They need to be or the kernel will be unpacked from the FIT onto the FIT image (I think).
If you are asking why not use the variable 'fit_loadaddr' for all FIT loading activities it is because we use the same commands as loading other images, after 'update_to_fit' is run, any command that loads 'bootfile' to 'loadaddr' will load our FIT image correctly for us.
Andrew

On Tue, Jul 18, 2017 at 10:10:15AM -0500, Andrew F. Davis wrote:
On 07/18/2017 07:59 AM, Tom Rini wrote:
On Mon, Jul 17, 2017 at 01:01:36PM -0500, Andrew F. Davis wrote:
From: Madan Srinivas madans@ti.com
The load address of ramdisk, rdaddr is 0x88080000 and fit_loadaddr is defined as 0x88000000. This leaves only 512Kbytes for the fit image. When the FIT images are larger than this, it will overwite the ramdisk and cause the boot to fail.
For eg, The K2 HS fit images are a few MB and end up overwriting the ramdsk. This patch moves the fit_loadaddr to 0x87000000, leaving a 16MB window for the fit image. This memory can be reclaimed once the kernel starts running.
Signed-off-by: Madan Srinivas madans@ti.com
include/configs/ti_armv7_common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/configs/ti_armv7_common.h b/include/configs/ti_armv7_common.h index a4676d3a7f..16ea22857f 100644 --- a/include/configs/ti_armv7_common.h +++ b/include/configs/ti_armv7_common.h @@ -53,7 +53,7 @@
#define DEFAULT_FIT_TI_ARGS \ "boot_fit=0\0" \
- "fit_loadaddr=0x88000000\0" \
- "fit_loadaddr=0x87000000\0" \ "fit_bootfile=fitImage\0" \ "update_to_fit=setenv loadaddr ${fit_loadaddr}; setenv bootfile ${fit_bootfile}\0" \ "loadfit=run args_mmc; bootm ${loadaddr}#${fdtfile};\0" \
OK, why is fit_loadaddr different from loadaddr?
Are you asking why they are different addresses? They need to be or the kernel will be unpacked from the FIT onto the FIT image (I think).
And here we get to one of the sad parts about FIT images. If you construct your FIT with: kernel@1 { ... type = "kernel_noload";
Then you can do what I describe, load the FIT image to $loadaddr and this even works for when you include a ramdisk in the image too. Now, if you're using type = "kernel" which I suspect you are, it then depends on if there is overlap between where the FIT image is loaded into memory and where you set load/entry of the kernel inside of the FIT image.
And, I assume it's intentional that you're using a FIT image for kernel and device tree, but separate initrd file, and we wouldn't address the issue by including the ramdisk into the FIT itself.

On Mon, Jul 17, 2017 at 01:01:36PM -0500, Andrew F. Davis wrote:
From: Madan Srinivas madans@ti.com
The load address of ramdisk, rdaddr is 0x88080000 and fit_loadaddr is defined as 0x88000000. This leaves only 512Kbytes for the fit image. When the FIT images are larger than this, it will overwite the ramdisk and cause the boot to fail.
For eg, The K2 HS fit images are a few MB and end up overwriting the ramdsk. This patch moves the fit_loadaddr to 0x87000000, leaving a 16MB window for the fit image. This memory can be reclaimed once the kernel starts running.
Signed-off-by: Madan Srinivas madans@ti.com
Applied to u-boot/master, thanks!
participants (2)
-
Andrew F. Davis
-
Tom Rini