Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 27922b4260f65d317aabda37e42bbbff > files > 3112

kernel-2.6.18-238.el5.src.rpm

From: Andy Gospodarek <gospo@redhat.com>
Date: Fri, 29 Aug 2008 09:39:57 -0400
Subject: [net] sky2: re-enable 88E8056 for most motherboards
Message-id: 20080829133957.GI31090@gospo.rdu.redhat.com
O-Subject: [RHEL5.3 PATCH] sky2: re-enable 88E8056 for most motherboards
Bugzilla: 420961
RH-Acked-by: Neil Horman <nhorman@redhat.com>
RH-Acked-by: David Miller <davem@redhat.com>
RH-Acked-by: John W. Linville <linville@redhat.com>

Before the last update, we followed upstream and dropped support for a
certain sky2 pci-id that was causing data corruption on some systems.
It was narrowed down to certain Gigabyte motherboards, so support for
that id was added back, but a check to make sure that card was not being
used on a Gigabyte motherboard before fully loading the driver.

This is the upstream patch:

commit 44a1d2e5c5c935fff3a093a1bcede32912c76421
Author: Stephen Hemminger <shemminger@linux-foundation.org>
Date:   Mon Apr 30 14:23:49 2007 -0700

    sky2: re-enable 88E8056 for most motherboards

    This fixes the regression in 2.6.21 for users with 88e8056 on motherboard.
    Allow all but the Gigabyte motherboard has some unresolved bus problems.

    Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
    Signed-off-by: Jeff Garzik <jeff@garzik.org>

This has been verified by several customer and partners and they are now
quite pleased that they can certify their systems.  Check out BZ 420961
for more details.

diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index 0fac685..5fe8477 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -124,10 +124,7 @@ static const struct pci_device_id sky2_id_table[] = {
 	{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4361) }, /* 88E8050 */
 	{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4362) }, /* 88E8053 */
 	{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4363) }, /* 88E8055 */
-#ifdef broken
-	/* This device causes data corruption problems that are not resolved */
 	{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4364) }, /* 88E8056 */
-#endif
 	{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4366) }, /* 88EC036 */
 	{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4367) }, /* 88EC032 */
 	{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4368) }, /* 88EC034 */
@@ -3582,10 +3579,21 @@ static int __devinit sky2_probe(struct pci_dev *pdev,
 		goto err_out;
 	}
 
+	/* Some Gigabyte motherboards have 88e8056 but cause problems
+	 * There is some unresolved hardware related problem that causes
+	 * descriptor errors and receive data corruption.
+	 */
+	if (pdev->vendor == PCI_VENDOR_ID_MARVELL &&
+	    pdev->device == 0x4364 && pdev->subsystem_vendor == 0x1458) {
+		dev_err(&pdev->dev,
+			"88E8056 on Gigabyte motherboards not supported\n");
+		goto err_out_disable;
+	}
+
 	err = pci_request_regions(pdev, DRV_NAME);
 	if (err) {
 		dev_err(&pdev->dev, "cannot obtain PCI resources\n");
-		goto err_out;
+		goto err_out_disable;
 	}
 
 	pci_set_master(pdev);
@@ -3722,6 +3730,7 @@ err_out_free_hw:
 	kfree(hw);
 err_out_free_regions:
 	pci_release_regions(pdev);
+err_out_disable:
 	pci_disable_device(pdev);
 err_out:
 	return err;