[PATCH v2 0/9] board: toradex: verdin-imx8mm: target refresh

From: Marcel Ziswiler marcel.ziswiler@toradex.com
An assortment of fixes and improvements like an Ethernet PHY configuration fix, DEK blob encapsulation preparation, migration to using binman to pack images, SLEEP_MOCI# enablement, dropping of V1.0 hardware support [1], renaming kernel image variable and using preboot for fdtfile evaluation.
Note that this series is applied on top of Peng's Makefile fix [2] as otherwise, it may not quite generate all binman artefacts in the right order as discussed here [3].
[1] https://developer.toradex.com/verdin-sample-phase-over [2] https://marc.info/?l=u-boot&m=162908373904742 [3] https://marc.info/?l=u-boot&m=162945614207220
Changes in v2: - Explicitly pass filename to binman when generating binaries as suggested by Heiko. - Use proper intermediate binary u-boot-spl-ddr.bin for imximage as pointed out by Heiko. - Drop first patch ("imx: mkimage_fit_atf: fix legacy image generation") as a similar fix was already refused earlier. - New patch allows booting recent embedded Linux BSPs. - New patch addressing dynamic fdtfile definition. - New patch fixing watchdog pinctrl issue.
Igor Opaniuk (1): verdin-imx8mm: use preboot for fdtfile evaluation
Marcel Ziswiler (5): imx8m: clean-up kconfig indentation verdin-imx8mm: fix ethernet ARM: dts: imx8mm-verdin: prepare for dek blob encapsulation verdin-imx8mm: switch to use binman to pack images verdin-imx8mm: fix watchdog pinctrl issue
Max Krummenacher (2): verdin-imx8mm: enable sleep_moci output verdin-imx8mm: drop support for v1.0 hardware
Oleksandr Suvorov (1): include/configs: apalis-imx8/verdin-imx8mm: rename kernel image variable
arch/arm/dts/imx8mm-verdin-u-boot.dtsi | 135 +++++++++++++++++++- arch/arm/dts/imx8mm-verdin.dts | 20 ++- arch/arm/mach-imx/imx8m/Kconfig | 21 +-- board/toradex/verdin-imx8mm/imximage.cfg | 11 +- board/toradex/verdin-imx8mm/verdin-imx8mm.c | 77 +---------- configs/verdin-imx8mm_defconfig | 6 +- doc/board/toradex/verdin-imx8mm.rst | 53 ++++---- include/configs/verdin-imx8mm.h | 6 +- 8 files changed, 208 insertions(+), 121 deletions(-)

From: Marcel Ziswiler marcel.ziswiler@toradex.com
Replace spurious spaces with proper tabs.
Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com ---
(no changes since v1)
arch/arm/mach-imx/imx8m/Kconfig | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/arch/arm/mach-imx/imx8m/Kconfig b/arch/arm/mach-imx/imx8m/Kconfig index 1d08a2977f5..a2ba30cf332 100644 --- a/arch/arm/mach-imx/imx8m/Kconfig +++ b/arch/arm/mach-imx/imx8m/Kconfig @@ -25,14 +25,14 @@ config SYS_SOC default "imx8m"
choice - prompt "NXP i.MX8M board select" + prompt "NXP i.MX8M board select" optional
config TARGET_IMX8MQ_CM - bool "Ronetix iMX8MQ-CM SoM" + bool "Ronetix iMX8MQ-CM SoM" select BINMAN - select IMX8MQ - select IMX8M_LPDDR4 + select IMX8MQ + select IMX8M_LPDDR4
config TARGET_IMX8MQ_EVK bool "imx8mq_evk" @@ -105,10 +105,10 @@ config TARGET_PICO_IMX8MQ select IMX8M_LPDDR4
config TARGET_VERDIN_IMX8MM - bool "Support Toradex Verdin iMX8M Mini module" - select IMX8MM - select SUPPORT_SPL - select IMX8M_LPDDR4 + bool "Support Toradex Verdin iMX8M Mini module" + select IMX8MM + select SUPPORT_SPL + select IMX8M_LPDDR4
config TARGET_IMX8MM_BEACON bool "imx8mm Beacon Embedded devkit" @@ -125,14 +125,14 @@ config TARGET_IMX8MN_BEACON config TARGET_PHYCORE_IMX8MM bool "PHYTEC PHYCORE i.MX8MM" select IMX8MM - select SUPPORT_SPL + select SUPPORT_SPL select IMX8M_LPDDR4
config TARGET_PHYCORE_IMX8MP bool "PHYTEC PHYCORE i.MX8MP" select BINMAN select IMX8MP - select SUPPORT_SPL + select SUPPORT_SPL select IMX8M_LPDDR4
config TARGET_IMX8MM_CL_IOT_GATE

From: Marcel Ziswiler marcel.ziswiler@toradex.com
Turns out Microship (formerly Micrel) meanwhile integrated proper support for the DLL setup on their KSZ9131. Unfortunately, this conflicts with our previous board code doing that. Fix this by getting rid of our board code and just relying on the generic implementation relying on rgmii-id being used as phy-mode.
Fixes: commit c6df0e2ffdc4 ("net: phy: micrel: add support for DLL setup on ksz9131") Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com ---
(no changes since v1)
arch/arm/dts/imx8mm-verdin.dts | 2 +- board/toradex/verdin-imx8mm/verdin-imx8mm.c | 64 --------------------- 2 files changed, 1 insertion(+), 65 deletions(-)
diff --git a/arch/arm/dts/imx8mm-verdin.dts b/arch/arm/dts/imx8mm-verdin.dts index fb0756d6e19..ac2a4b69d3c 100644 --- a/arch/arm/dts/imx8mm-verdin.dts +++ b/arch/arm/dts/imx8mm-verdin.dts @@ -160,7 +160,7 @@ &fec1 { fsl,magic-packet; phy-handle = <ðphy0>; - phy-mode = "rgmii"; + phy-mode = "rgmii-id"; phy-supply = <®_ethphy>; pinctrl-names = "default", "sleep"; pinctrl-0 = <&pinctrl_fec1>; diff --git a/board/toradex/verdin-imx8mm/verdin-imx8mm.c b/board/toradex/verdin-imx8mm/verdin-imx8mm.c index 76f4a1e209a..1644f4b3081 100644 --- a/board/toradex/verdin-imx8mm/verdin-imx8mm.c +++ b/board/toradex/verdin-imx8mm/verdin-imx8mm.c @@ -36,70 +36,6 @@ static int setup_fec(void)
return 0; } - -int board_phy_config(struct phy_device *phydev) -{ - int tmp; - - switch (ksz9xx1_phy_get_id(phydev) & MII_KSZ9x31_SILICON_REV_MASK) { - case PHY_ID_KSZ9031: - /* - * The PHY adds 1.2ns for the RXC and 0ns for TXC clock by - * default. The MAC and the layout don't add a skew between - * clock and data. - * Add 0.3ns for the RXC path and 0.96 + 0.42 ns (1.38 ns) for - * the TXC path to get the required clock skews. - */ - /* control data pad skew - devaddr = 0x02, register = 0x04 */ - ksz9031_phy_extended_write(phydev, 0x02, - MII_KSZ9031_EXT_RGMII_CTRL_SIG_SKEW, - MII_KSZ9031_MOD_DATA_NO_POST_INC, - 0x0070); - /* rx data pad skew - devaddr = 0x02, register = 0x05 */ - ksz9031_phy_extended_write(phydev, 0x02, - MII_KSZ9031_EXT_RGMII_RX_DATA_SKEW, - MII_KSZ9031_MOD_DATA_NO_POST_INC, - 0x7777); - /* tx data pad skew - devaddr = 0x02, register = 0x06 */ - ksz9031_phy_extended_write(phydev, 0x02, - MII_KSZ9031_EXT_RGMII_TX_DATA_SKEW, - MII_KSZ9031_MOD_DATA_NO_POST_INC, - 0x0000); - /* gtx and rx clock pad skew - devaddr = 0x02,register = 0x08 */ - ksz9031_phy_extended_write(phydev, 0x02, - MII_KSZ9031_EXT_RGMII_CLOCK_SKEW, - MII_KSZ9031_MOD_DATA_NO_POST_INC, - 0x03f4); - break; - case PHY_ID_KSZ9131: - default: - /* read rxc dll control - devaddr = 0x2, register = 0x4c */ - tmp = ksz9031_phy_extended_read(phydev, 0x02, - MII_KSZ9131_EXT_RGMII_2NS_SKEW_RXDLL, - MII_KSZ9031_MOD_DATA_NO_POST_INC); - /* disable rxdll bypass (enable 2ns skew delay on RXC) */ - tmp &= ~MII_KSZ9131_RXTXDLL_BYPASS; - /* rxc data pad skew 2ns - devaddr = 0x02, register = 0x4c */ - tmp = ksz9031_phy_extended_write(phydev, 0x02, - MII_KSZ9131_EXT_RGMII_2NS_SKEW_RXDLL, - MII_KSZ9031_MOD_DATA_NO_POST_INC, tmp); - /* read txc dll control - devaddr = 0x02, register = 0x4d */ - tmp = ksz9031_phy_extended_read(phydev, 0x02, - MII_KSZ9131_EXT_RGMII_2NS_SKEW_TXDLL, - MII_KSZ9031_MOD_DATA_NO_POST_INC); - /* disable txdll bypass (enable 2ns skew delay on TXC) */ - tmp &= ~MII_KSZ9131_RXTXDLL_BYPASS; - /* rxc data pad skew 2ns - devaddr = 0x02, register = 0x4d */ - tmp = ksz9031_phy_extended_write(phydev, 0x02, - MII_KSZ9131_EXT_RGMII_2NS_SKEW_TXDLL, - MII_KSZ9031_MOD_DATA_NO_POST_INC, tmp); - break; - } - - if (phydev->drv->config) - phydev->drv->config(phydev); - return 0; -} #endif
int board_init(void)

From: Marcel Ziswiler marcel.ziswiler@toradex.com
Prepare for DEK blob encapsulation support through "dek_blob" command. On ARMv8, u-boot runs in non-secure, thus cannot encapsulate a DEK blob for encrypted boot. The DEK blob is encapsulated by OP-TEE through a trusted application call. U-boot sends and receives the DEK and the DEK blob binaries through OP-TEE dynamic shared memory.
To enable the DEK blob encapsulation, add to the defconfig: CONFIG_SECURE_BOOT=y CONFIG_FAT_WRITE=y CONFIG_CMD_DEKBLOB=y
Taken from NXP's commit 56d2050f4028 ("imx8m: Add DEK blob encapsulation for imx8m").
Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com ---
(no changes since v1)
arch/arm/dts/imx8mm-verdin-u-boot.dtsi | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/arch/arm/dts/imx8mm-verdin-u-boot.dtsi b/arch/arm/dts/imx8mm-verdin-u-boot.dtsi index 67c31c49b6c..a97626fa0c1 100644 --- a/arch/arm/dts/imx8mm-verdin-u-boot.dtsi +++ b/arch/arm/dts/imx8mm-verdin-u-boot.dtsi @@ -6,6 +6,13 @@ #include "imx8mm-u-boot.dtsi"
/ { + firmware { + optee { + compatible = "linaro,optee-tz"; + method = "smc"; + }; + }; + wdt-reboot { compatible = "wdt-reboot"; wdt = <&wdog1>;

From: Marcel Ziswiler marcel.ziswiler@toradex.com
Use binman to pack images.
Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com
---
Changes in v2: - Explicitly pass filename to binman when generating binaries as suggested by Heiko. - Use proper intermediate binary u-boot-spl-ddr.bin for imximage as pointed out by Heiko.
arch/arm/dts/imx8mm-verdin-u-boot.dtsi | 124 ++++++++++++++++++++++- arch/arm/mach-imx/imx8m/Kconfig | 1 + board/toradex/verdin-imx8mm/imximage.cfg | 11 +- configs/verdin-imx8mm_defconfig | 2 +- doc/board/toradex/verdin-imx8mm.rst | 53 +++++----- 5 files changed, 157 insertions(+), 34 deletions(-)
diff --git a/arch/arm/dts/imx8mm-verdin-u-boot.dtsi b/arch/arm/dts/imx8mm-verdin-u-boot.dtsi index a97626fa0c1..a3ad8f3ad37 100644 --- a/arch/arm/dts/imx8mm-verdin-u-boot.dtsi +++ b/arch/arm/dts/imx8mm-verdin-u-boot.dtsi @@ -1,11 +1,15 @@ // SPDX-License-Identifier: GPL-2.0+ OR MIT /* - * Copyright 2020 Toradex + * Copyright 2021 Toradex */
#include "imx8mm-u-boot.dtsi"
/ { + binman: binman { + multiple-images; + }; + firmware { optee { compatible = "linaro,optee-tz"; @@ -91,3 +95,121 @@ &wdog1 { u-boot,dm-spl; }; + +&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>; + }; + + blob_1: blob-ext@1 { + filename = "lpddr4_pmu_train_1d_imem.bin"; + size = <0x8000>; + }; + + blob_2: blob-ext@2 { + filename = "lpddr4_pmu_train_1d_dmem.bin"; + size = <0x4000>; + }; + + blob_3: blob-ext@3 { + filename = "lpddr4_pmu_train_2d_imem.bin"; + size = <0x8000>; + }; + + blob_4: blob-ext@4 { + filename = "lpddr4_pmu_train_2d_dmem.bin"; + size = <0x4000>; + }; + }; + + spl { + filename = "spl.bin"; + + mkimage { + args = "-n spl/u-boot-spl.cfgout -T imx8mimage -e 0x7e1000"; + + blob { + filename = "u-boot-spl-ddr.bin"; + }; + }; + }; + + itb { + filename = "u-boot.itb"; + + fit { + description = "Configuration to load ATF before U-Boot"; + fit,external-offset = <CONFIG_FIT_EXTERNAL_OFFSET>; + #address-cells = <1>; + + images { + uboot { + arch = "arm64"; + compression = "none"; + description = "U-Boot (64-bit)"; + load = <CONFIG_SYS_TEXT_BASE>; + type = "standalone"; + + uboot_blob: blob-ext { + filename = "u-boot-nodtb.bin"; + }; + }; + + atf { + arch = "arm64"; + compression = "none"; + description = "ARM Trusted Firmware"; + entry = <0x920000>; + load = <0x920000>; + type = "firmware"; + + atf_blob: blob-ext { + filename = "bl31.bin"; + }; + }; + + fdt { + compression = "none"; + description = "NAME"; + type = "flat_dt"; + + uboot_fdt_blob: blob-ext { + filename = "u-boot.dtb"; + }; + }; + }; + + configurations { + default = "conf"; + + conf { + description = "NAME"; + fdt = "fdt"; + firmware = "uboot"; + loadables = "atf"; + }; + }; + }; + }; + + imx-boot { + filename = "flash.bin"; + pad-byte = <0x00>; + + spl: blob-ext@1 { + filename = "spl.bin"; + offset = <0x0>; + }; + + uboot: blob-ext@2 { + filename = "u-boot.itb"; + offset = <0x5fc00>; + }; + }; +}; diff --git a/arch/arm/mach-imx/imx8m/Kconfig b/arch/arm/mach-imx/imx8m/Kconfig index a2ba30cf332..3eccc6b4d4f 100644 --- a/arch/arm/mach-imx/imx8m/Kconfig +++ b/arch/arm/mach-imx/imx8m/Kconfig @@ -106,6 +106,7 @@ config TARGET_PICO_IMX8MQ
config TARGET_VERDIN_IMX8MM bool "Support Toradex Verdin iMX8M Mini module" + select BINMAN select IMX8MM select SUPPORT_SPL select IMX8M_LPDDR4 diff --git a/board/toradex/verdin-imx8mm/imximage.cfg b/board/toradex/verdin-imx8mm/imximage.cfg index b8b25ff4201..a303f98e170 100644 --- a/board/toradex/verdin-imx8mm/imximage.cfg +++ b/board/toradex/verdin-imx8mm/imximage.cfg @@ -1,16 +1,9 @@ /* SPDX-License-Identifier: GPL-2.0+ */ /* - * Copyright 2020 Toradex + * Copyright 2021 Toradex */
#define __ASSEMBLY__
-FIT BOOT_FROM emmc_fastboot -LOADER spl/u-boot-spl-ddr.bin 0x7E1000 -SECOND_LOADER u-boot.itb 0x40200000 0x60000 - -DDR_FW lpddr4_pmu_train_1d_imem.bin -DDR_FW lpddr4_pmu_train_1d_dmem.bin -DDR_FW lpddr4_pmu_train_2d_imem.bin -DDR_FW lpddr4_pmu_train_2d_dmem.bin +LOADER u-boot-spl-ddr.bin 0x7E1000 diff --git a/configs/verdin-imx8mm_defconfig b/configs/verdin-imx8mm_defconfig index 624f1b99096..b323ceb19af 100644 --- a/configs/verdin-imx8mm_defconfig +++ b/configs/verdin-imx8mm_defconfig @@ -24,7 +24,7 @@ CONFIG_DISTRO_DEFAULTS=y CONFIG_FIT=y CONFIG_FIT_EXTERNAL_OFFSET=0x3000 CONFIG_SPL_LOAD_FIT=y -CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-imx/mkimage_fit_atf.sh" +# CONFIG_USE_SPL_FIT_GENERATOR is not set CONFIG_OF_SYSTEM_SETUP=y CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/toradex/verdin-imx8mm/imximage.cfg" # CONFIG_USE_BOOTCOMMAND is not set diff --git a/doc/board/toradex/verdin-imx8mm.rst b/doc/board/toradex/verdin-imx8mm.rst index b9f7dc39c96..a11c82da2f5 100644 --- a/doc/board/toradex/verdin-imx8mm.rst +++ b/doc/board/toradex/verdin-imx8mm.rst @@ -34,10 +34,10 @@ Get the DDR Firmware .. code-block:: bash
$ cd .. - $ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.4.1.bin - $ chmod +x firmware-imx-8.4.1.bin - $ ./firmware-imx-8.4.1.bin - $ cp firmware-imx-8.4.1/firmware/ddr/synopsys/lpddr4*.bin ./ + $ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.10.1.bin + $ chmod +x firmware-imx-8.10.1.bin + $ ./firmware-imx-8.10.1.bin + $ cp firmware-imx-8.10.1/firmware/ddr/synopsys/lpddr4*.bin ./
Build U-Boot ------------ @@ -46,7 +46,7 @@ Build U-Boot $ export CROSS_COMPILE=aarch64-linux-gnu- $ export ATF_LOAD_ADDR=0x920000 $ make verdin-imx8mm_defconfig - $ make flash.bin + $ make
Flash to eMMC ------------- @@ -78,21 +78,28 @@ Output:
.. code-block:: bash
- U-Boot SPL 2020.01-00187-gd411d164e5 (Jan 26 2020 - 04:47:26 +0100) - Normal Boot - Trying to boot from MMC1 - - U-Boot 2020.01-00187-gd411d164e5 (Jan 26 2020 - 04:47:26 +0100) - - CPU: Freescale i.MX8MMQ rev1.0 at 0 MHz - Reset cause: POR - DRAM: 2 GiB - MMC: FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2 - Loading Environment from MMC... OK - In: serial - Out: serial - Err: serial - Model: Toradex Verdin iMX8M Mini Quad 2GB Wi-Fi / BT IT V1.0A, Serial: - Net: eth0: ethernet@30be0000 - Hit any key to stop autoboot: 0 - Verdin iMX8MM # +U-Boot SPL 2021.10-rc2-00028-gee010ba1129 (Aug 23 2021 - 16:56:02 +0200) +Normal Boot +WDT: Started with servicing (60s timeout) +Trying to boot from MMC1 +NOTICE: BL31: v2.2(release):rel_imx_5.4.70_2.3.2_rc1-5-g835a8f67b +NOTICE: BL31: Built : 18:02:12, Aug 16 2021 + + +U-Boot 2021.10-rc2-00028-gee010ba1129 (Aug 23 2021 - 16:56:02 +0200) + +CPU: Freescale i.MX8MMQ rev1.0 at 1200 MHz +Reset cause: POR +DRAM: 2 GiB +WDT: Started with servicing (60s timeout) +MMC: FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2 +Loading Environment from MMC... OK +In: serial +Out: serial +Err: serial +Model: Toradex Verdin iMX8M Mini Quad 2GB Wi-Fi / BT IT V1.1A, Serial# 06760554 +Carrier: Toradex Verdin Development Board V1.1A, Serial# 10754333 +Setting variant to wifi +Net: eth0: ethernet@30be0000 +Hit any key to stop autoboot: 0 +Verdin iMX8MM #

Hi Marcel,
Am Mo., 23. Aug. 2021 um 17:04 Uhr schrieb Marcel Ziswiler marcel@ziswiler.com:
From: Marcel Ziswiler marcel.ziswiler@toradex.com
Use binman to pack images.
Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com
Reviewed-by: Heiko Thiery heiko.thiery@gmail.com
Changes in v2:
- Explicitly pass filename to binman when generating binaries as suggested by Heiko.
- Use proper intermediate binary u-boot-spl-ddr.bin for imximage as pointed out by Heiko.
arch/arm/dts/imx8mm-verdin-u-boot.dtsi | 124 ++++++++++++++++++++++- arch/arm/mach-imx/imx8m/Kconfig | 1 + board/toradex/verdin-imx8mm/imximage.cfg | 11 +- configs/verdin-imx8mm_defconfig | 2 +- doc/board/toradex/verdin-imx8mm.rst | 53 +++++----- 5 files changed, 157 insertions(+), 34 deletions(-)
diff --git a/arch/arm/dts/imx8mm-verdin-u-boot.dtsi b/arch/arm/dts/imx8mm-verdin-u-boot.dtsi index a97626fa0c1..a3ad8f3ad37 100644 --- a/arch/arm/dts/imx8mm-verdin-u-boot.dtsi +++ b/arch/arm/dts/imx8mm-verdin-u-boot.dtsi @@ -1,11 +1,15 @@ // SPDX-License-Identifier: GPL-2.0+ OR MIT /*
- Copyright 2020 Toradex
*/
- Copyright 2021 Toradex
#include "imx8mm-u-boot.dtsi"
/ {
binman: binman {
multiple-images;
};
firmware { optee { compatible = "linaro,optee-tz";
@@ -91,3 +95,121 @@ &wdog1 { u-boot,dm-spl; };
+&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>;
};
blob_1: blob-ext@1 {
filename = "lpddr4_pmu_train_1d_imem.bin";
size = <0x8000>;
};
blob_2: blob-ext@2 {
filename = "lpddr4_pmu_train_1d_dmem.bin";
size = <0x4000>;
};
blob_3: blob-ext@3 {
filename = "lpddr4_pmu_train_2d_imem.bin";
size = <0x8000>;
};
blob_4: blob-ext@4 {
filename = "lpddr4_pmu_train_2d_dmem.bin";
size = <0x4000>;
};
};
spl {
filename = "spl.bin";
mkimage {
args = "-n spl/u-boot-spl.cfgout -T imx8mimage -e 0x7e1000";
blob {
filename = "u-boot-spl-ddr.bin";
};
};
};
itb {
filename = "u-boot.itb";
fit {
description = "Configuration to load ATF before U-Boot";
fit,external-offset = <CONFIG_FIT_EXTERNAL_OFFSET>;
#address-cells = <1>;
images {
uboot {
arch = "arm64";
compression = "none";
description = "U-Boot (64-bit)";
load = <CONFIG_SYS_TEXT_BASE>;
type = "standalone";
uboot_blob: blob-ext {
filename = "u-boot-nodtb.bin";
};
};
atf {
arch = "arm64";
compression = "none";
description = "ARM Trusted Firmware";
entry = <0x920000>;
load = <0x920000>;
type = "firmware";
atf_blob: blob-ext {
filename = "bl31.bin";
};
};
fdt {
compression = "none";
description = "NAME";
type = "flat_dt";
uboot_fdt_blob: blob-ext {
filename = "u-boot.dtb";
};
};
};
configurations {
default = "conf";
conf {
description = "NAME";
fdt = "fdt";
firmware = "uboot";
loadables = "atf";
};
};
};
};
imx-boot {
filename = "flash.bin";
pad-byte = <0x00>;
spl: blob-ext@1 {
filename = "spl.bin";
offset = <0x0>;
};
uboot: blob-ext@2 {
filename = "u-boot.itb";
offset = <0x5fc00>;
};
};
+}; diff --git a/arch/arm/mach-imx/imx8m/Kconfig b/arch/arm/mach-imx/imx8m/Kconfig index a2ba30cf332..3eccc6b4d4f 100644 --- a/arch/arm/mach-imx/imx8m/Kconfig +++ b/arch/arm/mach-imx/imx8m/Kconfig @@ -106,6 +106,7 @@ config TARGET_PICO_IMX8MQ
config TARGET_VERDIN_IMX8MM bool "Support Toradex Verdin iMX8M Mini module"
select BINMAN select IMX8MM select SUPPORT_SPL select IMX8M_LPDDR4
diff --git a/board/toradex/verdin-imx8mm/imximage.cfg b/board/toradex/verdin-imx8mm/imximage.cfg index b8b25ff4201..a303f98e170 100644 --- a/board/toradex/verdin-imx8mm/imximage.cfg +++ b/board/toradex/verdin-imx8mm/imximage.cfg @@ -1,16 +1,9 @@ /* SPDX-License-Identifier: GPL-2.0+ */ /*
- Copyright 2020 Toradex
*/
- Copyright 2021 Toradex
#define __ASSEMBLY__
-FIT BOOT_FROM emmc_fastboot -LOADER spl/u-boot-spl-ddr.bin 0x7E1000 -SECOND_LOADER u-boot.itb 0x40200000 0x60000
-DDR_FW lpddr4_pmu_train_1d_imem.bin -DDR_FW lpddr4_pmu_train_1d_dmem.bin -DDR_FW lpddr4_pmu_train_2d_imem.bin -DDR_FW lpddr4_pmu_train_2d_dmem.bin +LOADER u-boot-spl-ddr.bin 0x7E1000 diff --git a/configs/verdin-imx8mm_defconfig b/configs/verdin-imx8mm_defconfig index 624f1b99096..b323ceb19af 100644 --- a/configs/verdin-imx8mm_defconfig +++ b/configs/verdin-imx8mm_defconfig @@ -24,7 +24,7 @@ CONFIG_DISTRO_DEFAULTS=y CONFIG_FIT=y CONFIG_FIT_EXTERNAL_OFFSET=0x3000 CONFIG_SPL_LOAD_FIT=y -CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-imx/mkimage_fit_atf.sh" +# CONFIG_USE_SPL_FIT_GENERATOR is not set CONFIG_OF_SYSTEM_SETUP=y CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/toradex/verdin-imx8mm/imximage.cfg" # CONFIG_USE_BOOTCOMMAND is not set diff --git a/doc/board/toradex/verdin-imx8mm.rst b/doc/board/toradex/verdin-imx8mm.rst index b9f7dc39c96..a11c82da2f5 100644 --- a/doc/board/toradex/verdin-imx8mm.rst +++ b/doc/board/toradex/verdin-imx8mm.rst @@ -34,10 +34,10 @@ Get the DDR Firmware .. code-block:: bash
$ cd ..
- $ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.4.1.bin
- $ chmod +x firmware-imx-8.4.1.bin
- $ ./firmware-imx-8.4.1.bin
- $ cp firmware-imx-8.4.1/firmware/ddr/synopsys/lpddr4*.bin ./
- $ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.10.1.bin
- $ chmod +x firmware-imx-8.10.1.bin
- $ ./firmware-imx-8.10.1.bin
- $ cp firmware-imx-8.10.1/firmware/ddr/synopsys/lpddr4*.bin ./
Build U-Boot
@@ -46,7 +46,7 @@ Build U-Boot $ export CROSS_COMPILE=aarch64-linux-gnu- $ export ATF_LOAD_ADDR=0x920000 $ make verdin-imx8mm_defconfig
- $ make flash.bin
- $ make
Flash to eMMC
@@ -78,21 +78,28 @@ Output:
.. code-block:: bash
- U-Boot SPL 2020.01-00187-gd411d164e5 (Jan 26 2020 - 04:47:26 +0100)
- Normal Boot
- Trying to boot from MMC1
- U-Boot 2020.01-00187-gd411d164e5 (Jan 26 2020 - 04:47:26 +0100)
- CPU: Freescale i.MX8MMQ rev1.0 at 0 MHz
- Reset cause: POR
- DRAM: 2 GiB
- MMC: FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
- Loading Environment from MMC... OK
- In: serial
- Out: serial
- Err: serial
- Model: Toradex Verdin iMX8M Mini Quad 2GB Wi-Fi / BT IT V1.0A, Serial:
- Net: eth0: ethernet@30be0000
- Hit any key to stop autoboot: 0
- Verdin iMX8MM #
+U-Boot SPL 2021.10-rc2-00028-gee010ba1129 (Aug 23 2021 - 16:56:02 +0200) +Normal Boot +WDT: Started with servicing (60s timeout) +Trying to boot from MMC1 +NOTICE: BL31: v2.2(release):rel_imx_5.4.70_2.3.2_rc1-5-g835a8f67b +NOTICE: BL31: Built : 18:02:12, Aug 16 2021
+U-Boot 2021.10-rc2-00028-gee010ba1129 (Aug 23 2021 - 16:56:02 +0200)
+CPU: Freescale i.MX8MMQ rev1.0 at 1200 MHz +Reset cause: POR +DRAM: 2 GiB +WDT: Started with servicing (60s timeout) +MMC: FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2 +Loading Environment from MMC... OK +In: serial +Out: serial +Err: serial +Model: Toradex Verdin iMX8M Mini Quad 2GB Wi-Fi / BT IT V1.1A, Serial# 06760554 +Carrier: Toradex Verdin Development Board V1.1A, Serial# 10754333 +Setting variant to wifi +Net: eth0: ethernet@30be0000 +Hit any key to stop autoboot: 0
+Verdin iMX8MM #
2.26.2

Hi Marcel,
On Mon, 23 Aug 2021 at 09:09, Marcel Ziswiler marcel@ziswiler.com wrote:
From: Marcel Ziswiler marcel.ziswiler@toradex.com
Use binman to pack images.
Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com
Changes in v2:
- Explicitly pass filename to binman when generating binaries as suggested by Heiko.
- Use proper intermediate binary u-boot-spl-ddr.bin for imximage as pointed out by Heiko.
arch/arm/dts/imx8mm-verdin-u-boot.dtsi | 124 ++++++++++++++++++++++- arch/arm/mach-imx/imx8m/Kconfig | 1 + board/toradex/verdin-imx8mm/imximage.cfg | 11 +- configs/verdin-imx8mm_defconfig | 2 +- doc/board/toradex/verdin-imx8mm.rst | 53 +++++----- 5 files changed, 157 insertions(+), 34 deletions(-)
diff --git a/arch/arm/dts/imx8mm-verdin-u-boot.dtsi b/arch/arm/dts/imx8mm-verdin-u-boot.dtsi index a97626fa0c1..a3ad8f3ad37 100644 --- a/arch/arm/dts/imx8mm-verdin-u-boot.dtsi +++ b/arch/arm/dts/imx8mm-verdin-u-boot.dtsi @@ -1,11 +1,15 @@ // SPDX-License-Identifier: GPL-2.0+ OR MIT /*
- Copyright 2020 Toradex
*/
- Copyright 2021 Toradex
#include "imx8mm-u-boot.dtsi"
/ {
binman: binman {
multiple-images;
};
firmware { optee { compatible = "linaro,optee-tz";
@@ -91,3 +95,121 @@ &wdog1 { u-boot,dm-spl; };
+&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>;
};
blob_1: blob-ext@1 {
This works but the naming is a little odd. You can do:
1d-imem { type = "blob-ext";
filename = "lpddr4_pmu_train_1d_imem.bin";
size = <0x8000>;
};
blob_2: blob-ext@2 {
filename = "lpddr4_pmu_train_1d_dmem.bin";
size = <0x4000>;
};
blob_3: blob-ext@3 {
filename = "lpddr4_pmu_train_2d_imem.bin";
size = <0x8000>;
};
blob_4: blob-ext@4 {
filename = "lpddr4_pmu_train_2d_dmem.bin";
size = <0x4000>;
};
};
spl {
filename = "spl.bin";
mkimage {
args = "-n spl/u-boot-spl.cfgout -T imx8mimage -e 0x7e1000";
blob {
filename = "u-boot-spl-ddr.bin";
};
};
};
itb {
filename = "u-boot.itb";
fit {
description = "Configuration to load ATF before U-Boot";
fit,external-offset = <CONFIG_FIT_EXTERNAL_OFFSET>;
#address-cells = <1>;
images {
uboot {
arch = "arm64";
compression = "none";
description = "U-Boot (64-bit)";
load = <CONFIG_SYS_TEXT_BASE>;
type = "standalone";
uboot_blob: blob-ext {
filename = "u-boot-nodtb.bin";
};
};
atf {
arch = "arm64";
compression = "none";
description = "ARM Trusted Firmware";
entry = <0x920000>;
load = <0x920000>;
type = "firmware";
atf_blob: blob-ext {
filename = "bl31.bin";
};
};
fdt {
compression = "none";
description = "NAME";
type = "flat_dt";
uboot_fdt_blob: blob-ext {
filename = "u-boot.dtb";
};
};
};
configurations {
default = "conf";
conf {
description = "NAME";
fdt = "fdt";
firmware = "uboot";
loadables = "atf";
};
};
};
};
imx-boot {
filename = "flash.bin";
pad-byte = <0x00>;
spl: blob-ext@1 {
filename = "spl.bin";
offset = <0x0>;
};
uboot: blob-ext@2 {
filename = "u-boot.itb";
offset = <0x5fc00>;
};
};
+}; diff --git a/arch/arm/mach-imx/imx8m/Kconfig b/arch/arm/mach-imx/imx8m/Kconfig index a2ba30cf332..3eccc6b4d4f 100644 --- a/arch/arm/mach-imx/imx8m/Kconfig +++ b/arch/arm/mach-imx/imx8m/Kconfig @@ -106,6 +106,7 @@ config TARGET_PICO_IMX8MQ
config TARGET_VERDIN_IMX8MM bool "Support Toradex Verdin iMX8M Mini module"
select BINMAN select IMX8MM select SUPPORT_SPL select IMX8M_LPDDR4
diff --git a/board/toradex/verdin-imx8mm/imximage.cfg b/board/toradex/verdin-imx8mm/imximage.cfg index b8b25ff4201..a303f98e170 100644 --- a/board/toradex/verdin-imx8mm/imximage.cfg +++ b/board/toradex/verdin-imx8mm/imximage.cfg @@ -1,16 +1,9 @@ /* SPDX-License-Identifier: GPL-2.0+ */ /*
- Copyright 2020 Toradex
*/
- Copyright 2021 Toradex
#define __ASSEMBLY__
-FIT BOOT_FROM emmc_fastboot -LOADER spl/u-boot-spl-ddr.bin 0x7E1000 -SECOND_LOADER u-boot.itb 0x40200000 0x60000
-DDR_FW lpddr4_pmu_train_1d_imem.bin -DDR_FW lpddr4_pmu_train_1d_dmem.bin -DDR_FW lpddr4_pmu_train_2d_imem.bin -DDR_FW lpddr4_pmu_train_2d_dmem.bin +LOADER u-boot-spl-ddr.bin 0x7E1000 diff --git a/configs/verdin-imx8mm_defconfig b/configs/verdin-imx8mm_defconfig index 624f1b99096..b323ceb19af 100644 --- a/configs/verdin-imx8mm_defconfig +++ b/configs/verdin-imx8mm_defconfig @@ -24,7 +24,7 @@ CONFIG_DISTRO_DEFAULTS=y CONFIG_FIT=y CONFIG_FIT_EXTERNAL_OFFSET=0x3000 CONFIG_SPL_LOAD_FIT=y -CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-imx/mkimage_fit_atf.sh" +# CONFIG_USE_SPL_FIT_GENERATOR is not set CONFIG_OF_SYSTEM_SETUP=y CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/toradex/verdin-imx8mm/imximage.cfg" # CONFIG_USE_BOOTCOMMAND is not set diff --git a/doc/board/toradex/verdin-imx8mm.rst b/doc/board/toradex/verdin-imx8mm.rst index b9f7dc39c96..a11c82da2f5 100644 --- a/doc/board/toradex/verdin-imx8mm.rst +++ b/doc/board/toradex/verdin-imx8mm.rst @@ -34,10 +34,10 @@ Get the DDR Firmware .. code-block:: bash
$ cd ..
- $ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.4.1.bin
- $ chmod +x firmware-imx-8.4.1.bin
- $ ./firmware-imx-8.4.1.bin
- $ cp firmware-imx-8.4.1/firmware/ddr/synopsys/lpddr4*.bin ./
- $ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.10.1.bin
- $ chmod +x firmware-imx-8.10.1.bin
- $ ./firmware-imx-8.10.1.bin
- $ cp firmware-imx-8.10.1/firmware/ddr/synopsys/lpddr4*.bin ./
This makes me wonder if we should add a way for binman to locate blobs?
Build U-Boot
@@ -46,7 +46,7 @@ Build U-Boot $ export CROSS_COMPILE=aarch64-linux-gnu- $ export ATF_LOAD_ADDR=0x920000 $ make verdin-imx8mm_defconfig
- $ make flash.bin
- $ make
Flash to eMMC
@@ -78,21 +78,28 @@ Output:
.. code-block:: bash
- U-Boot SPL 2020.01-00187-gd411d164e5 (Jan 26 2020 - 04:47:26 +0100)
- Normal Boot
- Trying to boot from MMC1
- U-Boot 2020.01-00187-gd411d164e5 (Jan 26 2020 - 04:47:26 +0100)
- CPU: Freescale i.MX8MMQ rev1.0 at 0 MHz
- Reset cause: POR
- DRAM: 2 GiB
- MMC: FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
- Loading Environment from MMC... OK
- In: serial
- Out: serial
- Err: serial
- Model: Toradex Verdin iMX8M Mini Quad 2GB Wi-Fi / BT IT V1.0A, Serial:
- Net: eth0: ethernet@30be0000
- Hit any key to stop autoboot: 0
- Verdin iMX8MM #
+U-Boot SPL 2021.10-rc2-00028-gee010ba1129 (Aug 23 2021 - 16:56:02 +0200) +Normal Boot +WDT: Started with servicing (60s timeout) +Trying to boot from MMC1 +NOTICE: BL31: v2.2(release):rel_imx_5.4.70_2.3.2_rc1-5-g835a8f67b +NOTICE: BL31: Built : 18:02:12, Aug 16 2021
+U-Boot 2021.10-rc2-00028-gee010ba1129 (Aug 23 2021 - 16:56:02 +0200)
+CPU: Freescale i.MX8MMQ rev1.0 at 1200 MHz +Reset cause: POR +DRAM: 2 GiB +WDT: Started with servicing (60s timeout) +MMC: FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2 +Loading Environment from MMC... OK +In: serial +Out: serial +Err: serial +Model: Toradex Verdin iMX8M Mini Quad 2GB Wi-Fi / BT IT V1.1A, Serial# 06760554 +Carrier: Toradex Verdin Development Board V1.1A, Serial# 10754333 +Setting variant to wifi +Net: eth0: ethernet@30be0000 +Hit any key to stop autoboot: 0
+Verdin iMX8MM #
2.26.2
Regards, Simon

On 24.08.21 18:13, Simon Glass wrote:
Hi Marcel,
On Mon, 23 Aug 2021 at 09:09, Marcel Ziswiler marcel@ziswiler.com wrote:
From: Marcel Ziswiler marcel.ziswiler@toradex.com
Use binman to pack images.
Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com
Changes in v2:
- Explicitly pass filename to binman when generating binaries as suggested by Heiko.
- Use proper intermediate binary u-boot-spl-ddr.bin for imximage as pointed out by Heiko.
arch/arm/dts/imx8mm-verdin-u-boot.dtsi | 124 ++++++++++++++++++++++- arch/arm/mach-imx/imx8m/Kconfig | 1 + board/toradex/verdin-imx8mm/imximage.cfg | 11 +- configs/verdin-imx8mm_defconfig | 2 +- doc/board/toradex/verdin-imx8mm.rst | 53 +++++----- 5 files changed, 157 insertions(+), 34 deletions(-)
diff --git a/arch/arm/dts/imx8mm-verdin-u-boot.dtsi b/arch/arm/dts/imx8mm-verdin-u-boot.dtsi index a97626fa0c1..a3ad8f3ad37 100644 --- a/arch/arm/dts/imx8mm-verdin-u-boot.dtsi +++ b/arch/arm/dts/imx8mm-verdin-u-boot.dtsi @@ -1,11 +1,15 @@ // SPDX-License-Identifier: GPL-2.0+ OR MIT /*
- Copyright 2020 Toradex
*/
- Copyright 2021 Toradex
#include "imx8mm-u-boot.dtsi"
/ {
binman: binman {
multiple-images;
};
firmware { optee { compatible = "linaro,optee-tz";
@@ -91,3 +95,121 @@ &wdog1 { u-boot,dm-spl; };
+&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>;
};
blob_1: blob-ext@1 {
This works but the naming is a little odd. You can do:
1d-imem { type = "blob-ext";
This is copied from the existing binman config for imx8mm-evk. Before we do such cosmetic changes for each i.MX8M board separately, maybe it would be a good idea to switch to a common binman config first and then do this for all boards at once.
filename = "lpddr4_pmu_train_1d_imem.bin";
size = <0x8000>;
};
blob_2: blob-ext@2 {
filename = "lpddr4_pmu_train_1d_dmem.bin";
size = <0x4000>;
};
blob_3: blob-ext@3 {
filename = "lpddr4_pmu_train_2d_imem.bin";
size = <0x8000>;
};
blob_4: blob-ext@4 {
filename = "lpddr4_pmu_train_2d_dmem.bin";
size = <0x4000>;
};
};
[...]

On Wed, 2021-08-25 at 10:41 +0200, Frieder Schrempf wrote:
On 24.08.21 18:13, Simon Glass wrote:
...
This works but the naming is a little odd. You can do:
1d-imem { type = "blob-ext";
This is copied from the existing binman config for imx8mm-evk. Before we do such cosmetic changes for each i.MX8M board separately, maybe it would be a good idea to switch to a common binman config first and then do this for all boards at once.
Yes, I agree. Let me revert to a plain copy thereof and subsequently send another patch set migrating to a common binman config and then further improving on this one.
[...]

From: Max Krummenacher max.krummenacher@toradex.com
This powers some peripherals on the carrier board e.g. the USB hub.
Related-to: ELB-3206 Signed-off-by: Max Krummenacher max.krummenacher@toradex.com Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com ---
(no changes since v1)
arch/arm/dts/imx8mm-verdin.dts | 18 ++++++++++++++++++ configs/verdin-imx8mm_defconfig | 1 + 2 files changed, 19 insertions(+)
diff --git a/arch/arm/dts/imx8mm-verdin.dts b/arch/arm/dts/imx8mm-verdin.dts index ac2a4b69d3c..a2331627d72 100644 --- a/arch/arm/dts/imx8mm-verdin.dts +++ b/arch/arm/dts/imx8mm-verdin.dts @@ -196,6 +196,18 @@ }; };
+&gpio5 { + ctrl_sleep_moci { + gpio-hog; + /* Verdin CTRL_SLEEP_MOCI# (SODIMM 256) */ + gpios = <1 GPIO_ACTIVE_HIGH>; + line-name = "CTRL_SLEEP_MOCI#"; + output-high; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_ctrl_sleep_moci>; + }; +}; + /* On-module I2C */ &i2c1 { clock-frequency = <400000>; @@ -548,6 +560,12 @@ >; };
+ pinctrl_ctrl_sleep_moci: ctrlsleepmocigrp { + fsl,pins = < + MX8MM_IOMUXC_SAI3_TXD_GPIO5_IO1 0x1c4 /* SODIMM 256 */ + >; + }; + pinctrl_dsi_bkl_en: dsi_bkl_en { fsl,pins = < MX8MM_IOMUXC_NAND_CE2_B_GPIO3_IO3 0x1c4 /* SODIMM 21 */ diff --git a/configs/verdin-imx8mm_defconfig b/configs/verdin-imx8mm_defconfig index b323ceb19af..ad9c00a3cc4 100644 --- a/configs/verdin-imx8mm_defconfig +++ b/configs/verdin-imx8mm_defconfig @@ -71,6 +71,7 @@ CONFIG_SPL_CLK_COMPOSITE_CCF=y CONFIG_CLK_COMPOSITE_CCF=y CONFIG_SPL_CLK_IMX8MM=y CONFIG_CLK_IMX8MM=y +CONFIG_GPIO_HOG=y CONFIG_MXC_GPIO=y CONFIG_DM_I2C=y CONFIG_SYS_I2C_MXC=y

From: Max Krummenacher max.krummenacher@toradex.com
We drop support for Verdin iMX8M Mini V1.0B.
Related-to: ELB-3551 Signed-off-by: Max Krummenacher max.krummenacher@toradex.com Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com
---
Changes in v2: - Drop first patch ("imx: mkimage_fit_atf: fix legacy image generation") as a similar fix was already refused earlier.
board/toradex/verdin-imx8mm/verdin-imx8mm.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/board/toradex/verdin-imx8mm/verdin-imx8mm.c b/board/toradex/verdin-imx8mm/verdin-imx8mm.c index 1644f4b3081..2d8b37ce26d 100644 --- a/board/toradex/verdin-imx8mm/verdin-imx8mm.c +++ b/board/toradex/verdin-imx8mm/verdin-imx8mm.c @@ -9,6 +9,7 @@ #include <asm/arch/sys_proto.h> #include <asm/global_data.h> #include <asm/io.h> +#include <hang.h> #include <i2c.h> #include <miiphy.h> #include <netdev.h> @@ -87,17 +88,13 @@ static void select_dt_from_module_version(void)
switch (get_pcb_revision()) { case PCB_VERSION_1_0: - printf("Detected a V1.0 module\n"); - if (is_wifi) - strncpy(&variant[0], "wifi", sizeof(variant)); - else - strncpy(&variant[0], "nonwifi", sizeof(variant)); - break; + printf("Detected a V1.0 module which is no longer supported in this BSP version\n"); + hang(); default: if (is_wifi) - strncpy(&variant[0], "wifi-v1.1", sizeof(variant)); + strlcpy(&variant[0], "wifi", sizeof(variant)); else - strncpy(&variant[0], "nonwifi-v1.1", sizeof(variant)); + strlcpy(&variant[0], "nonwifi", sizeof(variant)); break; }

From: Oleksandr Suvorov oleksandr.suvorov@toradex.com
Variable "kernel_image" is used in boot.scr script only, that sets its own default value to the constant string @@KERNEL_IMAGETYPE@@ in case "kernel_image" is not set. The default name of the kernel image shipped with BSP 5.x is "Image.gz". Setting kernel_image="Image" as a pre-defined u-boot variable breaks booting systems with modern versions of boot.scr, whereas renaming it fixes booting with modern scripts and does not break working of earlier versions of boot.scr.
Signed-off-by: Oleksandr Suvorov oleksandr.suvorov@toradex.com Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com
---
Changes in v2: - New patch allows booting recent embedded Linux BSPs.
include/configs/verdin-imx8mm.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/configs/verdin-imx8mm.h b/include/configs/verdin-imx8mm.h index 7be5e5ddf11..ad13f804be9 100644 --- a/include/configs/verdin-imx8mm.h +++ b/include/configs/verdin-imx8mm.h @@ -60,13 +60,13 @@ "console=ttymxc0\0" \ "fdt_addr=0x43000000\0" \ "fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" \ + "image=Image\0" \ "initrd_addr=0x43800000\0" \ "initrd_high=0xffffffffffffffff\0" \ - "kernel_image=Image\0" \ "netargs=setenv bootargs console=${console},${baudrate} " \ "root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp" \ "\0" \ - "nfsboot=run netargs; dhcp ${loadaddr} ${kernel_image}; " \ + "nfsboot=run netargs; dhcp ${loadaddr} ${image}; " \ "tftp ${fdt_addr} verdin/${fdtfile}; " \ "booti ${loadaddr} - ${fdt_addr}\0" \ "setup=setenv setupargs console=${console},${baudrate} " \

From: Igor Opaniuk igor.opaniuk@toradex.com
Enable and set preboot var with fdtfile evaluation. It will be checked and run immediately before starting the CONFIG_BOOTDELAY countdown and/or running the auto-boot command resp. entering interactive mode.
This provides possibility to use different boot cmds in interactive mode without manual setting fdtfile value, as it it's already evaluated before entering interactive mode.
Signed-off-by: Igor Opaniuk igor.opaniuk@toradex.com Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com
---
Changes in v2: - New patch addressing dynamic fdtfile definition.
configs/verdin-imx8mm_defconfig | 3 ++- include/configs/verdin-imx8mm.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/configs/verdin-imx8mm_defconfig b/configs/verdin-imx8mm_defconfig index ad9c00a3cc4..ab549ebbada 100644 --- a/configs/verdin-imx8mm_defconfig +++ b/configs/verdin-imx8mm_defconfig @@ -28,7 +28,8 @@ CONFIG_SPL_LOAD_FIT=y CONFIG_OF_SYSTEM_SETUP=y CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/toradex/verdin-imx8mm/imximage.cfg" # CONFIG_USE_BOOTCOMMAND is not set -CONFIG_DEFAULT_FDT_FILE="fsl-imx8mm-verdin-dev.dtb" +CONFIG_USE_PREBOOT=y +CONFIG_PREBOOT="setenv fdtfile imx8mm-verdin-${variant}-${fdt_board}.dtb" CONFIG_LOG=y # CONFIG_DISPLAY_BOARDINFO is not set CONFIG_DISPLAY_BOARDINFO_LATE=y diff --git a/include/configs/verdin-imx8mm.h b/include/configs/verdin-imx8mm.h index ad13f804be9..42fb1f2114a 100644 --- a/include/configs/verdin-imx8mm.h +++ b/include/configs/verdin-imx8mm.h @@ -59,7 +59,7 @@ "bootcmd_mfg=fastboot 0\0" \ "console=ttymxc0\0" \ "fdt_addr=0x43000000\0" \ - "fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" \ + "fdt_board=dev\0" \ "image=Image\0" \ "initrd_addr=0x43800000\0" \ "initrd_high=0xffffffffffffffff\0" \

From: Marcel Ziswiler marcel.ziswiler@toradex.com
Finally, found the root cause of the issue already once mentioned back here [2] which caused the following error message during boot:
imx_wdt watchdog@30280000: pinctrl_select_state_full: uclass_get_device_by_phandle_id: err=-19
Turns out while the watchdog node itself was already u-boot,dm-spl its pinctrl node was not which caused it to be unavailable at that early stage. Note that any and all other boards I checked also seem to be missing this. However, I can't judge whether or not they might indeed need a similar fix or not.
[2] https://marc.info/?l=u-boot&m=161786572422973
Fixes: commit d304e7ace3a6 ("ARM: imx8m: Fix reset in SPL on Toradex iMX8MM Verdin") Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com
---
Changes in v2: - New patch fixing watchdog pinctrl issue.
arch/arm/dts/imx8mm-verdin-u-boot.dtsi | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/arch/arm/dts/imx8mm-verdin-u-boot.dtsi b/arch/arm/dts/imx8mm-verdin-u-boot.dtsi index a3ad8f3ad37..2cc35a6e6f6 100644 --- a/arch/arm/dts/imx8mm-verdin-u-boot.dtsi +++ b/arch/arm/dts/imx8mm-verdin-u-boot.dtsi @@ -68,6 +68,10 @@ u-boot,dm-spl; };
+&pinctrl_wdog { + u-boot,dm-spl; +}; + &{/soc@0/bus@30800000/i2c@30a20000/pmic} { u-boot,dm-spl; };

Hi Marcel,
On Mon, Aug 23, 2021 at 12:04 PM Marcel Ziswiler marcel@ziswiler.com wrote:
From: Marcel Ziswiler marcel.ziswiler@toradex.com
An assortment of fixes and improvements like an Ethernet PHY configuration fix, DEK blob encapsulation preparation, migration to using binman to pack images, SLEEP_MOCI# enablement, dropping of V1.0 hardware support [1], renaming kernel image variable and using preboot for fdtfile evaluation.
Note that this series is applied on top of Peng's Makefile fix [2] as otherwise, it may not quite generate all binman artefacts in the right order as discussed here [3].
[1] https://developer.toradex.com/verdin-sample-phase-over [2] https://marc.info/?l=u-boot&m=162908373904742 [3] https://marc.info/?l=u-boot&m=162945614207220
Changes in v2:
- Explicitly pass filename to binman when generating binaries as suggested by Heiko.
- Use proper intermediate binary u-boot-spl-ddr.bin for imximage as pointed out by Heiko.
- Drop first patch ("imx: mkimage_fit_atf: fix legacy image generation") as a similar fix was already refused earlier.
- New patch allows booting recent embedded Linux BSPs.
- New patch addressing dynamic fdtfile definition.
- New patch fixing watchdog pinctrl issue.
For the series:
Reviewed-by: Fabio Estevam festevam@gmail.com
participants (6)
-
Fabio Estevam
-
Frieder Schrempf
-
Heiko Thiery
-
Marcel Ziswiler
-
Marcel Ziswiler
-
Simon Glass