tg3 driver works without the firmware
Nathanael Nerode wrote:
> Update: I have tg3 compiling. Since I can't actually test it, if anyone
> else would like to, email me and I'll send you the patches.
I was hit by the removal of the tg3 driver from kernel-source-2.6.5
(on a server with two Broadcom BCM5704 controllers on a MSI K8D board).
Looking at the tg3 driver, I found that the firmware is needed only for
TSO support (which can easily be disabled in the driver) and for one
special chipset (5701_a0).
I wrote a small patch (see below) making the firmware optional and
easily removable from the source file by simply leaving out all the
firmware related stuff between the second occurence of
#ifdef CONFIG_TIGON3_FIRMWARE and the corresponding #endif.
The patch works for me and others with disabled firmware.
However, neither upstream nor the kernel-source maintainer seem to be
willing to accept such a patch.
Please send me your own patches for the tg3 driver so that I can test
them on my hardware.
Regards
Andreas Jochens
diff -urN linux-2.6.5.orig/drivers/net/Kconfig linux-2.6.5/drivers/net/Kconfig
--- linux-2.6.5.orig/drivers/net/Kconfig 2004-04-03 21:38:10.000000000 -0600
+++ linux-2.6.5/drivers/net/Kconfig 2004-04-19 01:16:17.726738720 -0500
@@ -2060,6 +2060,14 @@
To compile this driver as a module, choose M here: the module
will be called tg3. This is recommended.
+config TIGON3_FIRMWARE
+ bool "Include firmware (for TSO support and for 5701_a0)"
+ depends on TIGON3
+ default y
+ help
+ This includes binary-only firmware for TSO support and a
+ binary-only firmware fix for the 5701_a0 chipset. If unsure, say Y.
+
endmenu
#
diff -urN linux-2.6.5.orig/drivers/net/tg3.c linux-2.6.5/drivers/net/tg3.c
--- linux-2.6.5.orig/drivers/net/tg3.c 2004-04-03 21:37:23.000000000 -0600
+++ linux-2.6.5/drivers/net/tg3.c 2004-04-19 01:24:48.284122200 -0500
@@ -46,6 +46,10 @@
#define TG3_VLAN_TAG_USED 0
#endif
+#ifndef CONFIG_TG3_FIRMWARE
+#undef NETIF_F_TSO
+#endif
+
#ifdef NETIF_F_TSO
#define TG3_TSO_SUPPORT 1
#else
@@ -3541,6 +3545,8 @@
return 0;
}
+#ifdef CONFIG_TG3_FIRMWARE
+
#define TG3_FW_RELEASE_MAJOR 0x0
#define TG3_FW_RELASE_MINOR 0x0
#define TG3_FW_RELEASE_FIX 0x0
@@ -4411,6 +4417,8 @@
#endif /* TG3_TSO_SUPPORT != 0 */
+#endif /* CONFIG_TG3_FIRMWARE */
+
/* tp->lock is held. */
static void __tg3_set_mac_addr(struct tg3 *tp)
{
@@ -4947,9 +4955,17 @@
tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
+#ifdef CONFIG_TG3_FIRMWARE
err = tg3_load_5701_a0_firmware_fix(tp);
if (err)
return err;
+#else
+ printk(KERN_ERR PFX "%s: tg3_reset_hardware - "
+ "5701_a0 firmware fix not loaded\n",
+ tp->dev->name );
+ return -ENODEV;
+#endif
+
}
#if TG3_TSO_SUPPORT != 0
Reply to: