]> www.infradead.org Git - users/rw/ppcboot.git/commitdiff
Fix ethernet package corruption on EVB64260 board
authorwdenk <wdenk>
Sat, 15 Dec 2001 23:44:04 +0000 (23:44 +0000)
committerwdenk <wdenk>
Sat, 15 Dec 2001 23:44:04 +0000 (23:44 +0000)
Patch by Rich Ireland, 10 Dec 2001

CHANGELOG
board/evb64260/eth.c
board/evb64260/evb64260.c

index d2d0e80d42999ac99a4448ab01958a3382bf153a..5c6c889048600236dccc8e915e38d816b9d012fe 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -56,6 +56,9 @@ To do:
 Modifications for 1.1.3:
 ======================================================================
 
+* Fix ethernet package corruption on EVB64260 board
+  Patch by Rich Ireland, 10 Dec 2001
+
 * Add MUSENKI board; add some 8245 and 8241 related stuff.
   Patch by Jim Thompson, 10 Dec 2001
 
index d9f1a98483ff6f68c18aea72b46f0585ec6d362d..42aaf9c41606fed615d18c108414551d3babeb62 100644 (file)
@@ -69,11 +69,20 @@ evb64260_eth0_poll(void)
                (eth0_rx_desc[(RDN_ETH0)].buff_size_byte_count) & 0x0000ffff;
        eth_data = (char *) eth0_rx_buffer[RDN_ETH0];
 
-       /* 
+#ifdef DEBUG
+       if (eth_len) {
+               printf ("%s: Recived %d byte Packet @ 0x%p\n",
+                       __FUNCTION__, eth_len, eth_data);
+       }
+#endif
+       /*
         * packet is now in:
         * eth0_rx_buffer[RDN_ETH0];
         */
 
+       /* let the upper layer handle the packet */
+       NetReceive (eth_data, eth_len);
+
        eth0_rx_desc[(RDN_ETH0)].buff_size_byte_count = 1536<<16;
 
        /* GT96100 Owner */
@@ -96,7 +105,7 @@ evb64260_eth0_transmit(unsigned int s, volatile char *p)
 {
        /* wait for tx to be ready */
        while (eth0_tx_desc[(TDN_ETH0)].command_status & 0x80000000) ;
-  
+
        GT_REG_WRITE (ETHERNET0_CURRENT_TX_DESCRIPTOR_POINTER0 + REG_OFF,
                      (unsigned int)eth0_tx_desc);
 
@@ -136,12 +145,12 @@ evb64260_eth0_transmit(unsigned int s, volatile char *p)
 
        eth0_tx_desc[(TDN_ETH0+1)%NT].command_status = 0x0003ffff;
 
-       /*
+/*
        {
                unsigned long tempo;
                for (tempo=0;tempo<10;tempo++) {}
        }
-       */
+*/
 
        GT_REG_WRITE(ETHERNET0_SDMA_COMMAND_REGISTER + REG_OFF, 0x01000000);
 
@@ -173,7 +182,7 @@ evb64260_eth0_probe(bd_t *bis)
        GT_REG_WRITE(MAIN_ROUTING_REGISTER, 0x7ffe38);
        GT_REG_WRITE(SERIAL_PORT_MULTIPLEX, 0x1102);
        GT_REG_WRITE(ETHERNET0_SDMA_CONFIGURATION_REGISTER + REG_OFF,
-                    0x0000303c); 
+                    0x0000303c);
        GT_REG_READ(ETHERNET0_PORT_CONFIGURATION_REGISTER + REG_OFF, &temp);
 
        /* turn on autonegotiation */
@@ -188,19 +197,19 @@ evb64260_eth0_probe(bd_t *bis)
        TDN_ETH0=0;
        RDN_ETH0=0;
 
-       eth0_tx_desc = 
-               (eth0_tx_desc_single *) 
+       eth0_tx_desc =
+               (eth0_tx_desc_single *)
                (((unsigned int) malloc(sizeof (eth0_tx_desc_single) *
                                        (NT+1)) & 0xfffffff0) + 0x10);
-       eth0_rx_desc = 
-               (eth0_rx_desc_single *) 
-               (((unsigned int) malloc(sizeof (eth0_rx_desc_single) * 
+       eth0_rx_desc =
+               (eth0_rx_desc_single *)
+               (((unsigned int) malloc(sizeof (eth0_rx_desc_single) *
                                        (NR+1)) & 0xfffffff0) + 0x10);
-       eth0_tx_buffer = 
+       eth0_tx_buffer =
                (char *) (((unsigned int) malloc(1536) & 0xfffffff0) + 0x10);
 
        for (temp = 0 ; temp < NR ; temp ++) {
-               eth0_rx_buffer[temp] = 
+               eth0_rx_buffer[temp] =
                        (char *)
                        (((unsigned int) malloc(1536) & 0xfffffff0) + 0x10);
        }
@@ -214,11 +223,11 @@ evb64260_eth0_probe(bd_t *bis)
 
                /* GT96100 Owner */
                eth0_rx_desc[temp].command_status = 0x80000000;
-               eth0_rx_desc[temp].next_desc = 
+               eth0_rx_desc[temp].next_desc =
                        (struct eth0_rx_desc_struct *)
                        &eth0_rx_desc[(temp+1)%NR].buff_size_byte_count;
        }
-  
+
        GT_REG_WRITE(ETHERNET0_CURRENT_TX_DESCRIPTOR_POINTER0 + REG_OFF,
                      (unsigned int) eth0_tx_desc);
        GT_REG_WRITE(ETHERNET0_FIRST_RX_DESCRIPTOR_POINTER0 + REG_OFF,
index 53d48296751289368f9527380ffc40cfbe4219a3..d0c2be43d906358350d27abea8eb788d4c5d83f7 100644 (file)
@@ -342,26 +342,16 @@ eth_init(bd_t *bis)
 int
 eth_send(volatile void *packet, int length)
 {
+#ifdef DEBUG
+       printf ("%s: %d byte packet @ 0x%p\n", __FUNCTION__, length, packet);
+#endif
        return evb64260_eth0_transmit(length, packet);
 }
 
 int
 eth_rx(void)
 {
-       int len;
-
-       for (;;) {
-               len = evb64260_eth0_poll();
-
-               if (len) {
-                       NetReceive(eth_data, len);
-               } else {
-                       len = -1;
-                       break;
-               }
-       }
-
-       return len;
+       return (evb64260_eth0_poll());
 }
 
 void