cpus.txt 12 KB

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