r8169: check for PCI read error in probe
authorHeiner Kallweit <hkallweit1@gmail.com>
Sun, 28 May 2023 17:35:12 +0000 (19:35 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 30 May 2023 11:14:53 +0000 (13:14 +0200)
Check whether first PCI read returns 0xffffffff. Currently, if this is
the case, the user sees the following misleading message:
unknown chip XID fcf, contact r8169 maintainers (see MAINTAINERS file)

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Link: https://lore.kernel.org/r/75b54d23-fefe-2bf4-7e80-c9d3bc91af11@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/realtek/r8169_main.c

index 4b19803..5e6308d 100644 (file)
@@ -5164,6 +5164,7 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        int jumbo_max, region, rc;
        enum mac_version chipset;
        struct net_device *dev;
+       u32 txconfig;
        u16 xid;
 
        dev = devm_alloc_etherdev(&pdev->dev, sizeof (*tp));
@@ -5218,7 +5219,13 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 
        tp->mmio_addr = pcim_iomap_table(pdev)[region];
 
-       xid = (RTL_R32(tp, TxConfig) >> 20) & 0xfcf;
+       txconfig = RTL_R32(tp, TxConfig);
+       if (txconfig == ~0U) {
+               dev_err(&pdev->dev, "PCI read failed\n");
+               return -EIO;
+       }
+
+       xid = (txconfig >> 20) & 0xfcf;
 
        /* Identify chip attached to board */
        chipset = rtl8169_get_mac_version(xid, tp->supports_gmii);