cpus.txt 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439
  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-m0"
  126. "arm,cortex-m0+"
  127. "arm,cortex-m1"
  128. "arm,cortex-m3"
  129. "arm,cortex-m4"
  130. "arm,cortex-r4"
  131. "arm,cortex-r5"
  132. "arm,cortex-r7"
  133. "brcm,brahma-b15"
  134. "cavium,thunder"
  135. "faraday,fa526"
  136. "intel,sa110"
  137. "intel,sa1100"
  138. "marvell,feroceon"
  139. "marvell,mohawk"
  140. "marvell,pj4a"
  141. "marvell,pj4b"
  142. "marvell,sheeva-v5"
  143. "nvidia,tegra132-denver"
  144. "qcom,krait"
  145. "qcom,scorpion"
  146. - enable-method
  147. Value type: <stringlist>
  148. Usage and definition depend on ARM architecture version.
  149. # On ARM v8 64-bit this property is required and must
  150. be one of:
  151. "psci"
  152. "spin-table"
  153. # On ARM 32-bit systems this property is optional and
  154. can be one of:
  155. "allwinner,sun6i-a31"
  156. "allwinner,sun8i-a23"
  157. "arm,psci"
  158. "brcm,brahma-b15"
  159. "marvell,armada-375-smp"
  160. "marvell,armada-380-smp"
  161. "marvell,armada-390-smp"
  162. "marvell,armada-xp-smp"
  163. "qcom,gcc-msm8660"
  164. "qcom,kpss-acc-v1"
  165. "qcom,kpss-acc-v2"
  166. "rockchip,rk3066-smp"
  167. - cpu-release-addr
  168. Usage: required for systems that have an "enable-method"
  169. property value of "spin-table".
  170. Value type: <prop-encoded-array>
  171. Definition:
  172. # On ARM v8 64-bit systems must be a two cell
  173. property identifying a 64-bit zero-initialised
  174. memory location.
  175. - qcom,saw
  176. Usage: required for systems that have an "enable-method"
  177. property value of "qcom,kpss-acc-v1" or
  178. "qcom,kpss-acc-v2"
  179. Value type: <phandle>
  180. Definition: Specifies the SAW[1] node associated with this CPU.
  181. - qcom,acc
  182. Usage: required for systems that have an "enable-method"
  183. property value of "qcom,kpss-acc-v1" or
  184. "qcom,kpss-acc-v2"
  185. Value type: <phandle>
  186. Definition: Specifies the ACC[2] node associated with this CPU.
  187. - cpu-idle-states
  188. Usage: Optional
  189. Value type: <prop-encoded-array>
  190. Definition:
  191. # List of phandles to idle state nodes supported
  192. by this cpu [3].
  193. - rockchip,pmu
  194. Usage: optional for systems that have an "enable-method"
  195. property value of "rockchip,rk3066-smp"
  196. While optional, it is the preferred way to get access to
  197. the cpu-core power-domains.
  198. Value type: <phandle>
  199. Definition: Specifies the syscon node controlling the cpu core
  200. power domains.
  201. Example 1 (dual-cluster big.LITTLE system 32-bit):
  202. cpus {
  203. #size-cells = <0>;
  204. #address-cells = <1>;
  205. cpu@0 {
  206. device_type = "cpu";
  207. compatible = "arm,cortex-a15";
  208. reg = <0x0>;
  209. };
  210. cpu@1 {
  211. device_type = "cpu";
  212. compatible = "arm,cortex-a15";
  213. reg = <0x1>;
  214. };
  215. cpu@100 {
  216. device_type = "cpu";
  217. compatible = "arm,cortex-a7";
  218. reg = <0x100>;
  219. };
  220. cpu@101 {
  221. device_type = "cpu";
  222. compatible = "arm,cortex-a7";
  223. reg = <0x101>;
  224. };
  225. };
  226. Example 2 (Cortex-A8 uniprocessor 32-bit system):
  227. cpus {
  228. #size-cells = <0>;
  229. #address-cells = <1>;
  230. cpu@0 {
  231. device_type = "cpu";
  232. compatible = "arm,cortex-a8";
  233. reg = <0x0>;
  234. };
  235. };
  236. Example 3 (ARM 926EJ-S uniprocessor 32-bit system):
  237. cpus {
  238. #size-cells = <0>;
  239. #address-cells = <1>;
  240. cpu@0 {
  241. device_type = "cpu";
  242. compatible = "arm,arm926ej-s";
  243. reg = <0x0>;
  244. };
  245. };
  246. Example 4 (ARM Cortex-A57 64-bit system):
  247. cpus {
  248. #size-cells = <0>;
  249. #address-cells = <2>;
  250. cpu@0 {
  251. device_type = "cpu";
  252. compatible = "arm,cortex-a57";
  253. reg = <0x0 0x0>;
  254. enable-method = "spin-table";
  255. cpu-release-addr = <0 0x20000000>;
  256. };
  257. cpu@1 {
  258. device_type = "cpu";
  259. compatible = "arm,cortex-a57";
  260. reg = <0x0 0x1>;
  261. enable-method = "spin-table";
  262. cpu-release-addr = <0 0x20000000>;
  263. };
  264. cpu@100 {
  265. device_type = "cpu";
  266. compatible = "arm,cortex-a57";
  267. reg = <0x0 0x100>;
  268. enable-method = "spin-table";
  269. cpu-release-addr = <0 0x20000000>;
  270. };
  271. cpu@101 {
  272. device_type = "cpu";
  273. compatible = "arm,cortex-a57";
  274. reg = <0x0 0x101>;
  275. enable-method = "spin-table";
  276. cpu-release-addr = <0 0x20000000>;
  277. };
  278. cpu@10000 {
  279. device_type = "cpu";
  280. compatible = "arm,cortex-a57";
  281. reg = <0x0 0x10000>;
  282. enable-method = "spin-table";
  283. cpu-release-addr = <0 0x20000000>;
  284. };
  285. cpu@10001 {
  286. device_type = "cpu";
  287. compatible = "arm,cortex-a57";
  288. reg = <0x0 0x10001>;
  289. enable-method = "spin-table";
  290. cpu-release-addr = <0 0x20000000>;
  291. };
  292. cpu@10100 {
  293. device_type = "cpu";
  294. compatible = "arm,cortex-a57";
  295. reg = <0x0 0x10100>;
  296. enable-method = "spin-table";
  297. cpu-release-addr = <0 0x20000000>;
  298. };
  299. cpu@10101 {
  300. device_type = "cpu";
  301. compatible = "arm,cortex-a57";
  302. reg = <0x0 0x10101>;
  303. enable-method = "spin-table";
  304. cpu-release-addr = <0 0x20000000>;
  305. };
  306. cpu@100000000 {
  307. device_type = "cpu";
  308. compatible = "arm,cortex-a57";
  309. reg = <0x1 0x0>;
  310. enable-method = "spin-table";
  311. cpu-release-addr = <0 0x20000000>;
  312. };
  313. cpu@100000001 {
  314. device_type = "cpu";
  315. compatible = "arm,cortex-a57";
  316. reg = <0x1 0x1>;
  317. enable-method = "spin-table";
  318. cpu-release-addr = <0 0x20000000>;
  319. };
  320. cpu@100000100 {
  321. device_type = "cpu";
  322. compatible = "arm,cortex-a57";
  323. reg = <0x1 0x100>;
  324. enable-method = "spin-table";
  325. cpu-release-addr = <0 0x20000000>;
  326. };
  327. cpu@100000101 {
  328. device_type = "cpu";
  329. compatible = "arm,cortex-a57";
  330. reg = <0x1 0x101>;
  331. enable-method = "spin-table";
  332. cpu-release-addr = <0 0x20000000>;
  333. };
  334. cpu@100010000 {
  335. device_type = "cpu";
  336. compatible = "arm,cortex-a57";
  337. reg = <0x1 0x10000>;
  338. enable-method = "spin-table";
  339. cpu-release-addr = <0 0x20000000>;
  340. };
  341. cpu@100010001 {
  342. device_type = "cpu";
  343. compatible = "arm,cortex-a57";
  344. reg = <0x1 0x10001>;
  345. enable-method = "spin-table";
  346. cpu-release-addr = <0 0x20000000>;
  347. };
  348. cpu@100010100 {
  349. device_type = "cpu";
  350. compatible = "arm,cortex-a57";
  351. reg = <0x1 0x10100>;
  352. enable-method = "spin-table";
  353. cpu-release-addr = <0 0x20000000>;
  354. };
  355. cpu@100010101 {
  356. device_type = "cpu";
  357. compatible = "arm,cortex-a57";
  358. reg = <0x1 0x10101>;
  359. enable-method = "spin-table";
  360. cpu-release-addr = <0 0x20000000>;
  361. };
  362. };
  363. --
  364. [1] arm/msm/qcom,saw2.txt
  365. [2] arm/msm/qcom,kpss-acc.txt
  366. [3] ARM Linux kernel documentation - idle states bindings
  367. Documentation/devicetree/bindings/arm/idle-states.txt