From: wdenk Date: Sat, 15 Dec 2001 23:44:04 +0000 (+0000) Subject: Fix ethernet package corruption on EVB64260 board X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=ea8658fb582cbfa118b1e652e31b488fac24b975;p=users%2Frw%2Fppcboot.git Fix ethernet package corruption on EVB64260 board Patch by Rich Ireland, 10 Dec 2001 --- diff --git a/CHANGELOG b/CHANGELOG index d2d0e80..5c6c889 100644 --- 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 diff --git a/board/evb64260/eth.c b/board/evb64260/eth.c index d9f1a98..42aaf9c 100644 --- a/board/evb64260/eth.c +++ b/board/evb64260/eth.c @@ -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 *) ð0_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, diff --git a/board/evb64260/evb64260.c b/board/evb64260/evb64260.c index 53d4829..d0c2be4 100644 --- a/board/evb64260/evb64260.c +++ b/board/evb64260/evb64260.c @@ -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