| From b26623dab7eeb1e9f5898c7a49458789dd492f20 Mon Sep 17 00:00:00 2001 |
| From: Francois Romieu <romieu@fr.zoreil.com> |
| Date: Wed, 21 Nov 2012 10:07:29 +0000 |
| Subject: 8139cp: revert "set ring address before enabling receiver" |
| |
| From: Francois Romieu <romieu@fr.zoreil.com> |
| |
| commit b26623dab7eeb1e9f5898c7a49458789dd492f20 upstream. |
| |
| This patch reverts b01af4579ec41f48e9b9c774e70bd6474ad210db. |
| |
| The original patch was tested with emulated hardware. Real |
| hardware chokes. |
| |
| Fixes https://bugzilla.kernel.org/show_bug.cgi?id=47041 |
| |
| Signed-off-by: Francois Romieu <romieu@fr.zoreil.com> |
| Acked-by: Jeff Garzik <jgarzik@redhat.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: CAI Qian <caiqian@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/net/ethernet/realtek/8139cp.c | 22 +++++++++++----------- |
| 1 file changed, 11 insertions(+), 11 deletions(-) |
| |
| --- a/drivers/net/ethernet/realtek/8139cp.c |
| +++ b/drivers/net/ethernet/realtek/8139cp.c |
| @@ -979,17 +979,6 @@ static void cp_init_hw (struct cp_privat |
| cpw32_f (MAC0 + 0, le32_to_cpu (*(__le32 *) (dev->dev_addr + 0))); |
| cpw32_f (MAC0 + 4, le32_to_cpu (*(__le32 *) (dev->dev_addr + 4))); |
| |
| - cpw32_f(HiTxRingAddr, 0); |
| - cpw32_f(HiTxRingAddr + 4, 0); |
| - |
| - ring_dma = cp->ring_dma; |
| - cpw32_f(RxRingAddr, ring_dma & 0xffffffff); |
| - cpw32_f(RxRingAddr + 4, (ring_dma >> 16) >> 16); |
| - |
| - ring_dma += sizeof(struct cp_desc) * CP_RX_RING_SIZE; |
| - cpw32_f(TxRingAddr, ring_dma & 0xffffffff); |
| - cpw32_f(TxRingAddr + 4, (ring_dma >> 16) >> 16); |
| - |
| cp_start_hw(cp); |
| cpw8(TxThresh, 0x06); /* XXX convert magic num to a constant */ |
| |
| @@ -1003,6 +992,17 @@ static void cp_init_hw (struct cp_privat |
| |
| cpw8(Config5, cpr8(Config5) & PMEStatus); |
| |
| + cpw32_f(HiTxRingAddr, 0); |
| + cpw32_f(HiTxRingAddr + 4, 0); |
| + |
| + ring_dma = cp->ring_dma; |
| + cpw32_f(RxRingAddr, ring_dma & 0xffffffff); |
| + cpw32_f(RxRingAddr + 4, (ring_dma >> 16) >> 16); |
| + |
| + ring_dma += sizeof(struct cp_desc) * CP_RX_RING_SIZE; |
| + cpw32_f(TxRingAddr, ring_dma & 0xffffffff); |
| + cpw32_f(TxRingAddr + 4, (ring_dma >> 16) >> 16); |
| + |
| cpw16(MultiIntr, 0); |
| |
| cpw8_f(Cfg9346, Cfg9346_Lock); |