From 6fde575aa54d9dce57808832827f0bc15da44ee7 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Tue, 5 Jan 2010 03:14:04 +0000 Subject: [PATCH] dmfe/tulip: Let dmfe handle DM910x except for SPARC on-board chips (Closes: #515533) svn path=/dists/trunk/linux-2.6/; revision=14892 --- debian/changelog | 2 + ...e-handle-DM910x-except-SPARC-onboard.patch | 131 ++++++++++++++++++ debian/patches/series/4 | 1 + 3 files changed, 134 insertions(+) create mode 100644 debian/patches/bugfix/all/dmfe-tulip-Let-dmfe-handle-DM910x-except-SPARC-onboard.patch diff --git a/debian/changelog b/debian/changelog index 7f198a8a1..3f17205c3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,6 +7,8 @@ linux-2.6 (2.6.32-4) UNRELEASED; urgency=low (Closes: #563036) * via-velocity: Give RX descriptors to the NIC later on open or MTU change (Closes: #508527) + * dmfe/tulip: Let dmfe handle DM910x except for SPARC on-board chips + (Closes: #515533) [ maximilian attems ] * topconfig set CAN_EMS_USB, BT_MRVL, BT_MRVL_SDIO, BE2ISCSI, SCSI_PMCRAID, diff --git a/debian/patches/bugfix/all/dmfe-tulip-Let-dmfe-handle-DM910x-except-SPARC-onboard.patch b/debian/patches/bugfix/all/dmfe-tulip-Let-dmfe-handle-DM910x-except-SPARC-onboard.patch new file mode 100644 index 000000000..479f620b0 --- /dev/null +++ b/debian/patches/bugfix/all/dmfe-tulip-Let-dmfe-handle-DM910x-except-SPARC-onboard.patch @@ -0,0 +1,131 @@ +From 42d0b8e38a1f545c7893e57fea2a14bc59b8a6df Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Tue, 29 Dec 2009 17:21:05 +0100 +Subject: [PATCH] dmfe/tulip: Let dmfe handle DM910x except for SPARC on-board chips + +The Davicom DM9100 and DM9102 chips are used on the motherboards of +some SPARC systems (supported by the tulip driver) and also in PCI +expansion cards (supported by the dmfe driver). There is no +difference in the PCI device ids for the two different configurations, +so these drivers both claim the device ids. However, it is possible +to distinguish the two configurations by the presence of Open Firmware +properties for them, so we do that. +--- + drivers/net/tulip/Kconfig | 4 ++++ + drivers/net/tulip/dmfe.c | 17 +++++++++++++++++ + drivers/net/tulip/tulip_core.c | 32 +++++++++++++++++++++++++------- + 3 files changed, 46 insertions(+), 7 deletions(-) + +diff --git a/drivers/net/tulip/Kconfig b/drivers/net/tulip/Kconfig +index 1cc8cf4..516713f 100644 +--- a/drivers/net/tulip/Kconfig ++++ b/drivers/net/tulip/Kconfig +@@ -101,6 +101,10 @@ config TULIP_NAPI_HW_MITIGATION + + If in doubt, say Y. + ++config TULIP_DM910X ++ def_bool y ++ depends on TULIP && SPARC ++ + config DE4X5 + tristate "Generic DECchip & DIGITAL EtherWORKS PCI/EISA" + depends on PCI || EISA +diff --git a/drivers/net/tulip/dmfe.c b/drivers/net/tulip/dmfe.c +index ad63621..b2273a1 100644 +--- a/drivers/net/tulip/dmfe.c ++++ b/drivers/net/tulip/dmfe.c +@@ -377,6 +377,23 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev, + if (!printed_version++) + printk(version); + ++ /* ++ * SPARC on-board DM910x chips should be handled by the main ++ * tulip driver, except for early DM9100s. ++ */ ++#ifdef CONFIG_TULIP_DM910X ++ if (ent->driver_data == PCI_DM9100_ID && pdev->revision >= 0x30 || ++ ent->driver_data == PCI_DM9102_ID) { ++ struct device_node *dp = pci_device_to_OF_node(pdev); ++ ++ if (dp && of_get_property(dp, "local-mac-address", NULL)) { ++ printk(KERN_INFO DRV_NAME ++ ": skipping on-board DM910x (use tulip)\n"); ++ return -ENODEV; ++ } ++ } ++#endif ++ + /* Init network device */ + dev = alloc_etherdev(sizeof(*db)); + if (dev == NULL) +diff --git a/drivers/net/tulip/tulip_core.c b/drivers/net/tulip/tulip_core.c +index 0fa3140..595777d 100644 +--- a/drivers/net/tulip/tulip_core.c ++++ b/drivers/net/tulip/tulip_core.c +@@ -196,9 +196,13 @@ struct tulip_chip_table tulip_tbl[] = { + | HAS_NWAY | HAS_PCI_MWI, tulip_timer, tulip_media_task }, + + /* DM910X */ ++#ifdef CONFIG_TULIP_DM910X + { "Davicom DM9102/DM9102A", 128, 0x0001ebef, + HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | HAS_ACPI, + tulip_timer, tulip_media_task }, ++#else ++ { NULL }, ++#endif + + /* RS7112 */ + { "Conexant LANfinity", 256, 0x0001ebef, +@@ -228,8 +232,10 @@ static struct pci_device_id tulip_pci_tbl[] = { + { 0x1259, 0xa120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, + { 0x11F6, 0x9881, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMPEX9881 }, + { 0x8086, 0x0039, PCI_ANY_ID, PCI_ANY_ID, 0, 0, I21145 }, ++#ifdef CONFIG_TULIP_DM910X + { 0x1282, 0x9100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X }, + { 0x1282, 0x9102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X }, ++#endif + { 0x1113, 0x1216, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, + { 0x1113, 0x1217, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98715 }, + { 0x1113, 0x9511, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, +@@ -1299,18 +1305,30 @@ static int __devinit tulip_init_one (struct pci_dev *pdev, + } + + /* +- * Early DM9100's need software CRC and the DMFE driver ++ * DM910x chips should be handled by the dmfe driver, except ++ * on-board chips on SPARC systems. Also, early DM9100s need ++ * software CRC which only the dmfe driver supports. + */ + +- if (pdev->vendor == 0x1282 && pdev->device == 0x9100) +- { +- /* Read Chip revision */ +- if (pdev->revision < 0x30) +- { +- printk(KERN_ERR PFX "skipping early DM9100 with Crc bug (use dmfe)\n"); ++#ifdef CONFIG_TULIP_DM910X ++ if (chip_idx == DM910X) { ++ struct device_node *dp; ++ ++ if (pdev->vendor == 0x1282 && pdev->device == 0x9100 && ++ pdev->revision < 0x30) { ++ printk(KERN_INFO PFX ++ "skipping early DM9100 with Crc bug (use dmfe)\n"); ++ return -ENODEV; ++ } ++ ++ dp = pci_device_to_OF_node(pdev); ++ if (!(dp && of_get_property(dp, "local-mac-address", NULL))) { ++ printk(KERN_INFO PFX ++ "skipping DM910x expansion card (use dmfe)\n"); + return -ENODEV; + } + } ++#endif + + /* + * Looks for early PCI chipsets where people report hangs +-- +1.6.5.7 + diff --git a/debian/patches/series/4 b/debian/patches/series/4 index 5d3fd7196..2dc41460d 100644 --- a/debian/patches/series/4 +++ b/debian/patches/series/4 @@ -1,3 +1,4 @@ + bugfix/all/modules-Skip-empty-section-notes.patch + features/arm/early-printk.patch + bugfix/all/via-velocity-give-rx-descriptors-later.patch ++ bugfix/all/dmfe-tulip-Let-dmfe-handle-DM910x-except-SPARC-onboard.patch