diff options
| author | Simon Glass <sjg@chromium.org> | 2022-10-11 09:47:13 -0600 | 
|---|---|---|
| committer | Simon Glass <sjg@chromium.org> | 2022-10-17 21:17:13 -0600 | 
| commit | bfdfc5d85398fba50e5e2b1e571df53f189f565a (patch) | |
| tree | c8b0807a8ff513049afaf5936082b6f2c347e85b /test/boot/bootstd_common.c | |
| parent | baf4141079aa18e5f40fcecaa9dabaeaa9437bee (diff) | |
bootstd: Move VBE setup into a shared function
This information needs to be set up by the bootstd tests as well. Move it
into a common function and ensure it is executed before any bootstd test
is run.
Make sure the 'images' parameter is set correctly for fixups.
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'test/boot/bootstd_common.c')
| -rw-r--r-- | test/boot/bootstd_common.c | 48 | 
1 files changed, 48 insertions, 0 deletions
| diff --git a/test/boot/bootstd_common.c b/test/boot/bootstd_common.c index 05347d87106..59d46bef0c5 100644 --- a/test/boot/bootstd_common.c +++ b/test/boot/bootstd_common.c @@ -9,10 +9,46 @@  #include <common.h>  #include <bootstd.h>  #include <dm.h> +#include <memalign.h> +#include <mmc.h> +#include <linux/log2.h>  #include <test/suites.h>  #include <test/ut.h> +#include <u-boot/crc.h>  #include "bootstd_common.h" +bool vbe_setup_done; + +/* set up MMC for VBE tests */ +int bootstd_setup_for_tests(void) +{ +	ALLOC_CACHE_ALIGN_BUFFER(u8, buf, MMC_MAX_BLOCK_LEN); +	struct udevice *mmc; +	struct blk_desc *desc; +	int ret; + +	/* Set up the version string */ +	ret = uclass_get_device(UCLASS_MMC, 1, &mmc); +	if (ret) +		return log_msg_ret("mmc", -EIO); +	desc = blk_get_by_device(mmc); + +	memset(buf, '\0', MMC_MAX_BLOCK_LEN); +	strcpy(buf, TEST_VERSION); +	if (blk_dwrite(desc, VERSION_START_BLK, 1, buf) != 1) +		return log_msg_ret("wr1", -EIO); + +	/* Set up the nvdata */ +	memset(buf, '\0', MMC_MAX_BLOCK_LEN); +	buf[1] = ilog2(0x40) << 4 | 1; +	*(u32 *)(buf + 4) = TEST_VERNUM; +	buf[0] = crc8(0, buf + 1, 0x3f); +	if (blk_dwrite(desc, NVDATA_START_BLK, 1, buf) != 1) +		return log_msg_ret("wr2", -EIO); + +	return 0; +} +  int bootstd_test_drop_bootdev_order(struct unit_test_state *uts)  {  	struct bootstd_priv *priv; @@ -30,6 +66,18 @@ int do_ut_bootstd(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])  	struct unit_test *tests = UNIT_TEST_SUITE_START(bootstd_test);  	const int n_ents = UNIT_TEST_SUITE_COUNT(bootstd_test); +	if (!vbe_setup_done) { +		int ret; + +		ret = bootstd_setup_for_tests(); +		if (ret) { +			printf("Failed to set up for bootstd tests (err=%d)\n", +			       ret); +			return CMD_RET_FAILURE; +		} +		vbe_setup_done = true; +	} +  	return cmd_ut_category("bootstd", "bootstd_test_",  			       tests, n_ents, argc, argv);  } | 
