mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 1/2] net: macb: remove gem_recv and reorder probe
@ 2013-03-13  8:48 Steffen Trumtrar
  2013-03-13  8:48 ` [PATCH 2/2] net: macb: turn off endian_swp_pkt_en Steffen Trumtrar
  2013-03-13  9:03 ` [PATCH 1/2] net: macb: remove gem_recv and reorder probe Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 2 replies; 12+ messages in thread
From: Steffen Trumtrar @ 2013-03-13  8:48 UTC (permalink / raw)
  To: barebox; +Cc: Steffen Trumtrar, Nicolas Ferre

The function gem_recv implements a buffer "ring" that stops at filling level 10.
That means, when the driver is used as gem, it stops receiving after exactly
10 packets. Instead of implementing macb_recv twice, use it also for the gem
part. If there needs to be an extra recv function for the gigabit case, it can
be added than.
Also, first set the type of device (macb or gem) and then use functions that
use this info.

Tested on a Zynq7000.

Signed-off-by: Steffen Trumtrar <s.trumtrar@pengutronix.de>
Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
Cc: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
 drivers/net/macb.c | 47 +++++++----------------------------------------
 1 file changed, 7 insertions(+), 40 deletions(-)

diff --git a/drivers/net/macb.c b/drivers/net/macb.c
index 8602437..a12eea7 100644
--- a/drivers/net/macb.c
+++ b/drivers/net/macb.c
@@ -169,37 +169,6 @@ static void reclaim_rx_buffers(struct macb_device *macb,
 	macb->rx_tail = new_tail;
 }
 
-static int gem_recv(struct eth_device *edev)
-{
-	struct macb_device *macb = edev->priv;
-	unsigned int rx_tail = macb->rx_tail;
-	void *buffer;
-	int length;
-	u32 status;
-
-	dev_dbg(macb->dev, "%s\n", __func__);
-
-	for (;;) {
-		barrier();
-		if (!(macb->rx_ring[rx_tail].addr & MACB_BIT(RX_USED)))
-			return -1;
-
-		barrier();
-		status = macb->rx_ring[rx_tail].ctrl;
-		length = MACB_BFEXT(RX_FRMLEN, status);
-		if (status & MACB_BIT(RX_SOF)) {
-			buffer = macb->rx_buffer + macb->rx_buffer_size * macb->rx_tail;
-			net_receive(buffer, length);
-			macb->rx_ring[rx_tail].ctrl &= ~MACB_BIT(RX_USED);
-			barrier();
-		}
-		rx_tail++;
-		macb->rx_tail++;
-	}
-
-	return 0;
-}
-
 static int macb_recv(struct eth_device *edev)
 {
 	struct macb_device *macb = edev->priv;
@@ -619,11 +588,6 @@ static int macb_probe(struct device_d *dev)
 
 	macb->phy_flags = pdata->phy_flags;
 
-	macb_init_rx_buffer_size(macb, PKTSIZE);
-	macb->rx_buffer = dma_alloc_coherent(macb->rx_buffer_size * macb->rx_ring_size);
-	macb->rx_ring = dma_alloc_coherent(RX_RING_BYTES(macb));
-	macb->tx_ring = dma_alloc_coherent(TX_RING_BYTES);
-
 	macb->regs = dev_request_mem_region(dev, 0);
 
 	/*
@@ -638,12 +602,15 @@ static int macb_probe(struct device_d *dev)
 
 	clk_enable(macb->pclk);
 
-	if (macb_is_gem(macb))
-		edev->recv = gem_recv;
-	else
-		edev->recv = macb_recv;
 	macb->is_gem = read_is_gem(macb);
 
+	macb_init_rx_buffer_size(macb, PKTSIZE);
+	macb->rx_buffer = dma_alloc_coherent(macb->rx_buffer_size * macb->rx_ring_size);
+	macb->rx_ring = dma_alloc_coherent(RX_RING_BYTES(macb));
+	macb->tx_ring = dma_alloc_coherent(TX_RING_BYTES);
+
+	edev->recv = macb_recv;
+
 	macb_reset_hw(macb);
 	ncfgr = macb_mdc_clk_div(macb);
 	ncfgr |= MACB_BIT(PAE);		/* PAuse Enable */
-- 
1.8.2.rc2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2013-03-13 15:40 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-13  8:48 [PATCH 1/2] net: macb: remove gem_recv and reorder probe Steffen Trumtrar
2013-03-13  8:48 ` [PATCH 2/2] net: macb: turn off endian_swp_pkt_en Steffen Trumtrar
2013-03-13  9:04   ` Jean-Christophe PLAGNIOL-VILLARD
2013-03-13  9:17     ` Steffen Trumtrar
2013-03-13  9:03 ` [PATCH 1/2] net: macb: remove gem_recv and reorder probe Jean-Christophe PLAGNIOL-VILLARD
2013-03-13  9:19   ` Steffen Trumtrar
2013-03-13  9:32     ` Jean-Christophe PLAGNIOL-VILLARD
2013-03-13  9:33       ` Jean-Christophe PLAGNIOL-VILLARD
2013-03-13 10:15   ` Sascha Hauer
2013-03-13 12:17     ` Jean-Christophe PLAGNIOL-VILLARD
2013-03-13 13:08       ` Steffen Trumtrar
2013-03-13 15:36         ` Jean-Christophe PLAGNIOL-VILLARD

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox