]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
sky2: don't look for VPD size
authorStephen Hemminger <shemminger@vyatta.com>
Thu, 11 Jun 2009 07:03:47 +0000 (07:03 +0000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 2 Jul 2009 23:49:42 +0000 (16:49 -0700)
[ Upstream commit 6cc90a5a6061428358d0f726a53fb44af5254111 ]

The code to compute VPD size didn't handle some systems that use
chip without VPD. Also some of the newer chips use some additional
registers to store the actual size, and wasn't worth putting the
additional complexity in, so just remove the code.

No big loss since the code to set the VPD size was only a
convenience so that utilities would not read the extra space past
the end of the available VPD.

Move the first PCI config read earlier to detect bad hardware
where it returns all ones and refuse loading driver before furthur
damage.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Tested-by: Andy Whitcroft <apw@canonical.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/net/sky2.c

index a2ff9cb1e7ac55e4f4a80311d11326268345e87c..6714a9d8242864a7189491dd71971f9ec301a358 100644 (file)
@@ -4365,6 +4365,22 @@ static int __devinit sky2_probe(struct pci_dev *pdev,
                goto err_out;
        }
 
+       /* Get configuration information
+        * Note: only regular PCI config access once to test for HW issues
+        *       other PCI access through shared memory for speed and to
+        *       avoid MMCONFIG problems.
+        */
+       err = pci_read_config_dword(pdev, PCI_DEV_REG2, &reg);
+       if (err) {
+               dev_err(&pdev->dev, "PCI read config failed\n");
+               goto err_out;
+       }
+
+       if (~reg == 0) {
+               dev_err(&pdev->dev, "PCI configuration read error\n");
+               goto err_out;
+       }
+
        err = pci_request_regions(pdev, DRV_NAME);
        if (err) {
                dev_err(&pdev->dev, "cannot obtain PCI resources\n");
@@ -4390,21 +4406,6 @@ static int __devinit sky2_probe(struct pci_dev *pdev,
                }
        }
 
-       /* Get configuration information
-        * Note: only regular PCI config access once to test for HW issues
-        *       other PCI access through shared memory for speed and to
-        *       avoid MMCONFIG problems.
-        */
-       err = pci_read_config_dword(pdev, PCI_DEV_REG2, &reg);
-       if (err) {
-               dev_err(&pdev->dev, "PCI read config failed\n");
-               goto err_out_free_regions;
-       }
-
-       /* size of available VPD, only impact sysfs */
-       err = pci_vpd_truncate(pdev, 1ul << (((reg & PCI_VPD_ROM_SZ) >> 14) + 8));
-       if (err)
-               dev_warn(&pdev->dev, "Can't set VPD size\n");
 
 #ifdef __BIG_ENDIAN
        /* The sk98lin vendor driver uses hardware byte swapping but