Message ID | 2f1db1ad423dcc845cab311432826da4976d2363.1532098561.git-series.maxime.ripard@bootlin.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Maxime, I love your patch! Yet something to improve: [auto build test ERROR on ] url: https://github.com/0day-ci/linux/commits/Maxime-Ripard/sunxi-Add-DT-representation-for-the-MBUS-controller/20180721-052652 base: config: x86_64-randconfig-x011-201828 (attached as .config) compiler: gcc-7 (Debian 7.3.0-16) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): drivers//of/address.c: In function 'of_translate_ioport': >> drivers//of/address.c:742:38: error: passing argument 2 of '__of_translate_address' from incompatible pointer type [-Werror=incompatible-pointer-types] taddr = __of_translate_address(dev, in_addr, "ranges", &host); ^~~~~~~ drivers//of/address.c:571:12: note: expected 'struct device_node *' but argument is of type 'const __be32 * {aka const unsigned int *}' static u64 __of_translate_address(struct device_node *dev, ^~~~~~~~~~~~~~~~~~~~~~ drivers//of/address.c:742:47: error: passing argument 3 of '__of_translate_address' from incompatible pointer type [-Werror=incompatible-pointer-types] taddr = __of_translate_address(dev, in_addr, "ranges", &host); ^~~~~~~~ drivers//of/address.c:571:12: note: expected 'const __be32 * {aka const unsigned int *}' but argument is of type 'char *' static u64 __of_translate_address(struct device_node *dev, ^~~~~~~~~~~~~~~~~~~~~~ drivers//of/address.c:742:57: error: passing argument 4 of '__of_translate_address' from incompatible pointer type [-Werror=incompatible-pointer-types] taddr = __of_translate_address(dev, in_addr, "ranges", &host); ^ drivers//of/address.c:571:12: note: expected 'const char *' but argument is of type 'struct device_node **' static u64 __of_translate_address(struct device_node *dev, ^~~~~~~~~~~~~~~~~~~~~~ >> drivers//of/address.c:742:10: error: too few arguments to function '__of_translate_address' taddr = __of_translate_address(dev, in_addr, "ranges", &host); ^~~~~~~~~~~~~~~~~~~~~~ drivers//of/address.c:571:12: note: declared here static u64 __of_translate_address(struct device_node *dev, ^~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +/__of_translate_address +742 drivers//of/address.c dbbdee94 Grant Likely 2010-06-08 556 dbbdee94 Grant Likely 2010-06-08 557 /* dbbdee94 Grant Likely 2010-06-08 558 * Translate an address from the device-tree into a CPU physical address, dbbdee94 Grant Likely 2010-06-08 559 * this walks up the tree and applies the various bus mappings on the dbbdee94 Grant Likely 2010-06-08 560 * way. dbbdee94 Grant Likely 2010-06-08 561 * dbbdee94 Grant Likely 2010-06-08 562 * Note: We consider that crossing any level with #size-cells == 0 to mean dbbdee94 Grant Likely 2010-06-08 563 * that translation is impossible (that is we are not dealing with a value dbbdee94 Grant Likely 2010-06-08 564 * that can be mapped to a cpu physical address). This is not really specified dbbdee94 Grant Likely 2010-06-08 565 * that way, but this is traditionally the way IBM at least do things 65af618d Zhichang Yuan 2018-03-15 566 * 65af618d Zhichang Yuan 2018-03-15 567 * Whenever the translation fails, the *host pointer will be set to the 65af618d Zhichang Yuan 2018-03-15 568 * device that had registered logical PIO mapping, and the return code is 65af618d Zhichang Yuan 2018-03-15 569 * relative to that node. dbbdee94 Grant Likely 2010-06-08 570 */ 47b1e689 Kim Phillips 2012-10-08 @571 static u64 __of_translate_address(struct device_node *dev, 0e8dae87 Maxime Ripard 2018-07-20 572 struct device_node *parent, 65af618d Zhichang Yuan 2018-03-15 573 const __be32 *in_addr, const char *rprop, 65af618d Zhichang Yuan 2018-03-15 574 struct device_node **host) dbbdee94 Grant Likely 2010-06-08 575 { dbbdee94 Grant Likely 2010-06-08 576 struct of_bus *bus, *pbus; 47b1e689 Kim Phillips 2012-10-08 577 __be32 addr[OF_MAX_ADDR_CELLS]; dbbdee94 Grant Likely 2010-06-08 578 int na, ns, pna, pns; dbbdee94 Grant Likely 2010-06-08 579 u64 result = OF_BAD_ADDR; dbbdee94 Grant Likely 2010-06-08 580 0d638a07 Rob Herring 2017-06-01 581 pr_debug("** translation for device %pOF **\n", dev); dbbdee94 Grant Likely 2010-06-08 582 dbbdee94 Grant Likely 2010-06-08 583 /* Increase refcount at current level */ dbbdee94 Grant Likely 2010-06-08 584 of_node_get(dev); dbbdee94 Grant Likely 2010-06-08 585 0e8dae87 Maxime Ripard 2018-07-20 586 if (!parent) { 65af618d Zhichang Yuan 2018-03-15 587 *host = NULL; dbbdee94 Grant Likely 2010-06-08 588 /* Get parent & match bus type */ dbbdee94 Grant Likely 2010-06-08 589 parent = of_get_parent(dev); dbbdee94 Grant Likely 2010-06-08 590 if (parent == NULL) dbbdee94 Grant Likely 2010-06-08 591 goto bail; 0e8dae87 Maxime Ripard 2018-07-20 592 } 0e8dae87 Maxime Ripard 2018-07-20 593 dbbdee94 Grant Likely 2010-06-08 594 bus = of_match_bus(parent); dbbdee94 Grant Likely 2010-06-08 595 59f5ca48 Andrew Murray 2012-12-13 596 /* Count address cells & copy address locally */ dbbdee94 Grant Likely 2010-06-08 597 bus->count_cells(dev, &na, &ns); dbbdee94 Grant Likely 2010-06-08 598 if (!OF_CHECK_COUNTS(na, ns)) { 0d638a07 Rob Herring 2017-06-01 599 pr_debug("Bad cell count for %pOF\n", dev); dbbdee94 Grant Likely 2010-06-08 600 goto bail; dbbdee94 Grant Likely 2010-06-08 601 } dbbdee94 Grant Likely 2010-06-08 602 memcpy(addr, in_addr, na * 4); dbbdee94 Grant Likely 2010-06-08 603 0d638a07 Rob Herring 2017-06-01 604 pr_debug("bus is %s (na=%d, ns=%d) on %pOF\n", 0d638a07 Rob Herring 2017-06-01 605 bus->name, na, ns, parent); 606ad42a Rob Herring 2016-06-15 606 of_dump_addr("translating address:", addr, na); dbbdee94 Grant Likely 2010-06-08 607 dbbdee94 Grant Likely 2010-06-08 608 /* Translate */ dbbdee94 Grant Likely 2010-06-08 609 for (;;) { 65af618d Zhichang Yuan 2018-03-15 610 struct logic_pio_hwaddr *iorange; 65af618d Zhichang Yuan 2018-03-15 611 dbbdee94 Grant Likely 2010-06-08 612 /* Switch to parent bus */ dbbdee94 Grant Likely 2010-06-08 613 of_node_put(dev); dbbdee94 Grant Likely 2010-06-08 614 dev = parent; dbbdee94 Grant Likely 2010-06-08 615 parent = of_get_parent(dev); dbbdee94 Grant Likely 2010-06-08 616 dbbdee94 Grant Likely 2010-06-08 617 /* If root, we have finished */ dbbdee94 Grant Likely 2010-06-08 618 if (parent == NULL) { 606ad42a Rob Herring 2016-06-15 619 pr_debug("reached root node\n"); dbbdee94 Grant Likely 2010-06-08 620 result = of_read_number(addr, na); dbbdee94 Grant Likely 2010-06-08 621 break; dbbdee94 Grant Likely 2010-06-08 622 } dbbdee94 Grant Likely 2010-06-08 623 65af618d Zhichang Yuan 2018-03-15 624 /* 65af618d Zhichang Yuan 2018-03-15 625 * For indirectIO device which has no ranges property, get 65af618d Zhichang Yuan 2018-03-15 626 * the address from reg directly. 65af618d Zhichang Yuan 2018-03-15 627 */ 65af618d Zhichang Yuan 2018-03-15 628 iorange = find_io_range_by_fwnode(&dev->fwnode); 65af618d Zhichang Yuan 2018-03-15 629 if (iorange && (iorange->flags != LOGIC_PIO_CPU_MMIO)) { 65af618d Zhichang Yuan 2018-03-15 630 result = of_read_number(addr + 1, na - 1); 65af618d Zhichang Yuan 2018-03-15 631 pr_debug("indirectIO matched(%pOF) 0x%llx\n", 65af618d Zhichang Yuan 2018-03-15 632 dev, result); 65af618d Zhichang Yuan 2018-03-15 633 *host = of_node_get(dev); 65af618d Zhichang Yuan 2018-03-15 634 break; 65af618d Zhichang Yuan 2018-03-15 635 } 65af618d Zhichang Yuan 2018-03-15 636 dbbdee94 Grant Likely 2010-06-08 637 /* Get new parent bus and counts */ dbbdee94 Grant Likely 2010-06-08 638 pbus = of_match_bus(parent); dbbdee94 Grant Likely 2010-06-08 639 pbus->count_cells(dev, &pna, &pns); dbbdee94 Grant Likely 2010-06-08 640 if (!OF_CHECK_COUNTS(pna, pns)) { 0d638a07 Rob Herring 2017-06-01 641 pr_err("Bad cell count for %pOF\n", dev); dbbdee94 Grant Likely 2010-06-08 642 break; dbbdee94 Grant Likely 2010-06-08 643 } dbbdee94 Grant Likely 2010-06-08 644 0d638a07 Rob Herring 2017-06-01 645 pr_debug("parent bus is %s (na=%d, ns=%d) on %pOF\n", 0d638a07 Rob Herring 2017-06-01 646 pbus->name, pna, pns, parent); dbbdee94 Grant Likely 2010-06-08 647 dbbdee94 Grant Likely 2010-06-08 648 /* Apply bus translation */ dbbdee94 Grant Likely 2010-06-08 649 if (of_translate_one(dev, bus, pbus, addr, na, ns, pna, rprop)) dbbdee94 Grant Likely 2010-06-08 650 break; dbbdee94 Grant Likely 2010-06-08 651 dbbdee94 Grant Likely 2010-06-08 652 /* Complete the move up one level */ dbbdee94 Grant Likely 2010-06-08 653 na = pna; dbbdee94 Grant Likely 2010-06-08 654 ns = pns; dbbdee94 Grant Likely 2010-06-08 655 bus = pbus; dbbdee94 Grant Likely 2010-06-08 656 606ad42a Rob Herring 2016-06-15 657 of_dump_addr("one level translation:", addr, na); dbbdee94 Grant Likely 2010-06-08 658 } dbbdee94 Grant Likely 2010-06-08 659 bail: dbbdee94 Grant Likely 2010-06-08 660 of_node_put(parent); dbbdee94 Grant Likely 2010-06-08 661 of_node_put(dev); dbbdee94 Grant Likely 2010-06-08 662 dbbdee94 Grant Likely 2010-06-08 663 return result; dbbdee94 Grant Likely 2010-06-08 664 } dbbdee94 Grant Likely 2010-06-08 665 0131d897 Sebastian Andrzej Siewior 2010-12-01 666 u64 of_translate_address(struct device_node *dev, const __be32 *in_addr) dbbdee94 Grant Likely 2010-06-08 667 { 65af618d Zhichang Yuan 2018-03-15 668 struct device_node *host; 65af618d Zhichang Yuan 2018-03-15 669 u64 ret; 65af618d Zhichang Yuan 2018-03-15 670 0e8dae87 Maxime Ripard 2018-07-20 671 ret = __of_translate_address(dev, NULL, in_addr, "ranges", &host); 65af618d Zhichang Yuan 2018-03-15 672 if (host) { 65af618d Zhichang Yuan 2018-03-15 673 of_node_put(host); 65af618d Zhichang Yuan 2018-03-15 674 return OF_BAD_ADDR; 65af618d Zhichang Yuan 2018-03-15 675 } 65af618d Zhichang Yuan 2018-03-15 676 65af618d Zhichang Yuan 2018-03-15 677 return ret; dbbdee94 Grant Likely 2010-06-08 678 } dbbdee94 Grant Likely 2010-06-08 679 EXPORT_SYMBOL(of_translate_address); dbbdee94 Grant Likely 2010-06-08 680 0131d897 Sebastian Andrzej Siewior 2010-12-01 681 u64 of_translate_dma_address(struct device_node *dev, const __be32 *in_addr) dbbdee94 Grant Likely 2010-06-08 682 { 65af618d Zhichang Yuan 2018-03-15 683 struct device_node *host; 65af618d Zhichang Yuan 2018-03-15 684 u64 ret; 65af618d Zhichang Yuan 2018-03-15 685 0e8dae87 Maxime Ripard 2018-07-20 686 ret = __of_translate_address(dev, NULL, in_addr, "dma-ranges", &host); 65af618d Zhichang Yuan 2018-03-15 687 65af618d Zhichang Yuan 2018-03-15 688 if (host) { 65af618d Zhichang Yuan 2018-03-15 689 of_node_put(host); 65af618d Zhichang Yuan 2018-03-15 690 return OF_BAD_ADDR; 65af618d Zhichang Yuan 2018-03-15 691 } 65af618d Zhichang Yuan 2018-03-15 692 65af618d Zhichang Yuan 2018-03-15 693 return ret; dbbdee94 Grant Likely 2010-06-08 694 } dbbdee94 Grant Likely 2010-06-08 695 EXPORT_SYMBOL(of_translate_dma_address); dbbdee94 Grant Likely 2010-06-08 696 0131d897 Sebastian Andrzej Siewior 2010-12-01 697 const __be32 *of_get_address(struct device_node *dev, int index, u64 *size, dbbdee94 Grant Likely 2010-06-08 698 unsigned int *flags) dbbdee94 Grant Likely 2010-06-08 699 { 0131d897 Sebastian Andrzej Siewior 2010-12-01 700 const __be32 *prop; dbbdee94 Grant Likely 2010-06-08 701 unsigned int psize; dbbdee94 Grant Likely 2010-06-08 702 struct device_node *parent; dbbdee94 Grant Likely 2010-06-08 703 struct of_bus *bus; dbbdee94 Grant Likely 2010-06-08 704 int onesize, i, na, ns; dbbdee94 Grant Likely 2010-06-08 705 dbbdee94 Grant Likely 2010-06-08 706 /* Get parent & match bus type */ dbbdee94 Grant Likely 2010-06-08 707 parent = of_get_parent(dev); dbbdee94 Grant Likely 2010-06-08 708 if (parent == NULL) dbbdee94 Grant Likely 2010-06-08 709 return NULL; dbbdee94 Grant Likely 2010-06-08 710 bus = of_match_bus(parent); dbbdee94 Grant Likely 2010-06-08 711 bus->count_cells(dev, &na, &ns); dbbdee94 Grant Likely 2010-06-08 712 of_node_put(parent); 5d61b165 Stephen Warren 2012-07-25 713 if (!OF_CHECK_ADDR_COUNT(na)) dbbdee94 Grant Likely 2010-06-08 714 return NULL; dbbdee94 Grant Likely 2010-06-08 715 dbbdee94 Grant Likely 2010-06-08 716 /* Get "reg" or "assigned-addresses" property */ dbbdee94 Grant Likely 2010-06-08 717 prop = of_get_property(dev, bus->addresses, &psize); dbbdee94 Grant Likely 2010-06-08 718 if (prop == NULL) dbbdee94 Grant Likely 2010-06-08 719 return NULL; dbbdee94 Grant Likely 2010-06-08 720 psize /= 4; dbbdee94 Grant Likely 2010-06-08 721 dbbdee94 Grant Likely 2010-06-08 722 onesize = na + ns; dbbdee94 Grant Likely 2010-06-08 723 for (i = 0; psize >= onesize; psize -= onesize, prop += onesize, i++) dbbdee94 Grant Likely 2010-06-08 724 if (i == index) { dbbdee94 Grant Likely 2010-06-08 725 if (size) dbbdee94 Grant Likely 2010-06-08 726 *size = of_read_number(prop + na, ns); dbbdee94 Grant Likely 2010-06-08 727 if (flags) dbbdee94 Grant Likely 2010-06-08 728 *flags = bus->get_flags(prop); dbbdee94 Grant Likely 2010-06-08 729 return prop; dbbdee94 Grant Likely 2010-06-08 730 } dbbdee94 Grant Likely 2010-06-08 731 return NULL; dbbdee94 Grant Likely 2010-06-08 732 } dbbdee94 Grant Likely 2010-06-08 733 EXPORT_SYMBOL(of_get_address); dbbdee94 Grant Likely 2010-06-08 734 65af618d Zhichang Yuan 2018-03-15 735 static u64 of_translate_ioport(struct device_node *dev, const __be32 *in_addr, 65af618d Zhichang Yuan 2018-03-15 736 u64 size) 65af618d Zhichang Yuan 2018-03-15 737 { 65af618d Zhichang Yuan 2018-03-15 738 u64 taddr; 65af618d Zhichang Yuan 2018-03-15 739 unsigned long port; 65af618d Zhichang Yuan 2018-03-15 740 struct device_node *host; 65af618d Zhichang Yuan 2018-03-15 741 65af618d Zhichang Yuan 2018-03-15 @742 taddr = __of_translate_address(dev, in_addr, "ranges", &host); 65af618d Zhichang Yuan 2018-03-15 743 if (host) { 65af618d Zhichang Yuan 2018-03-15 744 /* host-specific port access */ 65af618d Zhichang Yuan 2018-03-15 745 port = logic_pio_trans_hwaddr(&host->fwnode, taddr, size); 65af618d Zhichang Yuan 2018-03-15 746 of_node_put(host); 65af618d Zhichang Yuan 2018-03-15 747 } else { 65af618d Zhichang Yuan 2018-03-15 748 /* memory-mapped I/O range */ 65af618d Zhichang Yuan 2018-03-15 749 port = pci_address_to_pio(taddr); 65af618d Zhichang Yuan 2018-03-15 750 } 65af618d Zhichang Yuan 2018-03-15 751 65af618d Zhichang Yuan 2018-03-15 752 if (port == (unsigned long)-1) 65af618d Zhichang Yuan 2018-03-15 753 return OF_BAD_ADDR; 65af618d Zhichang Yuan 2018-03-15 754 65af618d Zhichang Yuan 2018-03-15 755 return port; 65af618d Zhichang Yuan 2018-03-15 756 } 65af618d Zhichang Yuan 2018-03-15 757 :::::: The code at line 742 was first introduced by commit :::::: 65af618d2c559f8eb19d80d03a23029651a59de4 of: Add missing I/O range exception for indirect-IO devices :::::: TO: Zhichang Yuan <yuanzhichang@hisilicon.com> :::::: CC: Bjorn Helgaas <helgaas@kernel.org> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Hi Maxime,
I love your patch! Perhaps something to improve:
[auto build test WARNING on ]
url: https://github.com/0day-ci/linux/commits/Maxime-Ripard/sunxi-Add-DT-representation-for-the-MBUS-controller/20180721-052652
base:
config: i386-randconfig-a1-201828 (attached as .config)
compiler: gcc-4.9 (Debian 4.9.4-2) 4.9.4
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
All warnings (new ones prefixed by >>):
drivers/of/address.c: In function 'of_translate_ioport':
>> drivers/of/address.c:742:38: warning: passing argument 2 of '__of_translate_address' from incompatible pointer type
taddr = __of_translate_address(dev, in_addr, "ranges", &host);
^
drivers/of/address.c:571:12: note: expected 'struct device_node *' but argument is of type 'const __be32 *'
static u64 __of_translate_address(struct device_node *dev,
^
drivers/of/address.c:742:47: warning: passing argument 3 of '__of_translate_address' from incompatible pointer type
taddr = __of_translate_address(dev, in_addr, "ranges", &host);
^
drivers/of/address.c:571:12: note: expected 'const __be32 *' but argument is of type 'char *'
static u64 __of_translate_address(struct device_node *dev,
^
drivers/of/address.c:742:57: warning: passing argument 4 of '__of_translate_address' from incompatible pointer type
taddr = __of_translate_address(dev, in_addr, "ranges", &host);
^
drivers/of/address.c:571:12: note: expected 'const char *' but argument is of type 'struct device_node **'
static u64 __of_translate_address(struct device_node *dev,
^
drivers/of/address.c:742:10: error: too few arguments to function '__of_translate_address'
taddr = __of_translate_address(dev, in_addr, "ranges", &host);
^
drivers/of/address.c:571:12: note: declared here
static u64 __of_translate_address(struct device_node *dev,
^
vim +/__of_translate_address +742 drivers/of/address.c
dbbdee94 Grant Likely 2010-06-08 734
65af618d Zhichang Yuan 2018-03-15 735 static u64 of_translate_ioport(struct device_node *dev, const __be32 *in_addr,
65af618d Zhichang Yuan 2018-03-15 736 u64 size)
65af618d Zhichang Yuan 2018-03-15 737 {
65af618d Zhichang Yuan 2018-03-15 738 u64 taddr;
65af618d Zhichang Yuan 2018-03-15 739 unsigned long port;
65af618d Zhichang Yuan 2018-03-15 740 struct device_node *host;
65af618d Zhichang Yuan 2018-03-15 741
65af618d Zhichang Yuan 2018-03-15 @742 taddr = __of_translate_address(dev, in_addr, "ranges", &host);
65af618d Zhichang Yuan 2018-03-15 743 if (host) {
65af618d Zhichang Yuan 2018-03-15 744 /* host-specific port access */
65af618d Zhichang Yuan 2018-03-15 745 port = logic_pio_trans_hwaddr(&host->fwnode, taddr, size);
65af618d Zhichang Yuan 2018-03-15 746 of_node_put(host);
65af618d Zhichang Yuan 2018-03-15 747 } else {
65af618d Zhichang Yuan 2018-03-15 748 /* memory-mapped I/O range */
65af618d Zhichang Yuan 2018-03-15 749 port = pci_address_to_pio(taddr);
65af618d Zhichang Yuan 2018-03-15 750 }
65af618d Zhichang Yuan 2018-03-15 751
65af618d Zhichang Yuan 2018-03-15 752 if (port == (unsigned long)-1)
65af618d Zhichang Yuan 2018-03-15 753 return OF_BAD_ADDR;
65af618d Zhichang Yuan 2018-03-15 754
65af618d Zhichang Yuan 2018-03-15 755 return port;
65af618d Zhichang Yuan 2018-03-15 756 }
65af618d Zhichang Yuan 2018-03-15 757
:::::: The code at line 742 was first introduced by commit
:::::: 65af618d2c559f8eb19d80d03a23029651a59de4 of: Add missing I/O range exception for indirect-IO devices
:::::: TO: Zhichang Yuan <yuanzhichang@hisilicon.com>
:::::: CC: Bjorn Helgaas <helgaas@kernel.org>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
Hi Maxime, I love your patch! Perhaps something to improve: [auto build test WARNING on ] url: https://github.com/0day-ci/linux/commits/Maxime-Ripard/sunxi-Add-DT-representation-for-the-MBUS-controller/20180721-052652 base: reproduce: # apt-get install sparse make ARCH=x86_64 allmodconfig make C=1 CF=-D__CHECK_ENDIAN__ sparse warnings: (new ones prefixed by >>) >> drivers/of/address.c:742:45: sparse: incorrect type in argument 2 (different base types) @@ expected struct device_node *[assigned] parent @@ got restrstruct device_node *[assigned] parent @@ drivers/of/address.c:742:45: expected struct device_node *[assigned] parent drivers/of/address.c:742:45: got restricted __be32 const [usertype] *in_addr >> drivers/of/address.c:742:54: sparse: incorrect type in argument 3 (different base types) @@ expected restricted __be32 const [usertype] *in_addr @@ got ype] *in_addr @@ drivers/of/address.c:742:54: expected restricted __be32 const [usertype] *in_addr drivers/of/address.c:742:54: got char *<noident> >> drivers/of/address.c:742:65: sparse: incorrect type in argument 4 (different base types) @@ expected char const *rprop @@ got struct dechar const *rprop @@ drivers/of/address.c:742:65: expected char const *rprop drivers/of/address.c:742:65: got struct device_node **<noident> >> drivers/of/address.c:742:39: sparse: not enough arguments for function __of_translate_address drivers/of/address.c: In function 'of_translate_ioport': drivers/of/address.c:742:38: error: passing argument 2 of '__of_translate_address' from incompatible pointer type [-Werror=incompatible-pointer-types] taddr = __of_translate_address(dev, in_addr, "ranges", &host); ^~~~~~~ drivers/of/address.c:571:12: note: expected 'struct device_node *' but argument is of type 'const __be32 * {aka const unsigned int *}' static u64 __of_translate_address(struct device_node *dev, ^~~~~~~~~~~~~~~~~~~~~~ drivers/of/address.c:742:47: error: passing argument 3 of '__of_translate_address' from incompatible pointer type [-Werror=incompatible-pointer-types] taddr = __of_translate_address(dev, in_addr, "ranges", &host); ^~~~~~~~ drivers/of/address.c:571:12: note: expected 'const __be32 * {aka const unsigned int *}' but argument is of type 'char *' static u64 __of_translate_address(struct device_node *dev, ^~~~~~~~~~~~~~~~~~~~~~ drivers/of/address.c:742:57: error: passing argument 4 of '__of_translate_address' from incompatible pointer type [-Werror=incompatible-pointer-types] taddr = __of_translate_address(dev, in_addr, "ranges", &host); ^ drivers/of/address.c:571:12: note: expected 'const char *' but argument is of type 'struct device_node **' static u64 __of_translate_address(struct device_node *dev, ^~~~~~~~~~~~~~~~~~~~~~ drivers/of/address.c:742:10: error: too few arguments to function '__of_translate_address' taddr = __of_translate_address(dev, in_addr, "ranges", &host); ^~~~~~~~~~~~~~~~~~~~~~ drivers/of/address.c:571:12: note: declared here static u64 __of_translate_address(struct device_node *dev, ^~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +742 drivers/of/address.c dbbdee94 Grant Likely 2010-06-08 734 65af618d Zhichang Yuan 2018-03-15 735 static u64 of_translate_ioport(struct device_node *dev, const __be32 *in_addr, 65af618d Zhichang Yuan 2018-03-15 736 u64 size) 65af618d Zhichang Yuan 2018-03-15 737 { 65af618d Zhichang Yuan 2018-03-15 738 u64 taddr; 65af618d Zhichang Yuan 2018-03-15 739 unsigned long port; 65af618d Zhichang Yuan 2018-03-15 740 struct device_node *host; 65af618d Zhichang Yuan 2018-03-15 741 65af618d Zhichang Yuan 2018-03-15 @742 taddr = __of_translate_address(dev, in_addr, "ranges", &host); 65af618d Zhichang Yuan 2018-03-15 743 if (host) { 65af618d Zhichang Yuan 2018-03-15 744 /* host-specific port access */ 65af618d Zhichang Yuan 2018-03-15 745 port = logic_pio_trans_hwaddr(&host->fwnode, taddr, size); 65af618d Zhichang Yuan 2018-03-15 746 of_node_put(host); 65af618d Zhichang Yuan 2018-03-15 747 } else { 65af618d Zhichang Yuan 2018-03-15 748 /* memory-mapped I/O range */ 65af618d Zhichang Yuan 2018-03-15 749 port = pci_address_to_pio(taddr); 65af618d Zhichang Yuan 2018-03-15 750 } 65af618d Zhichang Yuan 2018-03-15 751 65af618d Zhichang Yuan 2018-03-15 752 if (port == (unsigned long)-1) 65af618d Zhichang Yuan 2018-03-15 753 return OF_BAD_ADDR; 65af618d Zhichang Yuan 2018-03-15 754 65af618d Zhichang Yuan 2018-03-15 755 return port; 65af618d Zhichang Yuan 2018-03-15 756 } 65af618d Zhichang Yuan 2018-03-15 757 :::::: The code at line 742 was first introduced by commit :::::: 65af618d2c559f8eb19d80d03a23029651a59de4 of: Add missing I/O range exception for indirect-IO devices :::::: TO: Zhichang Yuan <yuanzhichang@hisilicon.com> :::::: CC: Bjorn Helgaas <helgaas@kernel.org> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
diff --git a/drivers/of/address.c b/drivers/of/address.c index 53349912ac75..9e637bf8102c 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c @@ -569,10 +569,10 @@ static int of_translate_one(struct device_node *parent, struct of_bus *bus, * relative to that node. */ static u64 __of_translate_address(struct device_node *dev, + struct device_node *parent, const __be32 *in_addr, const char *rprop, struct device_node **host) { - struct device_node *parent = NULL; struct of_bus *bus, *pbus; __be32 addr[OF_MAX_ADDR_CELLS]; int na, ns, pna, pns; @@ -583,11 +583,14 @@ static u64 __of_translate_address(struct device_node *dev, /* Increase refcount at current level */ of_node_get(dev); - *host = NULL; - /* Get parent & match bus type */ - parent = of_get_parent(dev); - if (parent == NULL) - goto bail; + if (!parent) { + *host = NULL; + /* Get parent & match bus type */ + parent = of_get_parent(dev); + if (parent == NULL) + goto bail; + } + bus = of_match_bus(parent); /* Count address cells & copy address locally */ @@ -665,7 +668,7 @@ u64 of_translate_address(struct device_node *dev, const __be32 *in_addr) struct device_node *host; u64 ret; - ret = __of_translate_address(dev, in_addr, "ranges", &host); + ret = __of_translate_address(dev, NULL, in_addr, "ranges", &host); if (host) { of_node_put(host); return OF_BAD_ADDR; @@ -680,7 +683,7 @@ u64 of_translate_dma_address(struct device_node *dev, const __be32 *in_addr) struct device_node *host; u64 ret; - ret = __of_translate_address(dev, in_addr, "dma-ranges", &host); + ret = __of_translate_address(dev, NULL, in_addr, "dma-ranges", &host); if (host) { of_node_put(host);
The __of_translate_address function is used to translate the device tree addresses to physical addresses using the various ranges property to create the offset. However, it's shared between the CPU addresses (based on the ranges property) and the DMA addresses (based on dma-ranges). Since we're going to add support for a DMA parent node that is not the DT parent node, we need to change the logic a bit to have an optional parent node that we should use. Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com> --- drivers/of/address.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-)