[U-Boot] [PATCH v2 11/22] ARM: uniphier: detect SD boot mode

Masahiro Yamada yamada.masahiro at socionext.com
Wed Jul 10 11:07:39 UTC 2019


The planned new SoC supports the SD boot mode. Detect and display it.

Signed-off-by: Masahiro Yamada <yamada.masahiro at socionext.com>
---

 arch/arm/mach-uniphier/board_late_init.c         | 4 ++++
 arch/arm/mach-uniphier/boot-device/boot-device.c | 8 ++++++++
 2 files changed, 12 insertions(+)

diff --git a/arch/arm/mach-uniphier/board_late_init.c b/arch/arm/mach-uniphier/board_late_init.c
index 972dbe8ae553..86b128a91f95 100644
--- a/arch/arm/mach-uniphier/board_late_init.c
+++ b/arch/arm/mach-uniphier/board_late_init.c
@@ -68,6 +68,10 @@ int board_late_init(void)
 		printf("eMMC Boot");
 		env_set("bootdev", "emmc");
 		break;
+	case BOOT_DEVICE_MMC2:
+		printf("SD Boot");
+		env_set("bootdev", "sd");
+		break;
 	case BOOT_DEVICE_NAND:
 		printf("NAND Boot");
 		env_set("bootdev", "nand");
diff --git a/arch/arm/mach-uniphier/boot-device/boot-device.c b/arch/arm/mach-uniphier/boot-device/boot-device.c
index 3c2e7b660f3e..c9dfe13ed9c0 100644
--- a/arch/arm/mach-uniphier/boot-device/boot-device.c
+++ b/arch/arm/mach-uniphier/boot-device/boot-device.c
@@ -21,6 +21,7 @@ struct uniphier_boot_device_info {
 	unsigned int boot_device_sel_shift;
 	const struct uniphier_boot_device *boot_device_table;
 	const unsigned int *boot_device_count;
+	int (*boot_device_is_sd)(u32 pinmon);
 	int (*boot_device_is_usb)(u32 pinmon);
 	unsigned int (*boot_device_fixup)(unsigned int mode);
 	int (*boot_is_swapped)(void);
@@ -140,6 +141,9 @@ static unsigned int __uniphier_boot_device_raw(
 
 	pinmon = readl(SG_PINMON0);
 
+	if (info->boot_device_is_sd && info->boot_device_is_sd(pinmon))
+		return BOOT_DEVICE_MMC2;
+
 	if (info->boot_device_is_usb && info->boot_device_is_usb(pinmon))
 		return BOOT_DEVICE_USB;
 
@@ -224,6 +228,10 @@ static int do_pinmon(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
 	pinmon = readl(SG_PINMON0);
 
+	if (info->boot_device_is_sd)
+		printf("SD Boot:  %s\n",
+		       info->boot_device_is_sd(pinmon) ? "ON" : "OFF");
+
 	if (info->boot_device_is_usb)
 		printf("USB Boot:  %s\n",
 		       info->boot_device_is_usb(pinmon) ? "ON" : "OFF");
-- 
2.17.1



More information about the U-Boot mailing list