[PATCH v2 1/2] dm: core: ofnode: Add ofnode_read_bootscript_flash()
Michal Simek
michal.simek at amd.com
Thu Sep 7 13:24:12 CEST 2023
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 at chromium.org>
> Signed-off-by: Michal Simek <michal.simek at 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
More information about the U-Boot
mailing list