[kernel/f17] Fix regression in 8139cp driver, debugged by William J. Eaton (rhbz 851278)

Josh Boyer jwboyer at fedoraproject.org
Mon Nov 26 19:49:02 UTC 2012


commit 140e24d99e1c8ffa7151b8ba76ee060e66c59d1d
Author: Josh Boyer <jwboyer at redhat.com>
Date:   Mon Nov 26 14:48:18 2012 -0500

    Fix regression in 8139cp driver, debugged by William J. Eaton (rhbz 851278)

 ...rt-set-ring-address-before-enabling-recei.patch |   62 ++++++++++++++++++++
 kernel.spec                                        |    7 ++
 2 files changed, 69 insertions(+), 0 deletions(-)
---
diff --git a/8139cp-revert-set-ring-address-before-enabling-recei.patch b/8139cp-revert-set-ring-address-before-enabling-recei.patch
new file mode 100644
index 0000000..d9ca2f2
--- /dev/null
+++ b/8139cp-revert-set-ring-address-before-enabling-recei.patch
@@ -0,0 +1,62 @@
+From b26623dab7eeb1e9f5898c7a49458789dd492f20 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?fran=C3=A7ois=20romieu?= <romieu at fr.zoreil.com>
+Date: Wed, 21 Nov 2012 10:07:29 +0000
+Subject: [PATCH] 8139cp: revert "set ring address before enabling receiver"
+
+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 at fr.zoreil.com>
+Acked-by: Jeff Garzik <jgarzik at redhat.com>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+---
+ drivers/net/ethernet/realtek/8139cp.c | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c
+index 1c81825..b01f83a 100644
+--- 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_private *cp)
+ 	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_private *cp)
+ 
+ 	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);
+-- 
+1.8.0
+
diff --git a/kernel.spec b/kernel.spec
index f211a66..536f8a8 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -795,6 +795,9 @@ Patch21230: SCSI-mvsas-Fix-oops-when-ata-commond-timeout.patch
 #rhbz 869383
 Patch21231: ACPI-video-Ignore-errors-after-_DOD-evaluation.patch
 
+#rhbz 851278
+Patch21232: 8139cp-revert-set-ring-address-before-enabling-recei.patch
+
 # END OF PATCH DEFINITIONS
 
 %endif
@@ -1544,6 +1547,9 @@ ApplyPatch SCSI-mvsas-Fix-oops-when-ata-commond-timeout.patch
 #rhbz 869383
 ApplyPatch ACPI-video-Ignore-errors-after-_DOD-evaluation.patch
 
+#rhbz 851278
+ApplyPatch 8139cp-revert-set-ring-address-before-enabling-recei.patch
+
 # END OF PATCH APPLICATIONS
 
 %endif
@@ -2408,6 +2414,7 @@ fi
 #              '-'
 %changelog
 * Mon Nov 26 2012 Josh Boyer <jwboyer at redhat.com>
+- Fix regression in 8139cp driver, debugged by William J. Eaton (rhbz 851278)
 - Fix ACPI video after _DOD errors (rhbz 869383)
 - Fix ata command timeout oops in mvsas (rhbz 869629)
 - Enable CONFIG_UIO_PDRV on ppc64 (rhbz 878180)


More information about the scm-commits mailing list