lkml.org 
[lkml]   [2018]   [Oct]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.18 15/33] r8169: Enable MSI-X on RTL8106e
    Date
    From: Jian-Hong Pan <jian-hong@endlessm.com>

    [ Upstream commit d49c88d7677ba737e9d2759a87db0402d5ab2607 ]

    Originally, we have an issue where r8169 MSI-X interrupt is broken after
    S3 suspend/resume on RTL8106e of ASUS X441UAR.

    02:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd.
    RTL8101/2/6E PCI Express Fast/Gigabit Ethernet controller [10ec:8136]
    (rev 07)
    Subsystem: ASUSTeK Computer Inc. RTL810xE PCI Express Fast
    Ethernet controller [1043:200f]
    Flags: bus master, fast devsel, latency 0, IRQ 16
    I/O ports at e000 [size=256]
    Memory at ef100000 (64-bit, non-prefetchable) [size=4K]
    Memory at e0000000 (64-bit, prefetchable) [size=16K]
    Capabilities: [40] Power Management version 3
    Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
    Capabilities: [70] Express Endpoint, MSI 01
    Capabilities: [b0] MSI-X: Enable+ Count=4 Masked-
    Capabilities: [d0] Vital Product Data
    Capabilities: [100] Advanced Error Reporting
    Capabilities: [140] Virtual Channel
    Capabilities: [160] Device Serial Number 01-00-00-00-36-4c-e0-00
    Capabilities: [170] Latency Tolerance Reporting
    Kernel driver in use: r8169
    Kernel modules: r8169

    We found the all of the values in PCI BAR=4 of the ethernet adapter
    become 0xFF after system resumes. That breaks the MSI-X interrupt.
    Therefore, we can only fall back to MSI interrupt to fix the issue at
    that time.

    However, there is a commit which resolves the drivers getting nothing in
    PCI BAR=4 after system resumes. It is 04cb3ae895d7 "PCI: Reprogram
    bridge prefetch registers on resume" by Daniel Drake.

    After apply the patch, the ethernet adapter works fine before suspend
    and after resume. So, we can revert the workaround after the commit
    "PCI: Reprogram bridge prefetch registers on resume" is merged into main
    tree.

    This patch reverts commit 7bb05b85bc2d1a1b647b91424b2ed4a18e6ecd81
    "r8169: don't use MSI-X on RTL8106e".

    Buglink: https://bugzilla.kernel.org/show_bug.cgi?id=201181
    Fixes: 7bb05b85bc2d ("r8169: don't use MSI-X on RTL8106e")
    Signed-off-by: Jian-Hong Pan <jian-hong@endlessm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/realtek/r8169.c | 9 +++------
    1 file changed, 3 insertions(+), 6 deletions(-)

    diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
    index 627c5cd8f786..36422f783fe7 100644
    --- a/drivers/net/ethernet/realtek/r8169.c
    +++ b/drivers/net/ethernet/realtek/r8169.c
    @@ -7541,20 +7541,17 @@ static int rtl_alloc_irq(struct rtl8169_private *tp)
    {
    unsigned int flags;

    - switch (tp->mac_version) {
    - case RTL_GIGA_MAC_VER_01 ... RTL_GIGA_MAC_VER_06:
    + if (tp->mac_version <= 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);
    flags = PCI_IRQ_LEGACY;
    - break;
    - case RTL_GIGA_MAC_VER_39 ... RTL_GIGA_MAC_VER_40:
    + } else if (tp->mac_version == RTL_GIGA_MAC_VER_40) {
    /* This version was reported to have issues with resume
    * from suspend when using MSI-X
    */
    flags = PCI_IRQ_LEGACY | PCI_IRQ_MSI;
    - break;
    - default:
    + } else {
    flags = PCI_IRQ_ALL_TYPES;
    }

    --
    2.17.1
    \
     
     \ /
      Last update: 2018-10-30 14:34    [W:4.222 / U:0.256 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site