tc.dts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567
  1. /*
  2. * Copyright (c) 2020-2022, Arm Limited. All rights reserved.
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. */
  6. /dts-v1/;
  7. / {
  8. compatible = "arm,tc";
  9. interrupt-parent = <&gic>;
  10. #address-cells = <2>;
  11. #size-cells = <2>;
  12. aliases {
  13. serial0 = &soc_uart0;
  14. };
  15. chosen {
  16. stdout-path = "serial0:115200n8";
  17. };
  18. cpus {
  19. #address-cells = <1>;
  20. #size-cells = <0>;
  21. cpu-map {
  22. cluster0 {
  23. core0 {
  24. cpu = <&CPU0>;
  25. };
  26. core1 {
  27. cpu = <&CPU1>;
  28. };
  29. core2 {
  30. cpu = <&CPU2>;
  31. };
  32. core3 {
  33. cpu = <&CPU3>;
  34. };
  35. core4 {
  36. cpu = <&CPU4>;
  37. };
  38. core5 {
  39. cpu = <&CPU5>;
  40. };
  41. core6 {
  42. cpu = <&CPU6>;
  43. };
  44. core7 {
  45. cpu = <&CPU7>;
  46. };
  47. };
  48. };
  49. /*
  50. * The timings below are just to demonstrate working cpuidle.
  51. * These values may be inaccurate.
  52. */
  53. idle-states {
  54. entry-method = "arm,psci";
  55. CPU_SLEEP_0: cpu-sleep-0 {
  56. compatible = "arm,idle-state";
  57. arm,psci-suspend-param = <0x0010000>;
  58. local-timer-stop;
  59. entry-latency-us = <300>;
  60. exit-latency-us = <1200>;
  61. min-residency-us = <2000>;
  62. };
  63. CLUSTER_SLEEP_0: cluster-sleep-0 {
  64. compatible = "arm,idle-state";
  65. arm,psci-suspend-param = <0x1010000>;
  66. local-timer-stop;
  67. entry-latency-us = <400>;
  68. exit-latency-us = <1200>;
  69. min-residency-us = <2500>;
  70. };
  71. };
  72. amus {
  73. amu: amu-0 {
  74. #address-cells = <1>;
  75. #size-cells = <0>;
  76. mpmm_gear0: counter@0 {
  77. reg = <0>;
  78. enable-at-el3;
  79. };
  80. mpmm_gear1: counter@1 {
  81. reg = <1>;
  82. enable-at-el3;
  83. };
  84. mpmm_gear2: counter@2 {
  85. reg = <2>;
  86. enable-at-el3;
  87. };
  88. };
  89. };
  90. CPU0:cpu@0 {
  91. device_type = "cpu";
  92. compatible = "arm,armv8";
  93. reg = <0x0>;
  94. enable-method = "psci";
  95. clocks = <&scmi_dvfs 0>;
  96. cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
  97. capacity-dmips-mhz = <406>;
  98. amu = <&amu>;
  99. supports-mpmm;
  100. };
  101. CPU1:cpu@100 {
  102. device_type = "cpu";
  103. compatible = "arm,armv8";
  104. reg = <0x100>;
  105. enable-method = "psci";
  106. clocks = <&scmi_dvfs 0>;
  107. cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
  108. capacity-dmips-mhz = <406>;
  109. amu = <&amu>;
  110. supports-mpmm;
  111. };
  112. CPU2:cpu@200 {
  113. device_type = "cpu";
  114. compatible = "arm,armv8";
  115. reg = <0x200>;
  116. enable-method = "psci";
  117. clocks = <&scmi_dvfs 0>;
  118. cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
  119. capacity-dmips-mhz = <406>;
  120. amu = <&amu>;
  121. supports-mpmm;
  122. };
  123. CPU3:cpu@300 {
  124. device_type = "cpu";
  125. compatible = "arm,armv8";
  126. reg = <0x300>;
  127. enable-method = "psci";
  128. clocks = <&scmi_dvfs 0>;
  129. cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
  130. capacity-dmips-mhz = <406>;
  131. amu = <&amu>;
  132. supports-mpmm;
  133. };
  134. CPU4:cpu@400 {
  135. device_type = "cpu";
  136. compatible = "arm,armv8";
  137. reg = <0x400>;
  138. enable-method = "psci";
  139. clocks = <&scmi_dvfs 1>;
  140. cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
  141. capacity-dmips-mhz = <912>;
  142. amu = <&amu>;
  143. supports-mpmm;
  144. };
  145. CPU5:cpu@500 {
  146. device_type = "cpu";
  147. compatible = "arm,armv8";
  148. reg = <0x500>;
  149. enable-method = "psci";
  150. clocks = <&scmi_dvfs 1>;
  151. cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
  152. capacity-dmips-mhz = <912>;
  153. amu = <&amu>;
  154. supports-mpmm;
  155. };
  156. CPU6:cpu@600 {
  157. device_type = "cpu";
  158. compatible = "arm,armv8";
  159. reg = <0x600>;
  160. enable-method = "psci";
  161. clocks = <&scmi_dvfs 1>;
  162. cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
  163. capacity-dmips-mhz = <912>;
  164. amu = <&amu>;
  165. supports-mpmm;
  166. };
  167. CPU7:cpu@700 {
  168. device_type = "cpu";
  169. compatible = "arm,armv8";
  170. reg = <0x700>;
  171. enable-method = "psci";
  172. clocks = <&scmi_dvfs 2>;
  173. cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
  174. capacity-dmips-mhz = <1024>;
  175. amu = <&amu>;
  176. supports-mpmm;
  177. };
  178. };
  179. reserved-memory {
  180. #address-cells = <2>;
  181. #size-cells = <2>;
  182. ranges;
  183. linux,cma {
  184. compatible = "shared-dma-pool";
  185. reusable;
  186. size = <0x0 0x8000000>;
  187. linux,cma-default;
  188. };
  189. optee@0xfce00000 {
  190. reg = <0x00000000 0xfce00000 0 0x00200000>;
  191. no-map;
  192. };
  193. };
  194. psci {
  195. compatible = "arm,psci-1.0", "arm,psci-0.2";
  196. method = "smc";
  197. };
  198. sram: sram@6000000 {
  199. compatible = "mmio-sram";
  200. reg = <0x0 0x06000000 0x0 0x8000>;
  201. #address-cells = <1>;
  202. #size-cells = <1>;
  203. ranges = <0 0x0 0x06000000 0x8000>;
  204. cpu_scp_scmi_mem: scp-shmem@0 {
  205. compatible = "arm,scmi-shmem";
  206. reg = <0x0 0x80>;
  207. };
  208. };
  209. mbox_db_rx: mhu@45010000 {
  210. compatible = "arm,mhuv2-rx","arm,primecell";
  211. reg = <0x0 0x45010000 0x0 0x1000>;
  212. clocks = <&soc_refclk100mhz>;
  213. clock-names = "apb_pclk";
  214. #mbox-cells = <2>;
  215. interrupts = <0 317 4>;
  216. interrupt-names = "mhu_rx";
  217. mhu-protocol = "doorbell";
  218. arm,mhuv2-protocols = <0 1>;
  219. };
  220. mbox_db_tx: mhu@45000000 {
  221. compatible = "arm,mhuv2-tx","arm,primecell";
  222. reg = <0x0 0x45000000 0x0 0x1000>;
  223. clocks = <&soc_refclk100mhz>;
  224. clock-names = "apb_pclk";
  225. #mbox-cells = <2>;
  226. interrupt-names = "mhu_tx";
  227. mhu-protocol = "doorbell";
  228. arm,mhuv2-protocols = <0 1>;
  229. };
  230. cmn-pmu {
  231. compatible = "arm,ci-700";
  232. reg = <0x0 0x50000000 0x0 0x10000000>;
  233. interrupts = <0x0 460 0x4>;
  234. };
  235. scmi {
  236. compatible = "arm,scmi";
  237. mbox-names = "tx", "rx";
  238. mboxes = <&mbox_db_tx 0 0 &mbox_db_rx 0 0 >;
  239. shmem = <&cpu_scp_scmi_mem &cpu_scp_scmi_mem>;
  240. #address-cells = <1>;
  241. #size-cells = <0>;
  242. scmi_dvfs: protocol@13 {
  243. reg = <0x13>;
  244. #clock-cells = <1>;
  245. };
  246. scmi_clk: protocol@14 {
  247. reg = <0x14>;
  248. #clock-cells = <1>;
  249. };
  250. };
  251. gic: interrupt-controller@2c010000 {
  252. compatible = "arm,gic-600", "arm,gic-v3";
  253. #address-cells = <2>;
  254. #interrupt-cells = <3>;
  255. #size-cells = <2>;
  256. ranges;
  257. interrupt-controller;
  258. reg = <0x0 0x30000000 0 0x10000>, /* GICD */
  259. <0x0 0x30080000 0 0x200000>; /* GICR */
  260. interrupts = <0x1 0x9 0x4>;
  261. };
  262. timer {
  263. compatible = "arm,armv8-timer";
  264. interrupts = <0x1 13 0x8>,
  265. <0x1 14 0x8>,
  266. <0x1 11 0x8>,
  267. <0x1 10 0x8>;
  268. };
  269. soc_refclk100mhz: refclk100mhz {
  270. compatible = "fixed-clock";
  271. #clock-cells = <0>;
  272. clock-frequency = <100000000>;
  273. clock-output-names = "apb_pclk";
  274. };
  275. soc_refclk60mhz: refclk60mhz {
  276. compatible = "fixed-clock";
  277. #clock-cells = <0>;
  278. clock-frequency = <60000000>;
  279. clock-output-names = "iofpga_clk";
  280. };
  281. soc_uartclk: uartclk {
  282. compatible = "fixed-clock";
  283. #clock-cells = <0>;
  284. clock-frequency = <50000000>;
  285. clock-output-names = "uartclk";
  286. };
  287. soc_uart0: uart@7ff80000 {
  288. compatible = "arm,pl011", "arm,primecell";
  289. reg = <0x0 0x7ff80000 0x0 0x1000>;
  290. interrupts = <0x0 116 0x4>;
  291. clocks = <&soc_uartclk>, <&soc_refclk100mhz>;
  292. clock-names = "uartclk", "apb_pclk";
  293. status = "okay";
  294. };
  295. rtc0: rtc@1C170000 {
  296. compatible = "arm,pl031", "arm,primecell";
  297. reg = <0x0 0x1C170000 0x0 0x1000>;
  298. interrupts = <0x0 100 0x4>;
  299. clocks = <&soc_refclk100mhz>;
  300. clock-names = "apb_pclk";
  301. wakeup-source;
  302. };
  303. vencoder {
  304. compatible = "drm,virtual-encoder";
  305. port {
  306. vencoder_in: endpoint {
  307. remote-endpoint = <&dp_pl0_out0>;
  308. };
  309. };
  310. display-timings {
  311. panel-timing {
  312. clock-frequency = <25175000>;
  313. hactive = <640>;
  314. vactive = <480>;
  315. hfront-porch = <16>;
  316. hback-porch = <48>;
  317. hsync-len = <96>;
  318. vfront-porch = <10>;
  319. vback-porch = <33>;
  320. vsync-len = <2>;
  321. };
  322. };
  323. };
  324. hdlcd: hdlcd@7ff60000 {
  325. compatible = "arm,hdlcd";
  326. reg = <0x0 0x7ff60000 0x0 0x1000>;
  327. interrupts = <0x0 117 0x4>;
  328. clocks = <&fake_hdlcd_clk>;
  329. clock-names = "pxlclk";
  330. status = "disabled";
  331. port {
  332. hdlcd_out: endpoint {
  333. remote-endpoint = <&vencoder_in>;
  334. };
  335. };
  336. };
  337. fake_hdlcd_clk: fake-hdlcd-clk {
  338. compatible = "fixed-clock";
  339. #clock-cells = <0>;
  340. clock-frequency = <25175000>;
  341. clock-output-names = "pxlclk";
  342. };
  343. ethernet@18000000 {
  344. compatible = "smsc,lan91c111";
  345. reg = <0x0 0x18000000 0x0 0x10000>;
  346. interrupts = <0 109 4>;
  347. };
  348. kmi@1c060000 {
  349. compatible = "arm,pl050", "arm,primecell";
  350. reg = <0x0 0x001c060000 0x0 0x1000>;
  351. interrupts = <0 197 4>;
  352. clocks = <&bp_clock24mhz>, <&bp_clock24mhz>;
  353. clock-names = "KMIREFCLK", "apb_pclk";
  354. };
  355. kmi@1c070000 {
  356. compatible = "arm,pl050", "arm,primecell";
  357. reg = <0x0 0x001c070000 0x0 0x1000>;
  358. interrupts = <0 103 4>;
  359. clocks = <&bp_clock24mhz>, <&bp_clock24mhz>;
  360. clock-names = "KMIREFCLK", "apb_pclk";
  361. };
  362. bp_clock24mhz: clock24mhz {
  363. compatible = "fixed-clock";
  364. #clock-cells = <0>;
  365. clock-frequency = <24000000>;
  366. clock-output-names = "bp:clock24mhz";
  367. };
  368. virtio_block@1c130000 {
  369. compatible = "virtio,mmio";
  370. reg = <0x0 0x1c130000 0x0 0x200>;
  371. interrupts = <0 204 4>;
  372. };
  373. sysreg: sysreg@1c010000 {
  374. compatible = "arm,vexpress-sysreg";
  375. reg = <0x0 0x001c010000 0x0 0x1000>;
  376. gpio-controller;
  377. #gpio-cells = <2>;
  378. };
  379. fixed_3v3: v2m-3v3 {
  380. compatible = "regulator-fixed";
  381. regulator-name = "3V3";
  382. regulator-min-microvolt = <3300000>;
  383. regulator-max-microvolt = <3300000>;
  384. regulator-always-on;
  385. };
  386. mmci@1c050000 {
  387. compatible = "arm,pl180", "arm,primecell";
  388. reg = <0x0 0x001c050000 0x0 0x1000>;
  389. interrupts = <0 107 0x4>,
  390. <0 108 0x4>;
  391. cd-gpios = <&sysreg 0 0>;
  392. wp-gpios = <&sysreg 1 0>;
  393. bus-width = <8>;
  394. max-frequency = <12000000>;
  395. vmmc-supply = <&fixed_3v3>;
  396. clocks = <&bp_clock24mhz>, <&bp_clock24mhz>;
  397. clock-names = "mclk", "apb_pclk";
  398. };
  399. gpu: gpu@2d000000 {
  400. compatible = "arm,mali-midgard";
  401. reg = <0x0 0x2d000000 0x0 0x200000>;
  402. interrupts = <0 66 4>, <0 67 4>, <0 65 4>;
  403. interrupt-names = "JOB", "MMU", "GPU";
  404. clocks = <&soc_refclk100mhz>;
  405. clock-names = "clk_mali";
  406. operating-points = <
  407. /* KHz uV */
  408. 50000 820000
  409. >;
  410. };
  411. smmu: smmu@2ce00000 {
  412. #iommu-cells = <1>;
  413. compatible = "arm,smmu-v3";
  414. reg = <0x0 0x2ce00000 0x0 0x20000>;
  415. status = "okay";
  416. };
  417. dp0: display@2cc00000 {
  418. #address-cells = <1>;
  419. #size-cells = <0>;
  420. compatible = "arm,mali-d71";
  421. reg = <0 0x2cc00000 0 0x20000>;
  422. interrupts = <0 69 4>;
  423. interrupt-names = "DPU";
  424. clocks = <&scmi_clk 0>;
  425. clock-names = "aclk";
  426. iommus = <&smmu 0>, <&smmu 1>, <&smmu 2>, <&smmu 3>,
  427. <&smmu 4>, <&smmu 5>, <&smmu 6>, <&smmu 7>,
  428. <&smmu 8>, <&smmu 9>;
  429. pl0: pipeline@0 {
  430. reg = <0>;
  431. clocks = <&scmi_clk 1>;
  432. clock-names = "pxclk";
  433. pl_id = <0>;
  434. ports {
  435. #address-cells = <1>;
  436. #size-cells = <0>;
  437. port@0 {
  438. reg = <0>;
  439. dp_pl0_out0: endpoint {
  440. remote-endpoint = <&vencoder_in>;
  441. };
  442. };
  443. };
  444. };
  445. pl1: pipeline@1 {
  446. reg = <1>;
  447. clocks = <&scmi_clk 2>;
  448. clock-names = "pxclk";
  449. pl_id = <1>;
  450. ports {
  451. #address-cells = <1>;
  452. #size-cells = <0>;
  453. port@0 {
  454. reg = <0>;
  455. };
  456. };
  457. };
  458. };
  459. ete0 {
  460. compatible = "arm,embedded-trace-extension";
  461. cpu = <&CPU0>;
  462. };
  463. ete1 {
  464. compatible = "arm,embedded-trace-extension";
  465. cpu = <&CPU1>;
  466. };
  467. ete2 {
  468. compatible = "arm,embedded-trace-extension";
  469. cpu = <&CPU2>;
  470. };
  471. ete3 {
  472. compatible = "arm,embedded-trace-extension";
  473. cpu = <&CPU3>;
  474. };
  475. ete4 {
  476. compatible = "arm,embedded-trace-extension";
  477. cpu = <&CPU4>;
  478. };
  479. ete5 {
  480. compatible = "arm,embedded-trace-extension";
  481. cpu = <&CPU5>;
  482. };
  483. ete6 {
  484. compatible = "arm,embedded-trace-extension";
  485. cpu = <&CPU6>;
  486. };
  487. ete7 {
  488. compatible = "arm,embedded-trace-extension";
  489. cpu = <&CPU7>;
  490. };
  491. trbe0 {
  492. compatible = "arm,trace-buffer-extension";
  493. interrupts = <1 2 4>;
  494. };
  495. };