[U-Boot] [PATCH v2] SPL: add support to boot from a partition type

Alexander Graf agraf at suse.de
Mon Jan 30 15:37:35 CET 2017


On 01/29/2017 04:13 AM, Dalon Westergreen wrote:
> From: Dalon Westergreen <dalon.westergreen at 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.
>
> Signed-off-by: Dalon Westergreen <dalon.westergreen at intel.com>
> ---
>   common/spl/Kconfig   | 17 +++++++++++++++++
>   common/spl/spl_mmc.c | 13 +++++++++++++
>   disk/part_dos.c      |  1 +
>   include/part.h       |  1 +
>   4 files changed, 32 insertions(+)
>
> diff --git a/common/spl/Kconfig b/common/spl/Kconfig
> index b1aa148..a0430ec 100644
> --- a/common/spl/Kconfig
> +++ b/common/spl/Kconfig
> @@ -97,6 +97,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

This also depends on CONFIG_DOS_PARTITION, right? IIRC Tom just merged a 
patch set that moved it to kconfig, so you can depend on it here now.

> +	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

What's the default for others platforms? In fact, why would any other 
platform care?

IMHO the best thing to do for now is to instead of "default y" to set it 
as "depends on ARCH_SOCFPGA". That way we don't accidentally add support 
for booting 0x00 type partitions to other systems ;).

Alternatively if you think it's nicer to allow non-Altera 
implementations to boot from partition with a simple kconfig switch, 
just always default to 0xa2 ragardless of arch.

> +	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..cce9584 100644
> --- a/common/spl/spl_mmc.c
> +++ b/common/spl/spl_mmc.c
> @@ -157,6 +157,19 @@ 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
> +	if ( partition == -1 ) {
> +		/* Only support MBR so DOS_ENTRY_NUMBERS */
> +		for (partition = 1; partition <= DOS_ENTRY_NUMBERS; partition++) {
> +			err = part_get_info(mmc_get_blk_desc(mmc), partition, &info);
> +			if(err)
> +				continue;
> +			if(info.sys_ind == CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION_TYPE)
> +				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 ed78334..f485f11 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,
>   #ifdef CONFIG_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 0979005..a58b687 100644
> --- a/include/part.h
> +++ b/include/part.h
> @@ -59,6 +59,7 @@ typedef struct disk_partition {
>   #ifdef CONFIG_PARTITION_TYPE_GUID
>   	char	type_guid[37];	/* type GUID as string, if exists	*/
>   #endif
> +	uchar	sys_ind;	/* partition type 			*/

Shouldn't that also be #ifdef'ed to CONFIG_DOS_PARTITION? At least the 
field semantic would be obvious then.


Alex



More information about the U-Boot mailing list