Add a test which checks that VBE boots correctly from TPL through to
U-Boot proper.

Signed-off-by: Simon Glass <s...@chromium.org>
---

(no changes since v2)

Changes in v2:
- Drop patch 'rsa: Avoid warning in padding_pss_verify()'

 arch/sandbox/dts/test.dts     | 37 ++++++++++++++++++++++++++++++++++
 test/py/tests/test_vbe_vpl.py | 38 +++++++++++++++++++++++++++++++++++
 2 files changed, 75 insertions(+)
 create mode 100644 test/py/tests/test_vbe_vpl.py

diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
index 09956ad7f97..82fff688e81 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 {
@@ -972,6 +1001,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 00000000000..d1c9d0548ae
--- /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'
-- 
2.38.0.135.g90850a2211-goog

Reply via email to