SGMII, 1000BASE-X, QSGMII, USXGMII: serial interfaces to PHYs & SFP
Every 1G SFP cage carries a 1.25 GBd serial lane, and that lane can speak two dialects that look identical on an oscilloscope: 1000BASE-X, the IEEE interface a fibre module expects, and SGMII, Cisco's variant that adds 10/100 Mb/s and a different auto-negotiation. Copper SFPs live on the boundary between them, and most "the copper SFP links at 1G but my 100 Mb/s camera does not" tickets are a dialect mismatch. This page covers the two gigabit dialects, their auto-negotiation, 2500BASE-X, the multi-port QSGMII, USXGMII for multigig and 10GBASE-T SFP+, and how Linux and switches choose the mode.
1000BASE-X: the native SFP interface (Clause 36/37)
| Item | Value |
|---|---|
| Rate | 1.25 GBd, 8b/10b → 1000 Mb/s payload |
| Lanes | 1 differential pair each direction (CML, AC-coupled) |
| Coding | 8b/10b with /K28.5/ commas, ordered sets /C1/ /C2/ (configuration), /I1/ /I2/ (idle) |
| Auto-negotiation | Clause 37: 16-bit config word exchanged in /C/ ordered sets — full/half duplex, pause (symmetric/asymmetric), remote fault, acknowledge. No speed field: 1000BASE-X is 1G only |
| Where | switch/NIC SerDes → SFP cage; fibre SFP (SX/LX/ZX/BiDi/CWDM) passes it straight to the laser; the PCS lives in the host |
A fibre SFP is transparent: whatever the host codes goes out as light. That is why a 1G fibre module has no "mode" — but the port does, and it must be 1000BASE-X (often shown as "SerDes" or "fiber" mode, speed nonegotiate on Cisco when the far end has no AN).
SGMII: gigabit plus 10/100 (Cisco SGMII specification v1.8)
| Item | Value |
|---|---|
| Rate | same 1.25 GBd, 8b/10b |
| 10/100 support | each data byte replicated 100× (10 Mb/s) or 10× (100 Mb/s) so the line stays at 1.25 GBd |
| Lanes | 2 pairs; optional 625 MHz DDR clock pairs (TX_CLK/RX_CLK) — most SerDes implementations run clockless |
| Auto-negotiation | SGMII control word (also carried in /C/ ordered sets, 16 bits): bit 15 link, bits 11–10 speed (10/100/1000), bit 12 duplex, bit 14 ack — sent PHY → MAC to tell the MAC what the copper side negotiated. Not compatible with Clause 37 content |
| Where | MAC ↔ copper PHY (Marvell 88E15xx, TI DP83867, Broadcom), SoC ↔ SFP cage on boards that want copper SFP support, copper 1000BASE-T SFP internals |
SGMII is a MAC–PHY interface; the "auto-negotiation" happens twice — Clause 28 on the twisted pair between PHY and link partner, then the SGMII control word reports the result to the MAC. When a host expects Clause 37 and receives an SGMII word (or vice versa), the link never completes AN; disabling AN on the port (speed nonegotiate, no negotiation auto, autoneg off) is the usual workaround — at 1G only.
Copper SFPs between the two
| Host port mode | Copper SFP behaviour | 10/100 clients |
|---|---|---|
| 1000BASE-X, AN on | module's PHY must answer Clause 37 — many do (emulate), some do not → no link until AN off | no (no speed field) |
| 1000BASE-X, AN off | link at 1G when the copper side negotiates 1G | no |
| SGMII, AN on | PHY reports 10/100/1000 via control word | yes |
| SGMII, AN off | fixed 1G | no |
Copper SFP modules based on Marvell 88E1111 default to SGMII or 1000BASE-X depending on a configuration EEPROM/strap set at manufacture; vendors sell "SGMII" and "SerDes" variants of the same module, and some can be switched through the PHY registers reachable over the module's I²C. Switch ports that list "1000BASE-T SFP supported" implement SGMII on those cages (Copper Ethernet & DAC).
100BASE-FX SFPs
A 100 Mb/s fibre SFP (100BASE-FX, 1310 nm, 2 km) needs the host to run the lane at 125 MBd with 4b/5b — a completely different PCS. Only ports that explicitly support "100M SFP" (many campus switches on selected ports, most routers; few data-centre switches) work; on others the module is detected and never links. Some hosts implement 100BASE-FX by SGMII replication with an external PHY in the module ("100M over SGMII" SFPs).
2500BASE-X
| Item | Value |
|---|---|
| Rate | 3.125 GBd, 8b/10b → 2.5 Gb/s |
| Standard | none from IEEE (de facto, 2.5 × 1000BASE-X); Linux phy-interface-type = "2500base-x" |
| AN | Clause 37 style, often disabled |
| Where | 2.5G SFP modules (2.5GBASE-T copper, 2.5G fibre), GPON/EPON ONU sticks toward the host (2.5G downstream), Wi-Fi 6 AP uplinks, some 2.5G switch SFP cages |
The IEEE equivalents for multigig are 2.5GBASE-X/5GBASE-R (802.3bz) but most silicon speaks 2500BASE-X or USXGMII.
QSGMII: four ports on one lane
| Item | Value |
|---|---|
| Rate | 5 GBd, 8b/10b; 4 SGMII channels time-multiplexed |
| Lanes | 2 pairs for four ports |
| Where | switch ASIC ↔ quad copper PHY (48-port access switches: 12 QSGMII lanes instead of 48 SGMII), some quad-port SFP cage designs via external SerDes |
| Variants | QSGMII (Cisco), also "PSGMII" (5 ports) on some Qualcomm/Realtek SoCs |
Not visible at a cage in normal designs; matters when a quad-PHY board exposes SFP combo ports whose mode is inherited from the PHY channel.
USXGMII: 10 Mb/s to 10 Gb/s on one 10G lane
| Item | Value |
|---|---|
| Rate | 10.3125 GBd, 64b/66b (10GBASE-R electrical) |
| Speeds | 10M, 100M, 1G, 2.5G, 5G, 10G by symbol replication (like SGMII scaled up) |
| Spec | Cisco USXGMII (v1.2), adopted widely; Linux usxgmii |
| Multi-port | USXGMII-M: 4 × 2.5G, 2 × 5G, 4 × 1G+… over one 10G lane (like QSGMII) |
| AN | USXGMII AN word in the 64b/66b idle, reports speed/duplex/link |
| Where | ASIC ↔ multigig PHY (2.5/5/10GBASE-T ports), 10GBASE-T SFP+ modules (internal PHY, e.g. Marvell AQR/Broadcom) |
A 10GBASE-T SFP+ module presents 10GBASE-R (SFI) to a normal SFP+ port and links at 10G; whether it can also serve 1G/2.5G/5G clients depends on the host supporting USXGMII rate adaptation on that cage — most switches do not, so the module works at 10G only, or performs the adaptation internally and reports 10G to the host while the copper side runs slower (Speed & rate).
How the host chooses the mode
| Host | Mechanism |
|---|---|
| Linux phylink/SFP | reads A0h bytes 3–10 (compliance), 12 (nominal rate), 36 (extended) and 6 bit 3 (1000BASE-T): 1000BASE-T → SGMII (or 1000BASE-X if the SoC lacks SGMII); 1000BASE-SX/LX → 1000BASE-X; BR 3.1 GBd → 2500BASE-X; 10G codes → 10GBASE-R; copper PHY inside the module is probed over I²C (address 0x56/0xAC) and driven by phylib |
| Switch NOS | port default from platform (most 1G SFP cages = SGMII-capable; SFP+/SFP28 at 1G often 1000BASE-X only), commands speed 1000, speed nonegotiate, media-type sfp, negotiation auto, port-mode |
| NIC drivers | Intel: SFP+ ports support 1G in 1000BASE-X only (no 10/100 copper SFP); Mellanox: 1G via 1000BASE-X on some models; Broadcom: per firmware (NIC ports) |
| Copper SFP | PHY mode strap/EEPROM (SGMII vs SerDes variant), AN behaviour set by vendor firmware |
Mismatch table
| Symptom | Cause | Fix |
|---|---|---|
| Copper SFP: 1G clients fine, 10/100 never link | port in 1000BASE-X | move to an SGMII-capable port or use a module that hides 10/100 behind 1G-to-host adaptation |
| Fibre SFP links only with AN off | far end without Clause 37 (media converter, some ONUs) or SGMII word from a copper module | speed nonegotiate / autoneg off |
| 100BASE-FX SFP detected, no link | host lacks 100M SerDes mode | use a port that supports 100M SFP, or 100BASE-FX-over-SGMII module |
| 2.5G SFP links at 1G or not at all | host has no 2500BASE-X | choose a 2.5G-capable cage or a module with rate fallback |
| ONU stick links, then drops | 2500BASE-X vs 1000BASE-X expectation, AN | set host to 2500BASE-X, AN off (PON optics) |
| 10GBASE-T SFP+ links at 10G only | no USXGMII on host | accept 10G-only, or use a module with internal rate adaptation |
| Linux: module works on one board, not another | phylink picked a different interface from the EEPROM; SoC lacks that mode | check dmesg for sfp: module … interface; fix compliance bytes or device tree |
In CodingBox
The bytes that steer the host's choice are all in A0h: compliance codes 3–10 (1000BASE-T, SX, LX, 10G codes), nominal bit rate 12, encoding 11 (8b/10b vs 64b/66b), extended compliance 36. A copper module coded as 1000BASE-SX will be treated as fibre and lose its 10/100 path; a fibre module with a stray 1000BASE-T bit will be driven as SGMII. CodingBox shows and edits these fields (Check transceiver, Compliance codes).