ACPI 는 device level 에서의 PM 상태에 대해 아래와 같이 정의한다.

Device Context 는 무엇입니까?
일반적으로 device가 정상동작 할 경우, device의 동작 상태는 지속적으로 변경된다. Device는 아마도 자신의 register를 쓰거나 읽거나 또는 device의 local processor는 아마도 시스템가 상호 작용하는 부분에 영향을 미치는 코드를 실행 할 것이다. 주어진 순간의 장치 상태는 다음을 포함합니다.
- 해당 device의 configuration register의 내용
- 해당 devcie의 local memory 와 IO register 들의 상태
- 만약 device가 processor를 포함하고 있다면, 현재의 program pointer 와 해당 디바이스의 다른 레지스터 내용
위에 열거한 상태들을 가리켜서 device context라고 한다.
이중 일부 내용 혹은 모든 내용이 Device PM state 가 공격적인 level 로 변경 될 때 사라지게 된다. 만약 이 context information 이 유지 되지 않는다면, device는 D0 상태로 돌아 왔을때, 올바르게 동작하지 않게 된다.
PME Context
만약 OS가 들어오는 call을 처리하기 위해서 PCIe modem 을 enable 시켜 system을 깨우고, 시스템의 power를 down시킬 경우, Device wake-up context 는 그 과정동안 내부적으로 유지될 필요가 있다. 칲셋은 해당 이벤트를 모니터하기에 충분한 파워를 보존해야 한다. 이 기능을 제공하기 위해서, PCIe modem은 반드시 아래와 같은 PCIe register 들을 구현해야 한다.
- PME Message capability
- PME enable/disable control bit
- PME status bit - 해당 device가 어떠한 PME message를 송부했는지 않했는지 를 보여준다.
- 하나 또는 여러개의 device-specific control bits - 선택적으로 enable/disable 될수 있는 다양한 device-specific events 로 이러한 events는 device가 PME message 를 보내는 원인이 될 수 있다.
- 부합하는 device-specific status bits - 이 상태 bits 들은 왜 해당 device가 PME message 를 issue 하는지를 알려 준다.
Default device Class PM states

PCIe Function은 반드시 power management 를 지원해야 하며, 이와 관련된 몇가지 register 들을 반드시 구현해야 합니다.
PCI Capability 01h Power Management Capability Structure

D0 State - Full On
해당 state 는 mandatory 이다.
D0 State-Full On : 파워를 효과적으로 보존하는 상태가 아니며, 디바이스가 완전히 가동되는 상태를 말한다. 모든 PCIe Functions 들은 반드시 D0 state 를 지원해야 한다. D0는 엄밀하게 말해서 다음의 2가지 하부 상태로 나누어 질수 있는데, 하나는 D0 Uninitialized 와 다른 하나는 D0 Active 이다. ASPM 하드웨어 컨트롤은 디바이스가 이 상태일때 link power 를 변경 할 수 있다.
D0 Uninitialized : Fundamental Reset 이나, software 가 해당 디바이스의 상태를 D3hot 에서 D0로 변경시킬경우, Function은 D0 Uninitialized 상태로 들어간다. 일반적으로, 해당 register 드릉ㄴ default 상태로 돌아온다. 이 상태에서 해당 Function은 아래와 같은 특성을 보인다.
- 이것은 configration 거래에만 반응한다.
- 이것의 Command register enable bits 들은 그들의 default 상태를 모두 리턴한다. 이것이 의미하는 것은 이것은 memory 또는 IO transaction 으로 시작하거나 행동하지 않는다.
D0 Active. Function 이 한번 software에 의해 coufigured 되고, enabled 되면, 해당 Function은 D0 Active state 로 들어가며, 해당 device는 완전히 가동된다.

Dynamic Power Allocation (DPA)
Device 가 D0 상태에 있을 때, 32 개의 하부 상태로 나누어 질 수 있다. D1으로 급격하게 down 시키지 않고도, D0상태로 남아 있으면서도, power를 조금씩 reduced 할 수 있다.
해당 하부 상태는 0 부터 점차 커지는 방향으로 순번이 매겨지는데, 0가 가장 default 이며, 최대로 전력을 소비하는 상태이다. Software는 반드시 순차적으로 이 하부 상태를 변경할 필요는 없다.

D1 State - Light Sleep
해당 state 는 optionl이다.
해당 상태에 들어가기 전에, software는 반드시 모든 outstanding non-posted Request 가 상응하는 Completion을 받았다는 것을 보장해야 한다. 이것은 PCIe Capability block 의 Device Status Register 안에 있는 polling the Transactions Pending bit 을 통해서 성취 가능하다. 해당 bit이 0 으로 cleared 된다면, D1 상태를 진행하기에 안전하다. 이 약간의 파워보존 상태에서, 해당 Function 은 PME Message를 제외하고 어떠한 Requests 도 요청하지 않을 것이다. D1의 다른 특성은 아래와 같다.
- Device 가 D1 상태로 들어가면, Link는 강제로 L1 power state로 변경 된다.
- 이 상태에서, Configuration 과 Message Requests 는 허용된다 하지만 모든 다른 request 들은 반드시 Unsupported Requests 로 처리 되어야 하며 이에 대한 모든 completion 들은 Unexpected Completion 으로 처리 되어야 한다.
- 만약 Request 가 들어 오는 것으로 인해 발생했으며, 보고된 error 가 enabled 되었다면, 해당 state 에서도 Error Message 가 전달될 것입니다. 만약 다른 타입의 error가 발생한다면( Completion timeout과 같은) 해당 message는 device가 D0 상태로 돌아올 때까지 전달되지 않을 것입니다.
- 만약 해당 상태에서 지원되고, 활성화된 것이라면, Power 복구가 필요한 이벤트가 발생했음을 software에 알리기 위해 해당 Function 은 Link 를 다시 활성화 시키고 PME message를 보낼 것이다.
- 해당 Function 는 이 상태에서 자신의 context 잃어 버릴 수도 아닐수도 있다. 만약 자신의 context를 잃어 버리고 해당 디바이스가 PME를 지원한다면, 이 상태에 있는 동안, 최소한 자신의 PME context는 유지하고 있어야 한다.
- 해당 Function은 완전이 운영되기 위해서, 반드시 D0 Active PM state 로 돌아와야 한다.

D2 State - Deep Sleep
D2 Power state 는 D1 보다 더 깊은 절전 모드를 제공하지만 D3Hot 상태 보단 좀더 많은 전력 소비를 한다.
나머지 조건은 D1과 동일하다.

D3 state - Full Off
D3 state 는 Mandatory 이다.
모든 Function 은 반드시 D3 상태를 지원해야 한다. 이것은 가장 깊은 저전력 상태이고, 전력을 최대한도로 아낄 수 있다. Software 가 이 power state 를 device에 기록하면, device는 D3hot state로 들어간다. 이것이 의미하는 것은 power 는 여전히 공급되고 있다는 것이다. 만약 device 로 부터 Power(Vcc) 공급을 제거하면, Device 는 자신을 D3cold 상태로 전환하고 Link 는 L2(만약 Vaux 가 있다면) 또는 L3 로 변경된다.
D3hot state (Mandatory) - Software 는 Power Mgt Control and Status Register의 PowerState field Function 에 적절한 값을 기록함으로써, device를 D3Hot 상태로 만든다. 이 상태에서 Function 은 PME 또는 PME_TO_ACK messages 만 요청 가능하다. 그리고 configuration Requests 또는 PME_Turn_Off Message 에만 응답할 수 있다. Device가 D3Hot 상태일때, Software는 반드시 FUnction`s configuration register 에 접근할 수 있어야 한다. 그렇게 함으로 device를 D0상태로 되돌릴 수 있다. D3Hot의 다른 특성들은 다음과 같다.
- Device 가 D3Hot에 들어가면, Link는 L1 state로 들어 갑니다.
- 해당 Function은 PM software에게 fully active state 로 돌아갈 필요가 있다고 공지하기 위해 PME message를 보낼 수 있습니다.
- Device가 이 상태로 들어갈 경우 Function context 를 아마도 잃게 될 것입니다. 만약 power 공급이 중단된다면, 해당 spec 는 모든 context 를 잃게 될 것으로 추정합니다. 반면, software 가 D0 로 돌아가도록 할 때까지 power 가 중단 되지 않는다면, context는 유지 될 수 있습니다. 이전 Spec. 에서는 D3Hot 에서 D0로 변경하기 위해서는 soft reset 이 필요했고, 모든 register 들이 다시 초기화 되어야 했습니다. 하지만 1.2 Version of spec 부터는 "No Soft Reset" 이라 불리는 새로운 capability bit 이 추가 되어, 그 경우 Function 이 soft reset 을 하지 않도록 합니다. D3Hot 상태에서 PME message를 생성하는것이 가능하도록 하기 위해서, Device는 반드시 자신의 PME context를 유지하고 있어야 합니다.
Function 는 다음과 같은 2가지 상황에서 D3Hot으로 부터 빠져 나옵니다.
- 만약 Vcc 가 device로 부터 제거 되면, 해당 device는 D3Hot에서 D3cold로 전환 됩니다.
- Software 는 device의 PM state 를 D0로 변경하기 위해 Function의 PMCSR register의 PowerState field 를 write 할 수 있습니다. D3Hot 에서 빠져나와서 D0로 돌아가기 위해서 프로그램할 때, 해당 Function 은 D0 Uninitialized PM 상태로 돌아갑니다. 이경우 Reset 이 요청되기도, 요청되지 않기도 합니다. 아래 Table은 D3Hot 상태에서의 PM policy 들을 보여줍니다.

D3Cold State (Mandatory) 모든 PCIe Function 은 Vcc가 제거 될경우 D3Cold 상태로 들어가야 한다. 대시 Power가 공급될 경우, 해당 device는 반드시 reset 되거나, 내부적인 reset을 진행하여야 하며, 이렇게 함으로 D3Cold에서 D0 uninitialized 상태로 변경되게 된다. D3Cold state에서도 PME context를 유지하기 위해서, Function 은 반드시 auxiliary power source 를 가지고 있어야 한다. Device가 다시 D0 uninitialized 상태로 돌아오면, 해당 device는 PME message 를 생성할 수 있으며, 그렇게 함으로 system에 wakeup event를 알릴 수 있다. 아래는 D3Cold 상태의 PM policies 를 보여준다.

Function PM State Transitions

의의 그림은 PCIe Function 의 PM 상태 변화를 보여 준다. 아래의 table16-10 은 각 상태에 대한 상세한 설명을 제공한다. 아래의 table 16-11은 하나의 상태에서, 다른 살태로 변경 되는 것을 하드웨어 그리고 소프트웨어의 관점에서 보여 준다.


'PCIe' 카테고리의 다른 글
| [PCIe] Power Management - 4 - L1 Sub state (1) | 2024.03.12 |
|---|---|
| [PCIe] Power Management - 2 (0) | 2024.01.03 |
| [PCIe] Power Management - 1 (4) | 2024.01.03 |
| Configuration Requests (1) | 2021.05.05 |
| PCIe Technology in Automotive. (0) | 2021.04.16 |