arm: K3: am654: Choose MMC boot device based on boot port
Subsystems (2)
PATCH 1/2 arm: K3: am654: Choose MMC boot device based on boot port
For most devices the boot mode maps directly to the boot device. For MMC this is not the case as we have two MMC boot modes and two MMC boot devices (ports). Check the boot port to determine which MMC device was our boot device. Make this change for both primary and secondary boot modes.
--- arch/arm/mach-k3/am6_init.c | 21 +++++++++++++++++++- arch/arm/mach-k3/include/mach/am6_hardware.h | 6 ++++++ 2 files changed, 26 insertions(+), 1 deletion(-)
arch/arm/mach-k3/am6_init.c +20 -1
@@ -85,7 +85,13 @@ static u32 __get_backup_bootmedia(u32 devstat)case BACKUP_BOOT_DEVICE_ETHERNET :return BOOT_DEVICE_ETHERNET ;case BACKUP_BOOT_DEVICE_MMC2 : + { +u32 port = (devstat &CTRLMMR_MAIN_DEVSTAT_BKUP_MMC_PORT_MASK ) >> +CTRLMMR_MAIN_DEVSTAT_BKUP_MMC_PORT_SHIFT ; +if (port ==0x0 ) +return BOOT_DEVICE_MMC1 ;return BOOT_DEVICE_MMC2 ; + }case BACKUP_BOOT_DEVICE_SPI :return BOOT_DEVICE_SPI ;case BACKUP_BOOT_DEVICE_HYPERFLASH :
@@ -99,11 +105,24 @@ static u32 __get_backup_bootmedia(u32 devstat)static u32 __get_primary_bootmedia (u32 devstat) { -u32 bootmode = devstat &CTRLMMR_MAIN_DEVSTAT_BOOTMODE_MASK ; +u32 bootmode = (devstat &CTRLMMR_MAIN_DEVSTAT_BOOTMODE_MASK ) >> +CTRLMMR_MAIN_DEVSTAT_BOOTMODE_SHIFT ;if (bootmode ==BOOT_DEVICE_OSPI || bootmode ==BOOT_DEVICE_QSPI ) bootmode =BOOT_DEVICE_SPI ; +if (bootmode ==BOOT_DEVICE_MMC2 ) { +u32 port = (devstat &CTRLMMR_MAIN_DEVSTAT_MMC_PORT_MASK ) >> +CTRLMMR_MAIN_DEVSTAT_MMC_PORT_SHIFT ; +if (port ==0x0 ) + bootmode =BOOT_DEVICE_MMC1 ; + }else if (bootmode ==BOOT_DEVICE_MMC1 ) { +u32 port = (devstat &CTRLMMR_MAIN_DEVSTAT_EMMC_PORT_MASK ) >> +CTRLMMR_MAIN_DEVSTAT_EMMC_PORT_SHIFT ; +if (port ==0x1 ) + bootmode =BOOT_DEVICE_MMC2 ; + } +return bootmode; }
arch/arm/mach-k3/include/mach/am6_hardware.h +6 -0
@@ -16,6 +16,12 @@#define CTRLMMR_MAIN_DEVSTAT_BOOTMODE_SHIFT 0#define CTRLMMR_MAIN_DEVSTAT_BKUP_BOOTMODE_MASK GENMASK(6, 4)#define CTRLMMR_MAIN_DEVSTAT_BKUP_BOOTMODE_SHIFT 4 +#define CTRLMMR_MAIN_DEVSTAT_MMC_PORT_MASK GENMASK(12, 12) +#define CTRLMMR_MAIN_DEVSTAT_MMC_PORT_SHIFT 12 +#define CTRLMMR_MAIN_DEVSTAT_EMMC_PORT_MASK GENMASK(14, 14) +#define CTRLMMR_MAIN_DEVSTAT_EMMC_PORT_SHIFT 14 +#define CTRLMMR_MAIN_DEVSTAT_BKUP_MMC_PORT_MASK GENMASK(17, 17) +#define CTRLMMR_MAIN_DEVSTAT_BKUP_MMC_PORT_SHIFT 12#define WKUP_CTRL_MMR0_BASE 0x43000000#define MCU_CTRL_MMR0_BASE 0x40f00000
Signature · 1 line
2.18.0
PATCH 2/2 arm: K3: am654: Add support for getting boot mode
Read the boot mode register to find the boot mode. Only use eMMC boot0 mode when the mode is eMMC boot (called BOOT_DEVICE_MMC1 currently due to current conflating of boot mode and boot device), and not iff the boot device is MMC port 0.
--- arch/arm/mach-k3/am6_init.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)
arch/arm/mach-k3/am6_init.c +23 -0
@@ -72,6 +72,29 @@ void board_init_f(ulong dummy)preloader_console_init (); } +u32 spl_boot_mode (const u32 boot_device) +{ +#if defined(CONFIG_SUPPORT_EMMC_BOOT ) +u32 devstat =readl (CTRLMMR_MAIN_DEVSTAT ); +u32 bootindex =readl (K3_BOOT_PARAM_TABLE_INDEX_VAL ); + +u32 bootmode = (devstat &CTRLMMR_MAIN_DEVSTAT_BOOTMODE_MASK ) >> +CTRLMMR_MAIN_DEVSTAT_BOOTMODE_SHIFT ; + +/* eMMC boot0 mode is only supported for primary boot */ +if (bootindex ==K3_PRIMARY_BOOTMODE && + bootmode ==BOOT_DEVICE_MMC1 ) +return MMCSD_MODE_EMMCBOOT ; +#endif + +/* Everything else use filesystem if available */ +#if defined(CONFIG_SPL_FAT_SUPPORT ) || defined(CONFIG_SPL_EXT_SUPPORT ) +return MMCSD_MODE_FS ; +#else +return MMCSD_MODE_RAW ; +#endif +} +static u32 __get_backup_bootmedia (u32 devstat) { u32 bkup_boot = (devstat & CTRLMMR_MAIN_DEVSTAT_BKUP_BOOTMODE_MASK) >>
Signature · 1 line
2.18.0
PATCH 2/2 arm: K3: am654: Add support for getting boot mode
Quoted 6 lines · Andrew F. Davis
Read the boot mode register to find the boot mode. Only use eMMC boot0 mode when the mode is eMMC boot (called
BOOT_DEVICE_MMC1currently due to current conflating of boot mode and boot device), and not iff the boot device is MMC port 0.Signed-off-by Andrew F. Davis <[email protected]>
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181003/563d62f4/attachment.sig>
PATCH 2/2 arm: K3: am654: Add support for getting boot mode
In reply to Andrew F. DavisQuoted 6 lines · Andrew F. Davis
Read the boot mode register to find the boot mode. Only use eMMC boot0 mode when the mode is eMMC boot (called
BOOT_DEVICE_MMC1currently due to current conflating of boot mode and boot device), and not iff the boot device is MMC port 0.Signed-off-by Andrew F. Davis <[email protected]>
Thanks and regards,
Lokesh
PATCH 2/2 arm: K3: am654: Add support for getting boot mode
In reply to Andrew F. DavisQuoted 8 lines · Andrew F. Davis
Read the boot mode register to find the boot mode. Only use eMMC boot0 mode when the mode is eMMC boot (called
BOOT_DEVICE_MMC1currently due to current conflating of boot mode and boot device), and not iff the boot device is MMC port 0.Signed-off-by Andrew F. Davis <[email protected]>Reviewed-by Tom Rini <[email protected]>Reviewed-by Lokesh Vutla <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181011/884debf5/attachment.sig>
PATCH 1/2 arm: K3: am654: Choose MMC boot device based on boot port
In reply to Andrew F. DavisQuoted 8 lines · Andrew F. Davis
For most devices the boot mode maps directly to the boot device. For MMC this is not the case as we have two MMC boot modes and two MMC boot devices (ports). Check the boot port to determine which MMC device was our boot device. Make this change for both primary and secondary boot modes.
Signed-off-by Andrew F. Davis <[email protected]>
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181003/aaaea209/attachment.sig>
PATCH 1/2 arm: K3: am654: Choose MMC boot device based on boot port
In reply to Andrew F. DavisQuoted 8 lines · Andrew F. Davis
For most devices the boot mode maps directly to the boot device. For MMC this is not the case as we have two MMC boot modes and two MMC boot devices (ports). Check the boot port to determine which MMC device was our boot device. Make this change for both primary and secondary boot modes.
Signed-off-by Andrew F. Davis <[email protected]>
Thanks and regards,
Lokesh
PATCH 1/2 arm: K3: am654: Choose MMC boot device based on boot port
In reply to Andrew F. DavisQuoted 10 lines · Andrew F. Davis
For most devices the boot mode maps directly to the boot device. For MMC this is not the case as we have two MMC boot modes and two MMC boot devices (ports). Check the boot port to determine which MMC device was our boot device. Make this change for both primary and secondary boot modes.
Signed-off-by Andrew F. Davis <[email protected]>Reviewed-by Tom Rini <[email protected]>Reviewed-by Lokesh Vutla <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181011/45634b3a/attachment.sig>