[PATCH] xilinx_emaclite.c ping-pong fix

=3D?UTF-8?q?Alain=3D20P=3DC3=3DA9teut?=3D peteut at space.unibe.ch
Fri Apr 15 12:44:37 CEST 2011


Signed-off-by: Alain P=C3=A9teut <peteut at space.unibe.ch>
---
 drivers/net/xilinx_emaclite.c |   21 ++++++++++++---------
 1 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/drivers/net/xilinx_emaclite.c b/drivers/net/xilinx_emaclite.c
index 76af939..523f41a 100644
--- a/drivers/net/xilinx_emaclite.c
+++ b/drivers/net/xilinx_emaclite.c
@@ -138,7 +138,9 @@ static int emaclite_init(struct eth_device *dev, bd_t *b=
is)
 =09debug ("EmacLite Initialization Started\n");
 =09memset (&emaclite, 0, sizeof (xemaclite));
 =09emaclite.baseaddress =3D dev->iobase;
-
+ =20
+  emaclite.nexttxbuffertouse =3D 0;
+  emaclite.nextrxbuffertouse =3D 0;
 /*
  * TX - TX_PING & TX_PONG initialization
  */
@@ -155,12 +157,13 @@ static int emaclite_init(struct eth_device *dev, bd_t =
*bis)
 =09while ((in_be32 (emaclite.baseaddress + XEL_TSR_OFFSET) &
 =09=09XEL_TSR_PROG_MAC_ADDR) !=3D 0) ;
=20
-#ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG
+#ifdef XILINX_EMACLITE_TX_PING_PONG
 =09/* The same operation with PONG TX */
 =09out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET, 0);
 =09xemaclite_alignedwrite (dev->enetaddr, emaclite.baseaddress +
 =09=09XEL_BUFFER_OFFSET, ENET_ADDR_LENGTH);
-=09out_be32 (emaclite.baseaddress + XEL_TPLR_OFFSET, ENET_ADDR_LENGTH);
+=09out_be32 (emaclite.baseaddress + XEL_TPLR_OFFSET + XEL_BUFFER_OFFSET,=20
+    ENET_ADDR_LENGTH);
 =09out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET + XEL_BUFFER_OFFSET,
 =09=09XEL_TSR_PROG_MAC_ADDR);
 =09while ((in_be32 (emaclite.baseaddress + XEL_TSR_OFFSET +
@@ -172,7 +175,7 @@ static int emaclite_init(struct eth_device *dev, bd_t *b=
is)
  */
 =09/* Write out the value to flush the RX buffer */
 =09out_be32 (emaclite.baseaddress + XEL_RSR_OFFSET, XEL_RSR_RECV_IE_MASK);
-#ifdef CONFIG_XILINX_EMACLITE_RX_PING_PONG
+#ifdef XILINX_EMACLITE_RX_PING_PONG
 =09out_be32 (emaclite.baseaddress + XEL_RSR_OFFSET + XEL_BUFFER_OFFSET,
 =09=09XEL_RSR_RECV_IE_MASK);
 #endif
@@ -222,7 +225,7 @@ static int emaclite_send (struct eth_device *dev, volati=
le void *ptr, int len)
 =09=09printf ("Error: Timeout waiting for ethernet TX buffer\n");
 =09=09/* Restart PING TX */
 =09=09out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET, 0);
-#ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG
+#ifdef XILINX_EMACLITE_TX_PING_PONG
 =09=09out_be32 (emaclite.baseaddress + XEL_TSR_OFFSET +
 =09=09XEL_BUFFER_OFFSET, 0);
 #endif
@@ -238,7 +241,7 @@ static int emaclite_send (struct eth_device *dev, volati=
le void *ptr, int len)
 =09=09&& ((in_be32 ((baseaddress) + XEL_TSR_OFFSET)
 =09=09=09& XEL_TSR_XMIT_ACTIVE_MASK) =3D=3D 0)) {
=20
-#ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG
+#ifdef XILINX_EMACLITE_TX_PING_PONG
 =09=09emaclite.nexttxbuffertouse ^=3D XEL_BUFFER_OFFSET;
 #endif
 =09=09debug ("Send packet from 0x%x\n", baseaddress);
@@ -254,7 +257,7 @@ static int emaclite_send (struct eth_device *dev, volati=
le void *ptr, int len)
 =09=09out_be32 (baseaddress + XEL_TSR_OFFSET, reg);
 =09=09return 1;
 =09}
-#ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG
+#ifdef XILINX_EMACLITE_TX_PING_PONG
 =09/* Switch to second buffer */
 =09baseaddress ^=3D XEL_BUFFER_OFFSET;
 =09/* Determine if the expected buffer address is empty */
@@ -290,11 +293,11 @@ static int emaclite_recv(struct eth_device *dev)
 =09reg =3D in_be32 (baseaddress + XEL_RSR_OFFSET);
 =09debug ("Testing data at address 0x%x\n", baseaddress);
 =09if ((reg & XEL_RSR_RECV_DONE_MASK) =3D=3D XEL_RSR_RECV_DONE_MASK) {
-#ifdef CONFIG_XILINX_EMACLITE_RX_PING_PONG
+#ifdef XILINX_EMACLITE_RX_PING_PONG
 =09=09emaclite.nextrxbuffertouse ^=3D XEL_BUFFER_OFFSET;
 #endif
 =09} else {
-#ifndef CONFIG_XILINX_EMACLITE_RX_PING_PONG
+#ifndef XILINX_EMACLITE_RX_PING_PONG
 =09=09debug ("No data was available - address 0x%x\n", baseaddress);
 =09=09return 0;
 #else
--=20
1.7.2.5

--=_57hwwwf7zdkf--



More information about the U-Boot mailing list