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