Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

r8169: fix packet truncation after S4 resume on RTL8168H/RTL8111H

After resume from S4 (hibernate), RTL8168H/RTL8111H truncates incoming
packets. Packet captures show messages like "IP truncated-ip - 146 bytes
missing!".

The issue is caused by RxConfig not being properly re-initialized after
resume. Re-initializing the RxConfig register before the chip
re-initialization sequence avoids the truncation and restores correct
packet reception.

This follows the same pattern as commit ef9da46ddef0 ("r8169: fix data
corruption issue on RTL8402").

Fixes: 6e1d0b898818 ("r8169:add support for RTL8168H and RTL8107E")
Signed-off-by: Linmao Li <lilinmao@kylinos.cn>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Heiner Kallweit <hkallweit1@gmail.com>
Link: https://patch.msgid.link/20251009122549.3955845-1-lilinmao@kylinos.cn
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Linmao Li and committed by
Jakub Kicinski
70f92ab9 25718fdc

+3 -2
+3 -2
drivers/net/ethernet/realtek/r8169_main.c
··· 4994 4994 if (!device_may_wakeup(tp_to_dev(tp))) 4995 4995 clk_prepare_enable(tp->clk); 4996 4996 4997 - /* Reportedly at least Asus X453MA truncates packets otherwise */ 4998 - if (tp->mac_version == RTL_GIGA_MAC_VER_37) 4997 + /* Some chip versions may truncate packets without this initialization */ 4998 + if (tp->mac_version == RTL_GIGA_MAC_VER_37 || 4999 + tp->mac_version == RTL_GIGA_MAC_VER_46) 4999 5000 rtl_init_rxcfg(tp); 5000 5001 5001 5002 return rtl8169_runtime_resume(device);