i.MX6Q: icorem6: Add modeboot env via board_late_init
Subsystems (2)
PATCH 1/5 i.MX6Q: icorem6: Add modeboot env via board_late_init
From: Jagan Teki <[email protected]>
Add runtime, modeboot env which is setting mmcboot, or nandboot based on the bootdevice so-that conditional macros b/w MMC and NAND for CONFIG_BOOTCOMMAND should be avoided in config files.
--- arch/arm/cpu/armv7/mx6/Kconfig | 1 + board/engicam/icorem6/icorem6.c | 19 +++++++++++++++++++ include/configs/imx6qdl_icore.h | 36 ++++++++++++++++-------------------- 3 files changed, 36 insertions(+), 20 deletions(-)
arch/arm/cpu/armv7/mx6/Kconfig +1 -0
@@ -160,6 +160,7 @@ config TARGET_MX6QARM2 config TARGET_MX6Q_ICORE bool "Support Engicam i.Core" + select BOARD_LATE_INIT select MX6QDL select OF_CONTROL select DM
board/engicam/icorem6/icorem6.c +19 -0
@@ -205,6 +205,25 @@ int board_early_init_f(void)return 0 ; } +int board_late_init (void ) +{ +switch ((imx6_src_get_boot_mode () &IMX6_BMODE_MASK ) >> +IMX6_BMODE_SHIFT ) { +case IMX6_BMODE_SD : +case IMX6_BMODE_ESD : +setenv ("modeboot" ,"mmcboot" ); +break ; +case IMX6_BMODE_NAND : +setenv ("modeboot" ,"nandboot" ); +break ; +default : +setenv ("modeboot" ,"" ); +break ; + } + +return 0 ; +} +int board_init (void ) {/* Address of boot parameters */
include/configs/imx6qdl_icore.h +16 -20
@@ -64,7 +64,7 @@"fitboot=echo Booting FIT image from mmc ...; " \"run mmcargs; " \"bootm ${loadaddr}\0" \ -"mmcboot=echo Booting from mmc ...; " \ +"_mmcboot=run mmcargs; " \"run mmcargs; " \"if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \"if run loadfdt; then " \
@@ -79,6 +79,20 @@"else " \"bootm; " \"fi\0" \ +"mmcboot=echo Booting from mmc ...; " \ +"if mmc rescan; then " \ +"if run loadbootscript; then " \ +"run bootscript; " \ +"else " \ +"if run loadfit; then " \ +"run fitboot; " \ +"else " \ +"if run loadimage; then " \ +"run _mmcboot; " \ +"fi; " \ +"fi; " \ +"fi; " \ +"fi\0" \"nandboot=echo Booting from nand ...; " \"if mtdparts; then " \"echo Starting nand boot ...; " \
@@ -90,25 +104,7 @@"nand read ${fdt_addr} dtb 0x100000; " \ "bootm ${loadaddr} - ${fdt_addr}\0" -#ifdef CONFIG_NAND_MXS -# define CONFIG_BOOTCOMMAND "run nandboot" -#else -# define CONFIG_BOOTCOMMAND \ - "mmc dev ${mmcdev};" \ - "if mmc rescan; then " \ - "if run loadbootscript; then " \ - "run bootscript; " \ - "else " \ - "if run loadfit; then " \ - "run fitboot; " \ - "else " \ - "if run loadimage; then " \ - "run mmcboot; " \ - "fi; " \ - "fi; " \ - "fi; " \ - "fi" -#endif +#define CONFIG_BOOTCOMMAND "run $modeboot"/* Miscellaneous configurable options */ #define CONFIG_SYS_MEMTEST_START 0x80000000
Signature · 1 line
1.9.1
PATCH 2/5 i.MX6Q: icorem6: Add mmc_late_init
From: Jagan Teki <[email protected]>
Let the runtime code can set the mmcdev and mmcroot based on the devno using mmc_get_env_dev instead of defining separately in build-time configs using mmc_late_init func.
--- board/engicam/icorem6/icorem6.c | 22 ++++++++++++++++++++++ include/configs/imx6qdl_icore.h | 2 -- 2 files changed, 22 insertions(+), 2 deletions(-)
board/engicam/icorem6/icorem6.c +22 -0
@@ -7,6 +7,7 @@*/ #include <common.h> +#include <mmc.h> #include <asm/io.h> #include <asm/gpio.h>
@@ -205,12 +206,33 @@ int board_early_init_f(void)return 0 ; } +#ifdef CONFIG_ENV_IS_IN_MMC +static void mmc_late_init (void ) +{ +char cmd[32 ]; +char mmcblk[32 ]; +u32 dev_no =mmc_get_env_dev (); + +setenv_ulong ("mmcdev" , dev_no); + +/* Set mmcblk env */ +sprintf (mmcblk,"/dev/mmcblk%dp2 rootwait rw" , dev_no); +setenv ("mmcroot" , mmcblk); + +sprintf (cmd,"mmc dev %d" , dev_no); +run_command (cmd,0 ); +} +#endif +int board_late_init (void ) {switch ((imx6_src_get_boot_mode () &IMX6_BMODE_MASK ) >>IMX6_BMODE_SHIFT ) {case IMX6_BMODE_SD :case IMX6_BMODE_ESD : +#ifdef CONFIG_ENV_IS_IN_MMC +mmc_late_init (); +#endif setenv ("modeboot" ,"mmcboot" );break ;case IMX6_BMODE_NAND :
include/configs/imx6qdl_icore.h +0 -2
@@ -45,9 +45,7 @@"fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \"fdt_addr=0x18000000\0" \"boot_fdt=try\0" \ -"mmcdev=0\0" \"mmcpart=1\0" \ -"mmcroot=/dev/mmcblk0p2 rootwait rw\0" \"nandroot=ubi0:rootfs rootfstype=ubifs\0" \"mmcautodetect=yes\0" \"mmcargs=setenv bootargs console=${console},${baudrate} " \
Signature · 1 line
1.9.1
PATCH 3/5 i.MX6UL: geam6ul: Add modeboot env via board_late_init
In reply to Jagan TekiFrom: Jagan Teki <[email protected]>
Add runtime, modeboot env which is setting mmcboot, or nandboot based on the bootdevice so-that conditional macros b/w MMC and NAND for CONFIG_BOOTCOMMAND should be avoided in config files.
--- arch/arm/cpu/armv7/mx6/Kconfig | 1 + board/engicam/geam6ul/geam6ul.c | 19 +++++++++++++++++++ include/configs/imx6ul_geam.h | 35 ++++++++++++++++------------------- 3 files changed, 36 insertions(+), 19 deletions(-)
arch/arm/cpu/armv7/mx6/Kconfig +1 -0
@@ -244,6 +244,7 @@ config TARGET_MX6UL_14X14_EVK config TARGET_MX6UL_GEAM bool "Support Engicam GEAM6UL" + select BOARD_LATE_INIT select MX6UL select OF_CONTROL select DM
board/engicam/geam6ul/geam6ul.c +19 -0
@@ -103,6 +103,25 @@ static void setup_gpmi_nand(void) }#endif /* CONFIG_NAND_MXS */ +int board_late_init (void ) +{ +switch ((imx6_src_get_boot_mode () &IMX6_BMODE_MASK ) >> +IMX6_BMODE_SHIFT ) { +case IMX6_BMODE_SD : +case IMX6_BMODE_ESD : +setenv ("modeboot" ,"mmcboot" ); +break ; +case IMX6_BMODE_NAND : +setenv ("modeboot" ,"nandboot" ); +break ; +default : +setenv ("modeboot" ,"" ); +break ; + } + +return 0 ; +} +int board_init (void ) {/* Address of boot parameters */
include/configs/imx6ul_geam.h +16 -19
@@ -63,7 +63,7 @@"fitboot=echo Booting FIT image from mmc ...; " \"run mmcargs; " \"bootm ${loadaddr}\0" \ -"mmcboot=echo Booting from mmc ...; " \ +"_mmcboot=run mmcargs; " \"run mmcargs; " \"if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \"if run loadfdt; then " \
@@ -78,6 +78,20 @@"else " \"bootm; " \"fi\0" \ +"mmcboot=echo Booting from mmc ...; " \ +"if mmc rescan; then " \ +"if run loadbootscript; then " \ +"run bootscript; " \ +"else " \ +"if run loadfit; then " \ +"run fitboot; " \ +"else " \ +"if run loadimage; then " \ +"run _mmcboot; " \ +"fi; " \ +"fi; " \ +"fi; " \ +"fi\0" \"nandboot=echo Booting from nand ...; " \"if mtdparts; then " \"echo Starting nand boot ...; " \
@@ -89,24 +103,7 @@"nand read ${fdt_addr} dtb 0x100000; " \ "bootm ${loadaddr} - ${fdt_addr}\0" -#ifdef CONFIG_NAND_MXS -# define CONFIG_BOOTCOMMAND "run nandboot" -#else -# define CONFIG_BOOTCOMMAND \ - "if mmc rescan; then " \ - "if run loadbootscript; then " \ - "run bootscript; " \ - "else " \ - "if run loadfit; then " \ - "run fitboot; " \ - "else " \ - "if run loadimage; then " \ - "run mmcboot; " \ - "fi; " \ - "fi; " \ - "fi; " \ - "fi" -#endif +#define CONFIG_BOOTCOMMAND "run $modeboot"/* Miscellaneous configurable options */ #define CONFIG_SYS_MEMTEST_START 0x80000000
Signature · 1 line
1.9.1
PATCH 4/5 i.MX6UL: geam6ul: Add mmc_late_init
In reply to Jagan TekiFrom: Jagan Teki <[email protected]>
Let the runtime code can set the mmcdev and mmcroot based on the devno using mmc_get_env_dev instead of defining separately in build-time configs using mmc_late_init func.
--- board/engicam/geam6ul/geam6ul.c | 22 ++++++++++++++++++++++ include/configs/imx6ul_geam.h | 2 -- 2 files changed, 22 insertions(+), 2 deletions(-)
board/engicam/geam6ul/geam6ul.c +22 -0
@@ -7,6 +7,7 @@*/ #include <common.h> +#include <mmc.h> #include <asm/io.h> #include <asm/gpio.h>
@@ -103,12 +104,33 @@ static void setup_gpmi_nand(void) }#endif /* CONFIG_NAND_MXS */ +#ifdef CONFIG_ENV_IS_IN_MMC +static void mmc_late_init (void ) +{ +char cmd[32 ]; +char mmcblk[32 ]; +u32 dev_no =mmc_get_env_dev (); + +setenv_ulong ("mmcdev" , dev_no); + +/* Set mmcblk env */ +sprintf (mmcblk,"/dev/mmcblk%dp2 rootwait rw" , dev_no); +setenv ("mmcroot" , mmcblk); + +sprintf (cmd,"mmc dev %d" , dev_no); +run_command (cmd,0 ); +} +#endif +int board_late_init (void ) {switch ((imx6_src_get_boot_mode () &IMX6_BMODE_MASK ) >>IMX6_BMODE_SHIFT ) {case IMX6_BMODE_SD :case IMX6_BMODE_ESD : +#ifdef CONFIG_ENV_IS_IN_MMC +mmc_late_init (); +#endif setenv ("modeboot" ,"mmcboot" );break ;case IMX6_BMODE_NAND :
include/configs/imx6ul_geam.h +0 -2
@@ -44,9 +44,7 @@"fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \"fdt_addr=0x87800000\0" \"boot_fdt=try\0" \ -"mmcdev=0\0" \"mmcpart=1\0" \ -"mmcroot=/dev/mmcblk0p2 rootwait rw\0" \"nandroot=ubi0:rootfs rootfstype=ubifs\0" \"mmcautodetect=yes\0" \"mmcargs=setenv bootargs console=${console},${baudrate} " \
Signature · 1 line
1.9.1
PATCH 5/5 MAINTAINERS: Fix ARM FREESCALE IMX files
In reply to Jagan TekiFrom: Jagan Teki <[email protected]>
- Remove arch/arm/cpu/arm926ejs/imx/ which is not available
- arch/arm/cpu/imx-common/ => arch/arm/imx-common/
--- MAINTAINERS | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
MAINTAINERS +1 -2
@@ -93,10 +93,9 @@ S: Maintained T: git git://git.denx.de/u-boot-imx.git F: arch/arm/cpu/arm1136/mx*/ F: arch/arm/cpu/arm926ejs/mx*/ -F: arch/arm/cpu/arm926ejs/imx/ F: arch/arm/cpu/armv7/mx*/ F: arch/arm/cpu/armv7/vf610/ -F: arch/arm/cpu/imx-common/ +F: arch/arm/imx-common/ F: arch/arm/include/asm/arch-imx/ F: arch/arm/include/asm/arch-mx*/ F: arch/arm/include/asm/arch-vf610/
Signature · 1 line
1.9.1
PATCH 5/5 MAINTAINERS: Fix ARM FREESCALE IMX files
Quoted 18 lines · Jagan Teki
From: Jagan Teki <[email protected]>
- Remove
arch/arm/cpu/arm926ejs/imx/which is not available
-arch/arm/cpu/imx-common/=>arch/arm/imx-common/Cc Stefano Babic <[email protected]>Signed-off-by Jagan Teki <[email protected]>--- MAINTAINERS | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)MAINTAINERS +0
-0@@ -93,10 +93,9 @@ S: Maintained T: git git://git.denx.de/u-boot-imx.git
MAINTAINERS S: Maintained · line 101
Quoted 10 lines
MAINTAINERS +1
-2F: arch/arm/cpu/arm1136/mx*/ F: arch/arm/cpu/arm926ejs/mx*/ -F: arch/arm/cpu/arm926ejs/imx/ F: arch/arm/cpu/armv7/mx*/ F: arch/arm/cpu/armv7/vf610/ -F: arch/arm/cpu/imx-common/ +F: arch/arm/imx-common/ F: arch/arm/include/asm/arch-imx/ F: arch/arm/include/asm/arch-mx*/ F: arch/arm/include/asm/arch-vf610/
Applied to u-boot-imx, thanks!
Best regards,
Stefano Babic
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================
A message that is not in the archive (sent off-list or not yet received): CAD6G_RQ-wA0OUg2N2WEQ0NkAZFP9e8D7jdA8hnGOjJgrBxDnZg@mail.gmail.com
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): CAD6G_RStc9x5g5MUrbYiZCngnGLYZhJkhO0t4g=QcJ6yZBWGWg@mail.gmail.com
PATCH 1/5 i.MX6Q: icorem6: Add modeboot env via board_late_init
Hi Stefano,
Quoted 67 lines · Jagan Teki
Quoted 66 lines · Stefano Babic
Quoted 10 lines · Jagan Teki
Hi Stefano,
Quoted 7 lines · Jagan Teki
From: Jagan Teki <[email protected]>
Add runtime, modeboot env which is setting mmcboot, or nandboot based on the bootdevice so-that conditional macros b/w MMC and NAND for
CONFIG_BOOTCOMMANDshould be avoided in config files.Quoted 7 lines
Quoted 4 lines
Cc Matteo Lisi <[email protected]>Cc Michael Trimarchi <[email protected]>Cc Stefano Babic <[email protected]>Signed-off-by Jagan Teki <[email protected]>Can you take this series?
I could take, but I am just asking if you do not find another way to avoid code duplication. You have very similar boards, and code is simply duplicated. Let's see Pathch 1/5 and Patch 3/5:
board/engicam/icorem6/icorem6.c +18
-0+int board_late_init (void ) +{ +switch ((imx6_src_get_boot_mode () &IMX6_BMODE_MASK ) >> +IMX6_BMODE_SHIFT ) { +case IMX6_BMODE_SD : +case IMX6_BMODE_ESD : +setenv ("modeboot" ,"mmcboot" ); +break ; +case IMX6_BMODE_NAND : +setenv ("modeboot" ,"nandboot" ); +break ; +default : +setenv ("modeboot" ,"" ); +break ; + } + +return 0 ; +}And patch 3/5:
board/engicam/icorem6/icorem6.c +19
-0+int board_late_init (void ) +{ +switch ((imx6_src_get_boot_mode () &IMX6_BMODE_MASK ) >> +IMX6_BMODE_SHIFT ) { +case IMX6_BMODE_SD : +case IMX6_BMODE_ESD : +setenv ("modeboot" ,"mmcboot" ); +break ; +case IMX6_BMODE_NAND : +setenv ("modeboot" ,"nandboot" ); +break ; +default : +setenv ("modeboot" ,"" ); +break ; + } + +return 0 ; +} +
Quoted 5 lines
Quoted 3 lines
Why do you not use the same factorization as for Freescale's boards ? A board/engicam/common could contain shared code, and you reuse it among boards. The same for the default environment: it is duplicated again.
Yes, I understand completely. will factorized the code in coming MW.
Any help?
thanks!
Signature · 4 lines
Jagan Teki Free Software Engineer | www.openedev.com U-Boot, Linux | Upstream Maintainer Hyderabad, India.