lkml.org 
[lkml]   [2018]   [Jan]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v11 5/9] OF: Add missing I/O range exception for indirect-IO devices
    Hi Zhichang,

    Thank you for the patch! Yet something to improve:

    [auto build test ERROR on linus/master]
    [also build test ERROR on v4.15-rc8 next-20180119]
    [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

    url: https://github.com/0day-ci/linux/commits/John-Garry/LPC-legacy-ISA-I-O-support/20180121-194832
    config: tile-allyesconfig (attached as .config)
    compiler: tilegx-linux-gcc (GCC) 7.2.0
    reproduce:
    wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
    chmod +x ~/bin/make.cross
    # save the attached .config to linux build tree
    make.cross ARCH=tile

    All errors (new ones prefixed by >>):

    drivers//of/address.c: In function '__of_translate_address':
    drivers//of/address.c:625:13: error: implicit declaration of function 'find_io_range_by_fwnode' [-Werror=implicit-function-declaration]
    iorange = find_io_range_by_fwnode(&dev->fwnode);
    ^~~~~~~~~~~~~~~~~~~~~~~
    drivers//of/address.c:625:11: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
    iorange = find_io_range_by_fwnode(&dev->fwnode);
    ^
    drivers//of/address.c:626:26: error: dereferencing pointer to incomplete type 'struct logic_pio_hwaddr'
    if (iorange && (iorange->flags != PIO_CPU_MMIO)) {
    ^~
    >> drivers//of/address.c:626:37: error: 'PIO_CPU_MMIO' undeclared (first use in this function); did you mean 'CHIP_HAS_MMIO'?
    if (iorange && (iorange->flags != PIO_CPU_MMIO)) {
    ^~~~~~~~~~~~
    CHIP_HAS_MMIO
    drivers//of/address.c:626:37: note: each undeclared identifier is reported only once for each function it appears in
    drivers//of/address.c: In function 'of_translate_ioport':
    drivers//of/address.c:742:10: error: implicit declaration of function 'logic_pio_trans_hwaddr' [-Werror=implicit-function-declaration]
    port = logic_pio_trans_hwaddr(&host->fwnode, taddr, size);
    ^~~~~~~~~~~~~~~~~~~~~~
    cc1: some warnings being treated as errors

    vim +626 drivers//of/address.c

    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 const __be32 *in_addr, const char *rprop,
    573 struct device_node **host)
    574 {
    575 struct device_node *parent = NULL;
    576 struct of_bus *bus, *pbus;
    577 __be32 addr[OF_MAX_ADDR_CELLS];
    578 int na, ns, pna, pns;
    579 u64 result = OF_BAD_ADDR;
    580
    581 pr_debug("** translation for device %pOF **\n", dev);
    582
    583 /* Increase refcount at current level */
    584 of_node_get(dev);
    585
    586 *host = NULL;
    587 /* Get parent & match bus type */
    588 parent = of_get_parent(dev);
    589 if (parent == NULL)
    590 goto bail;
    591 bus = of_match_bus(parent);
    592
    593 /* Count address cells & copy address locally */
    594 bus->count_cells(dev, &na, &ns);
    595 if (!OF_CHECK_COUNTS(na, ns)) {
    596 pr_debug("Bad cell count for %pOF\n", dev);
    597 goto bail;
    598 }
    599 memcpy(addr, in_addr, na * 4);
    600
    601 pr_debug("bus is %s (na=%d, ns=%d) on %pOF\n",
    602 bus->name, na, ns, parent);
    603 of_dump_addr("translating address:", addr, na);
    604
    605 /* Translate */
    606 for (;;) {
    607 struct logic_pio_hwaddr *iorange;
    608
    609 /* Switch to parent bus */
    610 of_node_put(dev);
    611 dev = parent;
    612 parent = of_get_parent(dev);
    613
    614 /* If root, we have finished */
    615 if (parent == NULL) {
    616 pr_debug("reached root node\n");
    617 result = of_read_number(addr, na);
    618 break;
    619 }
    620
    621 /*
    622 * For indirectIO device which has no ranges property, get
    623 * the address from reg directly.
    624 */
    > 625 iorange = find_io_range_by_fwnode(&dev->fwnode);
    > 626 if (iorange && (iorange->flags != PIO_CPU_MMIO)) {
    627 result = of_read_number(addr + 1, na - 1);
    628 pr_debug("indirectIO matched(%s) 0x%llx\n",
    629 of_node_full_name(dev), result);
    630 *host = of_node_get(dev);
    631 break;
    632 }
    633
    634 /* Get new parent bus and counts */
    635 pbus = of_match_bus(parent);
    636 pbus->count_cells(dev, &pna, &pns);
    637 if (!OF_CHECK_COUNTS(pna, pns)) {
    638 pr_err("Bad cell count for %pOF\n", dev);
    639 break;
    640 }
    641
    642 pr_debug("parent bus is %s (na=%d, ns=%d) on %pOF\n",
    643 pbus->name, pna, pns, parent);
    644
    645 /* Apply bus translation */
    646 if (of_translate_one(dev, bus, pbus, addr, na, ns, pna, rprop))
    647 break;
    648
    649 /* Complete the move up one level */
    650 na = pna;
    651 ns = pns;
    652 bus = pbus;
    653
    654 of_dump_addr("one level translation:", addr, na);
    655 }
    656 bail:
    657 of_node_put(parent);
    658 of_node_put(dev);
    659
    660 return result;
    661 }
    662

    ---
    0-DAY kernel test infrastructure Open Source Technology Center
    https://lists.01.org/pipermail/kbuild-all Intel Corporation
    [unhandled content-type:application/gzip]
    \
     
     \ /
      Last update: 2018-01-21 16:54    [W:5.130 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site