Messages in this thread Patch in this message | | | Subject | Re: R8169: Network lockups in 4.18.{8,9,10} (and 4.19 dev) | From | "Maciej S. Szmigiero" <> | Date | Thu, 11 Oct 2018 02:12:33 +0200 |
| |
On 11.10.2018 00:49, Chris Clayton wrote: >> Now, knowing the "right" value you can experiment with what rtl_init_rxcfg() >> writes (under the "default:" label for your NIC model). >> > > This might be more interesting. Through a combination of viewing the output from pr_notice() and the output from > "ethtool -d", I can see RxConfig with the following values > > During boot: 0x00028700 > Before suspend: 0x0002870e > During resume: 0x00024000 > Post resume: 0x0002870e > > As I did with 4.18.10 early on in the process, I removed the call to rtl_init_rxcfg() from rtl_hw_start() and rebuilt, > installed and rebooted. Now I see the following values: > > During boot: 0x00028700 > Before suspend: 0x0002870e > During resume: 0x00024000 > Post resume: 0x0002400e >
Now we can finally see some difference... Besides missing RX128_INT_EN (bit 15 or 0x8000) and RX_DMA_BURST (bits 8-10 or 0x700) - that rtl_init_rxcfg() would normally set so this is kind of expected - one can see that the working configuration post-resume has bit 14 (or 0x4000) set, too.
This bit is described in the driver as RX_MULTI_EN ("8111c only") and is set by rtl_init_rxcfg() for example for RTL_GIGA_MAC_VER_35.
RTL_GIGA_MAC_VER_35 is described in the driver as being in the same family as your RTL_GIGA_MAC_VER_38, so can you please try the following change: --- r8169.c +++ r8169.c @@ -4271,6 +4271,7 @@ static void rtl_init_rxcfg(struct rtl816 case RTL_GIGA_MAC_VER_18 ... RTL_GIGA_MAC_VER_24: case RTL_GIGA_MAC_VER_34: case RTL_GIGA_MAC_VER_35: + case RTL_GIGA_MAC_VER_38: RTL_W32(tp, RxConfig, RX128_INT_EN | RX_MULTI_EN | RX_DMA_BURST); break; case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_51: This will add RX_MULTI_EN also for your chip model (you need to add back the call to rtl_init_rxcfg() to rtl_hw_start(), naturally).
If this does not help then I would try another values in the above write: 1) RTL_W32(tp, RxConfig, 0x00024000); 2) RTL_W32(tp, RxConfig, 0x00004000); 3) RTL_W32(tp, RxConfig, RX_DMA_BURST); 4) RTL_W32(tp, RxConfig, RX128_INT_EN); > Chris
Maciej
| |