cpus.txt 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467
  1. =================
  2. ARM CPUs bindings
  3. =================
  4. The device tree allows to describe the layout of CPUs in a system through
  5. the "cpus" node, which in turn contains a number of subnodes (ie "cpu")
  6. defining properties for every cpu.
  7. Bindings for CPU nodes follow the ePAPR v1.1 standard, available from:
  8. https://www.power.org/documentation/epapr-version-1-1/
  9. with updates for 32-bit and 64-bit ARM systems provided in this document.
  10. ================================
  11. Convention used in this document
  12. ================================
  13. This document follows the conventions described in the ePAPR v1.1, with
  14. the addition:
  15. - square brackets define bitfields, eg reg[7:0] value of the bitfield in
  16. the reg property contained in bits 7 down to 0
  17. =====================================
  18. cpus and cpu node bindings definition
  19. =====================================
  20. The ARM architecture, in accordance with the ePAPR, requires the cpus and cpu
  21. nodes to be present and contain the properties described below.
  22. - cpus node
  23. Description: Container of cpu nodes
  24. The node name must be "cpus".
  25. A cpus node must define the following properties:
  26. - #address-cells
  27. Usage: required
  28. Value type: <u32>
  29. Definition depends on ARM architecture version and
  30. configuration:
  31. # On uniprocessor ARM architectures previous to v7
  32. value must be 1, to enable a simple enumeration
  33. scheme for processors that do not have a HW CPU
  34. identification register.
  35. # On 32-bit ARM 11 MPcore, ARM v7 or later systems
  36. value must be 1, that corresponds to CPUID/MPIDR
  37. registers sizes.
  38. # On ARM v8 64-bit systems value should be set to 2,
  39. that corresponds to the MPIDR_EL1 register size.
  40. If MPIDR_EL1[63:32] value is equal to 0 on all CPUs
  41. in the system, #address-cells can be set to 1, since
  42. MPIDR_EL1[63:32] bits are not used for CPUs
  43. identification.
  44. - #size-cells
  45. Usage: required
  46. Value type: <u32>
  47. Definition: must be set to 0
  48. - cpu node
  49. Description: Describes a CPU in an ARM based system
  50. PROPERTIES
  51. - device_type
  52. Usage: required
  53. Value type: <string>
  54. Definition: must be "cpu"
  55. - reg
  56. Usage and definition depend on ARM architecture version and
  57. configuration:
  58. # On uniprocessor ARM architectures previous to v7
  59. this property is required and must be set to 0.
  60. # On ARM 11 MPcore based systems this property is
  61. required and matches the CPUID[11:0] register bits.
  62. Bits [11:0] in the reg cell must be set to
  63. bits [11:0] in CPU ID register.
  64. All other bits in the reg cell must be set to 0.
  65. # On 32-bit ARM v7 or later systems this property is
  66. required and matches the CPU MPIDR[23:0] register
  67. bits.
  68. Bits [23:0] in the reg cell must be set to
  69. bits [23:0] in MPIDR.
  70. All other bits in the reg cell must be set to 0.
  71. # On ARM v8 64-bit systems this property is required
  72. and matches the MPIDR_EL1 register affinity bits.
  73. * If cpus node's #address-cells property is set to 2
  74. The first reg cell bits [7:0] must be set to
  75. bits [39:32] of MPIDR_EL1.
  76. The second reg cell bits [23:0] must be set to
  77. bits [23:0] of MPIDR_EL1.
  78. * If cpus node's #address-cells property is set to 1
  79. The reg cell bits [23:0] must be set to bits [23:0]
  80. of MPIDR_EL1.
  81. All other bits in the reg cells must be set to 0.
  82. - compatible:
  83. Usage: required
  84. Value type: <string>
  85. Definition: should be one of:
  86. "arm,arm710t"
  87. "arm,arm720t"
  88. "arm,arm740t"
  89. "arm,arm7ej-s"
  90. "arm,arm7tdmi"
  91. "arm,arm7tdmi-s"
  92. "arm,arm9es"
  93. "arm,arm9ej-s"
  94. "arm,arm920t"
  95. "arm,arm922t"
  96. "arm,arm925"
  97. "arm,arm926e-s"
  98. "arm,arm926ej-s"
  99. "arm,arm940t"
  100. "arm,arm946e-s"
  101. "arm,arm966e-s"
  102. "arm,arm968e-s"
  103. "arm,arm9tdmi"
  104. "arm,arm1020e"
  105. "arm,arm1020t"
  106. "arm,arm1022e"
  107. "arm,arm1026ej-s"
  108. "arm,arm1136j-s"
  109. "arm,arm1136jf-s"
  110. "arm,arm1156t2-s"
  111. "arm,arm1156t2f-s"
  112. "arm,arm1176jzf"
  113. "arm,arm1176jz-s"
  114. "arm,arm1176jzf-s"
  115. "arm,arm11mpcore"
  116. "arm,cortex-a5"
  117. "arm,cortex-a7"
  118. "arm,cortex-a8"
  119. "arm,cortex-a9"
  120. "arm,cortex-a12"
  121. "arm,cortex-a15"
  122. "arm,cortex-a17"
  123. "arm,cortex-a53"
  124. "arm,cortex-a57"
  125. "arm,cortex-a72"
  126. "arm,cortex-m0"
  127. "arm,cortex-m0+"
  128. "arm,cortex-m1"
  129. "arm,cortex-m3"
  130. "arm,cortex-m4"
  131. "arm,cortex-r4"
  132. "arm,cortex-r5"
  133. "arm,cortex-r7"
  134. "brcm,brahma-b15"
  135. "brcm,vulcan"
  136. "cavium,thunder"
  137. "faraday,fa526"
  138. "intel,sa110"
  139. "intel,sa1100"
  140. "marvell,feroceon"
  141. "marvell,mohawk"
  142. "marvell,pj4a"
  143. "marvell,pj4b"
  144. "marvell,sheeva-v5"
  145. "nvidia,tegra132-denver"
  146. "qcom,krait"
  147. "qcom,kryo"
  148. "qcom,scorpion"
  149. - enable-method
  150. Value type: <stringlist>
  151. Usage and definition depend on ARM architecture version.
  152. # On ARM v8 64-bit this property is required and must
  153. be one of:
  154. "psci"
  155. "spin-table"
  156. # On ARM 32-bit systems this property is optional and
  157. can be one of:
  158. "allwinner,sun6i-a31"
  159. "allwinner,sun8i-a23"
  160. "arm,realview-smp"
  161. "brcm,bcm11351-cpu-method"
  162. "brcm,bcm23550"
  163. "brcm,bcm-nsp-smp"
  164. "brcm,brahma-b15"
  165. "marvell,armada-375-smp"
  166. "marvell,armada-380-smp"
  167. "marvell,armada-390-smp"
  168. "marvell,armada-xp-smp"
  169. "mediatek,mt6589-smp"
  170. "mediatek,mt81xx-tz-smp"
  171. "qcom,gcc-msm8660"
  172. "qcom,kpss-acc-v1"
  173. "qcom,kpss-acc-v2"
  174. "renesas,apmu"
  175. "rockchip,rk3036-smp"
  176. "rockchip,rk3066-smp"
  177. "ste,dbx500-smp"
  178. - cpu-release-addr
  179. Usage: required for systems that have an "enable-method"
  180. property value of "spin-table".
  181. Value type: <prop-encoded-array>
  182. Definition:
  183. # On ARM v8 64-bit systems must be a two cell
  184. property identifying a 64-bit zero-initialised
  185. memory location.
  186. - qcom,saw
  187. Usage: required for systems that have an "enable-method"
  188. property value of "qcom,kpss-acc-v1" or
  189. "qcom,kpss-acc-v2"
  190. Value type: <phandle>
  191. Definition: Specifies the SAW[1] node associated with this CPU.
  192. - qcom,acc
  193. Usage: required for systems that have an "enable-method"
  194. property value of "qcom,kpss-acc-v1" or
  195. "qcom,kpss-acc-v2"
  196. Value type: <phandle>
  197. Definition: Specifies the ACC[2] node associated with this CPU.
  198. - cpu-idle-states
  199. Usage: Optional
  200. Value type: <prop-encoded-array>
  201. Definition:
  202. # List of phandles to idle state nodes supported
  203. by this cpu [3].
  204. - rockchip,pmu
  205. Usage: optional for systems that have an "enable-method"
  206. property value of "rockchip,rk3066-smp"
  207. While optional, it is the preferred way to get access to
  208. the cpu-core power-domains.
  209. Value type: <phandle>
  210. Definition: Specifies the syscon node controlling the cpu core
  211. power domains.
  212. - dynamic-power-coefficient
  213. Usage: optional
  214. Value type: <prop-encoded-array>
  215. Definition: A u32 value that represents the running time dynamic
  216. power coefficient in units of mW/MHz/uV^2. The
  217. coefficient can either be calculated from power
  218. measurements or derived by analysis.
  219. The dynamic power consumption of the CPU is
  220. proportional to the square of the Voltage (V) and
  221. the clock frequency (f). The coefficient is used to
  222. calculate the dynamic power as below -
  223. Pdyn = dynamic-power-coefficient * V^2 * f
  224. where voltage is in uV, frequency is in MHz.
  225. Example 1 (dual-cluster big.LITTLE system 32-bit):
  226. cpus {
  227. #size-cells = <0>;
  228. #address-cells = <1>;
  229. cpu@0 {
  230. device_type = "cpu";
  231. compatible = "arm,cortex-a15";
  232. reg = <0x0>;
  233. };
  234. cpu@1 {
  235. device_type = "cpu";
  236. compatible = "arm,cortex-a15";
  237. reg = <0x1>;
  238. };
  239. cpu@100 {
  240. device_type = "cpu";
  241. compatible = "arm,cortex-a7";
  242. reg = <0x100>;
  243. };
  244. cpu@101 {
  245. device_type = "cpu";
  246. compatible = "arm,cortex-a7";
  247. reg = <0x101>;
  248. };
  249. };
  250. Example 2 (Cortex-A8 uniprocessor 32-bit system):
  251. cpus {
  252. #size-cells = <0>;
  253. #address-cells = <1>;
  254. cpu@0 {
  255. device_type = "cpu";
  256. compatible = "arm,cortex-a8";
  257. reg = <0x0>;
  258. };
  259. };
  260. Example 3 (ARM 926EJ-S uniprocessor 32-bit system):
  261. cpus {
  262. #size-cells = <0>;
  263. #address-cells = <1>;
  264. cpu@0 {
  265. device_type = "cpu";
  266. compatible = "arm,arm926ej-s";
  267. reg = <0x0>;
  268. };
  269. };
  270. Example 4 (ARM Cortex-A57 64-bit system):
  271. cpus {
  272. #size-cells = <0>;
  273. #address-cells = <2>;
  274. cpu@0 {
  275. device_type = "cpu";
  276. compatible = "arm,cortex-a57";
  277. reg = <0x0 0x0>;
  278. enable-method = "spin-table";
  279. cpu-release-addr = <0 0x20000000>;
  280. };
  281. cpu@1 {
  282. device_type = "cpu";
  283. compatible = "arm,cortex-a57";
  284. reg = <0x0 0x1>;
  285. enable-method = "spin-table";
  286. cpu-release-addr = <0 0x20000000>;
  287. };
  288. cpu@100 {
  289. device_type = "cpu";
  290. compatible = "arm,cortex-a57";
  291. reg = <0x0 0x100>;
  292. enable-method = "spin-table";
  293. cpu-release-addr = <0 0x20000000>;
  294. };
  295. cpu@101 {
  296. device_type = "cpu";
  297. compatible = "arm,cortex-a57";
  298. reg = <0x0 0x101>;
  299. enable-method = "spin-table";
  300. cpu-release-addr = <0 0x20000000>;
  301. };
  302. cpu@10000 {
  303. device_type = "cpu";
  304. compatible = "arm,cortex-a57";
  305. reg = <0x0 0x10000>;
  306. enable-method = "spin-table";
  307. cpu-release-addr = <0 0x20000000>;
  308. };
  309. cpu@10001 {
  310. device_type = "cpu";
  311. compatible = "arm,cortex-a57";
  312. reg = <0x0 0x10001>;
  313. enable-method = "spin-table";
  314. cpu-release-addr = <0 0x20000000>;
  315. };
  316. cpu@10100 {
  317. device_type = "cpu";
  318. compatible = "arm,cortex-a57";
  319. reg = <0x0 0x10100>;
  320. enable-method = "spin-table";
  321. cpu-release-addr = <0 0x20000000>;
  322. };
  323. cpu@10101 {
  324. device_type = "cpu";
  325. compatible = "arm,cortex-a57";
  326. reg = <0x0 0x10101>;
  327. enable-method = "spin-table";
  328. cpu-release-addr = <0 0x20000000>;
  329. };
  330. cpu@100000000 {
  331. device_type = "cpu";
  332. compatible = "arm,cortex-a57";
  333. reg = <0x1 0x0>;
  334. enable-method = "spin-table";
  335. cpu-release-addr = <0 0x20000000>;
  336. };
  337. cpu@100000001 {
  338. device_type = "cpu";
  339. compatible = "arm,cortex-a57";
  340. reg = <0x1 0x1>;
  341. enable-method = "spin-table";
  342. cpu-release-addr = <0 0x20000000>;
  343. };
  344. cpu@100000100 {
  345. device_type = "cpu";
  346. compatible = "arm,cortex-a57";
  347. reg = <0x1 0x100>;
  348. enable-method = "spin-table";
  349. cpu-release-addr = <0 0x20000000>;
  350. };
  351. cpu@100000101 {
  352. device_type = "cpu";
  353. compatible = "arm,cortex-a57";
  354. reg = <0x1 0x101>;
  355. enable-method = "spin-table";
  356. cpu-release-addr = <0 0x20000000>;
  357. };
  358. cpu@100010000 {
  359. device_type = "cpu";
  360. compatible = "arm,cortex-a57";
  361. reg = <0x1 0x10000>;
  362. enable-method = "spin-table";
  363. cpu-release-addr = <0 0x20000000>;
  364. };
  365. cpu@100010001 {
  366. device_type = "cpu";
  367. compatible = "arm,cortex-a57";
  368. reg = <0x1 0x10001>;
  369. enable-method = "spin-table";
  370. cpu-release-addr = <0 0x20000000>;
  371. };
  372. cpu@100010100 {
  373. device_type = "cpu";
  374. compatible = "arm,cortex-a57";
  375. reg = <0x1 0x10100>;
  376. enable-method = "spin-table";
  377. cpu-release-addr = <0 0x20000000>;
  378. };
  379. cpu@100010101 {
  380. device_type = "cpu";
  381. compatible = "arm,cortex-a57";
  382. reg = <0x1 0x10101>;
  383. enable-method = "spin-table";
  384. cpu-release-addr = <0 0x20000000>;
  385. };
  386. };
  387. --
  388. [1] arm/msm/qcom,saw2.txt
  389. [2] arm/msm/qcom,kpss-acc.txt
  390. [3] ARM Linux kernel documentation - idle states bindings
  391. Documentation/devicetree/bindings/arm/idle-states.txt