Commit 25c7581bcdd11cf9b82a8ef062a10bea310cc9e9
1 parent
44bdef5e8f
Exists in
master
and in
7 other branches
[SPARC64]: Kill off some more prom_getproperty() remnants.
The remaining ones occur before we have imported the device tree. Signed-off-by: David S. Miller <davem@davemloft.net>
Showing 3 changed files with 50 additions and 31 deletions Side-by-side Diff
arch/sparc64/kernel/irq.c
... | ... | @@ -34,6 +34,7 @@ |
34 | 34 | #include <asm/iommu.h> |
35 | 35 | #include <asm/upa.h> |
36 | 36 | #include <asm/oplib.h> |
37 | +#include <asm/prom.h> | |
37 | 38 | #include <asm/timer.h> |
38 | 39 | #include <asm/smp.h> |
39 | 40 | #include <asm/starfire.h> |
40 | 41 | |
41 | 42 | |
42 | 43 | |
... | ... | @@ -635,23 +636,30 @@ |
635 | 636 | |
636 | 637 | static void map_prom_timers(void) |
637 | 638 | { |
638 | - unsigned int addr[3]; | |
639 | + struct device_node *dp; | |
640 | + unsigned int *addr; | |
639 | 641 | int tnode, err; |
640 | 642 | |
641 | 643 | /* PROM timer node hangs out in the top level of device siblings... */ |
642 | - tnode = prom_finddevice("/counter-timer"); | |
644 | + dp = of_find_node_by_path("/"); | |
645 | + dp = dp->child; | |
646 | + while (dp) { | |
647 | + if (!strcmp(dp->name, "counter-timer")) | |
648 | + break; | |
649 | + dp = dp->sibling; | |
650 | + } | |
643 | 651 | |
644 | 652 | /* Assume if node is not present, PROM uses different tick mechanism |
645 | 653 | * which we should not care about. |
646 | 654 | */ |
647 | - if (tnode == 0 || tnode == -1) { | |
655 | + if (!dp) { | |
648 | 656 | prom_timers = (struct sun5_timer *) 0; |
649 | 657 | return; |
650 | 658 | } |
651 | 659 | |
652 | 660 | /* If PROM is really using this, it must be mapped by him. */ |
653 | - err = prom_getproperty(tnode, "address", (char *)addr, sizeof(addr)); | |
654 | - if (err == -1) { | |
661 | + addr = of_get_property(dp, "address", NULL); | |
662 | + if (!addr) { | |
655 | 663 | prom_printf("PROM does not have timer mapped, trying to continue.\n"); |
656 | 664 | prom_timers = (struct sun5_timer *) 0; |
657 | 665 | return; |
arch/sparc64/kernel/sbus.c
... | ... | @@ -19,6 +19,7 @@ |
19 | 19 | #include <asm/cache.h> |
20 | 20 | #include <asm/dma.h> |
21 | 21 | #include <asm/irq.h> |
22 | +#include <asm/prom.h> | |
22 | 23 | #include <asm/starfire.h> |
23 | 24 | |
24 | 25 | #include "iommu_common.h" |
25 | 26 | |
26 | 27 | |
27 | 28 | |
28 | 29 | |
29 | 30 | |
... | ... | @@ -1098,24 +1099,25 @@ |
1098 | 1099 | } |
1099 | 1100 | |
1100 | 1101 | /* Boot time initialization. */ |
1101 | -void __init sbus_iommu_init(int prom_node, struct sbus_bus *sbus) | |
1102 | +void __init sbus_iommu_init(int __node, struct sbus_bus *sbus) | |
1102 | 1103 | { |
1103 | - struct linux_prom64_registers rprop; | |
1104 | + struct linux_prom64_registers *pr; | |
1105 | + struct device_node *dp; | |
1104 | 1106 | struct sbus_iommu *iommu; |
1105 | 1107 | unsigned long regs, tsb_base; |
1106 | 1108 | u64 control; |
1107 | - int err, i; | |
1109 | + int i; | |
1108 | 1110 | |
1109 | - sbus->portid = prom_getintdefault(sbus->prom_node, | |
1110 | - "upa-portid", -1); | |
1111 | + dp = of_find_node_by_phandle(__node); | |
1111 | 1112 | |
1112 | - err = prom_getproperty(prom_node, "reg", | |
1113 | - (char *)&rprop, sizeof(rprop)); | |
1114 | - if (err < 0) { | |
1113 | + sbus->portid = of_getintprop_default(dp, "upa-portid", -1); | |
1114 | + | |
1115 | + pr = of_get_property(dp, "reg", NULL); | |
1116 | + if (!pr) { | |
1115 | 1117 | prom_printf("sbus_iommu_init: Cannot map SYSIO control registers.\n"); |
1116 | 1118 | prom_halt(); |
1117 | 1119 | } |
1118 | - regs = rprop.phys_addr; | |
1120 | + regs = pr->phys_addr; | |
1119 | 1121 | |
1120 | 1122 | iommu = kmalloc(sizeof(*iommu) + SMP_CACHE_BYTES, GFP_ATOMIC); |
1121 | 1123 | if (iommu == NULL) { |
1122 | 1124 | |
... | ... | @@ -1228,12 +1230,11 @@ |
1228 | 1230 | |
1229 | 1231 | void sbus_fill_device_irq(struct sbus_dev *sdev) |
1230 | 1232 | { |
1231 | - struct linux_prom_irqs irqs[PROMINTR_MAX]; | |
1232 | - int len; | |
1233 | + struct device_node *dp = of_find_node_by_phandle(sdev->prom_node); | |
1234 | + struct linux_prom_irqs *irqs; | |
1233 | 1235 | |
1234 | - len = prom_getproperty(sdev->prom_node, "interrupts", | |
1235 | - (char *) irqs, sizeof(irqs)); | |
1236 | - if (len == -1 || len == 0) { | |
1236 | + irqs = of_get_property(dp, "interrupts", NULL); | |
1237 | + if (!irqs) { | |
1237 | 1238 | sdev->irqs[0] = 0; |
1238 | 1239 | sdev->num_irqs = 0; |
1239 | 1240 | } else { |
arch/sparc64/solaris/misc.c
... | ... | @@ -23,6 +23,7 @@ |
23 | 23 | #include <asm/oplib.h> |
24 | 24 | #include <asm/idprom.h> |
25 | 25 | #include <asm/smp.h> |
26 | +#include <asm/prom.h> | |
26 | 27 | |
27 | 28 | #include "conv.h" |
28 | 29 | |
29 | 30 | |
30 | 31 | |
... | ... | @@ -194,14 +195,17 @@ |
194 | 195 | } |
195 | 196 | } |
196 | 197 | |
197 | -static char *platform(char *buffer) | |
198 | +static char *platform(char *buffer, int sz) | |
198 | 199 | { |
200 | + struct device_node *dp = of_find_node_by_path("/"); | |
199 | 201 | int len; |
200 | 202 | |
201 | 203 | *buffer = 0; |
202 | - len = prom_getproperty(prom_root_node, "name", buffer, 256); | |
203 | - if(len > 0) | |
204 | - buffer[len] = 0; | |
204 | + len = strlen(dp->name); | |
205 | + if (len > sz) | |
206 | + len = sz; | |
207 | + memcpy(buffer, dp->name, len); | |
208 | + buffer[len] = 0; | |
205 | 209 | if (*buffer) { |
206 | 210 | char *p; |
207 | 211 | |
208 | 212 | |
209 | 213 | |
210 | 214 | |
... | ... | @@ -213,16 +217,22 @@ |
213 | 217 | return "sun4u"; |
214 | 218 | } |
215 | 219 | |
216 | -static char *serial(char *buffer) | |
220 | +static char *serial(char *buffer, int sz) | |
217 | 221 | { |
218 | - int node = prom_getchild(prom_root_node); | |
222 | + struct device_node *dp = of_find_node_by_path("/options"); | |
219 | 223 | int len; |
220 | 224 | |
221 | - node = prom_searchsiblings(node, "options"); | |
222 | 225 | *buffer = 0; |
223 | - len = prom_getproperty(node, "system-board-serial#", buffer, 256); | |
224 | - if(len > 0) | |
225 | - buffer[len] = 0; | |
226 | + if (dp) { | |
227 | + char *val = of_get_property(dp, "system-board-serial#", &len); | |
228 | + | |
229 | + if (val && len > 0) { | |
230 | + if (len > sz) | |
231 | + len = sz; | |
232 | + memcpy(buffer, val, len); | |
233 | + buffer[len] = 0; | |
234 | + } | |
235 | + } | |
226 | 236 | if (!*buffer) |
227 | 237 | return "4512348717234"; |
228 | 238 | else |
... | ... | @@ -305,8 +315,8 @@ |
305 | 315 | case SI_MACHINE: r = machine(); break; |
306 | 316 | case SI_ARCHITECTURE: r = "sparc"; break; |
307 | 317 | case SI_HW_PROVIDER: r = "Sun_Microsystems"; break; |
308 | - case SI_HW_SERIAL: r = serial(buffer); break; | |
309 | - case SI_PLATFORM: r = platform(buffer); break; | |
318 | + case SI_HW_SERIAL: r = serial(buffer, sizeof(buffer)); break; | |
319 | + case SI_PLATFORM: r = platform(buffer, sizeof(buffer)); break; | |
310 | 320 | case SI_SRPC_DOMAIN: r = ""; break; |
311 | 321 | case SI_VERSION: r = "Generic"; break; |
312 | 322 | default: return -EINVAL; |