Hi Simon,
On 7/21/24 5:25 PM, Simon Glass wrote:
Make the raw-mode options depend on SPL_SYS_MMCSD_RAW_MODE in a more
direct way. This makes it easier to understand the options with
'make menuconfig'.
There are three different ways of specifying the offset:
- sector offset
- partition number
- partition type
So make these a choice, so it is more obvious what is going on.
Update existing boards to enable SPL_SYS_MMCSD_RAW_MODE where needed.
Reviewed-by: Sean Anderson <sean...@gmail.com>
Signed-off-by: Simon Glass <s...@chromium.org>
---
(no changes since v1)
arch/arm/mach-imx/imx8m/soc.c | 2 +
arch/arm/mach-imx/spl_imx_romapi.c | 13 ++++-
.../imx8mp_rsb3720a1/imx8mp_rsb3720a1.c | 4 +-
common/spl/Kconfig | 52 +++++++++++--------
configs/am335x_guardian_defconfig | 2 +-
configs/am335x_pdu001_defconfig | 2 +-
configs/am3517_evm_defconfig | 2 +-
configs/am62ax_evm_a53_defconfig | 1 +
configs/am62ax_evm_r5_defconfig | 1 +
configs/am62px_evm_a53_defconfig | 1 +
configs/am62px_evm_r5_defconfig | 1 +
configs/am62x_beagleplay_a53_defconfig | 1 +
configs/am62x_beagleplay_r5_defconfig | 1 +
configs/am62x_evm_a53_defconfig | 1 +
configs/am62x_evm_r5_defconfig | 1 +
configs/am64x_evm_a53_defconfig | 1 +
configs/am64x_evm_r5_defconfig | 1 +
configs/am65x_evm_a53_defconfig | 1 +
configs/am65x_evm_r5_defconfig | 1 +
configs/brppt2_defconfig | 2 +-
configs/brsmarc1_defconfig | 2 +-
configs/cgtqmx8_defconfig | 1 +
configs/chromebit_mickey_defconfig | 2 +-
configs/chromebook_jerry_defconfig | 2 +-
configs/chromebook_minnie_defconfig | 2 +-
configs/chromebook_speedy_defconfig | 2 +-
configs/ci20_mmc_defconfig | 1 +
configs/da850evm_defconfig | 2 +-
configs/da850evm_nand_defconfig | 2 +-
configs/deneb_defconfig | 1 +
configs/display5_defconfig | 2 +-
configs/display5_factory_defconfig | 2 +-
configs/draco-rastaban_defconfig | 2 +-
configs/draco-thuban_defconfig | 2 +-
.../gardena-smart-gateway-at91sam_defconfig | 2 +-
configs/giedi_defconfig | 1 +
configs/imx28_xea_defconfig | 1 +
configs/imx28_xea_sb_defconfig | 1 +
configs/imx6q_logic_defconfig | 2 +-
configs/imx8mm-cl-iot-gate-optee_defconfig | 1 +
configs/imx8mm-cl-iot-gate_defconfig | 1 +
configs/imx8mm-icore-mx8mm-ctouch2_defconfig | 1 +
configs/imx8mm-icore-mx8mm-edimm2.2_defconfig | 1 +
configs/imx8mm-mx8menlo_defconfig | 1 +
configs/imx8mm-phygate-tauri-l_defconfig | 1 +
configs/imx8mm_beacon_defconfig | 1 +
configs/imx8mm_beacon_fspi_defconfig | 1 +
configs/imx8mm_data_modul_edm_sbc_defconfig | 1 +
configs/imx8mm_evk_defconfig | 1 +
configs/imx8mm_evk_fspi_defconfig | 1 +
configs/imx8mm_phg_defconfig | 1 +
configs/imx8mm_venice_defconfig | 1 +
configs/imx8mn_beacon_2g_defconfig | 1 +
configs/imx8mn_beacon_defconfig | 1 +
configs/imx8mn_beacon_fspi_defconfig | 1 +
configs/imx8mn_bsh_smm_s2_defconfig | 1 +
configs/imx8mn_bsh_smm_s2pro_defconfig | 1 +
configs/imx8mn_ddr4_evk_defconfig | 1 +
configs/imx8mn_evk_defconfig | 1 +
configs/imx8mn_var_som_defconfig | 1 +
configs/imx8mn_venice_defconfig | 1 +
configs/imx8mp-icore-mx8mp-edimm2.2_defconfig | 1 +
configs/imx8mp_beacon_defconfig | 1 +
configs/imx8mp_data_modul_edm_sbc_defconfig | 1 +
configs/imx8mp_debix_model_a_defconfig | 1 +
configs/imx8mp_dhcom_pdk2_defconfig | 1 +
configs/imx8mp_dhcom_pdk3_defconfig | 1 +
configs/imx8mp_evk_defconfig | 1 +
configs/imx8mp_rsb3720a1_4G_defconfig | 2 +
configs/imx8mp_rsb3720a1_6G_defconfig | 1 +
configs/imx8mp_venice_defconfig | 1 +
configs/imx8mq_cm_defconfig | 1 +
configs/imx8mq_evk_defconfig | 1 +
configs/imx8mq_phanbell_defconfig | 1 +
configs/imx8mq_reform2_defconfig | 1 +
configs/imx8qm_mek_defconfig | 1 +
configs/imx8qxp_mek_defconfig | 1 +
configs/imx8ulp_evk_defconfig | 1 +
configs/imx93-phyboard-segin_defconfig | 1 +
configs/imx93_11x11_evk_defconfig | 1 +
configs/imx93_11x11_evk_ld_defconfig | 1 +
configs/imx93_var_som_defconfig | 1 +
configs/imxrt1020-evk_defconfig | 1 +
configs/imxrt1050-evk_defconfig | 1 +
configs/imxrt1050-evk_fspi_defconfig | 1 +
configs/imxrt1170-evk_defconfig | 1 +
configs/iot2050_defconfig | 1 +
configs/j7200_evm_a72_defconfig | 1 +
configs/j7200_evm_r5_defconfig | 1 +
configs/j721e_beagleboneai64_a72_defconfig | 1 +
configs/j721e_beagleboneai64_r5_defconfig | 1 +
configs/j721e_evm_a72_defconfig | 1 +
configs/j721e_evm_r5_defconfig | 1 +
configs/j721s2_evm_a72_defconfig | 1 +
configs/j721s2_evm_r5_defconfig | 1 +
configs/j722s_evm_a53_defconfig | 1 +
configs/j722s_evm_r5_defconfig | 1 +
configs/j784s4_evm_a72_defconfig | 1 +
configs/j784s4_evm_r5_defconfig | 1 +
configs/kontron-sl-mx8mm_defconfig | 1 +
configs/kontron_pitx_imx8m_defconfig | 1 +
configs/kontron_sl28_defconfig | 1 +
configs/librem5_defconfig | 1 +
configs/ls1021aiot_sdcard_defconfig | 1 +
configs/ls1021aqds_nand_defconfig | 1 +
configs/ls1021aqds_sdcard_ifc_defconfig | 1 +
configs/ls1021aqds_sdcard_qspi_defconfig | 1 +
configs/ls1021atsn_sdcard_defconfig | 1 +
...s1021atwr_sdcard_ifc_SECURE_BOOT_defconfig | 1 +
configs/ls1021atwr_sdcard_ifc_defconfig | 1 +
configs/ls1021atwr_sdcard_qspi_defconfig | 1 +
configs/msc_sm2s_imx8mp_defconfig | 1 +
configs/omap35_logic_defconfig | 2 +-
configs/omap35_logic_somlv_defconfig | 2 +-
configs/omap3_logic_defconfig | 2 +-
configs/omap3_logic_somlv_defconfig | 2 +-
configs/phycore-imx8mm_defconfig | 1 +
configs/phycore-imx8mp_defconfig | 1 +
configs/phycore_am62x_a53_defconfig | 1 +
configs/phycore_am62x_r5_defconfig | 1 +
configs/phycore_am64x_a53_defconfig | 1 +
configs/phycore_am64x_r5_defconfig | 1 +
configs/pico-imx8mq_defconfig | 1 +
configs/sama5d27_wlsom1_ek_mmc_defconfig | 2 +-
.../sama5d27_wlsom1_ek_qspiflash_defconfig | 2 +-
configs/sama5d2_icp_mmc_defconfig | 2 +-
configs/sandbox_noinst_defconfig | 1 +
configs/sniper_defconfig | 2 +-
configs/socfpga_secu1_defconfig | 2 +-
configs/verdin-am62_a53_defconfig | 1 +
configs/verdin-am62_r5_defconfig | 1 +
configs/verdin-imx8mm_defconfig | 1 +
configs/verdin-imx8mp_defconfig | 1 +
133 files changed, 175 insertions(+), 52 deletions(-)
diff --git a/arch/arm/mach-imx/imx8m/soc.c b/arch/arm/mach-imx/imx8m/soc.c
index be38ca52885..f30178ae213 100644
--- a/arch/arm/mach-imx/imx8m/soc.c
+++ b/arch/arm/mach-imx/imx8m/soc.c
@@ -735,6 +735,7 @@ int boot_mode_getprisec(void)
#endif
#if defined(CONFIG_IMX8MN) || defined(CONFIG_IMX8MP)
+#ifdef SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
#define IMG_CNTN_SET1_OFFSET GENMASK(22, 19)
unsigned long arch_spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
unsigned long raw_sect)
@@ -769,6 +770,7 @@ unsigned long arch_spl_mmc_get_uboot_raw_sector(struct mmc
*mmc,
return raw_sect;
}
+#endif /* SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION */
#endif
bool is_usb_boot(void)
diff --git a/arch/arm/mach-imx/spl_imx_romapi.c
b/arch/arm/mach-imx/spl_imx_romapi.c
index 9a86f5c133f..bdaea439d7f 100644
--- a/arch/arm/mach-imx/spl_imx_romapi.c
+++ b/arch/arm/mach-imx/spl_imx_romapi.c
@@ -33,8 +33,17 @@ ulong spl_romapi_raw_seekable_read(u32 offset, u32 size,
void *buf)
ulong __weak spl_romapi_get_uboot_base(u32 image_offset, u32 rom_bt_dev)
{
- return image_offset +
- (CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR * 512 - 0x8000);
+ u32 sector = 0;
+
+ /*
+ * Some boards use this value even though MMC is not enabled in SPL, for
+ * example imx8mn_bsh_smm_s2
+ */
+#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
+ sector = CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR;
+#endif
+
+ return image_offset + sector * 512 - 0x8000;
}
static int is_boot_from_stream_device(u32 boot)
diff --git a/board/advantech/imx8mp_rsb3720a1/imx8mp_rsb3720a1.c
b/board/advantech/imx8mp_rsb3720a1/imx8mp_rsb3720a1.c
index 070933fb54b..af083c3c38f 100644
--- a/board/advantech/imx8mp_rsb3720a1/imx8mp_rsb3720a1.c
+++ b/board/advantech/imx8mp_rsb3720a1/imx8mp_rsb3720a1.c
@@ -190,7 +190,7 @@ int board_late_init(void)
return 0;
}
-#ifdef CONFIG_SPL_MMC
+#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
#define UBOOT_RAW_SECTOR_OFFSET 0x40
unsigned long board_spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
unsigned long raw_sector)
@@ -204,4 +204,4 @@ unsigned long board_spl_mmc_get_uboot_raw_sector(struct mmc
*mmc,
return CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR;
}
}
-#endif /* CONFIG_SPL_MMC */
+#endif /* CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR */
diff --git a/common/spl/Kconfig b/common/spl/Kconfig
index af43b5f5d3c..55a42a3a7c7 100644
--- a/common/spl/Kconfig
+++ b/common/spl/Kconfig
@@ -490,24 +490,45 @@ config SPL_DISPLAY_PRINT
the board.
config SPL_SYS_MMCSD_RAW_MODE
- bool
- help
- Support booting from an MMC without a filesystem.
-
-config SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
- bool "MMC raw mode: by sector"
+ bool "Use raw reads to locate the next boot phase"
+ depends on SPL_DM_MMC || SPL_MMC
This one is a weird one to me, we can have DM_MMC without MMC? Shouldn't
we fix it?
default y if ARCH_SUNXI || ARCH_DAVINCI || ARCH_UNIPHIER || \
ARCH_MX6 || ARCH_MX7 || \
ARCH_ROCKCHIP || ARCH_MVEBU || ARCH_SOCFPGA || \
ARCH_AT91 || ARCH_ZYNQ || ARCH_KEYSTONE || OMAP34XX || \
OMAP44XX || OMAP54XX || AM33XX || AM43XX || \
TARGET_SIFIVE_UNLEASHED || TARGET_SIFIVE_UNMATCHED
+ help
+ Support booting from an MMC without a filesystem.
+
+if SPL_SYS_MMCSD_RAW_MODE
+
+choice
+ prompt "Method for locating next phase of boot (e.g. U-Boot)"
+
+config SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
+ bool "MMC raw mode: by sector"
select SPL_LOAD_BLOCK if SPL_MMC
We can remove the if SPL_MMC here as SPL_SYS_MMCSD_RAW_MODE already
depends on it and this choice is guarded by it.
- select SPL_SYS_MMCSD_RAW_MODE if SPL_MMC
help
Use sector number for specifying U-Boot location on MMC/SD in
raw mode.
+config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
+ bool "MMC Raw mode: by partition"
Lower case "raw" here to match the two other choices?
+ select SPL_LOAD_BLOCK if SPL_MMC
Ditto wrt SPL_MMC that I brought up earlier.
+ help
+ Use a partition for loading U-Boot when using MMC/SD in raw mode.
+
+config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE
+ bool "MMC raw mode: by partition type"
+ depends on DOS_PARTITION && SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
This can never be met, as SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION is
another option in the same choice.
Cheers,
Quentin