diff options
author | David S. Miller <davem@davemloft.net> | 2008-08-27 07:22:37 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-08-29 05:15:20 -0400 |
commit | 5059625ed8862e897760b86effff0f8a35989c0d (patch) | |
tree | 1beed269b55a0848ca9d3a5837aaffef7d6e07c2 /arch/sparc64/kernel | |
parent | f8e4d32cb5153a9d6a8e8864e357dad1349f3b85 (diff) |
sparc: Add OF archdata propagation helper.
Add a helper function that, given a bus of_device node, propagates
all iommu, stc, and host_controller values down to the child nodes.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/kernel')
-rw-r--r-- | arch/sparc64/kernel/of_device.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/arch/sparc64/kernel/of_device.c b/arch/sparc64/kernel/of_device.c index a30f2af0bf2c..b22475f85a5e 100644 --- a/arch/sparc64/kernel/of_device.c +++ b/arch/sparc64/kernel/of_device.c | |||
@@ -66,6 +66,28 @@ unsigned int irq_of_parse_and_map(struct device_node *node, int index) | |||
66 | } | 66 | } |
67 | EXPORT_SYMBOL(irq_of_parse_and_map); | 67 | EXPORT_SYMBOL(irq_of_parse_and_map); |
68 | 68 | ||
69 | /* Take the archdata values for IOMMU, STC, and HOSTDATA found in | ||
70 | * BUS and propagate to all child of_device objects. | ||
71 | */ | ||
72 | void of_propagate_archdata(struct of_device *bus) | ||
73 | { | ||
74 | struct dev_archdata *bus_sd = &bus->dev.archdata; | ||
75 | struct device_node *bus_dp = bus->node; | ||
76 | struct device_node *dp; | ||
77 | |||
78 | for (dp = bus_dp->child; dp; dp = dp->sibling) { | ||
79 | struct of_device *op = of_find_device_by_node(dp); | ||
80 | |||
81 | op->dev.archdata.iommu = bus_sd->iommu; | ||
82 | op->dev.archdata.stc = bus_sd->stc; | ||
83 | op->dev.archdata.host_controller = bus_sd->host_controller; | ||
84 | op->dev.archdata.numa_node = bus_sd->numa_node; | ||
85 | |||
86 | if (dp->child) | ||
87 | of_propagate_archdata(op); | ||
88 | } | ||
89 | } | ||
90 | |||
69 | #ifdef CONFIG_PCI | 91 | #ifdef CONFIG_PCI |
70 | struct bus_type ebus_bus_type; | 92 | struct bus_type ebus_bus_type; |
71 | EXPORT_SYMBOL(ebus_bus_type); | 93 | EXPORT_SYMBOL(ebus_bus_type); |