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