Commit b3bea15d authored by Kumar Gala's avatar Kumar Gala

[POWERPC] bootwrapper: Add find_node_by_compatible

Add the ability to find a device node by just what its compatible with.
This is useful in cases that we don't have a prop to find the node with.
Signed-off-by: default avatarKumar Gala <galak@kernel.crashing.org>
parent 03a16b27
...@@ -133,6 +133,14 @@ static void *fdt_wrapper_find_node_by_prop_value(const void *prev, ...@@ -133,6 +133,14 @@ static void *fdt_wrapper_find_node_by_prop_value(const void *prev,
return offset_devp(offset); return offset_devp(offset);
} }
static void *fdt_wrapper_find_node_by_compatible(const void *prev,
const char *val)
{
int offset = fdt_node_offset_by_compatible(fdt, devp_offset_find(prev),
val);
return offset_devp(offset);
}
static char *fdt_wrapper_get_path(const void *devp, char *buf, int len) static char *fdt_wrapper_get_path(const void *devp, char *buf, int len)
{ {
int rc; int rc;
...@@ -164,6 +172,7 @@ void fdt_init(void *blob) ...@@ -164,6 +172,7 @@ void fdt_init(void *blob)
dt_ops.get_parent = fdt_wrapper_get_parent; dt_ops.get_parent = fdt_wrapper_get_parent;
dt_ops.create_node = fdt_wrapper_create_node; dt_ops.create_node = fdt_wrapper_create_node;
dt_ops.find_node_by_prop_value = fdt_wrapper_find_node_by_prop_value; dt_ops.find_node_by_prop_value = fdt_wrapper_find_node_by_prop_value;
dt_ops.find_node_by_compatible = fdt_wrapper_find_node_by_compatible;
dt_ops.get_path = fdt_wrapper_get_path; dt_ops.get_path = fdt_wrapper_get_path;
dt_ops.finalize = fdt_wrapper_finalize; dt_ops.finalize = fdt_wrapper_finalize;
......
...@@ -46,6 +46,8 @@ struct dt_ops { ...@@ -46,6 +46,8 @@ struct dt_ops {
void *(*find_node_by_prop_value)(const void *prev, void *(*find_node_by_prop_value)(const void *prev,
const char *propname, const char *propname,
const char *propval, int proplen); const char *propval, int proplen);
void *(*find_node_by_compatible)(const void *prev,
const char *compat);
unsigned long (*finalize)(void); unsigned long (*finalize)(void);
char *(*get_path)(const void *phandle, char *buf, int len); char *(*get_path)(const void *phandle, char *buf, int len);
}; };
...@@ -172,6 +174,15 @@ static inline void *find_node_by_alias(const char *alias) ...@@ -172,6 +174,15 @@ static inline void *find_node_by_alias(const char *alias)
return NULL; return NULL;
} }
static inline void *find_node_by_compatible(const void *prev,
const char *compat)
{
if (dt_ops.find_node_by_compatible)
return dt_ops.find_node_by_compatible(prev, compat);
return NULL;
}
void dt_fixup_memory(u64 start, u64 size); void dt_fixup_memory(u64 start, u64 size);
void dt_fixup_cpu_clocks(u32 cpufreq, u32 tbfreq, u32 busfreq); void dt_fixup_cpu_clocks(u32 cpufreq, u32 tbfreq, u32 busfreq);
void dt_fixup_clock(const char *path, u32 freq); void dt_fixup_clock(const char *path, u32 freq);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment