Re: [PATCH v2] NET: Add support for ks8851_mll

2012-03-13 Thread Sascha Hauer
On Fri, Mar 09, 2012 at 10:24:09AM +0100, Jan Weitzel wrote:
> Add support for KS8851 16bit MLL chip from Micrel Inc.
> 
> Signed-off-by: Jan Weitzel 

Applied, thanks

Sascha

> ---
> v2: use dev_* for messages
> 
>  drivers/base/resource.c  |   33 ++
>  drivers/net/Kconfig  |7 +
>  drivers/net/Makefile |1 +
>  drivers/net/ks8851_mll.c |  892 
> ++
>  include/driver.h |   11 +
>  5 files changed, 944 insertions(+), 0 deletions(-)
>  create mode 100644 drivers/net/ks8851_mll.c
> 
> diff --git a/drivers/base/resource.c b/drivers/base/resource.c
> index d2f7a07..b31c7d7 100644
> --- a/drivers/base/resource.c
> +++ b/drivers/base/resource.c
> @@ -121,3 +121,36 @@ struct device_d *add_usb_ehci_device(int id, 
> resource_size_t hccr,
>  }
>  EXPORT_SYMBOL(add_usb_ehci_device);
>  #endif
> +
> +#ifdef CONFIG_DRIVER_NET_KS8851_MLL
> +struct device_d *add_ks8851_device(int id, resource_size_t addr,
> + resource_size_t addr_cmd, int flags, void *pdata)
> +{
> + struct resource *res;
> + resource_size_t size;
> +
> + switch (flags) {
> + case IORESOURCE_MEM_16BIT:
> + size = 2;
> + break;
> + case IORESOURCE_MEM_8BIT:
> + size = 1;
> + break;
> + default:
> + printf("ks8851: memory width flag missing\n");
> + return NULL;
> + }
> +
> + res = xzalloc(sizeof(struct resource) * 2);
> +
> + res[0].start = addr;
> + res[0].size = size;
> + res[0].flags = IORESOURCE_MEM | flags;
> + res[1].start = addr_cmd;
> + res[1].size = size;
> + res[1].flags = IORESOURCE_MEM | flags;
> +
> + return add_generic_device_res("ks8851_mll", id, res, 2, pdata);
> +}
> +EXPORT_SYMBOL(add_ks8851_device);
> +#endif
> diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
> index b236d17..4cdb37b 100644
> --- a/drivers/net/Kconfig
> +++ b/drivers/net/Kconfig
> @@ -100,6 +100,13 @@ config TSE_USE_DEDICATED_DESC_MEM
> reserved with a malloc but directly mapped to the memory
> address (defined in config.h)
>  
> +config DRIVER_NET_KS8851_MLL
> + bool "ks8851 mll ethernet driver"
> + select MIIDEV
> + help
> +   This option enables support for the Micrel KS8851 MLL
> +   ethernet chip.
> +
>  source "drivers/net/usb/Kconfig"
>  
>  endmenu
> diff --git a/drivers/net/Makefile b/drivers/net/Makefile
> index a84d3dc..34dbee9 100644
> --- a/drivers/net/Makefile
> +++ b/drivers/net/Makefile
> @@ -12,3 +12,4 @@ obj-$(CONFIG_DRIVER_NET_TAP)+= tap.o
>  obj-$(CONFIG_MIIDEV) += miidev.o
>  obj-$(CONFIG_NET_USB)+= usb/
>  obj-$(CONFIG_DRIVER_NET_TSE) += altera_tse.o
> +obj-$(CONFIG_DRIVER_NET_KS8851_MLL)  += ks8851_mll.o
> diff --git a/drivers/net/ks8851_mll.c b/drivers/net/ks8851_mll.c
> new file mode 100644
> index 000..aaaf099
> --- /dev/null
> +++ b/drivers/net/ks8851_mll.c
> @@ -0,0 +1,892 @@
> +/**
> + * Copyright (c) 2012 Jan Weitzel 
> + * based on kernel driver drivers/net/ks8851_mll.c
> + * Copyright (c) 2009 Micrel Inc.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> + */
> +
> +/**
> + * Supports:
> + * KS8851 16bit MLL chip from Micrel Inc.
> + */
> +#include 
> +#include 
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#define MAX_RECV_FRAMES  32
> +#define MAX_BUF_SIZE 2048
> +#define TX_BUF_SIZE  2000
> +#define RX_BUF_SIZE  2000
> +
> +#define KS_CCR   0x08
> +#define CCR_EEPROM   (1 << 9)
> +#define CCR_SPI  (1 << 8)
> +#define CCR_8BIT (1 << 7)
> +#define CCR_16BIT(1 << 6)
> +#define CCR_32BIT(1 << 5)
> +#define CCR_SHARED   (1 << 4)
> +#define CCR_32PIN(1 << 0)
> +
> +/* MAC address registers */
> +#define KS_MARL  0x10
> +#define KS_MARM  0x12
> +#define KS_MARH  0x14
> +
> +#define KS_OBCR  0x20
> +#define OBCR_ODS_16MA(1 << 6)
> +
> +#define KS_EEPCR 

[PATCH v2] NET: Add support for ks8851_mll

2012-03-12 Thread Jan Weitzel
Add support for KS8851 16bit MLL chip from Micrel Inc.

Signed-off-by: Jan Weitzel 
---
v2: use dev_* for messages

 drivers/base/resource.c  |   33 ++
 drivers/net/Kconfig  |7 +
 drivers/net/Makefile |1 +
 drivers/net/ks8851_mll.c |  892 ++
 include/driver.h |   11 +
 5 files changed, 944 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/ks8851_mll.c

diff --git a/drivers/base/resource.c b/drivers/base/resource.c
index d2f7a07..b31c7d7 100644
--- a/drivers/base/resource.c
+++ b/drivers/base/resource.c
@@ -121,3 +121,36 @@ struct device_d *add_usb_ehci_device(int id, 
resource_size_t hccr,
 }
 EXPORT_SYMBOL(add_usb_ehci_device);
 #endif
+
+#ifdef CONFIG_DRIVER_NET_KS8851_MLL
+struct device_d *add_ks8851_device(int id, resource_size_t addr,
+   resource_size_t addr_cmd, int flags, void *pdata)
+{
+   struct resource *res;
+   resource_size_t size;
+
+   switch (flags) {
+   case IORESOURCE_MEM_16BIT:
+   size = 2;
+   break;
+   case IORESOURCE_MEM_8BIT:
+   size = 1;
+   break;
+   default:
+   printf("ks8851: memory width flag missing\n");
+   return NULL;
+   }
+
+   res = xzalloc(sizeof(struct resource) * 2);
+
+   res[0].start = addr;
+   res[0].size = size;
+   res[0].flags = IORESOURCE_MEM | flags;
+   res[1].start = addr_cmd;
+   res[1].size = size;
+   res[1].flags = IORESOURCE_MEM | flags;
+
+   return add_generic_device_res("ks8851_mll", id, res, 2, pdata);
+}
+EXPORT_SYMBOL(add_ks8851_device);
+#endif
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index b236d17..4cdb37b 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -100,6 +100,13 @@ config TSE_USE_DEDICATED_DESC_MEM
  reserved with a malloc but directly mapped to the memory
  address (defined in config.h)
 
+config DRIVER_NET_KS8851_MLL
+   bool "ks8851 mll ethernet driver"
+   select MIIDEV
+   help
+ This option enables support for the Micrel KS8851 MLL
+ ethernet chip.
+
 source "drivers/net/usb/Kconfig"
 
 endmenu
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index a84d3dc..34dbee9 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -12,3 +12,4 @@ obj-$(CONFIG_DRIVER_NET_TAP)  += tap.o
 obj-$(CONFIG_MIIDEV)   += miidev.o
 obj-$(CONFIG_NET_USB)  += usb/
 obj-$(CONFIG_DRIVER_NET_TSE)   += altera_tse.o
+obj-$(CONFIG_DRIVER_NET_KS8851_MLL)+= ks8851_mll.o
diff --git a/drivers/net/ks8851_mll.c b/drivers/net/ks8851_mll.c
new file mode 100644
index 000..aaaf099
--- /dev/null
+++ b/drivers/net/ks8851_mll.c
@@ -0,0 +1,892 @@
+/**
+ * Copyright (c) 2012 Jan Weitzel 
+ * based on kernel driver drivers/net/ks8851_mll.c
+ * Copyright (c) 2009 Micrel Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/**
+ * Supports:
+ * KS8851 16bit MLL chip from Micrel Inc.
+ */
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#define MAX_RECV_FRAMES32
+#define MAX_BUF_SIZE   2048
+#define TX_BUF_SIZE2000
+#define RX_BUF_SIZE2000
+
+#define KS_CCR 0x08
+#define CCR_EEPROM (1 << 9)
+#define CCR_SPI(1 << 8)
+#define CCR_8BIT   (1 << 7)
+#define CCR_16BIT  (1 << 6)
+#define CCR_32BIT  (1 << 5)
+#define CCR_SHARED (1 << 4)
+#define CCR_32PIN  (1 << 0)
+
+/* MAC address registers */
+#define KS_MARL0x10
+#define KS_MARM0x12
+#define KS_MARH0x14
+
+#define KS_OBCR0x20
+#define OBCR_ODS_16MA  (1 << 6)
+
+#define KS_EEPCR   0x22
+#define EEPCR_EESA (1 << 4)
+#define EEPCR_EESB (1 << 3)
+#define EEPCR_EEDO (1 << 2)
+#define EEPCR_EESCK(1 << 1)
+#define EEPCR_EECS (1 << 0)
+
+#define KS_MBIR0x24
+#def