tc.dts 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
  1. /*
  2. * Copyright (c) 2020-2023, 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@0xf8e00000 {
  190. compatible = "restricted-dma-pool";
  191. reg = <0x00000000 0xf8e00000 0 0x00200000>;
  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_clk: gpu_clk {
  400. compatible = "fixed-clock";
  401. #clock-cells = <0>;
  402. clock-frequency = <1000000000>;
  403. };
  404. gpu_core_clk: gpu_core_clk {
  405. compatible = "fixed-clock";
  406. #clock-cells = <0>;
  407. clock-frequency = <1000000000>;
  408. };
  409. gpu: gpu@2d000000 {
  410. compatible = "arm,mali-midgard";
  411. reg = <0x0 0x2d000000 0x0 0x200000>;
  412. interrupts = <0 66 4>, <0 67 4>, <0 65 4>;
  413. interrupt-names = "JOB", "MMU", "GPU";
  414. clocks = <&gpu_clk>, <&gpu_core_clk>;
  415. clock-names = "clk_mali", "shadercores";
  416. iommus = <&smmu_700 0x200>;
  417. operating-points = <
  418. /* KHz uV */
  419. 50000 820000
  420. >;
  421. };
  422. power_model@simple {
  423. /*
  424. * Numbers used are irrelevant to Titan,
  425. * it helps suppressing the kernel warnings.
  426. */
  427. compatible = "arm,mali-simple-power-model";
  428. static-coefficient = <2427750>;
  429. dynamic-coefficient = <4687>;
  430. ts = <20000 2000 (-20) 2>;
  431. thermal-zone = "";
  432. };
  433. smmu_700: smmu_700@3f000000 {
  434. #iommu-cells = <1>;
  435. compatible = "arm,smmu-v3";
  436. reg = <0x0 0x3f000000 0x0 0x5000000>;
  437. dma-coherent;
  438. };
  439. dp0: display@2cc00000 {
  440. #address-cells = <1>;
  441. #size-cells = <0>;
  442. compatible = "arm,mali-d71";
  443. reg = <0 0x2cc00000 0 0x20000>;
  444. interrupts = <0 69 4>;
  445. interrupt-names = "DPU";
  446. clocks = <&scmi_clk 0>;
  447. clock-names = "aclk";
  448. iommus = <&smmu_700 0x100>;
  449. pl0: pipeline@0 {
  450. reg = <0>;
  451. clocks = <&scmi_clk 1>;
  452. clock-names = "pxclk";
  453. pl_id = <0>;
  454. ports {
  455. #address-cells = <1>;
  456. #size-cells = <0>;
  457. port@0 {
  458. reg = <0>;
  459. dp_pl0_out0: endpoint {
  460. remote-endpoint = <&vencoder_in>;
  461. };
  462. };
  463. };
  464. };
  465. pl1: pipeline@1 {
  466. reg = <1>;
  467. clocks = <&scmi_clk 2>;
  468. clock-names = "pxclk";
  469. pl_id = <1>;
  470. ports {
  471. #address-cells = <1>;
  472. #size-cells = <0>;
  473. port@0 {
  474. reg = <0>;
  475. };
  476. };
  477. };
  478. };
  479. /*
  480. * L3 cache in the DSU is the Memory System Component (MSC)
  481. * The MPAM registers are accessed through utility bus in the DSU
  482. */
  483. msc0 {
  484. compatible = "arm,mpam-msc";
  485. reg = <0x1 0x00010000 0x0 0x2000>;
  486. };
  487. ete0 {
  488. compatible = "arm,embedded-trace-extension";
  489. cpu = <&CPU0>;
  490. };
  491. ete1 {
  492. compatible = "arm,embedded-trace-extension";
  493. cpu = <&CPU1>;
  494. };
  495. ete2 {
  496. compatible = "arm,embedded-trace-extension";
  497. cpu = <&CPU2>;
  498. };
  499. ete3 {
  500. compatible = "arm,embedded-trace-extension";
  501. cpu = <&CPU3>;
  502. };
  503. ete4 {
  504. compatible = "arm,embedded-trace-extension";
  505. cpu = <&CPU4>;
  506. };
  507. ete5 {
  508. compatible = "arm,embedded-trace-extension";
  509. cpu = <&CPU5>;
  510. };
  511. ete6 {
  512. compatible = "arm,embedded-trace-extension";
  513. cpu = <&CPU6>;
  514. };
  515. ete7 {
  516. compatible = "arm,embedded-trace-extension";
  517. cpu = <&CPU7>;
  518. };
  519. trbe0 {
  520. compatible = "arm,trace-buffer-extension";
  521. interrupts = <1 2 4>;
  522. };
  523. };