]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/of/address.c
Merge tag 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck...
[karo-tx-linux.git] / drivers / of / address.c
1
2 #include <linux/device.h>
3 #include <linux/io.h>
4 #include <linux/ioport.h>
5 #include <linux/module.h>
6 #include <linux/of_address.h>
7 #include <linux/pci_regs.h>
8 #include <linux/string.h>
9
10 /* Max address size we deal with */
11 #define OF_MAX_ADDR_CELLS       4
12 #define OF_CHECK_ADDR_COUNT(na) ((na) > 0 && (na) <= OF_MAX_ADDR_CELLS)
13 #define OF_CHECK_COUNTS(na, ns) (OF_CHECK_ADDR_COUNT(na) && (ns) > 0)
14
15 static struct of_bus *of_match_bus(struct device_node *np);
16 static int __of_address_to_resource(struct device_node *dev,
17                 const __be32 *addrp, u64 size, unsigned int flags,
18                 const char *name, struct resource *r);
19
20 /* Debug utility */
21 #ifdef DEBUG
22 static void of_dump_addr(const char *s, const __be32 *addr, int na)
23 {
24         printk(KERN_DEBUG "%s", s);
25         while (na--)
26                 printk(" %08x", be32_to_cpu(*(addr++)));
27         printk("\n");
28 }
29 #else
30 static void of_dump_addr(const char *s, const __be32 *addr, int na) { }
31 #endif
32
33 /* Callbacks for bus specific translators */
34 struct of_bus {
35         const char      *name;
36         const char      *addresses;
37         int             (*match)(struct device_node *parent);
38         void            (*count_cells)(struct device_node *child,
39                                        int *addrc, int *sizec);
40         u64             (*map)(__be32 *addr, const __be32 *range,
41                                 int na, int ns, int pna);
42         int             (*translate)(__be32 *addr, u64 offset, int na);
43         unsigned int    (*get_flags)(const __be32 *addr);
44 };
45
46 /*
47  * Default translator (generic bus)
48  */
49
50 static void of_bus_default_count_cells(struct device_node *dev,
51                                        int *addrc, int *sizec)
52 {
53         if (addrc)
54                 *addrc = of_n_addr_cells(dev);
55         if (sizec)
56                 *sizec = of_n_size_cells(dev);
57 }
58
59 static u64 of_bus_default_map(__be32 *addr, const __be32 *range,
60                 int na, int ns, int pna)
61 {
62         u64 cp, s, da;
63
64         cp = of_read_number(range, na);
65         s  = of_read_number(range + na + pna, ns);
66         da = of_read_number(addr, na);
67
68         pr_debug("OF: default map, cp=%llx, s=%llx, da=%llx\n",
69                  (unsigned long long)cp, (unsigned long long)s,
70                  (unsigned long long)da);
71
72         /*
73          * If the number of address cells is larger than 2 we assume the
74          * mapping doesn't specify a physical address. Rather, the address
75          * specifies an identifier that must match exactly.
76          */
77         if (na > 2 && memcmp(range, addr, na * 4) != 0)
78                 return OF_BAD_ADDR;
79
80         if (da < cp || da >= (cp + s))
81                 return OF_BAD_ADDR;
82         return da - cp;
83 }
84
85 static int of_bus_default_translate(__be32 *addr, u64 offset, int na)
86 {
87         u64 a = of_read_number(addr, na);
88         memset(addr, 0, na * 4);
89         a += offset;
90         if (na > 1)
91                 addr[na - 2] = cpu_to_be32(a >> 32);
92         addr[na - 1] = cpu_to_be32(a & 0xffffffffu);
93
94         return 0;
95 }
96
97 static unsigned int of_bus_default_get_flags(const __be32 *addr)
98 {
99         return IORESOURCE_MEM;
100 }
101
102 #ifdef CONFIG_PCI
103 /*
104  * PCI bus specific translator
105  */
106
107 static int of_bus_pci_match(struct device_node *np)
108 {
109         /* "vci" is for the /chaos bridge on 1st-gen PCI powermacs */
110         return !strcmp(np->type, "pci") || !strcmp(np->type, "vci");
111 }
112
113 static void of_bus_pci_count_cells(struct device_node *np,
114                                    int *addrc, int *sizec)
115 {
116         if (addrc)
117                 *addrc = 3;
118         if (sizec)
119                 *sizec = 2;
120 }
121
122 static unsigned int of_bus_pci_get_flags(const __be32 *addr)
123 {
124         unsigned int flags = 0;
125         u32 w = be32_to_cpup(addr);
126
127         switch((w >> 24) & 0x03) {
128         case 0x01:
129                 flags |= IORESOURCE_IO;
130                 break;
131         case 0x02: /* 32 bits */
132         case 0x03: /* 64 bits */
133                 flags |= IORESOURCE_MEM;
134                 break;
135         }
136         if (w & 0x40000000)
137                 flags |= IORESOURCE_PREFETCH;
138         return flags;
139 }
140
141 static u64 of_bus_pci_map(__be32 *addr, const __be32 *range, int na, int ns,
142                 int pna)
143 {
144         u64 cp, s, da;
145         unsigned int af, rf;
146
147         af = of_bus_pci_get_flags(addr);
148         rf = of_bus_pci_get_flags(range);
149
150         /* Check address type match */
151         if ((af ^ rf) & (IORESOURCE_MEM | IORESOURCE_IO))
152                 return OF_BAD_ADDR;
153
154         /* Read address values, skipping high cell */
155         cp = of_read_number(range + 1, na - 1);
156         s  = of_read_number(range + na + pna, ns);
157         da = of_read_number(addr + 1, na - 1);
158
159         pr_debug("OF: PCI map, cp=%llx, s=%llx, da=%llx\n",
160                  (unsigned long long)cp, (unsigned long long)s,
161                  (unsigned long long)da);
162
163         if (da < cp || da >= (cp + s))
164                 return OF_BAD_ADDR;
165         return da - cp;
166 }
167
168 static int of_bus_pci_translate(__be32 *addr, u64 offset, int na)
169 {
170         return of_bus_default_translate(addr + 1, offset, na - 1);
171 }
172
173 const __be32 *of_get_pci_address(struct device_node *dev, int bar_no, u64 *size,
174                         unsigned int *flags)
175 {
176         const __be32 *prop;
177         unsigned int psize;
178         struct device_node *parent;
179         struct of_bus *bus;
180         int onesize, i, na, ns;
181
182         /* Get parent & match bus type */
183         parent = of_get_parent(dev);
184         if (parent == NULL)
185                 return NULL;
186         bus = of_match_bus(parent);
187         if (strcmp(bus->name, "pci")) {
188                 of_node_put(parent);
189                 return NULL;
190         }
191         bus->count_cells(dev, &na, &ns);
192         of_node_put(parent);
193         if (!OF_CHECK_ADDR_COUNT(na))
194                 return NULL;
195
196         /* Get "reg" or "assigned-addresses" property */
197         prop = of_get_property(dev, bus->addresses, &psize);
198         if (prop == NULL)
199                 return NULL;
200         psize /= 4;
201
202         onesize = na + ns;
203         for (i = 0; psize >= onesize; psize -= onesize, prop += onesize, i++) {
204                 u32 val = be32_to_cpu(prop[0]);
205                 if ((val & 0xff) == ((bar_no * 4) + PCI_BASE_ADDRESS_0)) {
206                         if (size)
207                                 *size = of_read_number(prop + na, ns);
208                         if (flags)
209                                 *flags = bus->get_flags(prop);
210                         return prop;
211                 }
212         }
213         return NULL;
214 }
215 EXPORT_SYMBOL(of_get_pci_address);
216
217 int of_pci_address_to_resource(struct device_node *dev, int bar,
218                                struct resource *r)
219 {
220         const __be32    *addrp;
221         u64             size;
222         unsigned int    flags;
223
224         addrp = of_get_pci_address(dev, bar, &size, &flags);
225         if (addrp == NULL)
226                 return -EINVAL;
227         return __of_address_to_resource(dev, addrp, size, flags, NULL, r);
228 }
229 EXPORT_SYMBOL_GPL(of_pci_address_to_resource);
230
231 int of_pci_range_parser_init(struct of_pci_range_parser *parser,
232                                 struct device_node *node)
233 {
234         const int na = 3, ns = 2;
235         int rlen;
236
237         parser->node = node;
238         parser->pna = of_n_addr_cells(node);
239         parser->np = parser->pna + na + ns;
240
241         parser->range = of_get_property(node, "ranges", &rlen);
242         if (parser->range == NULL)
243                 return -ENOENT;
244
245         parser->end = parser->range + rlen / sizeof(__be32);
246
247         return 0;
248 }
249 EXPORT_SYMBOL_GPL(of_pci_range_parser_init);
250
251 struct of_pci_range *of_pci_range_parser_one(struct of_pci_range_parser *parser,
252                                                 struct of_pci_range *range)
253 {
254         const int na = 3, ns = 2;
255
256         if (!range)
257                 return NULL;
258
259         if (!parser->range || parser->range + parser->np > parser->end)
260                 return NULL;
261
262         range->pci_space = parser->range[0];
263         range->flags = of_bus_pci_get_flags(parser->range);
264         range->pci_addr = of_read_number(parser->range + 1, ns);
265         range->cpu_addr = of_translate_address(parser->node,
266                                 parser->range + na);
267         range->size = of_read_number(parser->range + parser->pna + na, ns);
268
269         parser->range += parser->np;
270
271         /* Now consume following elements while they are contiguous */
272         while (parser->range + parser->np <= parser->end) {
273                 u32 flags, pci_space;
274                 u64 pci_addr, cpu_addr, size;
275
276                 pci_space = be32_to_cpup(parser->range);
277                 flags = of_bus_pci_get_flags(parser->range);
278                 pci_addr = of_read_number(parser->range + 1, ns);
279                 cpu_addr = of_translate_address(parser->node,
280                                 parser->range + na);
281                 size = of_read_number(parser->range + parser->pna + na, ns);
282
283                 if (flags != range->flags)
284                         break;
285                 if (pci_addr != range->pci_addr + range->size ||
286                     cpu_addr != range->cpu_addr + range->size)
287                         break;
288
289                 range->size += size;
290                 parser->range += parser->np;
291         }
292
293         return range;
294 }
295 EXPORT_SYMBOL_GPL(of_pci_range_parser_one);
296
297 #endif /* CONFIG_PCI */
298
299 /*
300  * ISA bus specific translator
301  */
302
303 static int of_bus_isa_match(struct device_node *np)
304 {
305         return !strcmp(np->name, "isa");
306 }
307
308 static void of_bus_isa_count_cells(struct device_node *child,
309                                    int *addrc, int *sizec)
310 {
311         if (addrc)
312                 *addrc = 2;
313         if (sizec)
314                 *sizec = 1;
315 }
316
317 static u64 of_bus_isa_map(__be32 *addr, const __be32 *range, int na, int ns,
318                 int pna)
319 {
320         u64 cp, s, da;
321
322         /* Check address type match */
323         if ((addr[0] ^ range[0]) & cpu_to_be32(1))
324                 return OF_BAD_ADDR;
325
326         /* Read address values, skipping high cell */
327         cp = of_read_number(range + 1, na - 1);
328         s  = of_read_number(range + na + pna, ns);
329         da = of_read_number(addr + 1, na - 1);
330
331         pr_debug("OF: ISA map, cp=%llx, s=%llx, da=%llx\n",
332                  (unsigned long long)cp, (unsigned long long)s,
333                  (unsigned long long)da);
334
335         if (da < cp || da >= (cp + s))
336                 return OF_BAD_ADDR;
337         return da - cp;
338 }
339
340 static int of_bus_isa_translate(__be32 *addr, u64 offset, int na)
341 {
342         return of_bus_default_translate(addr + 1, offset, na - 1);
343 }
344
345 static unsigned int of_bus_isa_get_flags(const __be32 *addr)
346 {
347         unsigned int flags = 0;
348         u32 w = be32_to_cpup(addr);
349
350         if (w & 1)
351                 flags |= IORESOURCE_IO;
352         else
353                 flags |= IORESOURCE_MEM;
354         return flags;
355 }
356
357 /*
358  * Array of bus specific translators
359  */
360
361 static struct of_bus of_busses[] = {
362 #ifdef CONFIG_PCI
363         /* PCI */
364         {
365                 .name = "pci",
366                 .addresses = "assigned-addresses",
367                 .match = of_bus_pci_match,
368                 .count_cells = of_bus_pci_count_cells,
369                 .map = of_bus_pci_map,
370                 .translate = of_bus_pci_translate,
371                 .get_flags = of_bus_pci_get_flags,
372         },
373 #endif /* CONFIG_PCI */
374         /* ISA */
375         {
376                 .name = "isa",
377                 .addresses = "reg",
378                 .match = of_bus_isa_match,
379                 .count_cells = of_bus_isa_count_cells,
380                 .map = of_bus_isa_map,
381                 .translate = of_bus_isa_translate,
382                 .get_flags = of_bus_isa_get_flags,
383         },
384         /* Default */
385         {
386                 .name = "default",
387                 .addresses = "reg",
388                 .match = NULL,
389                 .count_cells = of_bus_default_count_cells,
390                 .map = of_bus_default_map,
391                 .translate = of_bus_default_translate,
392                 .get_flags = of_bus_default_get_flags,
393         },
394 };
395
396 static struct of_bus *of_match_bus(struct device_node *np)
397 {
398         int i;
399
400         for (i = 0; i < ARRAY_SIZE(of_busses); i++)
401                 if (!of_busses[i].match || of_busses[i].match(np))
402                         return &of_busses[i];
403         BUG();
404         return NULL;
405 }
406
407 static int of_translate_one(struct device_node *parent, struct of_bus *bus,
408                             struct of_bus *pbus, __be32 *addr,
409                             int na, int ns, int pna, const char *rprop)
410 {
411         const __be32 *ranges;
412         unsigned int rlen;
413         int rone;
414         u64 offset = OF_BAD_ADDR;
415
416         /* Normally, an absence of a "ranges" property means we are
417          * crossing a non-translatable boundary, and thus the addresses
418          * below the current not cannot be converted to CPU physical ones.
419          * Unfortunately, while this is very clear in the spec, it's not
420          * what Apple understood, and they do have things like /uni-n or
421          * /ht nodes with no "ranges" property and a lot of perfectly
422          * useable mapped devices below them. Thus we treat the absence of
423          * "ranges" as equivalent to an empty "ranges" property which means
424          * a 1:1 translation at that level. It's up to the caller not to try
425          * to translate addresses that aren't supposed to be translated in
426          * the first place. --BenH.
427          *
428          * As far as we know, this damage only exists on Apple machines, so
429          * This code is only enabled on powerpc. --gcl
430          */
431         ranges = of_get_property(parent, rprop, &rlen);
432 #if !defined(CONFIG_PPC)
433         if (ranges == NULL) {
434                 pr_err("OF: no ranges; cannot translate\n");
435                 return 1;
436         }
437 #endif /* !defined(CONFIG_PPC) */
438         if (ranges == NULL || rlen == 0) {
439                 offset = of_read_number(addr, na);
440                 memset(addr, 0, pna * 4);
441                 pr_debug("OF: empty ranges; 1:1 translation\n");
442                 goto finish;
443         }
444
445         pr_debug("OF: walking ranges...\n");
446
447         /* Now walk through the ranges */
448         rlen /= 4;
449         rone = na + pna + ns;
450         for (; rlen >= rone; rlen -= rone, ranges += rone) {
451                 offset = bus->map(addr, ranges, na, ns, pna);
452                 if (offset != OF_BAD_ADDR)
453                         break;
454         }
455         if (offset == OF_BAD_ADDR) {
456                 pr_debug("OF: not found !\n");
457                 return 1;
458         }
459         memcpy(addr, ranges + na, 4 * pna);
460
461  finish:
462         of_dump_addr("OF: parent translation for:", addr, pna);
463         pr_debug("OF: with offset: %llx\n", (unsigned long long)offset);
464
465         /* Translate it into parent bus space */
466         return pbus->translate(addr, offset, pna);
467 }
468
469 /*
470  * Translate an address from the device-tree into a CPU physical address,
471  * this walks up the tree and applies the various bus mappings on the
472  * way.
473  *
474  * Note: We consider that crossing any level with #size-cells == 0 to mean
475  * that translation is impossible (that is we are not dealing with a value
476  * that can be mapped to a cpu physical address). This is not really specified
477  * that way, but this is traditionally the way IBM at least do things
478  */
479 static u64 __of_translate_address(struct device_node *dev,
480                                   const __be32 *in_addr, const char *rprop)
481 {
482         struct device_node *parent = NULL;
483         struct of_bus *bus, *pbus;
484         __be32 addr[OF_MAX_ADDR_CELLS];
485         int na, ns, pna, pns;
486         u64 result = OF_BAD_ADDR;
487
488         pr_debug("OF: ** translation for device %s **\n", dev->full_name);
489
490         /* Increase refcount at current level */
491         of_node_get(dev);
492
493         /* Get parent & match bus type */
494         parent = of_get_parent(dev);
495         if (parent == NULL)
496                 goto bail;
497         bus = of_match_bus(parent);
498
499         /* Count address cells & copy address locally */
500         bus->count_cells(dev, &na, &ns);
501         if (!OF_CHECK_COUNTS(na, ns)) {
502                 printk(KERN_ERR "prom_parse: Bad cell count for %s\n",
503                        dev->full_name);
504                 goto bail;
505         }
506         memcpy(addr, in_addr, na * 4);
507
508         pr_debug("OF: bus is %s (na=%d, ns=%d) on %s\n",
509             bus->name, na, ns, parent->full_name);
510         of_dump_addr("OF: translating address:", addr, na);
511
512         /* Translate */
513         for (;;) {
514                 /* Switch to parent bus */
515                 of_node_put(dev);
516                 dev = parent;
517                 parent = of_get_parent(dev);
518
519                 /* If root, we have finished */
520                 if (parent == NULL) {
521                         pr_debug("OF: reached root node\n");
522                         result = of_read_number(addr, na);
523                         break;
524                 }
525
526                 /* Get new parent bus and counts */
527                 pbus = of_match_bus(parent);
528                 pbus->count_cells(dev, &pna, &pns);
529                 if (!OF_CHECK_COUNTS(pna, pns)) {
530                         printk(KERN_ERR "prom_parse: Bad cell count for %s\n",
531                                dev->full_name);
532                         break;
533                 }
534
535                 pr_debug("OF: parent bus is %s (na=%d, ns=%d) on %s\n",
536                     pbus->name, pna, pns, parent->full_name);
537
538                 /* Apply bus translation */
539                 if (of_translate_one(dev, bus, pbus, addr, na, ns, pna, rprop))
540                         break;
541
542                 /* Complete the move up one level */
543                 na = pna;
544                 ns = pns;
545                 bus = pbus;
546
547                 of_dump_addr("OF: one level translation:", addr, na);
548         }
549  bail:
550         of_node_put(parent);
551         of_node_put(dev);
552
553         return result;
554 }
555
556 u64 of_translate_address(struct device_node *dev, const __be32 *in_addr)
557 {
558         return __of_translate_address(dev, in_addr, "ranges");
559 }
560 EXPORT_SYMBOL(of_translate_address);
561
562 u64 of_translate_dma_address(struct device_node *dev, const __be32 *in_addr)
563 {
564         return __of_translate_address(dev, in_addr, "dma-ranges");
565 }
566 EXPORT_SYMBOL(of_translate_dma_address);
567
568 bool of_can_translate_address(struct device_node *dev)
569 {
570         struct device_node *parent;
571         struct of_bus *bus;
572         int na, ns;
573
574         parent = of_get_parent(dev);
575         if (parent == NULL)
576                 return false;
577
578         bus = of_match_bus(parent);
579         bus->count_cells(dev, &na, &ns);
580
581         of_node_put(parent);
582
583         return OF_CHECK_COUNTS(na, ns);
584 }
585 EXPORT_SYMBOL(of_can_translate_address);
586
587 const __be32 *of_get_address(struct device_node *dev, int index, u64 *size,
588                     unsigned int *flags)
589 {
590         const __be32 *prop;
591         unsigned int psize;
592         struct device_node *parent;
593         struct of_bus *bus;
594         int onesize, i, na, ns;
595
596         /* Get parent & match bus type */
597         parent = of_get_parent(dev);
598         if (parent == NULL)
599                 return NULL;
600         bus = of_match_bus(parent);
601         bus->count_cells(dev, &na, &ns);
602         of_node_put(parent);
603         if (!OF_CHECK_ADDR_COUNT(na))
604                 return NULL;
605
606         /* Get "reg" or "assigned-addresses" property */
607         prop = of_get_property(dev, bus->addresses, &psize);
608         if (prop == NULL)
609                 return NULL;
610         psize /= 4;
611
612         onesize = na + ns;
613         for (i = 0; psize >= onesize; psize -= onesize, prop += onesize, i++)
614                 if (i == index) {
615                         if (size)
616                                 *size = of_read_number(prop + na, ns);
617                         if (flags)
618                                 *flags = bus->get_flags(prop);
619                         return prop;
620                 }
621         return NULL;
622 }
623 EXPORT_SYMBOL(of_get_address);
624
625 static int __of_address_to_resource(struct device_node *dev,
626                 const __be32 *addrp, u64 size, unsigned int flags,
627                 const char *name, struct resource *r)
628 {
629         u64 taddr;
630
631         if ((flags & (IORESOURCE_IO | IORESOURCE_MEM)) == 0)
632                 return -EINVAL;
633         taddr = of_translate_address(dev, addrp);
634         if (taddr == OF_BAD_ADDR)
635                 return -EINVAL;
636         memset(r, 0, sizeof(struct resource));
637         if (flags & IORESOURCE_IO) {
638                 unsigned long port;
639                 port = pci_address_to_pio(taddr);
640                 if (port == (unsigned long)-1)
641                         return -EINVAL;
642                 r->start = port;
643                 r->end = port + size - 1;
644         } else {
645                 r->start = taddr;
646                 r->end = taddr + size - 1;
647         }
648         r->flags = flags;
649         r->name = name ? name : dev->full_name;
650
651         return 0;
652 }
653
654 /**
655  * of_address_to_resource - Translate device tree address and return as resource
656  *
657  * Note that if your address is a PIO address, the conversion will fail if
658  * the physical address can't be internally converted to an IO token with
659  * pci_address_to_pio(), that is because it's either called to early or it
660  * can't be matched to any host bridge IO space
661  */
662 int of_address_to_resource(struct device_node *dev, int index,
663                            struct resource *r)
664 {
665         const __be32    *addrp;
666         u64             size;
667         unsigned int    flags;
668         const char      *name = NULL;
669
670         addrp = of_get_address(dev, index, &size, &flags);
671         if (addrp == NULL)
672                 return -EINVAL;
673
674         /* Get optional "reg-names" property to add a name to a resource */
675         of_property_read_string_index(dev, "reg-names", index, &name);
676
677         return __of_address_to_resource(dev, addrp, size, flags, name, r);
678 }
679 EXPORT_SYMBOL_GPL(of_address_to_resource);
680
681 struct device_node *of_find_matching_node_by_address(struct device_node *from,
682                                         const struct of_device_id *matches,
683                                         u64 base_address)
684 {
685         struct device_node *dn = of_find_matching_node(from, matches);
686         struct resource res;
687
688         while (dn) {
689                 if (of_address_to_resource(dn, 0, &res))
690                         continue;
691                 if (res.start == base_address)
692                         return dn;
693                 dn = of_find_matching_node(dn, matches);
694         }
695
696         return NULL;
697 }
698
699
700 /**
701  * of_iomap - Maps the memory mapped IO for a given device_node
702  * @device:     the device whose io range will be mapped
703  * @index:      index of the io range
704  *
705  * Returns a pointer to the mapped memory
706  */
707 void __iomem *of_iomap(struct device_node *np, int index)
708 {
709         struct resource res;
710
711         if (of_address_to_resource(np, index, &res))
712                 return NULL;
713
714         return ioremap(res.start, resource_size(&res));
715 }
716 EXPORT_SYMBOL(of_iomap);