root/drivers/of/address.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. of_dump_addr
  2. of_dump_addr
  3. of_bus_default_count_cells
  4. of_bus_default_map
  5. of_bus_default_translate
  6. of_bus_default_get_flags
  7. of_bus_pci_match
  8. of_bus_pci_count_cells
  9. of_bus_pci_get_flags
  10. of_bus_pci_map
  11. of_bus_pci_translate
  12. of_get_pci_address
  13. of_pci_address_to_resource
  14. parser_init
  15. of_pci_range_parser_init
  16. of_pci_dma_range_parser_init
  17. of_pci_range_parser_one
  18. of_pci_range_to_resource
  19. of_bus_isa_match
  20. of_bus_isa_count_cells
  21. of_bus_isa_map
  22. of_bus_isa_translate
  23. of_bus_isa_get_flags
  24. of_match_bus
  25. of_empty_ranges_quirk
  26. of_translate_one
  27. __of_translate_address
  28. of_translate_address
  29. __of_get_dma_parent
  30. of_translate_dma_address
  31. of_get_address
  32. of_translate_ioport
  33. __of_address_to_resource
  34. of_address_to_resource
  35. of_find_matching_node_by_address
  36. of_iomap
  37. of_io_request_and_map
  38. of_dma_get_range
  39. of_dma_is_coherent

   1 // SPDX-License-Identifier: GPL-2.0
   2 #define pr_fmt(fmt)     "OF: " fmt
   3 
   4 #include <linux/device.h>
   5 #include <linux/fwnode.h>
   6 #include <linux/io.h>
   7 #include <linux/ioport.h>
   8 #include <linux/logic_pio.h>
   9 #include <linux/module.h>
  10 #include <linux/of_address.h>
  11 #include <linux/pci.h>
  12 #include <linux/pci_regs.h>
  13 #include <linux/sizes.h>
  14 #include <linux/slab.h>
  15 #include <linux/string.h>
  16 
  17 /* Max address size we deal with */
  18 #define OF_MAX_ADDR_CELLS       4
  19 #define OF_CHECK_ADDR_COUNT(na) ((na) > 0 && (na) <= OF_MAX_ADDR_CELLS)
  20 #define OF_CHECK_COUNTS(na, ns) (OF_CHECK_ADDR_COUNT(na) && (ns) > 0)
  21 
  22 static struct of_bus *of_match_bus(struct device_node *np);
  23 static int __of_address_to_resource(struct device_node *dev,
  24                 const __be32 *addrp, u64 size, unsigned int flags,
  25                 const char *name, struct resource *r);
  26 
  27 /* Debug utility */
  28 #ifdef DEBUG
  29 static void of_dump_addr(const char *s, const __be32 *addr, int na)
  30 {
  31         pr_debug("%s", s);
  32         while (na--)
  33                 pr_cont(" %08x", be32_to_cpu(*(addr++)));
  34         pr_cont("\n");
  35 }
  36 #else
  37 static void of_dump_addr(const char *s, const __be32 *addr, int na) { }
  38 #endif
  39 
  40 /* Callbacks for bus specific translators */
  41 struct of_bus {
  42         const char      *name;
  43         const char      *addresses;
  44         int             (*match)(struct device_node *parent);
  45         void            (*count_cells)(struct device_node *child,
  46                                        int *addrc, int *sizec);
  47         u64             (*map)(__be32 *addr, const __be32 *range,
  48                                 int na, int ns, int pna);
  49         int             (*translate)(__be32 *addr, u64 offset, int na);
  50         unsigned int    (*get_flags)(const __be32 *addr);
  51 };
  52 
  53 /*
  54  * Default translator (generic bus)
  55  */
  56 
  57 static void of_bus_default_count_cells(struct device_node *dev,
  58                                        int *addrc, int *sizec)
  59 {
  60         if (addrc)
  61                 *addrc = of_n_addr_cells(dev);
  62         if (sizec)
  63                 *sizec = of_n_size_cells(dev);
  64 }
  65 
  66 static u64 of_bus_default_map(__be32 *addr, const __be32 *range,
  67                 int na, int ns, int pna)
  68 {
  69         u64 cp, s, da;
  70 
  71         cp = of_read_number(range, na);
  72         s  = of_read_number(range + na + pna, ns);
  73         da = of_read_number(addr, na);
  74 
  75         pr_debug("default map, cp=%llx, s=%llx, da=%llx\n",
  76                  (unsigned long long)cp, (unsigned long long)s,
  77                  (unsigned long long)da);
  78 
  79         if (da < cp || da >= (cp + s))
  80                 return OF_BAD_ADDR;
  81         return da - cp;
  82 }
  83 
  84 static int of_bus_default_translate(__be32 *addr, u64 offset, int na)
  85 {
  86         u64 a = of_read_number(addr, na);
  87         memset(addr, 0, na * 4);
  88         a += offset;
  89         if (na > 1)
  90                 addr[na - 2] = cpu_to_be32(a >> 32);
  91         addr[na - 1] = cpu_to_be32(a & 0xffffffffu);
  92 
  93         return 0;
  94 }
  95 
  96 static unsigned int of_bus_default_get_flags(const __be32 *addr)
  97 {
  98         return IORESOURCE_MEM;
  99 }
 100 
 101 #ifdef CONFIG_PCI
 102 /*
 103  * PCI bus specific translator
 104  */
 105 
 106 static int of_bus_pci_match(struct device_node *np)
 107 {
 108         /*
 109          * "pciex" is PCI Express
 110          * "vci" is for the /chaos bridge on 1st-gen PCI powermacs
 111          * "ht" is hypertransport
 112          */
 113         return of_node_is_type(np, "pci") || of_node_is_type(np, "pciex") ||
 114                 of_node_is_type(np, "vci") || of_node_is_type(np, "ht");
 115 }
 116 
 117 static void of_bus_pci_count_cells(struct device_node *np,
 118                                    int *addrc, int *sizec)
 119 {
 120         if (addrc)
 121                 *addrc = 3;
 122         if (sizec)
 123                 *sizec = 2;
 124 }
 125 
 126 static unsigned int of_bus_pci_get_flags(const __be32 *addr)
 127 {
 128         unsigned int flags = 0;
 129         u32 w = be32_to_cpup(addr);
 130 
 131         switch((w >> 24) & 0x03) {
 132         case 0x01:
 133                 flags |= IORESOURCE_IO;
 134                 break;
 135         case 0x02: /* 32 bits */
 136         case 0x03: /* 64 bits */
 137                 flags |= IORESOURCE_MEM;
 138                 break;
 139         }
 140         if (w & 0x40000000)
 141                 flags |= IORESOURCE_PREFETCH;
 142         return flags;
 143 }
 144 
 145 static u64 of_bus_pci_map(__be32 *addr, const __be32 *range, int na, int ns,
 146                 int pna)
 147 {
 148         u64 cp, s, da;
 149         unsigned int af, rf;
 150 
 151         af = of_bus_pci_get_flags(addr);
 152         rf = of_bus_pci_get_flags(range);
 153 
 154         /* Check address type match */
 155         if ((af ^ rf) & (IORESOURCE_MEM | IORESOURCE_IO))
 156                 return OF_BAD_ADDR;
 157 
 158         /* Read address values, skipping high cell */
 159         cp = of_read_number(range + 1, na - 1);
 160         s  = of_read_number(range + na + pna, ns);
 161         da = of_read_number(addr + 1, na - 1);
 162 
 163         pr_debug("PCI map, cp=%llx, s=%llx, da=%llx\n",
 164                  (unsigned long long)cp, (unsigned long long)s,
 165                  (unsigned long long)da);
 166 
 167         if (da < cp || da >= (cp + s))
 168                 return OF_BAD_ADDR;
 169         return da - cp;
 170 }
 171 
 172 static int of_bus_pci_translate(__be32 *addr, u64 offset, int na)
 173 {
 174         return of_bus_default_translate(addr + 1, offset, na - 1);
 175 }
 176 
 177 const __be32 *of_get_pci_address(struct device_node *dev, int bar_no, u64 *size,
 178                         unsigned int *flags)
 179 {
 180         const __be32 *prop;
 181         unsigned int psize;
 182         struct device_node *parent;
 183         struct of_bus *bus;
 184         int onesize, i, na, ns;
 185 
 186         /* Get parent & match bus type */
 187         parent = of_get_parent(dev);
 188         if (parent == NULL)
 189                 return NULL;
 190         bus = of_match_bus(parent);
 191         if (strcmp(bus->name, "pci")) {
 192                 of_node_put(parent);
 193                 return NULL;
 194         }
 195         bus->count_cells(dev, &na, &ns);
 196         of_node_put(parent);
 197         if (!OF_CHECK_ADDR_COUNT(na))
 198                 return NULL;
 199 
 200         /* Get "reg" or "assigned-addresses" property */
 201         prop = of_get_property(dev, bus->addresses, &psize);
 202         if (prop == NULL)
 203                 return NULL;
 204         psize /= 4;
 205 
 206         onesize = na + ns;
 207         for (i = 0; psize >= onesize; psize -= onesize, prop += onesize, i++) {
 208                 u32 val = be32_to_cpu(prop[0]);
 209                 if ((val & 0xff) == ((bar_no * 4) + PCI_BASE_ADDRESS_0)) {
 210                         if (size)
 211                                 *size = of_read_number(prop + na, ns);
 212                         if (flags)
 213                                 *flags = bus->get_flags(prop);
 214                         return prop;
 215                 }
 216         }
 217         return NULL;
 218 }
 219 EXPORT_SYMBOL(of_get_pci_address);
 220 
 221 int of_pci_address_to_resource(struct device_node *dev, int bar,
 222                                struct resource *r)
 223 {
 224         const __be32    *addrp;
 225         u64             size;
 226         unsigned int    flags;
 227 
 228         addrp = of_get_pci_address(dev, bar, &size, &flags);
 229         if (addrp == NULL)
 230                 return -EINVAL;
 231         return __of_address_to_resource(dev, addrp, size, flags, NULL, r);
 232 }
 233 EXPORT_SYMBOL_GPL(of_pci_address_to_resource);
 234 
 235 static int parser_init(struct of_pci_range_parser *parser,
 236                         struct device_node *node, const char *name)
 237 {
 238         const int na = 3, ns = 2;
 239         int rlen;
 240 
 241         parser->node = node;
 242         parser->pna = of_n_addr_cells(node);
 243         parser->np = parser->pna + na + ns;
 244 
 245         parser->range = of_get_property(node, name, &rlen);
 246         if (parser->range == NULL)
 247                 return -ENOENT;
 248 
 249         parser->end = parser->range + rlen / sizeof(__be32);
 250 
 251         return 0;
 252 }
 253 
 254 int of_pci_range_parser_init(struct of_pci_range_parser *parser,
 255                                 struct device_node *node)
 256 {
 257         return parser_init(parser, node, "ranges");
 258 }
 259 EXPORT_SYMBOL_GPL(of_pci_range_parser_init);
 260 
 261 int of_pci_dma_range_parser_init(struct of_pci_range_parser *parser,
 262                                 struct device_node *node)
 263 {
 264         return parser_init(parser, node, "dma-ranges");
 265 }
 266 EXPORT_SYMBOL_GPL(of_pci_dma_range_parser_init);
 267 
 268 struct of_pci_range *of_pci_range_parser_one(struct of_pci_range_parser *parser,
 269                                                 struct of_pci_range *range)
 270 {
 271         const int na = 3, ns = 2;
 272 
 273         if (!range)
 274                 return NULL;
 275 
 276         if (!parser->range || parser->range + parser->np > parser->end)
 277                 return NULL;
 278 
 279         range->pci_space = be32_to_cpup(parser->range);
 280         range->flags = of_bus_pci_get_flags(parser->range);
 281         range->pci_addr = of_read_number(parser->range + 1, ns);
 282         range->cpu_addr = of_translate_address(parser->node,
 283                                 parser->range + na);
 284         range->size = of_read_number(parser->range + parser->pna + na, ns);
 285 
 286         parser->range += parser->np;
 287 
 288         /* Now consume following elements while they are contiguous */
 289         while (parser->range + parser->np <= parser->end) {
 290                 u32 flags;
 291                 u64 pci_addr, cpu_addr, size;
 292 
 293                 flags = of_bus_pci_get_flags(parser->range);
 294                 pci_addr = of_read_number(parser->range + 1, ns);
 295                 cpu_addr = of_translate_address(parser->node,
 296                                 parser->range + na);
 297                 size = of_read_number(parser->range + parser->pna + na, ns);
 298 
 299                 if (flags != range->flags)
 300                         break;
 301                 if (pci_addr != range->pci_addr + range->size ||
 302                     cpu_addr != range->cpu_addr + range->size)
 303                         break;
 304 
 305                 range->size += size;
 306                 parser->range += parser->np;
 307         }
 308 
 309         return range;
 310 }
 311 EXPORT_SYMBOL_GPL(of_pci_range_parser_one);
 312 
 313 /*
 314  * of_pci_range_to_resource - Create a resource from an of_pci_range
 315  * @range:      the PCI range that describes the resource
 316  * @np:         device node where the range belongs to
 317  * @res:        pointer to a valid resource that will be updated to
 318  *              reflect the values contained in the range.
 319  *
 320  * Returns EINVAL if the range cannot be converted to resource.
 321  *
 322  * Note that if the range is an IO range, the resource will be converted
 323  * using pci_address_to_pio() which can fail if it is called too early or
 324  * if the range cannot be matched to any host bridge IO space (our case here).
 325  * To guard against that we try to register the IO range first.
 326  * If that fails we know that pci_address_to_pio() will do too.
 327  */
 328 int of_pci_range_to_resource(struct of_pci_range *range,
 329                              struct device_node *np, struct resource *res)
 330 {
 331         int err;
 332         res->flags = range->flags;
 333         res->parent = res->child = res->sibling = NULL;
 334         res->name = np->full_name;
 335 
 336         if (res->flags & IORESOURCE_IO) {
 337                 unsigned long port;
 338                 err = pci_register_io_range(&np->fwnode, range->cpu_addr,
 339                                 range->size);
 340                 if (err)
 341                         goto invalid_range;
 342                 port = pci_address_to_pio(range->cpu_addr);
 343                 if (port == (unsigned long)-1) {
 344                         err = -EINVAL;
 345                         goto invalid_range;
 346                 }
 347                 res->start = port;
 348         } else {
 349                 if ((sizeof(resource_size_t) < 8) &&
 350                     upper_32_bits(range->cpu_addr)) {
 351                         err = -EINVAL;
 352                         goto invalid_range;
 353                 }
 354 
 355                 res->start = range->cpu_addr;
 356         }
 357         res->end = res->start + range->size - 1;
 358         return 0;
 359 
 360 invalid_range:
 361         res->start = (resource_size_t)OF_BAD_ADDR;
 362         res->end = (resource_size_t)OF_BAD_ADDR;
 363         return err;
 364 }
 365 EXPORT_SYMBOL(of_pci_range_to_resource);
 366 #endif /* CONFIG_PCI */
 367 
 368 /*
 369  * ISA bus specific translator
 370  */
 371 
 372 static int of_bus_isa_match(struct device_node *np)
 373 {
 374         return of_node_name_eq(np, "isa");
 375 }
 376 
 377 static void of_bus_isa_count_cells(struct device_node *child,
 378                                    int *addrc, int *sizec)
 379 {
 380         if (addrc)
 381                 *addrc = 2;
 382         if (sizec)
 383                 *sizec = 1;
 384 }
 385 
 386 static u64 of_bus_isa_map(__be32 *addr, const __be32 *range, int na, int ns,
 387                 int pna)
 388 {
 389         u64 cp, s, da;
 390 
 391         /* Check address type match */
 392         if ((addr[0] ^ range[0]) & cpu_to_be32(1))
 393                 return OF_BAD_ADDR;
 394 
 395         /* Read address values, skipping high cell */
 396         cp = of_read_number(range + 1, na - 1);
 397         s  = of_read_number(range + na + pna, ns);
 398         da = of_read_number(addr + 1, na - 1);
 399 
 400         pr_debug("ISA map, cp=%llx, s=%llx, da=%llx\n",
 401                  (unsigned long long)cp, (unsigned long long)s,
 402                  (unsigned long long)da);
 403 
 404         if (da < cp || da >= (cp + s))
 405                 return OF_BAD_ADDR;
 406         return da - cp;
 407 }
 408 
 409 static int of_bus_isa_translate(__be32 *addr, u64 offset, int na)
 410 {
 411         return of_bus_default_translate(addr + 1, offset, na - 1);
 412 }
 413 
 414 static unsigned int of_bus_isa_get_flags(const __be32 *addr)
 415 {
 416         unsigned int flags = 0;
 417         u32 w = be32_to_cpup(addr);
 418 
 419         if (w & 1)
 420                 flags |= IORESOURCE_IO;
 421         else
 422                 flags |= IORESOURCE_MEM;
 423         return flags;
 424 }
 425 
 426 /*
 427  * Array of bus specific translators
 428  */
 429 
 430 static struct of_bus of_busses[] = {
 431 #ifdef CONFIG_PCI
 432         /* PCI */
 433         {
 434                 .name = "pci",
 435                 .addresses = "assigned-addresses",
 436                 .match = of_bus_pci_match,
 437                 .count_cells = of_bus_pci_count_cells,
 438                 .map = of_bus_pci_map,
 439                 .translate = of_bus_pci_translate,
 440                 .get_flags = of_bus_pci_get_flags,
 441         },
 442 #endif /* CONFIG_PCI */
 443         /* ISA */
 444         {
 445                 .name = "isa",
 446                 .addresses = "reg",
 447                 .match = of_bus_isa_match,
 448                 .count_cells = of_bus_isa_count_cells,
 449                 .map = of_bus_isa_map,
 450                 .translate = of_bus_isa_translate,
 451                 .get_flags = of_bus_isa_get_flags,
 452         },
 453         /* Default */
 454         {
 455                 .name = "default",
 456                 .addresses = "reg",
 457                 .match = NULL,
 458                 .count_cells = of_bus_default_count_cells,
 459                 .map = of_bus_default_map,
 460                 .translate = of_bus_default_translate,
 461                 .get_flags = of_bus_default_get_flags,
 462         },
 463 };
 464 
 465 static struct of_bus *of_match_bus(struct device_node *np)
 466 {
 467         int i;
 468 
 469         for (i = 0; i < ARRAY_SIZE(of_busses); i++)
 470                 if (!of_busses[i].match || of_busses[i].match(np))
 471                         return &of_busses[i];
 472         BUG();
 473         return NULL;
 474 }
 475 
 476 static int of_empty_ranges_quirk(struct device_node *np)
 477 {
 478         if (IS_ENABLED(CONFIG_PPC)) {
 479                 /* To save cycles, we cache the result for global "Mac" setting */
 480                 static int quirk_state = -1;
 481 
 482                 /* PA-SEMI sdc DT bug */
 483                 if (of_device_is_compatible(np, "1682m-sdc"))
 484                         return true;
 485 
 486                 /* Make quirk cached */
 487                 if (quirk_state < 0)
 488                         quirk_state =
 489                                 of_machine_is_compatible("Power Macintosh") ||
 490                                 of_machine_is_compatible("MacRISC");
 491                 return quirk_state;
 492         }
 493         return false;
 494 }
 495 
 496 static int of_translate_one(struct device_node *parent, struct of_bus *bus,
 497                             struct of_bus *pbus, __be32 *addr,
 498                             int na, int ns, int pna, const char *rprop)
 499 {
 500         const __be32 *ranges;
 501         unsigned int rlen;
 502         int rone;
 503         u64 offset = OF_BAD_ADDR;
 504 
 505         /*
 506          * Normally, an absence of a "ranges" property means we are
 507          * crossing a non-translatable boundary, and thus the addresses
 508          * below the current cannot be converted to CPU physical ones.
 509          * Unfortunately, while this is very clear in the spec, it's not
 510          * what Apple understood, and they do have things like /uni-n or
 511          * /ht nodes with no "ranges" property and a lot of perfectly
 512          * useable mapped devices below them. Thus we treat the absence of
 513          * "ranges" as equivalent to an empty "ranges" property which means
 514          * a 1:1 translation at that level. It's up to the caller not to try
 515          * to translate addresses that aren't supposed to be translated in
 516          * the first place. --BenH.
 517          *
 518          * As far as we know, this damage only exists on Apple machines, so
 519          * This code is only enabled on powerpc. --gcl
 520          */
 521         ranges = of_get_property(parent, rprop, &rlen);
 522         if (ranges == NULL && !of_empty_ranges_quirk(parent)) {
 523                 pr_debug("no ranges; cannot translate\n");
 524                 return 1;
 525         }
 526         if (ranges == NULL || rlen == 0) {
 527                 offset = of_read_number(addr, na);
 528                 memset(addr, 0, pna * 4);
 529                 pr_debug("empty ranges; 1:1 translation\n");
 530                 goto finish;
 531         }
 532 
 533         pr_debug("walking ranges...\n");
 534 
 535         /* Now walk through the ranges */
 536         rlen /= 4;
 537         rone = na + pna + ns;
 538         for (; rlen >= rone; rlen -= rone, ranges += rone) {
 539                 offset = bus->map(addr, ranges, na, ns, pna);
 540                 if (offset != OF_BAD_ADDR)
 541                         break;
 542         }
 543         if (offset == OF_BAD_ADDR) {
 544                 pr_debug("not found !\n");
 545                 return 1;
 546         }
 547         memcpy(addr, ranges + na, 4 * pna);
 548 
 549  finish:
 550         of_dump_addr("parent translation for:", addr, pna);
 551         pr_debug("with offset: %llx\n", (unsigned long long)offset);
 552 
 553         /* Translate it into parent bus space */
 554         return pbus->translate(addr, offset, pna);
 555 }
 556 
 557 /*
 558  * Translate an address from the device-tree into a CPU physical address,
 559  * this walks up the tree and applies the various bus mappings on the
 560  * way.
 561  *
 562  * Note: We consider that crossing any level with #size-cells == 0 to mean
 563  * that translation is impossible (that is we are not dealing with a value
 564  * that can be mapped to a cpu physical address). This is not really specified
 565  * that way, but this is traditionally the way IBM at least do things
 566  *
 567  * Whenever the translation fails, the *host pointer will be set to the
 568  * device that had registered logical PIO mapping, and the return code is
 569  * relative to that node.
 570  */
 571 static u64 __of_translate_address(struct device_node *dev,
 572                                   struct device_node *(*get_parent)(const struct device_node *),
 573                                   const __be32 *in_addr, const char *rprop,
 574                                   struct device_node **host)
 575 {
 576         struct device_node *parent = NULL;
 577         struct of_bus *bus, *pbus;
 578         __be32 addr[OF_MAX_ADDR_CELLS];
 579         int na, ns, pna, pns;
 580         u64 result = OF_BAD_ADDR;
 581 
 582         pr_debug("** translation for device %pOF **\n", dev);
 583 
 584         /* Increase refcount at current level */
 585         of_node_get(dev);
 586 
 587         *host = NULL;
 588         /* Get parent & match bus type */
 589         parent = get_parent(dev);
 590         if (parent == NULL)
 591                 goto bail;
 592         bus = of_match_bus(parent);
 593 
 594         /* Count address cells & copy address locally */
 595         bus->count_cells(dev, &na, &ns);
 596         if (!OF_CHECK_COUNTS(na, ns)) {
 597                 pr_debug("Bad cell count for %pOF\n", dev);
 598                 goto bail;
 599         }
 600         memcpy(addr, in_addr, na * 4);
 601 
 602         pr_debug("bus is %s (na=%d, ns=%d) on %pOF\n",
 603             bus->name, na, ns, parent);
 604         of_dump_addr("translating address:", addr, na);
 605 
 606         /* Translate */
 607         for (;;) {
 608                 struct logic_pio_hwaddr *iorange;
 609 
 610                 /* Switch to parent bus */
 611                 of_node_put(dev);
 612                 dev = parent;
 613                 parent = get_parent(dev);
 614 
 615                 /* If root, we have finished */
 616                 if (parent == NULL) {
 617                         pr_debug("reached root node\n");
 618                         result = of_read_number(addr, na);
 619                         break;
 620                 }
 621 
 622                 /*
 623                  * For indirectIO device which has no ranges property, get
 624                  * the address from reg directly.
 625                  */
 626                 iorange = find_io_range_by_fwnode(&dev->fwnode);
 627                 if (iorange && (iorange->flags != LOGIC_PIO_CPU_MMIO)) {
 628                         result = of_read_number(addr + 1, na - 1);
 629                         pr_debug("indirectIO matched(%pOF) 0x%llx\n",
 630                                  dev, result);
 631                         *host = of_node_get(dev);
 632                         break;
 633                 }
 634 
 635                 /* Get new parent bus and counts */
 636                 pbus = of_match_bus(parent);
 637                 pbus->count_cells(dev, &pna, &pns);
 638                 if (!OF_CHECK_COUNTS(pna, pns)) {
 639                         pr_err("Bad cell count for %pOF\n", dev);
 640                         break;
 641                 }
 642 
 643                 pr_debug("parent bus is %s (na=%d, ns=%d) on %pOF\n",
 644                     pbus->name, pna, pns, parent);
 645 
 646                 /* Apply bus translation */
 647                 if (of_translate_one(dev, bus, pbus, addr, na, ns, pna, rprop))
 648                         break;
 649 
 650                 /* Complete the move up one level */
 651                 na = pna;
 652                 ns = pns;
 653                 bus = pbus;
 654 
 655                 of_dump_addr("one level translation:", addr, na);
 656         }
 657  bail:
 658         of_node_put(parent);
 659         of_node_put(dev);
 660 
 661         return result;
 662 }
 663 
 664 u64 of_translate_address(struct device_node *dev, const __be32 *in_addr)
 665 {
 666         struct device_node *host;
 667         u64 ret;
 668 
 669         ret = __of_translate_address(dev, of_get_parent,
 670                                      in_addr, "ranges", &host);
 671         if (host) {
 672                 of_node_put(host);
 673                 return OF_BAD_ADDR;
 674         }
 675 
 676         return ret;
 677 }
 678 EXPORT_SYMBOL(of_translate_address);
 679 
 680 static struct device_node *__of_get_dma_parent(const struct device_node *np)
 681 {
 682         struct of_phandle_args args;
 683         int ret, index;
 684 
 685         index = of_property_match_string(np, "interconnect-names", "dma-mem");
 686         if (index < 0)
 687                 return of_get_parent(np);
 688 
 689         ret = of_parse_phandle_with_args(np, "interconnects",
 690                                          "#interconnect-cells",
 691                                          index, &args);
 692         if (ret < 0)
 693                 return of_get_parent(np);
 694 
 695         return of_node_get(args.np);
 696 }
 697 
 698 u64 of_translate_dma_address(struct device_node *dev, const __be32 *in_addr)
 699 {
 700         struct device_node *host;
 701         u64 ret;
 702 
 703         ret = __of_translate_address(dev, __of_get_dma_parent,
 704                                      in_addr, "dma-ranges", &host);
 705 
 706         if (host) {
 707                 of_node_put(host);
 708                 return OF_BAD_ADDR;
 709         }
 710 
 711         return ret;
 712 }
 713 EXPORT_SYMBOL(of_translate_dma_address);
 714 
 715 const __be32 *of_get_address(struct device_node *dev, int index, u64 *size,
 716                     unsigned int *flags)
 717 {
 718         const __be32 *prop;
 719         unsigned int psize;
 720         struct device_node *parent;
 721         struct of_bus *bus;
 722         int onesize, i, na, ns;
 723 
 724         /* Get parent & match bus type */
 725         parent = of_get_parent(dev);
 726         if (parent == NULL)
 727                 return NULL;
 728         bus = of_match_bus(parent);
 729         bus->count_cells(dev, &na, &ns);
 730         of_node_put(parent);
 731         if (!OF_CHECK_ADDR_COUNT(na))
 732                 return NULL;
 733 
 734         /* Get "reg" or "assigned-addresses" property */
 735         prop = of_get_property(dev, bus->addresses, &psize);
 736         if (prop == NULL)
 737                 return NULL;
 738         psize /= 4;
 739 
 740         onesize = na + ns;
 741         for (i = 0; psize >= onesize; psize -= onesize, prop += onesize, i++)
 742                 if (i == index) {
 743                         if (size)
 744                                 *size = of_read_number(prop + na, ns);
 745                         if (flags)
 746                                 *flags = bus->get_flags(prop);
 747                         return prop;
 748                 }
 749         return NULL;
 750 }
 751 EXPORT_SYMBOL(of_get_address);
 752 
 753 static u64 of_translate_ioport(struct device_node *dev, const __be32 *in_addr,
 754                         u64 size)
 755 {
 756         u64 taddr;
 757         unsigned long port;
 758         struct device_node *host;
 759 
 760         taddr = __of_translate_address(dev, of_get_parent,
 761                                        in_addr, "ranges", &host);
 762         if (host) {
 763                 /* host-specific port access */
 764                 port = logic_pio_trans_hwaddr(&host->fwnode, taddr, size);
 765                 of_node_put(host);
 766         } else {
 767                 /* memory-mapped I/O range */
 768                 port = pci_address_to_pio(taddr);
 769         }
 770 
 771         if (port == (unsigned long)-1)
 772                 return OF_BAD_ADDR;
 773 
 774         return port;
 775 }
 776 
 777 static int __of_address_to_resource(struct device_node *dev,
 778                 const __be32 *addrp, u64 size, unsigned int flags,
 779                 const char *name, struct resource *r)
 780 {
 781         u64 taddr;
 782 
 783         if (flags & IORESOURCE_MEM)
 784                 taddr = of_translate_address(dev, addrp);
 785         else if (flags & IORESOURCE_IO)
 786                 taddr = of_translate_ioport(dev, addrp, size);
 787         else
 788                 return -EINVAL;
 789 
 790         if (taddr == OF_BAD_ADDR)
 791                 return -EINVAL;
 792         memset(r, 0, sizeof(struct resource));
 793 
 794         r->start = taddr;
 795         r->end = taddr + size - 1;
 796         r->flags = flags;
 797         r->name = name ? name : dev->full_name;
 798 
 799         return 0;
 800 }
 801 
 802 /**
 803  * of_address_to_resource - Translate device tree address and return as resource
 804  *
 805  * Note that if your address is a PIO address, the conversion will fail if
 806  * the physical address can't be internally converted to an IO token with
 807  * pci_address_to_pio(), that is because it's either called too early or it
 808  * can't be matched to any host bridge IO space
 809  */
 810 int of_address_to_resource(struct device_node *dev, int index,
 811                            struct resource *r)
 812 {
 813         const __be32    *addrp;
 814         u64             size;
 815         unsigned int    flags;
 816         const char      *name = NULL;
 817 
 818         addrp = of_get_address(dev, index, &size, &flags);
 819         if (addrp == NULL)
 820                 return -EINVAL;
 821 
 822         /* Get optional "reg-names" property to add a name to a resource */
 823         of_property_read_string_index(dev, "reg-names", index, &name);
 824 
 825         return __of_address_to_resource(dev, addrp, size, flags, name, r);
 826 }
 827 EXPORT_SYMBOL_GPL(of_address_to_resource);
 828 
 829 struct device_node *of_find_matching_node_by_address(struct device_node *from,
 830                                         const struct of_device_id *matches,
 831                                         u64 base_address)
 832 {
 833         struct device_node *dn = of_find_matching_node(from, matches);
 834         struct resource res;
 835 
 836         while (dn) {
 837                 if (!of_address_to_resource(dn, 0, &res) &&
 838                     res.start == base_address)
 839                         return dn;
 840 
 841                 dn = of_find_matching_node(dn, matches);
 842         }
 843 
 844         return NULL;
 845 }
 846 
 847 
 848 /**
 849  * of_iomap - Maps the memory mapped IO for a given device_node
 850  * @device:     the device whose io range will be mapped
 851  * @index:      index of the io range
 852  *
 853  * Returns a pointer to the mapped memory
 854  */
 855 void __iomem *of_iomap(struct device_node *np, int index)
 856 {
 857         struct resource res;
 858 
 859         if (of_address_to_resource(np, index, &res))
 860                 return NULL;
 861 
 862         return ioremap(res.start, resource_size(&res));
 863 }
 864 EXPORT_SYMBOL(of_iomap);
 865 
 866 /*
 867  * of_io_request_and_map - Requests a resource and maps the memory mapped IO
 868  *                         for a given device_node
 869  * @device:     the device whose io range will be mapped
 870  * @index:      index of the io range
 871  * @name:       name "override" for the memory region request or NULL
 872  *
 873  * Returns a pointer to the requested and mapped memory or an ERR_PTR() encoded
 874  * error code on failure. Usage example:
 875  *
 876  *      base = of_io_request_and_map(node, 0, "foo");
 877  *      if (IS_ERR(base))
 878  *              return PTR_ERR(base);
 879  */
 880 void __iomem *of_io_request_and_map(struct device_node *np, int index,
 881                                     const char *name)
 882 {
 883         struct resource res;
 884         void __iomem *mem;
 885 
 886         if (of_address_to_resource(np, index, &res))
 887                 return IOMEM_ERR_PTR(-EINVAL);
 888 
 889         if (!name)
 890                 name = res.name;
 891         if (!request_mem_region(res.start, resource_size(&res), name))
 892                 return IOMEM_ERR_PTR(-EBUSY);
 893 
 894         mem = ioremap(res.start, resource_size(&res));
 895         if (!mem) {
 896                 release_mem_region(res.start, resource_size(&res));
 897                 return IOMEM_ERR_PTR(-ENOMEM);
 898         }
 899 
 900         return mem;
 901 }
 902 EXPORT_SYMBOL(of_io_request_and_map);
 903 
 904 /**
 905  * of_dma_get_range - Get DMA range info
 906  * @np:         device node to get DMA range info
 907  * @dma_addr:   pointer to store initial DMA address of DMA range
 908  * @paddr:      pointer to store initial CPU address of DMA range
 909  * @size:       pointer to store size of DMA range
 910  *
 911  * Look in bottom up direction for the first "dma-ranges" property
 912  * and parse it.
 913  *  dma-ranges format:
 914  *      DMA addr (dma_addr)     : naddr cells
 915  *      CPU addr (phys_addr_t)  : pna cells
 916  *      size                    : nsize cells
 917  *
 918  * It returns -ENODEV if "dma-ranges" property was not found
 919  * for this device in DT.
 920  */
 921 int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *size)
 922 {
 923         struct device_node *node = of_node_get(np);
 924         const __be32 *ranges = NULL;
 925         int len, naddr, nsize, pna;
 926         int ret = 0;
 927         u64 dmaaddr;
 928 
 929         if (!node)
 930                 return -EINVAL;
 931 
 932         while (1) {
 933                 struct device_node *parent;
 934 
 935                 naddr = of_n_addr_cells(node);
 936                 nsize = of_n_size_cells(node);
 937 
 938                 parent = __of_get_dma_parent(node);
 939                 of_node_put(node);
 940 
 941                 node = parent;
 942                 if (!node)
 943                         break;
 944 
 945                 ranges = of_get_property(node, "dma-ranges", &len);
 946 
 947                 /* Ignore empty ranges, they imply no translation required */
 948                 if (ranges && len > 0)
 949                         break;
 950 
 951                 /*
 952                  * At least empty ranges has to be defined for parent node if
 953                  * DMA is supported
 954                  */
 955                 if (!ranges)
 956                         break;
 957         }
 958 
 959         if (!ranges) {
 960                 pr_debug("no dma-ranges found for node(%pOF)\n", np);
 961                 ret = -ENODEV;
 962                 goto out;
 963         }
 964 
 965         len /= sizeof(u32);
 966 
 967         pna = of_n_addr_cells(node);
 968 
 969         /* dma-ranges format:
 970          * DMA addr     : naddr cells
 971          * CPU addr     : pna cells
 972          * size         : nsize cells
 973          */
 974         dmaaddr = of_read_number(ranges, naddr);
 975         *paddr = of_translate_dma_address(np, ranges);
 976         if (*paddr == OF_BAD_ADDR) {
 977                 pr_err("translation of DMA address(%pad) to CPU address failed node(%pOF)\n",
 978                        dma_addr, np);
 979                 ret = -EINVAL;
 980                 goto out;
 981         }
 982         *dma_addr = dmaaddr;
 983 
 984         *size = of_read_number(ranges + naddr + pna, nsize);
 985 
 986         pr_debug("dma_addr(%llx) cpu_addr(%llx) size(%llx)\n",
 987                  *dma_addr, *paddr, *size);
 988 
 989 out:
 990         of_node_put(node);
 991 
 992         return ret;
 993 }
 994 EXPORT_SYMBOL_GPL(of_dma_get_range);
 995 
 996 /**
 997  * of_dma_is_coherent - Check if device is coherent
 998  * @np: device node
 999  *
1000  * It returns true if "dma-coherent" property was found
1001  * for this device in the DT, or if DMA is coherent by
1002  * default for OF devices on the current platform.
1003  */
1004 bool of_dma_is_coherent(struct device_node *np)
1005 {
1006         struct device_node *node = of_node_get(np);
1007 
1008         if (IS_ENABLED(CONFIG_OF_DMA_DEFAULT_COHERENT))
1009                 return true;
1010 
1011         while (node) {
1012                 if (of_property_read_bool(node, "dma-coherent")) {
1013                         of_node_put(node);
1014                         return true;
1015                 }
1016                 node = of_get_next_parent(node);
1017         }
1018         of_node_put(node);
1019         return false;
1020 }
1021 EXPORT_SYMBOL_GPL(of_dma_is_coherent);

/* [<][>][^][v][top][bottom][index][help] */