Commit 2e29a6d0 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'devicetree-fixes-for-3.18' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux

Pull devicetree fixes from Rob Herring:
 "DeviceTree fixes for 3.18:

   - two fixes for OF selftest code
   - fix for PowerPC address parsing to disable work-around except on
     old PowerMACs
   - fix a crash when earlycon is enabled, but no device is found
   - DT documentation fixes and missing vendor prefixes

  All but the doc updates are also for stable"

* tag 'devicetree-fixes-for-3.18' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux:
  of/selftest: Fix testing when /aliases is missing
  of/selftest: Fix off-by-one error in removal path
  documentation: pinctrl bindings: Fix trivial typo 'abitrary'
  devicetree: bindings: Add vendor prefix for Micron Technology, Inc.
  of: Add vendor prefix for Chips&Media, Inc.
  of/base: Fix PowerPC address parsing hack
  devicetree: vendor-prefixes.txt: fix whitespace
  of: Fix crash if an earlycon driver is not found
  of/irq: Drop obsolete 'interrupts' vs 'interrupts-extended' text
  of: Spelling s/stucture/structure/
  devicetree: bindings: add sandisk to the vendor prefixes
parents 08685897 788ec2fc
...@@ -30,10 +30,6 @@ should only be used when a device has multiple interrupt parents. ...@@ -30,10 +30,6 @@ should only be used when a device has multiple interrupt parents.
Example: Example:
interrupts-extended = <&intc1 5 1>, <&intc2 1 0>; interrupts-extended = <&intc1 5 1>, <&intc2 1 0>;
A device node may contain either "interrupts" or "interrupts-extended", but not
both. If both properties are present, then the operating system should log an
error and use only the data in "interrupts".
2) Interrupt controller nodes 2) Interrupt controller nodes
----------------------------- -----------------------------
......
...@@ -9,7 +9,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the ...@@ -9,7 +9,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
common pinctrl bindings used by client devices, including the meaning of the common pinctrl bindings used by client devices, including the meaning of the
phrase "pin configuration node". phrase "pin configuration node".
TZ1090-PDC's pin configuration nodes act as a container for an abitrary number TZ1090-PDC's pin configuration nodes act as a container for an arbitrary number
of subnodes. Each of these subnodes represents some desired configuration for a of subnodes. Each of these subnodes represents some desired configuration for a
pin, a group, or a list of pins or groups. This configuration can include the pin, a group, or a list of pins or groups. This configuration can include the
mux function to select on those pin(s)/group(s), and various pin configuration mux function to select on those pin(s)/group(s), and various pin configuration
......
...@@ -9,7 +9,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the ...@@ -9,7 +9,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
common pinctrl bindings used by client devices, including the meaning of the common pinctrl bindings used by client devices, including the meaning of the
phrase "pin configuration node". phrase "pin configuration node".
TZ1090's pin configuration nodes act as a container for an abitrary number of TZ1090's pin configuration nodes act as a container for an arbitrary number of
subnodes. Each of these subnodes represents some desired configuration for a subnodes. Each of these subnodes represents some desired configuration for a
pin, a group, or a list of pins or groups. This configuration can include the pin, a group, or a list of pins or groups. This configuration can include the
mux function to select on those pin(s)/group(s), and various pin configuration mux function to select on those pin(s)/group(s), and various pin configuration
......
...@@ -9,7 +9,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the ...@@ -9,7 +9,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
common pinctrl bindings used by client devices, including the meaning of the common pinctrl bindings used by client devices, including the meaning of the
phrase "pin configuration node". phrase "pin configuration node".
Lantiq's pin configuration nodes act as a container for an abitrary number of Lantiq's pin configuration nodes act as a container for an arbitrary number of
subnodes. Each of these subnodes represents some desired configuration for a subnodes. Each of these subnodes represents some desired configuration for a
pin, a group, or a list of pins or groups. This configuration can include the pin, a group, or a list of pins or groups. This configuration can include the
mux function to select on those group(s), and two pin configuration parameters: mux function to select on those group(s), and two pin configuration parameters:
......
...@@ -9,7 +9,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the ...@@ -9,7 +9,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
common pinctrl bindings used by client devices, including the meaning of the common pinctrl bindings used by client devices, including the meaning of the
phrase "pin configuration node". phrase "pin configuration node".
Lantiq's pin configuration nodes act as a container for an abitrary number of Lantiq's pin configuration nodes act as a container for an arbitrary number of
subnodes. Each of these subnodes represents some desired configuration for a subnodes. Each of these subnodes represents some desired configuration for a
pin, a group, or a list of pins or groups. This configuration can include the pin, a group, or a list of pins or groups. This configuration can include the
mux function to select on those group(s), and two pin configuration parameters: mux function to select on those group(s), and two pin configuration parameters:
......
...@@ -9,7 +9,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the ...@@ -9,7 +9,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
common pinctrl bindings used by client devices, including the meaning of the common pinctrl bindings used by client devices, including the meaning of the
phrase "pin configuration node". phrase "pin configuration node".
Tegra's pin configuration nodes act as a container for an abitrary number of Tegra's pin configuration nodes act as a container for an arbitrary number of
subnodes. Each of these subnodes represents some desired configuration for a subnodes. Each of these subnodes represents some desired configuration for a
pin, a group, or a list of pins or groups. This configuration can include the pin, a group, or a list of pins or groups. This configuration can include the
mux function to select on those pin(s)/group(s), and various pin configuration mux function to select on those pin(s)/group(s), and various pin configuration
......
...@@ -13,7 +13,7 @@ Optional properties: ...@@ -13,7 +13,7 @@ Optional properties:
Please refer to pinctrl-bindings.txt in this directory for details of the common Please refer to pinctrl-bindings.txt in this directory for details of the common
pinctrl bindings used by client devices. pinctrl bindings used by client devices.
SiRFprimaII's pinmux nodes act as a container for an abitrary number of subnodes. SiRFprimaII's pinmux nodes act as a container for an arbitrary number of subnodes.
Each of these subnodes represents some desired configuration for a group of pins. Each of these subnodes represents some desired configuration for a group of pins.
Required subnode-properties: Required subnode-properties:
......
...@@ -32,7 +32,7 @@ Required properties: ...@@ -32,7 +32,7 @@ Required properties:
Please refer to pinctrl-bindings.txt in this directory for details of the common Please refer to pinctrl-bindings.txt in this directory for details of the common
pinctrl bindings used by client devices. pinctrl bindings used by client devices.
SPEAr's pinmux nodes act as a container for an abitrary number of subnodes. Each SPEAr's pinmux nodes act as a container for an arbitrary number of subnodes. Each
of these subnodes represents muxing for a pin, a group, or a list of pins or of these subnodes represents muxing for a pin, a group, or a list of pins or
groups. groups.
......
...@@ -18,7 +18,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the ...@@ -18,7 +18,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
common pinctrl bindings used by client devices, including the meaning of the common pinctrl bindings used by client devices, including the meaning of the
phrase "pin configuration node". phrase "pin configuration node".
Qualcomm's pin configuration nodes act as a container for an abitrary number of Qualcomm's pin configuration nodes act as a container for an arbitrary number of
subnodes. Each of these subnodes represents some desired configuration for a subnodes. Each of these subnodes represents some desired configuration for a
pin, a group, or a list of pins or groups. This configuration can include the pin, a group, or a list of pins or groups. This configuration can include the
mux function to select on those pin(s)/group(s), and various pin configuration mux function to select on those pin(s)/group(s), and various pin configuration
......
...@@ -47,7 +47,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the ...@@ -47,7 +47,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
common pinctrl bindings used by client devices, including the meaning of the common pinctrl bindings used by client devices, including the meaning of the
phrase "pin configuration node". phrase "pin configuration node".
The pin configuration nodes act as a container for an abitrary number of The pin configuration nodes act as a container for an arbitrary number of
subnodes. Each of these subnodes represents some desired configuration for a subnodes. Each of these subnodes represents some desired configuration for a
pin, a group, or a list of pins or groups. This configuration can include the pin, a group, or a list of pins or groups. This configuration can include the
mux function to select on those pin(s)/group(s), and various pin configuration mux function to select on those pin(s)/group(s), and various pin configuration
......
...@@ -18,7 +18,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the ...@@ -18,7 +18,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
common pinctrl bindings used by client devices, including the meaning of the common pinctrl bindings used by client devices, including the meaning of the
phrase "pin configuration node". phrase "pin configuration node".
Qualcomm's pin configuration nodes act as a container for an abitrary number of Qualcomm's pin configuration nodes act as a container for an arbitrary number of
subnodes. Each of these subnodes represents some desired configuration for a subnodes. Each of these subnodes represents some desired configuration for a
pin, a group, or a list of pins or groups. This configuration can include the pin, a group, or a list of pins or groups. This configuration can include the
mux function to select on those pin(s)/group(s), and various pin configuration mux function to select on those pin(s)/group(s), and various pin configuration
......
...@@ -47,7 +47,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the ...@@ -47,7 +47,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
common pinctrl bindings used by client devices, including the meaning of the common pinctrl bindings used by client devices, including the meaning of the
phrase "pin configuration node". phrase "pin configuration node".
The pin configuration nodes act as a container for an abitrary number of The pin configuration nodes act as a container for an arbitrary number of
subnodes. Each of these subnodes represents some desired configuration for a subnodes. Each of these subnodes represents some desired configuration for a
pin, a group, or a list of pins or groups. This configuration can include the pin, a group, or a list of pins or groups. This configuration can include the
mux function to select on those pin(s)/group(s), and various pin configuration mux function to select on those pin(s)/group(s), and various pin configuration
......
...@@ -18,7 +18,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the ...@@ -18,7 +18,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
common pinctrl bindings used by client devices, including the meaning of the common pinctrl bindings used by client devices, including the meaning of the
phrase "pin configuration node". phrase "pin configuration node".
Qualcomm's pin configuration nodes act as a container for an abitrary number of Qualcomm's pin configuration nodes act as a container for an arbitrary number of
subnodes. Each of these subnodes represents some desired configuration for a subnodes. Each of these subnodes represents some desired configuration for a
pin, a group, or a list of pins or groups. This configuration can include the pin, a group, or a list of pins or groups. This configuration can include the
mux function to select on those pin(s)/group(s), and various pin configuration mux function to select on those pin(s)/group(s), and various pin configuration
......
...@@ -34,6 +34,7 @@ chipidea Chipidea, Inc ...@@ -34,6 +34,7 @@ chipidea Chipidea, Inc
chrp Common Hardware Reference Platform chrp Common Hardware Reference Platform
chunghwa Chunghwa Picture Tubes Ltd. chunghwa Chunghwa Picture Tubes Ltd.
cirrus Cirrus Logic, Inc. cirrus Cirrus Logic, Inc.
cnm Chips&Media, Inc.
cortina Cortina Systems, Inc. cortina Cortina Systems, Inc.
crystalfontz Crystalfontz America, Inc. crystalfontz Crystalfontz America, Inc.
dallas Maxim Integrated Products (formerly Dallas Semiconductor) dallas Maxim Integrated Products (formerly Dallas Semiconductor)
...@@ -92,6 +93,7 @@ maxim Maxim Integrated Products ...@@ -92,6 +93,7 @@ maxim Maxim Integrated Products
mediatek MediaTek Inc. mediatek MediaTek Inc.
micrel Micrel Inc. micrel Micrel Inc.
microchip Microchip Technology Inc. microchip Microchip Technology Inc.
micron Micron Technology Inc.
mitsubishi Mitsubishi Electric Corporation mitsubishi Mitsubishi Electric Corporation
mosaixtech Mosaix Technologies, Inc. mosaixtech Mosaix Technologies, Inc.
moxa Moxa moxa Moxa
...@@ -127,6 +129,7 @@ renesas Renesas Electronics Corporation ...@@ -127,6 +129,7 @@ renesas Renesas Electronics Corporation
ricoh Ricoh Co. Ltd. ricoh Ricoh Co. Ltd.
rockchip Fuzhou Rockchip Electronics Co., Ltd rockchip Fuzhou Rockchip Electronics Co., Ltd
samsung Samsung Semiconductor samsung Samsung Semiconductor
sandisk Sandisk Corporation
sbs Smart Battery System sbs Smart Battery System
schindler Schindler schindler Schindler
seagate Seagate Technology PLC seagate Seagate Technology PLC
......
...@@ -450,6 +450,21 @@ static struct of_bus *of_match_bus(struct device_node *np) ...@@ -450,6 +450,21 @@ static struct of_bus *of_match_bus(struct device_node *np)
return NULL; return NULL;
} }
static int of_empty_ranges_quirk(void)
{
if (IS_ENABLED(CONFIG_PPC)) {
/* To save cycles, we cache the result */
static int quirk_state = -1;
if (quirk_state < 0)
quirk_state =
of_machine_is_compatible("Power Macintosh") ||
of_machine_is_compatible("MacRISC");
return quirk_state;
}
return false;
}
static int of_translate_one(struct device_node *parent, struct of_bus *bus, static int of_translate_one(struct device_node *parent, struct of_bus *bus,
struct of_bus *pbus, __be32 *addr, struct of_bus *pbus, __be32 *addr,
int na, int ns, int pna, const char *rprop) int na, int ns, int pna, const char *rprop)
...@@ -475,12 +490,10 @@ static int of_translate_one(struct device_node *parent, struct of_bus *bus, ...@@ -475,12 +490,10 @@ static int of_translate_one(struct device_node *parent, struct of_bus *bus,
* This code is only enabled on powerpc. --gcl * This code is only enabled on powerpc. --gcl
*/ */
ranges = of_get_property(parent, rprop, &rlen); ranges = of_get_property(parent, rprop, &rlen);
#if !defined(CONFIG_PPC) if (ranges == NULL && !of_empty_ranges_quirk()) {
if (ranges == NULL) {
pr_err("OF: no ranges; cannot translate\n"); pr_err("OF: no ranges; cannot translate\n");
return 1; return 1;
} }
#endif /* !defined(CONFIG_PPC) */
if (ranges == NULL || rlen == 0) { if (ranges == NULL || rlen == 0) {
offset = of_read_number(addr, na); offset = of_read_number(addr, na);
memset(addr, 0, pna * 4); memset(addr, 0, pna * 4);
......
...@@ -247,7 +247,7 @@ void of_node_release(struct kobject *kobj) ...@@ -247,7 +247,7 @@ void of_node_release(struct kobject *kobj)
* @allocflags: Allocation flags (typically pass GFP_KERNEL) * @allocflags: Allocation flags (typically pass GFP_KERNEL)
* *
* Copy a property by dynamically allocating the memory of both the * Copy a property by dynamically allocating the memory of both the
* property stucture and the property name & contents. The property's * property structure and the property name & contents. The property's
* flags have the OF_DYNAMIC bit set so that we can differentiate between * flags have the OF_DYNAMIC bit set so that we can differentiate between
* dynamically allocated properties and not. * dynamically allocated properties and not.
* Returns the newly allocated property or NULL on out of memory error. * Returns the newly allocated property or NULL on out of memory error.
......
...@@ -773,7 +773,7 @@ int __init early_init_dt_scan_chosen_serial(void) ...@@ -773,7 +773,7 @@ int __init early_init_dt_scan_chosen_serial(void)
if (offset < 0) if (offset < 0)
return -ENODEV; return -ENODEV;
while (match->compatible) { while (match->compatible[0]) {
unsigned long addr; unsigned long addr;
if (fdt_node_check_compatible(fdt, offset, match->compatible)) { if (fdt_node_check_compatible(fdt, offset, match->compatible)) {
match++; match++;
......
...@@ -896,10 +896,14 @@ static void selftest_data_remove(void) ...@@ -896,10 +896,14 @@ static void selftest_data_remove(void)
return; return;
} }
while (last_node_index >= 0) { while (last_node_index-- > 0) {
if (nodes[last_node_index]) { if (nodes[last_node_index]) {
np = of_find_node_by_path(nodes[last_node_index]->full_name); np = of_find_node_by_path(nodes[last_node_index]->full_name);
if (strcmp(np->full_name, "/aliases") != 0) { if (np == nodes[last_node_index]) {
if (of_aliases == np) {
of_node_put(of_aliases);
of_aliases = NULL;
}
detach_node_and_children(np); detach_node_and_children(np);
} else { } else {
for_each_property_of_node(np, prop) { for_each_property_of_node(np, prop) {
...@@ -908,7 +912,6 @@ static void selftest_data_remove(void) ...@@ -908,7 +912,6 @@ static void selftest_data_remove(void)
} }
} }
} }
last_node_index--;
} }
} }
...@@ -921,6 +924,8 @@ static int __init of_selftest(void) ...@@ -921,6 +924,8 @@ static int __init of_selftest(void)
res = selftest_data_add(); res = selftest_data_add();
if (res) if (res)
return res; return res;
if (!of_aliases)
of_aliases = of_find_node_by_path("/aliases");
np = of_find_node_by_path("/testcase-data/phandle-tests/consumer-a"); np = of_find_node_by_path("/testcase-data/phandle-tests/consumer-a");
if (!np) { if (!np) {
......
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