
On 8/31/23 09:04, Michal Simek wrote:
ofnode_read_bootscript_flash() reads bootscript address from /options/u-boot DT node. bootscr-flash-offset and bootscr-flash-size properties are read and values are filled. When bootscr-flash-size is not defined, bootscr-flash-offset property is unusable that's why cleaned. Both of these properties should be defined to function properly.
Also add test to cover this new function.
Reviewed-by: Simon Glass sjg@chromium.org Signed-off-by: Michal Simek michal.simek@amd.com
Changes in v2:
Add missing static inline for !DM case (found by CI loop)
arch/sandbox/dts/test.dts | 2 ++ drivers/core/ofnode.c | 34 ++++++++++++++++++++++++++++++++++ include/dm/ofnode.h | 27 +++++++++++++++++++++++++++ test/dm/ofnode.c | 9 +++++++-- 4 files changed, 70 insertions(+), 2 deletions(-)
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts index 84879cc31ac0..cedb66af09e7 100644 --- a/arch/sandbox/dts/test.dts +++ b/arch/sandbox/dts/test.dts @@ -83,6 +83,8 @@ u-boot { compatible = "u-boot,config"; bootscr-ram-offset = /bits/ 64 <0x12345678>;
bootscr-flash-offset = /bits/ 64 <0>;
}; };bootscr-flash-size = /bits/ 64 <0x2000>;
diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index d94f0300c30a..023aad06ddc3 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -1588,6 +1588,40 @@ int ofnode_read_bootscript_address(u64 *bootscr_address, u64 *bootscr_offset) return 0; }
+int ofnode_read_bootscript_flash(u64 *bootscr_flash_offset,
u64 *bootscr_flash_size)
+{
- int ret;
- ofnode uboot;
- *bootscr_flash_offset = 0;
- *bootscr_flash_size = 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-flash-offset",
bootscr_flash_offset);
- if (ret)
return -EINVAL;
- ret = ofnode_read_u64(uboot, "bootscr-flash-size",
bootscr_flash_size);
- if (ret)
return -EINVAL;
- if (!bootscr_flash_size) {
debug("bootscr-flash-size is zero. Ignoring properties!\n");
*bootscr_flash_offset = 0;
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 c1afa69e1c56..6f8dc4fb4551 100644 --- a/include/dm/ofnode.h +++ b/include/dm/ofnode.h @@ -1521,6 +1521,27 @@ const char *ofnode_conf_read_str(const char *prop_name); */ int ofnode_read_bootscript_address(u64 *bootscr_address, u64 *bootscr_offset);
+/**
- ofnode_read_bootscript_flash() - Read bootscr-flash-offset/size
- @bootscr_flash_offset: pointer to 64bit offset where bootscr-flash-offset
- property value is stored
- @bootscr_flash_size: pointer to 64bit size where bootscr-flash-size property
- value is stored
- This reads a bootscr-flash-offset and bootscr-flash-size properties from
- the /options/u-boot/ node of the devicetree. bootscr-flash-offset holds
- the offset of the boot script file from start of flash. bootscr-flash-size
- holds the boot script size in flash. When bootscr-flash-size is not defined,
- bootscr-flash-offset property is cleaned.
- This only works with the control FDT.
- Return: 0 if OK, -EINVAL if property is not found or incorrect.
- */
+int ofnode_read_bootscript_flash(u64 *bootscr_flash_offset,
u64 *bootscr_flash_size);
- #else /* CONFIG_DM */ static inline bool ofnode_conf_read_bool(const char *prop_name) {
@@ -1542,6 +1563,12 @@ static inline int ofnode_read_bootscript_address(u64 *bootscr_address, u64 *boot return -EINVAL; }
+static inline int ofnode_read_bootscript_flash(u64 *bootscr_flash_offset,
u64 *bootscr_flash_size)
+{
- return -EINVAL;
+}
#endif /* CONFIG_DM */
/**
diff --git a/test/dm/ofnode.c b/test/dm/ofnode.c index a4e04f23784f..d84b738ed7c4 100644 --- a/test/dm/ofnode.c +++ b/test/dm/ofnode.c @@ -585,14 +585,19 @@ DM_TEST(dm_test_ofnode_conf, 0);
static int dm_test_ofnode_options(struct unit_test_state *uts) {
- u64 bootscr_address;
- u64 bootscr_offset;
u64 bootscr_address, bootscr_offset;
u64 bootscr_flash_offset, bootscr_flash_size;
ut_assertok(ofnode_read_bootscript_address(&bootscr_address, &bootscr_offset)); ut_asserteq_64(0, bootscr_address); ut_asserteq_64(0x12345678, bootscr_offset);
ut_assertok(ofnode_read_bootscript_flash(&bootscr_flash_offset,
&bootscr_flash_size));
ut_asserteq_64(0, bootscr_flash_offset);
ut_asserteq_64(0x2000, bootscr_flash_size);
return 0; } DM_TEST(dm_test_ofnode_options, 0);
Applied both.
M