Skip to content

atlantic/AQC113 autoneg downshifts to 10/100Mb/s until ethtool -r #516

@lumenradley

Description

@lumenradley

Human TLDR

Using Asahi NixOS, connection stuck at super slow, until LLM figure out manual renegotiations and added system service on boot. idk why. all below is written by gpt55:

Summary

On an Apple Silicon Mac running NixOS Asahi/nixos-apple-silicon, the onboard Aquantia/Atlantic AQC113 (atlantic) sometimes boots or renegotiates at 10Mb/s or 100Mb/s instead of 1000Mb/s. Manual renegotiation with sudo ethtool -r end0 immediately fixes the link to 1000Mb/s without reboot.

This looks like an initial PHY/autoneg initialization or timing issue specific to Linux/Asahi on Apple AQC113, possibly interacting with the Linksys Velop switch PHY. The same hardware/cable/router port negotiates 1000baseT under macOS, and Linux can also negotiate 1000baseT after ethtool -r.

I searched existing issues and found #483, but that seems like a high-load RX hang rather than initial autoneg downshift/flapping.

Host/context

  • Machine: Apple Silicon Mac running NixOS Asahi/nixos-apple-silicon
  • Kernel: Linux m1n1 6.19.14 aarch64
  • Ethernet interface: end0
  • PCI device: Aquantia Corp. AQtion AQC113 NBase-T/IEEE 802.3an Ethernet Controller [Antigua 10G] [1d6a:04c0] rev 03
  • Subsystem: Apple Inc. [106b:0223]
  • Linux driver: atlantic
  • Driver version: 6.19.14
  • Firmware version reported by ethtool: 1.4.32
  • Router: Linksys Velop AX4200 / MX42-EU, firmware 1.0.13.216602
  • Cable: Cat6; multiple Cat6 cables tried
  • macOS on same machine/same cable/same router port negotiates 1000baseT full duplex with EEE

Symptom

On Linux, Ethernet sometimes boots/renegotiates at 10Mb/s or 100Mb/s instead of 1000Mb/s. Throughput matches negotiated speed (~1 MB/s at 10Mb/s, ~10 MB/s at 100Mb/s). WiFi/Tailscale unrelated.

Kernel link-change sequence shows downshift/flapping:

atlantic 0000:03:00.0 end0: atlantic: link change old 0 new 100
atlantic 0000:03:00.0 end0: atlantic: link change old 100 new 0
atlantic 0000:03:00.0 end0: atlantic: link change old 0 new 1000
atlantic 0000:03:00.0 end0: atlantic: link change old 1000 new 0
atlantic 0000:03:00.0 end0: atlantic: link change old 0 new 100
atlantic 0000:03:00.0 end0: atlantic: link change old 100 new 0
atlantic 0000:03:00.0 end0: atlantic: link change old 0 new 10
atlantic 0000:03:00.0 end0: atlantic: link change old 10 new 0
atlantic 0000:03:00.0 end0: atlantic: link change old 0 new 1000
atlantic 0000:03:00.0 end0: atlantic: link change old 1000 new 0
atlantic 0000:03:00.0 end0: atlantic: link change old 0 new 100

Before workaround

Command:

ethtool end0

Relevant output before ethtool -r:

Supported link modes:   10baseT/Full
                        100baseT/Full
                        1000baseT/Full
                        10000baseT/Full
                        2500baseT/Full
                        5000baseT/Full
Advertised link modes:  10baseT/Full
                        100baseT/Full
                        1000baseT/Full
                        10000baseT/Full
                        2500baseT/Full
                        5000baseT/Full
Advertised auto-negotiation: Yes
Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                     100baseT/Half 100baseT/Full
Link partner advertised auto-negotiation: No
Speed: 100Mb/s
Duplex: Full
Auto-negotiation: on
Link detected: yes

EEE status on Linux before workaround:

$ ethtool --show-eee end0

EEE settings for end0:
    EEE status: disabled
    Tx LPI: disabled
    Supported EEE link modes:  1000baseT/Full
                               10000baseT/Full
    Advertised EEE link modes:  Not reported
    Link partner advertised EEE link modes:  Not reported

Driver/device info:

$ ethtool -i end0

driver: atlantic
version: 6.19.14
firmware-version: 1.4.32
bus-info: 0000:03:00.0
$ lspci -nnk

03:00.0 Ethernet controller [0200]: Aquantia Corp. AQtion AQC113 NBase-T/IEEE 802.3an Ethernet Controller [Antigua 10G] [1d6a:04c0] (rev 03)
    Subsystem: Apple Inc. Device [106b:0223]
    Kernel driver in use: atlantic
    Kernel modules: atlantic

Workaround

Manual renegotiation fixes the link immediately without reboot:

sudo ethtool -r end0
sleep 7
ethtool end0

After workaround:

Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                     100baseT/Half 100baseT/Full
                                     1000baseT/Full
Speed: 1000Mb/s
Duplex: Full
Auto-negotiation: on
Link detected: yes
/sys/class/net/end0/speed = 1000

macOS comparison

Same machine/cable/router port under macOS reports:

Hardware: Apple AQC113 / Aquantia 10G
Current link: 1000baseT <full-duplex,flow-control,energy-efficient-ethernet>
Speed: 1 Gb/s
Local supported modes: 10M, 100M, 1G, 2.5G, 5G, 10G
Max link speed: 10 Gb/s

Interpretation

Physical hardware/cable/router port can do gigabit because macOS negotiates 1000baseT on the same path, and Linux sudo ethtool -r end0 also renegotiates to 1000baseT. Failure appears to be Linux/Asahi atlantic initial PHY/autoneg initialization/timing issue on Apple AQC113, possibly interaction with Linksys Velop switch PHY. EEE is disabled under Linux before the workaround, so this is not fixed by disabling EEE alone.

If this belongs in netdev/atlantic instead of Asahi, I can forward it there; filing here first because this is Apple AQC113 hardware under Asahi Linux.

Useful repro/diagnostic commands

uname -a
sudo dmesg | grep -iE 'atlantic|aqc|macsmc'
lspci -nnk | sed -n '/Ethernet/,/^$/p'
ethtool end0
ethtool -i end0
ethtool --show-eee end0
cat /sys/class/net/end0/{operstate,carrier,speed,duplex}

Workaround command:

sudo ethtool -r end0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions