Skip to contentSkip to conversation

Fix to keystone2 uinitrd fixup logic

PATCH New Nicholas Faustini 2 participants 5 messages Oct 3, 2018 – Oct 11, 2018

lore
Share & tools
lore
#0 lore raw

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.
#1 lore raw

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
index 28de467f96..8a19a3fdbf 100644
@@ -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.
#2 lore raw

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.

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>
#3 lore raw

PATCH v2 2/2 board: ks2: move uinitrd fixup logic inside ft_board_setup_ex

In reply to Nicholas Faustini

The 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
index 274f18e942..d81c8e621f 100644
@@ -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.
#4 lore raw

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()

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>