mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
Devicetree changes for v4.1
devicetree changes queued up for v4.1. Here are the highlights: - Lots of unittest cleanup from Frank Rowand - Bugfixes and updates to the of_graph code - Tighten up of_get_mac_address() code - Documentation updates -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJVMYiQAAoJEMWQL496c2LNyrcP/2acOKeyHk7zBVWxaYe6nO52 iwpDb+UDEdW+1Cx5e+OpF1gqoY7lJ2Q+Uvm65+z00a46Fnl0cWuSYFIV7e0wjE5/ 3EAB4cQgiCzToDnbtCu4U6XlpNlQz/q85tV9X/EpYApHNb+BKN6RMzyIDm48lzJY L6SG4fxFJVpeDxweZFGaWE9/Ildr4vOS+4GZpE0Az3iX2WDrQPioKjuOw8TeUHRO xwvfv1TpyQFa2qHZLI4AmZSN8VJBw82OuAyZHAGsE4bekfafeqVFt0ZtYYoiAbIM rw+dUCnWARc7gm8z2PaYnZGs8O++Flb03clDeFrdrvfZIewXWEkZ1TxrKIb9bLyP A8tlSnbnCdXYSzyaFYH2TgUtc7gQosssfImuJjUq1qQkeEitLP6VzEsekN1h6sx7 axFiBdiCXPvn8ti+AlK9tYfSM0ZhAzvfpuLM0hpTAk3De3NfbJQiyp6eyXAInLne cs9RGPXNPuKX0tISZ29vA8tmOSrDInfeEEW/Lqu4l+HedcLssWjReY0xVsZS3pbi xGiD5/Ztdha9keTIQdW+7R0SE1YsZTpwZbQt0HeHcE+pzFPF/3TLIIIYhYRVSPsm D+g5W+bVxht8NC380UEC8vpAyP1CYSnq/aVrDfJiXZVOS7b/dyZDk6Y6LSBOm9Em 9qLaPASncxVinaNcGlyj =u6Zy -----END PGP SIGNATURE----- Merge tag 'devicetree-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/glikely/linux Pull devicetree changes from Grant Likely: "Here are the devicetree changes queued up for v4.1. Nothing really exciting here. Rob has another few commits for big-endian attached UARTs, but those will be sent in a separate merge request since they haven't been as thoroughly tested as this batch. Here are the highlights: - lots of unittest cleanup from Frank Rowand - bugfixes and updates to the of_graph code - tighten up of_get_mac_address() code - documentation updates" * tag 'devicetree-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/glikely/linux: of/unittest: Fix of_platform_depopulate test case of/unittest: early return from test skips tests of/unittest: breadcrumbs to reduce pain of future maintainers of/unittest: reduce checkpatch noise - line after declarations of/unittest: typo in error string of/unittest: add const where needed of_net: factor out repetitive code from of_get_mac_address() drivers/of: Add empty ranges quirk for PA-Semi of: Allow selection of OF_DYNAMIC and OF_OVERLAY if OF_UNITTEST of: Empty node & property flag accessors when !OF of: Explicitly include linux/types.h in of_graph.h dt-bindings: brcm: rationalize Broadcom documentation naming of/unittest: replace 'selftest' with 'unittest' Documentation: rename of_selftest.txt to of_unittest.txt Documentation: update the of_selftest.txt dt: OF_UNITTEST make dependency broken MAINTAINERS: Pantelis Antoniou device tree overlay maintainer of: Add of_graph_get_port_by_id function of: Add for_each_endpoint_of_node helper macro of: Decrement refcount of previous endpoint in of_graph_get_next_endpoint
This commit is contained in:
commit
7505256626
48 changed files with 612 additions and 518 deletions
|
|
@ -34,7 +34,11 @@ config OF_PROMTREE
|
|||
# Hardly any platforms need this. It is safe to select, but only do so if you
|
||||
# need it.
|
||||
config OF_DYNAMIC
|
||||
bool
|
||||
bool "Support for dynamic device trees" if OF_UNITTEST
|
||||
help
|
||||
On some platforms, the device tree can be manipulated at runtime.
|
||||
While this option is selected automatically on such platforms, you
|
||||
can enable it manually to improve device tree unit test coverage.
|
||||
|
||||
config OF_ADDRESS
|
||||
def_bool y
|
||||
|
|
@ -87,5 +91,10 @@ config OF_OVERLAY
|
|||
bool "Device Tree overlays"
|
||||
select OF_DYNAMIC
|
||||
select OF_RESOLVE
|
||||
help
|
||||
Overlays are a method to dynamically modify part of the kernel's
|
||||
device tree with dynamically loaded data.
|
||||
While this option is selected automatically when needed, you can
|
||||
enable it manually to improve device tree unit test coverage.
|
||||
|
||||
endmenu # OF
|
||||
|
|
|
|||
|
|
@ -6,8 +6,7 @@ obj-$(CONFIG_OF_PROMTREE) += pdt.o
|
|||
obj-$(CONFIG_OF_ADDRESS) += address.o
|
||||
obj-$(CONFIG_OF_IRQ) += irq.o
|
||||
obj-$(CONFIG_OF_NET) += of_net.o
|
||||
obj-$(CONFIG_OF_UNITTEST) += of_unittest.o
|
||||
of_unittest-objs := unittest.o unittest-data/testcases.dtb.o
|
||||
obj-$(CONFIG_OF_UNITTEST) += unittest.o
|
||||
obj-$(CONFIG_OF_MDIO) += of_mdio.o
|
||||
obj-$(CONFIG_OF_PCI) += of_pci.o
|
||||
obj-$(CONFIG_OF_PCI_IRQ) += of_pci_irq.o
|
||||
|
|
@ -16,5 +15,7 @@ obj-$(CONFIG_OF_RESERVED_MEM) += of_reserved_mem.o
|
|||
obj-$(CONFIG_OF_RESOLVE) += resolver.o
|
||||
obj-$(CONFIG_OF_OVERLAY) += overlay.o
|
||||
|
||||
obj-$(CONFIG_OF_UNITTEST) += unittest-data/
|
||||
|
||||
CFLAGS_fdt.o = -I$(src)/../../scripts/dtc/libfdt
|
||||
CFLAGS_fdt_address.o = -I$(src)/../../scripts/dtc/libfdt
|
||||
|
|
|
|||
|
|
@ -2108,14 +2108,45 @@ int of_graph_parse_endpoint(const struct device_node *node,
|
|||
}
|
||||
EXPORT_SYMBOL(of_graph_parse_endpoint);
|
||||
|
||||
/**
|
||||
* of_graph_get_port_by_id() - get the port matching a given id
|
||||
* @parent: pointer to the parent device node
|
||||
* @id: id of the port
|
||||
*
|
||||
* Return: A 'port' node pointer with refcount incremented. The caller
|
||||
* has to use of_node_put() on it when done.
|
||||
*/
|
||||
struct device_node *of_graph_get_port_by_id(struct device_node *parent, u32 id)
|
||||
{
|
||||
struct device_node *node, *port;
|
||||
|
||||
node = of_get_child_by_name(parent, "ports");
|
||||
if (node)
|
||||
parent = node;
|
||||
|
||||
for_each_child_of_node(parent, port) {
|
||||
u32 port_id = 0;
|
||||
|
||||
if (of_node_cmp(port->name, "port") != 0)
|
||||
continue;
|
||||
of_property_read_u32(port, "reg", &port_id);
|
||||
if (id == port_id)
|
||||
break;
|
||||
}
|
||||
|
||||
of_node_put(node);
|
||||
|
||||
return port;
|
||||
}
|
||||
EXPORT_SYMBOL(of_graph_get_port_by_id);
|
||||
|
||||
/**
|
||||
* of_graph_get_next_endpoint() - get next endpoint node
|
||||
* @parent: pointer to the parent device node
|
||||
* @prev: previous endpoint node, or NULL to get first
|
||||
*
|
||||
* Return: An 'endpoint' node pointer with refcount incremented. Refcount
|
||||
* of the passed @prev node is not decremented, the caller have to use
|
||||
* of_node_put() on it when done.
|
||||
* of the passed @prev node is decremented.
|
||||
*/
|
||||
struct device_node *of_graph_get_next_endpoint(const struct device_node *parent,
|
||||
struct device_node *prev)
|
||||
|
|
@ -2151,12 +2182,6 @@ struct device_node *of_graph_get_next_endpoint(const struct device_node *parent,
|
|||
if (WARN_ONCE(!port, "%s(): endpoint %s has no parent node\n",
|
||||
__func__, prev->full_name))
|
||||
return NULL;
|
||||
|
||||
/*
|
||||
* Avoid dropping prev node refcount to 0 when getting the next
|
||||
* child below.
|
||||
*/
|
||||
of_node_get(prev);
|
||||
}
|
||||
|
||||
while (1) {
|
||||
|
|
|
|||
|
|
@ -38,6 +38,15 @@ int of_get_phy_mode(struct device_node *np)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(of_get_phy_mode);
|
||||
|
||||
static const void *of_get_mac_addr(struct device_node *np, const char *name)
|
||||
{
|
||||
struct property *pp = of_find_property(np, name, NULL);
|
||||
|
||||
if (pp && pp->length == ETH_ALEN && is_valid_ether_addr(pp->value))
|
||||
return pp->value;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Search the device tree for the best MAC address to use. 'mac-address' is
|
||||
* checked first, because that is supposed to contain to "most recent" MAC
|
||||
|
|
@ -58,20 +67,16 @@ EXPORT_SYMBOL_GPL(of_get_phy_mode);
|
|||
*/
|
||||
const void *of_get_mac_address(struct device_node *np)
|
||||
{
|
||||
struct property *pp;
|
||||
const void *addr;
|
||||
|
||||
pp = of_find_property(np, "mac-address", NULL);
|
||||
if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value))
|
||||
return pp->value;
|
||||
addr = of_get_mac_addr(np, "mac-address");
|
||||
if (addr)
|
||||
return addr;
|
||||
|
||||
pp = of_find_property(np, "local-mac-address", NULL);
|
||||
if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value))
|
||||
return pp->value;
|
||||
addr = of_get_mac_addr(np, "local-mac-address");
|
||||
if (addr)
|
||||
return addr;
|
||||
|
||||
pp = of_find_property(np, "address", NULL);
|
||||
if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value))
|
||||
return pp->value;
|
||||
|
||||
return NULL;
|
||||
return of_get_mac_addr(np, "address");
|
||||
}
|
||||
EXPORT_SYMBOL(of_get_mac_address);
|
||||
|
|
|
|||
2
drivers/of/unittest-data/.gitignore
vendored
Normal file
2
drivers/of/unittest-data/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
testcases.dtb
|
||||
testcases.dtb.S
|
||||
7
drivers/of/unittest-data/Makefile
Normal file
7
drivers/of/unittest-data/Makefile
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
obj-y += testcases.dtb.o
|
||||
|
||||
targets += testcases.dtb testcases.dtb.S
|
||||
|
||||
.SECONDARY: \
|
||||
$(obj)/testcases.dtb.S \
|
||||
$(obj)/testcases.dtb
|
||||
|
|
@ -4,94 +4,94 @@
|
|||
overlay-node {
|
||||
|
||||
/* test bus */
|
||||
selftestbus: test-bus {
|
||||
unittestbus: test-bus {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
selftest100: test-selftest100 {
|
||||
compatible = "selftest";
|
||||
unittest100: test-unittest100 {
|
||||
compatible = "unittest";
|
||||
status = "okay";
|
||||
reg = <100>;
|
||||
};
|
||||
|
||||
selftest101: test-selftest101 {
|
||||
compatible = "selftest";
|
||||
unittest101: test-unittest101 {
|
||||
compatible = "unittest";
|
||||
status = "disabled";
|
||||
reg = <101>;
|
||||
};
|
||||
|
||||
selftest0: test-selftest0 {
|
||||
compatible = "selftest";
|
||||
unittest0: test-unittest0 {
|
||||
compatible = "unittest";
|
||||
status = "disabled";
|
||||
reg = <0>;
|
||||
};
|
||||
|
||||
selftest1: test-selftest1 {
|
||||
compatible = "selftest";
|
||||
unittest1: test-unittest1 {
|
||||
compatible = "unittest";
|
||||
status = "okay";
|
||||
reg = <1>;
|
||||
};
|
||||
|
||||
selftest2: test-selftest2 {
|
||||
compatible = "selftest";
|
||||
unittest2: test-unittest2 {
|
||||
compatible = "unittest";
|
||||
status = "disabled";
|
||||
reg = <2>;
|
||||
};
|
||||
|
||||
selftest3: test-selftest3 {
|
||||
compatible = "selftest";
|
||||
unittest3: test-unittest3 {
|
||||
compatible = "unittest";
|
||||
status = "okay";
|
||||
reg = <3>;
|
||||
};
|
||||
|
||||
selftest5: test-selftest5 {
|
||||
compatible = "selftest";
|
||||
unittest5: test-unittest5 {
|
||||
compatible = "unittest";
|
||||
status = "disabled";
|
||||
reg = <5>;
|
||||
};
|
||||
|
||||
selftest6: test-selftest6 {
|
||||
compatible = "selftest";
|
||||
unittest6: test-unittest6 {
|
||||
compatible = "unittest";
|
||||
status = "disabled";
|
||||
reg = <6>;
|
||||
};
|
||||
|
||||
selftest7: test-selftest7 {
|
||||
compatible = "selftest";
|
||||
unittest7: test-unittest7 {
|
||||
compatible = "unittest";
|
||||
status = "disabled";
|
||||
reg = <7>;
|
||||
};
|
||||
|
||||
selftest8: test-selftest8 {
|
||||
compatible = "selftest";
|
||||
unittest8: test-unittest8 {
|
||||
compatible = "unittest";
|
||||
status = "disabled";
|
||||
reg = <8>;
|
||||
};
|
||||
|
||||
i2c-test-bus {
|
||||
compatible = "selftest-i2c-bus";
|
||||
compatible = "unittest-i2c-bus";
|
||||
status = "okay";
|
||||
reg = <50>;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
test-selftest12 {
|
||||
test-unittest12 {
|
||||
reg = <8>;
|
||||
compatible = "selftest-i2c-dev";
|
||||
compatible = "unittest-i2c-dev";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
test-selftest13 {
|
||||
test-unittest13 {
|
||||
reg = <9>;
|
||||
compatible = "selftest-i2c-dev";
|
||||
compatible = "unittest-i2c-dev";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
test-selftest14 {
|
||||
test-unittest14 {
|
||||
reg = <10>;
|
||||
compatible = "selftest-i2c-mux";
|
||||
compatible = "unittest-i2c-mux";
|
||||
status = "okay";
|
||||
|
||||
#address-cells = <1>;
|
||||
|
|
@ -104,7 +104,7 @@
|
|||
|
||||
test-mux-dev {
|
||||
reg = <32>;
|
||||
compatible = "selftest-i2c-dev";
|
||||
compatible = "unittest-i2c-dev";
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
|
@ -116,7 +116,7 @@
|
|||
/* test enable using absolute target path */
|
||||
overlay0 {
|
||||
fragment@0 {
|
||||
target-path = "/testcase-data/overlay-node/test-bus/test-selftest0";
|
||||
target-path = "/testcase-data/overlay-node/test-bus/test-unittest0";
|
||||
__overlay__ {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
@ -126,7 +126,7 @@
|
|||
/* test disable using absolute target path */
|
||||
overlay1 {
|
||||
fragment@0 {
|
||||
target-path = "/testcase-data/overlay-node/test-bus/test-selftest1";
|
||||
target-path = "/testcase-data/overlay-node/test-bus/test-unittest1";
|
||||
__overlay__ {
|
||||
status = "disabled";
|
||||
};
|
||||
|
|
@ -136,7 +136,7 @@
|
|||
/* test enable using label */
|
||||
overlay2 {
|
||||
fragment@0 {
|
||||
target = <&selftest2>;
|
||||
target = <&unittest2>;
|
||||
__overlay__ {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
@ -146,7 +146,7 @@
|
|||
/* test disable using label */
|
||||
overlay3 {
|
||||
fragment@0 {
|
||||
target = <&selftest3>;
|
||||
target = <&unittest3>;
|
||||
__overlay__ {
|
||||
status = "disabled";
|
||||
};
|
||||
|
|
@ -156,15 +156,15 @@
|
|||
/* test insertion of a full node */
|
||||
overlay4 {
|
||||
fragment@0 {
|
||||
target = <&selftestbus>;
|
||||
target = <&unittestbus>;
|
||||
__overlay__ {
|
||||
|
||||
/* suppress DTC warning */
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
test-selftest4 {
|
||||
compatible = "selftest";
|
||||
test-unittest4 {
|
||||
compatible = "unittest";
|
||||
status = "okay";
|
||||
reg = <4>;
|
||||
};
|
||||
|
|
@ -175,7 +175,7 @@
|
|||
/* test overlay apply revert */
|
||||
overlay5 {
|
||||
fragment@0 {
|
||||
target-path = "/testcase-data/overlay-node/test-bus/test-selftest5";
|
||||
target-path = "/testcase-data/overlay-node/test-bus/test-unittest5";
|
||||
__overlay__ {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
@ -185,7 +185,7 @@
|
|||
/* test overlays application and removal in sequence */
|
||||
overlay6 {
|
||||
fragment@0 {
|
||||
target-path = "/testcase-data/overlay-node/test-bus/test-selftest6";
|
||||
target-path = "/testcase-data/overlay-node/test-bus/test-unittest6";
|
||||
__overlay__ {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
@ -193,7 +193,7 @@
|
|||
};
|
||||
overlay7 {
|
||||
fragment@0 {
|
||||
target-path = "/testcase-data/overlay-node/test-bus/test-selftest7";
|
||||
target-path = "/testcase-data/overlay-node/test-bus/test-unittest7";
|
||||
__overlay__ {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
@ -203,7 +203,7 @@
|
|||
/* test overlays application and removal in bad sequence */
|
||||
overlay8 {
|
||||
fragment@0 {
|
||||
target-path = "/testcase-data/overlay-node/test-bus/test-selftest8";
|
||||
target-path = "/testcase-data/overlay-node/test-bus/test-unittest8";
|
||||
__overlay__ {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
@ -211,7 +211,7 @@
|
|||
};
|
||||
overlay9 {
|
||||
fragment@0 {
|
||||
target-path = "/testcase-data/overlay-node/test-bus/test-selftest8";
|
||||
target-path = "/testcase-data/overlay-node/test-bus/test-unittest8";
|
||||
__overlay__ {
|
||||
property-foo = "bar";
|
||||
};
|
||||
|
|
@ -227,16 +227,16 @@
|
|||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
test-selftest10 {
|
||||
compatible = "selftest";
|
||||
test-unittest10 {
|
||||
compatible = "unittest";
|
||||
status = "okay";
|
||||
reg = <10>;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
test-selftest101 {
|
||||
compatible = "selftest";
|
||||
test-unittest101 {
|
||||
compatible = "unittest";
|
||||
status = "okay";
|
||||
reg = <1>;
|
||||
};
|
||||
|
|
@ -255,16 +255,16 @@
|
|||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
test-selftest11 {
|
||||
compatible = "selftest";
|
||||
test-unittest11 {
|
||||
compatible = "unittest";
|
||||
status = "okay";
|
||||
reg = <11>;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
test-selftest111 {
|
||||
compatible = "selftest";
|
||||
test-unittest111 {
|
||||
compatible = "unittest";
|
||||
status = "okay";
|
||||
reg = <1>;
|
||||
};
|
||||
|
|
@ -277,7 +277,7 @@
|
|||
/* test enable using absolute target path (i2c) */
|
||||
overlay12 {
|
||||
fragment@0 {
|
||||
target-path = "/testcase-data/overlay-node/test-bus/i2c-test-bus/test-selftest12";
|
||||
target-path = "/testcase-data/overlay-node/test-bus/i2c-test-bus/test-unittest12";
|
||||
__overlay__ {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
@ -287,7 +287,7 @@
|
|||
/* test disable using absolute target path (i2c) */
|
||||
overlay13 {
|
||||
fragment@0 {
|
||||
target-path = "/testcase-data/overlay-node/test-bus/i2c-test-bus/test-selftest13";
|
||||
target-path = "/testcase-data/overlay-node/test-bus/i2c-test-bus/test-unittest13";
|
||||
__overlay__ {
|
||||
status = "disabled";
|
||||
};
|
||||
|
|
@ -301,9 +301,9 @@
|
|||
__overlay__ {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
test-selftest15 {
|
||||
test-unittest15 {
|
||||
reg = <11>;
|
||||
compatible = "selftest-i2c-mux";
|
||||
compatible = "unittest-i2c-mux";
|
||||
status = "okay";
|
||||
|
||||
#address-cells = <1>;
|
||||
|
|
@ -316,7 +316,7 @@
|
|||
|
||||
test-mux-dev {
|
||||
reg = <32>;
|
||||
compatible = "selftest-i2c-dev";
|
||||
compatible = "unittest-i2c-dev";
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue