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 { | 	chosen { | ||||||
| 		stdout-path = "/serial"; | 		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 { | 	audio: audio-codec { | ||||||
|  |  | ||||||
|  | @ -1387,6 +1387,21 @@ | ||||||
| 			compatible = "denx,u-boot-fdt-test"; | 			compatible = "denx,u-boot-fdt-test"; | ||||||
| 			reg = <9 1>; | 			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 { | 	translation-test@8000 { | ||||||
|  |  | ||||||
|  | @ -3,3 +3,7 @@ | ||||||
| # Copyright 2021 Google LLC
 | # Copyright 2021 Google LLC
 | ||||||
| 
 | 
 | ||||||
| obj-$(CONFIG_BOOTSTD) += bootdev.o bootstd_common.o bootflow.o bootmeth.o | 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 <common.h> | ||||||
| #include <bootdev.h> | #include <bootdev.h> | ||||||
| #include <bootflow.h> | #include <bootflow.h> | ||||||
|  | #include <bootmeth.h> | ||||||
| #include <bootstd.h> | #include <bootstd.h> | ||||||
| #include <dm.h> | #include <dm.h> | ||||||
| #include <asm/test.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)); | 	ut_assertok(bootstd_test_drop_bootdev_order(uts)); | ||||||
| 
 | 
 | ||||||
| 	console_record_reset_enable(); | 	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("Scanning for bootflows in all bootdevs"); | ||||||
| 	ut_assert_nextline("Seq  Method       State   Uclass    Part  Name                      Filename"); | 	ut_assert_nextline("Seq  Method       State   Uclass    Part  Name                      Filename"); | ||||||
| 	ut_assert_nextlinen("---"); | 	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)); | 	ut_assertok(bootstd_test_drop_bootdev_order(uts)); | ||||||
| 
 | 
 | ||||||
| 	console_record_reset_enable(); | 	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("Scanning for bootflows in all bootdevs"); | ||||||
| 	ut_assert_nextline("Seq  Method       State   Uclass    Part  Name                      Filename"); | 	ut_assert_nextline("Seq  Method       State   Uclass    Part  Name                      Filename"); | ||||||
| 	ut_assert_nextlinen("---"); | 	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 */ | 	/* The first device is mmc2.bootdev which has no media */ | ||||||
| 	ut_asserteq(-EPROTONOSUPPORT, | 	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(2, iter.num_methods); | ||||||
| 	ut_asserteq(0, iter.cur_method); | 	ut_asserteq(0, iter.cur_method); | ||||||
| 	ut_asserteq(0, iter.part); | 	ut_asserteq(0, iter.part); | ||||||
|  | @ -242,7 +243,7 @@ static int bootflow_iter(struct unit_test_state *uts) | ||||||
| 	ut_asserteq(0, bflow.err); | 	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 | 	 * bootdev_find_in_blk() we call part_get_info() which returns | ||||||
| 	 * -EPROTONOSUPPORT. Ideally it would return -EEOPNOTSUPP and we would | 	 * -EPROTONOSUPPORT. Ideally it would return -EEOPNOTSUPP and we would | ||||||
| 	 * know. | 	 * 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); | 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 */ | /* Check 'bootflow boot' to boot a selected bootflow */ | ||||||
| static int bootflow_cmd_boot(struct unit_test_state *uts) | 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_nextlinen("---"); | ||||||
| 	ut_assert_nextline("    0    0  syslinux            Syslinux boot from a block device"); | 	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("    1    1  efi                 EFI boot from an .efi file"); | ||||||
|  | 	ut_assert_nextline(" glob    2  firmware0           VBE simple"); | ||||||
| 	ut_assert_nextlinen("---"); | 	ut_assert_nextlinen("---"); | ||||||
| 	ut_assert_nextline("(2 bootmeths)"); | 	ut_assert_nextline("(3 bootmeths)"); | ||||||
| 	ut_assert_console_end(); | 	ut_assert_console_end(); | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
|  | @ -56,8 +57,9 @@ static int bootmeth_cmd_order(struct unit_test_state *uts) | ||||||
| 	ut_assert_nextlinen("---"); | 	ut_assert_nextlinen("---"); | ||||||
| 	ut_assert_nextline("    0    0  syslinux            Syslinux boot from a block device"); | 	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("    -    1  efi                 EFI boot from an .efi file"); | ||||||
|  | 	ut_assert_nextline(" glob    2  firmware0           VBE simple"); | ||||||
| 	ut_assert_nextlinen("---"); | 	ut_assert_nextlinen("---"); | ||||||
| 	ut_assert_nextline("(2 bootmeths)"); | 	ut_assert_nextline("(3 bootmeths)"); | ||||||
| 	ut_assert_console_end(); | 	ut_assert_console_end(); | ||||||
| 
 | 
 | ||||||
| 	/* Check the -a flag with the reverse order */ | 	/* 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_nextlinen("---"); | ||||||
| 	ut_assert_nextline("    1    0  syslinux            Syslinux boot from a block device"); | 	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("    0    1  efi                 EFI boot from an .efi file"); | ||||||
|  | 	ut_assert_nextline(" glob    2  firmware0           VBE simple"); | ||||||
| 	ut_assert_nextlinen("---"); | 	ut_assert_nextlinen("---"); | ||||||
| 	ut_assert_nextline("(2 bootmeths)"); | 	ut_assert_nextline("(3 bootmeths)"); | ||||||
| 	ut_assert_console_end(); | 	ut_assert_console_end(); | ||||||
| 
 | 
 | ||||||
| 	/* Now reset the order to empty, which should show all of them again */ | 	/* 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_assert_console_end(); | ||||||
| 	ut_assertnull(env_get("bootmeths")); | 	ut_assertnull(env_get("bootmeths")); | ||||||
| 	ut_assertok(run_command("bootmeth list", 0)); | 	ut_assertok(run_command("bootmeth list", 0)); | ||||||
| 	ut_assert_skip_to_line("(2 bootmeths)"); | 	ut_assert_skip_to_line("(3 bootmeths)"); | ||||||
| 
 | 
 | ||||||
| 	/* Try reverse order */ | 	/* Try reverse order */ | ||||||
| 	ut_assertok(run_command("bootmeth order \"efi syslinux\"", 0)); | 	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_asserteq_str("efi syslinux", env_get("bootmeths")); | ||||||
| 	ut_assert_console_end(); | 	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; | 	return 0; | ||||||
| } | } | ||||||
| BOOTSTD_TEST(bootmeth_cmd_order, UT_TESTF_DM | UT_TESTF_SCAN_FDT); | BOOTSTD_TEST(bootmeth_cmd_order, UT_TESTF_DM | UT_TESTF_SCAN_FDT); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue