diff mbox series

[U-Boot,v2,03/11] imx: tpc70: Add board_boot_order() to distinguish between eMMC and SD boot

Message ID 20190730071213.11238-4-lukma@denx.de
State Changes Requested
Delegated to: Stefano Babic
Headers show
Series dm: Convert TPC70 to use DM and DTS in SPL and u-boot proper | expand

Commit Message

Lukasz Majewski July 30, 2019, 7:12 a.m. UTC
The TPC70 can boot from SD card (debug/development) and eMMC (production).
The board_boot_order() function provides a run time check for the device
from which one wants to boot (it is selected by GPIO pins setup).

Moreover, a fallback to SD card is provided if the detection is not
possible or working properly.

Signed-off-by: Lukasz Majewski <lukma@denx.de>
---

 board/k+p/kp_imx6q_tpc/kp_imx6q_tpc_spl.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

Comments

Peng Fan Aug. 9, 2019, 7:04 a.m. UTC | #1
> Subject: [PATCH v2 03/11] imx: tpc70: Add board_boot_order() to distinguish
> between eMMC and SD boot
> 
> The TPC70 can boot from SD card (debug/development) and eMMC
> (production).
> The board_boot_order() function provides a run time check for the device
> from which one wants to boot (it is selected by GPIO pins setup).
> 
> Moreover, a fallback to SD card is provided if the detection is not possible or
> working properly.
> 
> Signed-off-by: Lukasz Majewski <lukma@denx.de>
> ---
> 
>  board/k+p/kp_imx6q_tpc/kp_imx6q_tpc_spl.c | 20
> ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
> 
> diff --git a/board/k+p/kp_imx6q_tpc/kp_imx6q_tpc_spl.c
> b/board/k+p/kp_imx6q_tpc/kp_imx6q_tpc_spl.c
> index e284d5ec57..e48a577f79 100644
> --- a/board/k+p/kp_imx6q_tpc/kp_imx6q_tpc_spl.c
> +++ b/board/k+p/kp_imx6q_tpc/kp_imx6q_tpc_spl.c
> @@ -308,6 +308,26 @@ int board_mmc_init(bd_t *bd)
>  	return fsl_esdhc_initialize(bd, &usdhc_cfg[0]);  }
> 
> +void board_boot_order(u32 *spl_boot_list) {
> +	u32 boot_device = spl_boot_device();
> +	u32 reg = imx6_src_get_boot_mode();
> +
> +	reg = (reg & IMX6_BMODE_MASK) >> IMX6_BMODE_SHIFT;
> +
> +	debug("%s: boot device: 0x%x (0x4 SD, 0x6 eMMC)\n", __func__, reg);
> +	if (boot_device == BOOT_DEVICE_MMC1)
> +		if (reg == IMX6_BMODE_MMC || reg == IMX6_BMODE_EMMC)
> +			boot_device = BOOT_DEVICE_MMC2;
> +
> +	spl_boot_list[0] = boot_device;
> +	/*
> +	 * Below boot device is a 'fallback' - it shall always be possible to
> +	 * boot from SD card
> +	 */
> +	spl_boot_list[1] = BOOT_DEVICE_MMC1;
> +}
> +
>  void board_init_f(ulong dummy)
>  {
>  	/* setup AIPS and disable watchdog */

Reviewed-by: Peng Fan <peng.fan@nxp.com>

> --
> 2.11.0
diff mbox series

Patch

diff --git a/board/k+p/kp_imx6q_tpc/kp_imx6q_tpc_spl.c b/board/k+p/kp_imx6q_tpc/kp_imx6q_tpc_spl.c
index e284d5ec57..e48a577f79 100644
--- a/board/k+p/kp_imx6q_tpc/kp_imx6q_tpc_spl.c
+++ b/board/k+p/kp_imx6q_tpc/kp_imx6q_tpc_spl.c
@@ -308,6 +308,26 @@  int board_mmc_init(bd_t *bd)
 	return fsl_esdhc_initialize(bd, &usdhc_cfg[0]);
 }
 
+void board_boot_order(u32 *spl_boot_list)
+{
+	u32 boot_device = spl_boot_device();
+	u32 reg = imx6_src_get_boot_mode();
+
+	reg = (reg & IMX6_BMODE_MASK) >> IMX6_BMODE_SHIFT;
+
+	debug("%s: boot device: 0x%x (0x4 SD, 0x6 eMMC)\n", __func__, reg);
+	if (boot_device == BOOT_DEVICE_MMC1)
+		if (reg == IMX6_BMODE_MMC || reg == IMX6_BMODE_EMMC)
+			boot_device = BOOT_DEVICE_MMC2;
+
+	spl_boot_list[0] = boot_device;
+	/*
+	 * Below boot device is a 'fallback' - it shall always be possible to
+	 * boot from SD card
+	 */
+	spl_boot_list[1] = BOOT_DEVICE_MMC1;
+}
+
 void board_init_f(ulong dummy)
 {
 	/* setup AIPS and disable watchdog */