lkml.org 
[lkml]   [2018]   [Sep]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.18 028/197] r8169: set RxConfig after tx/rx is enabled for RTL8169sb/8110sb devices
    Date
    4.18-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Azat Khuzhin <a3at.mail@gmail.com>

    [ Upstream commit 05212ba8132b42047ab5d63d759c6f9c28e7eab5 ]

    I have two Ethernet adapters:
    r8169 0000:03:01.0 eth0: RTL8169sb/8110sb, 00:14:d1:14:2d:49, XID 10000000, IRQ 18
    r8169 0000:01:00.0 eth0: RTL8168e/8111e, 64:66:b3:11:14:5d, XID 2c200000, IRQ 30
    And after upgrading from linux 4.15 [1] to linux 4.18+ [2] RTL8169sb failed to
    receive any packets. tcpdump shows a lot of checksum mismatch.

    [1]: a0f79386a4968b4925da6db2d1daffd0605a4402
    [2]: 0519359784328bfa92bf0931bf0cff3b58c16932 (4.19 merge window opened)

    I started bisecting and the found that [3] breaks it. According to [4]:
    "For 8110S, 8110SB, and 8110SC series, the initial value of RxConfig
    needs to be set after the tx/rx is enabled."
    So I moved rtl_init_rxcfg() after enabling tx/rs and now my adapter works
    (RTL8168e works too).

    [3]: 3559d81e76bfe3803e89f2e04cf6ef7ab4f3aace
    [4]: e542a2269f232d61270ceddd42b73a4348dee2bb ("r8169: adjust the RxConfig
    settings.")

    Also drop "rx" from rtl_set_rx_tx_config_registers(), since it does nothing
    with it already.

    Fixes: 3559d81e76bfe3803e89f2e04cf6ef7ab4f3aace ("r8169: simplify
    rtl_hw_start_8169")

    Cc: Heiner Kallweit <hkallweit1@gmail.com>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: netdev@vger.kernel.org
    Cc: Realtek linux nic maintainers <nic_swsd@realtek.com>
    Signed-off-by: Azat Khuzhin <a3at.mail@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/realtek/r8169.c | 6 ++++--
    1 file changed, 4 insertions(+), 2 deletions(-)

    --- a/drivers/net/ethernet/realtek/r8169.c
    +++ b/drivers/net/ethernet/realtek/r8169.c
    @@ -5039,7 +5039,7 @@ static void rtl8169_hw_reset(struct rtl8
    rtl_hw_reset(tp);
    }

    -static void rtl_set_rx_tx_config_registers(struct rtl8169_private *tp)
    +static void rtl_set_tx_config_registers(struct rtl8169_private *tp)
    {
    /* Set DMA burst size and Interframe Gap Time */
    RTL_W32(tp, TxConfig, (TX_DMA_BURST << TxDMAShift) |
    @@ -5150,12 +5150,14 @@ static void rtl_hw_start(struct rtl8169

    rtl_set_rx_max_size(tp);
    rtl_set_rx_tx_desc_registers(tp);
    - rtl_set_rx_tx_config_registers(tp);
    + rtl_set_tx_config_registers(tp);
    RTL_W8(tp, Cfg9346, Cfg9346_Lock);

    /* Initially a 10 us delay. Turned it into a PCI commit. - FR */
    RTL_R8(tp, IntrMask);
    RTL_W8(tp, ChipCmd, CmdTxEnb | CmdRxEnb);
    + rtl_init_rxcfg(tp);
    +
    rtl_set_rx_mode(tp->dev);
    /* no early-rx interrupts */
    RTL_W16(tp, MultiIntr, RTL_R16(tp, MultiIntr) & 0xf000);

    \
     
     \ /
      Last update: 2018-09-13 16:11    [W:4.141 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site