Re: [PATCH 3/6] arcnet: com20020: Add com20020 io mapped version

2018-06-22 Thread kbuild test robot
Hi Andrea,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on net-next/master]
[also build test ERROR on v4.18-rc1 next-20180622]
[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-leds-Removed-leds-dependecy/20180611-222941
config: x86_64-randconfig-s4-06220549 (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 >>):

>> ERROR: "com20020_found" [drivers/net/arcnet/com20020-io.ko] undefined!
>> ERROR: "com20020_check" [drivers/net/arcnet/com20020-io.ko] undefined!
>> ERROR: "com20020_netdev_ops" [drivers/net/arcnet/com20020-io.ko] undefined!

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


.config.gz
Description: application/gzip


Re: [PATCH 3/6] arcnet: com20020: Add com20020 io mapped version

2018-06-22 Thread kbuild test robot
Hi Andrea,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on net-next/master]
[also build test ERROR on v4.18-rc1 next-20180622]
[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-leds-Removed-leds-dependecy/20180611-222941
config: x86_64-randconfig-s4-06220549 (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 >>):

>> ERROR: "com20020_found" [drivers/net/arcnet/com20020-io.ko] undefined!
>> ERROR: "com20020_check" [drivers/net/arcnet/com20020-io.ko] undefined!
>> ERROR: "com20020_netdev_ops" [drivers/net/arcnet/com20020-io.ko] undefined!

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


.config.gz
Description: application/gzip


Re: [PATCH 3/6] arcnet: com20020: Add com20020 io mapped version

2018-06-11 Thread kbuild test robot
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 next-20180608]
[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-leds-Removed-leds-dependecy/20180611-222941
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/com20020-io.c:34:45: sparse: incorrect type in argument 1 
>> (different address spaces) @@expected void [noderef] * 
>> @@got sn:2>* @@
   drivers/net/arcnet/com20020-io.c:34:45:expected void [noderef] 
*
   drivers/net/arcnet/com20020-io.c:34:45:got void *
   drivers/net/arcnet/com20020-io.c:39:45: sparse: incorrect type in argument 2 
(different address spaces) @@expected void [noderef] * @@   
 got sn:2>* @@
   drivers/net/arcnet/com20020-io.c:39:45:expected void [noderef] 
*
   drivers/net/arcnet/com20020-io.c:39:45:got void *
>> drivers/net/arcnet/com20020-io.c:44:22: sparse: incorrect type in argument 1 
>> (different address spaces) @@expected void [noderef] *port @@
>> got void [noderef] *port @@
   drivers/net/arcnet/com20020-io.c:44:22:expected void [noderef] 
*port
   drivers/net/arcnet/com20020-io.c:44:22:got void *[noderef] 

   drivers/net/arcnet/com20020-io.c:49:23: sparse: incorrect type in argument 1 
(different address spaces) @@expected void [noderef] *port @@got 
void [noderef] *port @@
   drivers/net/arcnet/com20020-io.c:49:23:expected void [noderef] 
*port
   drivers/net/arcnet/com20020-io.c:49:23:got void *[noderef] 

>> drivers/net/arcnet/com20020-io.c:219:19: sparse: cast removes address space 
>> of expression
   drivers/net/arcnet/com20020-io.c: In function 'io_arc_inb':
   drivers/net/arcnet/com20020-io.c:34:17: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 return ioread8((void *__iomem) addr + offset);
^
   drivers/net/arcnet/com20020-io.c: In function 'io_arc_outb':
   drivers/net/arcnet/com20020-io.c:39:18: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 iowrite8(value, (void *__iomem)addr + offset);
 ^
   drivers/net/arcnet/com20020-io.c: In function 'io_arc_insb':
   drivers/net/arcnet/com20020-io.c:44:14: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 ioread8_rep((void *__iomem) (addr + offset), buffer, count);
 ^
   drivers/net/arcnet/com20020-io.c: In function 'io_arc_outsb':
   drivers/net/arcnet/com20020-io.c:49:15: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 iowrite8_rep((void *__iomem) (addr + offset), buffer, count);
  ^
   drivers/net/arcnet/com20020-io.c: In function 'com20020_probe':
   drivers/net/arcnet/com20020-io.c:219:11: warning: cast from pointer to 
integer of different size [-Wpointer-to-int-cast]
 ioaddr = (int)devm_ioremap(>dev, iores->start,
  ^
   drivers/net/arcnet/com20020-io.c:288:27: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 devm_iounmap(>dev, (void __iomem *)ioaddr);
  ^

vim +34 drivers/net/arcnet/com20020-io.c

31  
32  static unsigned int io_arc_inb(int addr, int offset)
33  {
  > 34  return ioread8((void *__iomem) addr + offset);
35  }
36  
37  static void io_arc_outb(int value, int addr, int offset)
38  {
  > 39  iowrite8(value, (void *__iomem)addr + offset);
40  }
41  
42  static void io_arc_insb(int  addr, int offset, void *buffer, int count)
43  {
  > 44  ioread8_rep((void *__iomem) (addr + offset), buffer, count);
45  }
46  
47  static void io_arc_outsb(int addr, int offset, void *buffer, int count)
48  {
49  iowrite8_rep((void *__iomem) (addr + offset), buffer, count);
50  }
51  
52  enum com20020_xtal_freq {
53  freq_10Mhz = 10,
54  freq_20Mhz = 20,
55  };
56  
57  enum com20020_arcnet_speed {
58  arc_speed_10M_bps = 1000,
59  arc_speed_5M_bps = 500,
60  arc_speed_2M50_bps = 250,
61  arc_speed_1M25_bps = 125,
62  arc_speed_625K_bps = 625000,
63  arc_speed_312K5_bps = 312500,
64  arc_speed_156K25_bps = 156250,
65  };
66  
67  enum com20020_timeout {
68  arc_timeout_328us =   328000,
69  arc_timeout_164us = 164000,
70  arc_timeout_82us =  82000,
71  arc_timeout_20u5s =  20500,
72  };
73  
74  static int setup_clock(int *clockp, int *clockm, int xtal, int 
arcnet_speed)
75  {
76  int 

Re: [PATCH 3/6] arcnet: com20020: Add com20020 io mapped version

2018-06-11 Thread kbuild test robot
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 next-20180608]
[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-leds-Removed-leds-dependecy/20180611-222941
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/com20020-io.c:34:45: sparse: incorrect type in argument 1 
>> (different address spaces) @@expected void [noderef] * 
>> @@got sn:2>* @@
   drivers/net/arcnet/com20020-io.c:34:45:expected void [noderef] 
*
   drivers/net/arcnet/com20020-io.c:34:45:got void *
   drivers/net/arcnet/com20020-io.c:39:45: sparse: incorrect type in argument 2 
(different address spaces) @@expected void [noderef] * @@   
 got sn:2>* @@
   drivers/net/arcnet/com20020-io.c:39:45:expected void [noderef] 
*
   drivers/net/arcnet/com20020-io.c:39:45:got void *
>> drivers/net/arcnet/com20020-io.c:44:22: sparse: incorrect type in argument 1 
>> (different address spaces) @@expected void [noderef] *port @@
>> got void [noderef] *port @@
   drivers/net/arcnet/com20020-io.c:44:22:expected void [noderef] 
*port
   drivers/net/arcnet/com20020-io.c:44:22:got void *[noderef] 

   drivers/net/arcnet/com20020-io.c:49:23: sparse: incorrect type in argument 1 
(different address spaces) @@expected void [noderef] *port @@got 
void [noderef] *port @@
   drivers/net/arcnet/com20020-io.c:49:23:expected void [noderef] 
*port
   drivers/net/arcnet/com20020-io.c:49:23:got void *[noderef] 

>> drivers/net/arcnet/com20020-io.c:219:19: sparse: cast removes address space 
>> of expression
   drivers/net/arcnet/com20020-io.c: In function 'io_arc_inb':
   drivers/net/arcnet/com20020-io.c:34:17: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 return ioread8((void *__iomem) addr + offset);
^
   drivers/net/arcnet/com20020-io.c: In function 'io_arc_outb':
   drivers/net/arcnet/com20020-io.c:39:18: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 iowrite8(value, (void *__iomem)addr + offset);
 ^
   drivers/net/arcnet/com20020-io.c: In function 'io_arc_insb':
   drivers/net/arcnet/com20020-io.c:44:14: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 ioread8_rep((void *__iomem) (addr + offset), buffer, count);
 ^
   drivers/net/arcnet/com20020-io.c: In function 'io_arc_outsb':
   drivers/net/arcnet/com20020-io.c:49:15: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 iowrite8_rep((void *__iomem) (addr + offset), buffer, count);
  ^
   drivers/net/arcnet/com20020-io.c: In function 'com20020_probe':
   drivers/net/arcnet/com20020-io.c:219:11: warning: cast from pointer to 
integer of different size [-Wpointer-to-int-cast]
 ioaddr = (int)devm_ioremap(>dev, iores->start,
  ^
   drivers/net/arcnet/com20020-io.c:288:27: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 devm_iounmap(>dev, (void __iomem *)ioaddr);
  ^

vim +34 drivers/net/arcnet/com20020-io.c

31  
32  static unsigned int io_arc_inb(int addr, int offset)
33  {
  > 34  return ioread8((void *__iomem) addr + offset);
35  }
36  
37  static void io_arc_outb(int value, int addr, int offset)
38  {
  > 39  iowrite8(value, (void *__iomem)addr + offset);
40  }
41  
42  static void io_arc_insb(int  addr, int offset, void *buffer, int count)
43  {
  > 44  ioread8_rep((void *__iomem) (addr + offset), buffer, count);
45  }
46  
47  static void io_arc_outsb(int addr, int offset, void *buffer, int count)
48  {
49  iowrite8_rep((void *__iomem) (addr + offset), buffer, count);
50  }
51  
52  enum com20020_xtal_freq {
53  freq_10Mhz = 10,
54  freq_20Mhz = 20,
55  };
56  
57  enum com20020_arcnet_speed {
58  arc_speed_10M_bps = 1000,
59  arc_speed_5M_bps = 500,
60  arc_speed_2M50_bps = 250,
61  arc_speed_1M25_bps = 125,
62  arc_speed_625K_bps = 625000,
63  arc_speed_312K5_bps = 312500,
64  arc_speed_156K25_bps = 156250,
65  };
66  
67  enum com20020_timeout {
68  arc_timeout_328us =   328000,
69  arc_timeout_164us = 164000,
70  arc_timeout_82us =  82000,
71  arc_timeout_20u5s =  20500,
72  };
73  
74  static int setup_clock(int *clockp, int *clockm, int xtal, int 
arcnet_speed)
75  {
76  int 

Re: [PATCH 3/6] arcnet: com20020: Add com20020 io mapped version

2018-06-11 Thread kbuild test robot
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 next-20180608]
[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-leds-Removed-leds-dependecy/20180611-222941
config: sparc64-allmodconfig (attached as .config)
compiler: sparc64-linux-gnu-gcc (Debian 7.2.0-11) 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
GCC_VERSION=7.2.0 make.cross ARCH=sparc64 

All warnings (new ones prefixed by >>):

   drivers/net//arcnet/com20020-io.c: In function 'io_arc_inb':
>> drivers/net//arcnet/com20020-io.c:34:17: warning: cast to pointer from 
>> integer of different size [-Wint-to-pointer-cast]
 return ioread8((void *__iomem) addr + offset);
^
   drivers/net//arcnet/com20020-io.c: In function 'io_arc_outb':
   drivers/net//arcnet/com20020-io.c:39:18: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 iowrite8(value, (void *__iomem)addr + offset);
 ^
   drivers/net//arcnet/com20020-io.c: In function 'io_arc_insb':
   drivers/net//arcnet/com20020-io.c:44:14: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 ioread8_rep((void *__iomem) (addr + offset), buffer, count);
 ^
   drivers/net//arcnet/com20020-io.c: In function 'io_arc_outsb':
   drivers/net//arcnet/com20020-io.c:49:15: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 iowrite8_rep((void *__iomem) (addr + offset), buffer, count);
  ^
   drivers/net//arcnet/com20020-io.c: In function 'com20020_probe':
>> drivers/net//arcnet/com20020-io.c:219:11: warning: cast from pointer to 
>> integer of different size [-Wpointer-to-int-cast]
 ioaddr = (int)devm_ioremap(>dev, iores->start,
  ^
   drivers/net//arcnet/com20020-io.c:288:27: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 devm_iounmap(>dev, (void __iomem *)ioaddr);
  ^

vim +34 drivers/net//arcnet/com20020-io.c

31  
32  static unsigned int io_arc_inb(int addr, int offset)
33  {
  > 34  return ioread8((void *__iomem) addr + offset);
35  }
36  
37  static void io_arc_outb(int value, int addr, int offset)
38  {
39  iowrite8(value, (void *__iomem)addr + offset);
40  }
41  
42  static void io_arc_insb(int  addr, int offset, void *buffer, int count)
43  {
  > 44  ioread8_rep((void *__iomem) (addr + offset), buffer, count);
45  }
46  
47  static void io_arc_outsb(int addr, int offset, void *buffer, int count)
48  {
49  iowrite8_rep((void *__iomem) (addr + offset), buffer, count);
50  }
51  
52  enum com20020_xtal_freq {
53  freq_10Mhz = 10,
54  freq_20Mhz = 20,
55  };
56  
57  enum com20020_arcnet_speed {
58  arc_speed_10M_bps = 1000,
59  arc_speed_5M_bps = 500,
60  arc_speed_2M50_bps = 250,
61  arc_speed_1M25_bps = 125,
62  arc_speed_625K_bps = 625000,
63  arc_speed_312K5_bps = 312500,
64  arc_speed_156K25_bps = 156250,
65  };
66  
67  enum com20020_timeout {
68  arc_timeout_328us =   328000,
69  arc_timeout_164us = 164000,
70  arc_timeout_82us =  82000,
71  arc_timeout_20u5s =  20500,
72  };
73  
74  static int setup_clock(int *clockp, int *clockm, int xtal, int 
arcnet_speed)
75  {
76  int pll_factor, req_clock_frq = 20;
77  
78  switch (arcnet_speed) {
79  case arc_speed_10M_bps:
80  req_clock_frq = 80;
81  *clockp = 0;
82  break;
83  case arc_speed_5M_bps:
84  req_clock_frq = 40;
85  *clockp = 0;
86  break;
87  case arc_speed_2M50_bps:
88  *clockp = 0;
89  break;
90  case arc_speed_1M25_bps:
91  *clockp = 1;
92  break;
93  case arc_speed_625K_bps:
94  *clockp = 2;
95  break;
96  case arc_speed_312K5_bps:
97  *clockp = 3;
98  break;
99  case arc_speed_156K25_bps:
   100  *clockp = 4;
   101  break;
   102  default:
   103  return -EINVAL;
   104  }
   105  
   106  if (xtal != freq_10Mhz && xtal != 

Re: [PATCH 3/6] arcnet: com20020: Add com20020 io mapped version

2018-06-11 Thread kbuild test robot
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 next-20180608]
[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-leds-Removed-leds-dependecy/20180611-222941
config: sparc64-allmodconfig (attached as .config)
compiler: sparc64-linux-gnu-gcc (Debian 7.2.0-11) 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
GCC_VERSION=7.2.0 make.cross ARCH=sparc64 

All warnings (new ones prefixed by >>):

   drivers/net//arcnet/com20020-io.c: In function 'io_arc_inb':
>> drivers/net//arcnet/com20020-io.c:34:17: warning: cast to pointer from 
>> integer of different size [-Wint-to-pointer-cast]
 return ioread8((void *__iomem) addr + offset);
^
   drivers/net//arcnet/com20020-io.c: In function 'io_arc_outb':
   drivers/net//arcnet/com20020-io.c:39:18: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 iowrite8(value, (void *__iomem)addr + offset);
 ^
   drivers/net//arcnet/com20020-io.c: In function 'io_arc_insb':
   drivers/net//arcnet/com20020-io.c:44:14: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 ioread8_rep((void *__iomem) (addr + offset), buffer, count);
 ^
   drivers/net//arcnet/com20020-io.c: In function 'io_arc_outsb':
   drivers/net//arcnet/com20020-io.c:49:15: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 iowrite8_rep((void *__iomem) (addr + offset), buffer, count);
  ^
   drivers/net//arcnet/com20020-io.c: In function 'com20020_probe':
>> drivers/net//arcnet/com20020-io.c:219:11: warning: cast from pointer to 
>> integer of different size [-Wpointer-to-int-cast]
 ioaddr = (int)devm_ioremap(>dev, iores->start,
  ^
   drivers/net//arcnet/com20020-io.c:288:27: warning: cast to pointer from 
integer of different size [-Wint-to-pointer-cast]
 devm_iounmap(>dev, (void __iomem *)ioaddr);
  ^

vim +34 drivers/net//arcnet/com20020-io.c

31  
32  static unsigned int io_arc_inb(int addr, int offset)
33  {
  > 34  return ioread8((void *__iomem) addr + offset);
35  }
36  
37  static void io_arc_outb(int value, int addr, int offset)
38  {
39  iowrite8(value, (void *__iomem)addr + offset);
40  }
41  
42  static void io_arc_insb(int  addr, int offset, void *buffer, int count)
43  {
  > 44  ioread8_rep((void *__iomem) (addr + offset), buffer, count);
45  }
46  
47  static void io_arc_outsb(int addr, int offset, void *buffer, int count)
48  {
49  iowrite8_rep((void *__iomem) (addr + offset), buffer, count);
50  }
51  
52  enum com20020_xtal_freq {
53  freq_10Mhz = 10,
54  freq_20Mhz = 20,
55  };
56  
57  enum com20020_arcnet_speed {
58  arc_speed_10M_bps = 1000,
59  arc_speed_5M_bps = 500,
60  arc_speed_2M50_bps = 250,
61  arc_speed_1M25_bps = 125,
62  arc_speed_625K_bps = 625000,
63  arc_speed_312K5_bps = 312500,
64  arc_speed_156K25_bps = 156250,
65  };
66  
67  enum com20020_timeout {
68  arc_timeout_328us =   328000,
69  arc_timeout_164us = 164000,
70  arc_timeout_82us =  82000,
71  arc_timeout_20u5s =  20500,
72  };
73  
74  static int setup_clock(int *clockp, int *clockm, int xtal, int 
arcnet_speed)
75  {
76  int pll_factor, req_clock_frq = 20;
77  
78  switch (arcnet_speed) {
79  case arc_speed_10M_bps:
80  req_clock_frq = 80;
81  *clockp = 0;
82  break;
83  case arc_speed_5M_bps:
84  req_clock_frq = 40;
85  *clockp = 0;
86  break;
87  case arc_speed_2M50_bps:
88  *clockp = 0;
89  break;
90  case arc_speed_1M25_bps:
91  *clockp = 1;
92  break;
93  case arc_speed_625K_bps:
94  *clockp = 2;
95  break;
96  case arc_speed_312K5_bps:
97  *clockp = 3;
98  break;
99  case arc_speed_156K25_bps:
   100  *clockp = 4;
   101  break;
   102  default:
   103  return -EINVAL;
   104  }
   105  
   106  if (xtal != freq_10Mhz && xtal != 

[PATCH 3/6] arcnet: com20020: Add com20020 io mapped version

2018-06-11 Thread Andrea Greco
From: Andrea Greco 

Add support for com20022I/com20020, io mapped.

Signed-off-by: Andrea Greco 
---
 drivers/net/arcnet/Kconfig   |   9 +-
 drivers/net/arcnet/Makefile  |   1 +
 drivers/net/arcnet/com20020-io.c | 315 +++
 drivers/net/arcnet/com20020.c|   5 +-
 4 files changed, 327 insertions(+), 3 deletions(-)
 create mode 100644 drivers/net/arcnet/com20020-io.c

diff --git a/drivers/net/arcnet/Kconfig b/drivers/net/arcnet/Kconfig
index afc5898e7a16..f72620dc63ec 100644
--- a/drivers/net/arcnet/Kconfig
+++ b/drivers/net/arcnet/Kconfig
@@ -3,7 +3,7 @@
 #
 
 menuconfig ARCNET
-   depends on NETDEVICES && (ISA || PCI || PCMCIA)
+   depends on NETDEVICES
tristate "ARCnet support"
---help---
  If you have a network card of this type, say Y and check out the
@@ -129,5 +129,12 @@ config ARCNET_COM20020_CS
 
  To compile this driver as a module, choose M here: the module will be
  called com20020_cs.  If unsure, say N.
+config ARCNET_COM20020_IO
+   tristate "Support for COM20020 (IO mapped)"
+   depends on ARCNET_COM20020
+   help
+ Say Y here if your custom board mount com20020 chipset or friends.
+ Supported Chipset: com20020, com20022, com20022I-3v3
+ If unsure, say N.
 
 endif # ARCNET
diff --git a/drivers/net/arcnet/Makefile b/drivers/net/arcnet/Makefile
index 53525e8ea130..18da4341f404 100644
--- a/drivers/net/arcnet/Makefile
+++ b/drivers/net/arcnet/Makefile
@@ -14,3 +14,4 @@ obj-$(CONFIG_ARCNET_COM20020) += com20020.o
 obj-$(CONFIG_ARCNET_COM20020_ISA) += com20020-isa.o
 obj-$(CONFIG_ARCNET_COM20020_PCI) += com20020-pci.o
 obj-$(CONFIG_ARCNET_COM20020_CS) += com20020_cs.o
+obj-$(CONFIG_ARCNET_COM20020_IO) += com20020-io.o
diff --git a/drivers/net/arcnet/com20020-io.c b/drivers/net/arcnet/com20020-io.c
new file mode 100644
index ..23c24d4de5a9
--- /dev/null
+++ b/drivers/net/arcnet/com20020-io.c
@@ -0,0 +1,315 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/* Linux ARCnet driver for com 20020.
+ *
+ * datasheet:
+ * http://ww1.microchip.com/downloads/en/DeviceDoc/200223vrevc.pdf
+ * http://ww1.microchip.com/downloads/en/DeviceDoc/20020.pdf
+ *
+ * Supported chip version:
+ * - com20020
+ * - com20022
+ * - com20022I-3v3
+ */
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include "arcdevice.h"
+#include "com20020.h"
+
+/* Reset (5 * xTalFreq), minimal com20020 xTal is 10Mhz */
+#define RESET_DELAY 500
+
+static unsigned int io_arc_inb(int addr, int offset)
+{
+   return ioread8((void *__iomem) addr + offset);
+}
+
+static void io_arc_outb(int value, int addr, int offset)
+{
+   iowrite8(value, (void *__iomem)addr + offset);
+}
+
+static void io_arc_insb(int  addr, int offset, void *buffer, int count)
+{
+   ioread8_rep((void *__iomem) (addr + offset), buffer, count);
+}
+
+static void io_arc_outsb(int addr, int offset, void *buffer, int count)
+{
+   iowrite8_rep((void *__iomem) (addr + offset), buffer, count);
+}
+
+enum com20020_xtal_freq {
+   freq_10Mhz = 10,
+   freq_20Mhz = 20,
+};
+
+enum com20020_arcnet_speed {
+   arc_speed_10M_bps = 1000,
+   arc_speed_5M_bps = 500,
+   arc_speed_2M50_bps = 250,
+   arc_speed_1M25_bps = 125,
+   arc_speed_625K_bps = 625000,
+   arc_speed_312K5_bps = 312500,
+   arc_speed_156K25_bps = 156250,
+};
+
+enum com20020_timeout {
+   arc_timeout_328us =   328000,
+   arc_timeout_164us = 164000,
+   arc_timeout_82us =  82000,
+   arc_timeout_20u5s =  20500,
+};
+
+static int setup_clock(int *clockp, int *clockm, int xtal, int arcnet_speed)
+{
+   int pll_factor, req_clock_frq = 20;
+
+   switch (arcnet_speed) {
+   case arc_speed_10M_bps:
+   req_clock_frq = 80;
+   *clockp = 0;
+   break;
+   case arc_speed_5M_bps:
+   req_clock_frq = 40;
+   *clockp = 0;
+   break;
+   case arc_speed_2M50_bps:
+   *clockp = 0;
+   break;
+   case arc_speed_1M25_bps:
+   *clockp = 1;
+   break;
+   case arc_speed_625K_bps:
+   *clockp = 2;
+   break;
+   case arc_speed_312K5_bps:
+   *clockp = 3;
+   break;
+   case arc_speed_156K25_bps:
+   *clockp = 4;
+   break;
+   default:
+   return -EINVAL;
+   }
+
+   if (xtal != freq_10Mhz && xtal != freq_20Mhz)
+   return -EINVAL;
+
+   pll_factor = (unsigned int)req_clock_frq / xtal;
+
+   switch (pll_factor) {
+   case 1:
+   *clockm = 0;
+   break;
+   case 2:
+   *clockm = 1;
+   break;
+   case 4:
+   *clockm = 3;
+   break;
+   default:
+   return 

[PATCH 3/6] arcnet: com20020: Add com20020 io mapped version

2018-06-11 Thread Andrea Greco
From: Andrea Greco 

Add support for com20022I/com20020, io mapped.

Signed-off-by: Andrea Greco 
---
 drivers/net/arcnet/Kconfig   |   9 +-
 drivers/net/arcnet/Makefile  |   1 +
 drivers/net/arcnet/com20020-io.c | 315 +++
 drivers/net/arcnet/com20020.c|   5 +-
 4 files changed, 327 insertions(+), 3 deletions(-)
 create mode 100644 drivers/net/arcnet/com20020-io.c

diff --git a/drivers/net/arcnet/Kconfig b/drivers/net/arcnet/Kconfig
index afc5898e7a16..f72620dc63ec 100644
--- a/drivers/net/arcnet/Kconfig
+++ b/drivers/net/arcnet/Kconfig
@@ -3,7 +3,7 @@
 #
 
 menuconfig ARCNET
-   depends on NETDEVICES && (ISA || PCI || PCMCIA)
+   depends on NETDEVICES
tristate "ARCnet support"
---help---
  If you have a network card of this type, say Y and check out the
@@ -129,5 +129,12 @@ config ARCNET_COM20020_CS
 
  To compile this driver as a module, choose M here: the module will be
  called com20020_cs.  If unsure, say N.
+config ARCNET_COM20020_IO
+   tristate "Support for COM20020 (IO mapped)"
+   depends on ARCNET_COM20020
+   help
+ Say Y here if your custom board mount com20020 chipset or friends.
+ Supported Chipset: com20020, com20022, com20022I-3v3
+ If unsure, say N.
 
 endif # ARCNET
diff --git a/drivers/net/arcnet/Makefile b/drivers/net/arcnet/Makefile
index 53525e8ea130..18da4341f404 100644
--- a/drivers/net/arcnet/Makefile
+++ b/drivers/net/arcnet/Makefile
@@ -14,3 +14,4 @@ obj-$(CONFIG_ARCNET_COM20020) += com20020.o
 obj-$(CONFIG_ARCNET_COM20020_ISA) += com20020-isa.o
 obj-$(CONFIG_ARCNET_COM20020_PCI) += com20020-pci.o
 obj-$(CONFIG_ARCNET_COM20020_CS) += com20020_cs.o
+obj-$(CONFIG_ARCNET_COM20020_IO) += com20020-io.o
diff --git a/drivers/net/arcnet/com20020-io.c b/drivers/net/arcnet/com20020-io.c
new file mode 100644
index ..23c24d4de5a9
--- /dev/null
+++ b/drivers/net/arcnet/com20020-io.c
@@ -0,0 +1,315 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/* Linux ARCnet driver for com 20020.
+ *
+ * datasheet:
+ * http://ww1.microchip.com/downloads/en/DeviceDoc/200223vrevc.pdf
+ * http://ww1.microchip.com/downloads/en/DeviceDoc/20020.pdf
+ *
+ * Supported chip version:
+ * - com20020
+ * - com20022
+ * - com20022I-3v3
+ */
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include "arcdevice.h"
+#include "com20020.h"
+
+/* Reset (5 * xTalFreq), minimal com20020 xTal is 10Mhz */
+#define RESET_DELAY 500
+
+static unsigned int io_arc_inb(int addr, int offset)
+{
+   return ioread8((void *__iomem) addr + offset);
+}
+
+static void io_arc_outb(int value, int addr, int offset)
+{
+   iowrite8(value, (void *__iomem)addr + offset);
+}
+
+static void io_arc_insb(int  addr, int offset, void *buffer, int count)
+{
+   ioread8_rep((void *__iomem) (addr + offset), buffer, count);
+}
+
+static void io_arc_outsb(int addr, int offset, void *buffer, int count)
+{
+   iowrite8_rep((void *__iomem) (addr + offset), buffer, count);
+}
+
+enum com20020_xtal_freq {
+   freq_10Mhz = 10,
+   freq_20Mhz = 20,
+};
+
+enum com20020_arcnet_speed {
+   arc_speed_10M_bps = 1000,
+   arc_speed_5M_bps = 500,
+   arc_speed_2M50_bps = 250,
+   arc_speed_1M25_bps = 125,
+   arc_speed_625K_bps = 625000,
+   arc_speed_312K5_bps = 312500,
+   arc_speed_156K25_bps = 156250,
+};
+
+enum com20020_timeout {
+   arc_timeout_328us =   328000,
+   arc_timeout_164us = 164000,
+   arc_timeout_82us =  82000,
+   arc_timeout_20u5s =  20500,
+};
+
+static int setup_clock(int *clockp, int *clockm, int xtal, int arcnet_speed)
+{
+   int pll_factor, req_clock_frq = 20;
+
+   switch (arcnet_speed) {
+   case arc_speed_10M_bps:
+   req_clock_frq = 80;
+   *clockp = 0;
+   break;
+   case arc_speed_5M_bps:
+   req_clock_frq = 40;
+   *clockp = 0;
+   break;
+   case arc_speed_2M50_bps:
+   *clockp = 0;
+   break;
+   case arc_speed_1M25_bps:
+   *clockp = 1;
+   break;
+   case arc_speed_625K_bps:
+   *clockp = 2;
+   break;
+   case arc_speed_312K5_bps:
+   *clockp = 3;
+   break;
+   case arc_speed_156K25_bps:
+   *clockp = 4;
+   break;
+   default:
+   return -EINVAL;
+   }
+
+   if (xtal != freq_10Mhz && xtal != freq_20Mhz)
+   return -EINVAL;
+
+   pll_factor = (unsigned int)req_clock_frq / xtal;
+
+   switch (pll_factor) {
+   case 1:
+   *clockm = 0;
+   break;
+   case 2:
+   *clockm = 1;
+   break;
+   case 4:
+   *clockm = 3;
+   break;
+   default:
+   return