Re: [PATCH v11 5/9] OF: Add missing I/O range exception for indirect-IO devices

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux