On Mon, 2023-10-02 at 08:57 -0300, Hiago De Franco wrote:
> From: Hiago De Franco <hiago.fra...@toradex.com>
> 
> Add detection of eMMC vs NAND devices on the Colibri iMX7
> board. A GPIO is configured to detect the presence of an on-board resistor
> that is configured differently based on the flash memory used. Depending on
> the detection result, the 'variant' environment variable is set to '-emmc'
> or cleared, indicating the type of storage device.
> 
> This enhancement improves variant detection during system initialization
> through USB recovery mode, where U-Boot is loaded directly to RAM. This
> allows variant detection for an accurate device tree selection.
> 
> Signed-off-by: Hiago De Franco <hiago.fra...@toradex.com>

Acked-by: Marcel Ziswiler <marcel.ziswi...@toradex.com>

> ---
>  board/toradex/colibri_imx7/colibri_imx7.c | 24 +++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
> 
> diff --git a/board/toradex/colibri_imx7/colibri_imx7.c 
> b/board/toradex/colibri_imx7/colibri_imx7.c
> index 119e67b47f..f0356af008 100644
> --- a/board/toradex/colibri_imx7/colibri_imx7.c
> +++ b/board/toradex/colibri_imx7/colibri_imx7.c
> @@ -53,6 +53,11 @@ DECLARE_GLOBAL_DATA_PTR;
>  
>  #define USB_CDET_GPIO        IMX_GPIO_NR(7, 14)
>  
> +#define FLASH_DETECTION_CTRL (PAD_CTL_HYS | PAD_CTL_PUE)
> +#define FLASH_DET_GPIO IMX_GPIO_NR(6, 11)
> +
> +static bool is_emmc;
> +
>  int dram_init(void)
>  {
>       gd->ram_size = get_ram_size((void *)PHYS_SDRAM, imx_ddr_size());
> @@ -60,6 +65,10 @@ int dram_init(void)
>       return 0;
>  }
>  
> +static iomux_v3_cfg_t const flash_detection_pads[] = {
> +     MX7D_PAD_SD3_RESET_B__GPIO6_IO11 | MUX_PAD_CTRL(FLASH_DETECTION_CTRL),
> +};
> +
>  static iomux_v3_cfg_t const uart1_pads[] = {
>       MX7D_PAD_UART1_RX_DATA__UART1_DTE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
>       MX7D_PAD_UART1_TX_DATA__UART1_DTE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
> @@ -183,6 +192,16 @@ int board_init(void)
>       /* address of boot parameters */
>       gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
>  
> +     /*
> +      * Enable GPIO on NAND_WE_B/eMMC_RST with 100k pull-down. eMMC_RST
> +      * is pulled high with 4.7k for eMMC devices. This allows to reliably
> +      * detect eMMC/NAND flash
> +      */
> +     imx_iomux_v3_setup_multiple_pads(flash_detection_pads, 
> ARRAY_SIZE(flash_detection_pads));
> +     gpio_request(FLASH_DET_GPIO, "flash-detection-gpio");
> +     is_emmc = gpio_get_value(FLASH_DET_GPIO);
> +     gpio_free(FLASH_DET_GPIO);
> +
>  #ifdef CONFIG_FEC_MXC
>       setup_fec();
>  #endif
> @@ -348,6 +367,11 @@ int board_late_init(void)
>               env_set("bootcmd", "sdp 0");
>       }
>  #endif
> +     if (is_emmc)
> +             env_set("variant", "-emmc");
> +     else
> +             env_set("variant", "");
> +
>       return 0;
>  }
>  #endif /* CONFIG_BOARD_LATE_INIT */

Reply via email to