diff mbox series

board: st: stm32mp1: update load address for FIT examples

Message ID 20201125122806.1.I077eed496ea5fded723418afa845e759df8e6c9b@changeid
State Accepted
Commit 60a2dd6aa20f6c0938856b764e7ebdee722d998e
Delegated to: Patrick Delaunay
Headers show
Series board: st: stm32mp1: update load address for FIT examples | expand

Commit Message

Patrick DELAUNAY Nov. 25, 2020, 11:28 a.m. UTC
Update kernel load address for FIT examples to avoid relocation:
- Kernel example uses Image.gz with U-Boot gzip decompression
  at final kernel location 0x0xC0008000.
- Copro example loads zImage at a correct location (0xC4000000),
  to avoid zImage relocation before decompression by kernel code.

An other solution to avoid zImage relocation is to align
the kernel load and entry address with the real location in FIT
(the relocation of zImage is skipped in U-Boot bootm command for
identical address) but it is less flexible because this offset
depends on FIT content:

For example:

## Loading kernel from FIT Image at c2000000 ...
   Using 'ev1' configuration
   Trying 'kernel' kernel subimage
     Description:  Linux kernel
     Created:      2020-10-22   9:08:32 UTC
     Type:         Kernel Image
     Compression:  uncompressed
     Data Start:   0xc20000cc

The kernel offset in FIT is 0xCC in FIT and zImage is decompressed at
0xC0008000 by kernel code:

kernel {
	description = "Linux kernel";
	data = /incbin/("zImage");
	type = "kernel";
	arch = "arm";
	os = "linux";
	compression = "none";
	load = <0xC20000cc>;
	entry = <0xC20000cc>;
	hash-1 {
		algo = "sha1";
	};
};

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---

 board/st/stm32mp1/fit_copro_kernel_dtb.its | 18 ++++++++++++++++--
 board/st/stm32mp1/fit_kernel_dtb.its       |  6 +++---
 2 files changed, 19 insertions(+), 5 deletions(-)

Comments

Patrice CHOTARD Nov. 25, 2020, 1:24 p.m. UTC | #1
Hi Patrick

On 11/25/20 12:28 PM, Patrick Delaunay wrote:
> Update kernel load address for FIT examples to avoid relocation:
> - Kernel example uses Image.gz with U-Boot gzip decompression
>   at final kernel location 0x0xC0008000.
> - Copro example loads zImage at a correct location (0xC4000000),
>   to avoid zImage relocation before decompression by kernel code.
>
> An other solution to avoid zImage relocation is to align
> the kernel load and entry address with the real location in FIT
> (the relocation of zImage is skipped in U-Boot bootm command for
> identical address) but it is less flexible because this offset
> depends on FIT content:
>
> For example:
>
> ## Loading kernel from FIT Image at c2000000 ...
>    Using 'ev1' configuration
>    Trying 'kernel' kernel subimage
>      Description:  Linux kernel
>      Created:      2020-10-22   9:08:32 UTC
>      Type:         Kernel Image
>      Compression:  uncompressed
>      Data Start:   0xc20000cc
>
> The kernel offset in FIT is 0xCC in FIT and zImage is decompressed at
> 0xC0008000 by kernel code:
>
> kernel {
> 	description = "Linux kernel";
> 	data = /incbin/("zImage");
> 	type = "kernel";
> 	arch = "arm";
> 	os = "linux";
> 	compression = "none";
> 	load = <0xC20000cc>;
> 	entry = <0xC20000cc>;
> 	hash-1 {
> 		algo = "sha1";
> 	};
> };
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
> ---
>
>  board/st/stm32mp1/fit_copro_kernel_dtb.its | 18 ++++++++++++++++--
>  board/st/stm32mp1/fit_kernel_dtb.its       |  6 +++---
>  2 files changed, 19 insertions(+), 5 deletions(-)
>
> diff --git a/board/st/stm32mp1/fit_copro_kernel_dtb.its b/board/st/stm32mp1/fit_copro_kernel_dtb.its
> index 3e08fd943e..dc43639af4 100644
> --- a/board/st/stm32mp1/fit_copro_kernel_dtb.its
> +++ b/board/st/stm32mp1/fit_copro_kernel_dtb.its
> @@ -1,6 +1,20 @@
>  /*
>   * Compilation:
>   * mkimage -f fit_copro_kernel_dtb.its fit_copro_kernel_dtb.itb
> + *
> + * M4 firmware to load with remoteproc: rproc-m4-fw.elf
> + *
> + * Files in linux build dir:
> + * - arch/arm/boot/zImage
> + * - arch/arm/boot/dts/stm32mp157c-dk2.dtb
> + * - arch/arm/boot/dts/stm32mp157c-ev1.dtb
> + *
> + * load mmc 0:4 $kernel_addr_r fit_copro_kernel_dtb.itb
> + * bootm $kernel_addr_r
> + * bootm $kernel_addr_r#dk2
> + * bootm $kernel_addr_r#ev1
> + * bootm $kernel_addr_r#dk2-m4
> + * bootm $kernel_addr_r#ev1-m4
>   */
>  
>  /dts-v1/;
> @@ -29,8 +43,8 @@
>  			arch = "arm";
>  			os = "linux";
>  			compression = "none";
> -			load = <0xC0008000>;
> -			entry = <0xC0008000>;
> +			load = <0xC4000000>;
> +			entry = <0xC4000000>;
>  			hash-1 {
>  				algo = "sha1";
>  			};
> diff --git a/board/st/stm32mp1/fit_kernel_dtb.its b/board/st/stm32mp1/fit_kernel_dtb.its
> index 18d03ebf3c..8456a3c460 100644
> --- a/board/st/stm32mp1/fit_kernel_dtb.its
> +++ b/board/st/stm32mp1/fit_kernel_dtb.its
> @@ -3,7 +3,7 @@
>   * mkimage -f fit_kernel_dtb.its fit_kernel_dtb.itb
>   *
>   * Files in linux build dir:
> - * - arch/arm/boot/zImage
> + * - arch/arm/boot/Image (gzipped in Image.gz)
>   * - arch/arm/boot/dts/stm32mp157c-dk2.dtb
>   * - arch/arm/boot/dts/stm32mp157c-ev1.dtb
>   *
> @@ -23,11 +23,11 @@
>  	images {
>  		kernel {
>  			description = "Linux kernel";
> -			data = /incbin/("zImage");
> +			data = /incbin/("Image.gz");
>  			type = "kernel";
>  			arch = "arm";
>  			os = "linux";
> -			compression = "none";
> +			compression = "gzip";
>  			load = <0xC0008000>;
>  			entry = <0xC0008000>;
>  			hash-1 {


Reviewed-by: Patrice Chotard <patrice.chotard@st.com>

Thanks

Patrice
diff mbox series

Patch

diff --git a/board/st/stm32mp1/fit_copro_kernel_dtb.its b/board/st/stm32mp1/fit_copro_kernel_dtb.its
index 3e08fd943e..dc43639af4 100644
--- a/board/st/stm32mp1/fit_copro_kernel_dtb.its
+++ b/board/st/stm32mp1/fit_copro_kernel_dtb.its
@@ -1,6 +1,20 @@ 
 /*
  * Compilation:
  * mkimage -f fit_copro_kernel_dtb.its fit_copro_kernel_dtb.itb
+ *
+ * M4 firmware to load with remoteproc: rproc-m4-fw.elf
+ *
+ * Files in linux build dir:
+ * - arch/arm/boot/zImage
+ * - arch/arm/boot/dts/stm32mp157c-dk2.dtb
+ * - arch/arm/boot/dts/stm32mp157c-ev1.dtb
+ *
+ * load mmc 0:4 $kernel_addr_r fit_copro_kernel_dtb.itb
+ * bootm $kernel_addr_r
+ * bootm $kernel_addr_r#dk2
+ * bootm $kernel_addr_r#ev1
+ * bootm $kernel_addr_r#dk2-m4
+ * bootm $kernel_addr_r#ev1-m4
  */
 
 /dts-v1/;
@@ -29,8 +43,8 @@ 
 			arch = "arm";
 			os = "linux";
 			compression = "none";
-			load = <0xC0008000>;
-			entry = <0xC0008000>;
+			load = <0xC4000000>;
+			entry = <0xC4000000>;
 			hash-1 {
 				algo = "sha1";
 			};
diff --git a/board/st/stm32mp1/fit_kernel_dtb.its b/board/st/stm32mp1/fit_kernel_dtb.its
index 18d03ebf3c..8456a3c460 100644
--- a/board/st/stm32mp1/fit_kernel_dtb.its
+++ b/board/st/stm32mp1/fit_kernel_dtb.its
@@ -3,7 +3,7 @@ 
  * mkimage -f fit_kernel_dtb.its fit_kernel_dtb.itb
  *
  * Files in linux build dir:
- * - arch/arm/boot/zImage
+ * - arch/arm/boot/Image (gzipped in Image.gz)
  * - arch/arm/boot/dts/stm32mp157c-dk2.dtb
  * - arch/arm/boot/dts/stm32mp157c-ev1.dtb
  *
@@ -23,11 +23,11 @@ 
 	images {
 		kernel {
 			description = "Linux kernel";
-			data = /incbin/("zImage");
+			data = /incbin/("Image.gz");
 			type = "kernel";
 			arch = "arm";
 			os = "linux";
-			compression = "none";
+			compression = "gzip";
 			load = <0xC0008000>;
 			entry = <0xC0008000>;
 			hash-1 {