All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dalon Westergreen <dwesterg@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v8 1/2] SPL: add support to boot from a partition type
Date: Fri, 10 Feb 2017 14:58:39 -0800	[thread overview]
Message-ID: <1486767520-13571-2-git-send-email-dwesterg@gmail.com> (raw)
In-Reply-To: <1486767520-13571-1-git-send-email-dwesterg@gmail.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 v8:
 - Move partition type default to arch/arm/mach-socfpga/Kconfig
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
---
 arch/arm/mach-socfpga/Kconfig |  3 +++
 common/spl/Kconfig            | 16 ++++++++++++++++
 common/spl/spl_mmc.c          | 15 +++++++++++++++
 disk/part_dos.c               |  1 +
 include/part.h                |  3 +++
 5 files changed, 38 insertions(+)

diff --git a/arch/arm/mach-socfpga/Kconfig b/arch/arm/mach-socfpga/Kconfig
index df9e8d4..6fd724e 100644
--- a/arch/arm/mach-socfpga/Kconfig
+++ b/arch/arm/mach-socfpga/Kconfig
@@ -27,6 +27,9 @@ config SPL_SPI_SUPPORT
 config SPL_WATCHDOG_SUPPORT
 	default y
 
+config SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION_TYPE
+	default 0xa2
+
 config TARGET_SOCFPGA_ARRIA5
 	bool
 	select TARGET_SOCFPGA_GEN5
diff --git a/common/spl/Kconfig b/common/spl/Kconfig
index cf714c2..3cdd200 100644
--- a/common/spl/Kconfig
+++ b/common/spl/Kconfig
@@ -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
+	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
+	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..fb51fd5 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 */
-- 
2.7.4

  reply	other threads:[~2017-02-10 22:58 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-10 22:58 [U-Boot] [PATCH v7 0/2] SPL: Add support to boot a partition type Dalon Westergreen
2017-02-10 22:58 ` Dalon Westergreen [this message]
2017-02-10 23:47   ` [U-Boot] [PATCH v8 1/2] SPL: add support to boot from " Marek Vasut
2017-02-11  0:04     ` Dalon Westergreen
2017-02-11  3:25       ` Tom Rini
2017-02-10 22:58 ` [U-Boot] [PATCH v8 2/2] SPL: Move SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION to Kconfig Dalon Westergreen
2017-02-11  3:25   ` Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1486767520-13571-2-git-send-email-dwesterg@gmail.com \
    --to=dwesterg@gmail.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.