[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#561309: firmware-linux-nonfree: needs firmware for module r8169 (/rtl8168d-{1, 2}.fw)



It seems RTL8168D version 1 (but not version 2) was previously supported
without the need for this firmware update (rtl8168d-1.fw).  So perhaps
the driver should carry on without it if it is missing.  Please try
applying the following patch, which implements that behaviour.

Ben.

diff -u b/drivers/net/r8169.c b/drivers/net/r8169.c
--- b/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
@@ -1709,7 +1709,7 @@
 	rtl8168c_3_hw_phy_config(ioaddr);
 }
 
-static int rtl8168d_1_hw_phy_config(struct rtl8169_private *tp)
+static void rtl8168d_1_hw_phy_config(struct rtl8169_private *tp)
 {
 	static struct phy_reg phy_reg_init_0[] = {
 		{ 0x1f, 0x0001 },
@@ -1739,11 +1739,6 @@
 	};
 	void __iomem *ioaddr = tp->mmio_addr;
 	const struct firmware *fw;
-	int rc;
-
-	rc = request_firmware(&fw, "rtl8168d-1.fw", &tp->pci_dev->dev);
-	if (rc)
-		return rc;
 
 	rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
 
@@ -1801,15 +1796,15 @@
 	mdio_plus_minus(ioaddr, 0x02, 0x0100, 0x0600);
 	mdio_plus_minus(ioaddr, 0x03, 0x0000, 0xe000);
 
-	rtl_phy_write_fw(ioaddr, fw);
-
-	release_firmware(fw);
-	return 0;
+	if (request_firmware(&fw, "rtl8168d-1.fw", &tp->pci_dev->dev) == 0) {
+		rtl_phy_write_fw(ioaddr, fw);
+		release_firmware(fw);
+	}
 }
 
 MODULE_FIRMWARE("rtl8168d-1.fw");
 
-static int rtl8168d_2_hw_phy_config(struct rtl8169_private *tp)
+static void rtl8168d_2_hw_phy_config(struct rtl8169_private *tp)
 {
 	static struct phy_reg phy_reg_init_0[] = {
 		{ 0x1f, 0x0001 },
@@ -1838,11 +1833,6 @@
 	};
 	void __iomem *ioaddr = tp->mmio_addr;
 	const struct firmware *fw;
-	int rc;
-
-	rc = request_firmware(&fw, "rtl8168d-2.fw", &tp->pci_dev->dev);
-	if (rc)
-		return rc;
 
 	rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
 
@@ -1896,10 +1886,10 @@
 	mdio_write(ioaddr, 0x1f, 0x0002);
 	mdio_patch(ioaddr, 0x0f, 0x0017);
 
-	rtl_phy_write_fw(ioaddr, fw);
-
-	release_firmware(fw);
-	return 0;
+	if (request_firmware(&fw, "rtl8168d-2.fw", &tp->pci_dev->dev) == 0) {
+		rtl_phy_write_fw(ioaddr, fw);
+		release_firmware(fw);
+	}
 }
 
 MODULE_FIRMWARE("rtl8168d-2.fw");
@@ -2039,9 +2029,11 @@
 		rtl8168cp_2_hw_phy_config(ioaddr);
 		break;
 	case RTL_GIGA_MAC_VER_25:
-		return rtl8168d_1_hw_phy_config(tp);
+		rtl8168d_1_hw_phy_config(tp);
+		break;
 	case RTL_GIGA_MAC_VER_26:
-		return rtl8168d_2_hw_phy_config(tp);
+		rtl8168d_2_hw_phy_config(tp);
+		break;
 	case RTL_GIGA_MAC_VER_27:
 		rtl8168d_3_hw_phy_config(ioaddr);
 		break;
--- END ---

-- 
Ben Hutchings
Humans are not rational beings; they are rationalising beings.

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: