From: Simon Glass Date: Wed, 7 Aug 2024 22:47:39 +0000 (-0600) Subject: upl: Add an end-to-end test X-Git-Url: http://git.dujemihanovic.xyz/html/%7B%7B%20%28.OutputFormats.Get?a=commitdiff_plain;h=3403422767650d3ff4f3129ee959e1b5de525161;p=u-boot.git upl: Add an end-to-end test 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 --- diff --git a/MAINTAINERS b/MAINTAINERS index 215ffd02b4..44e9c2f03f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -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 diff --git a/test/boot/upl.c b/test/boot/upl.c index 056ae54831..364fb0526e 100644 --- a/test/boot/upl.c +++ b/test/boot/upl.c @@ -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); diff --git a/test/py/tests/test_upl.py b/test/py/tests/test_upl.py index 171079f8db..3164bda6b7 100644 --- a/test/py/tests/test_upl.py +++ b/test/py/tests/test_upl.py @@ -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