Skip to contentSkip to conversation

SPL: add support to boot from a partition type

PATCH Superseded Dalon Westergreen 3 participants 5 messages Jan 28, 2017 – Jan 29, 2017

v1 of 9 Superseded Latest is v9 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 SPL: add support to boot from a partition type

From: Dalon Westergreen <[email protected]>

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.

---
 common/spl/Kconfig   | 17 +++++++++++++++++
 common/spl/spl_mmc.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-
 disk/part_dos.c      |  1 +
 include/part.h       |  1 +
 4 files changed, 63 insertions(+), 1 deletion(-)
common/spl/Kconfig +17 -0
index b1aa148..a0430ec 100644
@@ -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
+	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 +44 -1

62 lines not on this page · raw message

disk/part_dos.c +1 -0
index ed78334..f485f11 100644
@@ -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;
 		}
 
include/part.h +1 -0
index 0979005..a58b687 100644
@@ -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 			*/
 } disk_partition_t;
 
 /* Misc _get_dev functions */
Signature · 1 line
2.7.4
#1 lore raw

PATCH 1/1 SPL: add support to boot from a partition type

Quoted 7 lines · Dalon Westergreen

From: Dalon Westergreen <[email protected]>

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.

Quoted 7 lines
---
 common/spl/Kconfig   | 17 +++++++++++++++++
 common/spl/spl_mmc.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-
 disk/part_dos.c      |  1 +
 include/part.h       |  1 +
 4 files changed, 63 insertions(+), 1 deletion(-)

Today socfpga sets SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION to 1. Do you really have enough cases where the special partition isn't going to be likely known when building U-Boot for a given platform?

The code itself looks fine (I don't see an easy way to get at the max_entries field of the partition type struct, but assuming that the ROM only support MBR tables today you could use the DOS_ENTRY_NUMBERS constant with a comment above it). But we're making this bit of code even more complex and adding more #ifdefs.

[snip]

common/spl/spl_mmc.c int spl_mmc_load_image(struct spl_image_info *spl_image, · line 376

Quoted 11 lines
common/spl/spl_mmc.c +7 -0
@@ -331,12 +367,19 @@ int spl_mmc_load_image(struct spl_image_info *spl_image,
 			CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION);
 		if (!err)
 			return err;
+		
+#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE
+		err = mmc_load_image_raw_partition_type(spl_image, mmc,
+			CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION_TYPE);
+		if (!err)
+			return err;
+#endif

... but couldn't we re-structure things so that both of the "boot from a partition" options take the same point from spl_mmc_load_image() instead set a partition variable depending on static/dynamic partition # being used? Or would that make things even messier looking? Thanks!

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170128/0ea9879a/attachment.sig>
#2 lore raw

PATCH 1/1 SPL: add support to boot from a partition type

Quoted 18 lines · Tom Rini
Quoted 8 lines · Dalon Westergreen

From: Dalon Westergreen <[email protected]>

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.

Quoted 7 lines

---

?common/spl/Kconfig???| 17 +++++++++++++++++
?common/spl/spl_mmc.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-
?disk/part_dos.c??????|??1 +
?include/part.h???????|??1 +

?4 files changed, 63 insertions(+), 1 deletion(-)

Quoted 3 lines

Today socfpga sets SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION to 1.??Do you really have enough cases where the special partition isn't going to be likely known when building U-Boot for a given platform?

All of our kits actually ship with the third partition being the 0xa2 partition. ?Normally the 1 partition is the fat partition. ?I want to support the case where the 0xa2 partition is arbitrary and used only for the SPL. ?the 1 partition is a fat partition with the full u-boot image.

Quoted 18 lines

The code itself looks fine (I don't see an easy way to get at the max_entries field of the partition type struct, but assuming that the ROM only support MBR tables today you could use the DOS_ENTRY_NUMBERS constant with a comment above it).??But we're making this bit of code even more complex and adding more #ifdefs.

[snip]

Quoted 10 lines
common/spl/spl_mmc.c +4 -0
@@ -331,12 +367,19 @@ int spl_mmc_load_image(struct spl_image_info
 *spl_image,
 ?			CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION);
 ?		if (!err)
 ?			return err;
+		
+#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE
+		err = mmc_load_image_raw_partition_type(spl_image, mmc,
+			CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION_TYPE);
Quoted 9 lines

common/spl/spl_mmc.c int spl_mmc_load_image(struct spl_image_info *spl_image, · line 376

Quoted 3 lines
common/spl/spl_mmc.c +3 -0
+		if (!err)
+			return err;
+#endif

... but couldn't we re-structure things so that both of the "boot from a partition" options take the same point from spl_mmc_load_image() instead set a partition variable depending on static/dynamic partition # being used???Or would that make things even messier looking???Thanks!

yes, i like this. ?seems cleaner.

Quoted 4 lines

_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

#3 lore raw

PATCH 1/1 SPL: add support to boot from a partition type

Quoted 19 lines · Dalon
Quoted 18 lines · Tom Rini
Quoted 15 lines · Dalon Westergreen

From: Dalon Westergreen <[email protected]>

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.

---

?common/spl/Kconfig???| 17 +++++++++++++++++
?common/spl/spl_mmc.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-
?disk/part_dos.c??????|??1 +
?include/part.h???????|??1 +

?4 files changed, 63 insertions(+), 1 deletion(-)

Quoted 7 lines
Quoted 3 lines

Today socfpga sets SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION to 1.??Do you really have enough cases where the special partition isn't going to be likely known when building U-Boot for a given platform?

All of our kits actually ship with the third partition being the 0xa2 partition. ?Normally the 1 partition is the fat partition. ?I want to support the case where the 0xa2 partition is arbitrary and used only for the SPL. ?the 1 partition is a fat partition with the full u-boot image.

Er, this code is where we determine where to load U-Boot from, SPL is running. So if I follow you, the bootrom would load SPL from the partition with 0xa2 as the type, usually #3 and then we load U-Boot from the FAT partition (which would be SPL_FS_LOAD_PAYLOAD_NAME and such) ?

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170128/a8059bb0/attachment.sig>
#4 lore raw

PATCH 1/1 SPL: add support to boot from a partition type

Quoted 31 lines · Tom Rini
Quoted 22 lines · Dalon
Quoted 20 lines · Tom Rini
Quoted 16 lines · Dalon Westergreen

From: Dalon Westergreen <[email protected]>

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.

---

?common/spl/Kconfig???| 17 +++++++++++++++++
?common/spl/spl_mmc.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-
?disk/part_dos.c??????|??1 +
?include/part.h???????|??1 +

?4 files changed, 63 insertions(+), 1 deletion(-)

Quoted 7 lines
Quoted 3 lines

Today socfpga sets SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION to 1.??Do you really have enough cases where the special partition isn't going to be likely known when building U-Boot for a given platform?

All of our kits actually ship with the third partition being the 0xa2 partition. ?Normally the 1 partition is the fat partition. ?I want to support the case where the 0xa2 partition is arbitrary and used only for the SPL. ?the 1 partition is a fat partition with the full u-boot image.

Quoted 5 lines

Er, this code is where we determine where to load U-Boot from, SPL is running.??So if I follow you, the bootrom would load SPL from the partition with 0xa2 as the type, usually #3 and then we load U-Boot from the FAT partition (which would be SPL_FS_LOAD_PAYLOAD_NAME and such) ?

yes, or if FAT isn't enabled, the spl would load the image in the 0xa2 partition or the?CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION offset by CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR. ?Both are reasonable and? supported. ?my current thought is if partition = -1 and? CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE is set then search for the a2 partition. ?work for you?

--dalon