]> git.baikalelectronics.ru Git - kernel.git/commit
r8169: set RxConfig after tx/rx is enabled for RTL8169sb/8110sb devices
authorAzat Khuzhin <a3at.mail@gmail.com>
Sun, 26 Aug 2018 14:03:09 +0000 (17:03 +0300)
committerDavid S. Miller <davem@davemloft.net>
Thu, 30 Aug 2018 01:06:27 +0000 (18:06 -0700)
commit88877f04e82dbfdb2c2e937ecde16c7564ada6a0
tree38b0e8f84cc81bf330da9bd4b2c431514f488411
parent630ae32a1db0daa8753833cbdfa8639121b43df5
r8169: set RxConfig after tx/rx is enabled for RTL8169sb/8110sb devices

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]: a2e4e9932b92118d405a2179a7ef31300c6df4ef
  [2]: f7fd9da3b31bf8e05898f151609d0c16f09ac4d4 (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]: a5343ff27ec35bfa990641600cf9a695a1e009fc
  [4]: 8ae109206541c5b598a42fbad71f1d5e546eccb9 ("r8169: adjust the RxConfig
settings.")

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

Fixes: a5343ff27ec35bfa990641600cf9a695a1e009fc ("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>
drivers/net/ethernet/realtek/r8169.c