linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: rmk+kernel@arm.linux.org.uk (Russell King)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 111/222] net:fec: add scatter-gather support
Date: Fri, 25 Apr 2014 12:40:24 +0100	[thread overview]
Message-ID: <E1WdeUS-0007Kc-88@rmk-PC.arm.linux.org.uk> (raw)
In-Reply-To: <20140425112951.GK26756@n2100.arm.linux.org.uk>

Add scatter-gather support for SKB transmission.  This allows the
driver to make use of GSO, which when enabled allows the iMX6Q to
increase TCP transmission throughput from about 320 to 420Mbps,
measured with iperf 2.0.5

We adjust the minimum transmit ring space according to whether SG
support is enabled or not.  This allows non-SG configurations to avoid
the tx ring reservation necessary for SG, thereby making full use of
their available ring (since non-SG requires just one tx ring entry per
packet.)

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
---
 drivers/net/ethernet/freescale/fec.h      |   2 +
 drivers/net/ethernet/freescale/fec_main.c | 204 ++++++++++++++++++++++++------
 2 files changed, 164 insertions(+), 42 deletions(-)

diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h
index 1650c8440f5f..aca92660d2be 100644
--- a/drivers/net/ethernet/freescale/fec.h
+++ b/drivers/net/ethernet/freescale/fec.h
@@ -280,6 +280,7 @@ struct fec_enet_private {
 	struct clk *clk_enet_out;
 	struct clk *clk_ptp;
 
+	unsigned char tx_page_map[TX_RING_SIZE];
 	/* The saved address of a sent-in-place packet/buffer, for skfree(). */
 	unsigned char *tx_bounce[TX_RING_SIZE];
 	struct	sk_buff *tx_skbuff[TX_RING_SIZE];
@@ -293,6 +294,7 @@ struct fec_enet_private {
 	/* The next free ring entry */
 	unsigned short tx_next;
 	unsigned short tx_dirty;
+	unsigned short tx_min;
 	unsigned short rx_next;
 
 	unsigned short tx_ring_size;
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index 47d4aa2842a4..45733f9c3c85 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -170,6 +170,9 @@ MODULE_PARM_DESC(macaddr, "FEC Ethernet MAC address");
 #error "FEC: descriptor ring size constants too large"
 #endif
 
+/* Minimum TX ring size when using NETIF_F_SG */
+#define TX_RING_SIZE_MIN_SG (2 * (MAX_SKB_FRAGS + 1))
+
 /* Interrupt events/masks. */
 #define FEC_ENET_HBERR	((uint)0x80000000)	/* Heartbeat error */
 #define FEC_ENET_BABR	((uint)0x40000000)	/* Babbling receiver */
@@ -293,10 +296,19 @@ static void fec_dump(struct net_device *ndev)
 static int
 fec_enet_clear_csum(struct sk_buff *skb, struct net_device *ndev)
 {
+	int csum_start;
+
 	/* Only run for packets requiring a checksum. */
 	if (skb->ip_summed != CHECKSUM_PARTIAL)
 		return 0;
 
+	csum_start = skb_checksum_start_offset(skb);
+	if (csum_start + skb->csum_offset > skb_headlen(skb)) {
+		netdev_err(ndev, "checksum outside skb head: headlen %u start %u offset %u\n",
+			   skb_headlen(skb), csum_start, skb->csum_offset);
+		return -1;
+	}
+
 	if (unlikely(skb_cow_head(skb, 0)))
 		return -1;
 
@@ -306,14 +318,32 @@ fec_enet_clear_csum(struct sk_buff *skb, struct net_device *ndev)
 }
 
 static void
-fec_enet_tx_unmap(union bufdesc_u *bdp, struct fec_enet_private *fep)
+fec_enet_tx_unmap(unsigned index, union bufdesc_u *bdp, struct fec_enet_private *fep)
 {
 	dma_addr_t addr = bdp->bd.cbd_bufaddr;
 	unsigned length = bdp->bd.cbd_datlen;
 
 	bdp->bd.cbd_bufaddr = 0;
 
-	dma_unmap_single(&fep->pdev->dev, addr, length, DMA_TO_DEVICE);
+	if (fep->tx_page_map[index])
+		dma_unmap_page(&fep->pdev->dev, addr, length, DMA_TO_DEVICE);
+	else
+		dma_unmap_single(&fep->pdev->dev, addr, length, DMA_TO_DEVICE);
+}
+
+static void
+fec_enet_tx_unmap_range(unsigned index, unsigned last, struct fec_enet_private *fep)
+{
+	union bufdesc_u *bdp;
+
+	do {
+		if (last == 0)
+			last = fep->tx_ring_size;
+		last--;
+
+		bdp = fec_enet_tx_get(last, fep);
+		fec_enet_tx_unmap(last, bdp, fep);
+	} while (index != last);
 }
 
 static unsigned ring_free(unsigned ins, unsigned rem, unsigned size)
@@ -331,14 +361,14 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
 	union bufdesc_u *bdp;
 	void *bufaddr;
 	unsigned short	status;
-	unsigned index;
-	unsigned length;
+	unsigned index, last, length, cbd_esc;
+	int f, nr_frags = skb_shinfo(skb)->nr_frags;
 	dma_addr_t addr;
 
 	/* Fill in a Tx ring entry */
 	index = fep->tx_next;
 
-	if (ring_free(index, fep->tx_dirty, fep->tx_ring_size) < 1) {
+	if (ring_free(index, fep->tx_dirty, fep->tx_ring_size) < 1 + nr_frags) {
 		/* Ooops.  All transmit buffers are full.  Bail out.
 		 * This should not happen, since ndev->tbusy should be set.
 		 */
@@ -354,7 +384,7 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
 
 	/* Set buffer length and buffer pointer */
 	bufaddr = skb->data;
-	length = skb->len;
+	length = skb_headlen(skb);
 
 	/*
 	 * On some FEC implementations data must be aligned on
@@ -376,38 +406,72 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
 
 	/* Push the data cache so the CPM does not get stale memory data. */
 	addr = dma_map_single(&fep->pdev->dev, bufaddr, length, DMA_TO_DEVICE);
-	if (dma_mapping_error(&fep->pdev->dev, addr)) {
-		dev_kfree_skb_any(skb);
-		if (net_ratelimit())
-			netdev_err(ndev, "Tx DMA memory map failed\n");
-		return NETDEV_TX_OK;
-	}
-
-	/* Save skb pointer */
-	fep->tx_skbuff[index] = skb;
+	if (dma_mapping_error(&fep->pdev->dev, addr))
+		goto release;
 
 	bdp = fec_enet_tx_get(index, fep);
 	bdp->bd.cbd_datlen = length;
 	bdp->bd.cbd_bufaddr = addr;
 
+	fep->tx_page_map[index] = 0;
+
+	cbd_esc = BD_ENET_TX_INT;
 	if (fep->bufdesc_ex) {
-		bdp->ebd.cbd_bdu = 0;
 		if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP &&
 			fep->hwts_tx_en)) {
-			bdp->ebd.cbd_esc = (BD_ENET_TX_TS | BD_ENET_TX_INT);
+			cbd_esc |= BD_ENET_TX_TS;
 			skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
 		} else {
-			bdp->ebd.cbd_esc = BD_ENET_TX_INT;
-
 			/* Enable protocol checksum flags
 			 * We do not bother with the IP Checksum bits as they
 			 * are done by the kernel
 			 */
 			if (skb->ip_summed == CHECKSUM_PARTIAL)
-				bdp->ebd.cbd_esc |= BD_ENET_TX_PINS;
+				cbd_esc |= BD_ENET_TX_PINS;
+		}
+		bdp->ebd.cbd_bdu = 0;
+		bdp->ebd.cbd_esc = cbd_esc;
+	}
+
+	for (last = index, f = 0; f < nr_frags; f++) {
+		const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[f];
+
+		if (++last >= fep->tx_ring_size)
+			last = 0;
+
+		length = skb_frag_size(frag);
+
+		/* If the alignment is unsuitable, we need to bounce. */
+		if (frag->page_offset & FEC_ALIGNMENT) {
+			unsigned char *bounce = fep->tx_bounce[last];
+
+			/* FIXME: highdma? */
+			memcpy(bounce, skb_frag_address(frag), length);
+
+			addr = dma_map_single(&fep->pdev->dev, bounce,
+					      length, DMA_TO_DEVICE);
+			fep->tx_page_map[last] = 0;
+		} else {
+			addr = skb_frag_dma_map(&fep->pdev->dev, frag, 0,
+						length, DMA_TO_DEVICE);
+			fep->tx_page_map[last] = 1;
+		}
+
+		if (dma_mapping_error(&fep->pdev->dev, addr))
+			goto release_frags;
+
+		bdp = fec_enet_tx_get(last, fep);
+		bdp->bd.cbd_datlen = length;
+		bdp->bd.cbd_bufaddr = addr;
+		if (fep->bufdesc_ex) {
+			bdp->ebd.cbd_esc = cbd_esc;
+			bdp->ebd.cbd_bdu = 0;
 		}
 	}
 
+	/* Save skb pointer */
+	fep->tx_skbuff[last] = skb;
+
 	/*
 	 * We need the preceding stores to the descriptor to complete
 	 * before updating the status field, which hands it over to the
@@ -418,18 +482,30 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
 	/* Send it on its way.  Tell FEC it's ready, interrupt when done,
 	 * it's the last BD of the frame, and to put the CRC on the end.
 	 */
-	status = bdp->bd.cbd_sc & ~BD_ENET_TX_STATS;
+	status = bdp->bd.cbd_sc & BD_ENET_TX_WRAP;
 	bdp->bd.cbd_sc = status | BD_ENET_TX_READY | BD_ENET_TX_INTR |
 			 BD_ENET_TX_LAST | BD_ENET_TX_TC;
 
+	/* Now walk backwards setting the TX_READY on each fragment */
+	for (f = nr_frags - 1; f >= 0; f--) {
+		unsigned i = index + f;
+
+		if (i >= fep->tx_ring_size)
+			i -= fep->tx_ring_size;
+
+		bdp = fec_enet_tx_get(i, fep);
+		status = bdp->bd.cbd_sc & BD_ENET_TX_WRAP;
+		bdp->bd.cbd_sc = status | BD_ENET_TX_READY | BD_ENET_TX_INTR;
+	}
+
 	skb_tx_timestamp(skb);
 
-	if (++index >= fep->tx_ring_size)
-		index = 0;
+	if (++last >= fep->tx_ring_size)
+		last = 0;
 
-	fep->tx_next = index;
+	fep->tx_next = last;
 
-	if (ring_free(index, fep->tx_dirty, fep->tx_ring_size) < 1)
+	if (ring_free(last, fep->tx_dirty, fep->tx_ring_size) < fep->tx_min)
 		netif_stop_queue(ndev);
 
 	/* Trigger transmission start */
@@ -437,6 +513,14 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
 		writel(0, fep->hwp + FEC_X_DES_ACTIVE);
 
 	return NETDEV_TX_OK;
+
+ release_frags:
+	fec_enet_tx_unmap_range(index, last, fep);
+ release:
+	dev_kfree_skb_any(skb);
+	if (net_ratelimit())
+		netdev_err(ndev, "Tx DMA memory map failed\n");
+	return NETDEV_TX_OK;
 }
 
 /* Init RX & TX buffer descriptors
@@ -473,7 +557,7 @@ static void fec_enet_bd_init(struct net_device *dev)
 		else
 			bdp->bd.cbd_sc = 0;
 		if (bdp->bd.cbd_bufaddr)
-			fec_enet_tx_unmap(bdp, fep);
+			fec_enet_tx_unmap(i, bdp, fep);
 		if (fep->tx_skbuff[i]) {
 			dev_kfree_skb_any(fep->tx_skbuff[i]);
 			fep->tx_skbuff[i] = NULL;
@@ -767,7 +851,7 @@ fec_enet_tx(struct net_device *ndev)
 		if (status & BD_ENET_TX_READY)
 			break;
 
-		fec_enet_tx_unmap(bdp, fep);
+		fec_enet_tx_unmap(index, bdp, fep);
 
 		skb = fep->tx_skbuff[index];
 		fep->tx_skbuff[index] = NULL;
@@ -787,17 +871,9 @@ fec_enet_tx(struct net_device *ndev)
 				ndev->stats.tx_fifo_errors++;
 			if (status & BD_ENET_TX_CSL) /* Carrier lost */
 				ndev->stats.tx_carrier_errors++;
-		} else {
+		} else if (skb) {
 			ndev->stats.tx_packets++;
-			ndev->stats.tx_bytes += bdp->bd.cbd_datlen;
-		}
-
-		if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS) &&
-			fep->bufdesc_ex) {
-			struct skb_shared_hwtstamps shhwtstamps;
-
-			fec_enet_hwtstamp(fep, bdp->ebd.ts, &shhwtstamps);
-			skb_tstamp_tx(skb, &shhwtstamps);
+			ndev->stats.tx_bytes += skb->len;
 		}
 
 		/* Deferred means some collisions occurred during transmit,
@@ -806,8 +882,18 @@ fec_enet_tx(struct net_device *ndev)
 		if (status & BD_ENET_TX_DEF)
 			ndev->stats.collisions++;
 
-		/* Free the sk buffer associated with this last transmit */
-		dev_kfree_skb_any(skb);
+		if (skb) {
+			if (fep->bufdesc_ex &&
+			    unlikely(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS)) {
+				struct skb_shared_hwtstamps shhwtstamps;
+
+				fec_enet_hwtstamp(fep, bdp->ebd.ts, &shhwtstamps);
+				skb_tstamp_tx(skb, &shhwtstamps);
+			}
+
+			/* Free the sk buffer associated with this last transmit */
+			dev_kfree_skb_any(skb);
+		}
 
 		fep->tx_dirty = index;
 	} while (1);
@@ -817,7 +903,8 @@ fec_enet_tx(struct net_device *ndev)
 		writel(0, fep->hwp + FEC_X_DES_ACTIVE);
 
 	if (netif_queue_stopped(ndev) &&
-	    ring_free(fep->tx_next, fep->tx_dirty, fep->tx_ring_size))
+	    ring_free(fep->tx_next, fep->tx_dirty, fep->tx_ring_size) >=
+	      fep->tx_min)
 		netif_wake_queue(ndev);
 }
 
@@ -1701,7 +1788,7 @@ static void fec_enet_free_buffers(struct net_device *ndev)
 	for (i = 0; i < fep->tx_ring_size; i++) {
 		bdp = fec_enet_tx_get(i, fep);
 		if (bdp->bd.cbd_bufaddr)
-			fec_enet_tx_unmap(bdp, fep);
+			fec_enet_tx_unmap(i, bdp, fep);
 		kfree(fep->tx_bounce[i]);
 		fep->tx_bounce[i] = NULL;
 		skb = fep->tx_skbuff[i];
@@ -1938,7 +2025,22 @@ static void fec_poll_controller(struct net_device *dev)
 }
 #endif
 
-#define FEATURES_NEED_QUIESCE NETIF_F_RXCSUM
+static netdev_features_t fec_fix_features(struct net_device *ndev,
+	netdev_features_t features)
+{
+	struct fec_enet_private *fep = netdev_priv(ndev);
+
+	/*
+	 * NETIF_F_SG requires a minimum transmit ring size.  If we
+	 * have less than this size, we can't support this feature.
+	 */
+	if (fep->tx_ring_size < TX_RING_SIZE_MIN_SG)
+		features &= ~NETIF_F_SG;
+
+	return features;
+}
+
+#define FEATURES_NEED_QUIESCE (NETIF_F_RXCSUM | NETIF_F_SG)
 
 static int fec_set_features(struct net_device *netdev,
 	netdev_features_t features)
@@ -1963,6 +2065,12 @@ static int fec_set_features(struct net_device *netdev,
 			fep->csum_flags &= ~FLAG_RX_CSUM_ENABLED;
 	}
 
+	/* Set the appropriate minimum transmit ring free threshold */
+	if (features & NETIF_F_SG)
+		fep->tx_min = MAX_SKB_FRAGS + 1;
+	else
+		fep->tx_min = 1;
+
 	/* Resume the device after updates */
 	if (netif_running(netdev) && changed & FEATURES_NEED_QUIESCE) {
 		fec_restart(netdev);
@@ -1987,6 +2095,7 @@ static const struct net_device_ops fec_netdev_ops = {
 #ifdef CONFIG_NET_POLL_CONTROLLER
 	.ndo_poll_controller	= fec_poll_controller,
 #endif
+	.ndo_fix_features	= fec_fix_features,
 	.ndo_set_features	= fec_set_features,
 };
 
@@ -2052,6 +2161,17 @@ static int fec_enet_init(struct net_device *ndev)
 		fep->csum_flags |= FLAG_RX_CSUM_ENABLED;
 	}
 
+	if (!(id_entry->driver_data & FEC_QUIRK_SWAP_FRAME)) {
+		/* don't enable SG if we need to swap frames */
+		ndev->features |= NETIF_F_SG;
+		ndev->hw_features |= NETIF_F_SG;
+	}
+
+	if (ndev->features & NETIF_F_SG)
+		fep->tx_min = MAX_SKB_FRAGS + 1;
+	else
+		fep->tx_min = 1;
+
 	fec_restart(ndev);
 
 	return 0;
-- 
1.8.3.1

  parent reply	other threads:[~2014-04-25 11:40 UTC|newest]

Thread overview: 232+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-25 11:29 [PATCH 000/222] The *Full* Cubox-i series Russell King - ARM Linux
2014-04-25 11:31 ` [PATCH 001/222] ARM: l2c: remove outer_inv_all() method Russell King
2014-04-25 11:31 ` [PATCH 002/222] ARM: l2c: remove unnecessary call to outer_flush_all() Russell King
2014-04-25 11:31 ` [PATCH 003/222] ARM: l2c: avoid calling outer_flush_all() unnecessarily (Spear) Russell King
2014-04-25 11:31 ` [PATCH 004/222] ARM: l2c: omap2: remove ES1.0 support Russell King
2014-04-25 11:31 ` [PATCH 005/222] ARM: l2c: remove unnecessary UL-suffix to mask values Russell King
2014-04-25 11:31 ` [PATCH 006/222] ARM: outer cache: add documentation of outer cache functions Russell King
2014-04-25 11:31 ` [PATCH 007/222] ARM: outer cache: add WARN_ON() to outer_disable() Russell King
2014-04-25 11:31 ` [PATCH 008/222] ARM: l2c: add helper for L2 cache controller DT IDs Russell King
2014-04-25 11:31 ` [PATCH 009/222] ARM: l2c: tidy up l2x0_of_data declarations Russell King
2014-04-25 11:31 ` [PATCH 010/222] ARM: l2c: rename OF specific things, making l2x0_of_data available to all Russell King
2014-04-25 11:31 ` [PATCH 011/222] ARM: l2c: provide generic function for calling set_debug method Russell King
2014-04-25 11:31 ` [PATCH 012/222] ARM: l2c: split out cache unlock code Russell King
2014-04-25 11:32 ` [PATCH 013/222] ARM: l2c: provide generic helper for way-based operations Russell King
2014-04-25 11:32 ` [PATCH 014/222] ARM: l2c: rename cache_wait_way() Russell King
2014-04-25 11:32 ` [PATCH 015/222] ARM: l2c: add and use L2C revision constants Russell King
2014-04-25 11:32 ` [PATCH 016/222] ARM: l2c: clean up OF initialisation a bit Russell King
2014-04-25 11:32 ` [PATCH 017/222] ARM: l2c: pass iomem address into data->save function Russell King
2014-04-25 11:32 ` [PATCH 018/222] ARM: l2c: move l2c save function to __l2c_init() Russell King
2014-04-25 11:32 ` [PATCH 019/222] ARM: l2c: group implementation specific code together Russell King
2014-04-25 11:32 ` [PATCH 020/222] ARM: l2c: provide enable method Russell King
2014-04-25 11:32 ` [PATCH 021/222] ARM: l2c: write auxctrl register before unlocking Russell King
2014-04-25 11:32 ` [PATCH 022/222] ARM: l2c: only write the auxiliary control register if required Russell King
2014-04-25 11:32 ` [PATCH 023/222] ARM: l2c: move aurora broadcast setup to enable function Russell King
2014-04-25 11:32 ` [PATCH 024/222] ARM: l2c: implement fixups for L2 cache controller quirks/errata Russell King
2014-04-25 11:33 ` [PATCH 025/222] ARM: l2c: clean up L2 cache initialisation messages Russell King
2014-04-25 11:33 ` [PATCH 026/222] ARM: l2c: move and add ARM L2C-2x0/L2C-310 save/resume code to non-OF Russell King
2014-04-25 11:33 ` [PATCH 027/222] ARM: l2c: clean up save/resume functions Russell King
2014-04-25 11:33 ` [PATCH 028/222] ARM: l2c: simplify l2x0 unlocking code Russell King
2014-04-25 11:33 ` [PATCH 029/222] ARM: l2c: move pl310_set_debug() into l2c-310 code Russell King
2014-04-25 11:33 ` [PATCH 030/222] ARM: l2c: add L2C-210 specific handlers Russell King
2014-04-25 11:33 ` [PATCH 031/222] ARM: l2c: implement L2C-310 erratum 727915 as a method override Russell King
2014-04-25 11:33 ` [PATCH 032/222] ARM: l2c: implement L2C-310 erratum 588369 " Russell King
2014-04-25 11:33 ` [PATCH 033/222] ARM: l2c: use L2C-210 handlers for L2C-310 errata-less implementations Russell King
2014-04-25 11:33 ` [PATCH 034/222] ARM: l2c: add L2C-220 specific handlers Russell King
2014-04-25 11:33 ` [PATCH 035/222] ARM: l2c: convert Broadcom L2C-310 to new code Russell King
2014-04-25 11:34 ` [PATCH 036/222] ARM: l2c: remove obsolete l2x0 ops for non-OF init Russell King
2014-04-25 11:34 ` [PATCH 037/222] ARM: l2c: move type string into l2c_init_data structure Russell King
2014-04-25 11:34 ` [PATCH 038/222] ARM: l2c: add decode for L2C-220 cache ways Russell King
2014-04-25 11:34 ` [PATCH 039/222] ARM: l2c: move way size calculation data into l2c_init_data Russell King
2014-04-25 11:34 ` [PATCH 040/222] ARM: l2c: move errata configuration options to arch/arm/mm/Kconfig Russell King
2014-04-25 11:34 ` [PATCH 041/222] ARM: l2c: provide generic hook to intercept writes to secure registers Russell King
2014-04-25 11:34 ` [PATCH 042/222] ARM: l2c: omap2: implement new write_sec method Russell King
2014-04-25 11:34 ` [PATCH 043/222] ARM: l2c: omap2: remove explicit SMI calls to enable L2 cache Russell King
2014-04-25 11:34 ` [PATCH 044/222] ARM: l2c: highbank: implement new write_sec method Russell King
2014-04-25 11:34 ` [PATCH 045/222] ARM: l2c: highbank: remove explicit SMI call in L2 cache initialisation Russell King
2014-04-25 11:34 ` [PATCH 046/222] ARM: l2c: ux500: implement dummy write_sec method Russell King
2014-04-25 11:34 ` [PATCH 047/222] ARM: l2c: remove old .set_debug method Russell King
2014-04-25 11:35 ` [PATCH 048/222] ARM: l2c: implement L2C-310 erratum 752271 in core L2C code Russell King
2014-04-25 11:35 ` [PATCH 049/222] ARM: l2c: fix register naming Russell King
2014-04-25 11:35 ` [PATCH 050/222] ARM: l2c: add automatic enable of early BRESP Russell King
2014-04-25 11:35 ` [PATCH 051/222] ARM: l2c: remove platforms/SoCs setting " Russell King
2014-04-25 11:35 ` [PATCH 052/222] ARM: l2c: tegra: remove associativity and way size from aux_ctrl Russell King
2014-04-25 11:35 ` [PATCH 053/222] ARM: l2c: ux500: " Russell King
2014-04-25 11:35 ` [PATCH 054/222] ARM: l2c: ux500: don't try to change the L2 cache auxiliary control register Russell King
2014-04-25 11:35 ` [PATCH 055/222] ARM: l2c: cns3xxx: remove cache size override Russell King
2014-04-25 11:35 ` [PATCH 056/222] ARM: l2c: exynos: " Russell King
2014-04-25 11:35 ` [PATCH 057/222] ARM: l2c: nomadik: " Russell King
2014-04-25 11:35 ` [PATCH 058/222] ARM: l2c: omap2: " Russell King
2014-04-25 11:35 ` [PATCH 059/222] ARM: l2c: prima2: " Russell King
2014-04-25 11:36 ` [PATCH 060/222] ARM: l2c: shmobile: " Russell King
2014-04-25 11:36 ` [PATCH 061/222] ARM: l2c: spear13xx: " Russell King
2014-04-25 11:36 ` [PATCH 062/222] ARM: l2c: sti: " Russell King
2014-04-25 11:36 ` [PATCH 063/222] ARM: l2c: zynq: " Russell King
2014-04-25 11:36 ` [PATCH 064/222] ARM: l2c: realview: improve commentry about the L2 cache requirements Russell King
2014-04-25 11:36 ` [PATCH 065/222] ARM: l2c: kill L2X0_AUX_CTRL_MASK before anyone else makes use of this Russell King
2014-04-25 11:36 ` [PATCH 066/222] ARM: l2c: print a warning with L2C-310 caches if the cache size is modified Russell King
2014-04-25 11:36 ` [PATCH 067/222] ARM: l2c: vexpress ca9x4: move L2 cache initialisation earlier Russell King
2014-04-25 11:36 ` [PATCH 068/222] ARM: l2c: add L2C-310 power control DT properties Russell King
2014-04-25 11:36 ` [PATCH 069/222] ARM: l2c: check that DT files specify the required "cache-unified" property Russell King
2014-04-25 11:36 ` [PATCH 070/222] ARM: l2c: add warnings for stuff modifying aux_ctrl register values Russell King
2014-04-25 11:36 ` [PATCH 071/222] net:fec: remove unnecessary ip stack includes Russell King
2014-04-28 18:36   ` Frank Li
2014-04-28 18:39     ` Russell King - ARM Linux
2014-04-25 11:37 ` [PATCH 072/222] net:fec: reorder ethtool ops to match order in struct declaration Russell King
2014-04-25 11:37 ` [PATCH 073/222] net:fec: remove checking for NULL phy_dev in fec_enet_close() Russell King
2014-04-25 11:37 ` [PATCH 074/222] net:fec: ensure that a disconnected phy isn't configured Russell King
2014-04-25 11:37 ` [PATCH 075/222] net:fec: add support for dumping transmit ring on timeout Russell King
2014-04-25 11:37 ` [PATCH 076/222] net:fec: use netif_tx_disable() rather than netif_stop_queue() Russell King
2014-04-25 11:37 ` [PATCH 077/222] net:fec: iMX6 FEC does not support half-duplex gigabit Russell King
2014-04-25 11:37 ` [PATCH 078/222] net:fec: clean up transmit descriptor setup Russell King
2014-04-25 11:37 ` [PATCH 079/222] net:fec: make rx skb allocation/map more robust Russell King
2014-04-25 11:37 ` [PATCH 080/222] net:fec: ensure fec_enet_free_buffers() properly cleans the rings Russell King
2014-04-25 11:37 ` [PATCH 081/222] net:fec: fix missing kmalloc() failure check in fec_enet_alloc_buffers() Russell King
2014-04-25 11:37 ` [PATCH 082/222] net:fec: ensure that we dma unmap the transmit descriptors Russell King
2014-04-25 11:38 ` [PATCH 083/222] net:fec: remove useless fep->opened Russell King
2014-04-25 11:38 ` [PATCH 084/222] net:fec: stop the phy before shutting down the MAC Russell King
2014-04-25 11:38 ` [PATCH 085/222] net:fec: improve safety of suspend/resume/transmit timeout paths Russell King
2014-04-25 11:38 ` [PATCH 086/222] net:fec: ensure fec_enet_close() copes with resume failure Russell King
2014-04-25 11:38 ` [PATCH 087/222] net:fec: only run a restart or stop if the device is present and running Russell King
2014-04-25 11:38 ` [PATCH 088/222] net:fec: move calls to quiesce/resume packet processing out of fec_restart() Russell King
2014-04-25 11:38 ` [PATCH 089/222] net:fec: remove inappropriate calls around fec_restart() Russell King
2014-04-25 11:38 ` [PATCH 090/222] net:fec: quiesce packet processing before stopping device in fec_suspend() Russell King
2014-04-25 11:38 ` [PATCH 091/222] net:fec: quiesce packet processing before stopping device in fec_set_features() Russell King
2014-04-25 11:38 ` [PATCH 092/222] net:fec: quiesce packet processing before changing features Russell King
2014-04-25 11:38 ` [PATCH 093/222] net:fec: quiesce packet processing when taking link down in fec_enet_adjust_link() Russell King
2014-04-25 11:38 ` [PATCH 094/222] net:fec: fix ethtool set_pauseparam duplex bug Russell King
2014-04-25 11:39 ` [PATCH 095/222] net:fec: clean up duplex mode handling Russell King
2014-04-25 11:39 ` [PATCH 096/222] net:fec: add barrier to transmit path to ensure proper ordering Russell King
2014-04-25 11:39 ` [PATCH 097/222] net:fec: add barrier to receive " Russell King
2014-04-25 11:39 ` [PATCH 098/222] net:fec: better implementation of iMX6 ERR006358 quirk Russell King
2014-04-25 11:39 ` [PATCH 099/222] net:fec: avoid hitting transmitter if it is still running Russell King
2014-04-25 11:39 ` [PATCH 100/222] net:fec: remove delayed work Russell King
2014-04-25 11:39 ` [PATCH 101/222] net:fec: fix interrupt handling races Russell King
2014-04-25 11:39 ` [PATCH 102/222] net:fec: clear receive interrupts before processing a packet Russell King
2014-04-25 11:39 ` [PATCH 103/222] net:fec: remove useless status check in tx reap path Russell King
2014-04-25 11:39 ` [PATCH 104/222] net:fec: use a union for the buffer descriptors Russell King
2014-04-25 11:39 ` [PATCH 105/222] net:fec: consolidate hwtstamp implementation Russell King
2014-04-25 11:39 ` [PATCH 106/222] net:fec: better indexing for transmit descriptor ring Russell King
2014-04-25 11:40 ` [PATCH 107/222] net:fec: better indexing for receive " Russell King
2014-04-25 11:40 ` [PATCH 108/222] net:fec: calculate ring space rather than relying on comparing indices Russell King
2014-04-25 11:40 ` [PATCH 109/222] net:fec: increase transmit ring size Russell King
2014-04-25 11:40 ` [PATCH 110/222] net:fec: increase receive " Russell King
2014-04-25 11:40 ` Russell King [this message]
2014-04-25 11:40 ` [PATCH 112/222] net:fec: add byte queue limits support Russell King
2014-04-25 11:41 ` [PATCH 113/222] net:fec: add better flow control support Russell King
2014-04-25 11:41 ` [PATCH 114/222] net:fec: move transmit dma ring address calculation to fec_enet_init() Russell King
2014-04-25 11:41 ` [PATCH 115/222] net:fec: allocate descriptor rings at device open, and free on device close Russell King
2014-04-25 11:41 ` [PATCH 116/222] net:fec: remove unnecessary code Russell King
2014-04-25 11:41 ` [PATCH 117/222] net:fec: consolidate common parts of mdio read/write Russell King
2014-04-25 11:41 ` [PATCH 118/222] net:fec: add locking for MDIO bus access Russell King
2014-04-25 11:41 ` [PATCH 119/222] net:fec: move bufdesc_ex flag into flags Russell King
2014-04-25 11:41 ` [PATCH 120/222] net:fec: move receive checksum flags into new flags member Russell King
2014-04-25 11:41 ` [PATCH 121/222] net:fec: only enable CTAG_RX and IP checksumming if we have enhanced buffer descriptors Russell King
2014-04-25 11:41 ` [PATCH 122/222] net:fec: avoid checking more flags than necessary in rx path Russell King
2014-04-25 11:41 ` [PATCH 123/222] net:fec: move vlan receive flag into our private flags Russell King
2014-04-25 11:42 ` [PATCH 124/222] net:fec: add ethtool support for tx/rx ring sizes Russell King
2014-04-25 11:42 ` [PATCH 125/222] net:fec: even larger rings Russell King
2014-04-25 11:42 ` [PATCH 126/222] net:fec: unsorted hacks Russell King
2014-04-25 11:42 ` [PATCH 127/222] leds: leds-pwm: provide a common function to setup a single led-pwm device Russell King
2014-04-25 11:42 ` [PATCH 128/222] leds: leds-pwm: convert OF parsing code to use led_pwm_add() Russell King
2014-04-25 11:42 ` [PATCH 129/222] leds: leds-pwm: implement PWM inversion Russell King
2014-04-25 11:42 ` [PATCH 130/222] leds: leds-pwm: add DT support for LEDs wired to supply Russell King
2014-04-25 11:42 ` [PATCH 131/222] ARM: add support for Cubox-i PWM-driven front panel LED Russell King
2014-04-25 11:42 ` [PATCH 132/222] ASoC: work around block transfer issues with imx-pcm-dma Russell King
2014-04-25 11:42 ` [PATCH 133/222] ata: ahci_imx: warn when disabling ahci link Russell King
2014-04-25 11:42 ` [PATCH 134/222] ARM: imx: keep PLLs in bypass while they're locking Russell King
2014-04-30 10:52   ` Dirk Behme
2014-05-08  8:59     ` Dirk Behme
2014-04-25 11:42 ` [PATCH 135/222] ARM: imx: set IPU to be derived from the 540MHz PLL3 PFD1 clock Russell King
2014-04-25 11:43 ` [PATCH 136/222] regulator: allow GPIO 0 to be used for an enable signal Russell King
2014-04-25 11:43 ` [PATCH 137/222] ARM: dt: microsom: don't set bit 7 for ethernet mux settings Russell King
2014-04-25 11:43 ` [PATCH 138/222] ARM: imx6q: clk: Parent DI clocks to video PLL via di_pre_sel Russell King
2014-04-25 11:43 ` [PATCH 139/222] ARM: i.MX6: ipu_di_sel clocks can set parent rates Russell King
2014-04-25 11:43 ` [PATCH 140/222] ata: ahci_imx: allow hardware parameters to be specified in DT Russell King
2014-04-25 11:43 ` [PATCH 141/222] ARM: cubox-i: add eSATA DT configuration Russell King
2014-04-25 11:43 ` [PATCH 142/222] ahci_imx: add disable for spread-spectrum Russell King
2014-04-25 11:43 ` [PATCH 143/222] imx-drm: imx-drm-core: fix imx_drm_encoder_get_mux_id Russell King
2014-04-25 11:43 ` [PATCH 144/222] imx-drm: imx-drm-core: skip components whose parent device is disabled Russell King
2014-04-25 11:43 ` [PATCH 145/222] imx-drm: imx-ldb: add drm_panel support Russell King
2014-04-25 11:43 ` [PATCH 146/222] imx-drm: match ipu_di_signal_cfg's clk_pol with its description Russell King
2014-04-25 11:43 ` [PATCH 147/222] v4l2: add new V4L2_PIX_FMT_RGB666 pixel format Russell King
2014-04-25 11:44 ` [PATCH 148/222] imx-drm: add RGB666 support for parallel display Russell King
2014-04-25 11:44 ` [PATCH 149/222] imx-drm: ipu-common: add ipu_map_irq to request non-IDMAC interrupts Russell King
2014-04-25 11:44 ` [PATCH 150/222] imx-drm: ipu-common: add helpers to check for a busy IDMAC channel and to busywait for an interrupt Russell King
2014-04-25 11:44 ` [PATCH 151/222] imx-drm: ipu-dmfc: wait for FIFOs to run empty before disabling Russell King
2014-04-25 11:44 ` [PATCH 152/222] imx-drm: ipu-dc: wait for DC_FC_1 / DP_SF_END interrupt Russell King
2014-04-25 11:44 ` [PATCH 153/222] imx-drm: ipu-dp: split disabling the DP foreground channel from disabling the DP module Russell King
2014-04-25 11:44 ` [PATCH 154/222] imx-drm: imx-dp: when disabling the DP foreground channel, wait until the DP background channel is finished before disabling the IDMAC channel Russell King
2014-04-25 11:44 ` [PATCH 155/222] imx-drm: ipuv3-crtc: change display enable/disable order Russell King
2014-04-25 11:44 ` [PATCH 156/222] imx-drm: ipu-dc: disable DC module when not in use Russell King
2014-04-25 11:45 ` [PATCH 157/222] imx-drm: imx-hdmi: fix hdmi hotplug detection initial state Russell King
2014-04-25 11:46 ` [PATCH 158/222] dw-hdmi-audio: add audio driver Russell King
2014-04-25 11:46 ` [PATCH 159/222] dw-hdmi-audio: better hardware position tracking Russell King
2014-04-25 11:46 ` [PATCH 160/222] dw-hdmi-audio: parse ELD from HDMI driver Russell King
2014-04-25 11:48 ` [PATCH 161/222] dw-hdmi-audio: try to fix burbling audio Russell King
2014-04-25 11:48 ` [PATCH 162/222] dw-hdmi-audio: try implementing ERR005174 " Russell King
2014-04-25 11:48 ` [PATCH 163/222] dw-hdmi-audio: another attempt at fixing burbling Russell King
2014-04-25 11:48 ` [PATCH 164/222] dw-hdmi-audio: basic suspend/resume support Russell King
2014-04-25 11:48 ` [PATCH 165/222] cec: add generic HDMI CEC driver Russell King
2014-04-25 11:48 ` [PATCH 166/222] imx-drm: dw-hdmi-cec: add " Russell King
2014-04-25 11:48 ` [PATCH 167/222] ARM: imx: add HDMI support for SolidRun HummingBoard and Cubox-i Russell King
2014-04-25 11:48 ` [PATCH 168/222] ARM: imx: enable HDMI DRM support for imx_v6_v7_defconfig Russell King
2014-04-25 11:49 ` [PATCH 169/222] drm/i915: don't disable disconnected outputs Russell King
2014-04-25 11:49 ` [PATCH 170/222] drm: add generic ddc connector Russell King
2014-04-25 11:49 ` [PATCH 171/222] ARM: l2c: trial at enabling some Cortex-A9 optimisations Russell King
2014-04-25 11:49 ` [PATCH 172/222] ARM: l2c: move L2 cache register saving to a more sensible location Russell King
2014-04-25 11:50 ` [PATCH 173/222] ARM: l2c: always enable low power modes Russell King
2014-04-25 11:50 ` [PATCH 174/222] ARM: l2c: imx: remove direct write to power control register Russell King
2014-04-25 11:50 ` [PATCH 175/222] ARM: l2c: omap2: avoid reading directly from the L2 registers in platform code Russell King
2014-04-25 11:50 ` [PATCH 176/222] ARM: l2c: provide common PL310 early resume code Russell King
2014-04-25 11:50 ` [PATCH 177/222] ARM: l2c: exynos: convert to common l2c310 early resume functionality Russell King
2014-04-25 11:50 ` [PATCH 178/222] ARM: l2c: tegra: " Russell King
2014-04-25 11:50 ` [PATCH 179/222] ARM: l2c: imx: " Russell King
2014-04-25 11:50 ` [PATCH 180/222] ARM: l2c: always enable non-secure access to lockdown registers Russell King
2014-04-25 11:55 ` [PATCH 181/222] ARM: l2c: omap2+: get rid of redundant cache replacement policy setting Russell King
2014-04-25 11:55 ` [PATCH 182/222] ARM: l2c: omap2+: get rid of init call Russell King
2014-04-25 11:55 ` [PATCH 183/222] ARM: l2c: AM43x: add L2 cache support Russell King
2014-04-25 11:55 ` [PATCH 184/222] ARM: l2c: permit flush_all() on large flush_range() XXX Needs more thought XXX Russell King
2014-04-25 11:55 ` [PATCH 185/222] mmc: sdio_irq: rework sdio irq handling Russell King
2014-04-25 11:55 ` [PATCH 186/222] mmc: sdhci: clean up interrupt handling Russell King
2014-04-25 11:55 ` [PATCH 187/222] mmc: sdhci: clean up sdio interrupt enable handling Russell King
2014-04-25 11:55 ` [PATCH 188/222] mmc: sdhci: convert to new SDIO IRQ handling Russell King
2014-04-25 11:55 ` [PATCH 189/222] mmc: sdhci: push card_tasklet into threaded irq handler Russell King
2014-04-25 11:55 ` [PATCH 190/222] mmc: sdhci: allow sdio interrupts while sdhci runtime suspended Russell King
2014-04-25 11:56 ` [PATCH 191/222] mmc: sdhci: more efficient interrupt enable register handling Russell King
2014-04-25 11:57 ` [PATCH 192/222] mmc: sdhci: plug hole in disabling card detection interrupts Russell King
2014-04-25 11:57 ` [PATCH 193/222] mmc: sdhci: convert generic bus width setup to library function Russell King
2014-04-25 11:57 ` [PATCH 194/222] mmc: sdhci: convert reset into a " Russell King
2014-04-25 11:57 ` [PATCH 195/222] mmc: sdhci: move FSL ESDHC reset handling quirk into esdhc code Russell King
2014-04-25 11:58 ` [PATCH 196/222] mmc: sdhci: avoid sync'ing the SG if there's no misalignment Russell King
2014-04-25 11:58 ` [PATCH 197/222] mmc: sdhci: convert ADMA descriptors to a coherent allocation Russell King
2014-04-25 11:58 ` [PATCH 198/222] mmc: sdhci: clean up sdhci_update_clock()/sdhci_set_clock() Russell King
2014-04-25 11:58 ` [PATCH 199/222] mmc: sdhci: move setting host->clock into sdhci_do_set_ios() Russell King
2014-04-25 11:58 ` [PATCH 200/222] mmc: sdhci: move setting mmc->actual_clock into set_clock handlers Russell King
2014-04-25 11:58 ` [PATCH 201/222] mmc: sdhci: convert sdhci_set_clock() into a library function Russell King
2014-04-25 11:59 ` [PATCH 202/222] mmc: sdhci-esdhc-imx: avoid DMA to kernel stack Russell King
2014-04-25 11:59 ` [PATCH 203/222] mmc: sdhci-esdhc-imx: comment runtime_pm_get_sync() in esdhc_prepare_tuning() Russell King
2014-04-25 11:59 ` [PATCH 204/222] mmc: sdhci-esdhc-imx: fix lockdep splat upon tuning Russell King
2014-04-25 11:59 ` [PATCH 205/222] mmc: sdhci: hack up driver to make it more compliant with UHS-1 Russell King
2014-04-25 11:59 ` [PATCH 206/222] mmc: sdhci: set_uhs_signaling() need not return a value Russell King
2014-04-25 11:59 ` [PATCH 207/222] mmc: sdhci: convert sdhci_set_uhs_signaling() into a library function Russell King
2014-04-25 11:59 ` [PATCH 208/222] mmc: sdhci: cache timing information locally Russell King
2014-04-25 11:59 ` [PATCH 209/222] mmc: sdhci: clean up sdhci_execute_tuning() decision Russell King
2014-04-25 11:59 ` [PATCH 210/222] mmc: sdhci-esdhc-imx: remove emulation of uhs_mode Russell King
2014-04-25 11:59 ` [PATCH 211/222] mmc: sdhci-of-esdhc: remove platform_suspend/platform_resume callbacks Russell King
2014-04-25 11:59 ` [PATCH 212/222] mmc: sdhci: " Russell King
2014-04-25 11:59 ` [PATCH 213/222] mmc: sdhci-tegra: get rid of special PRESENT_STATE register handling Russell King
2014-04-25 12:00 ` [PATCH 214/222] mmc: sdhci: move regulator handling into sdhci_set_power() Russell King
2014-04-25 12:00 ` [PATCH 215/222] mmc: sdhci: move remaining power " Russell King
2014-04-25 12:00 ` [PATCH 216/222] mmc: sdhci: track whether preset mode is currently enabled in hardware Russell King
2014-04-25 12:00 ` [PATCH 217/222] mmc: sdhci: fix SDHCI dependencies Russell King
2014-04-25 12:00 ` [PATCH 218/222] mmc: add support for power-on sequencing through DT Russell King
2014-04-25 12:00 ` [PATCH 219/222] mmc: dw_mmc: call mmc_of_parse to fill in common options Russell King
2014-04-25 12:00 ` [PATCH 220/222] mmc: fix power-on sequencing for esdhc-imx driver Russell King
2014-04-25 12:00 ` [PATCH 221/222] ARM: cubox-i: add support for SD UHS-1 cards Russell King
2014-04-25 12:00 ` [PATCH 222/222] ARM: cubox-i: add support for Wifi/BT Russell King
2014-04-25 13:50 ` [PATCH 000/222] The *Full* Cubox-i series Thierry Reding
2014-04-25 14:15   ` Russell King - ARM Linux
2014-04-25 14:22     ` Thierry Reding
2014-04-25 14:26       ` Russell King - ARM Linux
2014-04-25 19:50     ` Kevin Hilman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=E1WdeUS-0007Kc-88@rmk-PC.arm.linux.org.uk \
    --to=rmk+kernel@arm.linux.org.uk \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).