mirror of
https://github.com/Ysurac/openmptcprouter.git
synced 2025-02-15 04:42:02 +00:00
55 lines
1.9 KiB
Diff
55 lines
1.9 KiB
Diff
From 473430ed61174498db9fcac8bbfee122657d3933 Mon Sep 17 00:00:00 2001
|
|
From: Heiner Kallweit <hkallweit1@gmail.com>
|
|
Date: Sat, 27 Jul 2019 12:45:10 +0200
|
|
Subject: [PATCH 805/826] r8169: don't use MSI before RTL8168d
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
[ Upstream commit 003bd5b4a7b4a94b501e3a1e2e7c9df6b2a94ed4 ]
|
|
|
|
It was reported that after resuming from suspend network fails with
|
|
error "do_IRQ: 3.38 No irq handler for vector", see [0]. Enabling WoL
|
|
can work around the issue, but the only actual fix is to disable MSI.
|
|
So let's mimic the behavior of the vendor driver and disable MSI on
|
|
all chip versions before RTL8168d.
|
|
|
|
[0] https://bugzilla.kernel.org/show_bug.cgi?id=204079
|
|
|
|
Fixes: 6c6aa15fdea5 ("r8169: improve interrupt handling")
|
|
Reported-by: Dušan Dragić <dragic.dusan@gmail.com>
|
|
Tested-by: Dušan Dragić <dragic.dusan@gmail.com>
|
|
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
---
|
|
drivers/net/ethernet/realtek/r8169.c | 9 +++++++--
|
|
1 file changed, 7 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
|
|
index a6992c4c7313..0c8b7146637e 100644
|
|
--- a/drivers/net/ethernet/realtek/r8169.c
|
|
+++ b/drivers/net/ethernet/realtek/r8169.c
|
|
@@ -7239,13 +7239,18 @@ static int rtl_alloc_irq(struct rtl8169_private *tp)
|
|
{
|
|
unsigned int flags;
|
|
|
|
- if (tp->mac_version <= RTL_GIGA_MAC_VER_06) {
|
|
+ switch (tp->mac_version) {
|
|
+ case RTL_GIGA_MAC_VER_02 ... RTL_GIGA_MAC_VER_06:
|
|
RTL_W8(tp, Cfg9346, Cfg9346_Unlock);
|
|
RTL_W8(tp, Config2, RTL_R8(tp, Config2) & ~MSIEnable);
|
|
RTL_W8(tp, Cfg9346, Cfg9346_Lock);
|
|
+ /* fall through */
|
|
+ case RTL_GIGA_MAC_VER_07 ... RTL_GIGA_MAC_VER_24:
|
|
flags = PCI_IRQ_LEGACY;
|
|
- } else {
|
|
+ break;
|
|
+ default:
|
|
flags = PCI_IRQ_ALL_TYPES;
|
|
+ break;
|
|
}
|
|
|
|
return pci_alloc_irq_vectors(tp->pci_dev, 1, 1, flags);
|
|
--
|
|
2.22.0
|
|
|