diff options
author | Masahiro Yamada <yamada.masahiro@socionext.com> | 2020-02-03 19:28:13 +0900 |
---|---|---|
committer | Masahiro Yamada <yamada.masahiro@socionext.com> | 2020-02-12 13:36:58 +0900 |
commit | 2cb260053d49cb4e925b46afd2f511639dd64b70 (patch) | |
tree | 89b2c4c9bf373cbd707a2d1ccff56fba77fb2b82 | |
parent | 1046c1cae27afa0b207373424d6ac3829140daba (diff) | |
download | platform_external_arm-trusted-firmware-2cb260053d49cb4e925b46afd2f511639dd64b70.tar.gz platform_external_arm-trusted-firmware-2cb260053d49cb4e925b46afd2f511639dd64b70.tar.bz2 platform_external_arm-trusted-firmware-2cb260053d49cb4e925b46afd2f511639dd64b70.zip |
uniphier: extend boot device detection for future SoCs
The next SoC will have:
- No boot swap
- SD boot
- No USB boot
Add new fields to handle this.
Change-Id: I772395f2c5dfc612e575b0cbd0657a5fa9611c25
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
-rw-r--r-- | plat/socionext/uniphier/uniphier.h | 3 | ||||
-rw-r--r-- | plat/socionext/uniphier/uniphier_boot_device.c | 12 |
2 files changed, 12 insertions, 3 deletions
diff --git a/plat/socionext/uniphier/uniphier.h b/plat/socionext/uniphier/uniphier.h index 729dc5caa..9deb3163b 100644 --- a/plat/socionext/uniphier/uniphier.h +++ b/plat/socionext/uniphier/uniphier.h @@ -25,7 +25,8 @@ unsigned int uniphier_get_boot_device(unsigned int soc); #define UNIPHIER_BOOT_DEVICE_EMMC 0 #define UNIPHIER_BOOT_DEVICE_NAND 1 #define UNIPHIER_BOOT_DEVICE_NOR 2 -#define UNIPHIER_BOOT_DEVICE_USB 3 +#define UNIPHIER_BOOT_DEVICE_SD 3 +#define UNIPHIER_BOOT_DEVICE_USB 4 #define UNIPHIER_BOOT_DEVICE_RSV 0xffffffff unsigned int uniphier_get_boot_master(unsigned int soc); diff --git a/plat/socionext/uniphier/uniphier_boot_device.c b/plat/socionext/uniphier/uniphier_boot_device.c index ce9caa985..517ec96a4 100644 --- a/plat/socionext/uniphier/uniphier_boot_device.c +++ b/plat/socionext/uniphier/uniphier_boot_device.c @@ -106,20 +106,25 @@ static unsigned int uniphier_pxs3_get_boot_device(uint32_t pinmon) } struct uniphier_boot_device_info { + bool have_boot_swap; + bool (*is_sd_boot)(uint32_t pinmon); bool (*is_usb_boot)(uint32_t pinmon); unsigned int (*get_boot_device)(uint32_t pinmon); }; static const struct uniphier_boot_device_info uniphier_boot_device_info[] = { [UNIPHIER_SOC_LD11] = { + .have_boot_swap = true, .is_usb_boot = uniphier_ld11_is_usb_boot, .get_boot_device = uniphier_ld11_get_boot_device, }, [UNIPHIER_SOC_LD20] = { + .have_boot_swap = true, .is_usb_boot = uniphier_ld20_is_usb_boot, .get_boot_device = uniphier_ld11_get_boot_device, }, [UNIPHIER_SOC_PXS3] = { + .have_boot_swap = true, .is_usb_boot = uniphier_pxs3_is_usb_boot, .get_boot_device = uniphier_pxs3_get_boot_device, }, @@ -135,10 +140,13 @@ unsigned int uniphier_get_boot_device(unsigned int soc) pinmon = mmio_read_32(UNIPHIER_PINMON0); - if (!(pinmon & BIT(29))) + if (info->have_boot_swap && !(pinmon & BIT(29))) return UNIPHIER_BOOT_DEVICE_NOR; - if (info->is_usb_boot(pinmon)) + if (info->is_sd_boot && info->is_sd_boot(pinmon)) + return UNIPHIER_BOOT_DEVICE_SD; + + if (info->is_usb_boot && info->is_usb_boot(pinmon)) return UNIPHIER_BOOT_DEVICE_USB; return info->get_boot_device(pinmon); |