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