Fix to keystone2 uinitrd fixup logic
v2 cover Fix to keystone2 uinitrd fixup logic
For ks2 devices with PAE enabled, the function ft_board_setup() (board/ti/ks2_evm/board.c) is supposed to update at runtime the /chosen fdt node by shifting the initrd start/end addresses into the 36b
it address space. Unfortunately, this mechanism doesn't work since the /chosen node has not been populated at the time of the ft_board_setup() call. The root of the issue is that, at some point in u-boot history, the call sequence of fdt_initrd() and ft_board_setup() (common/image-fdt.c) has been inverted: ft_board_setup() is called before fdt_initrd().
Error shown by Linux during startup is:
[ 0.000000] INITRD: 0x8fcec000+0x00313dc8 is not a memory region - disabling initrd
I would propose to move the fdt initrd fixup logic from ft_board_setup() to ft_board_setup_ex() since the latter is called esclusively for keystone devices.
Moreover, cmd/fdt.c command should include the call of ft_board_setup_ex() since keystone2 devices will require it.
Changes in v2:
- Add reviewed-by tag
- Add reviewed-by tag, removed RFC/RESEND
Nicholas Faustini (2):
fdt: add call to ft_board_setup_ex() for ks2 boards
board: ks2: move uinitrd fixup logic inside ft_board_setup_ex
board/ti/ks2_evm/board.c | 44 ++++++++++++++++++++-------------------- cmd/fdt.c | 3 +++ 2 files changed, 25 insertions(+), 22 deletions(-)
Signature · 16 lines
2.17.1 -- Disclaimer: This email and any files transmitted along with it may contain Azcom confidential and proprietary information. If you are not the intended recipient, you are notified that disclosing, copying, distributing or taking any action based on the contents of the information contained herein is strictly prohibited. If you are not an intended recipient of this transmission and you received it in error, please inform the sender by reply e-mail and destroy this and all other copies of this transmission to which you have access. The sender of this email or Azcom does not accept liability for any errors or omissions in the contents of this message that may occur as a result.
PATCH v2 1/2 fdt: add call to ft_board_setup_ex() for ks2 boards
When updating the board FDT, some of the operations are performed by ft_board_setup_ex() and should be executed also by the fdt command.
---
Changes in v2:
- Add reviewed-by tag
cmd/fdt.c | 3 +++ 1 file changed, 3 insertions(+)
cmd/fdt.c +3 -0
@@ -596,6 +596,9 @@ static int do_fdt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) fdt_strerror(err)); return CMD_RET_FAILURE; } +#ifdef CONFIG_SOC_KEYSTONE +ft_board_setup_ex (working_fdt, gd->bd); +#endif }#endif /* Create a chosen node */
Signature · 16 lines
2.17.1 -- Disclaimer: This email and any files transmitted along with it may contain Azcom confidential and proprietary information. If you are not the intended recipient, you are notified that disclosing, copying, distributing or taking any action based on the contents of the information contained herein is strictly prohibited. If you are not an intended recipient of this transmission and you received it in error, please inform the sender by reply e-mail and destroy this and all other copies of this transmission to which you have access. The sender of this email or Azcom does not accept liability for any errors or omissions in the contents of this message that may occur as a result.
PATCH v2 1/2 fdt: add call to ft_board_setup_ex() for ks2 boards
Quoted 6 lines · Nicholas Faustini
When updating the board FDT, some of the operations are performed by
ft_board_setup_ex()and should be executed also by the fdt command.Signed-off-by Nicholas Faustini <[email protected]>Reviewed-by Tom Rini <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181011/28df1d70/attachment.sig>
PATCH v2 2/2 board: ks2: move uinitrd fixup logic inside ft_board_setup_ex
In reply to Nicholas FaustiniThe uinitrd fixup logic should be executed after the FDT /chosen node has been properly populated by fdt_initrd()
---
Changes in v2:
- Add reviewed-by tag, removed RFC/RESEND
board/ti/ks2_evm/board.c | 44 ++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 22 deletions(-)
board/ti/ks2_evm/board.c +22 -22
@@ -146,14 +146,10 @@ int ft_board_setup(void *blob, bd_t *bd)int nbanks;u64 size[2 ];u64 start[2 ]; -int nodeoffset;u32 ddr3a_size; -int unitrd_fixup =0 ; env =env_get ("mem_lpae" ); lpae = env &&simple_strtol (env,NULL ,0 ); - env =env_get ("uinitrd_fixup" ); - unitrd_fixup = env &&simple_strtol (env,NULL ,0 ); ddr3a_size =0 ;if (lpae) {
@@ -191,24 +187,41 @@ int ft_board_setup(void *blob, bd_t *bd)fdt_fixup_memory_banks (blob, start, size, nbanks); +return 0 ; +} + +void ft_board_setup_ex (void *blob,bd_t *bd) +{ +int lpae; +u64 size; +char *env; +u64 *reserve_start; +int unitrd_fixup =0 ; + + env =env_get ("mem_lpae" ); + lpae = env &&simple_strtol (env,NULL ,0 ); + env =env_get ("uinitrd_fixup" ); + unitrd_fixup = env &&simple_strtol (env,NULL ,0 ); +/* Fix up the initrd */ if (lpae && unitrd_fixup) { +int nodeoffset;int err; -u32 *prop1, *prop2; +u64 *prop1, *prop2;u64 initrd_start, initrd_end; nodeoffset =fdt_path_offset (blob,"/chosen" );if (nodeoffset >=0 ) { - prop1 = (u32 *)fdt_getprop (blob, nodeoffset, + prop1 = (u64 *)fdt_getprop (blob, nodeoffset,"linux,initrd-start" ,NULL ); - prop2 = (u32 *)fdt_getprop (blob, nodeoffset, + prop2 = (u64 *)fdt_getprop (blob, nodeoffset,"linux,initrd-end" ,NULL );if (prop1 && prop2) { - initrd_start =__be32_to_cpu (*prop1); + initrd_start =__be64_to_cpu (*prop1); initrd_start -=CONFIG_SYS_SDRAM_BASE ; initrd_start +=CONFIG_SYS_LPAE_SDRAM_BASE ; initrd_start =__cpu_to_be64 (initrd_start); - initrd_end =__be32_to_cpu (*prop2); + initrd_end =__be64_to_cpu (*prop2); initrd_end -=CONFIG_SYS_SDRAM_BASE ; initrd_end +=CONFIG_SYS_LPAE_SDRAM_BASE ; initrd_end =__cpu_to_be64 (initrd_end);
@@ -240,19 +253,6 @@ int ft_board_setup(void *blob, bd_t *bd) } } -return 0 ; -} - -void ft_board_setup_ex (void *blob,bd_t *bd) -{ -int lpae; -u64 size; -char *env; -u64 *reserve_start; - - env =env_get ("mem_lpae" ); - lpae = env &&simple_strtol (env,NULL ,0 ); -if (lpae) {/* * the initrd and other reserved memory areas are
Signature · 16 lines
2.17.1 -- Disclaimer: This email and any files transmitted along with it may contain Azcom confidential and proprietary information. If you are not the intended recipient, you are notified that disclosing, copying, distributing or taking any action based on the contents of the information contained herein is strictly prohibited. If you are not an intended recipient of this transmission and you received it in error, please inform the sender by reply e-mail and destroy this and all other copies of this transmission to which you have access. The sender of this email or Azcom does not accept liability for any errors or omissions in the contents of this message that may occur as a result.
PATCH v2 2/2 board: ks2: move uinitrd fixup logic inside ft_board_setup_ex
Quoted 5 lines · Nicholas Faustini
The uinitrd fixup logic should be executed after the FDT /chosen node has been properly populated by
fdt_initrd()Signed-off-by Nicholas Faustini <[email protected]>Reviewed-by Tom Rini <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181011/3cef72f8/attachment.sig>