]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
upl: Add an end-to-end test
authorSimon Glass <sjg@chromium.org>
Wed, 7 Aug 2024 22:47:39 +0000 (16:47 -0600)
committerTom Rini <trini@konsulko.com>
Fri, 9 Aug 2024 22:03:20 +0000 (16:03 -0600)
Now that sandbox_vpl supports UPL, add a test that checks that the
payload can be loaded by SPL and the handoff information passed through
to U-Boot proper.

Signed-off-by: Simon Glass <sjg@chromium.org>
MAINTAINERS
test/boot/upl.c
test/py/tests/test_upl.py

index 215ffd02b45fbc551fd19fe334353f95a19abfb6..44e9c2f03f3ff56f463425719043be6119b7ab61 100644 (file)
@@ -1720,6 +1720,7 @@ F:        doc/usage/upl.rst
 F:     doc/usage/cmd/upl.rst
 F:     include/upl.h
 F:     test/boot/upl.c
+F:     test/py/tests/test_upl.py
 
 USB
 M:     Marek Vasut <marex@denx.de>
index 056ae54831b7ec340d96b8bc7ef8912456d5ae9a..364fb0526e4d71d4d0bf524aa11604c1f9e7cbf9 100644 (file)
@@ -398,6 +398,35 @@ static int upl_test_read_write(struct unit_test_state *uts)
 }
 UPL_TEST(upl_test_read_write, UT_TESTF_CONSOLE_REC);
 
+/* Test UPL passthrough */
+static int upl_test_info_norun(struct unit_test_state *uts)
+{
+       const struct upl_image *img;
+       struct upl *upl = gd_upl();
+       const void *fit;
+
+       ut_assertok(run_command("upl info -v", 0));
+       ut_assert_nextline("UPL state: active");
+       ut_assert_nextline("fit %lx", upl->fit);
+       ut_assert_nextline("conf_offset %x", upl->conf_offset);
+       ut_assert_nextlinen("image 0");
+       ut_assert_nextlinen("image 1");
+       ut_assert_console_end();
+
+       /* check the offsets */
+       fit = map_sysmem(upl->fit, 0);
+       ut_asserteq_str("conf-1", fdt_get_name(fit, upl->conf_offset, NULL));
+
+       ut_asserteq(2, upl->image.count);
+
+       img = alist_get(&upl->image, 1, struct upl_image);
+       ut_asserteq_str("firmware-1", fdt_get_name(fit, img->offset, NULL));
+       ut_asserteq(CONFIG_TEXT_BASE, img->load);
+
+       return 0;
+}
+UPL_TEST(upl_test_info_norun, UT_TESTF_CONSOLE_REC | UT_TESTF_MANUAL);
+
 int do_ut_upl(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 {
        struct unit_test *tests = UNIT_TEST_SUITE_START(upl_test);
index 171079f8dbaf17b2d5268310a5790b6fb1502d1d..3164bda6b717b7fea682df7898e9e07e2d207d8c 100644 (file)
@@ -10,6 +10,15 @@ import u_boot_utils
 
 @pytest.mark.boardspec('sandbox_vpl')
 def test_upl_handoff(u_boot_console):
+    """Test of UPL handoff
+
+    This works by starting up U-Boot VPL, which gets to SPL and then sets up a
+    UPL handoff using the FIT containing U-Boot proper. It then jumps to U-Boot
+    proper and runs a test to check that the parameters are correct.
+
+    The entire FIT is loaded into memory in SPL (in upl_load_from_image()) so
+    that it can be inpected in upl_test_info_norun
+    """
     cons = u_boot_console
     ram = os.path.join(cons.config.build_dir, 'ram.bin')
     fdt = os.path.join(cons.config.build_dir, 'u-boot.dtb')
@@ -17,9 +26,13 @@ def test_upl_handoff(u_boot_console):
     # Remove any existing RAM file, so we don't have old data present
     if os.path.exists(ram):
         os.remove(ram)
-    flags = ['-m', ram, '-d', fdt]
+    flags = ['-m', ram, '-d', fdt, '--upl']
     cons.restart_uboot_with_flags(flags, use_dtb=False)
 
     # Make sure that Universal Payload is detected in U-Boot proper
     output = cons.run_command('upl info')
-    assert output == 'UPL state: active'
+    assert 'UPL state: active' == output
+
+    # Check the FIT offsets look correct
+    output = cons.run_command('ut upl -f upl_test_info_norun')
+    assert 'Failures: 0' in output