Skip to contentSkip to conversation

OMAP: Boot from UBI

PATCH In review Christoph Fritz 2 participants 5 messages Jun 21, 2013 – Jun 25, 2013

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

cover OMAP: Boot from UBI

This small set of patches adds boot from UBI support on OMAP SoCs:
MLO attaches UBI, loads barebox from within a static volume and goes up from there.
The benefit: NAND wearleveling is also done for barebox.

A NAND layout can now look like this:

       +------------+-->0x00000000-> xload start   (MLO copy on 1st block)
       |            |
       |            |-->0x0001FFFF-> xload end
       |            |-->0x00020000-> xload1 start   (MLO backup copy on 2rd)
       |            |
       |            |-->0x0003FFFF-> xload1 end
       |            |-->0x00040000-> xload2 start   (MLO backup copy on 3rd)
       |            |
       |            |-->0x0005FFFF-> xload2 end
       |            |-->0x00060000-> xload3 start   (MLO backup copy on 4rd)
       |            |
       |            |-->0x0007FFFF-> xload3 end
       |            |-->0x00080000-> ubi start
       |            |
       |            |
       |            |     UBI-Volumes:
       |            |           - barebox_0 [1M]
       |            |           - bareboxenv_0 [512k]
       |            |           - kernel_0 [6M]
       |            |           - oftree_0 [512k]
       |            |           - bmp_0 [2M]
       |            |           - root [-]
       |            |
       |            |
       +------------+-->0x0FFFFFFF-> root end

Next step (ToDo) is to decrease boot-time because it takes nearly six secounds to get to a fully featured barebox-prompt. Possible solutions are:

- use UBI Fastmap to decrease scan time
- only scan UBI once and transfer gained data to next boot stage:
MLO (scans UBI) -> Barebox (gets data) -> Kernel (gets data)

---
Christoph Fritz (2):
ARM OMAP: MLO: add support for loading Barebox from UBI ARM OMAP: add support for loading Environment from UBI

 arch/arm/mach-omap/Kconfig |   44 +++++++++++++++++++++++++
 arch/arm/mach-omap/xload.c |   76 ++++++++++++++++++++++++++++++++++++++++++--
 common/Kconfig             |   34 ++++++++++++++++++++
 common/startup.c           |   17 ++++++++++
 4 files changed, 169 insertions(+), 2 deletions(-)
Signature · 8 lines
1.7.10.4



_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#1 lore raw

PATCH 1/2 ARM OMAP: MLO: add support for loading Barebox from UBI

This patch adds support to OMAP MLO to load a secound stage bootloader from a static UBI volume.

---
 arch/arm/mach-omap/Kconfig |   44 +++++++++++++++++++++++++
 arch/arm/mach-omap/xload.c |   76 ++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 118 insertions(+), 2 deletions(-)
arch/arm/mach-omap/Kconfig +44 -0
index 236a165..e08524e 100644
@@ -213,6 +213,50 @@ choice
 
 endchoice
 
+config BB_IN_UBI
+	bool "Load Barebox from an UBI static volume"
+	depends on ARCH_OMAP3
+	depends on UBI
+	depends on OMAP_BUILD_IFT
+	help
+	  Say Y here if you would like to make the MLO load barebox
+	  from an UBI volume if bootsource is NAND.
+
+if BB_IN_UBI
+
+menu "Configure Loading Barebox from UBI"
+
+config BB_IN_UBI_PARTITION_START
+	hex
+	default 0x00080000
+	prompt "Offset size where partition begins"
+	help
+	  Start of mtd partition which holdes UBI volumes for barebox and
+	  barebox-environment. This value depends on your board partition
+	  layout. Default offset is 512k.
+
+config BB_IN_UBI_PARTITION_SIZE
+	hex
+	default 0xff80000
+	prompt "Length of partition"
+	help
+	  Size of mtd partition which holdes UBI volumes for barebox and
+	  barebox-environment. This value depends on your board partition
+	  layout. Default length is set to 255.5MB.
+
+config BB_IN_UBI_VOLNAME
+	string
+	default "ubi0.barebox_0"
+	prompt "Name of UBI static volume holding Barebox"
+	help
+	  Name of UBI static volume holding Barebox inside the mtd
+	  partition. This string value depends on your UBI volume name
+	  configuration scheme. Default string is "ubi0.barebox_0".
+
+endmenu
+
+endif
+
 endif
 
 config MACH_OMAP_ADVANCED_MUX
arch/arm/mach-omap/xload.c +74 -2

94 lines not on this page · raw message

Signature · 8 lines
1.7.10.4



_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#2 lore raw

Re: [PATCH 1/2] ARM OMAP: MLO: add support for loading Barebox from UBI

Hi Christoph,

arch/arm/mach-omap/xload.c static void *omap_xload_boot_nand(int offset) · line 92

Quoted 13 lines · Christoph Fritz

This patch adds support to OMAP MLO to load a secound stage bootloader from a static UBI volume.

---
 arch/arm/mach-omap/Kconfig |   44 +++++++++++++++++++++++++
 arch/arm/mach-omap/xload.c |   76 ++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 118 insertions(+), 2 deletions(-)
arch/arm/mach-omap/xload.c +4 -0
+static void *omap_xload_boot_ubi_nand(void)
+{
+	void *to = NULL;
+#ifdef CONFIG_BB_IN_UBI

You shouldn't need this ifdef

arch/arm/mach-omap/xload.c static void *omap_xload_boot_nand(int offset) · line 100

Quoted 8 lines
arch/arm/mach-omap/xload.c +8 -0
+	void *header;
+	int ret;
+	struct cdev *cdev;
+	struct mtd_info_user user;
+	int size;
+
+	devfs_add_partition("nand0", CONFIG_BB_IN_UBI_PARTITION_START,
+		CONFIG_BB_IN_UBI_PARTITION_SIZE, DEVFS_PARTITION_FIXED, "u");

I don't like putting these in kconfig. Ideally these should be passed by the board code.

arch/arm/mach-omap/xload.c static void *omap_xload_boot_nand(int offset) · line 136

Quoted 4 lines
arch/arm/mach-omap/xload.c +4 -0
+
+	cdev = cdev_open(CONFIG_BB_IN_UBI_VOLNAME, O_RDONLY);
+	if (!cdev) {
+		printf("cdev_open failed\n");

Such error messages should always print the return value if possible.

arch/arm/mach-omap/xload.c static void *omap_xload_boot_nand(int offset) · line 141

Quoted 5 lines
arch/arm/mach-omap/xload.c +5 -0
+		return NULL;
+	}
+
+	if (cdev_read(cdev, to, size, 0, 0) < 0) {
+		printf("cdev_read failed\n");

ditto.

Quoted 14 lines
arch/arm/mach-omap/xload.c +10 -0
+		cdev_close(cdev);
+		return NULL;
+        }
+
+	cdev_close(cdev);
+
+#endif
+	return to;
+}
+
 static void *omap_xload_boot_mmc(void)
 {
 	int ret;

arch/arm/mach-omap/xload.c static __noreturn int omap_xload(void) · line 252

Quoted 8 lines
arch/arm/mach-omap/xload.c +3 -2
@@ -180,8 +247,13 @@ static __noreturn int omap_xload(void)
 			printf("booting from USB not enabled\n");
 		}
 	case BOOTSOURCE_NAND:
-		printf("booting from NAND\n");
-		func = omap_xload_boot_nand(SZ_128K);
+		if (IS_ENABLED(CONFIG_BB_IN_UBI)) {
+			printf("booting from UBI static volume\n");
+			func = omap_xload_boot_ubi_nand();

You could check for filetype_ubi here instead of making this a compiletime decision.

Sascha

Signature · 9 lines
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#3 lore raw

PATCH 2/2 ARM OMAP: add support for loading Environment from UBI

In reply to Christoph Fritz

This patch adds support to load environment from a static UBI volume.

---
 common/Kconfig   |   34 ++++++++++++++++++++++++++++++++++
 common/startup.c |   17 +++++++++++++++++
 2 files changed, 51 insertions(+)
common/Kconfig +34 -0
index d36ed13..058eb21 100644
@@ -103,6 +103,40 @@ config MEMINFO
 config ENVIRONMENT_VARIABLES
 	bool "environment variables support"
 
+config ENVIRONMENT_IN_UBI
+	bool "Load Environment from an UBI static volume"
+	depends on UBI
+	depends on ENV_HANDLING
+	help
+	  Say Y here if you would like to attach UBI and load
+	  the environment from an UBI volume.
+
+if ENVIRONMENT_IN_UBI
+
+menu "Configure Loading Environment from UBI"
+
+config ENV_IN_UBI_PARTITION
+	string
+	default "/dev/root"
+	prompt "Filepath of mtd partition holding UBI volumes"
+	help
+	  Filepath of mtd partition holding UBI static volume with Barebox
+	  environment inside.  This value depends on your board partition
+	  layout. Default string value is "/dev/root".
+
+config ENV_IN_UBI_VOLNAME
+	string
+	default "/dev/ubi0.bareboxenv_0"
+	prompt "Filepath of UBI static volume holding environment"
+	help
+	  Filepath of UBI static volume holding Barebox environment inside the
+	  partition. This string value depends on your UBI volume name
+	  configuration scheme. Default string is "/dev/ubi0.bareboxenv_0".
+
+endmenu
+
+endif
+
 menu "memory layout"
 
 source "pbl/Kconfig"
common/startup.c +17 -0
index ff00ca7..01c0e1d 100644
@@ -117,6 +117,23 @@ void __noreturn start_barebox(void)
 	if (IS_ENABLED(CONFIG_ENV_HANDLING)) {
 		int ret;
 
+		if (IS_ENABLED(CONFIG_ENVIRONMENT_IN_UBI)) {
+#ifdef CONFIG_ENVIRONMENT_IN_UBI
+			char s[PATH_MAX + 32];
+			sprintf(s, "%s%s ", "ubiattach ",
+				CONFIG_ENV_IN_UBI_PARTITION);
+			ret = run_command(s, 0);
+			if (ret) {
+				sprintf(s, "%s%s ", "unable to ubiattach ",
+					CONFIG_ENV_IN_UBI_PARTITION);
+				pr_err(s);
+			} else {
+				default_environment_path =
+					CONFIG_ENV_IN_UBI_VOLNAME;
+			}
+#endif
+		}
+
 		ret = envfs_load(default_environment_path, "/env", 0);
 
 		if (ret && IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT)) {
Signature · 8 lines
1.7.10.4



_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#4 lore raw

Re: [PATCH 2/2] ARM OMAP: add support for loading Environment from UBI

Quoted 11 lines · Christoph Fritz

This patch adds support to load environment from a static UBI volume.

common/startup.c +5 -0
 	if (IS_ENABLED(CONFIG_ENV_HANDLING)) {
 		int ret;
 
+		if (IS_ENABLED(CONFIG_ENVIRONMENT_IN_UBI)) {
+#ifdef CONFIG_ENVIRONMENT_IN_UBI
+			char s[PATH_MAX + 32];
+			sprintf(s, "%s%s ", "ubiattach ",
+				CONFIG_ENV_IN_UBI_PARTITION);

common/startup.c void __noreturn start_barebox(void) · line 134

Quoted 10 lines
common/startup.c +10 -0
+			ret = run_command(s, 0);
+			if (ret) {
+				sprintf(s, "%s%s ", "unable to ubiattach ",
+					CONFIG_ENV_IN_UBI_PARTITION);
+				pr_err(s);
+			} else {
+				default_environment_path =
+					CONFIG_ENV_IN_UBI_VOLNAME;
+			}
+#endif

You shouldn't need the ifdef here aswell. Also this should be a helper function called from board code rather than something in generic code. You can also hardcode the volume name in board code, I don't think this needs to be configurable.

Configurability of stuff like environment position always has a problem. If it wasn't you who compiled a particular binary (or it even was you and you can't remember), you don't know how the binary behaves. For everything you hardcode the version printout in barebox will exactly tell you the behaviour.

Sascha

Signature · 9 lines
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox