[PATCH v2 11/14] spl: mmc: Try to clean up raw-mode options

Quentin Schulz quentin.schulz at cherry.de
Tue Aug 6 16:53:04 CEST 2024


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 <seanga2 at gmail.com>
> Signed-off-by: Simon Glass <sjg at 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


More information about the U-Boot mailing list