mirror of
https://github.com/smaeul/u-boot.git
synced 2025-10-14 12:56:00 +01: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:
parent
068415eade
commit
3058e283b8
@ -161,14 +161,9 @@ void fsl_fdt_disable_usb(void *blob)
|
|||||||
* controller is used, SYSCLK must meet the additional requirement
|
* controller is used, SYSCLK must meet the additional requirement
|
||||||
* of 100 MHz.
|
* of 100 MHz.
|
||||||
*/
|
*/
|
||||||
if (get_board_sys_clk() != 100000000) {
|
if (get_board_sys_clk() != 100000000)
|
||||||
off = fdt_node_offset_by_compatible(blob, -1, "snps,dwc3");
|
fdt_for_each_node_by_compatible(off, blob, -1, "snps,dwc3")
|
||||||
while (off != -FDT_ERR_NOTFOUND) {
|
|
||||||
fdt_status_disabled(blob, off);
|
fdt_status_disabled(blob, off);
|
||||||
off = fdt_node_offset_by_compatible(blob, off,
|
|
||||||
"snps,dwc3");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_HAS_FEATURE_GIC64K_ALIGN
|
#ifdef CONFIG_HAS_FEATURE_GIC64K_ALIGN
|
||||||
|
@ -116,8 +116,7 @@ void fdt_fixup_fman_port_icid_by_compat(void *blob, int smmu_ph,
|
|||||||
int noff, len, icid;
|
int noff, len, icid;
|
||||||
const u32 *prop;
|
const u32 *prop;
|
||||||
|
|
||||||
noff = fdt_node_offset_by_compatible(blob, -1, compat);
|
fdt_for_each_node_by_compatible(noff, blob, -1, compat) {
|
||||||
while (noff > 0) {
|
|
||||||
prop = fdt_getprop(blob, noff, "cell-index", &len);
|
prop = fdt_getprop(blob, noff, "cell-index", &len);
|
||||||
if (!prop) {
|
if (!prop) {
|
||||||
printf("WARNING missing cell-index for fman port\n");
|
printf("WARNING missing cell-index for fman port\n");
|
||||||
@ -137,8 +136,6 @@ void fdt_fixup_fman_port_icid_by_compat(void *blob, int smmu_ph,
|
|||||||
}
|
}
|
||||||
|
|
||||||
fdt_set_iommu_prop(blob, noff, smmu_ph, (u32 *)&icid, 1);
|
fdt_set_iommu_prop(blob, noff, smmu_ph, (u32 *)&icid, 1);
|
||||||
|
|
||||||
noff = fdt_node_offset_by_compatible(blob, noff, compat);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,11 +46,8 @@ int tegra_gpu_enable_node(void *blob, const char *compat)
|
|||||||
if (!_configured)
|
if (!_configured)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
offset = fdt_node_offset_by_compatible(blob, -1, compat);
|
fdt_for_each_node_by_compatible(offset, blob, -1, compat)
|
||||||
while (offset != -FDT_ERR_NOTFOUND) {
|
|
||||||
fdt_status_okay(blob, offset);
|
fdt_status_okay(blob, offset);
|
||||||
offset = fdt_node_offset_by_compatible(blob, offset, compat);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -424,12 +424,8 @@ void __octeon_fixup_fdt_mac_addr(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Assign 78XX addresses in the order they appear in the device tree. */
|
/* Assign 78XX addresses in the order they appear in the device tree. */
|
||||||
node = fdt_node_offset_by_compatible(working_fdt, -1, "cavium,octeon-7890-bgx-port");
|
fdt_for_each_node_by_compatible(node, working_fdt, -1, "cavium,octeon-7890-bgx-port")
|
||||||
while (node != -FDT_ERR_NOTFOUND) {
|
|
||||||
octeon_set_one_fdt_mac(node, &mac);
|
octeon_set_one_fdt_mac(node, &mac);
|
||||||
node = fdt_node_offset_by_compatible(working_fdt, node,
|
|
||||||
"cavium,octeon-7890-bgx-port");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -450,11 +446,8 @@ void __octeon_fixup_fdt_uart(void)
|
|||||||
/* Device trees already have good values for fast simulator
|
/* Device trees already have good values for fast simulator
|
||||||
* output, real boards need the correct value.
|
* output, real boards need the correct value.
|
||||||
*/
|
*/
|
||||||
node = fdt_node_offset_by_compatible(working_fdt, -1, "cavium,octeon-3860-uart");
|
fdt_for_each_node_by_compatible(node, working_fdt, -1, "cavium,octeon-3860-uart")
|
||||||
while (node != -FDT_ERR_NOTFOUND) {
|
|
||||||
fdt_setprop_inplace_cell(working_fdt, node, "clock-frequency", clk);
|
fdt_setprop_inplace_cell(working_fdt, node, "clock-frequency", clk);
|
||||||
node = fdt_node_offset_by_compatible(working_fdt, node, "cavium,octeon-3860-uart");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -268,15 +268,10 @@ static void fdt_fixup_pci_liodn_offsets(void *fdt, const char *compat,
|
|||||||
* Count the number of pci nodes.
|
* Count the number of pci nodes.
|
||||||
* It's needed later when the interleaved liodn offsets are generated.
|
* It's needed later when the interleaved liodn offsets are generated.
|
||||||
*/
|
*/
|
||||||
off = fdt_node_offset_by_compatible(fdt, -1, compat);
|
fdt_for_each_node_by_compatible(off, fdt, -1, compat)
|
||||||
while (off != -FDT_ERR_NOTFOUND) {
|
|
||||||
pci_cnt++;
|
pci_cnt++;
|
||||||
off = fdt_node_offset_by_compatible(fdt, off, compat);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (off = fdt_node_offset_by_compatible(fdt, -1, compat);
|
fdt_for_each_node_by_compatible(off, fdt, -1, compat) {
|
||||||
off != -FDT_ERR_NOTFOUND;
|
|
||||||
off = fdt_node_offset_by_compatible(fdt, off, compat)) {
|
|
||||||
base_liodn = fdt_getprop(fdt, off, "fsl,liodn", &rc);
|
base_liodn = fdt_getprop(fdt, off, "fsl,liodn", &rc);
|
||||||
if (!base_liodn) {
|
if (!base_liodn) {
|
||||||
char path[64];
|
char path[64];
|
||||||
|
@ -103,9 +103,7 @@ static int get_lmac_fdt_node(const void *fdt, int search_node, int search_bgx, i
|
|||||||
int parent;
|
int parent;
|
||||||
|
|
||||||
/* Iterate through all bgx ports */
|
/* Iterate through all bgx ports */
|
||||||
node = -1;
|
fdt_for_each_node_by_compatible(node, (void *)fdt, -1, compat) {
|
||||||
while ((node = fdt_node_offset_by_compatible((void *)fdt, node,
|
|
||||||
compat)) >= 0) {
|
|
||||||
/* Get the node and bgx from the physical address */
|
/* Get the node and bgx from the physical address */
|
||||||
parent = fdt_parent_offset(fdt, node);
|
parent = fdt_parent_offset(fdt, node);
|
||||||
reg = fdt_getprop(fdt, parent, "reg", &len);
|
reg = fdt_getprop(fdt, parent, "reg", &len);
|
||||||
@ -146,9 +144,8 @@ static int get_mix_fdt_node(const void *fdt, int search_node, int search_index)
|
|||||||
int node;
|
int node;
|
||||||
|
|
||||||
/* Iterate through all the mix fdt nodes */
|
/* Iterate through all the mix fdt nodes */
|
||||||
node = -1;
|
fdt_for_each_node_by_compatible(node, (void *)fdt, -1,
|
||||||
while ((node = fdt_node_offset_by_compatible((void *)fdt, node,
|
"cavium,octeon-7890-mix") {
|
||||||
"cavium,octeon-7890-mix")) >= 0) {
|
|
||||||
int parent;
|
int parent;
|
||||||
int len;
|
int len;
|
||||||
const char *name;
|
const char *name;
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
|
#include <fdt_support.h>
|
||||||
#include <init.h>
|
#include <init.h>
|
||||||
#include <log.h>
|
#include <log.h>
|
||||||
#include <spl.h>
|
#include <spl.h>
|
||||||
@ -29,13 +30,10 @@ void spl_board_init(void)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
offset = fdt_node_offset_by_compatible(gd->fdt_blob, -1, "nxp,imx8-pd");
|
fdt_for_each_node_by_compatible(offset, gd->fdt_blob, -1,
|
||||||
while (offset != -FDT_ERR_NOTFOUND) {
|
"nxp,imx8-pd")
|
||||||
lists_bind_fdt(gd->dm_root, offset_to_ofnode(offset),
|
lists_bind_fdt(gd->dm_root, offset_to_ofnode(offset),
|
||||||
NULL, NULL, true);
|
NULL, NULL, true);
|
||||||
offset = fdt_node_offset_by_compatible(gd->fdt_blob, offset,
|
|
||||||
"nxp,imx8-pd");
|
|
||||||
}
|
|
||||||
|
|
||||||
uclass_find_first_device(UCLASS_POWER_DOMAIN, &dev);
|
uclass_find_first_device(UCLASS_POWER_DOMAIN, &dev);
|
||||||
|
|
||||||
|
@ -123,8 +123,7 @@ int board_fix_fdt(void *fdt)
|
|||||||
if (IS_SVR_REV(get_svr(), 1, 0))
|
if (IS_SVR_REV(get_svr(), 1, 0))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
off = fdt_node_offset_by_compatible(fdt, -1, "fsl,lx2160a-pcie");
|
fdt_for_each_node_by_compatible(off, fdt, -1, "fsl,lx2160a-pcie") {
|
||||||
while (off != -FDT_ERR_NOTFOUND) {
|
|
||||||
fdt_setprop(fdt, off, "compatible", "fsl,ls-pcie",
|
fdt_setprop(fdt, off, "compatible", "fsl,ls-pcie",
|
||||||
strlen("fsl,ls-pcie") + 1);
|
strlen("fsl,ls-pcie") + 1);
|
||||||
|
|
||||||
@ -166,8 +165,6 @@ int board_fix_fdt(void *fdt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
fdt_setprop(fdt, off, "reg-names", reg_names, names_len);
|
fdt_setprop(fdt, off, "reg-names", reg_names, names_len);
|
||||||
off = fdt_node_offset_by_compatible(fdt, off,
|
|
||||||
"fsl,lx2160a-pcie");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -371,12 +371,9 @@ void do_fixup_by_compat(void *fdt, const char *compat,
|
|||||||
debug(" %.2x", *(u8*)(val+i));
|
debug(" %.2x", *(u8*)(val+i));
|
||||||
debug("\n");
|
debug("\n");
|
||||||
#endif
|
#endif
|
||||||
off = fdt_node_offset_by_compatible(fdt, -1, compat);
|
fdt_for_each_node_by_compatible(off, fdt, -1, compat)
|
||||||
while (off != -FDT_ERR_NOTFOUND) {
|
|
||||||
if (create || (fdt_get_property(fdt, off, prop, NULL) != NULL))
|
if (create || (fdt_get_property(fdt, off, prop, NULL) != NULL))
|
||||||
fdt_setprop(fdt, off, prop, val, len);
|
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,
|
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++) {
|
for (i = 0; i < node_info_size; i++) {
|
||||||
idx = 0;
|
idx = 0;
|
||||||
noff = -1;
|
|
||||||
|
|
||||||
while ((noff = fdt_node_offset_by_compatible(blob, noff,
|
fdt_for_each_node_by_compatible(noff, blob, -1,
|
||||||
node_info[i].compat)) >= 0) {
|
node_info[i].compat) {
|
||||||
const char *prop;
|
const char *prop;
|
||||||
|
|
||||||
prop = fdt_getprop(blob, noff, "status", NULL);
|
prop = fdt_getprop(blob, noff, "status", NULL);
|
||||||
@ -1473,15 +1469,13 @@ out:
|
|||||||
int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
|
int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
|
||||||
phys_addr_t compat_off)
|
phys_addr_t compat_off)
|
||||||
{
|
{
|
||||||
int len, off = fdt_node_offset_by_compatible(blob, -1, compat);
|
int len, off;
|
||||||
while (off != -FDT_ERR_NOTFOUND) {
|
|
||||||
|
fdt_for_each_node_by_compatible(off, blob, -1, compat) {
|
||||||
const fdt32_t *reg = fdt_getprop(blob, off, "reg", &len);
|
const fdt32_t *reg = fdt_getprop(blob, off, "reg", &len);
|
||||||
if (reg) {
|
if (reg && compat_off == fdt_translate_address(blob, off, reg))
|
||||||
if (compat_off == fdt_translate_address(blob, off, reg))
|
|
||||||
return off;
|
return off;
|
||||||
}
|
}
|
||||||
off = fdt_node_offset_by_compatible(blob, off, compat);
|
|
||||||
}
|
|
||||||
|
|
||||||
return -FDT_ERR_NOTFOUND;
|
return -FDT_ERR_NOTFOUND;
|
||||||
}
|
}
|
||||||
|
@ -208,8 +208,7 @@ void fdt_fixup_qportals(void *blob)
|
|||||||
maj, min, ip_cfg) + 1;
|
maj, min, ip_cfg) + 1;
|
||||||
compat_len += sprintf(compat + compat_len, "fsl,qman-portal") + 1;
|
compat_len += sprintf(compat + compat_len, "fsl,qman-portal") + 1;
|
||||||
|
|
||||||
off = fdt_node_offset_by_compatible(blob, -1, "fsl,qman-portal");
|
fdt_for_each_node_by_compatible(off, blob, -1, "fsl,qman-portal") {
|
||||||
while (off != -FDT_ERR_NOTFOUND) {
|
|
||||||
#if defined(CONFIG_PPC) || defined(CONFIG_ARCH_LS1043A) || \
|
#if defined(CONFIG_PPC) || defined(CONFIG_ARCH_LS1043A) || \
|
||||||
defined(CONFIG_ARCH_LS1046A)
|
defined(CONFIG_ARCH_LS1046A)
|
||||||
#ifdef CONFIG_FSL_CORENET
|
#ifdef CONFIG_FSL_CORENET
|
||||||
@ -295,9 +294,6 @@ err:
|
|||||||
fdt_strerror(err));
|
fdt_strerror(err));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
off = fdt_node_offset_by_compatible(blob, off,
|
|
||||||
"fsl,qman-portal");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,8 +115,7 @@ void fdt_fixup_fman_firmware(void *blob)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Find all other Fman nodes and point them to the firmware node. */
|
/* Find all other Fman nodes and point them to the firmware node. */
|
||||||
while ((fmnode = fdt_node_offset_by_compatible(blob, fmnode,
|
fdt_for_each_node_by_compatible(fmnode, blob, fmnode, "fsl,fman") {
|
||||||
"fsl,fman")) > 0) {
|
|
||||||
rc = fdt_setprop_cell(blob, fmnode, "fsl,firmware-phandle",
|
rc = fdt_setprop_cell(blob, fmnode, "fsl,firmware-phandle",
|
||||||
phandle);
|
phandle);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
|
@ -48,8 +48,7 @@ static int lx2_board_fix_fdt(void *fdt)
|
|||||||
const fdt32_t *prop;
|
const fdt32_t *prop;
|
||||||
u32 ob_wins, ib_wins;
|
u32 ob_wins, ib_wins;
|
||||||
|
|
||||||
off = fdt_node_offset_by_compatible(fdt, -1, "fsl,lx2160a-pcie");
|
fdt_for_each_node_by_compatible(off, fdt, -1, "fsl,lx2160a-pcie") {
|
||||||
while (off != -FDT_ERR_NOTFOUND) {
|
|
||||||
fdt_setprop(fdt, off, "compatible", "fsl,ls2088a-pcie",
|
fdt_setprop(fdt, off, "compatible", "fsl,ls2088a-pcie",
|
||||||
strlen("fsl,ls2088a-pcie") + 1);
|
strlen("fsl,ls2088a-pcie") + 1);
|
||||||
|
|
||||||
@ -89,14 +88,10 @@ static int lx2_board_fix_fdt(void *fdt)
|
|||||||
fdt_setprop(fdt, off, "reg-names", reg_names, names_len);
|
fdt_setprop(fdt, off, "reg-names", reg_names, names_len);
|
||||||
fdt_delprop(fdt, off, "apio-wins");
|
fdt_delprop(fdt, off, "apio-wins");
|
||||||
fdt_delprop(fdt, off, "ppio-wins");
|
fdt_delprop(fdt, off, "ppio-wins");
|
||||||
off = fdt_node_offset_by_compatible(fdt, off,
|
|
||||||
"fsl,lx2160a-pcie");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Fixup PCIe EP nodes */
|
/* Fixup PCIe EP nodes */
|
||||||
off = -1;
|
fdt_for_each_node_by_compatible(off, fdt, -1, "fsl,lx2160a-pcie-ep") {
|
||||||
off = fdt_node_offset_by_compatible(fdt, off, "fsl,lx2160a-pcie-ep");
|
|
||||||
while (off != -FDT_ERR_NOTFOUND) {
|
|
||||||
fdt_setprop_string(fdt, off, "compatible",
|
fdt_setprop_string(fdt, off, "compatible",
|
||||||
"fsl,lx2160ar2-pcie-ep");
|
"fsl,lx2160ar2-pcie-ep");
|
||||||
prop = fdt_getprop(fdt, off, "apio-wins", NULL);
|
prop = fdt_getprop(fdt, off, "apio-wins", NULL);
|
||||||
@ -113,9 +108,6 @@ static int lx2_board_fix_fdt(void *fdt)
|
|||||||
fdt_setprop_u32(fdt, off, "num-ib-windows", ib_wins);
|
fdt_setprop_u32(fdt, off, "num-ib-windows", ib_wins);
|
||||||
fdt_setprop_u32(fdt, off, "num-ob-windows", ob_wins);
|
fdt_setprop_u32(fdt, off, "num-ob-windows", ob_wins);
|
||||||
fdt_delprop(fdt, off, "apio-wins");
|
fdt_delprop(fdt, off, "apio-wins");
|
||||||
|
|
||||||
off = fdt_node_offset_by_compatible(fdt, off,
|
|
||||||
"fsl,lx2160a-pcie-ep");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <fdtdec.h>
|
#include <fdt_support.h>
|
||||||
#include <log.h>
|
#include <log.h>
|
||||||
#include <asm/global_data.h>
|
#include <asm/global_data.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
@ -985,12 +985,12 @@ void comphy_dedicated_phys_init(void)
|
|||||||
|
|
||||||
static int find_available_node_by_compatible(int offset, const char *compatible)
|
static int find_available_node_by_compatible(int offset, const char *compatible)
|
||||||
{
|
{
|
||||||
do {
|
fdt_for_each_node_by_compatible(offset, gd->fdt_blob, offset,
|
||||||
offset = fdt_node_offset_by_compatible(gd->fdt_blob, offset,
|
compatible)
|
||||||
compatible);
|
if (fdtdec_get_is_enabled(gd->fdt_blob, offset))
|
||||||
} while (offset > 0 && !fdtdec_get_is_enabled(gd->fdt_blob, offset));
|
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
|
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool comphy_a3700_find_lane(const int nodes[3], int node,
|
static bool comphy_a3700_find_lane(const int nodes[3], int node,
|
||||||
|
@ -7,22 +7,19 @@
|
|||||||
* (C) Copyright 2017 Icenowy Zheng <icenowy@aosc.io>
|
* (C) Copyright 2017 Icenowy Zheng <icenowy@aosc.io>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <fdtdec.h>
|
#include <fdt_support.h>
|
||||||
|
|
||||||
int meson_simplefb_fdt_match(void *blob, const char *pipeline)
|
int meson_simplefb_fdt_match(void *blob, const char *pipeline)
|
||||||
{
|
{
|
||||||
int offset, ret;
|
int offset, ret;
|
||||||
|
|
||||||
/* Find a prefilled simpefb node, matching out pipeline config */
|
/* Find a prefilled simpefb node, matching out pipeline config */
|
||||||
offset = fdt_node_offset_by_compatible(blob, -1,
|
fdt_for_each_node_by_compatible(offset, blob, -1,
|
||||||
"amlogic,simple-framebuffer");
|
"amlogic,simple-framebuffer") {
|
||||||
while (offset >= 0) {
|
|
||||||
ret = fdt_stringlist_search(blob, offset, "amlogic,pipeline",
|
ret = fdt_stringlist_search(blob, offset, "amlogic,pipeline",
|
||||||
pipeline);
|
pipeline);
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
break;
|
break;
|
||||||
offset = fdt_node_offset_by_compatible(blob, offset,
|
|
||||||
"amlogic,simple-framebuffer");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* (C) Copyright 2017 Icenowy Zheng <icenowy@aosc.io>
|
* (C) Copyright 2017 Icenowy Zheng <icenowy@aosc.io>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <fdtdec.h>
|
#include <fdt_support.h>
|
||||||
|
|
||||||
int sunxi_simplefb_fdt_match(void *blob, const char *pipeline)
|
int sunxi_simplefb_fdt_match(void *blob, const char *pipeline)
|
||||||
{
|
{
|
||||||
@ -16,13 +16,12 @@ int sunxi_simplefb_fdt_match(void *blob, const char *pipeline)
|
|||||||
/* Find a prefilled simpefb node, matching out pipeline config */
|
/* Find a prefilled simpefb node, matching out pipeline config */
|
||||||
offset = fdt_node_offset_by_compatible(blob, -1,
|
offset = fdt_node_offset_by_compatible(blob, -1,
|
||||||
"allwinner,simple-framebuffer");
|
"allwinner,simple-framebuffer");
|
||||||
while (offset >= 0) {
|
fdt_for_each_node_by_compatible(offset, blob, -1,
|
||||||
|
"allwinner,simple-framebuffer") {
|
||||||
ret = fdt_stringlist_search(blob, offset, "allwinner,pipeline",
|
ret = fdt_stringlist_search(blob, offset, "allwinner,pipeline",
|
||||||
pipeline);
|
pipeline);
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
break;
|
break;
|
||||||
offset = fdt_node_offset_by_compatible(blob, offset,
|
|
||||||
"allwinner,simple-framebuffer");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
|
@ -289,6 +289,12 @@ int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
|
|||||||
phys_addr_t compat_off);
|
phys_addr_t compat_off);
|
||||||
int fdt_node_offset_by_pathf(void *blob, const char *fmt, ...)
|
int fdt_node_offset_by_pathf(void *blob, const char *fmt, ...)
|
||||||
__attribute__ ((format (printf, 2, 3)));
|
__attribute__ ((format (printf, 2, 3)));
|
||||||
|
|
||||||
|
#define fdt_for_each_node_by_compatible(node, fdt, start, compat) \
|
||||||
|
for (node = fdt_node_offset_by_compatible(fdt, start, compat); \
|
||||||
|
node >= 0; \
|
||||||
|
node = fdt_node_offset_by_compatible(fdt, node, compat))
|
||||||
|
|
||||||
int fdt_set_phandle(void *fdt, int nodeoffset, uint32_t phandle);
|
int fdt_set_phandle(void *fdt, int nodeoffset, uint32_t phandle);
|
||||||
unsigned int fdt_create_phandle(void *fdt, int nodeoffset);
|
unsigned int fdt_create_phandle(void *fdt, int nodeoffset);
|
||||||
unsigned int fdt_create_phandle_by_compatible(void *fdt, const char *compat);
|
unsigned int fdt_create_phandle_by_compatible(void *fdt, const char *compat);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user