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.

<strong>Advanced</strong> <strong>Configuration</strong> <strong>and</strong> <strong>Power</strong> <strong>Interface</strong> <strong>Specification</strong><br />

Step<br />

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

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

Cluster0 but Core1 is still awake.<br />

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

rejects Core1’s request since it includes Cluster0<br />

but Core0 is still awake.<br />

OS View of power<br />

states<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 />

8 OS resumes on Core1 Core0: Running<br />

Core1: Running<br />

Cluster0: Running<br />

Platform view of<br />

power states<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 />

Once control is returned to the OS, it can h<strong>and</strong>le as it sees fit – likely just re-evaluating the idle state<br />

on both cores. When requests are received out of order, some overhead is introduced by rejecting the<br />

comm<strong>and</strong> <strong>and</strong> forcing the OS to re-evaluate, but this is expected to be rare. Requests sent by the OS<br />

should be seen by the platform in the same order the vast majority of the time, <strong>and</strong> in this case, the<br />

idle comm<strong>and</strong> will proceed as normal.<br />

It is possible that the OS may choose to keep a particular hierarchy node running even if all CPUs<br />

underneath it are asleep. This gives rise to another potential corner case – see below.<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<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<br />

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

Platform puts Core0 to <strong>Power</strong>Down.<br />

Even though the OS made a request for the cluster<br />

to run, Platform does not know to reject Core0’s<br />

request since it doesn’t include a Cluster idle state<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: 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: <strong>Power</strong>Down<br />

Core1: Running<br />

Cluster0: Running<br />

442 April, 2015 Version 6.0

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

Saved successfully!

Ooh no, something went wrong!