Skip to contentSkip to conversation

nios2: export fdt_blob to the environment variable

PATCH Superseded Thomas Chou 3 participants 8 messages Oct 9, 2015 – Oct 18, 2015 NIOS2 architecture

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 nios2: export fdt_blob to the environment variable

Export fdt_blob to the environment variable. So that we may use it to boot Linux.

---
 arch/nios2/lib/Makefile         |  1 +
 arch/nios2/lib/misc.c           | 16 ++++++++++++++++
 include/configs/nios2-generic.h |  1 +
 3 files changed, 18 insertions(+)
 create mode 100644 arch/nios2/lib/misc.c
arch/nios2/lib/Makefile +1 -0
index e35d2e9..05deea4 100644
@@ -8,3 +8,4 @@
 obj-y	+= cache.o
 obj-$(CONFIG_CMD_BOOTM) += bootm.o
 obj-y	+= libgcc.o
+obj-y	+= misc.o
arch/nios2/lib/misc.c new file +16 -0
new file mode 100644
index 0000000..2cf8574
@@ -0,0 +1,16 @@
+/*
+ * Copyright (C) 2015 Thomas Chou <[email protected]>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int misc_init_r(void)
+{
+	setenv_addr("fdt_blob", gd->fdt_blob);
+
+	return 0;
+}
include/configs/nios2-generic.h +1 -0
index e4b5abb..14ab37f 100644
@@ -15,6 +15,7 @@
 #include "../board/altera/nios2-generic/custom_fpga.h" /* fpga parameters */
 #define CONFIG_BOARD_NAME "nios2-generic" /* custom board name */
 #define CONFIG_BOARD_EARLY_INIT_F	/* enable early board-spec. init */
+#define CONFIG_MISC_INIT_R
 #define CONFIG_DISPLAY_CPUINFO
 #define CONFIG_DISPLAY_BOARDINFO_LATE
 #define CONFIG_SYS_NIOS_SYSID_BASE	CONFIG_SYS_SYSID_BASE
Signature · 1 line
2.1.4
#1 lore raw

PATCH v2 1/1 nios2: export fdt_blob to the environment variable

Export fdt_blob to the environment variable. So that we may use it to boot Linux.

---
v2
move the code to per board, nios2-generic.c.

 board/altera/nios2-generic/nios2-generic.c | 9 +++++++++
 include/configs/nios2-generic.h            | 1 +
 2 files changed, 10 insertions(+)
board/altera/nios2-generic/nios2-generic.c +9 -0
index e7fecd2..f508c00 100644
@@ -14,6 +14,8 @@
 #include <asm/io.h>
 #include <asm/gpio.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
 #if defined(CONFIG_ENV_IS_IN_FLASH) && defined(CONFIG_ENV_ADDR) && \
     defined(CONFIG_CFI_FLASH_MTD)
 static void __early_flash_cmd_reset(void)
@@ -35,6 +37,13 @@ int board_early_init_f(void)
 	return 0;
 }
 
+int misc_init_r(void)
+{
+	setenv_addr("fdt_blob", gd->fdt_blob);
+
+	return 0;
+}
+
 int checkboard(void)
 {
 #ifdef CONFIG_ALTERA_SYSID
include/configs/nios2-generic.h +1 -0
index e4b5abb..14ab37f 100644
@@ -15,6 +15,7 @@
 #include "../board/altera/nios2-generic/custom_fpga.h" /* fpga parameters */
 #define CONFIG_BOARD_NAME "nios2-generic" /* custom board name */
 #define CONFIG_BOARD_EARLY_INIT_F	/* enable early board-spec. init */
+#define CONFIG_MISC_INIT_R
 #define CONFIG_DISPLAY_CPUINFO
 #define CONFIG_DISPLAY_BOARDINFO_LATE
 #define CONFIG_SYS_NIOS_SYSID_BASE	CONFIG_SYS_SYSID_BASE
Signature · 1 line
2.1.4
#2 lore raw

PATCH v2 1/1 nios2: export fdt_blob to the environment variable

Quoted 26 lines · Thomas Chou

Export fdt_blob to the environment variable. So that we may use it to boot Linux.

---
v2
move the code to per board, nios2-generic.c.

 board/altera/nios2-generic/nios2-generic.c | 9 +++++++++
 include/configs/nios2-generic.h            | 1 +
 2 files changed, 10 insertions(+)
(quoted diff) +0 -0

b/board/altera/nios2-generic/nios2-generic.c index e7fecd2..f508c00 100644

board/altera/nios2-generic/nios2-generic.c +2 -0
@@ -14,6 +14,8 @@
 #include <asm/io.h>
 #include <asm/gpio.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
 #if defined(CONFIG_ENV_IS_IN_FLASH) && defined(CONFIG_ENV_ADDR) && \
     defined(CONFIG_CFI_FLASH_MTD)
 static void __early_flash_cmd_reset(void)

board/altera/nios2-generic/nios2-generic.c int board_early_init_f(void) · line 45

Quoted 9 lines
board/altera/nios2-generic/nios2-generic.c +6 -0
@@ -35,6 +37,13 @@ int board_early_init_f(void)
 	return 0;
 }
 
+int misc_init_r(void)
+{
+	setenv_addr("fdt_blob", gd->fdt_blob);
+
+	return 0;
+}

Shouldn't this go into generic code ?

Best regards,
Marek Vasut

#3 lore raw

PATCH v3 1/1 env: export fdt_blob to the environment variable

In reply to Thomas Chou

Export fdt_blob to the environment variable. So that we may use it to boot Linux.

---
v2
move the code to per board, nios2-generic.c.
v3
move the code to generic, board_r.c.

 common/board_r.c | 1 +
 1 file changed, 1 insertion(+)
common/board_r.c +1 -0
index a4facf8..6f10a31 100644
@@ -449,6 +449,7 @@ static int initr_env(void)
 		env_relocate();
 	else
 		set_default_env(NULL);
+	setenv_addr("fdt_blob", gd->fdt_blob);
 
 	/* Initialize from environment */
 	load_addr = getenv_ulong("loadaddr", 16, load_addr);
Signature · 1 line
2.1.4
#4 lore raw

PATCH v3 1/1 env: export fdt_blob to the environment variable

Hi,

Quoted 27 lines · Thomas Chou

Export fdt_blob to the environment variable. So that we may use it to boot Linux.

---
v2
move the code to per board, nios2-generic.c.
v3
move the code to generic, board_r.c.

 common/board_r.c | 1 +
 1 file changed, 1 insertion(+)
common/board_r.c +1 -1
index a4facf8..6f10a31 100644
@@ -449,6 +449,7 @@ static int initr_env(void)
                env_relocate();
        else
                set_default_env(NULL);
+       setenv_addr("fdt_blob", gd->fdt_blob);
 
        /* Initialize from environment */
        load_addr = getenv_ulong("loadaddr", 16, load_addr);
--
Quoted 2 lines

2.1.4

We already have fdtcontroladdr, so how about using that instead?

Also please can you add docs to README.fdt-control? Also note that it is read-only and cannot be changed. In fact changing it will be ignored.

Regards,
Simon

#5 lore raw

PATCH v4 1/1 env: export fdt_blob to the environment variable

In reply to Thomas Chou

Export fdt_blob to the environment variable. So that we may use it to boot Linux.

---
v2
move the code to per board, nios2-generic.c.
v3
move the code to generic, board_r.c.
v4
use fdtcontroladdr as Simon suggested.

 common/board_r.c       | 3 +++
 doc/README.fdt-control | 5 ++++-
 2 files changed, 7 insertions(+), 1 deletion(-)
common/board_r.c +3 -0
index a4facf8..d722081 100644
@@ -449,6 +449,9 @@ static int initr_env(void)
 		env_relocate();
 	else
 		set_default_env(NULL);
+#ifdef CONFIG_OF_CONTROL
+	setenv_addr("fdtcontroladdr", gd->fdt_blob);
+#endif
 
 	/* Initialize from environment */
 	load_addr = getenv_ulong("loadaddr", 16, load_addr);
doc/README.fdt-control +4 -1
index e6d5ed0..29fd56a 100644
@@ -156,7 +156,10 @@ address of the fdt binary blob, and will override either of the options.
 Be aware that this environment variable is checked prior to relocation,
 when only the compiled-in environment is available. Therefore it is not
 possible to define this variable in the saved SPI/NAND flash
-environment, for example (it will be ignored).
+environment, for example (it will be ignored). After relocation, this
+variable will be set to the address of the newly relocated fdt blob.
+It is read-only and cannot be changed. It can optionally be used to
+control the boot process of Linux with bootm/bootz commands.
 
 To use this, put something like this in your board header file:
 
Signature · 1 line
2.1.4
#6 lore raw

PATCH v4 1/1 env: export fdt_blob to the environment variable

Quoted 12 lines · Thomas Chou

Export fdt_blob to the environment variable. So that we may use it to boot Linux.

---
v2
move the code to per board, nios2-generic.c.
v3
move the code to generic, board_r.c.
v4
use fdtcontroladdr as Simon suggested.

Quoted 3 lines
 common/board_r.c       | 3 +++
 doc/README.fdt-control | 5 ++++-
 2 files changed, 7 insertions(+), 1 deletion(-)
#7 lore raw

PATCH v4 1/1 env: export fdt_blob to the environment variable

Quoted 13 lines · Simon Glass
Quoted 12 lines · Thomas Chou

Export fdt_blob to the environment variable. So that we may use it to boot Linux.

---
v2
move the code to per board, nios2-generic.c.
v3
move the code to generic, board_r.c.
v4
use fdtcontroladdr as Simon suggested.

Quoted 5 lines
Quoted 3 lines
 common/board_r.c       | 3 +++
 doc/README.fdt-control | 5 ++++-
 2 files changed, 7 insertions(+), 1 deletion(-)

Applied to u-boot-dm, thanks!