mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
dm: core: ofnode: Add ofnode_read_bootscript_flash()
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> Link: https://lore.kernel.org/r/08a3e6c09cce13287c69ad370e409e7f1766b406.1693465465.git.michal.simek@amd.com
This commit is contained in:
parent
771635f6b0
commit
44f35e1aca
4 changed files with 70 additions and 2 deletions
|
@ -85,6 +85,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>;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -1618,6 +1618,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 */
|
||||
|
|
|
@ -1533,6 +1533,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)
|
||||
{
|
||||
|
@ -1554,6 +1575,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 */
|
||||
|
||||
/**
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue