cpus.txt 9.9 KB

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