Re: [PATCH 3/6] arcnet: com20020: Add com20020 io mapped version
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
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
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
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
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
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
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
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