Merge remote-tracking branch 'robh/for-next' into devicetree/next

Conflicts:
	drivers/of/unittest.c
This commit is contained in:
Grant Likely 2015-03-29 08:59:58 +01:00
commit a2166ca5f3
47 changed files with 528 additions and 494 deletions

View file

@ -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

View file

@ -2082,14 +2082,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)
@ -2125,12 +2156,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) {

2
drivers/of/unittest-data/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
testcases.dtb
testcases.dtb.S

View file

@ -0,0 +1,7 @@
obj-y += testcases.dtb.o
targets += testcases.dtb testcases.dtb.S
.SECONDARY: \
$(obj)/testcases.dtb.S \
$(obj)/testcases.dtb

View file

@ -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