mirror of
https://xff.cz/git/u-boot/
synced 2025-09-01 08:42:12 +02:00
fdt_support: Add fdt_for_each_node_by_compatible() helper macro
Add macro fdt_for_each_node_by_compatible() to allow iterating over fdt nodes by compatible string. Convert various usages of off = fdt_node_offset_by_compatible(fdt, start, compat); while (off > 0) { code(); off = fdt_node_offset_by_compatible(fdt, off, compat); } and similar, to fdt_for_each_node_by_compatible(off, fdt, start, compat) code(); Signed-off-by: Marek Behún <marek.behun@nic.cz> Reviewed-by: Stefan Roese <sr@denx.de> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
committed by
Stefan Roese
parent
068415eade
commit
3058e283b8
@@ -371,12 +371,9 @@ void do_fixup_by_compat(void *fdt, const char *compat,
|
||||
debug(" %.2x", *(u8*)(val+i));
|
||||
debug("\n");
|
||||
#endif
|
||||
off = fdt_node_offset_by_compatible(fdt, -1, compat);
|
||||
while (off != -FDT_ERR_NOTFOUND) {
|
||||
fdt_for_each_node_by_compatible(off, fdt, -1, compat)
|
||||
if (create || (fdt_get_property(fdt, off, prop, NULL) != NULL))
|
||||
fdt_setprop(fdt, off, prop, val, len);
|
||||
off = fdt_node_offset_by_compatible(fdt, off, compat);
|
||||
}
|
||||
}
|
||||
|
||||
void do_fixup_by_compat_u32(void *fdt, const char *compat,
|
||||
@@ -996,10 +993,9 @@ void fdt_fixup_mtdparts(void *blob, const struct node_info *node_info,
|
||||
|
||||
for (i = 0; i < node_info_size; i++) {
|
||||
idx = 0;
|
||||
noff = -1;
|
||||
|
||||
while ((noff = fdt_node_offset_by_compatible(blob, noff,
|
||||
node_info[i].compat)) >= 0) {
|
||||
fdt_for_each_node_by_compatible(noff, blob, -1,
|
||||
node_info[i].compat) {
|
||||
const char *prop;
|
||||
|
||||
prop = fdt_getprop(blob, noff, "status", NULL);
|
||||
@@ -1473,14 +1469,12 @@ out:
|
||||
int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
|
||||
phys_addr_t compat_off)
|
||||
{
|
||||
int len, off = fdt_node_offset_by_compatible(blob, -1, compat);
|
||||
while (off != -FDT_ERR_NOTFOUND) {
|
||||
int len, off;
|
||||
|
||||
fdt_for_each_node_by_compatible(off, blob, -1, compat) {
|
||||
const fdt32_t *reg = fdt_getprop(blob, off, "reg", &len);
|
||||
if (reg) {
|
||||
if (compat_off == fdt_translate_address(blob, off, reg))
|
||||
return off;
|
||||
}
|
||||
off = fdt_node_offset_by_compatible(blob, off, compat);
|
||||
if (reg && compat_off == fdt_translate_address(blob, off, reg))
|
||||
return off;
|
||||
}
|
||||
|
||||
return -FDT_ERR_NOTFOUND;
|
||||
|
Reference in New Issue
Block a user