|
@@ -1228,7 +1228,10 @@ static void rtl8169_hw_phy_config(struct net_device *dev)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- /* phy config for RTL8169s mac_version C chip */
|
|
|
+ if ((tp->mac_version != RTL_GIGA_MAC_VER_02) &&
|
|
|
+ (tp->mac_version != RTL_GIGA_MAC_VER_03))
|
|
|
+ return;
|
|
|
+
|
|
|
mdio_write(ioaddr, 31, 0x0001); //w 31 2 0 1
|
|
|
mdio_write(ioaddr, 21, 0x1000); //w 21 15 0 1000
|
|
|
mdio_write(ioaddr, 24, 0x65c7); //w 24 15 0 65c7
|
|
@@ -2567,6 +2570,15 @@ static void rtl8169_tx_interrupt(struct net_device *dev,
|
|
|
(TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)) {
|
|
|
netif_wake_queue(dev);
|
|
|
}
|
|
|
+ /*
|
|
|
+ * 8168 hack: TxPoll requests are lost when the Tx packets are
|
|
|
+ * too close. Let's kick an extra TxPoll request when a burst
|
|
|
+ * of start_xmit activity is detected (if it is not detected,
|
|
|
+ * it is slow enough). -- FR
|
|
|
+ */
|
|
|
+ smp_rmb();
|
|
|
+ if (tp->cur_tx != dirty_tx)
|
|
|
+ RTL_W8(TxPoll, NPQ);
|
|
|
}
|
|
|
}
|
|
|
|