sandbox: Support setting up the other FDT for testing

Provide a way to copy over the 'other' FDT when running tests. This loads
it and allocates memory for the copy, if not done already, then does the
copy.

Avoid using U-Boot's malloc() pool for these copies, at least for now,
since they are part of the test system.

Tidy up the cpu.c header files while here.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2022-09-06 20:27:10 -06:00
committed by Tom Rini
parent 9859d89b6e
commit 756c01422d
3 changed files with 67 additions and 5 deletions

View File

@@ -3,19 +3,22 @@
* Copyright (c) 2011 The Chromium OS Authors.
*/
#define LOG_CATEGORY LOGC_SANDBOX
#include <common.h>
#include <bootstage.h>
#include <cpu_func.h>
#include <errno.h>
#include <log.h>
#include <asm/global_data.h>
#include <linux/delay.h>
#include <linux/libfdt.h>
#include <os.h>
#include <asm/global_data.h>
#include <asm/io.h>
#include <asm/malloc.h>
#include <asm/setjmp.h>
#include <asm/state.h>
#include <dm/ofnode.h>
#include <linux/delay.h>
#include <linux/libfdt.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -373,3 +376,28 @@ ulong timer_get_boot_us(void)
return (count - base_count) / 1000;
}
int sandbox_load_other_fdt(void **fdtp, int *sizep)
{
const char *orig;
int ret, size;
void *fdt = *fdtp;
ret = state_load_other_fdt(&orig, &size);
if (ret) {
log_err("Cannot read other FDT\n");
return log_msg_ret("ld", ret);
}
if (!*fdtp) {
fdt = os_malloc(size);
if (!fdt)
return log_msg_ret("mem", -ENOMEM);
*sizep = size;
}
memcpy(fdt, orig, *sizep);
*fdtp = fdt;
return 0;
}

View File

@@ -11,6 +11,8 @@
#include <video.h>
#include <pci_ids.h>
struct unit_test_state;
/* The sandbox driver always permits an I2C device with this address */
#define SANDBOX_I2C_TEST_ADDR 0x59
@@ -315,4 +317,21 @@ int sandbox_sdl_set_bpp(struct udevice *dev, enum video_log2_bpp l2bpp);
*/
void sandbox_set_fake_efi_mgr_dev(struct udevice *dev, bool fake_dev);
/**
* sandbox_load_other_fdt() - load the 'other' FDT into the test state
*
* This copies the other.dtb file into the test state, so that a fresh version
* can be used for a test that is about to run.
*
* If @uts->other_fdt is NULL, as it is when first set up, this allocates a
* buffer for the other FDT and sets @uts->other_fdt_size to its size.
*
* In any case, the other FDT is copied from the sandbox state into
* @uts->other_fdt ready for use.
*
* @uts: Unit test state
* @return 0 if OK, -ve on error
*/
int sandbox_load_other_fdt(void **fdtp, int *sizep);
#endif