mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
toradex: colibri_imx7: Enable nand/emmc detection and set boot variant
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.franco@toradex.com> Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com> Reviewed-by: Fabio Estevam <festevam@gmail.com>
This commit is contained in:
parent
35fe2ae244
commit
0c39564d02
1 changed files with 24 additions and 0 deletions
|
@ -53,6 +53,11 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
#define USB_CDET_GPIO IMX_GPIO_NR(7, 14)
|
#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)
|
int dram_init(void)
|
||||||
{
|
{
|
||||||
gd->ram_size = get_ram_size((void *)PHYS_SDRAM, imx_ddr_size());
|
gd->ram_size = get_ram_size((void *)PHYS_SDRAM, imx_ddr_size());
|
||||||
|
@ -60,6 +65,10 @@ int dram_init(void)
|
||||||
return 0;
|
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[] = {
|
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_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),
|
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 */
|
/* address of boot parameters */
|
||||||
gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
|
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
|
#ifdef CONFIG_FEC_MXC
|
||||||
setup_fec();
|
setup_fec();
|
||||||
#endif
|
#endif
|
||||||
|
@ -348,6 +367,11 @@ int board_late_init(void)
|
||||||
env_set("bootcmd", "sdp 0");
|
env_set("bootcmd", "sdp 0");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (is_emmc)
|
||||||
|
env_set("variant", "-emmc");
|
||||||
|
else
|
||||||
|
env_set("variant", "");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_BOARD_LATE_INIT */
|
#endif /* CONFIG_BOARD_LATE_INIT */
|
||||||
|
|
Loading…
Reference in a new issue