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;