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 via email to