cpus.txt 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  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-a15"
  121. "arm,cortex-a53"
  122. "arm,cortex-a57"
  123. "arm,cortex-m0"
  124. "arm,cortex-m0+"
  125. "arm,cortex-m1"
  126. "arm,cortex-m3"
  127. "arm,cortex-m4"
  128. "arm,cortex-r4"
  129. "arm,cortex-r5"
  130. "arm,cortex-r7"
  131. "faraday,fa526"
  132. "intel,sa110"
  133. "intel,sa1100"
  134. "marvell,feroceon"
  135. "marvell,mohawk"
  136. "marvell,pj4a"
  137. "marvell,pj4b"
  138. "marvell,sheeva-v5"
  139. "qcom,krait"
  140. "qcom,scorpion"
  141. - enable-method
  142. Value type: <stringlist>
  143. Usage and definition depend on ARM architecture version.
  144. # On ARM v8 64-bit this property is required and must
  145. be one of:
  146. "spin-table"
  147. "psci"
  148. # On ARM 32-bit systems this property is optional.
  149. - cpu-release-addr
  150. Usage: required for systems that have an "enable-method"
  151. property value of "spin-table".
  152. Value type: <prop-encoded-array>
  153. Definition:
  154. # On ARM v8 64-bit systems must be a two cell
  155. property identifying a 64-bit zero-initialised
  156. memory location.
  157. Example 1 (dual-cluster big.LITTLE system 32-bit):
  158. cpus {
  159. #size-cells = <0>;
  160. #address-cells = <1>;
  161. cpu@0 {
  162. device_type = "cpu";
  163. compatible = "arm,cortex-a15";
  164. reg = <0x0>;
  165. };
  166. cpu@1 {
  167. device_type = "cpu";
  168. compatible = "arm,cortex-a15";
  169. reg = <0x1>;
  170. };
  171. cpu@100 {
  172. device_type = "cpu";
  173. compatible = "arm,cortex-a7";
  174. reg = <0x100>;
  175. };
  176. cpu@101 {
  177. device_type = "cpu";
  178. compatible = "arm,cortex-a7";
  179. reg = <0x101>;
  180. };
  181. };
  182. Example 2 (Cortex-A8 uniprocessor 32-bit system):
  183. cpus {
  184. #size-cells = <0>;
  185. #address-cells = <1>;
  186. cpu@0 {
  187. device_type = "cpu";
  188. compatible = "arm,cortex-a8";
  189. reg = <0x0>;
  190. };
  191. };
  192. Example 3 (ARM 926EJ-S uniprocessor 32-bit system):
  193. cpus {
  194. #size-cells = <0>;
  195. #address-cells = <1>;
  196. cpu@0 {
  197. device_type = "cpu";
  198. compatible = "arm,arm926ej-s";
  199. reg = <0x0>;
  200. };
  201. };
  202. Example 4 (ARM Cortex-A57 64-bit system):
  203. cpus {
  204. #size-cells = <0>;
  205. #address-cells = <2>;
  206. cpu@0 {
  207. device_type = "cpu";
  208. compatible = "arm,cortex-a57";
  209. reg = <0x0 0x0>;
  210. enable-method = "spin-table";
  211. cpu-release-addr = <0 0x20000000>;
  212. };
  213. cpu@1 {
  214. device_type = "cpu";
  215. compatible = "arm,cortex-a57";
  216. reg = <0x0 0x1>;
  217. enable-method = "spin-table";
  218. cpu-release-addr = <0 0x20000000>;
  219. };
  220. cpu@100 {
  221. device_type = "cpu";
  222. compatible = "arm,cortex-a57";
  223. reg = <0x0 0x100>;
  224. enable-method = "spin-table";
  225. cpu-release-addr = <0 0x20000000>;
  226. };
  227. cpu@101 {
  228. device_type = "cpu";
  229. compatible = "arm,cortex-a57";
  230. reg = <0x0 0x101>;
  231. enable-method = "spin-table";
  232. cpu-release-addr = <0 0x20000000>;
  233. };
  234. cpu@10000 {
  235. device_type = "cpu";
  236. compatible = "arm,cortex-a57";
  237. reg = <0x0 0x10000>;
  238. enable-method = "spin-table";
  239. cpu-release-addr = <0 0x20000000>;
  240. };
  241. cpu@10001 {
  242. device_type = "cpu";
  243. compatible = "arm,cortex-a57";
  244. reg = <0x0 0x10001>;
  245. enable-method = "spin-table";
  246. cpu-release-addr = <0 0x20000000>;
  247. };
  248. cpu@10100 {
  249. device_type = "cpu";
  250. compatible = "arm,cortex-a57";
  251. reg = <0x0 0x10100>;
  252. enable-method = "spin-table";
  253. cpu-release-addr = <0 0x20000000>;
  254. };
  255. cpu@10101 {
  256. device_type = "cpu";
  257. compatible = "arm,cortex-a57";
  258. reg = <0x0 0x10101>;
  259. enable-method = "spin-table";
  260. cpu-release-addr = <0 0x20000000>;
  261. };
  262. cpu@100000000 {
  263. device_type = "cpu";
  264. compatible = "arm,cortex-a57";
  265. reg = <0x1 0x0>;
  266. enable-method = "spin-table";
  267. cpu-release-addr = <0 0x20000000>;
  268. };
  269. cpu@100000001 {
  270. device_type = "cpu";
  271. compatible = "arm,cortex-a57";
  272. reg = <0x1 0x1>;
  273. enable-method = "spin-table";
  274. cpu-release-addr = <0 0x20000000>;
  275. };
  276. cpu@100000100 {
  277. device_type = "cpu";
  278. compatible = "arm,cortex-a57";
  279. reg = <0x1 0x100>;
  280. enable-method = "spin-table";
  281. cpu-release-addr = <0 0x20000000>;
  282. };
  283. cpu@100000101 {
  284. device_type = "cpu";
  285. compatible = "arm,cortex-a57";
  286. reg = <0x1 0x101>;
  287. enable-method = "spin-table";
  288. cpu-release-addr = <0 0x20000000>;
  289. };
  290. cpu@100010000 {
  291. device_type = "cpu";
  292. compatible = "arm,cortex-a57";
  293. reg = <0x1 0x10000>;
  294. enable-method = "spin-table";
  295. cpu-release-addr = <0 0x20000000>;
  296. };
  297. cpu@100010001 {
  298. device_type = "cpu";
  299. compatible = "arm,cortex-a57";
  300. reg = <0x1 0x10001>;
  301. enable-method = "spin-table";
  302. cpu-release-addr = <0 0x20000000>;
  303. };
  304. cpu@100010100 {
  305. device_type = "cpu";
  306. compatible = "arm,cortex-a57";
  307. reg = <0x1 0x10100>;
  308. enable-method = "spin-table";
  309. cpu-release-addr = <0 0x20000000>;
  310. };
  311. cpu@100010101 {
  312. device_type = "cpu";
  313. compatible = "arm,cortex-a57";
  314. reg = <0x1 0x10101>;
  315. enable-method = "spin-table";
  316. cpu-release-addr = <0 0x20000000>;
  317. };
  318. };