[PATCH v2 40/45] sandbox: Add an image for VPL

Simon Glass sjg at chromium.org
Thu Oct 13 14:29:22 CEST 2022


Use binman to build an image which includes all the U-Boot phases so that
a full VBE boot can take place with just that image.bin file. Attach the
image file to mmc2 so it can be loaded.

VBE is used to load images in two phases:

   - In VPL, VBE decides which SPL image to load
   - In SPL, VBE decides which U-Boot image to load

The latter should really be determined by VPL, since it does the full
signature verification on the selected configuration. However, we have
separate configurations for SPL and U-Boot proper, so for now we keep it
simple and have SPL do its own verification. This will need to be
tidied up later.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

Changes in v2:
- Attach the phase to the image node instead of the configuration node
- Add signature checking / hashing to make the image more realistic

 arch/sandbox/dts/sandbox.dts      |  7 +++
 arch/sandbox/dts/sandbox_vpl.dtsi | 84 +++++++++++++++++++++++++++++++
 arch/sandbox/dts/test.dts         |  6 ++-
 3 files changed, 96 insertions(+), 1 deletion(-)
 create mode 100644 arch/sandbox/dts/sandbox_vpl.dtsi

diff --git a/arch/sandbox/dts/sandbox.dts b/arch/sandbox/dts/sandbox.dts
index 21f00fcab5e..1b60914a01c 100644
--- a/arch/sandbox/dts/sandbox.dts
+++ b/arch/sandbox/dts/sandbox.dts
@@ -21,6 +21,9 @@
 		spi0 = &spi;
 	};
 
+	binman: binman {
+	};
+
 	memory {
 		reg = <0 CONFIG_SYS_SDRAM_SIZE>;
 	};
@@ -103,3 +106,7 @@
 #include "sandbox.dtsi"
 #include "cros-ec-keyboard.dtsi"
 #include "sandbox_pmic.dtsi"
+
+#ifdef CONFIG_SANDBOX_VPL
+#include "sandbox_vpl.dtsi"
+#endif
diff --git a/arch/sandbox/dts/sandbox_vpl.dtsi b/arch/sandbox/dts/sandbox_vpl.dtsi
new file mode 100644
index 00000000000..1fba537f135
--- /dev/null
+++ b/arch/sandbox/dts/sandbox_vpl.dtsi
@@ -0,0 +1,84 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Devicetree file for VPL (Verifying Program Loader)
+ */
+
+&binman {
+	u-boot-tpl-elf {
+		no-expanded;
+	};
+	u-boot-vpl-elf {
+		no-expanded;
+	};
+	fw-update {
+		type = "section";
+
+		/*
+		 * provide plenty of space for ELF files with debug info so that
+		 * gdb can be used
+		 */
+		offset = <0x400000>;
+		size = <0xdffc00>;
+
+		fit {
+			fit,external-offset = <0>;
+			description = "AP firmware";
+			images {
+				spl {
+					description = "U-Boot SPL";
+					type = "firmware";
+					phase = "spl";
+					arch = "sandbox";
+					os = "u-boot";
+					compression = "none";
+
+					hash-1 {
+						algo = "sha256";
+					};
+
+					u-boot-spl-elf {
+					};
+				};
+				u-boot {
+					description = "U-Boot";
+					type = "firmware";
+					phase = "u-boot";
+					arch = "sandbox";
+					os = "u-boot";
+					compression = "none";
+
+					hash-1 {
+						algo = "sha256";
+					};
+
+					u-boot-elf {
+					};
+				};
+			};
+
+			configurations {
+				conf-1 {
+					compatible = "sandbox";
+					description = "AP Firmware v1";
+					firmware = "spl", "u-boot";
+					signature {
+						algo = "sha1,rsa2048";
+						key-name-hint = "dev";
+						sign-images = "firmware";
+					};
+				};
+			};
+		};
+	};
+	state {
+		type = "fill";
+		size = <0x200>;
+	};
+	version {
+		type = "text";
+		text = "1.2.3";
+		size = <0x200>;
+	};
+	fdtmap {
+	};
+};
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
index 2574a961cec..a9ef5139020 100644
--- a/arch/sandbox/dts/test.dts
+++ b/arch/sandbox/dts/test.dts
@@ -64,7 +64,7 @@
 		osd0 = "/osd";
 	};
 
-	binman {
+	binman: binman {
 	};
 
 	config {
@@ -1693,3 +1693,7 @@
 
 #include "sandbox_pmic.dtsi"
 #include "cros-ec-keyboard.dtsi"
+
+#ifdef CONFIG_SANDBOX_VPL
+#include "sandbox_vpl.dtsi"
+#endif
-- 
2.38.0.rc1.362.ged0d419d3c-goog



More information about the U-Boot mailing list