The i219 appears to have a seriously broken reset mechanism. After any transmit or receive activity, resetting the card will break both the transmit and receive datapaths until the next PCI bus reset. The Linux and BSD drivers include a convoluted workaround authored by Intel which involves setting a bit in the undocumented FEXTNVM11 register, then transmitting a dummy 512-byte packet containing garbage data, then reconfiguring the receive descriptor prefetch thresholds and temporarily reenabling the receive datapath. The comments in the Intel fix do not even remotely match what the code actually does, and the code accidentally leaves the transmitter enabled after use. Experimentation suggests that an equivalent fix is to simply set the undocumented bit in FEXTNVM11 before enabling the transmit or receive descriptor rings. Signed-off-by: Michael Brown <mcb30@ipxe.org>tags/v1.20.1
|
|
||
635 |
|
635 |
|
636 |
|
636 |
|
637 |
|
637 |
|
|
638 |
|
|
638 |
|
639 |
|
639 |
|
640 |
|
640 |
|
641 |
|
641 |
|
642 |
|
|
643 |
|
|
|
644 |
|
|
|
645 |
|
|
|
646 |
|
|
|
647 |
|
|
|
648 |
|
|
|
649 |
|
|
|
650 |
|
|
|
651 |
|
|
|
652 |
|
|
|
653 |
|
|
|
654 |
|
|
642 |
|
655 |
|
643 |
|
656 |
|
644 |
|
657 |
|
|
|
||
1123 |
|
1136 |
|
1124 |
|
1137 |
|
1125 |
|
1138 |
|
1126 |
|
|
|
1127 |
|
|
|
|
1139 |
|
|
|
1140 |
|
|
1128 |
|
1141 |
|
1129 |
|
1142 |
|
1130 |
|
1143 |
|
1131 |
|
1144 |
|
1132 |
|
1145 |
|
1133 |
|
|
|
1134 |
|
|
|
1135 |
|
|
|
1136 |
|
|
|
1137 |
|
|
|
1138 |
|
|
|
1139 |
|
|
|
|
1146 |
|
|
|
1147 |
|
|
|
1148 |
|
|
|
1149 |
|
|
|
1150 |
|
|
|
1151 |
|
|
|
1152 |
|
|
1140 |
|
1153 |
|
1141 |
|
1154 |
|
1142 |
|
1155 |
|
|
|
||
195 |
|
195 |
|
196 |
|
196 |
|
197 |
|
197 |
|
|
198 |
|
|
|
199 |
|
|
|
200 |
|
|
|
201 |
|
|
198 |
|
202 |
|
199 |
|
203 |
|
200 |
|
204 |
|
|
|
||
308 |
|
312 |
|
309 |
|
313 |
|
310 |
|
314 |
|
|
315 |
|
|
|
316 |
|
|
311 |
|
317 |
|
312 |
|
318 |
|
|
319 |
|
|
|
320 |
|
|
|
321 |
|
|
313 |
|
322 |
|
314 |
|
323 |
|
315 |
|
324 |
|