Most patches in this series required no to little changes to get applied
against v3.0.43. I have avoided changes which are known to require a
a second patch to fix their own regression.
The patches differences are inserted below, something like:
$ git rev-list v3.0.43..v3.0.43.r8169 | while read h; do
git show $h > b
git show $(grep upstream b | sed s/'.*commit \(.*\) up.*'/'\1'/g ) > a
diff -bBupN [ab] >> r8169.diff
done
I have done a simple build + boot + network test.
--- a 2012-09-29 11:43:16.297568444 +0200
+++ b 2012-09-29 11:43:16.270568661 +0200
@@ -1,30 +1,23 @@
-commit ad1be8d345416a794dea39761a374032aa471a76
+commit 1c5e5ae23c7eb7cd33526e7524b254be1ee6d0a0
Author: Devendra Naga <[email protected]>
Date: Thu May 31 01:51:20 2012 +0000
r8169: call netif_napi_del at errpaths and at driver unload
- when register_netdev fails, the init'ed NAPIs by netif_napi_add must be
+ commit ad1be8d345416a794dea39761a374032aa471a76 upstream.
+
+ When register_netdev fails, the init'ed NAPIs by netif_napi_add must be
deleted with netif_napi_del, and also when driver unloads, it should
delete the NAPI before unregistering netdevice using unregister_netdev.
Signed-off-by: Devendra Naga <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
-diff --git a/drivers/net/ethernet/realtek/r8169.c
b/drivers/net/ethernet/realtek/r8169.c
-index 00b4f56..9757ce3 100644
---- a/drivers/net/ethernet/realtek/r8169.c
-+++ b/drivers/net/ethernet/realtek/r8169.c
-@@ -6345,6 +6345,8 @@ static void __devexit rtl_remove_one(struct pci_dev
*pdev)
-
- cancel_work_sync(&tp->wk.work);
-
-+ netif_napi_del(&tp->napi);
-+
- unregister_netdev(dev);
-
- rtl_release_firmware(tp);
-@@ -6668,6 +6670,7 @@ out:
+diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
+index e0658ea..d5a0dac 100644
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -3704,6 +3704,7 @@ out:
return rc;
err_out_msi_4:
@@ -32,3 +25,12 @@ index 00b4f56..9757ce3 100644
rtl_disable_msi(pdev, tp);
iounmap(ioaddr);
err_out_free_res_3:
+@@ -3729,6 +3730,8 @@ static void __devexit rtl8169_remove_one(struct pci_dev
*pdev)
+
+ cancel_delayed_work_sync(&tp->task);
+
++ netif_napi_del(&tp->napi);
++
+ unregister_netdev(dev);
+
+ rtl_release_firmware(tp);
--- a 2012-09-29 11:43:16.337568122 +0200
+++ b 2012-09-29 11:43:16.304568388 +0200
@@ -1,9 +1,11 @@
-commit 477206a018f902895bfcd069dd820bfe94c187b1
+commit 26d97d0d61c98032c14c80b9342e57ff1bffb762
Author: Julien Ducourthial <[email protected]>
Date: Wed May 9 00:00:06 2012 +0200
r8169: fix unsigned int wraparound with TSO
+ commit 477206a018f902895bfcd069dd820bfe94c187b1 upstream.
+
The r8169 may get stuck or show bad behaviour after activating TSO :
the net_device is not stopped when it has no more TX descriptors.
This problem comes from TX_BUFS_AVAIL which may reach -1 when all
@@ -17,11 +19,11 @@ Date: Wed May 9 00:00:06 2012 +0200
Acked-by: Francois Romieu <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
-diff --git a/drivers/net/ethernet/realtek/r8169.c
b/drivers/net/ethernet/realtek/r8169.c
-index f545093..ce6b44d 100644
---- a/drivers/net/ethernet/realtek/r8169.c
-+++ b/drivers/net/ethernet/realtek/r8169.c
-@@ -61,8 +61,12 @@
+diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
+index 2706222..e0658ea 100644
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -58,8 +58,12 @@
#define R8169_MSG_DEFAULT \
(NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_IFUP | NETIF_MSG_IFDOWN)
@@ -36,7 +38,7 @@ index f545093..ce6b44d 100644
/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
The RTL chips use a 64 element hash table based on the Ethernet CRC. */
-@@ -5115,7 +5119,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff
*skb,
+@@ -4922,7 +4926,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff
*skb,
u32 opts[2];
int frags;
@@ -45,26 +47,21 @@ index f545093..ce6b44d 100644
netif_err(tp, drv, dev, "BUG! Tx Ring full when queue
awake!\n");
goto err_stop_0;
}
-@@ -5169,7 +5173,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff
*skb,
+@@ -4970,10 +4974,10 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff
*skb,
- mmiowb();
+ RTL_W8(TxPoll, NPQ);
- if (TX_BUFFS_AVAIL(tp) < MAX_SKB_FRAGS) {
+ if (!TX_FRAGS_READY_FOR(tp, MAX_SKB_FRAGS)) {
- /* Avoid wrongly optimistic queue wake-up: rtl_tx thread must
- * not miss a ring update when it notices a stopped queue.
- */
-@@ -5183,7 +5187,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff
*skb,
- * can't.
- */
+ netif_stop_queue(dev);
smp_mb();
- if (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)
+ if (TX_FRAGS_READY_FOR(tp, MAX_SKB_FRAGS))
netif_wake_queue(dev);
}
-@@ -5306,7 +5310,7 @@ static void rtl_tx(struct net_device *dev, struct
rtl8169_private *tp)
- */
+@@ -5075,7 +5079,7 @@ static void rtl8169_tx_interrupt(struct net_device *dev,
+ tp->dirty_tx = dirty_tx;
smp_mb();
if (netif_queue_stopped(dev) &&
- (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)) {
--- a 2012-09-29 11:43:16.354567986 +0200
+++ b 2012-09-29 11:43:16.345568058 +0200
@@ -1,19 +1,21 @@
-commit d387b427c973974dd619a33549c070ac5d0e089f
+commit ffc43652f37f213defd8637a9e0ade9dd598ef82
Author: Francois Romieu <[email protected]>
Date: Tue Apr 17 11:12:01 2012 +0200
r8169: 8168c and later require bit 0x20 to be set in Config2 for PME
signaling.
+ commit d387b427c973974dd619a33549c070ac5d0e089f upstream.
+
The new 84xx stopped flying below the radars.
Signed-off-by: Francois Romieu <[email protected]>
Cc: Hayes Wang <[email protected]>
-diff --git a/drivers/net/ethernet/realtek/r8169.c
b/drivers/net/ethernet/realtek/r8169.c
-index 9b0b00b..207aadc 100644
---- a/drivers/net/ethernet/realtek/r8169.c
-+++ b/drivers/net/ethernet/realtek/r8169.c
-@@ -315,6 +315,8 @@ enum rtl_registers {
+diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
+index 55564ff..2706222 100644
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -299,6 +299,8 @@ enum rtl_registers {
Config0 = 0x51,
Config1 = 0x52,
Config2 = 0x53,
@@ -22,7 +24,7 @@ index 9b0b00b..207aadc 100644
Config3 = 0x54,
Config4 = 0x55,
Config5 = 0x56,
-@@ -1422,6 +1424,10 @@ static void __rtl8169_set_wol(struct rtl8169_private
*tp, u32 wolopts)
+@@ -1247,6 +1249,10 @@ static void __rtl8169_set_wol(struct rtl8169_private
*tp, u32 wolopts)
RTL_W8(Config1, options);
break;
default:
--- a 2012-09-29 11:43:16.379567785 +0200
+++ b 2012-09-29 11:43:16.361567929 +0200
@@ -1,19 +1,21 @@
-commit 851e60221926a53344b4227879858bef841b0477
+commit 58ffb28c5f99d52b96aa9302f15a36eeed0d5f4d
Author: Francois Romieu <[email protected]>
Date: Tue Apr 17 11:10:11 2012 +0200
r8169: Config1 is read-only on 8168c and later.
+ commit 851e60221926a53344b4227879858bef841b0477 upstream.
+
Suggested by Hayes.
Signed-off-by: Francois Romieu <[email protected]>
Cc: Hayes Wang <[email protected]>
-diff --git a/drivers/net/ethernet/realtek/r8169.c
b/drivers/net/ethernet/realtek/r8169.c
-index 71393ea..9b0b00b 100644
---- a/drivers/net/ethernet/realtek/r8169.c
-+++ b/drivers/net/ethernet/realtek/r8169.c
-@@ -1396,7 +1396,6 @@ static void __rtl8169_set_wol(struct rtl8169_private
*tp, u32 wolopts)
+diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
+index 3883697..55564ff 100644
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -1221,7 +1221,6 @@ static void __rtl8169_set_wol(struct rtl8169_private
*tp, u32 wolopts)
u16 reg;
u8 mask;
} cfg[] = {
@@ -21,7 +23,7 @@ index 71393ea..9b0b00b 100644
{ WAKE_PHY, Config3, LinkUp },
{ WAKE_MAGIC, Config3, MagicPacket },
{ WAKE_UCAST, Config5, UWF },
-@@ -1404,16 +1403,28 @@ static void __rtl8169_set_wol(struct rtl8169_private
*tp, u32 wolopts)
+@@ -1229,16 +1228,28 @@ static void __rtl8169_set_wol(struct rtl8169_private
*tp, u32 wolopts)
{ WAKE_MCAST, Config5, MWF },
{ WAKE_ANY, Config5, LanWake }
};
--- a 2012-09-29 11:43:16.392567680 +0200
+++ b 2012-09-29 11:43:16.386567728 +0200
@@ -1,9 +1,11 @@
-commit 2a15cd2ff488a9fdb55e5e34060f499853b27c77
+commit cd40334ea4e0219255b270d35f5abf98a6e12743
Author: françois romieu <[email protected]>
Date: Tue Mar 6 01:14:12 2012 +0000
r8169: runtime resume before shutdown.
+ commit 2a15cd2ff488a9fdb55e5e34060f499853b27c77 upstream.
+
With runtime PM, if the ethernet cable is disconnected, the device is
transitioned to D3 state to conserve energy. If the system is shutdown
in this state, any register accesses in rtl_shutdown are dropped on
@@ -24,21 +26,21 @@ Date: Tue Mar 6 01:14:12 2012 +0000
Acked-by: Rafael J. Wysocki <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
-diff --git a/drivers/net/ethernet/realtek/r8169.c
b/drivers/net/ethernet/realtek/r8169.c
-index 1adf177..bbacb37 100644
---- a/drivers/net/ethernet/realtek/r8169.c
-+++ b/drivers/net/ethernet/realtek/r8169.c
-@@ -6194,6 +6194,9 @@ static void rtl_shutdown(struct pci_dev *pdev)
- {
+diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
+index 16b11c0..3883697 100644
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -5568,6 +5568,9 @@ static void rtl_shutdown(struct pci_dev *pdev)
struct net_device *dev = pci_get_drvdata(pdev);
struct rtl8169_private *tp = netdev_priv(dev);
+ void __iomem *ioaddr = tp->mmio_addr;
+ struct device *d = &pdev->dev;
+
+ pm_runtime_get_sync(d);
rtl8169_net_suspend(dev);
-@@ -6215,6 +6218,8 @@ static void rtl_shutdown(struct pci_dev *pdev)
+@@ -5596,6 +5599,8 @@ static void rtl_shutdown(struct pci_dev *pdev)
pci_wake_from_d3(pdev, true);
pci_set_power_state(pdev, PCI_D3hot);
}
--- a 2012-09-29 11:43:16.405567576 +0200
+++ b 2012-09-29 11:43:16.399567624 +0200
@@ -1,17 +1,19 @@
-commit 1e874e041fc7c222cbd85b20c4406070be1f687a
+commit a24e177a98cbf530358a30e8e9e7bb115109b685
Author: Francois Romieu <[email protected]>
Date: Fri Jan 27 15:05:38 2012 +0100
r8169: missing barriers.
+ commit 1e874e041fc7c222cbd85b20c4406070be1f687a upstream.
+
Signed-off-by: Francois Romieu <[email protected]>
Cc: Hayes Wang <[email protected]>
-diff --git a/drivers/net/ethernet/realtek/r8169.c
b/drivers/net/ethernet/realtek/r8169.c
-index 610f4b3..8dd13f5 100644
---- a/drivers/net/ethernet/realtek/r8169.c
-+++ b/drivers/net/ethernet/realtek/r8169.c
-@@ -5552,7 +5552,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff
*skb,
+diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
+index a556e5f..16b11c0 100644
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -4955,7 +4955,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff
*skb,
if (TX_BUFFS_AVAIL(tp) < MAX_SKB_FRAGS) {
netif_stop_queue(dev);
@@ -20,7 +22,7 @@ index 610f4b3..8dd13f5 100644
if (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)
netif_wake_queue(dev);
}
-@@ -5653,7 +5653,7 @@ static void rtl8169_tx_interrupt(struct net_device *dev,
+@@ -5056,7 +5056,7 @@ static void rtl8169_tx_interrupt(struct net_device *dev,
if (tp->dirty_tx != dirty_tx) {
tp->dirty_tx = dirty_tx;
@@ -29,7 +31,7 @@ index 610f4b3..8dd13f5 100644
if (netif_queue_stopped(dev) &&
(TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)) {
netif_wake_queue(dev);
-@@ -5664,7 +5664,6 @@ static void rtl8169_tx_interrupt(struct net_device *dev,
+@@ -5067,7 +5067,6 @@ static void rtl8169_tx_interrupt(struct net_device *dev,
* of start_xmit activity is detected (if it is not detected,
* it is slow enough). -- FR
*/
--- a 2012-09-29 11:43:16.420567455 +0200
+++ b 2012-09-29 11:43:16.412567519 +0200
@@ -1,9 +1,11 @@
-commit 2ca6cf06d988fea21e812a86be79353352677c9c
+commit a1115fba07f07c64721768ec51ece5814c53dfb9
Author: françois romieu <[email protected]>
Date: Thu Dec 15 08:37:43 2011 +0000
r8169: fix Config2 MSIEnable bit setting.
+ commit 2ca6cf06d988fea21e812a86be79353352677c9c upstream.
+
The MSIEnable bit is only available for the 8169.
Avoid Config2 writes for the post-8169 8168 and 810x.
@@ -13,11 +15,11 @@ Date: Thu Dec 15 08:37:43 2011 +0000
Cc: Hayes Wang <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
-diff --git a/drivers/net/ethernet/realtek/r8169.c
b/drivers/net/ethernet/realtek/r8169.c
-index 67bf078..c8f47f1 100644
---- a/drivers/net/ethernet/realtek/r8169.c
-+++ b/drivers/net/ethernet/realtek/r8169.c
-@@ -477,7 +477,6 @@ enum rtl_register_content {
+diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
+index 06d4659..a556e5f 100644
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -448,7 +448,6 @@ enum rtl_register_content {
/* Config1 register p.24 */
LEDS1 = (1 << 7),
LEDS0 = (1 << 6),
@@ -25,7 +27,7 @@ index 67bf078..c8f47f1 100644
Speed_down = (1 << 4),
MEMMAP = (1 << 3),
IOMAP = (1 << 2),
-@@ -485,6 +484,7 @@ enum rtl_register_content {
+@@ -456,6 +455,7 @@ enum rtl_register_content {
PMEnable = (1 << 0), /* Power Management Enable */
/* Config2 register p. 25 */
@@ -33,7 +35,7 @@ index 67bf078..c8f47f1 100644
PCI_Clock_66MHz = 0x01,
PCI_Clock_33MHz = 0x00,
-@@ -3426,22 +3426,24 @@ static const struct rtl_cfg_info {
+@@ -3001,22 +3001,24 @@ static const struct rtl_cfg_info {
};
/* Cfg9346_Unlock assumed. */
@@ -62,7 +64,7 @@ index 67bf078..c8f47f1 100644
return msi;
}
-@@ -4077,7 +4079,7 @@ rtl8169_init_one(struct pci_dev *pdev, const struct
pci_device_id *ent)
+@@ -3586,7 +3588,7 @@ rtl8169_init_one(struct pci_dev *pdev, const struct
pci_device_id *ent)
tp->features |= RTL_FEATURE_WOL;
if ((RTL_R8(Config5) & (UWF | BWF | MWF)) != 0)
tp->features |= RTL_FEATURE_WOL;
@@ -70,4 +72,4 @@ index 67bf078..c8f47f1 100644
+ tp->features |= rtl_try_msi(tp, cfg);
RTL_W8(Cfg9346, Cfg9346_Lock);
- if (rtl_tbi_enabled(tp)) {
+ if ((tp->mac_version <= RTL_GIGA_MAC_VER_06) &&
--- a 2012-09-29 11:43:16.436567327 +0200
+++ b 2012-09-29 11:43:16.428567391 +0200
@@ -1,9 +1,11 @@
-commit 811fd3010cf512f2e23e6c4c912aad54516dc706
+commit dfb2e3c2c8bb17a1eebccebddd5e83e66d62df1b
Author: françois romieu <[email protected]>
Date: Sun Dec 4 20:30:45 2011 +0000
r8169: Rx FIFO overflow fixes.
+ commit 811fd3010cf512f2e23e6c4c912aad54516dc706 upstream.
+
Realtek has specified that the post 8168c gigabit chips and the post
8105e fast ethernet chips recover automatically from a Rx FIFO overflow.
The driver does not need to clear the RxFIFOOver bit of IntrStatus and
@@ -37,11 +39,11 @@ Date: Sun Dec 4 20:30:45 2011 +0000
Cc: hayeswang <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
-diff --git a/drivers/net/ethernet/realtek/r8169.c
b/drivers/net/ethernet/realtek/r8169.c
-index 6f06aa1..7a1e3a6 100644
---- a/drivers/net/ethernet/realtek/r8169.c
-+++ b/drivers/net/ethernet/realtek/r8169.c
-@@ -1183,11 +1183,13 @@ static u8 rtl8168d_efuse_read(void __iomem *ioaddr,
int reg_addr)
+diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
+index 95305d3..06d4659 100644
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -1088,11 +1088,13 @@ static u8 rtl8168d_efuse_read(void __iomem *ioaddr,
int reg_addr)
return value;
}
@@ -57,17 +59,17 @@ index 6f06aa1..7a1e3a6 100644
+ RTL_R8(ChipCmd);
}
- static unsigned int rtl8169_tbi_reset_pending(struct rtl8169_private *tp)
-@@ -4339,7 +4341,7 @@ static void rtl8169_hw_reset(struct rtl8169_private *tp)
+ static void rtl8169_asic_down(void __iomem *ioaddr)
+@@ -3817,7 +3819,7 @@ static void rtl8169_hw_reset(struct rtl8169_private *tp)
void __iomem *ioaddr = tp->mmio_addr;
/* Disable interrupts */
- rtl8169_irq_mask_and_ack(ioaddr);
+ rtl8169_irq_mask_and_ack(tp);
- rtl_rx_close(tp);
-
-@@ -4885,8 +4887,7 @@ static void rtl_hw_start_8168(struct net_device *dev)
+ if (tp->mac_version == RTL_GIGA_MAC_VER_27 ||
+ tp->mac_version == RTL_GIGA_MAC_VER_28 ||
+@@ -4284,8 +4286,7 @@ static void rtl_hw_start_8168(struct net_device *dev)
RTL_W16(IntrMitigate, 0x5151);
/* Work around for RxFIFO overflow. */
@@ -77,7 +79,7 @@ index 6f06aa1..7a1e3a6 100644
tp->intr_event |= RxFIFOOver | PCSTimeout;
tp->intr_event &= ~RxOverflow;
}
-@@ -5076,6 +5077,11 @@ static void rtl_hw_start_8101(struct net_device *dev)
+@@ -4467,6 +4468,11 @@ static void rtl_hw_start_8101(struct net_device *dev)
void __iomem *ioaddr = tp->mmio_addr;
struct pci_dev *pdev = tp->pci_dev;
@@ -88,8 +90,8 @@ index 6f06aa1..7a1e3a6 100644
+
if (tp->mac_version == RTL_GIGA_MAC_VER_13 ||
tp->mac_version == RTL_GIGA_MAC_VER_16) {
- int cap = pci_pcie_cap(pdev);
-@@ -5342,7 +5348,7 @@ static void rtl8169_wait_for_quiescence(struct
net_device *dev)
+ int cap = tp->pcie_cap;
+@@ -4738,7 +4744,7 @@ static void rtl8169_wait_for_quiescence(struct
net_device *dev)
/* Wait for any pending NAPI task to complete */
napi_disable(&tp->napi);
@@ -98,7 +100,7 @@ index 6f06aa1..7a1e3a6 100644
tp->intr_mask = 0xffff;
RTL_W16(IntrMask, tp->intr_event);
-@@ -5804,6 +5810,10 @@ static irqreturn_t rtl8169_interrupt(int irq, void
*dev_instance)
+@@ -5200,6 +5206,10 @@ static irqreturn_t rtl8169_interrupt(int irq, void
*dev_instance)
*/
status = RTL_R16(IntrStatus);
while (status && status != 0xffff) {
@@ -109,7 +111,7 @@ index 6f06aa1..7a1e3a6 100644
handled = 1;
/* Handle all of the error cases first. These will reset
-@@ -5818,27 +5828,9 @@ static irqreturn_t rtl8169_interrupt(int irq, void
*dev_instance)
+@@ -5214,27 +5224,9 @@ static irqreturn_t rtl8169_interrupt(int irq, void
*dev_instance)
switch (tp->mac_version) {
/* Work around for rx fifo overflow */
case RTL_GIGA_MAC_VER_11:
--- a 2012-09-29 11:43:16.452567198 +0200
+++ b 2012-09-29 11:43:16.444567262 +0200
@@ -1,24 +1,25 @@
-commit 10953db8e1a278742ef7e64a3d1491802bcfa98b
+commit c413b58bdf4c239a8288fe43a08f4b8cfbb7dbad
Author: hayeswang <[email protected]>
Date: Mon Nov 7 20:44:37 2011 +0000
r8169: increase the delay parameter of pm_schedule_suspend
- The link down would occur when reseting PHY. And it would take about 2 ~ 5
seconds
- from link down to link up. If the delay of pm_schedule_suspend is not long
enough,
- the device would enter runtime_suspend before link up. After link up, the
device
- would wake up and reset PHY again. Then, you would find the driver keep in
a loop
- of runtime_suspend and rumtime_resume.
+ commit 10953db8e1a278742ef7e64a3d1491802bcfa98b upstream
+ The link down would occur when reseting PHY. And it would take about 2 ~ 5
+ seconds from link down to link up. If the delay of pm_schedule_suspend is
+ not long enough, the device would enter runtime_suspend before link up.
+ After link up, the device would wake up and reset PHY again. Then, you
+ would find the driver keep in a loop of runtime_suspend and rumtime_resume.
Signed-off-by: Hayes Wang <[email protected]>
Acked-by: Francois Romieu <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
-diff --git a/drivers/net/ethernet/realtek/r8169.c
b/drivers/net/ethernet/realtek/r8169.c
-index 92b45f0..6f06aa1 100644
---- a/drivers/net/ethernet/realtek/r8169.c
-+++ b/drivers/net/ethernet/realtek/r8169.c
-@@ -1292,7 +1292,7 @@ static void __rtl8169_check_link_status(struct
net_device *dev,
+diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
+index 3fe4fd3..95305d3 100644
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -1157,7 +1157,7 @@ static void __rtl8169_check_link_status(struct
net_device *dev,
netif_carrier_off(dev);
netif_info(tp, ifdown, dev, "link down\n");
if (pm)
--- a 2012-09-29 11:43:16.467567077 +0200
+++ b 2012-09-29 11:43:16.459567142 +0200
@@ -1,9 +1,11 @@
-commit deb9d93c89d311714a60809b28160e538e1cbb43
+commit 85a4e1888ba47fbf5983ad95fa9d386892992345
Author: Francois Romieu <[email protected]>
Date: Tue Jul 12 08:24:28 2011 +0200
r8169: expand received packet length indication.
+ commit deb9d93c89d311714a60809b28160e538e1cbb43 upstream.
+
8168d and above allow jumbo frames beyond 8k. Bump the received
packet length check before enabling jumbo frames on these chipsets.
@@ -15,11 +17,11 @@ Date: Tue Jul 12 08:24:28 2011 +0200
Signed-off-by: Francois Romieu <[email protected]>
-diff --git a/drivers/net/ethernet/realtek/r8169.c
b/drivers/net/ethernet/realtek/r8169.c
-index 9a5965e..30bba23 100644
---- a/drivers/net/ethernet/realtek/r8169.c
-+++ b/drivers/net/ethernet/realtek/r8169.c
-@@ -5533,7 +5533,7 @@ static int rtl8169_rx_interrupt(struct net_device *dev,
+diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
+index 0d34b38..3fe4fd3 100644
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -5137,7 +5137,7 @@ static int rtl8169_rx_interrupt(struct net_device *dev,
} else {
struct sk_buff *skb;
dma_addr_t addr = le64_to_cpu(desc->addr);
--- a 2012-09-29 11:43:16.483566949 +0200
+++ b 2012-09-29 11:43:16.474567021 +0200
@@ -1,9 +1,11 @@
-commit d58d46b5d85139d18eb939aa7279c160bab70484
+commit 60e7b223fd101b039b11b571528d8c5cfc0999c6
Author: Francois Romieu <[email protected]>
Date: Tue May 3 16:38:29 2011 +0200
r8169: jumbo fixes.
+ commit d58d46b5d85139d18eb939aa7279c160bab70484 upstream.
+
- fix features : jumbo frames and checksumming can not be used at the
same time.
@@ -17,11 +19,11 @@ Date: Tue May 3 16:38:29 2011 +0200
Signed-off-by: Francois Romieu <[email protected]>
-diff --git a/drivers/net/ethernet/realtek/r8169.c
b/drivers/net/ethernet/realtek/r8169.c
-index 30bba23..2ce6070 100644
---- a/drivers/net/ethernet/realtek/r8169.c
-+++ b/drivers/net/ethernet/realtek/r8169.c
-@@ -145,88 +145,110 @@ enum rtl_tx_desc_version {
+diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
+index 786334e..0d34b38 100644
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -140,82 +140,101 @@ enum rtl_tx_desc_version {
RTL_TD_1 = 1,
};
@@ -152,25 +154,13 @@ index 30bba23..2ce6070 100644
+ _R("RTL8168e/8111e", RTL_TD_1, FIRMWARE_8168E_1,
+ JUMBO_9K, false),
[RTL_GIGA_MAC_VER_33] =
-- _R("RTL8168e/8111e", RTL_TD_1, FIRMWARE_8168E_2),
+- _R("RTL8168e/8111e", RTL_TD_1, FIRMWARE_8168E_2)
+ _R("RTL8168e/8111e", RTL_TD_1, FIRMWARE_8168E_2,
-+ JUMBO_9K, false),
- [RTL_GIGA_MAC_VER_34] =
-- _R("RTL8168evl/8111evl",RTL_TD_1, FIRMWARE_8168E_3),
-+ _R("RTL8168evl/8111evl",RTL_TD_1, FIRMWARE_8168E_3,
-+ JUMBO_9K, false),
- [RTL_GIGA_MAC_VER_35] =
-- _R("RTL8168f/8111f", RTL_TD_1, FIRMWARE_8168F_1),
-+ _R("RTL8168f/8111f", RTL_TD_1, FIRMWARE_8168F_1,
-+ JUMBO_9K, false),
- [RTL_GIGA_MAC_VER_36] =
-- _R("RTL8168f/8111f", RTL_TD_1, FIRMWARE_8168F_2)
-+ _R("RTL8168f/8111f", RTL_TD_1, FIRMWARE_8168F_2,
-+ JUMBO_9K, false),
++ JUMBO_9K, false)
};
#undef _R
-@@ -469,8 +491,12 @@ enum rtl_register_content {
+@@ -443,8 +462,12 @@ enum rtl_register_content {
/* Config3 register p.25 */
MagicPacket = (1 << 5), /* Wake up when receives a Magic Packet
*/
LinkUp = (1 << 4), /* Wake up when the cable connection is
re-established */
@@ -183,7 +173,7 @@ index 30bba23..2ce6070 100644
/* Config5 register p.27 */
BWF = (1 << 6), /* Accept Broadcast wakeup frame */
MWF = (1 << 5), /* Accept Multicast wakeup frame */
-@@ -679,6 +705,11 @@ struct rtl8169_private {
+@@ -653,6 +676,11 @@ struct rtl8169_private {
void (*up)(struct rtl8169_private *);
} pll_power_ops;
@@ -195,13 +185,15 @@ index 30bba23..2ce6070 100644
int (*set_speed)(struct net_device *, u8 aneg, u16 sp, u8 dpx, u32 adv);
int (*get_settings)(struct net_device *, struct ethtool_cmd *);
void (*phy_reset_enable)(struct rtl8169_private *tp);
-@@ -743,6 +774,19 @@ static void rtl8169_down(struct net_device *dev);
- static void rtl8169_rx_clear(struct rtl8169_private *tp);
- static int rtl8169_poll(struct napi_struct *napi, int budget);
+@@ -707,6 +735,21 @@ static int rtl8169_poll(struct napi_struct *napi, int
budget);
+ static const unsigned int rtl8169_rx_config =
+ (RX_FIFO_THRESH << RxCfgFIFOShift) | (RX_DMA_BURST << RxCfgDMAShift);
+static void rtl_tx_performance_tweak(struct pci_dev *pdev, u16 force)
+{
-+ int cap = pci_pcie_cap(pdev);
++ struct net_device *dev = pci_get_drvdata(pdev);
++ struct rtl8169_private *tp = netdev_priv(dev);
++ int cap = tp->pcie_cap;
+
+ if (cap) {
+ u16 ctl;
@@ -215,7 +207,7 @@ index 30bba23..2ce6070 100644
static u32 ocp_read(struct rtl8169_private *tp, u8 mask, u16 reg)
{
void __iomem *ioaddr = tp->mmio_addr;
-@@ -1511,9 +1555,15 @@ static int rtl8169_set_settings(struct net_device *dev,
struct ethtool_cmd *cmd)
+@@ -1375,9 +1418,15 @@ static int rtl8169_set_settings(struct net_device *dev,
struct ethtool_cmd *cmd)
static u32 rtl8169_fix_features(struct net_device *dev, u32 features)
{
@@ -231,7 +223,7 @@ index 30bba23..2ce6070 100644
return features;
}
-@@ -3608,8 +3658,8 @@ static void r8168_pll_power_up(struct rtl8169_private
*tp)
+@@ -3176,8 +3225,8 @@ static void r8168_pll_power_up(struct rtl8169_private
*tp)
r8168_phy_power_up(tp);
}
@@ -242,7 +234,7 @@ index 30bba23..2ce6070 100644
{
if (op)
op(tp);
-@@ -3617,12 +3667,12 @@ static void rtl_pll_power_op(struct rtl8169_private
*tp,
+@@ -3185,12 +3234,12 @@ static void rtl_pll_power_op(struct rtl8169_private
*tp,
static void rtl_pll_power_down(struct rtl8169_private *tp)
{
@@ -257,8 +249,8 @@ index 30bba23..2ce6070 100644
}
static void __devinit rtl_init_pll_power_ops(struct rtl8169_private *tp)
-@@ -3713,6 +3763,150 @@ static void rtl8169_init_ring_indexes(struct
rtl8169_private *tp)
- tp->dirty_tx = tp->dirty_rx = tp->cur_tx = tp->cur_rx = 0;
+@@ -3237,6 +3286,149 @@ static void __devinit rtl_init_pll_power_ops(struct
rtl8169_private *tp)
+ }
}
+static void rtl_hw_jumbo_enable(struct rtl8169_private *tp)
@@ -389,7 +381,6 @@ index 30bba23..2ce6070 100644
+ case RTL_GIGA_MAC_VER_31: /* Wild guess. Needs info from Realtek. */
+ case RTL_GIGA_MAC_VER_32:
+ case RTL_GIGA_MAC_VER_33:
-+ case RTL_GIGA_MAC_VER_34:
+ ops->disable = r8168e_hw_jumbo_disable;
+ ops->enable = r8168e_hw_jumbo_enable;
+ break;
@@ -408,7 +399,7 @@ index 30bba23..2ce6070 100644
static void rtl_hw_reset(struct rtl8169_private *tp)
{
void __iomem *ioaddr = tp->mmio_addr;
-@@ -3857,6 +4051,7 @@ rtl8169_init_one(struct pci_dev *pdev, const struct
pci_device_id *ent)
+@@ -3378,6 +3570,7 @@ rtl8169_init_one(struct pci_dev *pdev, const struct
pci_device_id *ent)
rtl_init_mdio_ops(tp);
rtl_init_pll_power_ops(tp);
@@ -416,7 +407,7 @@ index 30bba23..2ce6070 100644
rtl8169_print_mac_version(tp);
-@@ -3940,6 +4135,12 @@ rtl8169_init_one(struct pci_dev *pdev, const struct
pci_device_id *ent)
+@@ -3462,6 +3655,12 @@ rtl8169_init_one(struct pci_dev *pdev, const struct
pci_device_id *ent)
netif_info(tp, probe, dev, "%s at 0x%lx, %pM, XID %08x IRQ %d\n",
rtl_chip_infos[chipset].name, dev->base_addr, dev->dev_addr,
(u32)(RTL_R32(TxConfig) & 0x9cf0f8ff), dev->irq);
@@ -429,13 +420,15 @@ index 30bba23..2ce6070 100644
if (tp->mac_version == RTL_GIGA_MAC_VER_27 ||
tp->mac_version == RTL_GIGA_MAC_VER_28 ||
-@@ -4296,19 +4497,6 @@ static void rtl_hw_start_8169(struct net_device *dev)
+@@ -3786,21 +3985,6 @@ static void rtl_hw_start_8169(struct net_device *dev)
RTL_W16(IntrMask, tp->intr_event);
}
-static void rtl_tx_performance_tweak(struct pci_dev *pdev, u16 force)
-{
-- int cap = pci_pcie_cap(pdev);
+- struct net_device *dev = pci_get_drvdata(pdev);
+- struct rtl8169_private *tp = netdev_priv(dev);
+- int cap = tp->pcie_cap;
-
- if (cap) {
- u16 ctl;
@@ -449,7 +442,7 @@ index 30bba23..2ce6070 100644
static void rtl_csi_access_enable(void __iomem *ioaddr, u32 bits)
{
u32 csi;
-@@ -4936,9 +5124,17 @@ static void rtl_hw_start_8101(struct net_device *dev)
+@@ -4343,9 +4527,17 @@ static void rtl_hw_start_8101(struct net_device *dev)
static int rtl8169_change_mtu(struct net_device *dev, int new_mtu)
{
--- a 2012-09-29 11:43:16.498566828 +0200
+++ b 2012-09-29 11:43:16.492566876 +0200
@@ -1,19 +1,21 @@
-commit e03f33af79f0772156e1a1a1e36bdddf8012b2e4
+commit a16ade86059734a56adf758cd274518cca0af1c3
Author: Francois Romieu <[email protected]>
Date: Thu Aug 25 18:47:24 2011 +0200
r8169: remove erroneous processing of always set bit.
+ commit e03f33af79f0772156e1a1a1e36bdddf8012b2e4 upstream.
+
When set, RxFOVF (resp. RxBOVF) is always 1 (resp. 0).
Signed-off-by: Francois Romieu <[email protected]>
Cc: Hayes <[email protected]>
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
-index 78c1d58..dff0bf0 100644
+index fa63283..786334e 100644
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
-@@ -407,6 +407,7 @@ enum rtl_register_content {
+@@ -388,6 +388,7 @@ enum rtl_register_content {
RxOK = 0x0001,
/* RxStatusDesc */
@@ -21,15 +23,15 @@ index 78c1d58..dff0bf0 100644
RxFOVF = (1 << 23),
RxRWT = (1 << 22),
RxRES = (1 << 21),
-@@ -682,6 +683,7 @@ struct rtl8169_private {
+@@ -666,6 +667,7 @@ struct rtl8169_private {
struct mii_if_info mii;
struct rtl8169_counters counters;
u32 saved_wolopts;
+ u32 opts1_mask;
- struct rtl_fw {
const struct firmware *fw;
-@@ -3786,6 +3788,9 @@ rtl8169_init_one(struct pci_dev *pdev, const struct
pci_device_id *ent)
+ #define RTL_FIRMWARE_UNKNOWN ERR_PTR(-EAGAIN);
+@@ -3442,6 +3444,9 @@ rtl8169_init_one(struct pci_dev *pdev, const struct
pci_device_id *ent)
tp->intr_event = cfg->intr_event;
tp->napi_event = cfg->napi_event;
@@ -39,7 +41,7 @@ index 78c1d58..dff0bf0 100644
init_timer(&tp->timer);
tp->timer.data = (unsigned long) dev;
tp->timer.function = rtl8169_phy_timer;
-@@ -5324,7 +5329,7 @@ static int rtl8169_rx_interrupt(struct net_device *dev,
+@@ -4920,7 +4925,7 @@ static int rtl8169_rx_interrupt(struct net_device *dev,
u32 status;
rmb();
--- a 2012-09-29 11:43:16.511566724 +0200
+++ b 2012-09-29 11:43:16.505566772 +0200
@@ -1,19 +1,21 @@
-commit aaa89c08d9ffa3739c93d65d98b73ec2aa2e93a5
+commit 4a64dfbae6070ea40e8cf8d3c36f561ff27f854d
Author: Hayes Wang <[email protected]>
Date: Wed Jul 6 15:58:08 2011 +0800
r8169: don't enable rx when shutdown.
+ commit aaa89c08d9ffa3739c93d65d98b73ec2aa2e93a5 upstream.
+
Only 8111b needs to enable rx when shutdowning with WoL.
Signed-off-by: Hayes Wang <[email protected]>
Acked-by: Francois Romieu <[email protected]>
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
-index 1d25088..6d7f686 100644
+index 0d2387a..fa63283 100644
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
-@@ -5729,8 +5729,11 @@ static void rtl_shutdown(struct pci_dev *pdev)
+@@ -5391,8 +5391,11 @@ static void rtl_shutdown(struct pci_dev *pdev)
spin_unlock_irq(&tp->lock);
if (system_state == SYSTEM_POWER_OFF) {
--- a 2012-09-29 11:43:16.525566611 +0200
+++ b 2012-09-29 11:43:16.518566667 +0200
@@ -1,9 +1,11 @@
-commit d4ed95d796e5126bba51466dc07e287cebc8bd19
+commit 07161b3e0391330a865320a7d9d885dc9be3d980
Author: Hayes Wang <[email protected]>
Date: Wed Jul 6 15:58:07 2011 +0800
r8169: fix wake on lan setting for non-8111E.
+ commit d4ed95d796e5126bba51466dc07e287cebc8bd19 upstream.
+
Only 8111E needs enable RxConfig bit 0 ~ 3 when suspending or
shutdowning for wake on lan.
@@ -11,10 +13,10 @@ Date: Wed Jul 6 15:58:07 2011 +0800
Acked-by: Francois Romieu <[email protected]>
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
-index ecfaf56..1d25088 100644
+index 5f838ef..0d2387a 100644
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
-@@ -3393,8 +3393,10 @@ static void r8168_pll_power_down(struct rtl8169_private
*tp)
+@@ -3126,8 +3126,10 @@ static void r8168_pll_power_down(struct rtl8169_private
*tp)
rtl_writephy(tp, 0x1f, 0x0000);
rtl_writephy(tp, MII_BMCR, 0x0000);
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html