mirror of
https://github.com/smaeul/u-boot.git
synced 2025-10-14 12:56:00 +01:00
dm: core: Allow obtaining a node offset in the same tree
In some cases we want to obtain an ofnode in the same tree as a different ofnode, such as when looking up a subnode. At present this is trivial, since there is only one tree. When there are multiple trees, this implementation will change. Also move the ofnode_to_offset() function up higher in the header file, since we will need to provide a different implementation with multiple trees. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
928d267aee
commit
2187cb7e4a
@ -278,7 +278,7 @@ ofnode ofnode_find_subnode(ofnode node, const char *subnode_name)
|
|||||||
} else {
|
} else {
|
||||||
int ooffset = fdt_subnode_offset(ofnode_to_fdt(node),
|
int ooffset = fdt_subnode_offset(ofnode_to_fdt(node),
|
||||||
ofnode_to_offset(node), subnode_name);
|
ofnode_to_offset(node), subnode_name);
|
||||||
subnode = offset_to_ofnode(ooffset);
|
subnode = noffset_to_ofnode(node, ooffset);
|
||||||
}
|
}
|
||||||
debug("%s\n", ofnode_valid(subnode) ?
|
debug("%s\n", ofnode_valid(subnode) ?
|
||||||
ofnode_get_name(subnode) : "<none>");
|
ofnode_get_name(subnode) : "<none>");
|
||||||
@ -330,7 +330,7 @@ ofnode ofnode_first_subnode(ofnode node)
|
|||||||
if (ofnode_is_np(node))
|
if (ofnode_is_np(node))
|
||||||
return np_to_ofnode(node.np->child);
|
return np_to_ofnode(node.np->child);
|
||||||
|
|
||||||
return offset_to_ofnode(
|
return noffset_to_ofnode(node,
|
||||||
fdt_first_subnode(ofnode_to_fdt(node), ofnode_to_offset(node)));
|
fdt_first_subnode(ofnode_to_fdt(node), ofnode_to_offset(node)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -340,7 +340,7 @@ ofnode ofnode_next_subnode(ofnode node)
|
|||||||
if (ofnode_is_np(node))
|
if (ofnode_is_np(node))
|
||||||
return np_to_ofnode(node.np->sibling);
|
return np_to_ofnode(node.np->sibling);
|
||||||
|
|
||||||
return offset_to_ofnode(
|
return noffset_to_ofnode(node,
|
||||||
fdt_next_subnode(ofnode_to_fdt(node), ofnode_to_offset(node)));
|
fdt_next_subnode(ofnode_to_fdt(node), ofnode_to_offset(node)));
|
||||||
}
|
}
|
||||||
#endif /* !DM_INLINE_OFNODE */
|
#endif /* !DM_INLINE_OFNODE */
|
||||||
@ -1172,8 +1172,8 @@ ofnode ofnode_by_compatible(ofnode from, const char *compat)
|
|||||||
(struct device_node *)ofnode_to_np(from), NULL,
|
(struct device_node *)ofnode_to_np(from), NULL,
|
||||||
compat));
|
compat));
|
||||||
} else {
|
} else {
|
||||||
return offset_to_ofnode(fdt_node_offset_by_compatible(
|
return noffset_to_ofnode(from,
|
||||||
ofnode_to_fdt(from),
|
fdt_node_offset_by_compatible(ofnode_to_fdt(from),
|
||||||
ofnode_to_offset(from), compat));
|
ofnode_to_offset(from), compat));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1186,9 +1186,10 @@ ofnode ofnode_by_prop_value(ofnode from, const char *propname,
|
|||||||
(struct device_node *)ofnode_to_np(from), propname,
|
(struct device_node *)ofnode_to_np(from), propname,
|
||||||
propval, proplen));
|
propval, proplen));
|
||||||
} else {
|
} else {
|
||||||
return offset_to_ofnode(fdt_node_offset_by_prop_value(
|
return noffset_to_ofnode(from,
|
||||||
ofnode_to_fdt(from), ofnode_to_offset(from),
|
fdt_node_offset_by_prop_value(ofnode_to_fdt(from),
|
||||||
propname, propval, proplen));
|
ofnode_to_offset(from), propname, propval,
|
||||||
|
proplen));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1342,7 +1343,7 @@ int ofnode_add_subnode(ofnode node, const char *name, ofnode *subnodep)
|
|||||||
}
|
}
|
||||||
if (offset < 0)
|
if (offset < 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
subnode = offset_to_ofnode(offset);
|
subnode = noffset_to_ofnode(node, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
*subnodep = subnode;
|
*subnodep = subnode;
|
||||||
|
@ -54,6 +54,23 @@ static inline void *ofnode_to_fdt(ofnode node)
|
|||||||
return (void *)gd->fdt_blob;
|
return (void *)gd->fdt_blob;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ofnode_to_offset() - convert an ofnode to a flat DT offset
|
||||||
|
*
|
||||||
|
* This cannot be called if the reference contains a node pointer.
|
||||||
|
*
|
||||||
|
* @node: Reference containing offset (possibly invalid)
|
||||||
|
* Return: DT offset (can be -1)
|
||||||
|
*/
|
||||||
|
static inline int ofnode_to_offset(ofnode node)
|
||||||
|
{
|
||||||
|
#ifdef OF_CHECKS
|
||||||
|
if (of_live_active())
|
||||||
|
return -1;
|
||||||
|
#endif
|
||||||
|
return node.of_offset;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ofnode_to_np() - convert an ofnode to a live DT node pointer
|
* ofnode_to_np() - convert an ofnode to a live DT node pointer
|
||||||
*
|
*
|
||||||
@ -72,20 +89,22 @@ static inline struct device_node *ofnode_to_np(ofnode node)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ofnode_to_offset() - convert an ofnode to a flat DT offset
|
* noffset_to_ofnode() - convert a DT offset to an ofnode
|
||||||
*
|
*
|
||||||
* This cannot be called if the reference contains a node pointer.
|
* @other_node: Node in the same tree to use as a reference
|
||||||
*
|
* @of_offset: DT offset (either valid, or -1)
|
||||||
* @node: Reference containing offset (possibly invalid)
|
* Return: reference to the associated DT offset
|
||||||
* Return: DT offset (can be -1)
|
|
||||||
*/
|
*/
|
||||||
static inline int ofnode_to_offset(ofnode node)
|
static inline ofnode noffset_to_ofnode(ofnode other_node, int of_offset)
|
||||||
{
|
{
|
||||||
#ifdef OF_CHECKS
|
ofnode node;
|
||||||
|
|
||||||
if (of_live_active())
|
if (of_live_active())
|
||||||
return -1;
|
node.np = NULL;
|
||||||
#endif
|
else
|
||||||
return node.of_offset;
|
node.of_offset = of_offset;
|
||||||
|
|
||||||
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1175,8 +1194,9 @@ ofnode ofnode_by_compatible(ofnode from, const char *compat);
|
|||||||
* Find the next node after @from that has a @propname with a value
|
* Find the next node after @from that has a @propname with a value
|
||||||
* @propval and a length @proplen.
|
* @propval and a length @proplen.
|
||||||
*
|
*
|
||||||
* @from: ofnode to start from (use ofnode_null() to start at the
|
* @from: ofnode to start from. Use ofnode_null() to start at the
|
||||||
* beginning)
|
* beginning, or the return value from oftree_root() to start at the first
|
||||||
|
* child of the root
|
||||||
* @propname: property name to check
|
* @propname: property name to check
|
||||||
* @propval: property value to search for
|
* @propval: property value to search for
|
||||||
* @proplen: length of the value in propval
|
* @proplen: length of the value in propval
|
||||||
|
Loading…
x
Reference in New Issue
Block a user