aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2022-10-20 18:23:20 -0600
committerTom Rini <trini@konsulko.com>2022-10-31 11:04:00 -0400
commit77bec9e3d8bd2dc307447b92a3d5cefd693a62ad (patch)
tree724c085433631e142a56c052d667139cba29b4a6
parent7f3470bfaa2fd9f2adaa959ce3af8ecf924f4678 (diff)
downloadu-boot-WIP/2022-10-31-vbe-implement-the-full-firmware-flow.zip
u-boot-WIP/2022-10-31-vbe-implement-the-full-firmware-flow.tar.gz
u-boot-WIP/2022-10-31-vbe-implement-the-full-firmware-flow.tar.bz2
vbe: Add a test for the VBE flow into U-Boot properWIP/2022-10-31-vbe-implement-the-full-firmware-flow
Add a test which checks that VBE boots correctly from TPL through to U-Boot proper. Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r--arch/sandbox/dts/test.dts37
-rw-r--r--test/py/tests/test_vbe_vpl.py38
2 files changed, 75 insertions, 0 deletions
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
index 75eeaf8..25fd2bc 100644
--- a/arch/sandbox/dts/test.dts
+++ b/arch/sandbox/dts/test.dts
@@ -37,6 +37,8 @@
i2c0 = "/i2c@0";
mmc0 = "/mmc0";
mmc1 = "/mmc1";
+ mmc2 = "/mmc2";
+ mmc3 = "/mmc3";
pci0 = &pci0;
pci1 = &pci1;
pci2 = &pci2;
@@ -92,6 +94,11 @@
compatible = "u-boot,distro-efi";
};
+ /*
+ * This is used for the VBE OS-request tests. A FAT filesystem
+ * created in a partition with the VBE information appearing
+ * before the parititon starts
+ */
firmware0 {
u-boot,dm-vpl;
compatible = "fwupd,vbe-simple";
@@ -104,6 +111,28 @@
version-offset = <0x800>;
version-size = <0x100>;
};
+
+ /*
+ * This is used for the VBE VPL tests. The MMC device holds the
+ * binman image.bin file. The test progresses through each phase
+ * of U-Boot, loading each in turn from MMC.
+ *
+ * Note that the test enables this node (and mmc3) before
+ * running U-Boot
+ */
+ firmware1 {
+ u-boot,dm-vpl;
+ status = "disabled";
+ compatible = "fwupd,vbe-simple";
+ storage = "mmc3";
+ skip-offset = <0x400000>;
+ area-start = <0>;
+ area-size = <0xe00000>;
+ state-offset = <0xdffc00>;
+ state-size = <0x40>;
+ version-offset = <0xdffe00>;
+ version-size = <0x100>;
+ };
};
fuzzing-engine {
@@ -976,6 +1005,14 @@
compatible = "sandbox,mmc";
};
+ /* This is used for VBE VPL tests */
+ mmc3 {
+ status = "disabled";
+ compatible = "sandbox,mmc";
+ filename = "image.bin";
+ non-removable;
+ };
+
pch {
compatible = "sandbox,pch";
};
diff --git a/test/py/tests/test_vbe_vpl.py b/test/py/tests/test_vbe_vpl.py
new file mode 100644
index 0000000..d1c9d05
--- /dev/null
+++ b/test/py/tests/test_vbe_vpl.py
@@ -0,0 +1,38 @@
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright 2022 Google LLC
+#
+# Test addition of VBE
+
+import os
+
+import pytest
+import u_boot_utils
+
+@pytest.mark.boardspec('sandbox_vpl')
+@pytest.mark.requiredtool('dtc')
+def test_vbe_vpl(u_boot_console):
+ cons = u_boot_console
+ #cmd = [cons.config.build_dir + fname, '-v']
+ ram = os.path.join(cons.config.build_dir, 'ram.bin')
+ fdt = os.path.join(cons.config.build_dir, 'arch/sandbox/dts/test.dtb')
+
+ # Enable firmware1 and the mmc that it uses. These are needed for the full
+ # VBE flow.
+ u_boot_utils.run_and_log(
+ cons, f'fdtput -t s {fdt} /bootstd/firmware0 status disabled')
+ u_boot_utils.run_and_log(
+ cons, f'fdtput -t s {fdt} /bootstd/firmware1 status okay')
+ u_boot_utils.run_and_log(
+ cons, f'fdtput -t s {fdt} /mmc3 status okay')
+
+ # Remove any existing RAM file, so we don't have old data present
+ if os.path.exists(ram):
+ os.remove(ram)
+ flags = ['-p', os.path.join(cons.config.build_dir, 'image.bin'), '-w',
+ '-s', 'state.dtb']
+ cons.restart_uboot_with_flags(flags)
+
+ # Make sure that VBE was used in both VPL (to load SPL) and SPL (to load
+ # U-Boot
+ output = cons.run_command('vbe state')
+ assert output == 'Phases: VPL SPL'