idle-states.txt 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700
  1. ==========================================
  2. ARM idle states binding description
  3. ==========================================
  4. ==========================================
  5. 1 - Introduction
  6. ==========================================
  7. ARM systems contain HW capable of managing power consumption dynamically,
  8. where cores can be put in different low-power states (ranging from simple
  9. wfi to power gating) according to OS PM policies. The CPU states representing
  10. the range of dynamic idle states that a processor can enter at run-time, can be
  11. specified through device tree bindings representing the parameters required
  12. to enter/exit specific idle states on a given processor.
  13. According to the Server Base System Architecture document (SBSA, [3]), the
  14. power states an ARM CPU can be put into are identified by the following list:
  15. - Running
  16. - Idle_standby
  17. - Idle_retention
  18. - Sleep
  19. - Off
  20. The power states described in the SBSA document define the basic CPU states on
  21. top of which ARM platforms implement power management schemes that allow an OS
  22. PM implementation to put the processor in different idle states (which include
  23. states listed above; "off" state is not an idle state since it does not have
  24. wake-up capabilities, hence it is not considered in this document).
  25. Idle state parameters (eg entry latency) are platform specific and need to be
  26. characterized with bindings that provide the required information to OS PM
  27. code so that it can build the required tables and use them at runtime.
  28. The device tree binding definition for ARM idle states is the subject of this
  29. document.
  30. ===========================================
  31. 2 - idle-states definitions
  32. ===========================================
  33. Idle states are characterized for a specific system through a set of
  34. timing and energy related properties, that underline the HW behaviour
  35. triggered upon idle states entry and exit.
  36. The following diagram depicts the CPU execution phases and related timing
  37. properties required to enter and exit an idle state:
  38. ..__[EXEC]__|__[PREP]__|__[ENTRY]__|__[IDLE]__|__[EXIT]__|__[EXEC]__..
  39. | | | | |
  40. |<------ entry ------->|
  41. | latency |
  42. |<- exit ->|
  43. | latency |
  44. |<-------- min-residency -------->|
  45. |<------- wakeup-latency ------->|
  46. Diagram 1: CPU idle state execution phases
  47. EXEC: Normal CPU execution.
  48. PREP: Preparation phase before committing the hardware to idle mode
  49. like cache flushing. This is abortable on pending wake-up
  50. event conditions. The abort latency is assumed to be negligible
  51. (i.e. less than the ENTRY + EXIT duration). If aborted, CPU
  52. goes back to EXEC. This phase is optional. If not abortable,
  53. this should be included in the ENTRY phase instead.
  54. ENTRY: The hardware is committed to idle mode. This period must run
  55. to completion up to IDLE before anything else can happen.
  56. IDLE: This is the actual energy-saving idle period. This may last
  57. between 0 and infinite time, until a wake-up event occurs.
  58. EXIT: Period during which the CPU is brought back to operational
  59. mode (EXEC).
  60. entry-latency: Worst case latency required to enter the idle state. The
  61. exit-latency may be guaranteed only after entry-latency has passed.
  62. min-residency: Minimum period, including preparation and entry, for a given
  63. idle state to be worthwhile energywise.
  64. wakeup-latency: Maximum delay between the signaling of a wake-up event and the
  65. CPU being able to execute normal code again. If not specified, this is assumed
  66. to be entry-latency + exit-latency.
  67. These timing parameters can be used by an OS in different circumstances.
  68. An idle CPU requires the expected min-residency time to select the most
  69. appropriate idle state based on the expected expiry time of the next IRQ
  70. (ie wake-up) that causes the CPU to return to the EXEC phase.
  71. An operating system scheduler may need to compute the shortest wake-up delay
  72. for CPUs in the system by detecting how long will it take to get a CPU out
  73. of an idle state, eg:
  74. wakeup-delay = exit-latency + max(entry-latency - (now - entry-timestamp), 0)
  75. In other words, the scheduler can make its scheduling decision by selecting
  76. (eg waking-up) the CPU with the shortest wake-up latency.
  77. The wake-up latency must take into account the entry latency if that period
  78. has not expired. The abortable nature of the PREP period can be ignored
  79. if it cannot be relied upon (e.g. the PREP deadline may occur much sooner than
  80. the worst case since it depends on the CPU operating conditions, ie caches
  81. state).
  82. An OS has to reliably probe the wakeup-latency since some devices can enforce
  83. latency constraints guarantees to work properly, so the OS has to detect the
  84. worst case wake-up latency it can incur if a CPU is allowed to enter an
  85. idle state, and possibly to prevent that to guarantee reliable device
  86. functioning.
  87. The min-residency time parameter deserves further explanation since it is
  88. expressed in time units but must factor in energy consumption coefficients.
  89. The energy consumption of a cpu when it enters a power state can be roughly
  90. characterised by the following graph:
  91. |
  92. |
  93. |
  94. e |
  95. n | /---
  96. e | /------
  97. r | /------
  98. g | /-----
  99. y | /------
  100. | ----
  101. | /|
  102. | / |
  103. | / |
  104. | / |
  105. | / |
  106. | / |
  107. |/ |
  108. -----|-------+----------------------------------
  109. 0| 1 time(ms)
  110. Graph 1: Energy vs time example
  111. The graph is split in two parts delimited by time 1ms on the X-axis.
  112. The graph curve with X-axis values = { x | 0 < x < 1ms } has a steep slope
  113. and denotes the energy costs incurred whilst entering and leaving the idle
  114. state.
  115. The graph curve in the area delimited by X-axis values = {x | x > 1ms } has
  116. shallower slope and essentially represents the energy consumption of the idle
  117. state.
  118. min-residency is defined for a given idle state as the minimum expected
  119. residency time for a state (inclusive of preparation and entry) after
  120. which choosing that state become the most energy efficient option. A good
  121. way to visualise this, is by taking the same graph above and comparing some
  122. states energy consumptions plots.
  123. For sake of simplicity, let's consider a system with two idle states IDLE1,
  124. and IDLE2:
  125. |
  126. |
  127. |
  128. | /-- IDLE1
  129. e | /---
  130. n | /----
  131. e | /---
  132. r | /-----/--------- IDLE2
  133. g | /-------/---------
  134. y | ------------ /---|
  135. | / /---- |
  136. | / /--- |
  137. | / /---- |
  138. | / /--- |
  139. | --- |
  140. | / |
  141. | / |
  142. |/ | time
  143. ---/----------------------------+------------------------
  144. |IDLE1-energy < IDLE2-energy | IDLE2-energy < IDLE1-energy
  145. |
  146. IDLE2-min-residency
  147. Graph 2: idle states min-residency example
  148. In graph 2 above, that takes into account idle states entry/exit energy
  149. costs, it is clear that if the idle state residency time (ie time till next
  150. wake-up IRQ) is less than IDLE2-min-residency, IDLE1 is the better idle state
  151. choice energywise.
  152. This is mainly down to the fact that IDLE1 entry/exit energy costs are lower
  153. than IDLE2.
  154. However, the lower power consumption (ie shallower energy curve slope) of idle
  155. state IDLE2 implies that after a suitable time, IDLE2 becomes more energy
  156. efficient.
  157. The time at which IDLE2 becomes more energy efficient than IDLE1 (and other
  158. shallower states in a system with multiple idle states) is defined
  159. IDLE2-min-residency and corresponds to the time when energy consumption of
  160. IDLE1 and IDLE2 states breaks even.
  161. The definitions provided in this section underpin the idle states
  162. properties specification that is the subject of the following sections.
  163. ===========================================
  164. 3 - idle-states node
  165. ===========================================
  166. ARM processor idle states are defined within the idle-states node, which is
  167. a direct child of the cpus node [1] and provides a container where the
  168. processor idle states, defined as device tree nodes, are listed.
  169. - idle-states node
  170. Usage: Optional - On ARM systems, it is a container of processor idle
  171. states nodes. If the system does not provide CPU
  172. power management capabilities or the processor just
  173. supports idle_standby an idle-states node is not
  174. required.
  175. Description: idle-states node is a container node, where its
  176. subnodes describe the CPU idle states.
  177. Node name must be "idle-states".
  178. The idle-states node's parent node must be the cpus node.
  179. The idle-states node's child nodes can be:
  180. - one or more state nodes
  181. Any other configuration is considered invalid.
  182. An idle-states node defines the following properties:
  183. - entry-method
  184. Value type: <stringlist>
  185. Usage and definition depend on ARM architecture version.
  186. # On ARM v8 64-bit this property is required and must
  187. be one of:
  188. - "psci" (see bindings in [2])
  189. # On ARM 32-bit systems this property is optional
  190. The nodes describing the idle states (state) can only be defined within the
  191. idle-states node, any other configuration is considered invalid and therefore
  192. must be ignored.
  193. ===========================================
  194. 4 - state node
  195. ===========================================
  196. A state node represents an idle state description and must be defined as
  197. follows:
  198. - state node
  199. Description: must be child of the idle-states node
  200. The state node name shall follow standard device tree naming
  201. rules ([5], 2.2.1 "Node names"), in particular state nodes which
  202. are siblings within a single common parent must be given a unique name.
  203. The idle state entered by executing the wfi instruction (idle_standby
  204. SBSA,[3][4]) is considered standard on all ARM platforms and therefore
  205. must not be listed.
  206. With the definitions provided above, the following list represents
  207. the valid properties for a state node:
  208. - compatible
  209. Usage: Required
  210. Value type: <stringlist>
  211. Definition: Must be "arm,idle-state".
  212. - local-timer-stop
  213. Usage: See definition
  214. Value type: <none>
  215. Definition: if present the CPU local timer control logic is
  216. lost on state entry, otherwise it is retained.
  217. - entry-latency-us
  218. Usage: Required
  219. Value type: <prop-encoded-array>
  220. Definition: u32 value representing worst case latency in
  221. microseconds required to enter the idle state.
  222. The exit-latency-us duration may be guaranteed
  223. only after entry-latency-us has passed.
  224. - exit-latency-us
  225. Usage: Required
  226. Value type: <prop-encoded-array>
  227. Definition: u32 value representing worst case latency
  228. in microseconds required to exit the idle state.
  229. - min-residency-us
  230. Usage: Required
  231. Value type: <prop-encoded-array>
  232. Definition: u32 value representing minimum residency duration
  233. in microseconds, inclusive of preparation and
  234. entry, for this idle state to be considered
  235. worthwhile energy wise (refer to section 2 of
  236. this document for a complete description).
  237. - wakeup-latency-us:
  238. Usage: Optional
  239. Value type: <prop-encoded-array>
  240. Definition: u32 value representing maximum delay between the
  241. signaling of a wake-up event and the CPU being
  242. able to execute normal code again. If omitted,
  243. this is assumed to be equal to:
  244. entry-latency-us + exit-latency-us
  245. It is important to supply this value on systems
  246. where the duration of PREP phase (see diagram 1,
  247. section 2) is non-neglibigle.
  248. In such systems entry-latency-us + exit-latency-us
  249. will exceed wakeup-latency-us by this duration.
  250. - status:
  251. Usage: Optional
  252. Value type: <string>
  253. Definition: A standard device tree property [5] that indicates
  254. the operational status of an idle-state.
  255. If present, it shall be:
  256. "okay": to indicate that the idle state is
  257. operational.
  258. "disabled": to indicate that the idle state has
  259. been disabled in firmware so it is not
  260. operational.
  261. If the property is not present the idle-state must
  262. be considered operational.
  263. - idle-state-name:
  264. Usage: Optional
  265. Value type: <string>
  266. Definition: A string used as a descriptive name for the idle
  267. state.
  268. In addition to the properties listed above, a state node may require
  269. additional properties specifics to the entry-method defined in the
  270. idle-states node, please refer to the entry-method bindings
  271. documentation for properties definitions.
  272. ===========================================
  273. 4 - Examples
  274. ===========================================
  275. Example 1 (ARM 64-bit, 16-cpu system, PSCI enable-method):
  276. cpus {
  277. #size-cells = <0>;
  278. #address-cells = <2>;
  279. CPU0: cpu@0 {
  280. device_type = "cpu";
  281. compatible = "arm,cortex-a57";
  282. reg = <0x0 0x0>;
  283. enable-method = "psci";
  284. cpu-idle-states = <&CPU_RETENTION_0_0 &CPU_SLEEP_0_0
  285. &CLUSTER_RETENTION_0 &CLUSTER_SLEEP_0>;
  286. };
  287. CPU1: cpu@1 {
  288. device_type = "cpu";
  289. compatible = "arm,cortex-a57";
  290. reg = <0x0 0x1>;
  291. enable-method = "psci";
  292. cpu-idle-states = <&CPU_RETENTION_0_0 &CPU_SLEEP_0_0
  293. &CLUSTER_RETENTION_0 &CLUSTER_SLEEP_0>;
  294. };
  295. CPU2: cpu@100 {
  296. device_type = "cpu";
  297. compatible = "arm,cortex-a57";
  298. reg = <0x0 0x100>;
  299. enable-method = "psci";
  300. cpu-idle-states = <&CPU_RETENTION_0_0 &CPU_SLEEP_0_0
  301. &CLUSTER_RETENTION_0 &CLUSTER_SLEEP_0>;
  302. };
  303. CPU3: cpu@101 {
  304. device_type = "cpu";
  305. compatible = "arm,cortex-a57";
  306. reg = <0x0 0x101>;
  307. enable-method = "psci";
  308. cpu-idle-states = <&CPU_RETENTION_0_0 &CPU_SLEEP_0_0
  309. &CLUSTER_RETENTION_0 &CLUSTER_SLEEP_0>;
  310. };
  311. CPU4: cpu@10000 {
  312. device_type = "cpu";
  313. compatible = "arm,cortex-a57";
  314. reg = <0x0 0x10000>;
  315. enable-method = "psci";
  316. cpu-idle-states = <&CPU_RETENTION_0_0 &CPU_SLEEP_0_0
  317. &CLUSTER_RETENTION_0 &CLUSTER_SLEEP_0>;
  318. };
  319. CPU5: cpu@10001 {
  320. device_type = "cpu";
  321. compatible = "arm,cortex-a57";
  322. reg = <0x0 0x10001>;
  323. enable-method = "psci";
  324. cpu-idle-states = <&CPU_RETENTION_0_0 &CPU_SLEEP_0_0
  325. &CLUSTER_RETENTION_0 &CLUSTER_SLEEP_0>;
  326. };
  327. CPU6: cpu@10100 {
  328. device_type = "cpu";
  329. compatible = "arm,cortex-a57";
  330. reg = <0x0 0x10100>;
  331. enable-method = "psci";
  332. cpu-idle-states = <&CPU_RETENTION_0_0 &CPU_SLEEP_0_0
  333. &CLUSTER_RETENTION_0 &CLUSTER_SLEEP_0>;
  334. };
  335. CPU7: cpu@10101 {
  336. device_type = "cpu";
  337. compatible = "arm,cortex-a57";
  338. reg = <0x0 0x10101>;
  339. enable-method = "psci";
  340. cpu-idle-states = <&CPU_RETENTION_0_0 &CPU_SLEEP_0_0
  341. &CLUSTER_RETENTION_0 &CLUSTER_SLEEP_0>;
  342. };
  343. CPU8: cpu@100000000 {
  344. device_type = "cpu";
  345. compatible = "arm,cortex-a53";
  346. reg = <0x1 0x0>;
  347. enable-method = "psci";
  348. cpu-idle-states = <&CPU_RETENTION_1_0 &CPU_SLEEP_1_0
  349. &CLUSTER_RETENTION_1 &CLUSTER_SLEEP_1>;
  350. };
  351. CPU9: cpu@100000001 {
  352. device_type = "cpu";
  353. compatible = "arm,cortex-a53";
  354. reg = <0x1 0x1>;
  355. enable-method = "psci";
  356. cpu-idle-states = <&CPU_RETENTION_1_0 &CPU_SLEEP_1_0
  357. &CLUSTER_RETENTION_1 &CLUSTER_SLEEP_1>;
  358. };
  359. CPU10: cpu@100000100 {
  360. device_type = "cpu";
  361. compatible = "arm,cortex-a53";
  362. reg = <0x1 0x100>;
  363. enable-method = "psci";
  364. cpu-idle-states = <&CPU_RETENTION_1_0 &CPU_SLEEP_1_0
  365. &CLUSTER_RETENTION_1 &CLUSTER_SLEEP_1>;
  366. };
  367. CPU11: cpu@100000101 {
  368. device_type = "cpu";
  369. compatible = "arm,cortex-a53";
  370. reg = <0x1 0x101>;
  371. enable-method = "psci";
  372. cpu-idle-states = <&CPU_RETENTION_1_0 &CPU_SLEEP_1_0
  373. &CLUSTER_RETENTION_1 &CLUSTER_SLEEP_1>;
  374. };
  375. CPU12: cpu@100010000 {
  376. device_type = "cpu";
  377. compatible = "arm,cortex-a53";
  378. reg = <0x1 0x10000>;
  379. enable-method = "psci";
  380. cpu-idle-states = <&CPU_RETENTION_1_0 &CPU_SLEEP_1_0
  381. &CLUSTER_RETENTION_1 &CLUSTER_SLEEP_1>;
  382. };
  383. CPU13: cpu@100010001 {
  384. device_type = "cpu";
  385. compatible = "arm,cortex-a53";
  386. reg = <0x1 0x10001>;
  387. enable-method = "psci";
  388. cpu-idle-states = <&CPU_RETENTION_1_0 &CPU_SLEEP_1_0
  389. &CLUSTER_RETENTION_1 &CLUSTER_SLEEP_1>;
  390. };
  391. CPU14: cpu@100010100 {
  392. device_type = "cpu";
  393. compatible = "arm,cortex-a53";
  394. reg = <0x1 0x10100>;
  395. enable-method = "psci";
  396. cpu-idle-states = <&CPU_RETENTION_1_0 &CPU_SLEEP_1_0
  397. &CLUSTER_RETENTION_1 &CLUSTER_SLEEP_1>;
  398. };
  399. CPU15: cpu@100010101 {
  400. device_type = "cpu";
  401. compatible = "arm,cortex-a53";
  402. reg = <0x1 0x10101>;
  403. enable-method = "psci";
  404. cpu-idle-states = <&CPU_RETENTION_1_0 &CPU_SLEEP_1_0
  405. &CLUSTER_RETENTION_1 &CLUSTER_SLEEP_1>;
  406. };
  407. idle-states {
  408. entry-method = "psci";
  409. CPU_RETENTION_0_0: cpu-retention-0-0 {
  410. compatible = "arm,idle-state";
  411. arm,psci-suspend-param = <0x0010000>;
  412. entry-latency-us = <20>;
  413. exit-latency-us = <40>;
  414. min-residency-us = <80>;
  415. };
  416. CLUSTER_RETENTION_0: cluster-retention-0 {
  417. compatible = "arm,idle-state";
  418. local-timer-stop;
  419. arm,psci-suspend-param = <0x1010000>;
  420. entry-latency-us = <50>;
  421. exit-latency-us = <100>;
  422. min-residency-us = <250>;
  423. wakeup-latency-us = <130>;
  424. };
  425. CPU_SLEEP_0_0: cpu-sleep-0-0 {
  426. compatible = "arm,idle-state";
  427. local-timer-stop;
  428. arm,psci-suspend-param = <0x0010000>;
  429. entry-latency-us = <250>;
  430. exit-latency-us = <500>;
  431. min-residency-us = <950>;
  432. };
  433. CLUSTER_SLEEP_0: cluster-sleep-0 {
  434. compatible = "arm,idle-state";
  435. local-timer-stop;
  436. arm,psci-suspend-param = <0x1010000>;
  437. entry-latency-us = <600>;
  438. exit-latency-us = <1100>;
  439. min-residency-us = <2700>;
  440. wakeup-latency-us = <1500>;
  441. };
  442. CPU_RETENTION_1_0: cpu-retention-1-0 {
  443. compatible = "arm,idle-state";
  444. arm,psci-suspend-param = <0x0010000>;
  445. entry-latency-us = <20>;
  446. exit-latency-us = <40>;
  447. min-residency-us = <90>;
  448. };
  449. CLUSTER_RETENTION_1: cluster-retention-1 {
  450. compatible = "arm,idle-state";
  451. local-timer-stop;
  452. arm,psci-suspend-param = <0x1010000>;
  453. entry-latency-us = <50>;
  454. exit-latency-us = <100>;
  455. min-residency-us = <270>;
  456. wakeup-latency-us = <100>;
  457. };
  458. CPU_SLEEP_1_0: cpu-sleep-1-0 {
  459. compatible = "arm,idle-state";
  460. local-timer-stop;
  461. arm,psci-suspend-param = <0x0010000>;
  462. entry-latency-us = <70>;
  463. exit-latency-us = <100>;
  464. min-residency-us = <300>;
  465. wakeup-latency-us = <150>;
  466. };
  467. CLUSTER_SLEEP_1: cluster-sleep-1 {
  468. compatible = "arm,idle-state";
  469. local-timer-stop;
  470. arm,psci-suspend-param = <0x1010000>;
  471. entry-latency-us = <500>;
  472. exit-latency-us = <1200>;
  473. min-residency-us = <3500>;
  474. wakeup-latency-us = <1300>;
  475. };
  476. };
  477. };
  478. Example 2 (ARM 32-bit, 8-cpu system, two clusters):
  479. cpus {
  480. #size-cells = <0>;
  481. #address-cells = <1>;
  482. CPU0: cpu@0 {
  483. device_type = "cpu";
  484. compatible = "arm,cortex-a15";
  485. reg = <0x0>;
  486. cpu-idle-states = <&CPU_SLEEP_0_0 &CLUSTER_SLEEP_0>;
  487. };
  488. CPU1: cpu@1 {
  489. device_type = "cpu";
  490. compatible = "arm,cortex-a15";
  491. reg = <0x1>;
  492. cpu-idle-states = <&CPU_SLEEP_0_0 &CLUSTER_SLEEP_0>;
  493. };
  494. CPU2: cpu@2 {
  495. device_type = "cpu";
  496. compatible = "arm,cortex-a15";
  497. reg = <0x2>;
  498. cpu-idle-states = <&CPU_SLEEP_0_0 &CLUSTER_SLEEP_0>;
  499. };
  500. CPU3: cpu@3 {
  501. device_type = "cpu";
  502. compatible = "arm,cortex-a15";
  503. reg = <0x3>;
  504. cpu-idle-states = <&CPU_SLEEP_0_0 &CLUSTER_SLEEP_0>;
  505. };
  506. CPU4: cpu@100 {
  507. device_type = "cpu";
  508. compatible = "arm,cortex-a7";
  509. reg = <0x100>;
  510. cpu-idle-states = <&CPU_SLEEP_1_0 &CLUSTER_SLEEP_1>;
  511. };
  512. CPU5: cpu@101 {
  513. device_type = "cpu";
  514. compatible = "arm,cortex-a7";
  515. reg = <0x101>;
  516. cpu-idle-states = <&CPU_SLEEP_1_0 &CLUSTER_SLEEP_1>;
  517. };
  518. CPU6: cpu@102 {
  519. device_type = "cpu";
  520. compatible = "arm,cortex-a7";
  521. reg = <0x102>;
  522. cpu-idle-states = <&CPU_SLEEP_1_0 &CLUSTER_SLEEP_1>;
  523. };
  524. CPU7: cpu@103 {
  525. device_type = "cpu";
  526. compatible = "arm,cortex-a7";
  527. reg = <0x103>;
  528. cpu-idle-states = <&CPU_SLEEP_1_0 &CLUSTER_SLEEP_1>;
  529. };
  530. idle-states {
  531. CPU_SLEEP_0_0: cpu-sleep-0-0 {
  532. compatible = "arm,idle-state";
  533. local-timer-stop;
  534. entry-latency-us = <200>;
  535. exit-latency-us = <100>;
  536. min-residency-us = <400>;
  537. wakeup-latency-us = <250>;
  538. };
  539. CLUSTER_SLEEP_0: cluster-sleep-0 {
  540. compatible = "arm,idle-state";
  541. local-timer-stop;
  542. entry-latency-us = <500>;
  543. exit-latency-us = <1500>;
  544. min-residency-us = <2500>;
  545. wakeup-latency-us = <1700>;
  546. };
  547. CPU_SLEEP_1_0: cpu-sleep-1-0 {
  548. compatible = "arm,idle-state";
  549. local-timer-stop;
  550. entry-latency-us = <300>;
  551. exit-latency-us = <500>;
  552. min-residency-us = <900>;
  553. wakeup-latency-us = <600>;
  554. };
  555. CLUSTER_SLEEP_1: cluster-sleep-1 {
  556. compatible = "arm,idle-state";
  557. local-timer-stop;
  558. entry-latency-us = <800>;
  559. exit-latency-us = <2000>;
  560. min-residency-us = <6500>;
  561. wakeup-latency-us = <2300>;
  562. };
  563. };
  564. };
  565. ===========================================
  566. 5 - References
  567. ===========================================
  568. [1] ARM Linux Kernel documentation - CPUs bindings
  569. Documentation/devicetree/bindings/arm/cpus.txt
  570. [2] ARM Linux Kernel documentation - PSCI bindings
  571. Documentation/devicetree/bindings/arm/psci.txt
  572. [3] ARM Server Base System Architecture (SBSA)
  573. http://infocenter.arm.com/help/index.jsp
  574. [4] ARM Architecture Reference Manuals
  575. http://infocenter.arm.com/help/index.jsp
  576. [5] ePAPR standard
  577. https://www.power.org/documentation/epapr-version-1-1/