Ethernet Link capped at 100Mbps on Fedora Workstation 38, but not on Microsoft Windows

Hello! I encountered a small problem with my fresh and fully up-to-date Fedora Workstation installation: my Ethernet network link is capped at 100Mbps while it should negotiate at 1000Mbps.
I am dual-booting Microsoft Windows 11 (fully up-to-date) and Fedora Workstation 38 on the same machine. The Ethernet link speed negotiates correctly on Microsoft Windows 11. My computer is connected to a TP-LInk “sg105e” switch via some CAT6 cable. My laptop, also running Fedora Workstation 38 negotiates to 1000Mbps with the same cable.

Here are some more details:

MBD: Gigabyte X570S AORUS ELITE AX (integrated Ethernet controller)

lspci -vvvv output
05:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
	Subsystem: Gigabyte Technology Co., Ltd Device e000
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 24
	IOMMU group: 22
	Region 0: I/O ports at f000 [size=256]
	Region 2: Memory at fc600000 (64-bit, non-prefetchable) [size=64K]
	Region 4: Memory at fc610000 (64-bit, non-prefetchable) [size=16K]
	Capabilities: [40] Power Management version 3
		Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=375mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
		Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [50] MSI: Enable- Count=1/1 Maskable+ 64bit+
		Address: 0000000000000000  Data: 0000
		Masking: 00000000  Pending: 00000000
	Capabilities: [70] Express (v2) Endpoint, MSI 01
		DevCap:	MaxPayload 256 bytes, PhantFunc 0, Latency L0s <512ns, L1 <64us
			ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset- SlotPowerLimit 0W
		DevCtl:	CorrErr+ NonFatalErr+ FatalErr+ UnsupReq+
			RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop-
			MaxPayload 128 bytes, MaxReadReq 4096 bytes
		DevSta:	CorrErr- NonFatalErr- FatalErr- UnsupReq- AuxPwr+ TransPend-
		LnkCap:	Port #0, Speed 5GT/s, Width x1, ASPM L0s L1, Exit Latency L0s unlimited, L1 <64us
			ClockPM+ Surprise- LLActRep- BwNot- ASPMOptComp+
		LnkCtl:	ASPM Disabled; RCB 64 bytes, Disabled- CommClk+
			ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
		LnkSta:	Speed 5GT/s, Width x1
			TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
		DevCap2: Completion Timeout: Range ABCD, TimeoutDis+ NROPrPrP- LTR+
			 10BitTagComp- 10BitTagReq- OBFF Via message/WAKE#, ExtFmt- EETLPPrefix-
			 EmergencyPowerReduction Not Supported, EmergencyPowerReductionInit-
			 FRS- TPHComp+ ExtTPHComp-
			 AtomicOpsCap: 32bit- 64bit- 128bitCAS-
		DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- LTR+ 10BitTagReq- OBFF Disabled,
			 AtomicOpsCtl: ReqEn-
		LnkCap2: Supported Link Speeds: 2.5-5GT/s, Crosslink- Retimer- 2Retimers- DRS-
		LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-
			 Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
			 Compliance Preset/De-emphasis: -6dB de-emphasis, 0dB preshoot
		LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete- EqualizationPhase1-
			 EqualizationPhase2- EqualizationPhase3- LinkEqualizationRequest-
			 Retimer- 2Retimers- CrosslinkRes: unsupported
	Capabilities: [b0] MSI-X: Enable+ Count=32 Masked-
		Vector table: BAR=4 offset=00000000
		PBA: BAR=4 offset=00000800
	Capabilities: [d0] Vital Product Data
		Not readable
	Capabilities: [100 v2] Advanced Error Reporting
		UESta:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UEMsk:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UESvrt:	DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
		CESta:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr-
		CEMsk:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
		AERCap:	First Error Pointer: 00, ECRCGenCap+ ECRCGenEn- ECRCChkCap+ ECRCChkEn-
			MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-
		HeaderLog: 00000000 00000000 00000000 00000000
	Capabilities: [148 v1] Virtual Channel
		Caps:	LPEVC=0 RefClk=100ns PATEntryBits=1
		Arb:	Fixed- WRR32- WRR64- WRR128-
		Ctrl:	ArbSelect=Fixed
		Status:	InProgress-
		VC0:	Caps:	PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
			Arb:	Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
			Ctrl:	Enable+ ID=0 ArbSelect=Fixed TC/VC=01
			Status:	NegoPending- InProgress-
	Capabilities: [168 v1] Device Serial Number 23-d1-40-3c-56-74-00-00
	Capabilities: [178 v1] Transaction Processing Hints
		No steering table available
	Capabilities: [204 v1] Latency Tolerance Reporting
		Max snoop latency: 1048576ns
		Max no snoop latency: 1048576ns
	Capabilities: [20c v1] L1 PM Substates
		L1SubCap: PCI-PM_L1.2+ PCI-PM_L1.1+ ASPM_L1.2+ ASPM_L1.1+ L1_PM_Substates+
			  PortCommonModeRestoreTime=150us PortTPowerOnTime=150us
		L1SubCtl1: PCI-PM_L1.2- PCI-PM_L1.1- ASPM_L1.2- ASPM_L1.1-
			   T_CommonMode=0us LTR1.2_Threshold=32768ns
		L1SubCtl2: T_PwrOn=150us
	Capabilities: [21c v1] Vendor Specific Information: ID=0002 Rev=4 Len=100 <?>
	Kernel driver in use: r8169
	Kernel modules: r8169
interesting dmesg output

[ 68.228687] ------------[ cut here ]------------
[ 68.228700] NETDEV WATCHDOG: enp5s0 (r8169): transmit queue 0 timed out 10108 ms
[ 68.228723] WARNING: CPU: 2 PID: 0 at net/sched/sch_generic.c:525 dev_watchdog+0x232/0x240
[ 68.228739] Modules linked in: ntfs3 exfat uinput rfcomm snd_seq_dummy snd_hrtimer nf_conntrack_netbios_ns nf_conntrack_broadcast nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 nft_reject nft_ct nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 ip_set nf_tables nfnetlink qrtr bnep sunrpc binfmt_misc vfat fat snd_hda_codec_realtek snd_hda_codec_generic ledtrig_audio snd_hda_codec_hdmi mt7921e snd_hda_intel snd_intel_dspcfg mt7921_common snd_intel_sdw_acpi snd_hda_codec mt76_connac_lib intel_rapl_msr intel_rapl_common snd_hda_core edac_mce_amd mt76 btusb btrtl snd_hwdep snd_seq btbcm kvm_amd snd_seq_device btintel mac80211 btmtk snd_pcm kvm libarc4 bluetooth snd_timer irqbypass cfg80211 snd gigabyte_wmi soundcore rapl wmi_bmof pcspkr acpi_cpufreq i2c_piix4 k10temp rfkill joydev loop zram amdgpu hid_logitech_hidpp i2c_algo_bit drm_ttm_helper ttm video drm_suballoc_helper crct10dif_pclmul crc32_pclmul crc32c_intel iommu_v2 polyval_clmulni polyval_generic
[ 68.229009] drm_buddy gpu_sched uas ccp ghash_clmulni_intel drm_display_helper sha512_ssse3 nvme sp5100_tco usb_storage hid_logitech_dj r8169 cec nvme_core nvme_common wmi ip6_tables ip_tables fuse
[ 68.229070] CPU: 2 PID: 0 Comm: swapper/2 Not tainted 6.4.10-200.fc38.x86_64 #1
[ 68.229076] Hardware name: Gigabyte Technology Co., Ltd. X570S AORUS ELITE AX/X570S AORUS ELITE AX, BIOS F6a 02/08/2023
[ 68.229080] RIP: 0010:dev_watchdog+0x232/0x240
[ 68.229087] Code: ff ff ff 48 89 df c6 05 2d 79 53 01 01 e8 86 19 fa ff 45 89 f8 44 89 f1 48 89 de 48 89 c2 48 c7 c7 88 73 99 9d e8 6e 65 37 ff <0f> 0b e9 2d ff ff ff 0f 1f 80 00 00 00 00 90 90 90 90 90 90 90 90
[ 68.229092] RSP: 0018:ffffa631802f4e78 EFLAGS: 00010292
[ 68.229099] RAX: 0000000000000000 RBX: ffff99554dcac000 RCX: 0000000000000000
[ 68.229104] RDX: ffff995c5eaae580 RSI: ffff995c5eaa1540 RDI: 0000000000000300
[ 68.229109] RBP: ffff99554dcac4c8 R08: 0000000000000000 R09: ffffa631802f4d08
[ 68.229113] R10: 0000000000000003 R11: ffffffff9e146508 R12: ffff9955419b2c00
[ 68.229117] R13: ffff99554dcac41c R14: 0000000000000000 R15: 000000000000277c
[ 68.229122] FS: 0000000000000000(0000) GS:ffff995c5ea80000(0000) knlGS:0000000000000000
[ 68.229127] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 68.229132] CR2: 00007f69c93fc2f8 CR3: 00000001337a4000 CR4: 00000000003506e0
[ 68.229136] Call Trace:
[ 68.229141]
[ 68.229145] ? dev_watchdog+0x232/0x240
[ 68.229151] ? __warn+0x81/0x130
[ 68.229162] ? dev_watchdog+0x232/0x240
[ 68.229169] ? report_bug+0x171/0x1a0
[ 68.229176] ? native_apic_mem_read+0xc/0x20
[ 68.229185] ? handle_bug+0x3c/0x80
[ 68.229192] ? exc_invalid_op+0x17/0x70
[ 68.229197] ? asm_exc_invalid_op+0x1a/0x20
[ 68.229210] ? dev_watchdog+0x232/0x240
[ 68.229217] ? dev_watchdog+0x232/0x240
[ 68.229224] ? __pfx_dev_watchdog+0x10/0x10
[ 68.229230] call_timer_fn+0x27/0x130
[ 68.229239] ? __pfx_dev_watchdog+0x10/0x10
[ 68.229245] __run_timers+0x222/0x2c0
[ 68.229258] run_timer_softirq+0x1d/0x40
[ 68.229265] __do_softirq+0xd4/0x2c8
[ 68.229275] __irq_exit_rcu+0xbe/0xf0
[ 68.229282] sysvec_apic_timer_interrupt+0x72/0x90
[ 68.229290]
[ 68.229293]
[ 68.229298] asm_sysvec_apic_timer_interrupt+0x1a/0x20
[ 68.229305] RIP: 0010:cpuidle_enter_state+0xcc/0x440
[ 68.229311] Code: 8a 57 1e ff e8 b5 f3 ff ff 8b 53 04 49 89 c5 0f 1f 44 00 00 31 ff e8 13 5c 1d ff 45 84 ff 0f 85 56 02 00 00 fb 0f 1f 44 00 00 <45> 85 f6 0f 88 85 01 00 00 49 63 d6 48 8d 04 52 48 8d 04 82 49 8d
[ 68.229316] RSP: 0018:ffffa6318019fe90 EFLAGS: 00000246
[ 68.229323] RAX: ffff995c5eab3e00 RBX: ffff99554bc7c000 RCX: 0000000000000000
[ 68.229328] RDX: 0000000000000002 RSI: fffffffbfee6cb9e RDI: 0000000000000000
[ 68.229332] RBP: 0000000000000002 R08: 0000000000000002 R09: 0000000022a8dbdb
[ 68.229336] R10: ffff995c5eab27c4 R11: 00000000000137e2 R12: ffffffff9e245580
[ 68.229340] R13: 0000000fe2bee1a1 R14: 0000000000000002 R15: 0000000000000000
[ 68.229353] cpuidle_enter+0x2d/0x40
[ 68.229362] do_idle+0x20d/0x270
[ 68.229372] cpu_startup_entry+0x1d/0x20
[ 68.229378] start_secondary+0x12e/0x150
[ 68.229384] secondary_startup_64_no_verify+0x10b/0x10b
[ 68.229399]
[ 68.229402] —[ end trace 0000000000000000 ]—
[ 68.229430] r8169 0000:05:00.0 enp5s0: ASPM disabled on Tx timeout
[ 142.735041] r8169 0000:05:00.0 enp5s0: Link is Down
[ 158.798666] RTL8226B_RTL8221B 2.5Gbps PHY r8169-0-500:00: Downshift occurred from negotiated speed 1Gbps to actual speed 100Mbps, check cabling!
[ 158.798679] r8169 0000:05:00.0 enp5s0: Link is Up - 100Mbps/Full (downshifted) - flow control off

ethtool enp5s0 output
Settings for enp5s0:
	Supported ports: [ TP	 MII ]
	Supported link modes:   10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	                        1000baseT/Full
	                        2500baseT/Full
	Supported pause frame use: Symmetric Receive-only
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	                        1000baseT/Full
	                        2500baseT/Full
	Advertised pause frame use: Symmetric Receive-only
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Link partner advertised link modes:  10baseT/Half 10baseT/Full
	                                     100baseT/Half 100baseT/Full
	                                     1000baseT/Full
	Link partner advertised pause frame use: No
	Link partner advertised auto-negotiation: Yes
	Link partner advertised FEC modes: Not reported
	Speed: 100Mb/s
	Duplex: Full
	Auto-negotiation: on
	master-slave cfg: preferred slave
	master-slave status: slave
	Port: Twisted Pair
	PHYAD: 0
	Transceiver: external
	MDI-X: Unknown
	Supports Wake-on: pumbg
	Wake-on: d
	Link detected: yes

Note how dmesg asks to check cabling while on other devices, even running Fedora Workstation 38, the same cable works perfectly.
My previous operating system Fedora Silverblue 38, running on the exact same hardware and cabling, negotiated at the correct speed, did two fresh installations of Fedora Workstation 38 and still no luck.

1 Like

One network item of note.
For quite some time there have occasionally been issues with various PC adapters and switches where if both devices are in auto-negotiate for speed it seems the connection may not be made at the highest speed or may be unstable. In the past this has been solved by setting the speed as fixed at one end of the connection. When that was done the connection was then successful at the higher speed and was stable.

Maybe you could try the same by setting the connection either at the switch or at your PC to 1Gbps and see if that makes a difference.

Hey Jeff,

Thanks for the reply.
I tried setting a fixed link speed with the following command:

sudo ethtool -s enp5s0 autoneg off speed 1000 duplex full

(I never used ethtool before so I may have made a mistake?)
But the link doesn’t come up after that. Switching autoneg on again makes the link come up again.
Also tried yesterday to change from auto to 1000Mbps via the switch web management interface, resulted in the connection being severed.
The “downshifted” log suggests that there is a problem when trying to negotiate 1000Mbps with the switch, then why would it work perfectly on Microsoft Windows 11 on the same machine or even Fedora on my laptop with the same cable?

[ 158.798666] RTL8226B_RTL8221B 2.5Gbps PHY r8169-0-500:00: Downshift occurred from negotiated speed 1Gbps to actual speed 100Mbps, check cabling!
[ 158.798679] r8169 0000:05:00.0 enp5s0: Link is Up - 100Mbps/Full (downshifted) - flow control off

That ethernet works as expected in Windows says the hardware is probably OK, so points to the linux driver. You have an RTL8125 2.5GbE PCI Controller (rev 05) using the r8169 driver, but I don’t see the full vendor and device ID’s.

Quoting Jeff Geerling:

if you’re not seeing the performance you expect, see if the vendor’s driver is better than what’s in the kernel tree.

Unforunatley, the RealTeK driver page says:

2.5G Ethernet LINUX driver r8125 for kernel up to 5.19

Hello George,

Thanks for your reply!

What’s really weird is that Fedora Silverblue 38 (based on Fedora Workstation 38 packages I believe) worked fine for quite some long time. I might try to reinstall back and see if that still works OOTB.

The problem seems to have happened when I unplugged then replugged the CAT6 cable that goes from my motherboard’s Ethernet port to the socket in the wall then the switch just for the sake of “cable management” before installing Fedora Workstation 38 on my machine.

I still wonder if there’s not a problem with the cable, the switch or the router themselves as I’ve already struggled quite a bit with some 100Mbps capping before waking up someday and finding out that it was renegotating at 1000Mbps. The only things I can differentiate from my Fedora and Microsoft Windows installations are how the Ethernet controller is handled (the driver) and the computer’s hostname on the network. Already tried to set the same hostname in both Windows and Fedora with no luck.

Check for lint/corrosion in connectors. I worked in an oceanographic institute where the salt air causes corrosion on worn connectors. You can now purchase “contact enhancer” at auto parts stores – vital stuff for modern cars in snow zones or near an ocean.
At work we had a batch of poorly crimped cables. Looking at the end of the connector you could see that the pins were not all at the same height. They passed initial testing (with proper cable testing gear) but after a year so there were so many problems that they were all replaced. I keep a couple very long cables so when there is a problem at one jack I can try connectiing to a different jack. A USB network dongle is also helpful when you don’t have access to high-end test gear.

If you share a network with a bunch of Windows users: I used to run workshops using linux at sites that had Microsoft servers and PC’s. Windows systems always got better download speeds by abusing “quality of service”. I don’t know if this is still going on.

I would understand Microsoft Windows abusing that, but my laptop, using the same exact cable running fine at 1000Mbps?

Edit: It looks like it doesn’t work on my laptop anymore. Could it be because of this commit: r8169: disable ASPM during NAPI poll · torvalds/linux@e1ed3e4 · GitHub that is later reverted Revert "r8169: disable ASPM during NAPI poll" · torvalds/linux@e31a9fe · GitHub in kernel v6.5-rc3?

(I’m running kernel 6.4.10-200.fc38.x86_64 so the revert is not applied for me yet.)

Edit 2: I upgraded to Fedora Branched (39) with kernel > 6.5 and still not working so probably just a coincidence…

The “patch for r8169” mentions “Several chip versions have problems with ASPM, what may result in
rx_missed errors or tx timeouts.”. I still don’t see your chip ID, and you don’t mention the version of the Fedora Branched kernel (the patch was added and then reverted).

Ubuntu RealTek WIFI will take you through getting the device ID but doesn’t mention RTL8125. Note that there are often multiple device ID’s for the same chipset “number”. You can see that even for more recent devices, RealTeK support is uneven.

In most cases I have dealt with the full chipset ID can be gotten with lspci -nnk unless it is a usb dongle. The ID will consist of 2 parts, both appearing something like

05:00.0 Network controller [0280]: Intel Corporation Wi-Fi 6 AX210/AX211/AX411 160MHz [8086:2725] (rev 1a)
	Subsystem: Intel Corporation Wi-Fi 6 AX210 160MHz [8086:0024]
	Kernel driver in use: iwlwifi
	Kernel modules: iwlwifi

as seen on my machine and is the 2 parts appearing there as [8086:2725] and [8086:0024] so the full ID in my case is “8086:2725:8086:0024”