mirror of
https://xff.cz/git/u-boot/
synced 2025-09-05 18:52:17 +02:00
dm: core: ofnode: Add ofnode_read_bootscript_address()
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. Reviewed-by: Simon Glass <sjg@chromium.org> Signed-off-by: Michal Simek <michal.simek@amd.com> Link: https://lore.kernel.org/r/23be3838502efef61803c90ef6e8b32bbd6ede41.1693465140.git.michal.simek@amd.com
This commit is contained in:
@@ -81,6 +81,13 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
options {
|
||||||
|
u-boot {
|
||||||
|
compatible = "u-boot,config";
|
||||||
|
bootscr-ram-offset = /bits/ 64 <0x12345678>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
bootstd {
|
bootstd {
|
||||||
bootph-verify;
|
bootph-verify;
|
||||||
compatible = "u-boot,boot-std";
|
compatible = "u-boot,boot-std";
|
||||||
|
@@ -1593,6 +1593,31 @@ const char *ofnode_conf_read_str(const char *prop_name)
|
|||||||
return ofnode_read_string(node, 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)
|
ofnode ofnode_get_phy_node(ofnode node)
|
||||||
{
|
{
|
||||||
/* DT node properties that reference a PHY node */
|
/* DT node properties that reference a PHY node */
|
||||||
|
@@ -20,6 +20,7 @@
|
|||||||
struct resource;
|
struct resource;
|
||||||
|
|
||||||
#include <dm/ofnode_decl.h>
|
#include <dm/ofnode_decl.h>
|
||||||
|
#include <linux/errno.h>
|
||||||
|
|
||||||
struct ofnode_phandle_args {
|
struct ofnode_phandle_args {
|
||||||
ofnode node;
|
ofnode node;
|
||||||
@@ -1512,6 +1513,26 @@ int ofnode_conf_read_int(const char *prop_name, int default_val);
|
|||||||
*/
|
*/
|
||||||
const char *ofnode_conf_read_str(const char *prop_name);
|
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 */
|
#else /* CONFIG_DM */
|
||||||
static inline bool ofnode_conf_read_bool(const char *prop_name)
|
static inline bool ofnode_conf_read_bool(const char *prop_name)
|
||||||
{
|
{
|
||||||
@@ -1528,6 +1549,11 @@ static inline const char *ofnode_conf_read_str(const char *prop_name)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int ofnode_read_bootscript_address(u64 *bootscr_address, u64 *bootscr_offset)
|
||||||
|
{
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_DM */
|
#endif /* CONFIG_DM */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -583,6 +583,20 @@ static int dm_test_ofnode_conf(struct unit_test_state *uts)
|
|||||||
}
|
}
|
||||||
DM_TEST(dm_test_ofnode_conf, 0);
|
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_assertok(ofnode_read_bootscript_address(&bootscr_address,
|
||||||
|
&bootscr_offset));
|
||||||
|
ut_asserteq_64(0, bootscr_address);
|
||||||
|
ut_asserteq_64(0x12345678, bootscr_offset);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
DM_TEST(dm_test_ofnode_options, 0);
|
||||||
|
|
||||||
static int dm_test_ofnode_for_each_compatible_node(struct unit_test_state *uts)
|
static int dm_test_ofnode_for_each_compatible_node(struct unit_test_state *uts)
|
||||||
{
|
{
|
||||||
const char compatible[] = "denx,u-boot-fdt-test";
|
const char compatible[] = "denx,u-boot-fdt-test";
|
||||||
|
Reference in New Issue
Block a user