[U-Boot] [PATCH v4 1/2] SPL: add support to boot from a partition type

From: Dalon Westergreen dalon.westergreen@intel.com
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
Signed-off-by: Dalon Westergreen dwesterg@gmail.com
-- 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(+)
diff --git a/common/spl/Kconfig b/common/spl/Kconfig index b2ba492..37e002f 100644 --- a/common/spl/Kconfig +++ b/common/spl/Kconfig @@ -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 + 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 diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c index 0cd355c..8119fc1 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -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 diff --git a/disk/part_dos.c b/disk/part_dos.c index c77d881..7ede15e 100644 --- a/disk/part_dos.c +++ b/disk/part_dos.c @@ -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; }
diff --git a/include/part.h b/include/part.h index 9d0e20d..b6d1b33 100644 --- a/include/part.h +++ b/include/part.h @@ -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 */

From: Dalon Westergreen dalon.westergreen@intel.com
Added SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION and SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION to Kconfig.
set to default y for socfpga platforms, and add appropriate configurations for kc1, snipper, and db-88f6820-gp boards.
Signed-off-by: Dalon Westergreen dwesterg@gmail.com --- common/spl/Kconfig | 18 +++++++++++++++++- 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 -- 8 files changed, 25 insertions(+), 15 deletions(-)
diff --git a/common/spl/Kconfig b/common/spl/Kconfig index 37e002f..120381a 100644 --- a/common/spl/Kconfig +++ b/common/spl/Kconfig @@ -96,9 +96,25 @@ 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 + default y if ARCH_SOCFPGA + 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 diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c index 8119fc1..c2e2d90 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -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_SECTOR 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); diff --git a/configs/db-88f6820-gp_defconfig b/configs/db-88f6820-gp_defconfig index 1347550..fec5e56 100644 --- a/configs/db-88f6820-gp_defconfig +++ b/configs/db-88f6820-gp_defconfig @@ -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 diff --git a/configs/kc1_defconfig b/configs/kc1_defconfig index d9895d7..ffaaec3 100644 --- a/configs/kc1_defconfig +++ b/configs/kc1_defconfig @@ -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 diff --git a/configs/sniper_defconfig b/configs/sniper_defconfig index fbdbc0c..9dd737f 100644 --- a/configs/sniper_defconfig +++ b/configs/sniper_defconfig @@ -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 diff --git a/include/configs/db-88f6820-gp.h b/include/configs/db-88f6820-gp.h index beb14bc..77d2722 100644 --- a/include/configs/db-88f6820-gp.h +++ b/include/configs/db-88f6820-gp.h @@ -124,7 +124,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 diff --git a/include/configs/kc1.h b/include/configs/kc1.h index 8223f5a..7aa511f 100644 --- a/include/configs/kc1.h +++ b/include/configs/kc1.h @@ -119,8 +119,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 */ diff --git a/include/configs/sniper.h b/include/configs/sniper.h index f41d6f6..c5b7425 100644 --- a/include/configs/sniper.h +++ b/include/configs/sniper.h @@ -127,8 +127,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"

Hi Dalon,
On 02/01/2017 10:45 AM, Dalon Westergreen wrote:
From: Dalon Westergreen dalon.westergreen@intel.com
Added SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION and SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION to Kconfig.
set to default y for socfpga platforms, and add appropriate configurations for kc1, snipper, and db-88f6820-gp boards.
Signed-off-by: Dalon Westergreen dwesterg@gmail.com
common/spl/Kconfig | 18 +++++++++++++++++- 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 -- 8 files changed, 25 insertions(+), 15 deletions(-)
I'm get this warning:
include/configs/socfpga_common.h:316:0: warning: "CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION" redefined #define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION 1
Need to remove the CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION from socfpga_common.h as well.
Dinh

On Fri, 2017-02-03 at 11:05 -0600, Dinh Nguyen wrote:
Hi Dalon,
On 02/01/2017 10:45 AM, Dalon Westergreen wrote:
From: Dalon Westergreen dalon.westergreen@intel.com
Added SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION and SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION to Kconfig.
set to default y for socfpga platforms, and add appropriate configurations for kc1, snipper, and db-88f6820-gp boards.
Signed-off-by: Dalon Westergreen dwesterg@gmail.com
common/spl/Kconfig | 18 +++++++++++++++++- 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 -- 8 files changed, 25 insertions(+), 15 deletions(-)
I'm get this warning:
include/configs/socfpga_common.h:316:0: warning: "CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION" redefined #define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION 1
Need to remove the CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION from socfpga_common.h as well.
Yes, i am aware, but have a separate patch set already for the socfpga headers. i think it may be best just to redo those after this is merged. i will add the modifications to the socfpga headers.
thanks, dalon
Dinh

On Fri, Feb 03, 2017 at 09:13:43AM -0800, Dalon Westergreen wrote:
On Fri, 2017-02-03 at 11:05 -0600, Dinh Nguyen wrote:
Hi Dalon,
On 02/01/2017 10:45 AM, Dalon Westergreen wrote:
From: Dalon Westergreen dalon.westergreen@intel.com
Added SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION and SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION to Kconfig.
set to default y for socfpga platforms, and add appropriate configurations for kc1, snipper, and db-88f6820-gp boards.
Signed-off-by: Dalon Westergreen dwesterg@gmail.com
common/spl/Kconfig | 18 +++++++++++++++++- 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 -- 8 files changed, 25 insertions(+), 15 deletions(-)
I'm get this warning:
include/configs/socfpga_common.h:316:0: warning: "CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION" redefined #define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION 1
Need to remove the CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION from socfpga_common.h as well.
Yes, i am aware, but have a separate patch set already for the socfpga headers. i think it may be best just to redo those after this is merged. i will add the modifications to the socfpga headers.
The series needs to be complete and not add warnings. Ideally we won't add warnings in one patch and fix them in a later patch.

On Fri, 2017-02-03 at 12:17 -0500, Tom Rini wrote:
On Fri, Feb 03, 2017 at 09:13:43AM -0800, Dalon Westergreen wrote:
On Fri, 2017-02-03 at 11:05 -0600, Dinh Nguyen wrote:
Hi Dalon,
On 02/01/2017 10:45 AM, Dalon Westergreen wrote:
From: Dalon Westergreen dalon.westergreen@intel.com
Added SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION and SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION to Kconfig.
set to default y for socfpga platforms, and add appropriate configurations for kc1, snipper, and db-88f6820-gp boards.
Signed-off-by: Dalon Westergreen dwesterg@gmail.com
common/spl/Kconfig | 18 +++++++++++++++++- 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 -- 8 files changed, 25 insertions(+), 15 deletions(-)
I'm get this warning:
include/configs/socfpga_common.h:316:0: warning: "CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION" redefined #define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION 1
Need to remove the CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION from socfpga_common.h as well.
Yes, i am aware, but have a separate patch set already for the socfpga headers. i think it may be best just to redo those after this is merged. i will add the modifications to the socfpga headers.
The series needs to be complete and not add warnings. Ideally we won't add warnings in one patch and fix them in a later patch.
okay. this is fixed in the v5 patches i just sent.
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
participants (3)
-
Dalon Westergreen
-
Dinh Nguyen
-
Tom Rini