spl: Allow enabling SPL_OF_REAL and SPL_OF_PLATDATA at the same time

Sandbox unit tests in U-Boot proper load a test device tree to have some
devices to work with. In order to do the same in SPL, we must enable
SPL_OF_REAL. However, we already have SPL_OF_PLATDATA enabled. When
generating platdata from a devicetree, it is expected that we will not need
devicetree access functions (even though SPL_OF_CONTROL is enabled). This
expectation does not hold for sandbox, so allow user control of
SPL_OF_REAL.

There are several places in the tree where conditions involving OF_PLATDATA
or OF_REAL no longer function correctly when both of these options can be
selected at the same time. Adjust these conditions accordingly.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Sean Anderson 2023-10-14 16:47:46 -04:00 committed by Tom Rini
parent 12b3339070
commit eaf738559c
6 changed files with 10 additions and 7 deletions

View file

@ -15,6 +15,7 @@ obj-$(CONFIG_$(SPL_)OF_LIVE) += of_access.o of_addr.o
ifndef CONFIG_DM_DEV_READ_INLINE ifndef CONFIG_DM_DEV_READ_INLINE
obj-$(CONFIG_OF_CONTROL) += read.o obj-$(CONFIG_OF_CONTROL) += read.o
endif endif
obj-$(CONFIG_$(SPL_)OF_PLATDATA) += read.o
obj-$(CONFIG_OF_CONTROL) += of_extra.o ofnode.o read_extra.o obj-$(CONFIG_OF_CONTROL) += of_extra.o ofnode.o read_extra.o
ccflags-$(CONFIG_DM_DEBUG) += -DDEBUG ccflags-$(CONFIG_DM_DEBUG) += -DDEBUG

View file

@ -46,7 +46,7 @@ int i2c_emul_find(struct udevice *dev, struct udevice **emulp)
struct udevice *emul; struct udevice *emul;
int ret; int ret;
if (!CONFIG_IS_ENABLED(OF_PLATDATA)) { if (CONFIG_IS_ENABLED(OF_REAL)) {
ret = uclass_find_device_by_phandle(UCLASS_I2C_EMUL, dev, ret = uclass_find_device_by_phandle(UCLASS_I2C_EMUL, dev,
"sandbox,emul", &emul); "sandbox,emul", &emul);
} else { } else {

View file

@ -280,7 +280,7 @@ U_BOOT_DRIVER(sandbox_serial) = {
.flags = DM_FLAG_PRE_RELOC, .flags = DM_FLAG_PRE_RELOC,
}; };
#if CONFIG_IS_ENABLED(OF_REAL) #if CONFIG_IS_ENABLED(OF_REAL) && !CONFIG_IS_ENABLED(OF_PLATDATA)
static const struct sandbox_serial_plat platdata_non_fdt = { static const struct sandbox_serial_plat platdata_non_fdt = {
.colour = -1, .colour = -1,
}; };

View file

@ -132,7 +132,7 @@ U_BOOT_DRIVER(warm_sysreset_sandbox) = {
.ops = &sandbox_warm_sysreset_ops, .ops = &sandbox_warm_sysreset_ops,
}; };
#if CONFIG_IS_ENABLED(OF_REAL) #if CONFIG_IS_ENABLED(OF_REAL) && !CONFIG_IS_ENABLED(OF_PLATDATA)
/* This is here in case we don't have a device tree */ /* This is here in case we don't have a device tree */
U_BOOT_DRVINFO(sysreset_sandbox_non_fdt) = { U_BOOT_DRVINFO(sysreset_sandbox_non_fdt) = {
.name = "sysreset_sandbox", .name = "sysreset_sandbox",

View file

@ -410,12 +410,14 @@ config SPL_OF_PLATDATA
declarations for each node. See of-plat.txt for more information. declarations for each node. See of-plat.txt for more information.
config SPL_OF_REAL config SPL_OF_REAL
bool bool "Support a real devicetree in SPL" if SANDBOX
depends on SPL_OF_CONTROL
select SPL_OF_LIBFDT
help help
Indicates that a real devicetree is available which can be accessed Indicates that a real devicetree is available which can be accessed
at runtime. This means that dev_read_...() functions can be used to at runtime. This means that dev_read_...() functions can be used to
read data from the devicetree for each device. This is true if read data from the devicetree for each device. You do not need to
SPL_OF_CONTROL is enabled and not SPL_OF_PLATDATA enable this option if you have enabled SPL_OF_PLATDATA.
if SPL_OF_PLATDATA if SPL_OF_PLATDATA

View file

@ -303,7 +303,7 @@ static int test_pre_run(struct unit_test_state *uts, struct unit_test *test)
if (test->flags & UT_TESTF_PROBE_TEST) if (test->flags & UT_TESTF_PROBE_TEST)
ut_assertok(do_autoprobe(uts)); ut_assertok(do_autoprobe(uts));
if (!CONFIG_IS_ENABLED(OF_PLATDATA) && if (CONFIG_IS_ENABLED(OF_REAL) &&
(test->flags & UT_TESTF_SCAN_FDT)) { (test->flags & UT_TESTF_SCAN_FDT)) {
/* /*
* only set this if we know the ethernet uclass will be created * only set this if we know the ethernet uclass will be created