net: add calxeda xgmac ethernet driver
Subsystems (3)
PATCH v2 1/1 net: add calxeda xgmac ethernet driver
From: Rob Herring <[email protected]>
Add support for the XGMAC 10Gb ethernet device in the Calxeda Highbank SOC.
Signed-off-by Rob Herring <[email protected]>
---
v2:
- use __le32 for descriptor fields and cpu_to_le32/le32_to_cpu to access
- use u32 instead of dma_addr_t for descriptor phys addresses
- improve allocation error handling for descriptor ring allocations
- converted all prints to netdev_XXX
- rebase to current Linus master
- move into drivers/net/ethernet
.../devicetree/bindings/net/calxeda-xgmac.txt | 16 + drivers/net/ethernet/Kconfig | 1 + drivers/net/ethernet/Makefile | 1 + drivers/net/ethernet/calxeda/Kconfig | 7 + drivers/net/ethernet/calxeda/Makefile | 2 + drivers/net/ethernet/calxeda/xgmac.c | 1928 ++++++++++++++++++++ 6 files changed, 1955 insertions(+), 0 deletions(-) create mode 100644 Documentation/devicetree/bindings/net/calxeda-xgmac.txt create mode 100644 drivers/net/ethernet/calxeda/Kconfig create mode 100644 drivers/net/ethernet/calxeda/Makefile create mode 100644 drivers/net/ethernet/calxeda/xgmac.c
Documentation/devicetree/bindings/net/calxeda-xgmac.txt new file +16 -0
@@ -0,0 +1,16 @@ +* Calxeda Highbank 10Gb XGMAC Ethernet + +Required properties: +- compatible : Should be "calxeda,hb-xgmac" +- reg : Address and length of the register set for the device +- interrupts : Should contain 3 xgmac interrupts. The 1st is main interrupt. + The 2nd is pwr mgt interrupt. The 3rd is low power state interrupt. + +Example: + +ethernet@fff50000 { + compatible = "calxeda,hb-xgmac"; + reg = <0xfff50000 0x1000>; + interrupts = <0 77 4 0 78 4 0 79 4>; +}; +
drivers/net/ethernet/Kconfig +1 -0
@@ -28,6 +28,7 @@ source "drivers/net/ethernet/cadence/Kconfig" source "drivers/net/ethernet/adi/Kconfig" source "drivers/net/ethernet/broadcom/Kconfig" source "drivers/net/ethernet/brocade/Kconfig" +source "drivers/net/ethernet/calxeda/Kconfig" source "drivers/net/ethernet/chelsio/Kconfig" source "drivers/net/ethernet/cirrus/Kconfig" source "drivers/net/ethernet/cisco/Kconfig"
drivers/net/ethernet/Makefile +1 -0
@@ -14,6 +14,7 @@ obj-$(CONFIG_NET_ATMEL) += cadence/ obj-$(CONFIG_NET_BFIN) += adi/ obj-$(CONFIG_NET_VENDOR_BROADCOM) += broadcom/ obj-$(CONFIG_NET_VENDOR_BROCADE) += brocade/ +obj-$(CONFIG_NET_CALXEDA_XGMAC) += calxeda/ obj-$(CONFIG_NET_VENDOR_CHELSIO) += chelsio/ obj-$(CONFIG_NET_VENDOR_CIRRUS) += cirrus/ obj-$(CONFIG_NET_VENDOR_CISCO) += cisco/
drivers/net/ethernet/calxeda/Kconfig new file +7 -0
@@ -0,0 +1,7 @@ +config NET_CALXEDA_XGMAC + tristate "Calxeda 1G/10G XGMAC Ethernet driver" + + select CRC32 + help + This is the driver for the XGMAC Ethernet IP block found on Calxeda + Highbank platforms.
drivers/net/ethernet/calxeda/Makefile new file +2 -0
@@ -0,0 +1,2 @@ +obj-$(CONFIG_NET_CALXEDA_XGMAC) += xgmac.o +
drivers/net/ethernet/calxeda/xgmac.c new file +1928 -0
1,928 lines not on this page · raw message
Signature · 1 line
1.7.5.4
Quoted 1 line · Rob Herring
From: Rob Herring <[email protected]>
Hi Rob, one more comment
Quoted 18 lines
drivers/net/ethernet/calxeda/xgmac.c new file +15
-0+static void xgmac_tx_complete (struct xgmac_priv *priv) +{ + void __iomem *ioaddr = priv->base; + + + writel(DMA_STATUS_TU | DMA_STATUS_NIS, ioaddr + XGMAC_DMA_STATUS); + + while (dma_ring_cnt(priv->tx_head, priv->tx_tail, DMA_TX_RING_SZ)) { + unsigned int entry = priv->tx_tail; + struct sk_buff *skb = priv->tx_skbuff[entry]; + struct xgmac_dma_desc *p = priv->dma_tx + entry; + + /* Check if the descriptor is owned by the DMA. */ + if (desc_get_owner(p)) + break;
drivers/net/ethernet/calxeda/xgmac.c line 862
Quoted 10 lines
drivers/net/ethernet/calxeda/xgmac.c new file +10
-0+ + /* Verify tx error by looking at the last segment */ + if (desc_get_tx_ls(p)) + desc_get_tx_status(priv, p); + + netdev_dbg(priv->dev, "tx ring: curr %d, dirty %d\n", + priv->tx_head, priv->tx_tail); + + dma_unmap_single(priv->device, desc_get_buf_addr(p), + desc_get_buf_len(p), DMA_TO_DEVICE);
I think you missed to do dma_unmap_page for the skp frags page. saeed