|
@@ -878,10 +878,15 @@ static void realtek_detect ( struct realtek_nic *rtl ) {
|
878
|
878
|
/* The C+ Command register is present only on 8169 and 8139C+.
|
879
|
879
|
* Try to enable C+ mode and PCI Dual Address Cycle (for
|
880
|
880
|
* 64-bit systems), if supported.
|
|
881
|
+ *
|
|
882
|
+ * Note that enabling DAC seems to cause bizarre behaviour
|
|
883
|
+ * (lockups, garbage data on the wire) on some systems, even
|
|
884
|
+ * if only 32-bit addresses are used.
|
881
|
885
|
*/
|
882
|
886
|
cpcr = readw ( rtl->regs + RTL_CPCR );
|
883
|
|
- cpcr |= ( RTL_CPCR_DAC | RTL_CPCR_MULRW | RTL_CPCR_CPRX |
|
884
|
|
- RTL_CPCR_CPTX );
|
|
887
|
+ cpcr |= ( RTL_CPCR_MULRW | RTL_CPCR_CPRX | RTL_CPCR_CPTX );
|
|
888
|
+ if ( sizeof ( physaddr_t ) > sizeof ( uint32_t ) )
|
|
889
|
+ cpcr |= RTL_CPCR_DAC;
|
885
|
890
|
writew ( cpcr, rtl->regs + RTL_CPCR );
|
886
|
891
|
check_cpcr = readw ( rtl->regs + RTL_CPCR );
|
887
|
892
|
|