|
@@ -295,14 +295,23 @@ static int intel_reset ( struct intel_nic *intel ) {
|
295
|
295
|
writel ( ctrl, intel->regs + INTEL_CTRL );
|
296
|
296
|
mdelay ( INTEL_RESET_DELAY_MS );
|
297
|
297
|
|
298
|
|
- /* If link is already up, do not attempt to reset the PHY. On
|
299
|
|
- * some models (notably ICH), performing a PHY reset seems to
|
300
|
|
- * drop the link speed to 10Mbps.
|
|
298
|
+ /* On some models (notably ICH), the PHY reset mechanism
|
|
299
|
+ * appears to be broken. In particular, the PHY_CTRL register
|
|
300
|
+ * will be correctly loaded from NVM but the values will not
|
|
301
|
+ * be propagated to the "OEM bits" PHY register. This
|
|
302
|
+ * typically has the effect of dropping the link speed to
|
|
303
|
+ * 10Mbps.
|
|
304
|
+ *
|
|
305
|
+ * Work around this problem by skipping the PHY reset if
|
|
306
|
+ * either (a) the link is already up, or (b) this particular
|
|
307
|
+ * NIC is known to be broken.
|
301
|
308
|
*/
|
302
|
309
|
status = readl ( intel->regs + INTEL_STATUS );
|
303
|
|
- if ( status & INTEL_STATUS_LU ) {
|
304
|
|
- DBGC ( intel, "INTEL %p MAC reset (ctrl %08x)\n",
|
305
|
|
- intel, ctrl );
|
|
310
|
+ if ( ( intel->flags & INTEL_NO_PHY_RST ) ||
|
|
311
|
+ ( status & INTEL_STATUS_LU ) ) {
|
|
312
|
+ DBGC ( intel, "INTEL %p %sMAC reset (ctrl %08x)\n", intel,
|
|
313
|
+ ( ( intel->flags & INTEL_NO_PHY_RST ) ? "forced " : "" ),
|
|
314
|
+ ctrl );
|
306
|
315
|
return 0;
|
307
|
316
|
}
|
308
|
317
|
|
|
@@ -1029,7 +1038,7 @@ static struct pci_device_id intel_nics[] = {
|
1029
|
1038
|
PCI_ROM ( 0x8086, 0x10f5, "82567lm", "82567LM", 0 ),
|
1030
|
1039
|
PCI_ROM ( 0x8086, 0x10f6, "82574l", "82574L", 0 ),
|
1031
|
1040
|
PCI_ROM ( 0x8086, 0x1501, "82567v-3", "82567V-3", INTEL_PBS_ERRATA ),
|
1032
|
|
- PCI_ROM ( 0x8086, 0x1502, "82579lm", "82579LM", 0 ),
|
|
1041
|
+ PCI_ROM ( 0x8086, 0x1502, "82579lm", "82579LM", INTEL_NO_PHY_RST ),
|
1033
|
1042
|
PCI_ROM ( 0x8086, 0x1503, "82579v", "82579V", 0 ),
|
1034
|
1043
|
PCI_ROM ( 0x8086, 0x150a, "82576ns", "82576NS", 0 ),
|
1035
|
1044
|
PCI_ROM ( 0x8086, 0x150c, "82583v", "82583V", 0 ),
|
|
@@ -1057,7 +1066,7 @@ static struct pci_device_id intel_nics[] = {
|
1057
|
1066
|
PCI_ROM ( 0x8086, 0x15a0, "i218lm-2", "I218-LM", 0 ),
|
1058
|
1067
|
PCI_ROM ( 0x8086, 0x15a1, "i218v-2", "I218-V", 0 ),
|
1059
|
1068
|
PCI_ROM ( 0x8086, 0x15a2, "i218lm-3", "I218-LM", 0 ),
|
1060
|
|
- PCI_ROM ( 0x8086, 0x15a3, "i218v-3", "I218-V", 0 ),
|
|
1069
|
+ PCI_ROM ( 0x8086, 0x15a3, "i218v-3", "I218-V", INTEL_NO_PHY_RST ),
|
1061
|
1070
|
PCI_ROM ( 0x8086, 0x294c, "82566dc-2", "82566DC-2", 0 ),
|
1062
|
1071
|
PCI_ROM ( 0x8086, 0x2e6e, "cemedia", "CE Media Processor", 0 ),
|
1063
|
1072
|
};
|