]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
SPL: add support to boot from a partition type
authorDalon Westergreen <dwesterg@gmail.com>
Sat, 11 Feb 2017 01:15:34 +0000 (17:15 -0800)
committerTom Rini <trini@konsulko.com>
Fri, 17 Feb 2017 19:15:14 +0000 (14:15 -0500)
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>
arch/arm/mach-socfpga/Kconfig
common/spl/Kconfig
common/spl/spl_mmc.c
disk/part_dos.c
include/part.h

index df9e8d42134bb1817c1ef1fef23455d324685ec9..e56b3db1158987ecacca8ab9a9d239bc621311e2 100644 (file)
@@ -27,6 +27,12 @@ config SPL_SPI_SUPPORT
 config SPL_WATCHDOG_SUPPORT
        default y
 
+config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE
+       default y
+
+config SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION_TYPE
+       default 0xa2
+
 config TARGET_SOCFPGA_ARRIA5
        bool
        select TARGET_SOCFPGA_GEN5
index cf714c2726114c0a0d037773f48859f44f891208..baff7b672e2cda9e9b41ed376eff28dc658456f2 100644 (file)
@@ -96,6 +96,22 @@ 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 && \
+               SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
+       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
+       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
index 0cd355cd46f9e95574faa7b6dbf6c36eff85d760..fb51fd5a98826b5e4c8042debb509950850ab583 100644 (file)
@@ -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
index c77d8815606ffaa2353fbe7375e4760ceb66a959..7ede15ec261315e6922fdfd6298bf0f17f5220a4 100644 (file)
@@ -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;
                }
 
index 9d0e20d0416d30711d6ad4397872658e604e40e0..b6d1b33167ba267244e43f04e18cca870116cfc6 100644 (file)
@@ -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 */