27.10.2015 Views

Advanced Configuration and Power Interface Specification

ACPI_6.0

ACPI_6.0

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Processor <strong>Configuration</strong> <strong>and</strong> Control<br />

Step<br />

6 Core1’s request is observed by the platform. Platform<br />

puts Core1 to <strong>Power</strong> Down <strong>and</strong> Cluster0 to retention.<br />

OS View of power<br />

states<br />

Core0: <strong>Power</strong>Down<br />

Core1: <strong>Power</strong>Down<br />

Cluster0: Running!!<br />

(See Note, below)<br />

Platform view of<br />

power states<br />

Core0: <strong>Power</strong>Down<br />

Core1: <strong>Power</strong>Down<br />

Cluster0:<br />

Retention!!(See<br />

Note, below)<br />

Note: Bold text here indicates mismatched states.<br />

The fundamental issue is that the platform cannot infer what hierarchy level a request is for, based<br />

on what levels are being placed into a low power mode. To mitigate this, each idle state comm<strong>and</strong><br />

must include a hierarchy parameter specifying the highest level hierarchy node for which the OS is<br />

making a request in addition to the normal idle state identifier. Even if the OS does not want some<br />

higher level hierarchy node to enter an idle state, it should indicate if the core is the last core down<br />

for that node. This allows the platform to underst<strong>and</strong> the OS’s view of the state of the hierarchy <strong>and</strong><br />

ensure ordering of requests even if the OS requests a particular node to stay running.<br />

This enhancement is illustrated in this example:<br />

Step<br />

OS View of power<br />

states<br />

0: Core0 in <strong>Power</strong>Down, <strong>and</strong> Core1 is running Core0: <strong>Power</strong>Down<br />

Core1: Running<br />

Cluster0: Running<br />

1 Core1 goes idle – the OSPM OS requests Core1<br />

<strong>Power</strong>Down <strong>and</strong> Cluster0 Retention <strong>and</strong> identifies<br />

itself as last down in Cluster0<br />

Core0: <strong>Power</strong>Down<br />

Core1: <strong>Power</strong>Down<br />

Cluster0: Retention<br />

2 Core0 receives an interrupt <strong>and</strong> wakes up into platform Core0: <strong>Power</strong>Down<br />

Core1: <strong>Power</strong>Down<br />

Cluster0: Retention<br />

3 Core0 moves into OSPM <strong>and</strong> starts processing<br />

interrupt<br />

4 Core0 goes idle <strong>and</strong> OSPM request Core0 <strong>Power</strong><br />

Down <strong>and</strong> requests Cluster0 to stay running <strong>and</strong><br />

identifies itself as last down in Cluster0<br />

5 Core0’s idle request “passes” Core1’s request.<br />

Platform rejects Core0’s request since it is a request<br />

for Cluster0 but Core1 is still awake.<br />

6 Core1’s request is observed by the platform. Platform<br />

rejects Core1’s request since it is a request for<br />

Cluster0 but Core0 is still awake.<br />

Core0: Running<br />

Core1: <strong>Power</strong>Down<br />

Cluster0: Running<br />

Core0: <strong>Power</strong>Down<br />

Core1: <strong>Power</strong>Down<br />

Cluster0: Running<br />

Core0: <strong>Power</strong>Down<br />

Core1: <strong>Power</strong>Down<br />

Cluster0:<br />

<strong>Power</strong>Down<br />

Core0: <strong>Power</strong>Down<br />

Core1: <strong>Power</strong>Down<br />

Cluster0:<br />

<strong>Power</strong>Down<br />

7 OS resumes on Core0 Core0: Running<br />

Core1: <strong>Power</strong>Down<br />

Cluster0: Running<br />

Platform view of<br />

power states<br />

Core0: <strong>Power</strong>Down<br />

Core1: Running<br />

Cluster0: Running<br />

Core0: <strong>Power</strong>Down<br />

Core1: Running<br />

Cluster0: Running<br />

Core0: Running<br />

Core1: Running<br />

Cluster0: Running<br />

Core0: Running<br />

Core1: Running<br />

Cluster0: Running<br />

Core0: Running<br />

Core1: Running<br />

Cluster0: Running<br />

Core0: Running<br />

Core1: Running<br />

Cluster0: Running<br />

Core0: Running<br />

Core1: Running<br />

Cluster0: Running<br />

Core0: Running<br />

Core1: Running<br />

Cluster0: Running<br />

Version 6.0 443

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!