[PATCH 0/5] imx: imx8ulp: add binman support

Hi,
This series adds binman support for i.MX 8ULP processors.
It required to update the imx8mkimage tool a bit as well as adding new container configuration files. But otherwise it is pretty close to what has been done on other i.MX processors like the 93.
Regards, Gary
Gary Bisson (5): tools: imx8image: fix soc variable for ULP tools: imx8image: add upower image support spl: binman: Disable u_boot_any symbols for i.MX 8ULP boards mach-imx: Add i.MX 8ULP binman support imx8ulp_evk: enable binman support
arch/arm/dts/imx8ulp-evk-u-boot.dtsi | 2 + arch/arm/dts/imx8ulp-u-boot.dtsi | 63 +++++++++++++++++++++++++ arch/arm/mach-imx/Makefile | 4 +- arch/arm/mach-imx/imx8ulp/Kconfig | 1 + arch/arm/mach-imx/imx8ulp/container.cfg | 7 +++ arch/arm/mach-imx/imx8ulp/imximage.cfg | 9 ++++ common/spl/Kconfig | 2 +- common/spl/Kconfig.tpl | 2 +- common/spl/Kconfig.vpl | 2 +- configs/imx8ulp_evk_defconfig | 3 +- include/imx8image.h | 1 + tools/imx8image.c | 7 ++- 12 files changed, 96 insertions(+), 7 deletions(-) create mode 100644 arch/arm/dts/imx8ulp-u-boot.dtsi create mode 100644 arch/arm/mach-imx/imx8ulp/container.cfg create mode 100644 arch/arm/mach-imx/imx8ulp/imximage.cfg

Fixes: 6ec65c8558f (tools: image: support i.MX93)
Currently the ULP token sets the soc as IMX9, making it impossible to differentiate the two families of processors. However, since the 8ULP requires specific binaries like upower which do not exist in 93, they need to be separated.
Signed-off-by: Gary Bisson bisson.gary@gmail.com --- tools/imx8image.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/imx8image.c b/tools/imx8image.c index 76d0cd62dcc..53ab16637ba 100644 --- a/tools/imx8image.c +++ b/tools/imx8image.c @@ -119,7 +119,7 @@ static void parse_cfg_cmd(image_t *param_stack, int32_t cmd, char *token, } else if (!strncmp(token, "IMX8QM", 6)) { soc = QM; } else if (!strncmp(token, "ULP", 3)) { - soc = IMX9; + soc = ULP; } else if (!strncmp(token, "IMX9", 4)) { soc = IMX9; } else {

Subject: [PATCH 1/5] tools: imx8image: fix soc variable for ULP
Fixes: 6ec65c8558f (tools: image: support i.MX93)
Put this just before your "Signed-off-by".
Currently the ULP token sets the soc as IMX9, making it impossible to differentiate the two families of processors. However, since the 8ULP requires specific binaries like upower which do not exist in 93, they need to be separated.
Signed-off-by: Gary Bisson bisson.gary@gmail.com
Besides the minor comment: Reviewed-by: Peng Fan peng.fan@nxp.com
Regards, Peng.

On Mon, Aug 5, 2024 at 9:43 AM Gary Bisson bisson.gary@gmail.com wrote:
Fixes: 6ec65c8558f (tools: image: support i.MX93)
Currently the ULP token sets the soc as IMX9, making it impossible to differentiate the two families of processors. However, since the 8ULP requires specific binaries like upower which do not exist in 93, they need to be separated.
Signed-off-by: Gary Bisson bisson.gary@gmail.com
Applied the series, thanks.

Part of the upower management was included in a previous commit [1]. This patch only adds the bits required to properly parse a config file that would include the binary as follows: IMAGE PWR upower.bin
[1] 6ec65c8558f (tools: image: support i.MX93)
Signed-off-by: Gary Bisson bisson.gary@gmail.com --- include/imx8image.h | 1 + tools/imx8image.c | 5 +++++ 2 files changed, 6 insertions(+)
diff --git a/include/imx8image.h b/include/imx8image.h index 32064bfeeb8..85fb642ae39 100644 --- a/include/imx8image.h +++ b/include/imx8image.h @@ -162,6 +162,7 @@ enum imx8image_cmd { enum imx8image_core_type { CFG_CORE_INVALID, CFG_SCU, + CFG_PWR, CFG_M40, CFG_M41, CFG_A35, diff --git a/tools/imx8image.c b/tools/imx8image.c index 53ab16637ba..5eb4b9612c8 100644 --- a/tools/imx8image.c +++ b/tools/imx8image.c @@ -57,6 +57,7 @@ static table_entry_t imx8image_cmds[] = {
static table_entry_t imx8image_core_entries[] = { {CFG_SCU, "SCU", "scu core", }, + {CFG_PWR, "PWR", "uPower core", }, {CFG_M40, "M40", "M4 core 0", }, {CFG_M41, "M41", "M4 core 1", }, {CFG_A35, "A35", "A35 core", }, @@ -181,6 +182,10 @@ static void parse_cfg_fld(image_t *param_stack, int32_t *cmd, char *token, param_stack[p_idx].option = SCFW; param_stack[p_idx++].filename = token; break; + case CFG_PWR: + param_stack[p_idx].option = UPOWER; + param_stack[p_idx++].filename = token; + break; case CFG_M40: param_stack[p_idx].option = M40; param_stack[p_idx].ext = 0;

Subject: [PATCH 2/5] tools: imx8image: add upower image support
Part of the upower management was included in a previous commit [1]. This patch only adds the bits required to properly parse a config file that would include the binary as follows: IMAGE PWR upower.bin
[1] 6ec65c8558f (tools: image: support i.MX93)
Signed-off-by: Gary Bisson bisson.gary@gmail.com
Reviewed-by: Peng Fan peng.fan@nxp.com

This is extending commit da96f93cda9 ("spl: binman: Disable u_boot_any symbols for i.MX93 boards") to i.MX 8ULP boards.
Signed-off-by: Gary Bisson bisson.gary@gmail.com --- common/spl/Kconfig | 2 +- common/spl/Kconfig.tpl | 2 +- common/spl/Kconfig.vpl | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/common/spl/Kconfig b/common/spl/Kconfig index 6f56ca911c1..c08ff064493 100644 --- a/common/spl/Kconfig +++ b/common/spl/Kconfig @@ -206,7 +206,7 @@ config SPL_BINMAN_SYMBOLS config SPL_BINMAN_UBOOT_SYMBOLS bool "Declare binman symbols for U-Boot phases in SPL" depends on SPL_BINMAN_SYMBOLS - default n if ARCH_IMX8M || ARCH_IMX9 + default n if ARCH_IMX8M || ARCH_IMX8ULP || ARCH_IMX9 default y help This enables use of symbols in SPL which refer to U-Boot phases, diff --git a/common/spl/Kconfig.tpl b/common/spl/Kconfig.tpl index 4ee3b9b826d..92d4d43ec87 100644 --- a/common/spl/Kconfig.tpl +++ b/common/spl/Kconfig.tpl @@ -23,7 +23,7 @@ config TPL_BINMAN_SYMBOLS config TPL_BINMAN_UBOOT_SYMBOLS bool "Declare binman symbols for U-Boot phases in TPL" depends on TPL_BINMAN_SYMBOLS - default n if ARCH_IMX8M || ARCH_IMX9 + default n if ARCH_IMX8M || ARCH_IMX8ULP || ARCH_IMX9 default y help This enables use of symbols in TPL which refer to U-Boot phases, diff --git a/common/spl/Kconfig.vpl b/common/spl/Kconfig.vpl index f1993026bba..d06f36d4ee4 100644 --- a/common/spl/Kconfig.vpl +++ b/common/spl/Kconfig.vpl @@ -243,7 +243,7 @@ config VPL_BINMAN_SYMBOLS config VPL_BINMAN_UBOOT_SYMBOLS bool "Declare binman symbols for U-Boot phases in VPL" depends on VPL_BINMAN_SYMBOLS - default n if ARCH_IMX8M || ARCH_IMX9 + default n if ARCH_IMX8M || ARCH_IMX8ULP || ARCH_IMX9 default y help This enables use of symbols in VPL which refer to U-Boot phases,

Subject: [PATCH 3/5] spl: binman: Disable u_boot_any symbols for i.MX 8ULP boards
This is extending commit da96f93cda9 ("spl: binman: Disable u_boot_any symbols for i.MX93 boards") to i.MX 8ULP boards.
Signed-off-by: Gary Bisson bisson.gary@gmail.com
Reviewed-by: Peng Fan peng.fan@nxp.com

- Re-use i.MX 93 Makefile target as similar boot process - Create imx8ulp-u-boot.dtsi for binman image architecture - Create both SPL and U-Boot containers configuration
Key differences between the 93 and 8ULP SPL container are: - No LPDDR training library needed for 8ULP - 8ULP requires a uPower binary (RISC-V core) for power management - 8ULP also requires a M33 binary to work properly
Signed-off-by: Gary Bisson bisson.gary@gmail.com --- arch/arm/dts/imx8ulp-u-boot.dtsi | 63 +++++++++++++++++++++++++ arch/arm/mach-imx/Makefile | 4 +- arch/arm/mach-imx/imx8ulp/container.cfg | 7 +++ arch/arm/mach-imx/imx8ulp/imximage.cfg | 9 ++++ 4 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 arch/arm/dts/imx8ulp-u-boot.dtsi create mode 100644 arch/arm/mach-imx/imx8ulp/container.cfg create mode 100644 arch/arm/mach-imx/imx8ulp/imximage.cfg
diff --git a/arch/arm/dts/imx8ulp-u-boot.dtsi b/arch/arm/dts/imx8ulp-u-boot.dtsi new file mode 100644 index 00000000000..30baaeff8ef --- /dev/null +++ b/arch/arm/dts/imx8ulp-u-boot.dtsi @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: GPL-2.0+ + +#ifdef CONFIG_BINMAN +/ { + binman: binman { + multiple-images; + }; +}; + +&binman { + u-boot-spl-ddr { + align = <4>; + align-size = <4>; + filename = "u-boot-spl-ddr.bin"; + pad-byte = <0xff>; + + u-boot-spl { + align-end = <4>; + filename = "u-boot-spl.bin"; + }; + }; + + spl { + filename = "spl.bin"; + + mkimage { + args = "-n spl/u-boot-spl.cfgout -T imx8image -e 0x22020000"; + + blob { + filename = "u-boot-spl-ddr.bin"; + }; + }; + }; + + u-boot-container { + filename = "u-boot-container.bin"; + + mkimage { + args = "-n u-boot-container.cfgout -T imx8image -e 0x0"; + + blob { + filename = "u-boot.bin"; + }; + }; + }; + + imx-boot { + filename = "flash.bin"; + pad-byte = <0x00>; + + spl: blob-ext@1 { + filename = "spl.bin"; + offset = <0x0>; + align-size = <0x400>; + align = <0x400>; + }; + + uboot: blob-ext@2 { + filename = "u-boot-container.bin"; + }; + }; +}; +#endif diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile index ef0caed3f7f..b311d176d64 100644 --- a/arch/arm/mach-imx/Makefile +++ b/arch/arm/mach-imx/Makefile @@ -129,7 +129,7 @@ DEPFILE_EXISTS := $(shell $(CPP) $(cpp_flags) -x c -o u-boot-dtb.cfgout $(srctre else ifeq ($(CONFIG_ARCH_IMX8M), y) IMAGE_TYPE := imx8mimage DEPFILE_EXISTS := 0 -else ifeq ($(CONFIG_ARCH_IMX9), y) +else ifeq ($(CONFIG_ARCH_IMX9)$(CONFIG_ARCH_IMX8ULP), y) IMAGE_TYPE := imx8image DEPFILE_EXISTS := 0 else @@ -215,7 +215,7 @@ flash.bin: spl/u-boot-spl.bin FORCE endif endif
-ifeq ($(CONFIG_ARCH_IMX9), y) +ifeq ($(CONFIG_ARCH_IMX9)$(CONFIG_ARCH_IMX8ULP), y)
quiet_cmd_imx9_check = CHECK $@ cmd_imx9_check = $(srctree)/tools/imx9_image.sh $@ diff --git a/arch/arm/mach-imx/imx8ulp/container.cfg b/arch/arm/mach-imx/imx8ulp/container.cfg new file mode 100644 index 00000000000..029b79128c8 --- /dev/null +++ b/arch/arm/mach-imx/imx8ulp/container.cfg @@ -0,0 +1,7 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +BOOT_FROM SD 0x400 +SOC_TYPE ULP +CONTAINER +IMAGE A35 bl31.bin 0x20040000 +IMAGE A35 u-boot.bin CONFIG_TEXT_BASE diff --git a/arch/arm/mach-imx/imx8ulp/imximage.cfg b/arch/arm/mach-imx/imx8ulp/imximage.cfg new file mode 100644 index 00000000000..a55359fee23 --- /dev/null +++ b/arch/arm/mach-imx/imx8ulp/imximage.cfg @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +BOOT_FROM SD 0x400 +SOC_TYPE ULP +APPEND mx8ulpa2-ahab-container.img +CONTAINER +IMAGE PWR upower.bin +IMAGE M40 m33_image.bin 0x1ffc2000 +IMAGE A35 u-boot-spl-ddr.bin 0x22020000

Subject: [PATCH 4/5] mach-imx: Add i.MX 8ULP binman support
- Re-use i.MX 93 Makefile target as similar boot process
- Create imx8ulp-u-boot.dtsi for binman image architecture
- Create both SPL and U-Boot containers configuration
Key differences between the 93 and 8ULP SPL container are:
- No LPDDR training library needed for 8ULP
- 8ULP requires a uPower binary (RISC-V core) for power management
- 8ULP also requires a M33 binary to work properly
Signed-off-by: Gary Bisson bisson.gary@gmail.com
Reviewed-by: Peng Fan peng.fan@nxp.com

Signed-off-by: Gary Bisson bisson.gary@gmail.com --- arch/arm/dts/imx8ulp-evk-u-boot.dtsi | 2 ++ arch/arm/mach-imx/imx8ulp/Kconfig | 1 + configs/imx8ulp_evk_defconfig | 3 ++- 3 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/arch/arm/dts/imx8ulp-evk-u-boot.dtsi b/arch/arm/dts/imx8ulp-evk-u-boot.dtsi index 608bde3a2a3..f67fe166d31 100644 --- a/arch/arm/dts/imx8ulp-evk-u-boot.dtsi +++ b/arch/arm/dts/imx8ulp-evk-u-boot.dtsi @@ -3,6 +3,8 @@ * Copyright 2021 NXP */
+#include "imx8ulp-u-boot.dtsi" + / { mu@27020000 { compatible = "fsl,imx8ulp-mu"; diff --git a/arch/arm/mach-imx/imx8ulp/Kconfig b/arch/arm/mach-imx/imx8ulp/Kconfig index 49ea25250a3..6ce6039faf9 100644 --- a/arch/arm/mach-imx/imx8ulp/Kconfig +++ b/arch/arm/mach-imx/imx8ulp/Kconfig @@ -23,6 +23,7 @@ choice
config TARGET_IMX8ULP_EVK bool "imx8ulp_evk" + select BINMAN select IMX8ULP select SUPPORT_SPL select IMX8ULP_DRAM diff --git a/configs/imx8ulp_evk_defconfig b/configs/imx8ulp_evk_defconfig index b302df1f351..0f0748b6792 100644 --- a/configs/imx8ulp_evk_defconfig +++ b/configs/imx8ulp_evk_defconfig @@ -8,7 +8,7 @@ CONFIG_NR_DRAM_BANKS=2 CONFIG_SF_DEFAULT_SPEED=40000000 CONFIG_ENV_SIZE=0x2000 CONFIG_ENV_OFFSET=0x400000 -CONFIG_IMX_CONFIG="" +CONFIG_IMX_CONFIG="arch/arm/mach-imx/imx8ulp/imximage.cfg" CONFIG_DM_GPIO=y CONFIG_DEFAULT_DEVICE_TREE="imx8ulp-evk" CONFIG_SPL_TEXT_BASE=0x22020000 @@ -38,6 +38,7 @@ CONFIG_SPL_MAX_SIZE=0x25000 CONFIG_SPL_BOARD_INIT=y CONFIG_SPL_BOOTROM_SUPPORT=y CONFIG_SPL_LOAD_IMX_CONTAINER=y +CONFIG_IMX_CONTAINER_CFG="arch/arm/mach-imx/imx8ulp/container.cfg" # CONFIG_SPL_SHARES_INIT_SP_ADDR is not set CONFIG_SPL_SYS_MALLOC=y CONFIG_SPL_HAS_CUSTOM_MALLOC_START=y

Subject: [PATCH 5/5] imx8ulp_evk: enable binman support
Signed-off-by: Gary Bisson bisson.gary@gmail.com
arch/arm/dts/imx8ulp-evk-u-boot.dtsi | 2 ++ arch/arm/mach-imx/imx8ulp/Kconfig | 1 + configs/imx8ulp_evk_defconfig | 3 ++- 3 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/arch/arm/dts/imx8ulp-evk-u-boot.dtsi b/arch/arm/dts/imx8ulp-evk-u-boot.dtsi index 608bde3a2a3..f67fe166d31 100644 --- a/arch/arm/dts/imx8ulp-evk-u-boot.dtsi +++ b/arch/arm/dts/imx8ulp-evk-u-boot.dtsi @@ -3,6 +3,8 @@
- Copyright 2021 NXP
*/
+#include "imx8ulp-u-boot.dtsi"
/ { mu@27020000 { compatible = "fsl,imx8ulp-mu"; diff --git a/arch/arm/mach-imx/imx8ulp/Kconfig b/arch/arm/mach- imx/imx8ulp/Kconfig index 49ea25250a3..6ce6039faf9 100644 --- a/arch/arm/mach-imx/imx8ulp/Kconfig +++ b/arch/arm/mach-imx/imx8ulp/Kconfig @@ -23,6 +23,7 @@ choice
config TARGET_IMX8ULP_EVK bool "imx8ulp_evk"
select BINMAN
Tab, no space.
Regards, Peng.

Hi Gary,
On Mon, Aug 5, 2024 at 9:43 AM Gary Bisson bisson.gary@gmail.com wrote:
Gary Bisson (5): tools: imx8image: fix soc variable for ULP tools: imx8image: add upower image support spl: binman: Disable u_boot_any symbols for i.MX 8ULP boards mach-imx: Add i.MX 8ULP binman support imx8ulp_evk: enable binman support
Thanks for adding imx8ulp binman support.
One thing that is missing is a doc/board/nxp/imx8ulp_evk.rst that lists the required firmware files to build and boot the board.
Could you please add it?

Hi Fabio,
On Mon, Aug 05, 2024 at 10:31:34AM -0300, Fabio Estevam wrote:
Hi Gary,
On Mon, Aug 5, 2024 at 9:43 AM Gary Bisson bisson.gary@gmail.com wrote:
Gary Bisson (5): tools: imx8image: fix soc variable for ULP tools: imx8image: add upower image support spl: binman: Disable u_boot_any symbols for i.MX 8ULP boards mach-imx: Add i.MX 8ULP binman support imx8ulp_evk: enable binman support
Thanks for adding imx8ulp binman support.
One thing that is missing is a doc/board/nxp/imx8ulp_evk.rst that lists the required firmware files to build and boot the board.
Could you please add it?
Sure, I'll add it and send a V2 by tomorrow (hopefully today).
Regards, Gary

Hi,
This series adds binman support for i.MX 8ULP processors.
It required to update the imx8mkimage tool a bit as well as adding new container configuration files. But otherwise it is pretty close to what has been done on other i.MX processors like the 93.
Changelog v1 > v2: - Add reviewed-by tags from v1 - Fix commit log order of patch #1 (request from Peng) - Fix indentation of patch #5 (request from Peng) - Add doc on how to build a bootable binary (request from Fabio)
Regards, Gary
Gary Bisson (5): tools: imx8image: fix soc variable for ULP tools: imx8image: add upower image support spl: binman: Disable u_boot_any symbols for i.MX 8ULP boards mach-imx: Add i.MX 8ULP binman support imx8ulp_evk: enable binman support
arch/arm/dts/imx8ulp-evk-u-boot.dtsi | 2 + arch/arm/dts/imx8ulp-u-boot.dtsi | 63 ++++++++++++++++++++ arch/arm/mach-imx/Makefile | 4 +- arch/arm/mach-imx/imx8ulp/Kconfig | 1 + arch/arm/mach-imx/imx8ulp/container.cfg | 7 +++ arch/arm/mach-imx/imx8ulp/imximage.cfg | 9 +++ common/spl/Kconfig | 2 +- common/spl/Kconfig.tpl | 2 +- common/spl/Kconfig.vpl | 2 +- configs/imx8ulp_evk_defconfig | 3 +- doc/board/nxp/imx8ulp_evk.rst | 79 +++++++++++++++++++++++++ doc/board/nxp/index.rst | 1 + include/imx8image.h | 1 + tools/imx8image.c | 7 ++- 14 files changed, 176 insertions(+), 7 deletions(-) create mode 100644 arch/arm/dts/imx8ulp-u-boot.dtsi create mode 100644 arch/arm/mach-imx/imx8ulp/container.cfg create mode 100644 arch/arm/mach-imx/imx8ulp/imximage.cfg create mode 100644 doc/board/nxp/imx8ulp_evk.rst

Currently the ULP token sets the soc as IMX9, making it impossible to differentiate the two families of processors. However, since the 8ULP requires specific binaries like upower which do not exist in 93, they need to be separated.
Fixes: 6ec65c8558f (tools: image: support i.MX93)
Signed-off-by: Gary Bisson bisson.gary@gmail.com Reviewed-by: Peng Fan peng.fan@nxp.com --- tools/imx8image.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/imx8image.c b/tools/imx8image.c index 76d0cd62dcc..53ab16637ba 100644 --- a/tools/imx8image.c +++ b/tools/imx8image.c @@ -119,7 +119,7 @@ static void parse_cfg_cmd(image_t *param_stack, int32_t cmd, char *token, } else if (!strncmp(token, "IMX8QM", 6)) { soc = QM; } else if (!strncmp(token, "ULP", 3)) { - soc = IMX9; + soc = ULP; } else if (!strncmp(token, "IMX9", 4)) { soc = IMX9; } else {

Part of the upower management was included in a previous commit [1]. This patch only adds the bits required to properly parse a config file that would include the binary as follows: IMAGE PWR upower.bin
[1] 6ec65c8558f (tools: image: support i.MX93)
Signed-off-by: Gary Bisson bisson.gary@gmail.com Reviewed-by: Peng Fan peng.fan@nxp.com --- include/imx8image.h | 1 + tools/imx8image.c | 5 +++++ 2 files changed, 6 insertions(+)
diff --git a/include/imx8image.h b/include/imx8image.h index 32064bfeeb8..85fb642ae39 100644 --- a/include/imx8image.h +++ b/include/imx8image.h @@ -162,6 +162,7 @@ enum imx8image_cmd { enum imx8image_core_type { CFG_CORE_INVALID, CFG_SCU, + CFG_PWR, CFG_M40, CFG_M41, CFG_A35, diff --git a/tools/imx8image.c b/tools/imx8image.c index 53ab16637ba..5eb4b9612c8 100644 --- a/tools/imx8image.c +++ b/tools/imx8image.c @@ -57,6 +57,7 @@ static table_entry_t imx8image_cmds[] = {
static table_entry_t imx8image_core_entries[] = { {CFG_SCU, "SCU", "scu core", }, + {CFG_PWR, "PWR", "uPower core", }, {CFG_M40, "M40", "M4 core 0", }, {CFG_M41, "M41", "M4 core 1", }, {CFG_A35, "A35", "A35 core", }, @@ -181,6 +182,10 @@ static void parse_cfg_fld(image_t *param_stack, int32_t *cmd, char *token, param_stack[p_idx].option = SCFW; param_stack[p_idx++].filename = token; break; + case CFG_PWR: + param_stack[p_idx].option = UPOWER; + param_stack[p_idx++].filename = token; + break; case CFG_M40: param_stack[p_idx].option = M40; param_stack[p_idx].ext = 0;

This is extending commit da96f93cda9 ("spl: binman: Disable u_boot_any symbols for i.MX93 boards") to i.MX 8ULP boards.
Signed-off-by: Gary Bisson bisson.gary@gmail.com Reviewed-by: Peng Fan peng.fan@nxp.com --- common/spl/Kconfig | 2 +- common/spl/Kconfig.tpl | 2 +- common/spl/Kconfig.vpl | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/common/spl/Kconfig b/common/spl/Kconfig index 6f56ca911c1..c08ff064493 100644 --- a/common/spl/Kconfig +++ b/common/spl/Kconfig @@ -206,7 +206,7 @@ config SPL_BINMAN_SYMBOLS config SPL_BINMAN_UBOOT_SYMBOLS bool "Declare binman symbols for U-Boot phases in SPL" depends on SPL_BINMAN_SYMBOLS - default n if ARCH_IMX8M || ARCH_IMX9 + default n if ARCH_IMX8M || ARCH_IMX8ULP || ARCH_IMX9 default y help This enables use of symbols in SPL which refer to U-Boot phases, diff --git a/common/spl/Kconfig.tpl b/common/spl/Kconfig.tpl index 4ee3b9b826d..92d4d43ec87 100644 --- a/common/spl/Kconfig.tpl +++ b/common/spl/Kconfig.tpl @@ -23,7 +23,7 @@ config TPL_BINMAN_SYMBOLS config TPL_BINMAN_UBOOT_SYMBOLS bool "Declare binman symbols for U-Boot phases in TPL" depends on TPL_BINMAN_SYMBOLS - default n if ARCH_IMX8M || ARCH_IMX9 + default n if ARCH_IMX8M || ARCH_IMX8ULP || ARCH_IMX9 default y help This enables use of symbols in TPL which refer to U-Boot phases, diff --git a/common/spl/Kconfig.vpl b/common/spl/Kconfig.vpl index f1993026bba..d06f36d4ee4 100644 --- a/common/spl/Kconfig.vpl +++ b/common/spl/Kconfig.vpl @@ -243,7 +243,7 @@ config VPL_BINMAN_SYMBOLS config VPL_BINMAN_UBOOT_SYMBOLS bool "Declare binman symbols for U-Boot phases in VPL" depends on VPL_BINMAN_SYMBOLS - default n if ARCH_IMX8M || ARCH_IMX9 + default n if ARCH_IMX8M || ARCH_IMX8ULP || ARCH_IMX9 default y help This enables use of symbols in VPL which refer to U-Boot phases,

- Re-use i.MX 93 Makefile target as similar boot process - Create imx8ulp-u-boot.dtsi for binman image architecture - Create both SPL and U-Boot containers configuration
Key differences between the 93 and 8ULP SPL container are: - No LPDDR training library needed for 8ULP - 8ULP requires a uPower binary (RISC-V core) for power management - 8ULP also requires a M33 binary to work properly
Signed-off-by: Gary Bisson bisson.gary@gmail.com Reviewed-by: Peng Fan peng.fan@nxp.com --- arch/arm/dts/imx8ulp-u-boot.dtsi | 63 +++++++++++++++++++++++++ arch/arm/mach-imx/Makefile | 4 +- arch/arm/mach-imx/imx8ulp/container.cfg | 7 +++ arch/arm/mach-imx/imx8ulp/imximage.cfg | 9 ++++ 4 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 arch/arm/dts/imx8ulp-u-boot.dtsi create mode 100644 arch/arm/mach-imx/imx8ulp/container.cfg create mode 100644 arch/arm/mach-imx/imx8ulp/imximage.cfg
diff --git a/arch/arm/dts/imx8ulp-u-boot.dtsi b/arch/arm/dts/imx8ulp-u-boot.dtsi new file mode 100644 index 00000000000..30baaeff8ef --- /dev/null +++ b/arch/arm/dts/imx8ulp-u-boot.dtsi @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: GPL-2.0+ + +#ifdef CONFIG_BINMAN +/ { + binman: binman { + multiple-images; + }; +}; + +&binman { + u-boot-spl-ddr { + align = <4>; + align-size = <4>; + filename = "u-boot-spl-ddr.bin"; + pad-byte = <0xff>; + + u-boot-spl { + align-end = <4>; + filename = "u-boot-spl.bin"; + }; + }; + + spl { + filename = "spl.bin"; + + mkimage { + args = "-n spl/u-boot-spl.cfgout -T imx8image -e 0x22020000"; + + blob { + filename = "u-boot-spl-ddr.bin"; + }; + }; + }; + + u-boot-container { + filename = "u-boot-container.bin"; + + mkimage { + args = "-n u-boot-container.cfgout -T imx8image -e 0x0"; + + blob { + filename = "u-boot.bin"; + }; + }; + }; + + imx-boot { + filename = "flash.bin"; + pad-byte = <0x00>; + + spl: blob-ext@1 { + filename = "spl.bin"; + offset = <0x0>; + align-size = <0x400>; + align = <0x400>; + }; + + uboot: blob-ext@2 { + filename = "u-boot-container.bin"; + }; + }; +}; +#endif diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile index ef0caed3f7f..b311d176d64 100644 --- a/arch/arm/mach-imx/Makefile +++ b/arch/arm/mach-imx/Makefile @@ -129,7 +129,7 @@ DEPFILE_EXISTS := $(shell $(CPP) $(cpp_flags) -x c -o u-boot-dtb.cfgout $(srctre else ifeq ($(CONFIG_ARCH_IMX8M), y) IMAGE_TYPE := imx8mimage DEPFILE_EXISTS := 0 -else ifeq ($(CONFIG_ARCH_IMX9), y) +else ifeq ($(CONFIG_ARCH_IMX9)$(CONFIG_ARCH_IMX8ULP), y) IMAGE_TYPE := imx8image DEPFILE_EXISTS := 0 else @@ -215,7 +215,7 @@ flash.bin: spl/u-boot-spl.bin FORCE endif endif
-ifeq ($(CONFIG_ARCH_IMX9), y) +ifeq ($(CONFIG_ARCH_IMX9)$(CONFIG_ARCH_IMX8ULP), y)
quiet_cmd_imx9_check = CHECK $@ cmd_imx9_check = $(srctree)/tools/imx9_image.sh $@ diff --git a/arch/arm/mach-imx/imx8ulp/container.cfg b/arch/arm/mach-imx/imx8ulp/container.cfg new file mode 100644 index 00000000000..029b79128c8 --- /dev/null +++ b/arch/arm/mach-imx/imx8ulp/container.cfg @@ -0,0 +1,7 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +BOOT_FROM SD 0x400 +SOC_TYPE ULP +CONTAINER +IMAGE A35 bl31.bin 0x20040000 +IMAGE A35 u-boot.bin CONFIG_TEXT_BASE diff --git a/arch/arm/mach-imx/imx8ulp/imximage.cfg b/arch/arm/mach-imx/imx8ulp/imximage.cfg new file mode 100644 index 00000000000..a55359fee23 --- /dev/null +++ b/arch/arm/mach-imx/imx8ulp/imximage.cfg @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +BOOT_FROM SD 0x400 +SOC_TYPE ULP +APPEND mx8ulpa2-ahab-container.img +CONTAINER +IMAGE PWR upower.bin +IMAGE M40 m33_image.bin 0x1ffc2000 +IMAGE A35 u-boot-spl-ddr.bin 0x22020000

Signed-off-by: Gary Bisson bisson.gary@gmail.com --- arch/arm/dts/imx8ulp-evk-u-boot.dtsi | 2 + arch/arm/mach-imx/imx8ulp/Kconfig | 1 + configs/imx8ulp_evk_defconfig | 3 +- doc/board/nxp/imx8ulp_evk.rst | 79 ++++++++++++++++++++++++++++ doc/board/nxp/index.rst | 1 + 5 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 doc/board/nxp/imx8ulp_evk.rst
diff --git a/arch/arm/dts/imx8ulp-evk-u-boot.dtsi b/arch/arm/dts/imx8ulp-evk-u-boot.dtsi index 5034ce65fff..ca390f5d702 100644 --- a/arch/arm/dts/imx8ulp-evk-u-boot.dtsi +++ b/arch/arm/dts/imx8ulp-evk-u-boot.dtsi @@ -3,6 +3,8 @@ * Copyright 2021 NXP */
+#include "imx8ulp-u-boot.dtsi" + / { mu@27020000 { compatible = "fsl,imx8ulp-mu"; diff --git a/arch/arm/mach-imx/imx8ulp/Kconfig b/arch/arm/mach-imx/imx8ulp/Kconfig index 49ea25250a3..fbca241e106 100644 --- a/arch/arm/mach-imx/imx8ulp/Kconfig +++ b/arch/arm/mach-imx/imx8ulp/Kconfig @@ -23,6 +23,7 @@ choice
config TARGET_IMX8ULP_EVK bool "imx8ulp_evk" + select BINMAN select IMX8ULP select SUPPORT_SPL select IMX8ULP_DRAM diff --git a/configs/imx8ulp_evk_defconfig b/configs/imx8ulp_evk_defconfig index b302df1f351..0f0748b6792 100644 --- a/configs/imx8ulp_evk_defconfig +++ b/configs/imx8ulp_evk_defconfig @@ -8,7 +8,7 @@ CONFIG_NR_DRAM_BANKS=2 CONFIG_SF_DEFAULT_SPEED=40000000 CONFIG_ENV_SIZE=0x2000 CONFIG_ENV_OFFSET=0x400000 -CONFIG_IMX_CONFIG="" +CONFIG_IMX_CONFIG="arch/arm/mach-imx/imx8ulp/imximage.cfg" CONFIG_DM_GPIO=y CONFIG_DEFAULT_DEVICE_TREE="imx8ulp-evk" CONFIG_SPL_TEXT_BASE=0x22020000 @@ -38,6 +38,7 @@ CONFIG_SPL_MAX_SIZE=0x25000 CONFIG_SPL_BOARD_INIT=y CONFIG_SPL_BOOTROM_SUPPORT=y CONFIG_SPL_LOAD_IMX_CONTAINER=y +CONFIG_IMX_CONTAINER_CFG="arch/arm/mach-imx/imx8ulp/container.cfg" # CONFIG_SPL_SHARES_INIT_SP_ADDR is not set CONFIG_SPL_SYS_MALLOC=y CONFIG_SPL_HAS_CUSTOM_MALLOC_START=y diff --git a/doc/board/nxp/imx8ulp_evk.rst b/doc/board/nxp/imx8ulp_evk.rst new file mode 100644 index 00000000000..db0d9ba698b --- /dev/null +++ b/doc/board/nxp/imx8ulp_evk.rst @@ -0,0 +1,79 @@ +.. SPDX-License-Identifier: GPL-2.0+ + +imx8ulp_evk +======================= + +U-Boot for the NXP i.MX 8ULP EVK board + +Quick Start +----------- + +- Get and Build the ARM Trusted firmware +- Get the uPower firmware +- Get the M33 firmware +- Get ahab-container.img +- Build U-Boot +- Boot + +Get and Build the ARM Trusted firmware +-------------------------------------- + +Note: srctree is U-Boot source directory +Get ATF from: https://github.com/nxp-imx/imx-atf/ +branch: lf_v2.10 + +.. code-block:: bash + + $ unset LDFLAGS + $ make PLAT=imx8ulp bl31 + $ cp build/imx8ulp/release/bl31.bin $(srctree) + +Get the uPower firmware +-------------------- + +.. code-block:: bash + + $ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-upower-1.3.1.bin + $ chmod +x firmware-upower-1.3.1.bin + $ ./firmware-upower-1.3.1.bin + $ cp firmware-upower-1.3.1/upower_a1.bin $(srctree)/upower.bin + +Get the M33 firmware +-------------------- + +.. code-block:: bash + + $ wget http://www.nxp.com/lgfiles/NMG/MAD/YOCTO/imx8ulp-m33-demo-2.14.1.bin + $ chmod +x imx8ulp-m33-demo-2.14.1.bin + $ ./imx8ulp-m33-demo-2.14.1.bin + $ cp imx8ulp-m33-demo-2.14.1/imx8ulp_m33_TCM_power_mode_switch.bin $(srctree)/m33_image.bin + +Get ahab-container.img +--------------------------------------- + +.. code-block:: bash + + $ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-ele-imx-0.1.2-4ed450a.bin + $ chmod +x firmware-ele-imx-0.1.2-4ed450a.bin + $ ./firmware-ele-imx-0.1.2-4ed450a.bin + $ cp firmware-ele-imx-0.1.2-4ed450a/mx8ulpa2-ahab-container.img $(srctree) + +Build U-Boot +------------ + +.. code-block:: bash + + $ export CROSS_COMPILE=aarch64-poky-linux- + $ make imx8ulp_evk_defconfig + $ make + +Burn the flash.bin to MicroSD card offset 32KB: + +.. code-block:: bash + + $ dd if=flash.bin of=/dev/sd[x] bs=1024 seek=32 conv=notrunc + +Boot +---- + +Set Boot switch to SD boot diff --git a/doc/board/nxp/index.rst b/doc/board/nxp/index.rst index 94687730544..5f1e878508e 100644 --- a/doc/board/nxp/index.rst +++ b/doc/board/nxp/index.rst @@ -11,6 +11,7 @@ NXP Semiconductors imx8mp_evk imx8mq_evk imx8qxp_mek + imx8ulp_evk imx93_11x11_evk imxrt1020-evk imxrt1050-evk
participants (3)
-
Fabio Estevam
-
Gary Bisson
-
Peng Fan