diff options
| -rw-r--r-- | drivers/net/tulip/Kconfig | 4 | ||||
| -rw-r--r-- | drivers/net/tulip/dmfe.c | 21 | ||||
| -rw-r--r-- | drivers/net/tulip/tulip_core.c | 32 |
3 files changed, 50 insertions, 7 deletions
diff --git a/drivers/net/tulip/Kconfig b/drivers/net/tulip/Kconfig index 1cc8cf4425d1..516713fa0a05 100644 --- a/drivers/net/tulip/Kconfig +++ b/drivers/net/tulip/Kconfig | |||
| @@ -101,6 +101,10 @@ config TULIP_NAPI_HW_MITIGATION | |||
| 101 | 101 | ||
| 102 | If in doubt, say Y. | 102 | If in doubt, say Y. |
| 103 | 103 | ||
| 104 | config TULIP_DM910X | ||
| 105 | def_bool y | ||
| 106 | depends on TULIP && SPARC | ||
| 107 | |||
| 104 | config DE4X5 | 108 | config DE4X5 |
| 105 | tristate "Generic DECchip & DIGITAL EtherWORKS PCI/EISA" | 109 | tristate "Generic DECchip & DIGITAL EtherWORKS PCI/EISA" |
| 106 | depends on PCI || EISA | 110 | depends on PCI || EISA |
diff --git a/drivers/net/tulip/dmfe.c b/drivers/net/tulip/dmfe.c index ad63621913c3..6f44ebf58910 100644 --- a/drivers/net/tulip/dmfe.c +++ b/drivers/net/tulip/dmfe.c | |||
| @@ -92,6 +92,10 @@ | |||
| 92 | #include <asm/uaccess.h> | 92 | #include <asm/uaccess.h> |
| 93 | #include <asm/irq.h> | 93 | #include <asm/irq.h> |
| 94 | 94 | ||
| 95 | #ifdef CONFIG_TULIP_DM910X | ||
| 96 | #include <linux/of.h> | ||
| 97 | #endif | ||
| 98 | |||
| 95 | 99 | ||
| 96 | /* Board/System/Debug information/definition ---------------- */ | 100 | /* Board/System/Debug information/definition ---------------- */ |
| 97 | #define PCI_DM9132_ID 0x91321282 /* Davicom DM9132 ID */ | 101 | #define PCI_DM9132_ID 0x91321282 /* Davicom DM9132 ID */ |
| @@ -377,6 +381,23 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev, | |||
| 377 | if (!printed_version++) | 381 | if (!printed_version++) |
| 378 | printk(version); | 382 | printk(version); |
| 379 | 383 | ||
| 384 | /* | ||
| 385 | * SPARC on-board DM910x chips should be handled by the main | ||
| 386 | * tulip driver, except for early DM9100s. | ||
| 387 | */ | ||
| 388 | #ifdef CONFIG_TULIP_DM910X | ||
| 389 | if ((ent->driver_data == PCI_DM9100_ID && pdev->revision >= 0x30) || | ||
| 390 | ent->driver_data == PCI_DM9102_ID) { | ||
| 391 | struct device_node *dp = pci_device_to_OF_node(pdev); | ||
| 392 | |||
| 393 | if (dp && of_get_property(dp, "local-mac-address", NULL)) { | ||
| 394 | printk(KERN_INFO DRV_NAME | ||
| 395 | ": skipping on-board DM910x (use tulip)\n"); | ||
| 396 | return -ENODEV; | ||
| 397 | } | ||
| 398 | } | ||
| 399 | #endif | ||
| 400 | |||
| 380 | /* Init network device */ | 401 | /* Init network device */ |
| 381 | dev = alloc_etherdev(sizeof(*db)); | 402 | dev = alloc_etherdev(sizeof(*db)); |
| 382 | if (dev == NULL) | 403 | if (dev == NULL) |
diff --git a/drivers/net/tulip/tulip_core.c b/drivers/net/tulip/tulip_core.c index 0fa3140d65bf..595777dcadb1 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[] = { | |||
| 196 | | HAS_NWAY | HAS_PCI_MWI, tulip_timer, tulip_media_task }, | 196 | | HAS_NWAY | HAS_PCI_MWI, tulip_timer, tulip_media_task }, |
| 197 | 197 | ||
| 198 | /* DM910X */ | 198 | /* DM910X */ |
| 199 | #ifdef CONFIG_TULIP_DM910X | ||
| 199 | { "Davicom DM9102/DM9102A", 128, 0x0001ebef, | 200 | { "Davicom DM9102/DM9102A", 128, 0x0001ebef, |
| 200 | HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | HAS_ACPI, | 201 | HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | HAS_ACPI, |
| 201 | tulip_timer, tulip_media_task }, | 202 | tulip_timer, tulip_media_task }, |
| 203 | #else | ||
| 204 | { NULL }, | ||
| 205 | #endif | ||
| 202 | 206 | ||
| 203 | /* RS7112 */ | 207 | /* RS7112 */ |
| 204 | { "Conexant LANfinity", 256, 0x0001ebef, | 208 | { "Conexant LANfinity", 256, 0x0001ebef, |
| @@ -228,8 +232,10 @@ static struct pci_device_id tulip_pci_tbl[] = { | |||
| 228 | { 0x1259, 0xa120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, | 232 | { 0x1259, 0xa120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, |
| 229 | { 0x11F6, 0x9881, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMPEX9881 }, | 233 | { 0x11F6, 0x9881, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMPEX9881 }, |
| 230 | { 0x8086, 0x0039, PCI_ANY_ID, PCI_ANY_ID, 0, 0, I21145 }, | 234 | { 0x8086, 0x0039, PCI_ANY_ID, PCI_ANY_ID, 0, 0, I21145 }, |
| 235 | #ifdef CONFIG_TULIP_DM910X | ||
| 231 | { 0x1282, 0x9100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X }, | 236 | { 0x1282, 0x9100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X }, |
| 232 | { 0x1282, 0x9102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X }, | 237 | { 0x1282, 0x9102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DM910X }, |
| 238 | #endif | ||
| 233 | { 0x1113, 0x1216, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, | 239 | { 0x1113, 0x1216, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, |
| 234 | { 0x1113, 0x1217, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98715 }, | 240 | { 0x1113, 0x1217, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98715 }, |
| 235 | { 0x1113, 0x9511, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, | 241 | { 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, | |||
| 1299 | } | 1305 | } |
| 1300 | 1306 | ||
| 1301 | /* | 1307 | /* |
| 1302 | * Early DM9100's need software CRC and the DMFE driver | 1308 | * DM910x chips should be handled by the dmfe driver, except |
| 1309 | * on-board chips on SPARC systems. Also, early DM9100s need | ||
| 1310 | * software CRC which only the dmfe driver supports. | ||
| 1303 | */ | 1311 | */ |
| 1304 | 1312 | ||
| 1305 | if (pdev->vendor == 0x1282 && pdev->device == 0x9100) | 1313 | #ifdef CONFIG_TULIP_DM910X |
| 1306 | { | 1314 | if (chip_idx == DM910X) { |
| 1307 | /* Read Chip revision */ | 1315 | struct device_node *dp; |
| 1308 | if (pdev->revision < 0x30) | 1316 | |
| 1309 | { | 1317 | if (pdev->vendor == 0x1282 && pdev->device == 0x9100 && |
| 1310 | printk(KERN_ERR PFX "skipping early DM9100 with Crc bug (use dmfe)\n"); | 1318 | pdev->revision < 0x30) { |
| 1319 | printk(KERN_INFO PFX | ||
| 1320 | "skipping early DM9100 with Crc bug (use dmfe)\n"); | ||
| 1321 | return -ENODEV; | ||
| 1322 | } | ||
| 1323 | |||
| 1324 | dp = pci_device_to_OF_node(pdev); | ||
| 1325 | if (!(dp && of_get_property(dp, "local-mac-address", NULL))) { | ||
| 1326 | printk(KERN_INFO PFX | ||
| 1327 | "skipping DM910x expansion card (use dmfe)\n"); | ||
| 1311 | return -ENODEV; | 1328 | return -ENODEV; |
| 1312 | } | 1329 | } |
| 1313 | } | 1330 | } |
| 1331 | #endif | ||
| 1314 | 1332 | ||
| 1315 | /* | 1333 | /* |
| 1316 | * Looks for early PCI chipsets where people report hangs | 1334 | * Looks for early PCI chipsets where people report hangs |
