From 11907cb5cfbb30ab3923d10a874aee0bde8ec64c Mon Sep 17 00:00:00 2001 From: Fabio Estevam Date: Sat, 18 Dec 2021 18:10:20 -0300 Subject: [PATCH 1/9] udoo_spl: Initialize the eSDHC controller in SPL Currently, imx6q udoo board fails to boot like this: U-Boot SPL 2022.01-rc3-00061-g95ca715adad3 (Dec 18 2021 - 18:04:40 -0300) Trying to boot from MMC1 The reason is that the eSDHC controller is not initialized in SPL. Initialize the eSDHC controller in SPL via C code as DM is not used in SPL. Signed-off-by: Fabio Estevam Reviewed-by: Peter Robinson --- board/udoo/udoo_spl.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/board/udoo/udoo_spl.c b/board/udoo/udoo_spl.c index d9afbbb741..647380e1db 100644 --- a/board/udoo/udoo_spl.c +++ b/board/udoo/udoo_spl.c @@ -254,4 +254,39 @@ void board_init_f(ulong dummy) /* DDR initialization */ spl_dram_init(); } + +#define USDHC3_CD_GPIO IMX_GPIO_NR(7, 0) + +#define USDHC_PAD_CTRL (PAD_CTL_PUS_47K_UP | \ + PAD_CTL_SPEED_LOW | PAD_CTL_DSE_80ohm | \ + PAD_CTL_SRE_FAST | PAD_CTL_HYS) + +static struct fsl_esdhc_cfg usdhc_cfg[2] = { + {USDHC3_BASE_ADDR}, +}; + +static const iomux_v3_cfg_t usdhc3_pads[] = { + IOMUX_PADS(PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)), + IOMUX_PADS(PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)), + IOMUX_PADS(PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), + IOMUX_PADS(PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), + IOMUX_PADS(PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), + IOMUX_PADS(PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), + IOMUX_PADS(PAD_SD3_DAT5__GPIO7_IO00 | MUX_PAD_CTRL(NO_PAD_CTRL)), +}; + +int board_mmc_getcd(struct mmc *mmc) +{ + return !gpio_get_value(USDHC3_CD_GPIO); +} + +int board_mmc_init(struct bd_info *bis) +{ + SETUP_IOMUX_PADS(usdhc3_pads); + usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); + usdhc_cfg[0].max_bus_width = 4; + gpio_direction_input(USDHC3_CD_GPIO); + + return fsl_esdhc_initialize(bis, &usdhc_cfg[0]); +} #endif From 6869bab6a11e20b2f70bef5d286111a57b82e227 Mon Sep 17 00:00:00 2001 From: Fabio Estevam Date: Sat, 18 Dec 2021 18:10:21 -0300 Subject: [PATCH 2/9] ARM: dts: imx6qdl-udoo: Properly describe the SD card detect GPIO7_IO00 is used as SD card detect. Properly describe this in the devicetree. Signed-off-by: Fabio Estevam --- arch/arm/dts/imx6qdl-udoo.dtsi | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/arm/dts/imx6qdl-udoo.dtsi b/arch/arm/dts/imx6qdl-udoo.dtsi index d07d8f8345..2d0d102661 100644 --- a/arch/arm/dts/imx6qdl-udoo.dtsi +++ b/arch/arm/dts/imx6qdl-udoo.dtsi @@ -4,7 +4,7 @@ * * Author: Fabio Estevam */ - +#include / { aliases { backlight = &backlight; @@ -226,6 +226,7 @@ MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059 MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059 MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059 + MX6QDL_PAD_SD3_DAT5__GPIO7_IO00 0x1b0b0 >; }; @@ -304,7 +305,7 @@ &usdhc3 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_usdhc3>; - non-removable; + cd-gpios = <&gpio7 0 GPIO_ACTIVE_LOW>; status = "okay"; }; From c280ec210f31429bfdefa0eb3b211f12002c539b Mon Sep 17 00:00:00 2001 From: Fabio Estevam Date: Sat, 18 Dec 2021 18:10:22 -0300 Subject: [PATCH 3/9] udoo: Call gpio_request() Calling gpio_request() prior to its usage is now mandatory. This fixes the following GPIO errors: U-Boot SPL 2022.01-rc3-00067-g7a5be871c0ec (Dec 18 2021 - 17:45:07 -0300) Trying to boot from MMC1 U-Boot 2022.01-rc3-00067-g7a5be871c0ec (Dec 18 2021 - 17:45:07 -0300) CPU: Freescale i.MX6Q rev1.2 at 792 MHz Reset cause: WDOG Model: Udoo i.MX6 Quad Board Board: Udoo Quad DRAM: 1 GiB MMC: FSL_SDHC: 2 Loading Environment from MMC... OK In: serial Out: serial Err: serial gpio@20a0000: set_dir_flags: error: gpio GPIO2_31 not reserved gpio@20a4000: set_dir_flags: error: gpio GPIO3_23 not reserved gpio@20b0000: set_dir_flags: error: gpio GPIO6_24 not reserved gpio@20b0000: set_dir_flags: error: gpio GPIO6_25 not reserved gpio@20b0000: set_dir_flags: error: gpio GPIO6_27 not reserved gpio@20b0000: set_dir_flags: error: gpio GPIO6_28 not reserved gpio@20b0000: set_dir_flags: error: gpio GPIO6_29 not reserved gpio@20a4000: set_value: error: gpio GPIO3_23 not reserved Net: Could not get PHY for FEC0: addr -2 No ethernet found. Signed-off-by: Fabio Estevam Reviewed-by: Peter Robinson --- board/udoo/udoo.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/board/udoo/udoo.c b/board/udoo/udoo.c index 5c49388cbf..9e0365615d 100644 --- a/board/udoo/udoo.c +++ b/board/udoo/udoo.c @@ -90,6 +90,14 @@ int mx6_rgmii_rework(struct phy_device *phydev) static void setup_iomux_enet(void) { + gpio_request(IMX_GPIO_NR(2, 31), "eth_power"); + gpio_request(IMX_GPIO_NR(3, 23), "eth_phy_reset"); + gpio_request(IMX_GPIO_NR(6, 24), "strap1"); + gpio_request(IMX_GPIO_NR(6, 25), "strap2"); + gpio_request(IMX_GPIO_NR(6, 27), "strap3"); + gpio_request(IMX_GPIO_NR(6, 28), "strap4"); + gpio_request(IMX_GPIO_NR(6, 29), "strap5"); + gpio_direction_output(IMX_GPIO_NR(2, 31), 1); /* Power supply on */ gpio_direction_output(IMX_GPIO_NR(3, 23), 0); /* assert PHY rst */ From 353aa7b06fc30593095c909ea10b05ad045c6570 Mon Sep 17 00:00:00 2001 From: Fabio Estevam Date: Sat, 18 Dec 2021 18:10:23 -0300 Subject: [PATCH 4/9] udoo: Adjust the SD card device numbering After the conversion to DM the SD card shows up as 'mmc 2' device. Adjust the 'mmcdev' and the distro command 'func' accordingly. Signed-off-by: Fabio Estevam Reviewed-by: Peter Robinson --- configs/udoo_defconfig | 1 + include/configs/udoo.h | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/configs/udoo_defconfig b/configs/udoo_defconfig index 8e1bba1120..284ea05884 100644 --- a/configs/udoo_defconfig +++ b/configs/udoo_defconfig @@ -35,6 +35,7 @@ CONFIG_OF_CONTROL=y CONFIG_ENV_OVERWRITE=y CONFIG_ENV_IS_IN_MMC=y CONFIG_SYS_RELOC_GD_ENV_ADDR=y +CONFIG_SYS_MMC_ENV_DEV=2 CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y CONFIG_DM=y CONFIG_BOUNCE_BUFFER=y diff --git a/include/configs/udoo.h b/include/configs/udoo.h index fe6ea68dd4..4bddc0eca3 100644 --- a/include/configs/udoo.h +++ b/include/configs/udoo.h @@ -28,7 +28,7 @@ "fdt_addr=0x18000000\0" \ "fdt_addr_r=0x18000000\0" \ "ip_dyn=yes\0" \ - "mmcdev=0\0" \ + "mmcdev=2\0" \ "mmcrootfstype=ext4\0" \ "findfdt="\ "if test ${board_rev} = MX6Q; then " \ @@ -44,7 +44,7 @@ BOOTENV #define BOOT_TARGET_DEVICES(func) \ - func(MMC, mmc, 0) \ + func(MMC, mmc, 2) \ func(SATA, sata, 0) \ func(DHCP, dhcp, na) From 6a69afe7961957158a93b089d45fff999f95ab23 Mon Sep 17 00:00:00 2001 From: Fabio Estevam Date: Sat, 18 Dec 2021 18:10:24 -0300 Subject: [PATCH 5/9] udoo: Increase CONFIG_ENV_OFFSET Increase CONFIG_ENV_OFFSET to avoid the environment region to overlap with U-Boot proper. Signed-off-by: Fabio Estevam Reviewed-by: Peter Robinson --- configs/udoo_defconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/udoo_defconfig b/configs/udoo_defconfig index 284ea05884..ab2b2ee675 100644 --- a/configs/udoo_defconfig +++ b/configs/udoo_defconfig @@ -7,7 +7,7 @@ CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y CONFIG_NR_DRAM_BANKS=1 CONFIG_ENV_SIZE=0x2000 -CONFIG_ENV_OFFSET=0x60000 +CONFIG_ENV_OFFSET=0xC0000 CONFIG_MX6QDL=y CONFIG_TARGET_UDOO=y CONFIG_DM_GPIO=y From 7ad0cee75477507f3406a6b50637555d4fe3751a Mon Sep 17 00:00:00 2001 From: Fabio Estevam Date: Sat, 18 Dec 2021 18:10:25 -0300 Subject: [PATCH 6/9] udoo: Select CMD_DM CMD_DM is useful for showing the whole DM tree. Enable it via "imply CMD_DM". Signed-off-by: Fabio Estevam Reviewed-by: Peter Robinson --- arch/arm/mach-imx/mx6/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm/mach-imx/mx6/Kconfig b/arch/arm/mach-imx/mx6/Kconfig index 62de942a32..98df4d4e42 100644 --- a/arch/arm/mach-imx/mx6/Kconfig +++ b/arch/arm/mach-imx/mx6/Kconfig @@ -588,6 +588,7 @@ config TARGET_UDOO depends on MX6QDL select BOARD_LATE_INIT select SUPPORT_SPL + imply CMD_DM config TARGET_UDOO_NEO bool "UDOO Neo" From 8f758683a8077a13571f6ad57ccb4d7fe9e7b184 Mon Sep 17 00:00:00 2001 From: Gary Bisson Date: Thu, 6 Jan 2022 16:02:08 +0100 Subject: [PATCH 7/9] usb: gadget: dwc2_udc_otg: set ep's desc during enable/disable Fastboot support has been broken on platforms using dwc2 controller since the gadget gets its max packet size from it. This patch is the equivalent of 723fd5668ff which fixed the same issue but for the chipidea controller. Fixes: 27c9141b111 ("usb: gadget: fastboot: use correct max packet size") Signed-off-by: Gary Bisson Reviewed-by: Neil Armstrong Tested-by: Mattijs Korpershoek --- drivers/usb/gadget/dwc2_udc_otg.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/usb/gadget/dwc2_udc_otg.c b/drivers/usb/gadget/dwc2_udc_otg.c index 2f31814442..fb10884755 100644 --- a/drivers/usb/gadget/dwc2_udc_otg.c +++ b/drivers/usb/gadget/dwc2_udc_otg.c @@ -655,6 +655,7 @@ static int dwc2_ep_enable(struct usb_ep *_ep, return -ESHUTDOWN; } + _ep->desc = desc; ep->stopped = 0; ep->desc = desc; ep->pio_irqs = 0; @@ -695,6 +696,7 @@ static int dwc2_ep_disable(struct usb_ep *_ep) /* Nuke all pending requests */ nuke(ep, -ESHUTDOWN); + _ep->desc = NULL; ep->desc = 0; ep->stopped = 1; From 1b2fb345d755d214728ef7377c06a00dc5d6759b Mon Sep 17 00:00:00 2001 From: Gary Bisson Date: Wed, 5 Jan 2022 14:17:53 +0100 Subject: [PATCH 8/9] nitrogen6x: add missing pinctrl to fix mmc Since commit f7ac30b042d, the pin muxing for mmc was removed from the board file to be managed by DM_MMC which requires PINCTRL to work. It made the change for sabrelite but nitrogen configs were forgotten. Signed-off-by: Gary Bisson Reviewed-by: Fabio Estevam Acked-by: Troy Kisky --- configs/nitrogen6dl2g_defconfig | 2 ++ configs/nitrogen6dl_defconfig | 2 ++ configs/nitrogen6q2g_defconfig | 2 ++ configs/nitrogen6q_defconfig | 2 ++ configs/nitrogen6s1g_defconfig | 2 ++ configs/nitrogen6s_defconfig | 2 ++ 6 files changed, 12 insertions(+) diff --git a/configs/nitrogen6dl2g_defconfig b/configs/nitrogen6dl2g_defconfig index 593a43e5e7..20c5d30257 100644 --- a/configs/nitrogen6dl2g_defconfig +++ b/configs/nitrogen6dl2g_defconfig @@ -68,6 +68,8 @@ CONFIG_PHY_MICREL=y CONFIG_PHY_MICREL_KSZ90X1=y CONFIG_FEC_MXC=y CONFIG_MII=y +CONFIG_PINCTRL=y +CONFIG_PINCTRL_IMX6=y CONFIG_MXC_UART=y CONFIG_SPI=y CONFIG_DM_SPI=y diff --git a/configs/nitrogen6dl_defconfig b/configs/nitrogen6dl_defconfig index 4bcc675680..796bd66bc2 100644 --- a/configs/nitrogen6dl_defconfig +++ b/configs/nitrogen6dl_defconfig @@ -68,6 +68,8 @@ CONFIG_PHY_MICREL=y CONFIG_PHY_MICREL_KSZ90X1=y CONFIG_FEC_MXC=y CONFIG_MII=y +CONFIG_PINCTRL=y +CONFIG_PINCTRL_IMX6=y CONFIG_MXC_UART=y CONFIG_SPI=y CONFIG_DM_SPI=y diff --git a/configs/nitrogen6q2g_defconfig b/configs/nitrogen6q2g_defconfig index 76fc53d515..b42220db06 100644 --- a/configs/nitrogen6q2g_defconfig +++ b/configs/nitrogen6q2g_defconfig @@ -70,6 +70,8 @@ CONFIG_PHY_MICREL=y CONFIG_PHY_MICREL_KSZ90X1=y CONFIG_FEC_MXC=y CONFIG_MII=y +CONFIG_PINCTRL=y +CONFIG_PINCTRL_IMX6=y CONFIG_MXC_UART=y CONFIG_SPI=y CONFIG_DM_SPI=y diff --git a/configs/nitrogen6q_defconfig b/configs/nitrogen6q_defconfig index fca3e5f531..cc08559496 100644 --- a/configs/nitrogen6q_defconfig +++ b/configs/nitrogen6q_defconfig @@ -70,6 +70,8 @@ CONFIG_PHY_MICREL=y CONFIG_PHY_MICREL_KSZ90X1=y CONFIG_FEC_MXC=y CONFIG_MII=y +CONFIG_PINCTRL=y +CONFIG_PINCTRL_IMX6=y CONFIG_MXC_UART=y CONFIG_SPI=y CONFIG_DM_SPI=y diff --git a/configs/nitrogen6s1g_defconfig b/configs/nitrogen6s1g_defconfig index 8b720b0d60..17133c5cd6 100644 --- a/configs/nitrogen6s1g_defconfig +++ b/configs/nitrogen6s1g_defconfig @@ -68,6 +68,8 @@ CONFIG_PHY_MICREL=y CONFIG_PHY_MICREL_KSZ90X1=y CONFIG_FEC_MXC=y CONFIG_MII=y +CONFIG_PINCTRL=y +CONFIG_PINCTRL_IMX6=y CONFIG_MXC_UART=y CONFIG_SPI=y CONFIG_DM_SPI=y diff --git a/configs/nitrogen6s_defconfig b/configs/nitrogen6s_defconfig index a9d239e9be..242580e3e9 100644 --- a/configs/nitrogen6s_defconfig +++ b/configs/nitrogen6s_defconfig @@ -68,6 +68,8 @@ CONFIG_PHY_MICREL=y CONFIG_PHY_MICREL_KSZ90X1=y CONFIG_FEC_MXC=y CONFIG_MII=y +CONFIG_PINCTRL=y +CONFIG_PINCTRL_IMX6=y CONFIG_MXC_UART=y CONFIG_SPI=y CONFIG_DM_SPI=y From b05cebb5f244f2891b40397ce2eb0f4596fec659 Mon Sep 17 00:00:00 2001 From: Patrick Wildt Date: Sat, 8 Jan 2022 16:34:17 +0100 Subject: [PATCH 9/9] imx8mq: Generate a single bootable flash.bin again All i.MX8MQ boards have been converted to binman, which makes it necessary to flash both flash.bin and u-boot.itb to get a bootable system. Prior to the conversion, only flash.bin was needed. Such new requirement breaks existing distro mechanisms to generate the final binary because the extra u-boot.itb is now required. Generate a final flash.bin that can be used again as a single bootable binary to keep the original behavior. After this change the SPL binary is called spl.bin, which is a more descriptive name for its purpose, and can still be used standalone (for example, for secure boot purposes). Also update imx8mq_evk.rst to remove the u-boot.itb copy step. This is a cherry-pick of 028abfd9b157 ("imx8mm-evk: Generate a single bootable flash.bin again") adjusted to apply to i.MX8MQ. Signed-off-by: Patrick Wildt Reviewed-by: Fabio Estevam --- arch/arm/dts/imx8mq-u-boot.dtsi | 19 ++++++++++++++++++- arch/arm/mach-imx/imx8m/imximage.cfg | 2 +- doc/board/nxp/imx8mq_evk.rst | 1 - 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/arch/arm/dts/imx8mq-u-boot.dtsi b/arch/arm/dts/imx8mq-u-boot.dtsi index 2c10e9b645..8a6075c77b 100644 --- a/arch/arm/dts/imx8mq-u-boot.dtsi +++ b/arch/arm/dts/imx8mq-u-boot.dtsi @@ -50,7 +50,9 @@ }; }; - flash { + spl { + filename = "spl.bin"; + mkimage { args = "-n spl/u-boot-spl.cfgout -T imx8mimage -e 0x7e1000"; @@ -119,4 +121,19 @@ }; }; }; + + imx-boot { + filename = "flash.bin"; + pad-byte = <0x00>; + + spl: blob-ext@1 { + offset = <0x0>; + filename = "spl.bin"; + }; + + uboot: blob-ext@2 { + offset = <0x57c00>; + filename = "u-boot.itb"; + }; + }; }; diff --git a/arch/arm/mach-imx/imx8m/imximage.cfg b/arch/arm/mach-imx/imx8m/imximage.cfg index 9c6eaf0a6d..2a3f959183 100644 --- a/arch/arm/mach-imx/imx8m/imximage.cfg +++ b/arch/arm/mach-imx/imx8m/imximage.cfg @@ -8,4 +8,4 @@ FIT BOOT_FROM sd SIGNED_HDMI signed_hdmi.bin -LOADER mkimage.flash.mkimage 0x7e1000 +LOADER u-boot-spl-ddr.bin 0x7e1000 diff --git a/doc/board/nxp/imx8mq_evk.rst b/doc/board/nxp/imx8mq_evk.rst index 92eeda79aa..aa1ecfb47a 100644 --- a/doc/board/nxp/imx8mq_evk.rst +++ b/doc/board/nxp/imx8mq_evk.rst @@ -50,7 +50,6 @@ Burn the flash.bin to MicroSD card offset 33KB: .. code-block:: bash $sudo dd if=flash.bin of=/dev/sd[x] bs=1024 seek=33 conv=notrunc - $sudo dd if=u-boot.itb of=/dev/sd[x] bs=1024 seek=384 conv=notrunc Boot ----