Merge tag 'devicetree-for-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux
Pull Devicetree updates from Rob Herring: - DT binding schema examples are now validated against the schemas. Various examples are fixed due to that. - Sync dtc with upstream version v1.5.0-30-g702c1b6c0e73 - Initial schemas for networking bindings. This includes ethernet, phy and mdio common bindings with several Allwinner and stmmac converted to the schema. - Conversion of more Arm top-level SoC/board bindings to DT schema - Conversion of PSCI binding to DT schema - Rework Arm CPU schema to coexist with other CPU schemas - Add a bunch of missing vendor prefixes and new ones for SoChip, Sipeed, Kontron, B&R Industrial Automation GmbH, and Espressif - Add Mediatek UART RX wakeup support to binding - Add reset to ST UART binding - Remove some Linuxisms from the endianness common-properties.txt binding - Make the flattened DT read-only after init - Ignore disabled reserved memory nodes - Clean-up some dead code in FDT functions * tag 'devicetree-for-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux: (56 commits) dt-bindings: vendor-prefixes: add Sipeed dt-bindings: vendor-prefixes: add SoChip dt-bindings: 83xx-512x-pci: Drop cell-index property dt-bindings: serial: add documentation for Rx in-band wakeup support dt-bindings: arm: Convert RDA Micro board/soc bindings to json-schema of: unittest: simplify getting the adapter of a client of/fdt: pass early_init_dt_reserve_memory_arch() with bool type nomap of/platform: Drop superfluous cast in of_device_make_bus_id() dt-bindings: usb: ehci: Fix example warnings dt-bindings: net: Use phy-mode instead of phy-connection-type dt-bindings: simple-framebuffer: Add requirement for pipelines dt-bindings: display: Fix simple-framebuffer example dt-bindings: net: mdio: Add child nodes dt-bindings: net: mdio: Add address and size cells dt-bindings: net: mdio: Add a nodename pattern dt-bindings: mtd: sunxi-nand: Drop 'maxItems' from child 'reg' property dt-bindings: arm: Limit cpus schema to only check Arm 'cpu' nodes dt-bindings: backlight: lm3630a: correct schema validation dt-bindings: net: dwmac: Deprecate the PHY reset properties dt-bindings: net: sun8i-emac: Convert the binding to a schemas ...
This commit is contained in:
141
drivers/of/fdt.c
141
drivers/of/fdt.c
@@ -38,7 +38,7 @@
|
||||
* memory entries in the /memory node. This function may be called
|
||||
* any time after initial_boot_param is set.
|
||||
*/
|
||||
void of_fdt_limit_memory(int limit)
|
||||
void __init of_fdt_limit_memory(int limit)
|
||||
{
|
||||
int memory;
|
||||
int len;
|
||||
@@ -78,57 +78,6 @@ void of_fdt_limit_memory(int limit)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* of_fdt_is_compatible - Return true if given node from the given blob has
|
||||
* compat in its compatible list
|
||||
* @blob: A device tree blob
|
||||
* @node: node to test
|
||||
* @compat: compatible string to compare with compatible list.
|
||||
*
|
||||
* On match, returns a non-zero value with smaller values returned for more
|
||||
* specific compatible values.
|
||||
*/
|
||||
static int of_fdt_is_compatible(const void *blob,
|
||||
unsigned long node, const char *compat)
|
||||
{
|
||||
const char *cp;
|
||||
int cplen;
|
||||
unsigned long l, score = 0;
|
||||
|
||||
cp = fdt_getprop(blob, node, "compatible", &cplen);
|
||||
if (cp == NULL)
|
||||
return 0;
|
||||
while (cplen > 0) {
|
||||
score++;
|
||||
if (of_compat_cmp(cp, compat, strlen(compat)) == 0)
|
||||
return score;
|
||||
l = strlen(cp) + 1;
|
||||
cp += l;
|
||||
cplen -= l;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* of_fdt_is_big_endian - Return true if given node needs BE MMIO accesses
|
||||
* @blob: A device tree blob
|
||||
* @node: node to test
|
||||
*
|
||||
* Returns true if the node has a "big-endian" property, or if the kernel
|
||||
* was compiled for BE *and* the node has a "native-endian" property.
|
||||
* Returns false otherwise.
|
||||
*/
|
||||
bool of_fdt_is_big_endian(const void *blob, unsigned long node)
|
||||
{
|
||||
if (fdt_getprop(blob, node, "big-endian", NULL))
|
||||
return true;
|
||||
if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN) &&
|
||||
fdt_getprop(blob, node, "native-endian", NULL))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool of_fdt_device_is_available(const void *blob, unsigned long node)
|
||||
{
|
||||
const char *status = fdt_getprop(blob, node, "status", NULL);
|
||||
@@ -142,27 +91,6 @@ static bool of_fdt_device_is_available(const void *blob, unsigned long node)
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* of_fdt_match - Return true if node matches a list of compatible values
|
||||
*/
|
||||
int of_fdt_match(const void *blob, unsigned long node,
|
||||
const char *const *compat)
|
||||
{
|
||||
unsigned int tmp, score = 0;
|
||||
|
||||
if (!compat)
|
||||
return 0;
|
||||
|
||||
while (*compat) {
|
||||
tmp = of_fdt_is_compatible(blob, node, *compat);
|
||||
if (tmp && (score == 0 || (tmp < score)))
|
||||
score = tmp;
|
||||
compat++;
|
||||
}
|
||||
|
||||
return score;
|
||||
}
|
||||
|
||||
static void *unflatten_dt_alloc(void **mem, unsigned long size,
|
||||
unsigned long align)
|
||||
{
|
||||
@@ -535,7 +463,7 @@ EXPORT_SYMBOL_GPL(of_fdt_unflatten_tree);
|
||||
int __initdata dt_root_addr_cells;
|
||||
int __initdata dt_root_size_cells;
|
||||
|
||||
void *initial_boot_params;
|
||||
void *initial_boot_params __ro_after_init;
|
||||
|
||||
#ifdef CONFIG_OF_EARLY_FLATTREE
|
||||
|
||||
@@ -551,7 +479,8 @@ static int __init __reserved_mem_reserve_reg(unsigned long node,
|
||||
phys_addr_t base, size;
|
||||
int len;
|
||||
const __be32 *prop;
|
||||
int nomap, first = 1;
|
||||
int first = 1;
|
||||
bool nomap;
|
||||
|
||||
prop = of_get_flat_dt_prop(node, "reg", &len);
|
||||
if (!prop)
|
||||
@@ -666,7 +595,7 @@ void __init early_init_fdt_scan_reserved_mem(void)
|
||||
fdt_get_mem_rsv(initial_boot_params, n, &base, &size);
|
||||
if (!size)
|
||||
break;
|
||||
early_init_dt_reserve_memory_arch(base, size, 0);
|
||||
early_init_dt_reserve_memory_arch(base, size, false);
|
||||
}
|
||||
|
||||
of_scan_flat_dt(__fdt_scan_reserved_mem, NULL);
|
||||
@@ -684,7 +613,7 @@ void __init early_init_fdt_reserve_self(void)
|
||||
/* Reserve the dtb region */
|
||||
early_init_dt_reserve_memory_arch(__pa(initial_boot_params),
|
||||
fdt_totalsize(initial_boot_params),
|
||||
0);
|
||||
false);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -758,7 +687,7 @@ int __init of_scan_flat_dt_subnodes(unsigned long parent,
|
||||
* @return offset of the subnode, or -FDT_ERR_NOTFOUND if there is none
|
||||
*/
|
||||
|
||||
int of_get_flat_dt_subnode_by_name(unsigned long node, const char *uname)
|
||||
int __init of_get_flat_dt_subnode_by_name(unsigned long node, const char *uname)
|
||||
{
|
||||
return fdt_subnode_offset(initial_boot_params, node, uname);
|
||||
}
|
||||
@@ -771,14 +700,6 @@ unsigned long __init of_get_flat_dt_root(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* of_get_flat_dt_size - Return the total size of the FDT
|
||||
*/
|
||||
int __init of_get_flat_dt_size(void)
|
||||
{
|
||||
return fdt_totalsize(initial_boot_params);
|
||||
}
|
||||
|
||||
/**
|
||||
* of_get_flat_dt_prop - Given a node in the flat blob, return the property ptr
|
||||
*
|
||||
@@ -791,6 +712,38 @@ const void *__init of_get_flat_dt_prop(unsigned long node, const char *name,
|
||||
return fdt_getprop(initial_boot_params, node, name, size);
|
||||
}
|
||||
|
||||
/**
|
||||
* of_fdt_is_compatible - Return true if given node from the given blob has
|
||||
* compat in its compatible list
|
||||
* @blob: A device tree blob
|
||||
* @node: node to test
|
||||
* @compat: compatible string to compare with compatible list.
|
||||
*
|
||||
* On match, returns a non-zero value with smaller values returned for more
|
||||
* specific compatible values.
|
||||
*/
|
||||
static int of_fdt_is_compatible(const void *blob,
|
||||
unsigned long node, const char *compat)
|
||||
{
|
||||
const char *cp;
|
||||
int cplen;
|
||||
unsigned long l, score = 0;
|
||||
|
||||
cp = fdt_getprop(blob, node, "compatible", &cplen);
|
||||
if (cp == NULL)
|
||||
return 0;
|
||||
while (cplen > 0) {
|
||||
score++;
|
||||
if (of_compat_cmp(cp, compat, strlen(compat)) == 0)
|
||||
return score;
|
||||
l = strlen(cp) + 1;
|
||||
cp += l;
|
||||
cplen -= l;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* of_flat_dt_is_compatible - Return true if given node has compat in compatible list
|
||||
* @node: node to test
|
||||
@@ -804,9 +757,21 @@ int __init of_flat_dt_is_compatible(unsigned long node, const char *compat)
|
||||
/**
|
||||
* of_flat_dt_match - Return true if node matches a list of compatible values
|
||||
*/
|
||||
int __init of_flat_dt_match(unsigned long node, const char *const *compat)
|
||||
static int __init of_flat_dt_match(unsigned long node, const char *const *compat)
|
||||
{
|
||||
return of_fdt_match(initial_boot_params, node, compat);
|
||||
unsigned int tmp, score = 0;
|
||||
|
||||
if (!compat)
|
||||
return 0;
|
||||
|
||||
while (*compat) {
|
||||
tmp = of_fdt_is_compatible(initial_boot_params, node, *compat);
|
||||
if (tmp && (score == 0 || (tmp < score)))
|
||||
score = tmp;
|
||||
compat++;
|
||||
}
|
||||
|
||||
return score;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -324,6 +324,9 @@ int of_reserved_mem_device_init_by_idx(struct device *dev,
|
||||
if (!target)
|
||||
return -ENODEV;
|
||||
|
||||
if (!of_device_is_available(target))
|
||||
return 0;
|
||||
|
||||
rmem = __find_rmem(target);
|
||||
of_node_put(target);
|
||||
|
||||
|
@@ -92,8 +92,7 @@ static void of_device_make_bus_id(struct device *dev)
|
||||
reg = of_get_property(node, "reg", NULL);
|
||||
if (reg && (addr = of_translate_address(node, reg)) != OF_BAD_ADDR) {
|
||||
dev_set_name(dev, dev_name(dev) ? "%llx.%pOFn:%s" : "%llx.%pOFn",
|
||||
(unsigned long long)addr, node,
|
||||
dev_name(dev));
|
||||
addr, node, dev_name(dev));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -1946,7 +1946,7 @@ static int unittest_i2c_mux_probe(struct i2c_client *client,
|
||||
{
|
||||
int i, nchans;
|
||||
struct device *dev = &client->dev;
|
||||
struct i2c_adapter *adap = to_i2c_adapter(dev->parent);
|
||||
struct i2c_adapter *adap = client->adapter;
|
||||
struct device_node *np = client->dev.of_node, *child;
|
||||
struct i2c_mux_core *muxc;
|
||||
u32 reg, max_reg;
|
||||
|
Reference in New Issue
Block a user