bootstd: Add vbe bootmeth into sandbox
Update sandbox to include the VBE bootmeth. Update a few existing tests to take account of this change, specifically that the new bootmeth now appears when scanning. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									cb47e21acb
								
							
						
					
					
						commit
						0917f77393
					
				|  | @ -12,6 +12,19 @@ | |||
| 
 | ||||
| 	chosen { | ||||
| 		stdout-path = "/serial"; | ||||
| 
 | ||||
| 		fwupd { | ||||
| 			compatible = "simple-bus"; | ||||
| 			firmware { | ||||
| 				compatible = "fwupd,vbe-simple"; | ||||
| 				cur-version = "1.2.3"; | ||||
| 				bootloader-version = "2022.01"; | ||||
| 				storage = "mmc1"; | ||||
| 				area-start = <0x0>; | ||||
| 				area-size = <0x1000000>; | ||||
| 				skip-offset = <0x8000>; | ||||
| 			}; | ||||
| 		}; | ||||
| 	}; | ||||
| 
 | ||||
| 	audio: audio-codec { | ||||
|  |  | |||
|  | @ -1387,6 +1387,21 @@ | |||
| 			compatible = "denx,u-boot-fdt-test"; | ||||
| 			reg = <9 1>; | ||||
| 		}; | ||||
| 
 | ||||
| 		fwupd { | ||||
| 			compatible = "simple-bus"; | ||||
| 			firmware0 { | ||||
| 				compatible = "fwupd,vbe-simple"; | ||||
| 				storage = "mmc1"; | ||||
| 				area-start = <0x400>; | ||||
| 				area-size = <0x1000>; | ||||
| 				skip-offset = <0x200>; | ||||
| 				state-offset = <0x400>; | ||||
| 				state-size = <0x40>; | ||||
| 				version-offset = <0x800>; | ||||
| 				version-size = <0x100>; | ||||
| 			}; | ||||
| 		}; | ||||
| 	}; | ||||
| 
 | ||||
| 	translation-test@8000 { | ||||
|  |  | |||
|  | @ -3,3 +3,7 @@ | |||
| # Copyright 2021 Google LLC
 | ||||
| 
 | ||||
| obj-$(CONFIG_BOOTSTD) += bootdev.o bootstd_common.o bootflow.o bootmeth.o | ||||
| 
 | ||||
| ifdef CONFIG_OF_LIVE | ||||
| obj-$(CONFIG_BOOTMETH_VBE_SIMPLE) += vbe_simple.o | ||||
| endif | ||||
|  |  | |||
|  | @ -9,6 +9,7 @@ | |||
| #include <common.h> | ||||
| #include <bootdev.h> | ||||
| #include <bootflow.h> | ||||
| #include <bootmeth.h> | ||||
| #include <bootstd.h> | ||||
| #include <dm.h> | ||||
| #include <asm/test.h> | ||||
|  | @ -90,7 +91,7 @@ static int bootflow_cmd_glob(struct unit_test_state *uts) | |||
| 	ut_assertok(bootstd_test_drop_bootdev_order(uts)); | ||||
| 
 | ||||
| 	console_record_reset_enable(); | ||||
| 	ut_assertok(run_command("bootflow scan -l", 0)); | ||||
| 	ut_assertok(run_command("bootflow scan -lG", 0)); | ||||
| 	ut_assert_nextline("Scanning for bootflows in all bootdevs"); | ||||
| 	ut_assert_nextline("Seq  Method       State   Uclass    Part  Name                      Filename"); | ||||
| 	ut_assert_nextlinen("---"); | ||||
|  | @ -122,7 +123,7 @@ static int bootflow_cmd_scan_e(struct unit_test_state *uts) | |||
| 	ut_assertok(bootstd_test_drop_bootdev_order(uts)); | ||||
| 
 | ||||
| 	console_record_reset_enable(); | ||||
| 	ut_assertok(run_command("bootflow scan -ale", 0)); | ||||
| 	ut_assertok(run_command("bootflow scan -aleG", 0)); | ||||
| 	ut_assert_nextline("Scanning for bootflows in all bootdevs"); | ||||
| 	ut_assert_nextline("Seq  Method       State   Uclass    Part  Name                      Filename"); | ||||
| 	ut_assert_nextlinen("---"); | ||||
|  | @ -233,7 +234,7 @@ static int bootflow_iter(struct unit_test_state *uts) | |||
| 
 | ||||
| 	/* The first device is mmc2.bootdev which has no media */ | ||||
| 	ut_asserteq(-EPROTONOSUPPORT, | ||||
| 		    bootflow_scan_first(&iter, BOOTFLOWF_ALL, &bflow)); | ||||
| 		    bootflow_scan_first(&iter, BOOTFLOWF_ALL | BOOTFLOWF_SKIP_GLOBAL, &bflow)); | ||||
| 	ut_asserteq(2, iter.num_methods); | ||||
| 	ut_asserteq(0, iter.cur_method); | ||||
| 	ut_asserteq(0, iter.part); | ||||
|  | @ -242,7 +243,7 @@ static int bootflow_iter(struct unit_test_state *uts) | |||
| 	ut_asserteq(0, bflow.err); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * This shows MEDIA even though there is none, since int | ||||
| 	 * This shows MEDIA even though there is none, since in | ||||
| 	 * bootdev_find_in_blk() we call part_get_info() which returns | ||||
| 	 * -EPROTONOSUPPORT. Ideally it would return -EEOPNOTSUPP and we would | ||||
| 	 * know. | ||||
|  | @ -384,6 +385,44 @@ static int bootflow_iter_disable(struct unit_test_state *uts) | |||
| } | ||||
| BOOTSTD_TEST(bootflow_iter_disable, UT_TESTF_DM | UT_TESTF_SCAN_FDT); | ||||
| 
 | ||||
| /* Check 'bootflow scan' with a bootmeth ordering including a global bootmeth */ | ||||
| static int bootflow_scan_glob_bootmeth(struct unit_test_state *uts) | ||||
| { | ||||
| 	ut_assertok(bootstd_test_drop_bootdev_order(uts)); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Make sure that the -G flag makes the scan fail, since this is not | ||||
| 	 * supported when an ordering is provided | ||||
| 	 */ | ||||
| 	console_record_reset_enable(); | ||||
| 	ut_assertok(bootmeth_set_order("efi firmware0")); | ||||
| 	ut_assertok(run_command("bootflow scan -lG", 0)); | ||||
| 	ut_assert_nextline("Scanning for bootflows in all bootdevs"); | ||||
| 	ut_assert_nextline( | ||||
| 		"Seq  Method       State   Uclass    Part  Name                      Filename"); | ||||
| 	ut_assert_nextlinen("---"); | ||||
| 	ut_assert_nextlinen("---"); | ||||
| 	ut_assert_nextline("(0 bootflows, 0 valid)"); | ||||
| 	ut_assert_console_end(); | ||||
| 
 | ||||
| 	ut_assertok(run_command("bootflow scan -l", 0)); | ||||
| 	ut_assert_nextline("Scanning for bootflows in all bootdevs"); | ||||
| 	ut_assert_nextline( | ||||
| 		"Seq  Method       State   Uclass    Part  Name                      Filename"); | ||||
| 	ut_assert_nextlinen("---"); | ||||
| 	ut_assert_nextline("Scanning global bootmeth 'firmware0':"); | ||||
| 	ut_assert_nextline("Scanning bootdev 'mmc2.bootdev':"); | ||||
| 	ut_assert_nextline("Scanning bootdev 'mmc1.bootdev':"); | ||||
| 	ut_assert_nextline("Scanning bootdev 'mmc0.bootdev':"); | ||||
| 	ut_assert_nextline("No more bootdevs"); | ||||
| 	ut_assert_nextlinen("---"); | ||||
| 	ut_assert_nextline("(0 bootflows, 0 valid)"); | ||||
| 	ut_assert_console_end(); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| BOOTSTD_TEST(bootflow_scan_glob_bootmeth, UT_TESTF_DM | UT_TESTF_SCAN_FDT); | ||||
| 
 | ||||
| /* Check 'bootflow boot' to boot a selected bootflow */ | ||||
| static int bootflow_cmd_boot(struct unit_test_state *uts) | ||||
| { | ||||
|  |  | |||
|  | @ -23,8 +23,9 @@ static int bootmeth_cmd_list(struct unit_test_state *uts) | |||
| 	ut_assert_nextlinen("---"); | ||||
| 	ut_assert_nextline("    0    0  syslinux            Syslinux boot from a block device"); | ||||
| 	ut_assert_nextline("    1    1  efi                 EFI boot from an .efi file"); | ||||
| 	ut_assert_nextline(" glob    2  firmware0           VBE simple"); | ||||
| 	ut_assert_nextlinen("---"); | ||||
| 	ut_assert_nextline("(2 bootmeths)"); | ||||
| 	ut_assert_nextline("(3 bootmeths)"); | ||||
| 	ut_assert_console_end(); | ||||
| 
 | ||||
| 	return 0; | ||||
|  | @ -56,8 +57,9 @@ static int bootmeth_cmd_order(struct unit_test_state *uts) | |||
| 	ut_assert_nextlinen("---"); | ||||
| 	ut_assert_nextline("    0    0  syslinux            Syslinux boot from a block device"); | ||||
| 	ut_assert_nextline("    -    1  efi                 EFI boot from an .efi file"); | ||||
| 	ut_assert_nextline(" glob    2  firmware0           VBE simple"); | ||||
| 	ut_assert_nextlinen("---"); | ||||
| 	ut_assert_nextline("(2 bootmeths)"); | ||||
| 	ut_assert_nextline("(3 bootmeths)"); | ||||
| 	ut_assert_console_end(); | ||||
| 
 | ||||
| 	/* Check the -a flag with the reverse order */ | ||||
|  | @ -68,8 +70,9 @@ static int bootmeth_cmd_order(struct unit_test_state *uts) | |||
| 	ut_assert_nextlinen("---"); | ||||
| 	ut_assert_nextline("    1    0  syslinux            Syslinux boot from a block device"); | ||||
| 	ut_assert_nextline("    0    1  efi                 EFI boot from an .efi file"); | ||||
| 	ut_assert_nextline(" glob    2  firmware0           VBE simple"); | ||||
| 	ut_assert_nextlinen("---"); | ||||
| 	ut_assert_nextline("(2 bootmeths)"); | ||||
| 	ut_assert_nextline("(3 bootmeths)"); | ||||
| 	ut_assert_console_end(); | ||||
| 
 | ||||
| 	/* Now reset the order to empty, which should show all of them again */ | ||||
|  | @ -77,7 +80,7 @@ static int bootmeth_cmd_order(struct unit_test_state *uts) | |||
| 	ut_assert_console_end(); | ||||
| 	ut_assertnull(env_get("bootmeths")); | ||||
| 	ut_assertok(run_command("bootmeth list", 0)); | ||||
| 	ut_assert_skip_to_line("(2 bootmeths)"); | ||||
| 	ut_assert_skip_to_line("(3 bootmeths)"); | ||||
| 
 | ||||
| 	/* Try reverse order */ | ||||
| 	ut_assertok(run_command("bootmeth order \"efi syslinux\"", 0)); | ||||
|  | @ -93,6 +96,20 @@ static int bootmeth_cmd_order(struct unit_test_state *uts) | |||
| 	ut_asserteq_str("efi syslinux", env_get("bootmeths")); | ||||
| 	ut_assert_console_end(); | ||||
| 
 | ||||
| 	/* Try with global bootmeths */ | ||||
| 	ut_assertok(run_command("bootmeth order \"efi firmware0\"", 0)); | ||||
| 	ut_assert_console_end(); | ||||
| 	ut_assertok(run_command("bootmeth list", 0)); | ||||
| 	ut_assert_nextline("Order  Seq  Name                Description"); | ||||
| 	ut_assert_nextlinen("---"); | ||||
| 	ut_assert_nextline("    0    1  efi                 EFI boot from an .efi file"); | ||||
| 	ut_assert_nextline(" glob    2  firmware0           VBE simple"); | ||||
| 	ut_assert_nextlinen("---"); | ||||
| 	ut_assert_nextline("(2 bootmeths)"); | ||||
| 	ut_assertnonnull(env_get("bootmeths")); | ||||
| 	ut_asserteq_str("efi firmware0", env_get("bootmeths")); | ||||
| 	ut_assert_console_end(); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| BOOTSTD_TEST(bootmeth_cmd_order, UT_TESTF_DM | UT_TESTF_SCAN_FDT); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue