On Mon, 31 Jul 2023 at 05:33, Michal Simek <michal.si...@amd.com> wrote: > > ofnode_read_bootscript_address() reads bootscript address from > /options/u-boot DT node. bootscr-address or bootscr-ram-offset properties > are read and values are filled. bootscr-address has higher priority than > bootscr-ram-offset and the only one should be described in DT. > > Also add test to cover this new function. > > Signed-off-by: Michal Simek <michal.si...@amd.com> > > --- > > Changes in v3: > - new patch in this series > > arch/sandbox/dts/test.dts | 7 +++++++ > drivers/core/ofnode.c | 25 +++++++++++++++++++++++++ > include/dm/ofnode.h | 25 +++++++++++++++++++++++++ > test/dm/ofnode.c | 14 ++++++++++++++ > 4 files changed, 71 insertions(+)
Reviewed-by: Simon Glass <s...@chromium.org> nits below > > diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts > index b5509eee8cfe..94b00b80429b 100644 > --- a/arch/sandbox/dts/test.dts > +++ b/arch/sandbox/dts/test.dts > @@ -79,6 +79,13 @@ > }; > }; > > + options { > + u-boot { > + compatible = "u-boot,config"; > + bootscr-ram-offset = /bits/ 64 <0x12345678>; > + }; > + }; > + > bootstd { > bootph-verify; > compatible = "u-boot,boot-std"; > diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c > index 8df16e56af5c..d94f0300c30a 100644 > --- a/drivers/core/ofnode.c > +++ b/drivers/core/ofnode.c > @@ -1563,6 +1563,31 @@ const char *ofnode_conf_read_str(const char *prop_name) > return ofnode_read_string(node, prop_name); > } > > +int ofnode_read_bootscript_address(u64 *bootscr_address, u64 *bootscr_offset) > +{ > + int ret; > + ofnode uboot; > + > + *bootscr_address = 0; > + *bootscr_offset = 0; > + > + uboot = ofnode_path("/options/u-boot"); > + if (!ofnode_valid(uboot)) { > + printf("%s: Missing /u-boot node\n", __func__); > + return -EINVAL; > + } > + > + ret = ofnode_read_u64(uboot, "bootscr-address", bootscr_address); > + if (ret) { > + ret = ofnode_read_u64(uboot, "bootscr-ram-offset", > + bootscr_offset); > + if (ret) > + return -EINVAL; > + } > + > + return 0; > +} > + > ofnode ofnode_get_phy_node(ofnode node) > { > /* DT node properties that reference a PHY node */ > diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h > index 0f38b3e736de..a297236112ed 100644 > --- a/include/dm/ofnode.h > +++ b/include/dm/ofnode.h > @@ -1500,6 +1500,26 @@ int ofnode_conf_read_int(const char *prop_name, int > default_val); > */ > const char *ofnode_conf_read_str(const char *prop_name); > > +/** > + * ofnode_read_bootscript_address() - Read bootscr-address or > bootscr-ram-offset > + * > + * @bootscr_address: pointer to 64bit address where bootscr-address property > value > + * is stored > + * @bootscr_offset: pointer to 64bit offset address where bootscr-ram-offset > + * property value is stored > + * > + * This reads a bootscr-address or bootscr-ram-offset property from > + * the /options/u-boot/ node of the devicetree. bootscr-address holds the > full > + * address of the boot script file. bootscr-ram-offset holds the boot script > + * file offset from the start of the ram base address. When bootscr-address > is > + * defined, bootscr-ram-offset property is ignored. > + * > + * This only works with the control FDT. > + * > + * Return: 0 if OK, -EINVAL if property is not found. > + */ > +int ofnode_read_bootscript_address(u64 *bootscr_address, u64 > *bootscr_offset); > + > #else /* CONFIG_DM */ > static inline bool ofnode_conf_read_bool(const char *prop_name) > { > @@ -1516,6 +1536,11 @@ static inline const char *ofnode_conf_read_str(const > char *prop_name) > return NULL; > } > > +int ofnode_read_bootscript_address(u64 *bootscr_address, u64 *bootscr_offset) > +{ > + return -EINVAL; > +} > + > #endif /* CONFIG_DM */ > > /** > diff --git a/test/dm/ofnode.c b/test/dm/ofnode.c > index 6fbebc7da085..0aef68465ec7 100644 > --- a/test/dm/ofnode.c > +++ b/test/dm/ofnode.c > @@ -583,6 +583,20 @@ static int dm_test_ofnode_conf(struct unit_test_state > *uts) > } > DM_TEST(dm_test_ofnode_conf, 0); > > +static int dm_test_ofnode_options(struct unit_test_state *uts) > +{ > + u64 bootscr_address; > + u64 bootscr_offset; > + > + ut_assert(!ofnode_read_bootscript_address(&bootscr_address, > + &bootscr_offset)); ut_assertok(ofnode...) > + ut_assert(bootscr_address == 0); ut_asserteq_64(0, bootscr_address); > + ut_assert(bootscr_offset == 0x12345678); ut_asserteq_64(0x12345678, bootscr_address); > + > + return 0; > +} > +DM_TEST(dm_test_ofnode_options, 0); > + > static int dm_test_ofnode_for_each_compatible_node(struct unit_test_state > *uts) > { > const char compatible[] = "denx,u-boot-fdt-test"; > -- > 2.36.1 > Regards, Simon