lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Sun, 20 May 2018 11:31:49 +0800
From:   kbuild test robot <lkp@...el.com>
To:     Andrea Greco <andrea.greco.gapmilano@...il.com>
Cc:     kbuild-all@...org, tobin@...orbit.com,
        andrea.greco.gapmilano@...il.com, Andrea Greco <a.greco@...gma.it>,
        Michael Grzeschik <m.grzeschik@...gutronix.de>,
        linux-kernel@...r.kernel.org, netdev@...r.kernel.org
Subject: Re: [PATCH 1/4] arcnet: com20020: Add com20020 io mapped version

Hi Andrea,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]
[also build test WARNING on v4.17-rc5 next-20180517]
[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/Andrea-Greco/arcnet-com20020-Add-com20020-io-mapped-version/20180520-083936
reproduce:
        # apt-get install sparse
        make ARCH=x86_64 allmodconfig
        make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

   drivers/net/arcnet/com90xx.c:484:13: sparse: undefined identifier 'arcnet_readb'
   drivers/net/arcnet/com90xx.c:534:28: sparse: undefined identifier 'arcnet_readb'
   drivers/net/arcnet/com90xx.c:613:13: sparse: undefined identifier 'arcnet_readb'
   drivers/net/arcnet/com90xx.c:233:21: sparse: undefined identifier 'arcnet_readb'
   drivers/net/arcnet/com90xx.c:234:25: sparse: undefined identifier 'arcnet_readb'
   drivers/net/arcnet/com90xx.c:247:17: sparse: undefined identifier 'arcnet_writeb'
   drivers/net/arcnet/com90xx.c:248:21: sparse: undefined identifier 'arcnet_readb'
   drivers/net/arcnet/com90xx.c:391:29: sparse: undefined identifier 'arcnet_readb'
   drivers/net/arcnet/com90xx.c:405:33: sparse: undefined identifier 'arcnet_readb'
   drivers/net/arcnet/com90xx.c:428:17: sparse: undefined identifier 'arcnet_writeb'
   drivers/net/arcnet/com90xx.c:446:21: sparse: undefined identifier 'arcnet_readb'
>> drivers/net/arcnet/com90xx.c:233:33: sparse: call with no type!
   drivers/net/arcnet/com90xx.c:234:25: sparse: call with no type!
   drivers/net/arcnet/com90xx.c:247:30: sparse: call with no type!
   drivers/net/arcnet/com90xx.c:248:33: sparse: call with no type!
   drivers/net/arcnet/com90xx.c:391:41: sparse: call with no type!
   drivers/net/arcnet/com90xx.c:405:33: sparse: call with no type!
   drivers/net/arcnet/com90xx.c:428:30: sparse: call with no type!
   drivers/net/arcnet/com90xx.c:446:33: sparse: call with no type!
   drivers/net/arcnet/com90xx.c:484:25: sparse: call with no type!
   drivers/net/arcnet/com90xx.c:485:25: sparse: call with no type!
   drivers/net/arcnet/com90xx.c:486:25: sparse: call with no type!
   drivers/net/arcnet/com90xx.c:534:40: sparse: call with no type!
   drivers/net/arcnet/com90xx.c:613:25: sparse: call with no type!
>> drivers/net/arcnet/com90xx.c:615:25: sparse: unknown expression (4 0)
>> drivers/net/arcnet/com90xx.c:615:25: sparse: unknown expression (4 0)
>> drivers/net/arcnet/com90xx.c:615:25: sparse: unknown expression (4 0)
>> drivers/net/arcnet/com90xx.c:615:25: sparse: unknown expression (4 0)
   In file included from drivers/net/arcnet/com90xx.c:40:0:
   drivers/net/arcnet/com90xx.c: In function 'com90xx_probe':
   drivers/net/arcnet/arcdevice.h:376:10: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     ioread8((void __iomem *)(addr) + BUS_ALIGN * offset)
             ^
   drivers/net/arcnet/com90xx.c:161:7: note: in expansion of macro 'arcnet_inb'
      if (arcnet_inb(ioaddr, COM9026_REG_R_STATUS) == 0xFF) {
          ^~~~~~~~~~
   drivers/net/arcnet/arcdevice.h:376:10: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     ioread8((void __iomem *)(addr) + BUS_ALIGN * offset)
             ^
   drivers/net/arcnet/com90xx.c:171:3: note: in expansion of macro 'arcnet_inb'
      arcnet_inb(ioaddr, COM9026_REG_R_RESET);
      ^~~~~~~~~~
   drivers/net/arcnet/com90xx.c:233:7: error: implicit declaration of function 'arcnet_readb'; did you mean 'arcnet_outsb'? [-Werror=implicit-function-declaration]
      if (arcnet_readb(base, COM9026_REG_R_STATUS) != TESTvalue) {
          ^~~~~~~~~~~~
          arcnet_outsb
   drivers/net/arcnet/com90xx.c:247:3: error: implicit declaration of function 'arcnet_writeb'; did you mean 'arcnet_outsb'? [-Werror=implicit-function-declaration]
      arcnet_writeb(0x42, base, COM9026_REG_W_INTMASK);
      ^~~~~~~~~~~~~
      arcnet_outsb
   In file included from drivers/net/arcnet/com90xx.c:40:0:
   drivers/net/arcnet/arcdevice.h:376:10: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     ioread8((void __iomem *)(addr) + BUS_ALIGN * offset)
             ^
   drivers/net/arcnet/com90xx.c:312:12: note: in expansion of macro 'arcnet_inb'
      status = arcnet_inb(ioaddr, COM9026_REG_R_STATUS);
               ^~~~~~~~~~
   drivers/net/arcnet/arcdevice.h:379:18: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     iowrite8(value, (void __iomem *)addr + BUS_ALIGN * offset)
                     ^
   drivers/net/arcnet/com90xx.c:324:3: note: in expansion of macro 'arcnet_outb'
      arcnet_outb(CFLAGScmd | RESETclear | CONFIGclear,
      ^~~~~~~~~~~
   drivers/net/arcnet/arcdevice.h:376:10: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     ioread8((void __iomem *)(addr) + BUS_ALIGN * offset)
             ^
   drivers/net/arcnet/com90xx.c:326:12: note: in expansion of macro 'arcnet_inb'
      status = arcnet_inb(ioaddr, COM9026_REG_R_STATUS);
               ^~~~~~~~~~
   drivers/net/arcnet/arcdevice.h:379:18: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     iowrite8(value, (void __iomem *)addr + BUS_ALIGN * offset)
                     ^
   drivers/net/arcnet/com90xx.c:346:4: note: in expansion of macro 'arcnet_outb'
       arcnet_outb(NORXflag, ioaddr, COM9026_REG_W_INTMASK);
       ^~~~~~~~~~~
   drivers/net/arcnet/arcdevice.h:379:18: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     iowrite8(value, (void __iomem *)addr + BUS_ALIGN * offset)
                     ^
   drivers/net/arcnet/com90xx.c:348:4: note: in expansion of macro 'arcnet_outb'
       arcnet_outb(0, ioaddr, COM9026_REG_W_INTMASK);
       ^~~~~~~~~~~
   drivers/net/arcnet/arcdevice.h:376:10: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     ioread8((void __iomem *)(addr) + BUS_ALIGN * offset)
             ^
   drivers/net/arcnet/com90xx.c:383:3: note: in expansion of macro 'arcnet_inb'
      arcnet_inb(ioaddr, COM9026_REG_R_RESET);
      ^~~~~~~~~~
   drivers/net/arcnet/com90xx.c: In function 'com90xx_command':
   drivers/net/arcnet/arcdevice.h:379:18: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     iowrite8(value, (void __iomem *)addr + BUS_ALIGN * offset)
                     ^
   drivers/net/arcnet/com90xx.c:565:2: note: in expansion of macro 'arcnet_outb'
     arcnet_outb(cmd, ioaddr, COM9026_REG_W_COMMAND);
     ^~~~~~~~~~~
   drivers/net/arcnet/com90xx.c: In function 'com90xx_status':
   drivers/net/arcnet/arcdevice.h:376:10: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     ioread8((void __iomem *)(addr) + BUS_ALIGN * offset)
             ^
   drivers/net/arcnet/com90xx.c:572:9: note: in expansion of macro 'arcnet_inb'
     return arcnet_inb(ioaddr, COM9026_REG_R_STATUS);
            ^~~~~~~~~~
   drivers/net/arcnet/com90xx.c: In function 'com90xx_setmask':
   drivers/net/arcnet/arcdevice.h:379:18: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     iowrite8(value, (void __iomem *)addr + BUS_ALIGN * offset)
                     ^
   drivers/net/arcnet/com90xx.c:579:2: note: in expansion of macro 'arcnet_outb'
     arcnet_outb(mask, ioaddr, COM9026_REG_W_INTMASK);
     ^~~~~~~~~~~
   drivers/net/arcnet/com90xx.c: In function 'com90xx_reset':
   drivers/net/arcnet/arcdevice.h:376:10: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     ioread8((void __iomem *)(addr) + BUS_ALIGN * offset)
             ^
   drivers/net/arcnet/arcdevice.h:88:28: note: in expansion of macro 'arcnet_inb'
       netdev_warn(dev, fmt, ##__VA_ARGS__);  115-                            ^~~~~~~~~~~
   drivers/net/arcnet/com90xx.c:594:2: note: in expansion of macro 'arc_printk'
     arc_printk(D_INIT, dev, "Resetting (status=%02Xh)n",
     ^~~~~~~~~~
   drivers/net/arcnet/arcdevice.h:376:10: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     ioread8((void __iomem *)(addr) + BUS_ALIGN * offset)
             ^
   drivers/net/arcnet/arcdevice.h:90:28: note: in expansion of macro 'arcnet_inb'
       netdev_info(dev, fmt, ##__VA_ARGS__);  124-                            ^~~~~~~~~~~
   drivers/net/arcnet/com90xx.c:594:2: note: in expansion of macro 'arc_printk'
     arc_printk(D_INIT, dev, "Resetting (status=%02Xh)n",
     ^~~~~~~~~~
   drivers/net/arcnet/arcdevice.h:376:10: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
--
   drivers/net/arcnet/arc-rimi.c:147:9: sparse: undefined identifier 'arcnet_writeb'
   drivers/net/arcnet/arc-rimi.c:148:9: sparse: undefined identifier 'arcnet_writeb'
   drivers/net/arcnet/arc-rimi.c:158:13: sparse: undefined identifier 'arcnet_readb'
   drivers/net/arcnet/arc-rimi.c:210:28: sparse: undefined identifier 'arcnet_readb'
   drivers/net/arcnet/arc-rimi.c:284:9: sparse: undefined identifier 'arcnet_writeb'
   drivers/net/arcnet/arc-rimi.c:276:16: sparse: undefined identifier 'arcnet_readb'
   drivers/net/arcnet/arc-rimi.c:268:9: sparse: undefined identifier 'arcnet_writeb'
   drivers/net/arcnet/arc-rimi.c:245:9: sparse: undefined identifier 'arcnet_readb'
   drivers/net/arcnet/arc-rimi.c:245:9: sparse: undefined identifier 'arcnet_readb'
   drivers/net/arcnet/arc-rimi.c:245:9: sparse: undefined identifier 'arcnet_readb'
   drivers/net/arcnet/arc-rimi.c:249:17: sparse: undefined identifier 'arcnet_writeb'
   drivers/net/arcnet/arc-rimi.c:253:9: sparse: undefined identifier 'arcnet_writeb'
   drivers/net/arcnet/arc-rimi.c:254:9: sparse: undefined identifier 'arcnet_writeb'
   drivers/net/arcnet/arc-rimi.c:257:9: sparse: undefined identifier 'arcnet_writeb'
   drivers/net/arcnet/arc-rimi.c:109:21: sparse: undefined identifier 'arcnet_readb'
>> drivers/net/arcnet/arc-rimi.c:109:33: sparse: call with no type!
   drivers/net/arcnet/arc-rimi.c:147:22: sparse: call with no type!
   drivers/net/arcnet/arc-rimi.c:148:22: sparse: call with no type!
   drivers/net/arcnet/arc-rimi.c:158:25: sparse: call with no type!
   drivers/net/arcnet/arc-rimi.c:159:25: sparse: call with no type!
   drivers/net/arcnet/arc-rimi.c:160:25: sparse: call with no type!
   drivers/net/arcnet/arc-rimi.c:210:40: sparse: call with no type!
   drivers/net/arcnet/arc-rimi.c:245:9: sparse: call with no type!
   drivers/net/arcnet/arc-rimi.c:245:9: sparse: call with no type!
   drivers/net/arcnet/arc-rimi.c:245:9: sparse: call with no type!
   drivers/net/arcnet/arc-rimi.c:249:30: sparse: call with no type!
   drivers/net/arcnet/arc-rimi.c:253:22: sparse: call with no type!
   drivers/net/arcnet/arc-rimi.c:254:22: sparse: call with no type!
   drivers/net/arcnet/arc-rimi.c:257:22: sparse: call with no type!
   drivers/net/arcnet/arc-rimi.c:268:22: sparse: call with no type!
   drivers/net/arcnet/arc-rimi.c:276:28: sparse: call with no type!
   drivers/net/arcnet/arc-rimi.c:284:22: sparse: call with no type!
   drivers/net/arcnet/arc-rimi.c: In function 'check_mirror':
   drivers/net/arcnet/arc-rimi.c:109:7: error: implicit declaration of function 'arcnet_readb'; did you mean 'arcnet_outsb'? [-Werror=implicit-function-declaration]
      if (arcnet_readb(p, COM9026_REG_R_STATUS) == TESTvalue)
          ^~~~~~~~~~~~
          arcnet_outsb
   drivers/net/arcnet/arc-rimi.c: In function 'arcrimi_found':
   drivers/net/arcnet/arc-rimi.c:147:2: error: implicit declaration of function 'arcnet_writeb'; did you mean 'arcnet_outsb'? [-Werror=implicit-function-declaration]
     arcnet_writeb(TESTvalue, p, COM9026_REG_W_INTMASK);
     ^~~~~~~~~~~~~
     arcnet_outsb
   cc1: some warnings being treated as errors

vim +233 drivers/net/arcnet/com90xx.c

^1da177e4 Linus Torvalds 2005-04-16   95  
^1da177e4 Linus Torvalds 2005-04-16   96  static void __init com90xx_probe(void)
^1da177e4 Linus Torvalds 2005-04-16   97  {
^1da177e4 Linus Torvalds 2005-04-16   98  	int count, status, ioaddr, numprint, airq, openparen = 0;
^1da177e4 Linus Torvalds 2005-04-16   99  	unsigned long airqmask;
7f5e760c1 Joe Perches    2015-05-05  100  	int ports[(0x3f0 - 0x200) / 16 + 1] = {	0 };
d0f6ecad3 Al Viro        2005-12-02  101  	unsigned long *shmems;
d0f6ecad3 Al Viro        2005-12-02  102  	void __iomem **iomem;
^1da177e4 Linus Torvalds 2005-04-16  103  	int numports, numshmems, *port;
^1da177e4 Linus Torvalds 2005-04-16  104  	u_long *p;
d0f6ecad3 Al Viro        2005-12-02  105  	int index;
^1da177e4 Linus Torvalds 2005-04-16  106  
^1da177e4 Linus Torvalds 2005-04-16  107  	if (!io && !irq && !shmem && !*device && com90xx_skip_probe)
^1da177e4 Linus Torvalds 2005-04-16  108  		return;
^1da177e4 Linus Torvalds 2005-04-16  109  
15901dc93 Andrew Morton  2006-04-01  110  	shmems = kzalloc(((0x100000 - 0xa0000) / 0x800) * sizeof(unsigned long),
d0f6ecad3 Al Viro        2005-12-02  111  			 GFP_KERNEL);
d0f6ecad3 Al Viro        2005-12-02  112  	if (!shmems)
d0f6ecad3 Al Viro        2005-12-02  113  		return;
15901dc93 Andrew Morton  2006-04-01  114  	iomem = kzalloc(((0x100000 - 0xa0000) / 0x800) * sizeof(void __iomem *),
d0f6ecad3 Al Viro        2005-12-02  115  			GFP_KERNEL);
d0f6ecad3 Al Viro        2005-12-02  116  	if (!iomem) {
d0f6ecad3 Al Viro        2005-12-02  117  		kfree(shmems);
d0f6ecad3 Al Viro        2005-12-02  118  		return;
d0f6ecad3 Al Viro        2005-12-02  119  	}
d0f6ecad3 Al Viro        2005-12-02  120  
72aeea484 Joe Perches    2015-05-05  121  	if (BUGLVL(D_NORMAL))
05a24b234 Joe Perches    2015-05-05  122  		pr_info("%s\n", "COM90xx chipset support");
^1da177e4 Linus Torvalds 2005-04-16  123  
^1da177e4 Linus Torvalds 2005-04-16  124  	/* set up the arrays where we'll store the possible probe addresses */
^1da177e4 Linus Torvalds 2005-04-16  125  	numports = numshmems = 0;
^1da177e4 Linus Torvalds 2005-04-16  126  	if (io)
^1da177e4 Linus Torvalds 2005-04-16  127  		ports[numports++] = io;
^1da177e4 Linus Torvalds 2005-04-16  128  	else
^1da177e4 Linus Torvalds 2005-04-16  129  		for (count = 0x200; count <= 0x3f0; count += 16)
^1da177e4 Linus Torvalds 2005-04-16  130  			ports[numports++] = count;
^1da177e4 Linus Torvalds 2005-04-16  131  	if (shmem)
^1da177e4 Linus Torvalds 2005-04-16  132  		shmems[numshmems++] = shmem;
^1da177e4 Linus Torvalds 2005-04-16  133  	else
^1da177e4 Linus Torvalds 2005-04-16  134  		for (count = 0xA0000; count <= 0xFF800; count += 2048)
^1da177e4 Linus Torvalds 2005-04-16  135  			shmems[numshmems++] = count;
^1da177e4 Linus Torvalds 2005-04-16  136  
^1da177e4 Linus Torvalds 2005-04-16  137  	/* Stage 1: abandon any reserved ports, or ones with status==0xFF
^1da177e4 Linus Torvalds 2005-04-16  138  	 * (empty), and reset any others by reading the reset port.
^1da177e4 Linus Torvalds 2005-04-16  139  	 */
^1da177e4 Linus Torvalds 2005-04-16  140  	numprint = -1;
^1da177e4 Linus Torvalds 2005-04-16  141  	for (port = &ports[0]; port - ports < numports; port++) {
^1da177e4 Linus Torvalds 2005-04-16  142  		numprint++;
^1da177e4 Linus Torvalds 2005-04-16  143  		numprint %= 8;
^1da177e4 Linus Torvalds 2005-04-16  144  		if (!numprint) {
a34c0932c Joe Perches    2015-05-05  145  			arc_cont(D_INIT, "\n");
a34c0932c Joe Perches    2015-05-05  146  			arc_cont(D_INIT, "S1: ");
^1da177e4 Linus Torvalds 2005-04-16  147  		}
a34c0932c Joe Perches    2015-05-05  148  		arc_cont(D_INIT, "%Xh ", *port);
^1da177e4 Linus Torvalds 2005-04-16  149  
^1da177e4 Linus Torvalds 2005-04-16  150  		ioaddr = *port;
^1da177e4 Linus Torvalds 2005-04-16  151  
d6d7d3ed5 Joe Perches    2015-05-05  152  		if (!request_region(*port, ARCNET_TOTAL_SIZE,
d6d7d3ed5 Joe Perches    2015-05-05  153  				    "arcnet (90xx)")) {
a34c0932c Joe Perches    2015-05-05  154  			arc_cont(D_INIT_REASONS, "(request_region)\n");
a34c0932c Joe Perches    2015-05-05  155  			arc_cont(D_INIT_REASONS, "S1: ");
72aeea484 Joe Perches    2015-05-05  156  			if (BUGLVL(D_INIT_REASONS))
72aeea484 Joe Perches    2015-05-05  157  				numprint = 0;
^1da177e4 Linus Torvalds 2005-04-16  158  			*port-- = ports[--numports];
^1da177e4 Linus Torvalds 2005-04-16  159  			continue;
^1da177e4 Linus Torvalds 2005-04-16  160  		}
09dfbcd5d Joe Perches    2015-05-05  161  		if (arcnet_inb(ioaddr, COM9026_REG_R_STATUS) == 0xFF) {
a34c0932c Joe Perches    2015-05-05  162  			arc_cont(D_INIT_REASONS, "(empty)\n");
a34c0932c Joe Perches    2015-05-05  163  			arc_cont(D_INIT_REASONS, "S1: ");
72aeea484 Joe Perches    2015-05-05  164  			if (BUGLVL(D_INIT_REASONS))
72aeea484 Joe Perches    2015-05-05  165  				numprint = 0;
^1da177e4 Linus Torvalds 2005-04-16  166  			release_region(*port, ARCNET_TOTAL_SIZE);
^1da177e4 Linus Torvalds 2005-04-16  167  			*port-- = ports[--numports];
^1da177e4 Linus Torvalds 2005-04-16  168  			continue;
^1da177e4 Linus Torvalds 2005-04-16  169  		}
09dfbcd5d Joe Perches    2015-05-05  170  		/* begin resetting card */
09dfbcd5d Joe Perches    2015-05-05  171  		arcnet_inb(ioaddr, COM9026_REG_R_RESET);
^1da177e4 Linus Torvalds 2005-04-16  172  
a34c0932c Joe Perches    2015-05-05  173  		arc_cont(D_INIT_REASONS, "\n");
a34c0932c Joe Perches    2015-05-05  174  		arc_cont(D_INIT_REASONS, "S1: ");
72aeea484 Joe Perches    2015-05-05  175  		if (BUGLVL(D_INIT_REASONS))
72aeea484 Joe Perches    2015-05-05  176  			numprint = 0;
^1da177e4 Linus Torvalds 2005-04-16  177  	}
a34c0932c Joe Perches    2015-05-05  178  	arc_cont(D_INIT, "\n");
^1da177e4 Linus Torvalds 2005-04-16  179  
^1da177e4 Linus Torvalds 2005-04-16  180  	if (!numports) {
a34c0932c Joe Perches    2015-05-05  181  		arc_cont(D_NORMAL, "S1: No ARCnet cards found.\n");
d0f6ecad3 Al Viro        2005-12-02  182  		kfree(shmems);
d0f6ecad3 Al Viro        2005-12-02  183  		kfree(iomem);
^1da177e4 Linus Torvalds 2005-04-16  184  		return;
^1da177e4 Linus Torvalds 2005-04-16  185  	}
^1da177e4 Linus Torvalds 2005-04-16  186  	/* Stage 2: we have now reset any possible ARCnet cards, so we can't
^1da177e4 Linus Torvalds 2005-04-16  187  	 * do anything until they finish.  If D_INIT, print the list of
^1da177e4 Linus Torvalds 2005-04-16  188  	 * cards that are left.
^1da177e4 Linus Torvalds 2005-04-16  189  	 */
^1da177e4 Linus Torvalds 2005-04-16  190  	numprint = -1;
^1da177e4 Linus Torvalds 2005-04-16  191  	for (port = &ports[0]; port < ports + numports; port++) {
^1da177e4 Linus Torvalds 2005-04-16  192  		numprint++;
^1da177e4 Linus Torvalds 2005-04-16  193  		numprint %= 8;
^1da177e4 Linus Torvalds 2005-04-16  194  		if (!numprint) {
a34c0932c Joe Perches    2015-05-05  195  			arc_cont(D_INIT, "\n");
a34c0932c Joe Perches    2015-05-05  196  			arc_cont(D_INIT, "S2: ");
^1da177e4 Linus Torvalds 2005-04-16  197  		}
a34c0932c Joe Perches    2015-05-05  198  		arc_cont(D_INIT, "%Xh ", *port);
^1da177e4 Linus Torvalds 2005-04-16  199  	}
a34c0932c Joe Perches    2015-05-05  200  	arc_cont(D_INIT, "\n");
^1da177e4 Linus Torvalds 2005-04-16  201  	mdelay(RESETtime);
^1da177e4 Linus Torvalds 2005-04-16  202  
^1da177e4 Linus Torvalds 2005-04-16  203  	/* Stage 3: abandon any shmem addresses that don't have the signature
^1da177e4 Linus Torvalds 2005-04-16  204  	 * 0xD1 byte in the right place, or are read-only.
^1da177e4 Linus Torvalds 2005-04-16  205  	 */
^1da177e4 Linus Torvalds 2005-04-16  206  	numprint = -1;
d0f6ecad3 Al Viro        2005-12-02  207  	for (index = 0, p = &shmems[0]; index < numshmems; p++, index++) {
d0f6ecad3 Al Viro        2005-12-02  208  		void __iomem *base;
^1da177e4 Linus Torvalds 2005-04-16  209  
^1da177e4 Linus Torvalds 2005-04-16  210  		numprint++;
^1da177e4 Linus Torvalds 2005-04-16  211  		numprint %= 8;
^1da177e4 Linus Torvalds 2005-04-16  212  		if (!numprint) {
a34c0932c Joe Perches    2015-05-05  213  			arc_cont(D_INIT, "\n");
a34c0932c Joe Perches    2015-05-05  214  			arc_cont(D_INIT, "S3: ");
^1da177e4 Linus Torvalds 2005-04-16  215  		}
a34c0932c Joe Perches    2015-05-05  216  		arc_cont(D_INIT, "%lXh ", *p);
^1da177e4 Linus Torvalds 2005-04-16  217  
d0f6ecad3 Al Viro        2005-12-02  218  		if (!request_mem_region(*p, MIRROR_SIZE, "arcnet (90xx)")) {
a34c0932c Joe Perches    2015-05-05  219  			arc_cont(D_INIT_REASONS, "(request_mem_region)\n");
a34c0932c Joe Perches    2015-05-05  220  			arc_cont(D_INIT_REASONS, "Stage 3: ");
72aeea484 Joe Perches    2015-05-05  221  			if (BUGLVL(D_INIT_REASONS))
72aeea484 Joe Perches    2015-05-05  222  				numprint = 0;
d0f6ecad3 Al Viro        2005-12-02  223  			goto out;
d0f6ecad3 Al Viro        2005-12-02  224  		}
d0f6ecad3 Al Viro        2005-12-02  225  		base = ioremap(*p, MIRROR_SIZE);
d0f6ecad3 Al Viro        2005-12-02  226  		if (!base) {
a34c0932c Joe Perches    2015-05-05  227  			arc_cont(D_INIT_REASONS, "(ioremap)\n");
a34c0932c Joe Perches    2015-05-05  228  			arc_cont(D_INIT_REASONS, "Stage 3: ");
72aeea484 Joe Perches    2015-05-05  229  			if (BUGLVL(D_INIT_REASONS))
72aeea484 Joe Perches    2015-05-05  230  				numprint = 0;
d0f6ecad3 Al Viro        2005-12-02  231  			goto out1;
^1da177e4 Linus Torvalds 2005-04-16  232  		}
a11a5442d Joe Perches    2015-05-05 @233  		if (arcnet_readb(base, COM9026_REG_R_STATUS) != TESTvalue) {
a34c0932c Joe Perches    2015-05-05  234  			arc_cont(D_INIT_REASONS, "(%02Xh != %02Xh)\n",
a11a5442d Joe Perches    2015-05-05  235  				 arcnet_readb(base, COM9026_REG_R_STATUS),
a11a5442d Joe Perches    2015-05-05  236  				 TESTvalue);
a34c0932c Joe Perches    2015-05-05  237  			arc_cont(D_INIT_REASONS, "S3: ");
72aeea484 Joe Perches    2015-05-05  238  			if (BUGLVL(D_INIT_REASONS))
72aeea484 Joe Perches    2015-05-05  239  				numprint = 0;
d0f6ecad3 Al Viro        2005-12-02  240  			goto out2;
^1da177e4 Linus Torvalds 2005-04-16  241  		}
^1da177e4 Linus Torvalds 2005-04-16  242  		/* By writing 0x42 to the TESTvalue location, we also make
^1da177e4 Linus Torvalds 2005-04-16  243  		 * sure no "mirror" shmem areas show up - if they occur
^1da177e4 Linus Torvalds 2005-04-16  244  		 * in another pass through this loop, they will be discarded
^1da177e4 Linus Torvalds 2005-04-16  245  		 * because *cptr != TESTvalue.
^1da177e4 Linus Torvalds 2005-04-16  246  		 */
a11a5442d Joe Perches    2015-05-05  247  		arcnet_writeb(0x42, base, COM9026_REG_W_INTMASK);
a11a5442d Joe Perches    2015-05-05  248  		if (arcnet_readb(base, COM9026_REG_R_STATUS) != 0x42) {
a34c0932c Joe Perches    2015-05-05  249  			arc_cont(D_INIT_REASONS, "(read only)\n");
a34c0932c Joe Perches    2015-05-05  250  			arc_cont(D_INIT_REASONS, "S3: ");
d0f6ecad3 Al Viro        2005-12-02  251  			goto out2;
^1da177e4 Linus Torvalds 2005-04-16  252  		}
a34c0932c Joe Perches    2015-05-05  253  		arc_cont(D_INIT_REASONS, "\n");
a34c0932c Joe Perches    2015-05-05  254  		arc_cont(D_INIT_REASONS, "S3: ");
72aeea484 Joe Perches    2015-05-05  255  		if (BUGLVL(D_INIT_REASONS))
72aeea484 Joe Perches    2015-05-05  256  			numprint = 0;
d0f6ecad3 Al Viro        2005-12-02  257  		iomem[index] = base;
d0f6ecad3 Al Viro        2005-12-02  258  		continue;
d0f6ecad3 Al Viro        2005-12-02  259  	out2:
d0f6ecad3 Al Viro        2005-12-02  260  		iounmap(base);
d0f6ecad3 Al Viro        2005-12-02  261  	out1:
d0f6ecad3 Al Viro        2005-12-02  262  		release_mem_region(*p, MIRROR_SIZE);
d0f6ecad3 Al Viro        2005-12-02  263  	out:
d0f6ecad3 Al Viro        2005-12-02  264  		*p-- = shmems[--numshmems];
d0f6ecad3 Al Viro        2005-12-02  265  		index--;
^1da177e4 Linus Torvalds 2005-04-16  266  	}
a34c0932c Joe Perches    2015-05-05  267  	arc_cont(D_INIT, "\n");
^1da177e4 Linus Torvalds 2005-04-16  268  
^1da177e4 Linus Torvalds 2005-04-16  269  	if (!numshmems) {
a34c0932c Joe Perches    2015-05-05  270  		arc_cont(D_NORMAL, "S3: No ARCnet cards found.\n");
^1da177e4 Linus Torvalds 2005-04-16  271  		for (port = &ports[0]; port < ports + numports; port++)
^1da177e4 Linus Torvalds 2005-04-16  272  			release_region(*port, ARCNET_TOTAL_SIZE);
d0f6ecad3 Al Viro        2005-12-02  273  		kfree(shmems);
d0f6ecad3 Al Viro        2005-12-02  274  		kfree(iomem);
^1da177e4 Linus Torvalds 2005-04-16  275  		return;
^1da177e4 Linus Torvalds 2005-04-16  276  	}
^1da177e4 Linus Torvalds 2005-04-16  277  	/* Stage 4: something of a dummy, to report the shmems that are
^1da177e4 Linus Torvalds 2005-04-16  278  	 * still possible after stage 3.
^1da177e4 Linus Torvalds 2005-04-16  279  	 */
^1da177e4 Linus Torvalds 2005-04-16  280  	numprint = -1;
^1da177e4 Linus Torvalds 2005-04-16  281  	for (p = &shmems[0]; p < shmems + numshmems; p++) {
^1da177e4 Linus Torvalds 2005-04-16  282  		numprint++;
^1da177e4 Linus Torvalds 2005-04-16  283  		numprint %= 8;
^1da177e4 Linus Torvalds 2005-04-16  284  		if (!numprint) {
a34c0932c Joe Perches    2015-05-05  285  			arc_cont(D_INIT, "\n");
a34c0932c Joe Perches    2015-05-05  286  			arc_cont(D_INIT, "S4: ");
^1da177e4 Linus Torvalds 2005-04-16  287  		}
a34c0932c Joe Perches    2015-05-05  288  		arc_cont(D_INIT, "%lXh ", *p);
^1da177e4 Linus Torvalds 2005-04-16  289  	}
a34c0932c Joe Perches    2015-05-05  290  	arc_cont(D_INIT, "\n");
^1da177e4 Linus Torvalds 2005-04-16  291  
^1da177e4 Linus Torvalds 2005-04-16  292  	/* Stage 5: for any ports that have the correct status, can disable
^1da177e4 Linus Torvalds 2005-04-16  293  	 * the RESET flag, and (if no irq is given) generate an autoirq,
^1da177e4 Linus Torvalds 2005-04-16  294  	 * register an ARCnet device.
^1da177e4 Linus Torvalds 2005-04-16  295  	 *
^1da177e4 Linus Torvalds 2005-04-16  296  	 * Currently, we can only register one device per probe, so quit
^1da177e4 Linus Torvalds 2005-04-16  297  	 * after the first one is found.
^1da177e4 Linus Torvalds 2005-04-16  298  	 */
^1da177e4 Linus Torvalds 2005-04-16  299  	numprint = -1;
^1da177e4 Linus Torvalds 2005-04-16  300  	for (port = &ports[0]; port < ports + numports; port++) {
^1da177e4 Linus Torvalds 2005-04-16  301  		int found = 0;
01a1d5ac4 Joe Perches    2015-05-05  302  
^1da177e4 Linus Torvalds 2005-04-16  303  		numprint++;
^1da177e4 Linus Torvalds 2005-04-16  304  		numprint %= 8;
^1da177e4 Linus Torvalds 2005-04-16  305  		if (!numprint) {
a34c0932c Joe Perches    2015-05-05  306  			arc_cont(D_INIT, "\n");
a34c0932c Joe Perches    2015-05-05  307  			arc_cont(D_INIT, "S5: ");
^1da177e4 Linus Torvalds 2005-04-16  308  		}
a34c0932c Joe Perches    2015-05-05  309  		arc_cont(D_INIT, "%Xh ", *port);
^1da177e4 Linus Torvalds 2005-04-16  310  
^1da177e4 Linus Torvalds 2005-04-16  311  		ioaddr = *port;
09dfbcd5d Joe Perches    2015-05-05  312  		status = arcnet_inb(ioaddr, COM9026_REG_R_STATUS);
^1da177e4 Linus Torvalds 2005-04-16  313  
^1da177e4 Linus Torvalds 2005-04-16  314  		if ((status & 0x9D)
^1da177e4 Linus Torvalds 2005-04-16  315  		    != (NORXflag | RECONflag | TXFREEflag | RESETflag)) {
a34c0932c Joe Perches    2015-05-05  316  			arc_cont(D_INIT_REASONS, "(status=%Xh)\n", status);
a34c0932c Joe Perches    2015-05-05  317  			arc_cont(D_INIT_REASONS, "S5: ");
72aeea484 Joe Perches    2015-05-05  318  			if (BUGLVL(D_INIT_REASONS))
72aeea484 Joe Perches    2015-05-05  319  				numprint = 0;
^1da177e4 Linus Torvalds 2005-04-16  320  			release_region(*port, ARCNET_TOTAL_SIZE);
^1da177e4 Linus Torvalds 2005-04-16  321  			*port-- = ports[--numports];
^1da177e4 Linus Torvalds 2005-04-16  322  			continue;
^1da177e4 Linus Torvalds 2005-04-16  323  		}
09dfbcd5d Joe Perches    2015-05-05  324  		arcnet_outb(CFLAGScmd | RESETclear | CONFIGclear,
09dfbcd5d Joe Perches    2015-05-05  325  			    ioaddr, COM9026_REG_W_COMMAND);
09dfbcd5d Joe Perches    2015-05-05  326  		status = arcnet_inb(ioaddr, COM9026_REG_R_STATUS);
^1da177e4 Linus Torvalds 2005-04-16  327  		if (status & RESETflag) {
a34c0932c Joe Perches    2015-05-05  328  			arc_cont(D_INIT_REASONS, " (eternal reset, status=%Xh)\n",
^1da177e4 Linus Torvalds 2005-04-16  329  				 status);
a34c0932c Joe Perches    2015-05-05  330  			arc_cont(D_INIT_REASONS, "S5: ");
72aeea484 Joe Perches    2015-05-05  331  			if (BUGLVL(D_INIT_REASONS))
72aeea484 Joe Perches    2015-05-05  332  				numprint = 0;
^1da177e4 Linus Torvalds 2005-04-16  333  			release_region(*port, ARCNET_TOTAL_SIZE);
^1da177e4 Linus Torvalds 2005-04-16  334  			*port-- = ports[--numports];
^1da177e4 Linus Torvalds 2005-04-16  335  			continue;
^1da177e4 Linus Torvalds 2005-04-16  336  		}
^1da177e4 Linus Torvalds 2005-04-16  337  		/* skip this completely if an IRQ was given, because maybe
^1da177e4 Linus Torvalds 2005-04-16  338  		 * we're on a machine that locks during autoirq!
^1da177e4 Linus Torvalds 2005-04-16  339  		 */
^1da177e4 Linus Torvalds 2005-04-16  340  		if (!irq) {
^1da177e4 Linus Torvalds 2005-04-16  341  			/* if we do this, we're sure to get an IRQ since the
^1da177e4 Linus Torvalds 2005-04-16  342  			 * card has just reset and the NORXflag is on until
^1da177e4 Linus Torvalds 2005-04-16  343  			 * we tell it to start receiving.
^1da177e4 Linus Torvalds 2005-04-16  344  			 */
^1da177e4 Linus Torvalds 2005-04-16  345  			airqmask = probe_irq_on();
09dfbcd5d Joe Perches    2015-05-05  346  			arcnet_outb(NORXflag, ioaddr, COM9026_REG_W_INTMASK);
^1da177e4 Linus Torvalds 2005-04-16  347  			udelay(1);
09dfbcd5d Joe Perches    2015-05-05  348  			arcnet_outb(0, ioaddr, COM9026_REG_W_INTMASK);
^1da177e4 Linus Torvalds 2005-04-16  349  			airq = probe_irq_off(airqmask);
^1da177e4 Linus Torvalds 2005-04-16  350  
^1da177e4 Linus Torvalds 2005-04-16  351  			if (airq <= 0) {
a34c0932c Joe Perches    2015-05-05  352  				arc_cont(D_INIT_REASONS, "(airq=%d)\n", airq);
a34c0932c Joe Perches    2015-05-05  353  				arc_cont(D_INIT_REASONS, "S5: ");
72aeea484 Joe Perches    2015-05-05  354  				if (BUGLVL(D_INIT_REASONS))
72aeea484 Joe Perches    2015-05-05  355  					numprint = 0;
^1da177e4 Linus Torvalds 2005-04-16  356  				release_region(*port, ARCNET_TOTAL_SIZE);
^1da177e4 Linus Torvalds 2005-04-16  357  				*port-- = ports[--numports];
^1da177e4 Linus Torvalds 2005-04-16  358  				continue;
^1da177e4 Linus Torvalds 2005-04-16  359  			}
^1da177e4 Linus Torvalds 2005-04-16  360  		} else {
^1da177e4 Linus Torvalds 2005-04-16  361  			airq = irq;
^1da177e4 Linus Torvalds 2005-04-16  362  		}
^1da177e4 Linus Torvalds 2005-04-16  363  
a34c0932c Joe Perches    2015-05-05  364  		arc_cont(D_INIT, "(%d,", airq);
^1da177e4 Linus Torvalds 2005-04-16  365  		openparen = 1;
^1da177e4 Linus Torvalds 2005-04-16  366  
^1da177e4 Linus Torvalds 2005-04-16  367  		/* Everything seems okay.  But which shmem, if any, puts
^1da177e4 Linus Torvalds 2005-04-16  368  		 * back its signature byte when the card is reset?
^1da177e4 Linus Torvalds 2005-04-16  369  		 *
^1da177e4 Linus Torvalds 2005-04-16  370  		 * If there are multiple cards installed, there might be
^1da177e4 Linus Torvalds 2005-04-16  371  		 * multiple shmems still in the list.
^1da177e4 Linus Torvalds 2005-04-16  372  		 */
^1da177e4 Linus Torvalds 2005-04-16  373  #ifdef FAST_PROBE
^1da177e4 Linus Torvalds 2005-04-16  374  		if (numports > 1 || numshmems > 1) {
09dfbcd5d Joe Perches    2015-05-05  375  			arcnet_inb(ioaddr, COM9026_REG_R_RESET);
^1da177e4 Linus Torvalds 2005-04-16  376  			mdelay(RESETtime);
^1da177e4 Linus Torvalds 2005-04-16  377  		} else {
^1da177e4 Linus Torvalds 2005-04-16  378  			/* just one shmem and port, assume they match */
a11a5442d Joe Perches    2015-05-05  379  			arcnet_writeb(TESTvalue, iomem[0],
a11a5442d Joe Perches    2015-05-05  380  				      COM9026_REG_W_INTMASK);
^1da177e4 Linus Torvalds 2005-04-16  381  		}
^1da177e4 Linus Torvalds 2005-04-16  382  #else
09dfbcd5d Joe Perches    2015-05-05  383  		arcnet_inb(ioaddr, COM9026_REG_R_RESET);
^1da177e4 Linus Torvalds 2005-04-16  384  		mdelay(RESETtime);
^1da177e4 Linus Torvalds 2005-04-16  385  #endif
^1da177e4 Linus Torvalds 2005-04-16  386  
d0f6ecad3 Al Viro        2005-12-02  387  		for (index = 0; index < numshmems; index++) {
d0f6ecad3 Al Viro        2005-12-02  388  			u_long ptr = shmems[index];
d0f6ecad3 Al Viro        2005-12-02  389  			void __iomem *base = iomem[index];
^1da177e4 Linus Torvalds 2005-04-16  390  
a11a5442d Joe Perches    2015-05-05 @391  			if (arcnet_readb(base, COM9026_REG_R_STATUS) == TESTvalue) {	/* found one */
a34c0932c Joe Perches    2015-05-05  392  				arc_cont(D_INIT, "%lXh)\n", *p);
^1da177e4 Linus Torvalds 2005-04-16  393  				openparen = 0;
^1da177e4 Linus Torvalds 2005-04-16  394  
^1da177e4 Linus Torvalds 2005-04-16  395  				/* register the card */
d0f6ecad3 Al Viro        2005-12-02  396  				if (com90xx_found(*port, airq, ptr, base) == 0)
^1da177e4 Linus Torvalds 2005-04-16  397  					found = 1;
^1da177e4 Linus Torvalds 2005-04-16  398  				numprint = -1;
^1da177e4 Linus Torvalds 2005-04-16  399  
^1da177e4 Linus Torvalds 2005-04-16  400  				/* remove shmem from the list */
d0f6ecad3 Al Viro        2005-12-02  401  				shmems[index] = shmems[--numshmems];
d0f6ecad3 Al Viro        2005-12-02  402  				iomem[index] = iomem[numshmems];
^1da177e4 Linus Torvalds 2005-04-16  403  				break;	/* go to the next I/O port */
^1da177e4 Linus Torvalds 2005-04-16  404  			} else {
a11a5442d Joe Perches    2015-05-05  405  				arc_cont(D_INIT_REASONS, "%Xh-",
a11a5442d Joe Perches    2015-05-05  406  					 arcnet_readb(base, COM9026_REG_R_STATUS));
^1da177e4 Linus Torvalds 2005-04-16  407  			}
^1da177e4 Linus Torvalds 2005-04-16  408  		}
^1da177e4 Linus Torvalds 2005-04-16  409  
^1da177e4 Linus Torvalds 2005-04-16  410  		if (openparen) {
72aeea484 Joe Perches    2015-05-05  411  			if (BUGLVL(D_INIT))
05a24b234 Joe Perches    2015-05-05  412  				pr_cont("no matching shmem)\n");
72aeea484 Joe Perches    2015-05-05  413  			if (BUGLVL(D_INIT_REASONS)) {
05a24b234 Joe Perches    2015-05-05  414  				pr_cont("S5: ");
72aeea484 Joe Perches    2015-05-05  415  				numprint = 0;
72aeea484 Joe Perches    2015-05-05  416  			}
^1da177e4 Linus Torvalds 2005-04-16  417  		}
^1da177e4 Linus Torvalds 2005-04-16  418  		if (!found)
^1da177e4 Linus Torvalds 2005-04-16  419  			release_region(*port, ARCNET_TOTAL_SIZE);
^1da177e4 Linus Torvalds 2005-04-16  420  		*port-- = ports[--numports];
^1da177e4 Linus Torvalds 2005-04-16  421  	}
^1da177e4 Linus Torvalds 2005-04-16  422  
72aeea484 Joe Perches    2015-05-05  423  	if (BUGLVL(D_INIT_REASONS))
05a24b234 Joe Perches    2015-05-05  424  		pr_cont("\n");
^1da177e4 Linus Torvalds 2005-04-16  425  
^1da177e4 Linus Torvalds 2005-04-16  426  	/* Now put back TESTvalue on all leftover shmems. */
d0f6ecad3 Al Viro        2005-12-02  427  	for (index = 0; index < numshmems; index++) {
a11a5442d Joe Perches    2015-05-05  428  		arcnet_writeb(TESTvalue, iomem[index], COM9026_REG_W_INTMASK);
d0f6ecad3 Al Viro        2005-12-02  429  		iounmap(iomem[index]);
d0f6ecad3 Al Viro        2005-12-02  430  		release_mem_region(shmems[index], MIRROR_SIZE);
^1da177e4 Linus Torvalds 2005-04-16  431  	}
d0f6ecad3 Al Viro        2005-12-02  432  	kfree(shmems);
d0f6ecad3 Al Viro        2005-12-02  433  	kfree(iomem);
^1da177e4 Linus Torvalds 2005-04-16  434  }
^1da177e4 Linus Torvalds 2005-04-16  435  

:::::: The code at line 233 was first introduced by commit
:::::: a11a5442d108357d44d34407ce2ed9d77ab424a0 arcnet: com90xx: Use arcnet_readb/writeb routines

:::::: TO: Joe Perches <joe@...ches.com>
:::::: CC: Michael Grzeschik <m.grzeschik@...gutronix.de>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ