SPL: Add support to boot a partition type
v7 cover SPL: Add support to boot a partition type
This adds support for the spl to seach for and boot from an arbitrary partition type rather then a specific partition number. When USE_PARTITION_TYPE is enabled, spl will search for the partition type but fallback to the specified partition number.
SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION is moved to a Kconfig and header and defconfigs for the affected boards are updated.
Changes in v7:
-> set part type to 0xa2 only if socfpga selected and merge previously split
patch
Changes in V6:
-> Fix unneeded backslash
-> Move SPL socfpga Kconfig default to selec tin arch/arm/Kconfig -> Split out defconfig changes for affected boards into a separate patch
Dalon Westergreen (2):
SPL: add support to boot from a partition type
SPL: Move SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION to Kconfig
arch/arm/Kconfig | 1 + common/spl/Kconfig | 32 ++++++++++++++++++++++++++++++++ common/spl/spl_mmc.c | 27 ++++++++++++++++++--------- configs/db-88f6820-gp_defconfig | 1 + configs/kc1_defconfig | 2 ++ configs/sniper_defconfig | 2 ++ disk/part_dos.c | 1 + include/configs/db-88f6820-gp.h | 1 - include/configs/kc1.h | 2 -- include/configs/sniper.h | 2 -- include/configs/socfpga_common.h | 2 -- include/part.h | 3 +++ 12 files changed, 60 insertions(+), 16 deletions(-)
Signature · 1 line
2.7.4
PATCH v7 1/2 SPL: add support to boot from a partition type
the socfpga bootrom supports mmc booting from either a raw image starting at 0x0, or from a partition of type 0xa2. This patch adds support for locating the boot image in the first type 0xa2 partition found.
Assigned a partition number of -1 will cause a search for a partition of type CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION_TYPE and use it to find the u-boot image
--
Changes in v7:
- set part type to 0xa2 only if socfpga selected
Changes in V6:
- Remove unneeded backslash
Changes in V5:
- fix styling in if (..) per Tom's request
Changes in V4:
- Try search for partition type and failover to the defined partition number
Changes in V3:
- Add depends on DOS_PARTITION
- Ensure that PARTTION_TYPE defaults to non-zero
- Add ifdef around sys_ind in disk_partition structure
Changes in V2:
- Merge partition search into single partition function
--- common/spl/Kconfig | 17 +++++++++++++++++ common/spl/spl_mmc.c | 15 +++++++++++++++ disk/part_dos.c | 1 + include/part.h | 3 +++ 4 files changed, 36 insertions(+)
common/spl/Kconfig +17 -0
@@ -96,6 +96,23 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR Address on the MMC to load U-Boot from, when the MMC is being used in raw mode. Units: MMC sectors (1 sector = 512 bytes). +config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE + bool "MMC raw mode: by partition type" + depends on SPL && DOS_PARTITION + default y if ARCH_SOCFPGA + help + Use partition type for specifying U-Boot partition on MMC/SD in + raw mode. U-Boot will be loaded from the first partition of this + type to be found. + +config SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION_TYPE + hex "Partition Type on the MMC to load U-Boot from" + depends on SPL && SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE + default 0xa2 if ARCH_SOCFPGA + help + Partition Type on the MMC to load U-Boot from, when the MMC is being + used in raw mode. + config TPL bool depends on SPL && SUPPORT_TPL
common/spl/spl_mmc.c +15 -0
@@ -157,6 +157,21 @@ static int mmc_load_image_raw_partition(struct spl_image_info *spl_image,disk_partition_t info;int err; +#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE +int type_part; +/* Only support MBR so DOS_ENTRY_NUMBERS */ +for (type_part =1 ; type_part <=DOS_ENTRY_NUMBERS ; type_part++) { + err =part_get_info (mmc_get_blk_desc (mmc), type_part, &info); +if (err) +continue ; +if (info.sys_ind == +CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION_TYPE ) { + partition = type_part; +break ; + } + } +#endif + err =part_get_info (mmc_get_blk_desc (mmc), partition, &info);if (err) {#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
disk/part_dos.c +1 -0
@@ -217,6 +217,7 @@ static int part_get_info_extended(struct blk_desc *dev_desc,#if CONFIG_IS_ENABLED (PARTITION_UUIDS )sprintf (info->uuid,"%08x-%02x" , disksig, part_num);#endif + info->sys_ind = pt->sys_ind;return 0 ; }
include/part.h +3 -0
@@ -59,6 +59,9 @@ typedef struct disk_partition {#ifdef CONFIG_PARTITION_TYPE_GUID char type_guid[37 ];/* type GUID as string, if exists */ #endif +#ifdef CONFIG_DOS_PARTITION +uchar sys_ind;/* partition type */ +#endif } disk_partition_t;/* Misc _get_dev functions */
Signature · 1 line
2.7.4
PATCH v7 2/2 SPL: Move SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION to Kconfig
In reply to Dalon WestergreenAdded SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION andSYS_MMCSD_RAW_MODE_U_BOOT_PARTITION to Kconfig.
Due to SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION being moved to Kconfig the board defconfigs for db-88f6820-gp_defconfig kc1_defconfig and sniper_defconfig need to be updated.
--
Changes in v4:
- merge defconfig changes into single patch
Changes in v3:
- Split off defconfig changes for db-88f6820-gp_defconfig kc1_defconfig and sniper_defconfig into a separate patch
Changes in v2:
- Remove SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION from socfpga_common.h
- wrong ifdef around mmc_load_image_raw_partition should be CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
--- arch/arm/Kconfig | 1 + common/spl/Kconfig | 17 ++++++++++++++++- common/spl/spl_mmc.c | 12 +++--------- configs/db-88f6820-gp_defconfig | 1 + configs/kc1_defconfig | 2 ++ configs/sniper_defconfig | 2 ++ include/configs/db-88f6820-gp.h | 1 - include/configs/kc1.h | 2 -- include/configs/sniper.h | 2 -- include/configs/socfpga_common.h | 2 -- 10 files changed, 25 insertions(+), 17 deletions(-)
arch/arm/Kconfig +1 -0
@@ -633,6 +633,7 @@ config ARCH_SOCFPGA select ENABLE_ARM_SOC_BOOT0_HOOK select ARCH_EARLY_INIT_R select ARCH_MISC_INIT + select SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION config TARGET_CM_T43 bool "Support cm_t43"
common/spl/Kconfig +16 -1
@@ -96,9 +96,24 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR Address on the MMC to load U-Boot from, when the MMC is being used in raw mode. Units: MMC sectors (1 sector = 512 bytes). +config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION + bool "MMC Raw mode: by partition" + depends on SPL + help + Use a partition for loading U-Boot when using MMC/SD in raw mode. + +config SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION + hex "Partition to use to load U-Boot from" + depends on SPL && SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION + default 1 + help + Partition on the MMC to load U-Boot from when the MMC is being + used in raw mode + config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE bool "MMC raw mode: by partition type" - depends on SPL && DOS_PARTITION + depends on SPL && DOS_PARTITION && \ + SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION default y if ARCH_SOCFPGA help Use partition type for specifying U-Boot partition on MMC/SD in
common/spl/spl_mmc.c +3 -9
@@ -150,7 +150,7 @@ static int spl_mmc_find_device(struct mmc **mmcp, u32 boot_device)return 0 ; } -#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION +#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION static int mmc_load_image_raw_partition (struct spl_image_info *spl_image,struct mmc *mmc,int partition) {
@@ -187,13 +187,6 @@ static int mmc_load_image_raw_partition(struct spl_image_info *spl_image,return mmc_load_image_raw_sector (spl_image, mmc, info.start); #endif } -#else -#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION -1 -static int mmc_load_image_raw_partition (struct spl_image_info *spl_image, -struct mmc *mmc,int partition) -{ -return -ENOSYS ; -}#endif #ifdef CONFIG_SPL_OS_BOOT
@@ -341,11 +334,12 @@ int spl_mmc_load_image(struct spl_image_info *spl_image,if (!err)return err; } - +#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION err =mmc_load_image_raw_partition (spl_image, mmc,CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION );if (!err)return err; +#endif #ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR err =mmc_load_image_raw_sector (spl_image, mmc,CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR );
configs/db-88f6820-gp_defconfig +1 -0
@@ -51,3 +51,4 @@ CONFIG_USB=y CONFIG_DM_USB=y CONFIG_USB_EHCI_HCD=y CONFIG_USB_STORAGE=y +CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION=y
configs/kc1_defconfig +2 -0
@@ -36,3 +36,5 @@ CONFIG_G_DNL_MANUFACTURER="Texas Instruments" CONFIG_G_DNL_VENDOR_NUM=0x0451 CONFIG_G_DNL_PRODUCT_NUM=0xd022 CONFIG_OF_LIBFDT=y +CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION=y +CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION=2
configs/sniper_defconfig +2 -0
@@ -37,3 +37,5 @@ CONFIG_G_DNL_MANUFACTURER="Texas Instruments" CONFIG_G_DNL_VENDOR_NUM=0x0451 CONFIG_G_DNL_PRODUCT_NUM=0xd022 CONFIG_OF_LIBFDT=y +CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION=y +CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION=2
include/configs/db-88f6820-gp.h +0 -1
@@ -123,7 +123,6 @@#if CONFIG_SPL_BOOT_DEVICE ==SPL_BOOT_SDIO_MMC_CARD /* SPL related MMC defines */ -#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION 1#define CONFIG_SYS_MMC_U_BOOT_OFFS (160 << 10)#define CONFIG_SYS_U_BOOT_OFFS CONFIG_SYS_MMC_U_BOOT_OFFS#ifdef CONFIG_SPL_BUILD
include/configs/kc1.h +0 -2
@@ -113,8 +113,6 @@#define CONFIG_SPL_LDSCRIPT "arch/arm/mach-omap2/u-boot-spl.lds"#define CONFIG_SPL_BOARD_INIT -#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION 2 -/* * Console */
include/configs/sniper.h +0 -2
@@ -121,8 +121,6 @@#define CONFIG_SPL_LDSCRIPT "arch/arm/mach-omap2/u-boot-spl.lds"#define CONFIG_SPL_BOARD_INIT -#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION 2 -#define CONFIG_SYS_MMCSD_FS_BOOT_PARTITION 1#define CONFIG_SPL_FS_LOAD_PAYLOAD_NAME "u-boot.img"
include/configs/socfpga_common.h +0 -2
@@ -311,8 +311,6 @@ unsigned int cm_get_qspi_controller_clk_hz(void);#if defined(CONFIG_SPL_FAT_SUPPORT ) || defined(CONFIG_SPL_EXT_SUPPORT )#define CONFIG_SYS_MMCSD_FS_BOOT_PARTITION 2#define CONFIG_SPL_FS_LOAD_PAYLOAD_NAME "u-boot-dtb.img" -#else -#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION 1#endif #endif
Signature · 1 line
2.7.4