8139cp: backport patches to make driver stable again
List of patches that Jo-Philipp groveled out of git. Redux: defuzzed. Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@30366 3c298f89-4303-0410-b956-a3cf2f4a3e73master
parent
1a0c80a2dd
commit
1df3af4058
|
@ -58,7 +58,7 @@ index dc5f1d3..a24bf8c 100644
|
||||||
static struct gpio_led alix_leds[] = {
|
static struct gpio_led alix_leds[] = {
|
||||||
{
|
{
|
||||||
.name = "alix:1",
|
.name = "alix:1",
|
||||||
@@ -64,17 +106,22 @@ static struct platform_device alix_leds_
|
@@ -64,17 +98,22 @@ static struct platform_device alix_leds_
|
||||||
.dev.platform_data = &alix_leds_data,
|
.dev.platform_data = &alix_leds_data,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ index dc5f1d3..a24bf8c 100644
|
||||||
const char *bios_virt;
|
const char *bios_virt;
|
||||||
const char *scan_end;
|
const char *scan_end;
|
||||||
const char *p;
|
const char *p;
|
||||||
@@ -109,7 +156,8 @@ static int __init alix_present(unsigned
|
@@ -109,7 +148,8 @@ static int __init alix_present(unsigned
|
||||||
*a = '\0';
|
*a = '\0';
|
||||||
|
|
||||||
tail = p + alix_sig_len;
|
tail = p + alix_sig_len;
|
||||||
|
@ -93,7 +93,7 @@ index dc5f1d3..a24bf8c 100644
|
||||||
printk(KERN_INFO
|
printk(KERN_INFO
|
||||||
"%s: system is recognized as \"%s\"\n",
|
"%s: system is recognized as \"%s\"\n",
|
||||||
KBUILD_MODNAME, name);
|
KBUILD_MODNAME, name);
|
||||||
@@ -120,6 +169,24 @@ static int __init alix_present(unsigned
|
@@ -120,6 +160,24 @@ static int __init alix_present(unsigned
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ index dc5f1d3..a24bf8c 100644
|
||||||
static int __init alix_init(void)
|
static int __init alix_init(void)
|
||||||
{
|
{
|
||||||
const char tinybios_sig[] = "PC Engines ALIX.";
|
const char tinybios_sig[] = "PC Engines ALIX.";
|
||||||
@@ -128,8 +197,9 @@ static int __init alix_init(void)
|
@@ -128,8 +186,9 @@ static int __init alix_init(void)
|
||||||
if (!is_geode())
|
if (!is_geode())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -24,11 +24,9 @@ Cc: Andrew Morton <akpm@linux-foundation.org>
|
||||||
3 files changed, 136 insertions(+), 0 deletions(-)
|
3 files changed, 136 insertions(+), 0 deletions(-)
|
||||||
create mode 100644 arch/x86/platform/geode/geos.c
|
create mode 100644 arch/x86/platform/geode/geos.c
|
||||||
|
|
||||||
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
|
|
||||||
index 07c3f15..4ee921b 100644
|
|
||||||
--- a/arch/x86/Kconfig
|
--- a/arch/x86/Kconfig
|
||||||
+++ b/arch/x86/Kconfig
|
+++ b/arch/x86/Kconfig
|
||||||
@@ -2168,6 +2168,13 @@ config ALIX
|
@@ -2090,6 +2090,13 @@ config ALIX
|
||||||
|
|
||||||
Note: You have to set alix.force=1 for boards with Award BIOS.
|
Note: You have to set alix.force=1 for boards with Award BIOS.
|
||||||
|
|
||||||
|
@ -42,16 +40,11 @@ index 07c3f15..4ee921b 100644
|
||||||
endif # X86_32
|
endif # X86_32
|
||||||
|
|
||||||
config AMD_NB
|
config AMD_NB
|
||||||
diff --git a/arch/x86/platform/geode/Makefile b/arch/x86/platform/geode/Makefile
|
|
||||||
index 07c9cd0..d8ba564 100644
|
|
||||||
--- a/arch/x86/platform/geode/Makefile
|
--- a/arch/x86/platform/geode/Makefile
|
||||||
+++ b/arch/x86/platform/geode/Makefile
|
+++ b/arch/x86/platform/geode/Makefile
|
||||||
@@ -1 +1,2 @@
|
@@ -1 +1,2 @@
|
||||||
obj-$(CONFIG_ALIX) += alix.o
|
obj-$(CONFIG_ALIX) += alix.o
|
||||||
+obj-$(CONFIG_GEOS) += geos.o
|
+obj-$(CONFIG_GEOS) += geos.o
|
||||||
diff --git a/arch/x86/platform/geode/geos.c b/arch/x86/platform/geode/geos.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..c2e6d53
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/arch/x86/platform/geode/geos.c
|
+++ b/arch/x86/platform/geode/geos.c
|
||||||
@@ -0,0 +1,128 @@
|
@@ -0,0 +1,128 @@
|
||||||
|
@ -183,6 +176,3 @@ index 0000000..c2e6d53
|
||||||
+MODULE_AUTHOR("Philip Prindeville <philipp@redfish-solutions.com>");
|
+MODULE_AUTHOR("Philip Prindeville <philipp@redfish-solutions.com>");
|
||||||
+MODULE_DESCRIPTION("Traverse Technologies Geos System Setup");
|
+MODULE_DESCRIPTION("Traverse Technologies Geos System Setup");
|
||||||
+MODULE_LICENSE("GPL");
|
+MODULE_LICENSE("GPL");
|
||||||
--
|
|
||||||
1.7.7.4
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
|
|
||||||
index 2f18a15..7a4f34b 100644
|
|
||||||
--- a/arch/x86/Kconfig
|
--- a/arch/x86/Kconfig
|
||||||
+++ b/arch/x86/Kconfig
|
+++ b/arch/x86/Kconfig
|
||||||
@@ -2174,6 +2174,12 @@ config GEOS
|
@@ -2097,6 +2097,12 @@ config GEOS
|
||||||
---help---
|
---help---
|
||||||
This option enables system support for the Traverse Technologies GEOS.
|
This option enables system support for the Traverse Technologies GEOS.
|
||||||
|
|
||||||
|
@ -15,17 +13,12 @@ index 2f18a15..7a4f34b 100644
|
||||||
endif # X86_32
|
endif # X86_32
|
||||||
|
|
||||||
config AMD_NB
|
config AMD_NB
|
||||||
diff --git a/arch/x86/platform/geode/Makefile b/arch/x86/platform/geode/Makefile
|
|
||||||
index d8ba564..5b51194 100644
|
|
||||||
--- a/arch/x86/platform/geode/Makefile
|
--- a/arch/x86/platform/geode/Makefile
|
||||||
+++ b/arch/x86/platform/geode/Makefile
|
+++ b/arch/x86/platform/geode/Makefile
|
||||||
@@ -1,2 +1,3 @@
|
@@ -1,2 +1,3 @@
|
||||||
obj-$(CONFIG_ALIX) += alix.o
|
obj-$(CONFIG_ALIX) += alix.o
|
||||||
+obj-$(CONFIG_NET5501) += net5501.o
|
+obj-$(CONFIG_NET5501) += net5501.o
|
||||||
obj-$(CONFIG_GEOS) += geos.o
|
obj-$(CONFIG_GEOS) += geos.o
|
||||||
diff --git a/arch/x86/platform/geode/net5501.c b/arch/x86/platform/geode/net5501.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..66d377e
|
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/arch/x86/platform/geode/net5501.c
|
+++ b/arch/x86/platform/geode/net5501.c
|
||||||
@@ -0,0 +1,154 @@
|
@@ -0,0 +1,154 @@
|
||||||
|
@ -183,9 +176,6 @@ index 0000000..66d377e
|
||||||
+MODULE_AUTHOR("Philip Prindeville <philipp@redfish-solutions.com>");
|
+MODULE_AUTHOR("Philip Prindeville <philipp@redfish-solutions.com>");
|
||||||
+MODULE_DESCRIPTION("Soekris net5501 System Setup");
|
+MODULE_DESCRIPTION("Soekris net5501 System Setup");
|
||||||
+MODULE_LICENSE("GPL");
|
+MODULE_LICENSE("GPL");
|
||||||
diff --git a/drivers/leds/leds-net5501.c b/drivers/leds/leds-net5501.c
|
|
||||||
deleted file mode 100644
|
|
||||||
index 0555d47..0000000
|
|
||||||
--- a/drivers/leds/leds-net5501.c
|
--- a/drivers/leds/leds-net5501.c
|
||||||
+++ /dev/null
|
+++ /dev/null
|
||||||
@@ -1,97 +0,0 @@
|
@@ -1,97 +0,0 @@
|
||||||
|
@ -286,8 +276,8 @@ index 0555d47..0000000
|
||||||
-arch_initcall(soekris_init);
|
-arch_initcall(soekris_init);
|
||||||
-
|
-
|
||||||
-MODULE_LICENSE("GPL");
|
-MODULE_LICENSE("GPL");
|
||||||
--- a/drivers/leds/Kconfig 2012-01-29 23:22:59.487891522 -0700
|
--- a/drivers/leds/Kconfig
|
||||||
+++ b/drivers/leds/Kconfig 2012-02-03 10:33:39.650202054 -0700
|
+++ b/drivers/leds/Kconfig
|
||||||
@@ -89,16 +89,6 @@ config LEDS_NET48XX
|
@@ -89,16 +89,6 @@ config LEDS_NET48XX
|
||||||
This option enables support for the Soekris net4801 and net4826 error
|
This option enables support for the Soekris net4801 and net4826 error
|
||||||
LED.
|
LED.
|
||||||
|
@ -305,8 +295,8 @@ index 0555d47..0000000
|
||||||
config LEDS_FSG
|
config LEDS_FSG
|
||||||
tristate "LED Support for the Freecom FSG-3"
|
tristate "LED Support for the Freecom FSG-3"
|
||||||
depends on LEDS_CLASS
|
depends on LEDS_CLASS
|
||||||
--- a/drivers/leds/Makefile 2012-01-29 23:22:59.487891522 -0700
|
--- a/drivers/leds/Makefile
|
||||||
+++ b/drivers/leds/Makefile 2012-02-03 10:33:24.468430696 -0700
|
+++ b/drivers/leds/Makefile
|
||||||
@@ -14,7 +14,6 @@ obj-$(CONFIG_LEDS_MIKROTIK_RB532) += led
|
@@ -14,7 +14,6 @@ obj-$(CONFIG_LEDS_MIKROTIK_RB532) += led
|
||||||
obj-$(CONFIG_LEDS_S3C24XX) += leds-s3c24xx.o
|
obj-$(CONFIG_LEDS_S3C24XX) += leds-s3c24xx.o
|
||||||
obj-$(CONFIG_LEDS_AMS_DELTA) += leds-ams-delta.o
|
obj-$(CONFIG_LEDS_AMS_DELTA) += leds-ams-delta.o
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
From b189e810619a676e6b931a942a3e8387f3d39c21 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?utf8?q?fran=C3=A7ois=20romieu?= <romieu@fr.zoreil.com>
|
||||||
|
Date: Sun, 8 Jan 2012 13:41:33 +0000
|
||||||
|
Subject: [PATCH] 8139cp: fix missing napi_gro_flush.
|
||||||
|
|
||||||
|
The driver uses __napi_complete and napi_gro_receive. Without it, the
|
||||||
|
driver hits the BUG_ON(n->gro_list) assertion hard in __napi_complete.
|
||||||
|
|
||||||
|
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
|
||||||
|
Tested-by: Marin Glibic <zhilla2@gmail.com>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/realtek/8139cp.c | 1 +
|
||||||
|
1 files changed, 1 insertions(+), 0 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/ethernet/realtek/8139cp.c
|
||||||
|
+++ b/drivers/net/ethernet/realtek/8139cp.c
|
||||||
|
@@ -563,6 +563,7 @@ rx_next:
|
||||||
|
if (cpr16(IntrStatus) & cp_rx_intr_mask)
|
||||||
|
goto rx_status_loop;
|
||||||
|
|
||||||
|
+ napi_gro_flush(napi);
|
||||||
|
spin_lock_irqsave(&cp->lock, flags);
|
||||||
|
__napi_complete(napi);
|
||||||
|
cpw16_f(IntrMask, cp_intr_mask);
|
|
@ -0,0 +1,37 @@
|
||||||
|
From 7d03f5a48e4d90854275b06433626243b3b3db17 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jason Wang <jasowang@redhat.com>
|
||||||
|
Date: Fri, 30 Dec 2011 23:44:33 +0000
|
||||||
|
Subject: [PATCH] 8139cp/8139too: do not read into reserved registers
|
||||||
|
|
||||||
|
delay_eeprom() use long read for Cfg9346 register(offset 0x50) which may read
|
||||||
|
into the area of reserved register(offset 0x53). Use byte read instead.
|
||||||
|
|
||||||
|
Signed-off-by: Jason Wang <jasowang@redhat.com>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/realtek/8139cp.c | 2 +-
|
||||||
|
drivers/net/ethernet/realtek/8139too.c | 2 +-
|
||||||
|
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/ethernet/realtek/8139cp.c
|
||||||
|
+++ b/drivers/net/ethernet/realtek/8139cp.c
|
||||||
|
@@ -1590,7 +1590,7 @@ static int cp_set_mac_address(struct net
|
||||||
|
No extra delay is needed with 33Mhz PCI, but 66Mhz may change this.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-#define eeprom_delay() readl(ee_addr)
|
||||||
|
+#define eeprom_delay() readb(ee_addr)
|
||||||
|
|
||||||
|
/* The EEPROM commands include the alway-set leading bit. */
|
||||||
|
#define EE_EXTEND_CMD (4)
|
||||||
|
--- a/drivers/net/ethernet/realtek/8139too.c
|
||||||
|
+++ b/drivers/net/ethernet/realtek/8139too.c
|
||||||
|
@@ -1122,7 +1122,7 @@ static void __devexit rtl8139_remove_one
|
||||||
|
No extra delay is needed with 33Mhz PCI, but 66Mhz may change this.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-#define eeprom_delay() (void)RTL_R32(Cfg9346)
|
||||||
|
+#define eeprom_delay() (void)RTL_R8(Cfg9346)
|
||||||
|
|
||||||
|
/* The EEPROM commands include the alway-set leading bit. */
|
||||||
|
#define EE_WRITE_CMD (5)
|
|
@ -0,0 +1,45 @@
|
||||||
|
From f872b237c1750221932e715da2552225afe4a95c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jason Wang <jasowang@redhat.com>
|
||||||
|
Date: Fri, 30 Dec 2011 23:44:42 +0000
|
||||||
|
Subject: [PATCH] 8139cp: properly config rx mode after resuming
|
||||||
|
|
||||||
|
Rx mode should be reset after resming, so unconditionally updating rx
|
||||||
|
mode rather than conditionally updating based on the value we
|
||||||
|
remembered, otherwise unexpected value may be used by the nic after
|
||||||
|
resuming.
|
||||||
|
|
||||||
|
btw. I find and test this when debugging guest hibernation in qemu, as
|
||||||
|
I did not have a 8139cp card in hand, this patch is untested in a
|
||||||
|
physical 8139cp card, plase review it carefully.
|
||||||
|
|
||||||
|
Signed-off-by: Jason Wang <jasowang@redhat.com>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
---
|
||||||
|
drivers/net/ethernet/realtek/8139cp.c | 9 +++------
|
||||||
|
1 files changed, 3 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/ethernet/realtek/8139cp.c
|
||||||
|
+++ b/drivers/net/ethernet/realtek/8139cp.c
|
||||||
|
@@ -860,7 +860,6 @@ static void __cp_set_rx_mode (struct net
|
||||||
|
struct cp_private *cp = netdev_priv(dev);
|
||||||
|
u32 mc_filter[2]; /* Multicast hash filter */
|
||||||
|
int rx_mode;
|
||||||
|
- u32 tmp;
|
||||||
|
|
||||||
|
/* Note: do not reorder, GCC is clever about common statements. */
|
||||||
|
if (dev->flags & IFF_PROMISC) {
|
||||||
|
@@ -887,11 +886,9 @@ static void __cp_set_rx_mode (struct net
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We can safely update without stopping the chip. */
|
||||||
|
- tmp = cp_rx_config | rx_mode;
|
||||||
|
- if (cp->rx_config != tmp) {
|
||||||
|
- cpw32_f (RxConfig, tmp);
|
||||||
|
- cp->rx_config = tmp;
|
||||||
|
- }
|
||||||
|
+ cp->rx_config = cp_rx_config | rx_mode;
|
||||||
|
+ cpw32_f(RxConfig, cp->rx_config);
|
||||||
|
+
|
||||||
|
cpw32_f (MAR0 + 0, mc_filter[0]);
|
||||||
|
cpw32_f (MAR0 + 4, mc_filter[1]);
|
||||||
|
}
|
Loading…
Reference in New Issue