[PATCH 1/1] [u-boot][master][PATCH v5] pico-imx7d: add baseboard SD card boot detect
Fabio Estevam
festevam at gmail.com
Thu Oct 26 15:23:13 CEST 2023
On Sat, Oct 21, 2023 at 9:40 AM <egyszeregy at freemail.hu> wrote:
>
> From: Benjamin Szőke <egyszeregy at freemail.hu>
>
> Technexion PICO-IMX7 SoM is supporting USDHC3 (eMMC or micro SD on SoM)
> and USDHC1 (SD on carrier board) to use on any carrier board like
> PICO-NYMPH. This pacth is intend to take over codes from Technexion
> to support mmc autodetect boot for pico-imx7d to able to boot from
> selected USDHC1 or USDHC3 boot devices.
>
> Signed-off-by: Benjamin Szőke <egyszeregy at freemail.hu>
> ---
Please always provide a changelog.
> board/technexion/pico-imx7d/pico-imx7d.c | 59 ++++++++++++++-
> board/technexion/pico-imx7d/spl.c | 91 ++++++++++++++++++++++--
> include/configs/pico-imx7d.h | 4 +-
> 3 files changed, 145 insertions(+), 9 deletions(-)
>
> diff --git a/board/technexion/pico-imx7d/pico-imx7d.c b/board/technexion/pico-imx7d/pico-imx7d.c
> index 6e98b85b28..01a9520d32 100644
> --- a/board/technexion/pico-imx7d/pico-imx7d.c
> +++ b/board/technexion/pico-imx7d/pico-imx7d.c
> @@ -5,6 +5,7 @@
>
> #include <init.h>
> #include <net.h>
> +#include <command.h>
> #include <asm/arch/clock.h>
> #include <asm/arch/crm_regs.h>
> #include <asm/arch/imx-regs.h>
> @@ -13,6 +14,7 @@
> #include <asm/global_data.h>
> #include <asm/gpio.h>
> #include <asm/mach-imx/iomux-v3.h>
> +#include <asm/mach-imx/boot_mode.h>
> #include <asm/io.h>
> #include <common.h>
> #include <miiphy.h>
> @@ -106,7 +108,7 @@ int board_phy_config(struct phy_device *phydev)
> {
> unsigned short val;
>
> - /* To enable AR8035 ouput a 125MHz clk from CLK_25M */
> + /* To enable AR8035 output a 125MHz clk from CLK_25M */
This is an unrelated change.
> phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x7);
> phy_write(phydev, MDIO_DEVAD_NONE, 0xe, 0x8016);
> phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x4007);
> @@ -129,6 +131,49 @@ int board_phy_config(struct phy_device *phydev)
> }
> #endif
>
> +#if CONFIG_IS_ENABLED(FSL_ESDHC_IMX)
> +int check_mmc_autodetect(void)
> +{
> + char *autodetect_str = env_get("mmcautodetect");
> +
> + if ((autodetect_str) &&
> + (strcmp(autodetect_str, "yes") == 0)) {
> + return 1;
> + }
No need for { to enclose a single line statement. Please remove it.
> +
> + return 0;
> +}
> +
> +void board_late_mmc_init(void)
> +{
> + int dev_no = 0;
> + char cmd[32];
> +
> + if (!check_mmc_autodetect())
> + return;
> +
> + switch (get_boot_device()) {
> + case SD3_BOOT:
> + case MMC3_BOOT:
> + env_set("bootdev", "MMC3");
> + dev_no = 2;
> + break;
> + case SD1_BOOT:
> + env_set("bootdev", "SD1");
> + dev_no = 0;
> + break;
These dev_no assignments are not correct.
imx7d-pico-pi-u-boot.dtsi defines aliases for the eMMC:
aliases {
mmc0 = &usdhc3;
So to avoid errors, I had to apply the following change on top o your patch:
--- a/board/technexion/pico-imx7d/pico-imx7d.c
+++ b/board/technexion/pico-imx7d/pico-imx7d.c
@@ -156,11 +156,11 @@ void board_late_mmc_init(void)
case SD3_BOOT:
case MMC3_BOOT:
env_set("bootdev", "MMC3");
- dev_no = 2;
+ dev_no = 0;
break;
case SD1_BOOT:
env_set("bootdev", "SD1");
- dev_no = 0;
+ dev_no = 1;
break;
default:
printf("Wrong boot device!");
> @@ -13,7 +13,7 @@
> #define CFG_MXC_UART_BASE UART5_IPS_BASE_ADDR
>
> /* MMC Config */
> -#define CFG_SYS_FSL_ESDHC_ADDR 0
> +#define CFG_SYS_FSL_ESDHC_ADDR USDHC3_BASE_ADDR
Is this change needed?
> #define CFG_DFU_ENV_SETTINGS \
> "dfu_alt_info=" \
> @@ -79,9 +79,11 @@
> "name=rootfs,size=0,uuid=${uuid_gpt_rootfs}\0" \
> "fastboot_partition_alias_system=rootfs\0" \
> "setup_emmc=mmc dev 0; gpt write mmc 0 $partitions; reset;\0" \
> + "mmcautodetect=yes\0" \
> PICO_BOOT_ENV
>
> #define BOOT_TARGET_DEVICES(func) \
> + func(MMC, mmc, 2) \
This should be func(MMC, mmc, 1)
Please define aliases if needed.
More information about the U-Boot
mailing list