| From d5dd56a8965d00cf3d49d7fb92e6dd8c38ad1d6d Mon Sep 17 00:00:00 2001 |
| From: Heiner Kallweit <hkallweit1@gmail.com> |
| Date: Fri, 13 Dec 2019 16:53:37 +0100 |
| Subject: [PATCH] r8169: check that Realtek PHY driver module is loaded |
| |
| commit f325937735498afb054a0195291bbf68d0b60be5 upstream. |
| |
| Some users complained about problems with r8169 and it turned out that |
| the generic PHY driver was used instead instead of the dedicated one. |
| In all cases reason was that r8169.ko was in initramfs, but realtek.ko |
| not. Manually adding realtek.ko to initramfs fixed the issues. |
| Root cause seems to be that tools like dracut and genkernel don't |
| consider softdeps. Add a check for loaded Realtek PHY driver module |
| and provide the user with a hint if it's not loaded. |
| |
| Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c |
| index 3fa5fd4122e6..9ac6fcf233cf 100644 |
| --- a/drivers/net/ethernet/realtek/r8169.c |
| +++ b/drivers/net/ethernet/realtek/r8169.c |
| @@ -7292,6 +7292,15 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) |
| int chipset, region, i; |
| int jumbo_max, rc; |
| |
| + /* Some tools for creating an initramfs don't consider softdeps, then |
| + * r8169.ko may be in initramfs, but realtek.ko not. Then the generic |
| + * PHY driver is used that doesn't work with most chip versions. |
| + */ |
| + if (!driver_find("RTL8201CP Ethernet", &mdio_bus_type)) { |
| + dev_err(&pdev->dev, "realtek.ko not loaded, maybe it needs to be added to initramfs?\n"); |
| + return -ENOENT; |
| + } |
| + |
| dev = devm_alloc_etherdev(&pdev->dev, sizeof (*tp)); |
| if (!dev) |
| return -ENOMEM; |
| -- |
| 2.7.4 |
| |