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 |