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 <j...@perches.com>
:::::: CC: Michael Grzeschik <m.grzesc...@pengutronix.de>

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

Reply via email to