Every PCIe link state explained — L0 full-on, L0s one-direction standby, L1 bilateral electrical idle, L1.1 and L1.2 sub-states, L2 Vaux-only, L3 fully off, and the Gen 6 L0p low-power active state. Hardware vs software control, ASPM negotiation, exit latency calculation, and ASPM policy.
PCIe defines two complementary power management systems. Device Power Management (D-states, covered in PCIe-21) controls the function’s internal logic — register state, clocks, and device-specific power rails. Link Power Management (L-states, this post) controls the PCIe link itself — whether the transmitters are actively sending symbols, whether the reference clock is present, and whether PLLs are running.
The two systems are tightly coupled: placing a device in D1/D2/D3hot automatically triggers an L1 transition on its link. Link power management can also operate autonomously through ASPM (Active State Power Management) — hardware-controlled transitions that happen without any software involvement, purely based on link activity.
Understanding all L-states is essential for both hardware designers and driver writers. Incorrect ASPM configuration is one of the most common causes of system instability and unexpected wake latency.
L0 is the fully operational link state. All lanes are transmitting symbols continuously — either data (TLPs and DLLPs) or idle symbols when there is nothing to send. The PLL is locked, the reference clock is running, both transmitters and receivers are fully active, and the Data Link Layer reports DL_Active. All PCIe traffic flows only in L0.
There is no entry latency to L0 — when the link is already in L0 and a device needs to send, it sends immediately. Exit from L0 is initiated by either side entering electrical idle (signaling L0s entry) or by a negotiated sequence (L1 entry). The LTSSM is in the L0 state.
L0s is a fast standby state where one direction of the link enters electrical idle while the other direction can remain active. Each direction of a link operates its LTSSM independently — the transmitter of one side can be in L0s.Idle while its receiver is still in L0, ready to accept data. This asymmetry is intentional and avoids synchronisation overhead.
L0s is the lightest ASPM state. It provides power savings by stopping the transmitter’s signal transitions (which are a significant power consumer at high data rates) without requiring negotiation with the link partner. Entry is local to one transmitter — no DLLPs are exchanged to initiate it.
When a transmitter decides to enter L0s (typically due to an inactivity timeout — no TLPs or DLLPs queued), it:
The link partner’s receiver sees the EIOS and transitions to Rx_L0s — it arms its electrical-idle-exit detector and awaits the exit sequence.
When the transmitter needs to send again, it exits L0s using Fast Training Sequences (FTS). FTS ordered sets are specifically designed for rapid clock recovery after electrical idle — they provide dense transitions at a fixed known pattern so the receiver’s CDR (Clock and Data Recovery) circuit can quickly regain bit lock and symbol lock.
| L0s exit latency (Link Capability [14:12]) | Encoding | Typical range |
|---|---|---|
| Less than 64 ns | 000b | N_FTS × 4 ns at 2.5 GT/s |
| 64 ns to less than 128 ns | 001b | Common clock config: often 001b |
| 128 ns to less than 256 ns | 010b | Spread-spectrum clocking: 010b–011b |
| 256 ns to less than 512 ns | 011b | — |
| 512 ns to less than 1 µs | 100b | — |
| 1 µs to less than 2 µs | 101b | — |
| 2 µs to 4 µs | 110b | — |
| More than 4 µs | 111b | Unusual — independent clock source |
L1 is a deeper power state than L0s. Both directions of the link enter electrical idle simultaneously — both transmitters stop signalling. The main power supply, reference clock, and PLLs all remain active in standard L1, distinguishing it from L1.1 and L1.2 where these are progressively removed.
L1 provides significantly more power savings than L0s because both PHY transceivers are idle, but it costs significantly more to exit — both directions must go through the Recovery LTSSM state (TS1/TS2 exchange) before reaching L0 again, whereas L0s only needs FTS sequences.
L1 can be entered two ways:
Unlike L0s, L1 requires negotiation because both directions must enter electrical idle together. A race condition without negotiation could leave one side in L0 sending TLPs while the other side has already powered down:
The upstream port can reject the L1 request by sending PM_Active_State_NAK — a Message TLP (not a DLLP). Rejection happens when the upstream port has TLPs queued, when L1 is not enabled, or when the port has DLLPs (ACK/NAK) pending transmission. After a NAK, the downstream device falls back to L0s if possible.
When software writes a non-D0 power state to the device’s PMCSR Power State field [1:0], the device transitions its link to L1 using a similar but slightly different DLLP: PM_Enter_L1. This is sent to the upstream device, which responds with PM_Request_ACK. The handshake then follows the same EIOS sequence as ASPM L1 entry.
Either the upstream or downstream side can initiate L1 exit. No negotiation is needed — exit is unilateral. The initiating side simply exits electrical idle and sends TS1 ordered sets. The link partner detects the exit from electrical idle and responds with TS1s. Both sides then follow the Recovery LTSSM substates (Recovery.RcvrLock → Recovery.RcvrCfg → Recovery.Idle) before returning to L0.
L1 sub-states extend L1 with progressively deeper power savings by removing the reference clock and PLL. They are defined in the L1 PM Sub-States extended capability (Cap ID 001Eh, covered in PCIe-22).
| Sub-state | Ref clock | PLL state | Common mode | Exit latency | Control method |
|---|---|---|---|---|---|
| Standard L1 | On | Locked | May remain | 2–100 µs | ASPM or D-state |
| L1.1 (ASPM) | Off | On (internal) | Removed | Tens of µs + Recovery | ASPM |
| L1.1 (PM) | Off | On (internal) | Removed | Tens of µs + Recovery | Software D-state |
| L1.2 (ASPM) | Off | Off | Removed | T_POWER_ON + Recovery (100s µs–ms) | ASPM + LTR gate |
| L1.2 (PM) | Off | Off | Removed | T_POWER_ON + Recovery | Software D3hot |
L0p is an entirely new link power state introduced in PCIe 6.0. It addresses a fundamental problem unique to Gen 6’s PAM4 signalling at 64 GT/s: idle gaps between bursts of traffic are common (AI accelerators, for example, have intense computation phases followed by communication bursts), but the overhead of entering L1 (Recovery exit, TS1/TS2 exchange) is too large for the short idle windows between bursts.
L0p is not an out-of-band idle state like L0s or L1. It is an in-band active state operating within the L0 domain — the link never leaves L0 technically, but power is reduced by operating at a reduced configuration:
L0p operates through flit-mode bandwidth reduction specific to Gen 6’s flit-based Transport Layer. Two primary power reduction mechanisms exist:
L0p entry and exit are negotiated using new Gen 6 Ordered Sets (defined in the PCIe 6.0 spec, not available in older specifications). The Physical Layer 64.0 GT/s Extended Capability (Extended Cap ID 002Ch) reports L0p capability and current operating configuration.
| Mechanism | L0s | L1 | L0p (Gen 6) |
|---|---|---|---|
| Link state | L0s (out of L0) | L1 (out of L0) | Still in L0 |
| LTSSM transition | Yes (EIOS → EI) | Yes (DLLP + EIOS) | No |
| Exit mechanism | N_FTS + SOS | Recovery (TS1/TS2) | L0p ordered set negotiation |
| Exit latency | 100 ns – 1 µs | 2 – 100+ µs | Sub-microsecond |
| Both directions affected | One direction only | Yes | Yes (coordinated) |
| Generation | Gen 1+ | Gen 1+ | Gen 6 only |
| Primary use case | Light idle periods | Deep idle, D-state changes | GPU/AI burst gaps at 64 GT/s |
L2 and L3 are not ASPM states — they require an explicit OS-initiated power-down sequence. They represent conditions where main power has been removed from the device. The spec calls them pseudo-states because the LTSSM is not operational once power is removed.
| State | Main power | Vaux (3.3V standby) | Communication | Wake mechanism | Recovery |
|---|---|---|---|---|---|
| L2 | Off | Present | None (clock off) | Beacon or WAKE# signal | Fundamental reset + re-enumeration |
| L3 | Off | Off | None | Physical power-on only | Fundamental reset + re-enumeration |
L2 (Auxiliary power) — the device retains Vaux (3.3V standby rail) but main power is removed. A device in L2 can monitor for wake events and signal a wakeup to the system by asserting a Beacon signal on the PCIe lane or an out-of-band WAKE# sideband signal. The Root Complex detects this and initiates power restoration and re-enumeration.
L3 (No power) — all power is removed including Vaux. The device has no means to communicate or detect events. Recovery requires restoring all power supplies, asserting PERST# reset, and running the full boot-time enumeration sequence again. L3 corresponds to what happens when a user presses the physical power button for a hard-off.
Before power can safely be removed, all devices must acknowledge that they are ready. The OS power manager initiates the following sequence:
ASPM is controlled through two registers in the PCIe Capability structure (PCIe Cap ID 10h, covered in PCIe-21):
| Register | Location | Content |
|---|---|---|
| L0s Exit Latency | Link Capabilities [14:12] | Maximum time from L0s exit initiation to L0. 3-bit field, 8 values from <64ns to >4µs. Updated after Common Clock Configuration change + Retrain Link. |
| L1 Exit Latency | Link Capabilities [17:15] | Maximum time from L1 exit initiation to L0. 3-bit field, 8 values from <1µs to >64µs. Includes Recovery state time. |
| Acceptable L0s Latency | Device Capabilities [8:6] | Maximum L0s exit latency the endpoint can tolerate before its performance degrades. 3-bit, same encoding. Software compares this with path L0s latency sum. |
| Acceptable L1 Latency | Device Capabilities [11:9] | Maximum L1 exit latency the endpoint can tolerate. 3-bit, values from <1µs to unlimited. Software compares this with path L1 latency sum. |
| Common Clock Configuration | Link Control bit 6 | When 1: both sides share the platform reference clock. Reduces L0s exit latency (fewer FTS needed). Triggers Retrain Link to update N_FTS values. |
| Slot Clock Configuration | Link Status bit 11 | Hardware reports whether device uses the platform clock (1) or an independent clock source (0). Software reads both ends to determine if Common Clock Configuration can be set. |
Software cannot blindly enable ASPM on every link. If the total exit latency across the path from an endpoint to the Root Complex exceeds the endpoint’s acceptable latency, ASPM will cause performance degradation — the device will run out of its internal buffers waiting for the link to return to L0. Software must calculate whether enabling ASPM is safe for each endpoint:
The latency calculation is done independently for L0s and L1. It is common to enable L1 for a device even though L0s is disabled (or vice versa), depending on the path latency calculation results. BIOS typically performs this calculation during POST and programs ASPM appropriately. The OS power manager may later re-evaluate and adjust ASPM settings based on performance profiling.
When software writes to the PMCSR Power State field to place a device in D1, D2, or D3hot, the device must autonomously initiate an L1 transition. This happens without ASPM being enabled — it is a mandatory requirement for any D-state change below D0:
| Device D-state | Required link state | Entry DLLP | Exit trigger |
|---|---|---|---|
| D0 | L0 (fully operational) | None | N/A |
| D1 | L1 (mandatory) | PM_Enter_L1 | Software config write to PMCSR (D0 return) or PME event |
| D2 | L1 (mandatory) | PM_Enter_L1 | Software config write or PME event |
| D3hot | L1 (mandatory) | PM_Enter_L1 | Software config write or PME event |
| D3cold | L2 or L3 (after L2/L3 Ready handshake) | PM_Enter_L23 | Power restore + fundamental reset |
The L1 entry for D-state changes uses the same 11-step handshake as ASPM L1 but uses the PM_Enter_L1 DLLP (a different DLLP type from the ASPM request). Software does not directly control the timing of L1 entry — after writing the PMCSR register, the hardware handles the entire DLLP negotiation and electrical idle sequence autonomously.
All legacy link states (L0, L0s, L1, L1.1, L1.2, L2, L3) and their protocols (EIOS, PM_Enter_L1, PM_Request_ACK, PME_Turn_Off, N_FTS, ASPM Control register) are fully preserved in Gen 6. A Gen 6 link can use all the same power states as a Gen 3 link — backward compatibility is complete.
| Feature | Gen 6 change |
|---|---|
| L0, L0s, L1, L1.1, L1.2, L2, L3 | Unchanged — same protocols, same DLLP types, same ASPM register layout |
| L0p | New in Gen 6. In-band bandwidth reduction within L0. Sub-µs exit latency. PAM4-specific. |
| EIOS for L0s | Gen 6 PAM4 uses a new EIOS block format for 64b/66b flit encoding — different bytes from Gen 3 128b/130b EIOS, but same conceptual role. |
| N_FTS for L0s exit | Gen 6 PAM4 requires more FTS sequences for clock recovery than Gen 3 NRZ — PAM4’s 4-level eye is harder to re-lock. N_FTS values will be larger. |
| ASPM Control register | Unchanged — same bits, same encoding. L0p is NOT controlled via ASPM Control; it uses the Physical Layer 64.0 GT/s capability (002Ch). |
| L1 exit latency | Gen 6 PHY relock from L1 may be longer than Gen 3 due to PAM4 equalization requirements. Devices must report accurate L1 exit latency in Link Capabilities. |
| CXL.io power management | CXL.io uses standard PCIe link power management. CXL.cache and CXL.mem have their own protocol-level quiesce sequences that must complete before L1 entry. |
| State | Ref clock | PLL | Both Tx idle | Exit latency | Control | Entry trigger |
|---|---|---|---|---|---|---|
| L0 | On | Locked | No | N/A | — | Normal operation |
| L0p (Gen 6) | On | Locked | No (reduced) | <1 µs | HW (ASPM-like) | Burst gap at 64 GT/s |
| L0s | On | Locked | One direction | 64 ns – >4 µs | HW (ASPM) | Tx inactivity timeout |
| L1 | On | Locked | Yes | 2–100 µs | HW (ASPM) or SW | DLLP negotiation or D-state |
| L1.1 | Off | On | Yes | Tens of µs | HW (L1SS ASPM) | L1 + clock removal |
| L1.2 | Off | Off | Yes | 100 µs – ms | HW (L1SS ASPM + LTR gate) | L1.1 + PLL shutdown |
| L2 | Off | Off | Yes | Full re-init | SW only | L2/L3 Ready handshake + Vaux |
| L3 | Off | Off | Yes | Full re-init | SW only | L2/L3 Ready handshake + no Vaux |
| Item | Value / Rule |
|---|---|
| L0s entry | Tx sends EIOS, enters EI within 8 ns. No negotiation. Local decision. |
| L0s exit | Tx sends N_FTS FTS ordered sets then SOS (8b/10b) or EIEOS+SDS (128b/130b). Rx re-locks CDR. |
| L0s → L1 direct path | Not allowed. Must return to L0 first, then enter L1. |
| L1 ASPM entry DLLP | PM_Active_State_Request_L1 (downstream → upstream). Reply: PM_Request_ACK or PM_Active_State_NAK. |
| L1 SW entry DLLP | PM_Enter_L1 (device → upstream). Reply: PM_Request_ACK. Both: then EIOS + EI. |
| L1 exit | Either side exits EI, sends TS1s. Recovery state (TS1/TS2 exchange) → L0. |
| Switch L1 exit propagation | Within 1 µs of detecting downstream L1 exit, switch exits L1 on upstream link. Parallel, not sequential. |
| L1.2 gate | LTR_L1.2_THRESHOLD in L1SS Control 1. L1.2 only entered if current LTR value exceeds this threshold. |
| ASPM Control register | Link Control bits [1:0]: 00b=disabled · 01b=L0s · 10b=L1 · 11b=both. Must match on both ends of link. |
| ASPM Support register | Link Capabilities bits [11:10]: 00b=none · 01b=L0s · 10b=L1 · 11b=both. Read-only. |
| Common Clock Config | Link Control bit 6. Shortens L0s exit latency. Requires Retrain Link to update N_FTS. |
| L0s Acceptable Latency | Device Capabilities [8:6]. SW compares with max path L0s latency — disables ASPM L0s if path exceeds tolerance. |
| L1 Acceptable Latency | Device Capabilities [11:9]. SW compares with max path L1 latency — disables ASPM L1 if path exceeds tolerance. |
| D-state → link state | D0→L0. D1/D2/D3hot→L1 (mandatory). D3cold→L2/L3 (after handshake). |
| L2/L3 Ready sequence | Software D3 → PME_Turn_Off broadcast → PME_TO_ACK from all → PM_Enter_L23 DLLP → EI → power off ≥100 ns later. |
| L0p (Gen 6) | In-band bandwidth reduction within L0. Lane scaling or FEC reduction. Sub-µs exit. Controlled via PHY 64.0 GT/s Extended Cap (002Ch). Not via ASPM Control bits. |