]> git.baikalelectronics.ru Git - kernel.git/commit
r8169: set TxConfig register after TX / RX is enabled, just like RxConfig
authorMaciej S. Szmigiero <mail@maciej.szmigiero.name>
Fri, 7 Sep 2018 18:15:22 +0000 (20:15 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 7 Sep 2018 21:52:23 +0000 (14:52 -0700)
commit31b1737b7b5619cfcc09fff963a29af4670da50b
tree93947ef93bf1cd5c538829f3e9214e4fd9930e85
parentcbd97f362ac1424fb954bc6c1e3f04534bc6cb22
r8169: set TxConfig register after TX / RX is enabled, just like RxConfig

Commit a5343ff27ec3 ("r8169: simplify rtl_hw_start_8169") changed order of
two register writes:
1) Caused RxConfig to be written before TX / RX is enabled,
2) Caused TxConfig to be written before TX / RX is enabled.

At least on XIDs 10000000 ("RTL8169sb/8110sb") and
18000000 ("RTL8169sc/8110sc") such writes are ignored by the chip, leaving
values in these registers intact.

Change 1) was reverted by
commit 88877f04e82dbf ("r8169: set RxConfig after tx/rx is enabled for RTL8169sb/8110sb devices"),
however change 2) wasn't.

In practice, this caused TxConfig's "InterFrameGap time" and "Max DMA Burst
Size per Tx DMA Burst" bits to be zero dramatically reducing TX performance
(in my tests it dropped from around 500Mbps to around 50Mbps).

This patch fixes the issue by moving TxConfig register write a bit later in
the code so it happens after TX / RX is already enabled.

Fixes: 88877f04e82dbf ("r8169: set RxConfig after tx/rx is enabled for RTL8169sb/8110sb devices")
Signed-off-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/realtek/r8169.c