sc9863a.dtsi 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Unisoc SC9863A SoC DTS file
  4. *
  5. * Copyright (C) 2019, Unisoc Inc.
  6. */
  7. #include <dt-bindings/clock/sprd,sc9863a-clk.h>
  8. #include <dt-bindings/interrupt-controller/arm-gic.h>
  9. #include "sharkl3.dtsi"
  10. / {
  11. cpus {
  12. #address-cells = <2>;
  13. #size-cells = <0>;
  14. cpu-map {
  15. cluster0 {
  16. core0 {
  17. cpu = <&CPU0>;
  18. };
  19. core1 {
  20. cpu = <&CPU1>;
  21. };
  22. core2 {
  23. cpu = <&CPU2>;
  24. };
  25. core3 {
  26. cpu = <&CPU3>;
  27. };
  28. core4 {
  29. cpu = <&CPU4>;
  30. };
  31. core5 {
  32. cpu = <&CPU5>;
  33. };
  34. core6 {
  35. cpu = <&CPU6>;
  36. };
  37. core7 {
  38. cpu = <&CPU7>;
  39. };
  40. };
  41. };
  42. CPU0: cpu@0 {
  43. device_type = "cpu";
  44. compatible = "arm,cortex-a55";
  45. reg = <0x0 0x0>;
  46. enable-method = "psci";
  47. cpu-idle-states = <&CORE_PD>;
  48. };
  49. CPU1: cpu@100 {
  50. device_type = "cpu";
  51. compatible = "arm,cortex-a55";
  52. reg = <0x0 0x100>;
  53. enable-method = "psci";
  54. cpu-idle-states = <&CORE_PD>;
  55. };
  56. CPU2: cpu@200 {
  57. device_type = "cpu";
  58. compatible = "arm,cortex-a55";
  59. reg = <0x0 0x200>;
  60. enable-method = "psci";
  61. cpu-idle-states = <&CORE_PD>;
  62. };
  63. CPU3: cpu@300 {
  64. device_type = "cpu";
  65. compatible = "arm,cortex-a55";
  66. reg = <0x0 0x300>;
  67. enable-method = "psci";
  68. cpu-idle-states = <&CORE_PD>;
  69. };
  70. CPU4: cpu@400 {
  71. device_type = "cpu";
  72. compatible = "arm,cortex-a55";
  73. reg = <0x0 0x400>;
  74. enable-method = "psci";
  75. cpu-idle-states = <&CORE_PD>;
  76. };
  77. CPU5: cpu@500 {
  78. device_type = "cpu";
  79. compatible = "arm,cortex-a55";
  80. reg = <0x0 0x500>;
  81. enable-method = "psci";
  82. cpu-idle-states = <&CORE_PD>;
  83. };
  84. CPU6: cpu@600 {
  85. device_type = "cpu";
  86. compatible = "arm,cortex-a55";
  87. reg = <0x0 0x600>;
  88. enable-method = "psci";
  89. cpu-idle-states = <&CORE_PD>;
  90. };
  91. CPU7: cpu@700 {
  92. device_type = "cpu";
  93. compatible = "arm,cortex-a55";
  94. reg = <0x0 0x700>;
  95. enable-method = "psci";
  96. cpu-idle-states = <&CORE_PD>;
  97. };
  98. };
  99. idle-states {
  100. entry-method = "psci";
  101. CORE_PD: core-pd {
  102. compatible = "arm,idle-state";
  103. entry-latency-us = <4000>;
  104. exit-latency-us = <4000>;
  105. min-residency-us = <10000>;
  106. local-timer-stop;
  107. arm,psci-suspend-param = <0x00010000>;
  108. };
  109. };
  110. psci {
  111. compatible = "arm,psci-0.2";
  112. method = "smc";
  113. };
  114. timer {
  115. compatible = "arm,armv8-timer";
  116. interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_HIGH>, /* Physical Secure PPI */
  117. <GIC_PPI 14 IRQ_TYPE_LEVEL_HIGH>, /* Physical Non-Secure PPI */
  118. <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>, /* Virtual PPI */
  119. <GIC_PPI 10 IRQ_TYPE_LEVEL_HIGH>; /* Hipervisor PPI */
  120. };
  121. pmu {
  122. compatible = "arm,armv8-pmuv3";
  123. interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>,
  124. <GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>,
  125. <GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>,
  126. <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>,
  127. <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>,
  128. <GIC_SPI 149 IRQ_TYPE_LEVEL_HIGH>,
  129. <GIC_SPI 150 IRQ_TYPE_LEVEL_HIGH>,
  130. <GIC_SPI 151 IRQ_TYPE_LEVEL_HIGH>;
  131. };
  132. soc {
  133. gic: interrupt-controller@14000000 {
  134. compatible = "arm,gic-v3";
  135. #interrupt-cells = <3>;
  136. #address-cells = <2>;
  137. #size-cells = <2>;
  138. ranges;
  139. redistributor-stride = <0x0 0x20000>; /* 128KB stride */
  140. #redistributor-regions = <1>;
  141. interrupt-controller;
  142. reg = <0x0 0x14000000 0 0x20000>, /* GICD */
  143. <0x0 0x14040000 0 0x100000>; /* GICR */
  144. interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
  145. };
  146. ap_clk: clock-controller@21500000 {
  147. compatible = "sprd,sc9863a-ap-clk";
  148. reg = <0 0x21500000 0 0x1000>;
  149. clocks = <&ext_32k>, <&ext_26m>;
  150. clock-names = "ext-32k", "ext-26m";
  151. #clock-cells = <1>;
  152. };
  153. aon_clk: clock-controller@402d0000 {
  154. compatible = "sprd,sc9863a-aon-clk";
  155. reg = <0 0x402d0000 0 0x1000>;
  156. clocks = <&ext_26m>, <&rco_100m>,
  157. <&ext_32k>, <&ext_4m>;
  158. clock-names = "ext-26m", "rco-100m",
  159. "ext-32k", "ext-4m";
  160. #clock-cells = <1>;
  161. };
  162. mm_clk: clock-controller@60900000 {
  163. compatible = "sprd,sc9863a-mm-clk";
  164. reg = <0 0x60900000 0 0x1000>;
  165. #clock-cells = <1>;
  166. };
  167. funnel@10001000 {
  168. compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
  169. reg = <0 0x10001000 0 0x1000>;
  170. clocks = <&ext_26m>;
  171. clock-names = "apb_pclk";
  172. out-ports {
  173. port {
  174. funnel_soc_out_port: endpoint {
  175. remote-endpoint = <&etb_in>;
  176. };
  177. };
  178. };
  179. in-ports {
  180. port {
  181. funnel_soc_in_port: endpoint {
  182. remote-endpoint =
  183. <&funnel_ca55_out_port>;
  184. };
  185. };
  186. };
  187. };
  188. etb@10003000 {
  189. compatible = "arm,coresight-tmc", "arm,primecell";
  190. reg = <0 0x10003000 0 0x1000>;
  191. clocks = <&ext_26m>;
  192. clock-names = "apb_pclk";
  193. in-ports {
  194. port {
  195. etb_in: endpoint {
  196. remote-endpoint =
  197. <&funnel_soc_out_port>;
  198. };
  199. };
  200. };
  201. };
  202. funnel@12001000 {
  203. compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
  204. reg = <0 0x12001000 0 0x1000>;
  205. clocks = <&ext_26m>;
  206. clock-names = "apb_pclk";
  207. out-ports {
  208. port {
  209. funnel_little_out_port: endpoint {
  210. remote-endpoint =
  211. <&etf_little_in>;
  212. };
  213. };
  214. };
  215. in-ports {
  216. #address-cells = <1>;
  217. #size-cells = <0>;
  218. port@0 {
  219. reg = <0>;
  220. funnel_little_in_port0: endpoint {
  221. remote-endpoint = <&etm0_out>;
  222. };
  223. };
  224. port@1 {
  225. reg = <1>;
  226. funnel_little_in_port1: endpoint {
  227. remote-endpoint = <&etm1_out>;
  228. };
  229. };
  230. port@2 {
  231. reg = <2>;
  232. funnel_little_in_port2: endpoint {
  233. remote-endpoint = <&etm2_out>;
  234. };
  235. };
  236. port@3 {
  237. reg = <3>;
  238. funnel_little_in_port3: endpoint {
  239. remote-endpoint = <&etm3_out>;
  240. };
  241. };
  242. };
  243. };
  244. etf@12002000 {
  245. compatible = "arm,coresight-tmc", "arm,primecell";
  246. reg = <0 0x12002000 0 0x1000>;
  247. clocks = <&ext_26m>;
  248. clock-names = "apb_pclk";
  249. out-ports {
  250. port {
  251. etf_little_out: endpoint {
  252. remote-endpoint =
  253. <&funnel_ca55_in_port0>;
  254. };
  255. };
  256. };
  257. in-port {
  258. port {
  259. etf_little_in: endpoint {
  260. remote-endpoint =
  261. <&funnel_little_out_port>;
  262. };
  263. };
  264. };
  265. };
  266. etf@12003000 {
  267. compatible = "arm,coresight-tmc", "arm,primecell";
  268. reg = <0 0x12003000 0 0x1000>;
  269. clocks = <&ext_26m>;
  270. clock-names = "apb_pclk";
  271. out-ports {
  272. port {
  273. etf_big_out: endpoint {
  274. remote-endpoint =
  275. <&funnel_ca55_in_port1>;
  276. };
  277. };
  278. };
  279. in-ports {
  280. port {
  281. etf_big_in: endpoint {
  282. remote-endpoint =
  283. <&funnel_big_out_port>;
  284. };
  285. };
  286. };
  287. };
  288. funnel@12004000 {
  289. compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
  290. reg = <0 0x12004000 0 0x1000>;
  291. clocks = <&ext_26m>;
  292. clock-names = "apb_pclk";
  293. out-ports {
  294. port {
  295. funnel_ca55_out_port: endpoint {
  296. remote-endpoint =
  297. <&funnel_soc_in_port>;
  298. };
  299. };
  300. };
  301. in-ports {
  302. #address-cells = <1>;
  303. #size-cells = <0>;
  304. port@0 {
  305. reg = <0>;
  306. funnel_ca55_in_port0: endpoint {
  307. remote-endpoint =
  308. <&etf_little_out>;
  309. };
  310. };
  311. port@1 {
  312. reg = <1>;
  313. funnel_ca55_in_port1: endpoint {
  314. remote-endpoint =
  315. <&etf_big_out>;
  316. };
  317. };
  318. };
  319. };
  320. funnel@12005000 {
  321. compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
  322. reg = <0 0x12005000 0 0x1000>;
  323. clocks = <&ext_26m>;
  324. clock-names = "apb_pclk";
  325. out-ports {
  326. port {
  327. funnel_big_out_port: endpoint {
  328. remote-endpoint =
  329. <&etf_big_in>;
  330. };
  331. };
  332. };
  333. in-ports {
  334. #address-cells = <1>;
  335. #size-cells = <0>;
  336. port@0 {
  337. reg = <0>;
  338. funnel_big_in_port0: endpoint {
  339. remote-endpoint = <&etm4_out>;
  340. };
  341. };
  342. port@1 {
  343. reg = <1>;
  344. funnel_big_in_port1: endpoint {
  345. remote-endpoint = <&etm5_out>;
  346. };
  347. };
  348. port@2 {
  349. reg = <2>;
  350. funnel_big_in_port2: endpoint {
  351. remote-endpoint = <&etm6_out>;
  352. };
  353. };
  354. port@3 {
  355. reg = <3>;
  356. funnel_big_in_port3: endpoint {
  357. remote-endpoint = <&etm7_out>;
  358. };
  359. };
  360. };
  361. };
  362. etm@13040000 {
  363. compatible = "arm,coresight-etm4x", "arm,primecell";
  364. reg = <0 0x13040000 0 0x1000>;
  365. cpu = <&CPU0>;
  366. clocks = <&ext_26m>;
  367. clock-names = "apb_pclk";
  368. out-ports {
  369. port {
  370. etm0_out: endpoint {
  371. remote-endpoint =
  372. <&funnel_little_in_port0>;
  373. };
  374. };
  375. };
  376. };
  377. etm@13140000 {
  378. compatible = "arm,coresight-etm4x", "arm,primecell";
  379. reg = <0 0x13140000 0 0x1000>;
  380. cpu = <&CPU1>;
  381. clocks = <&ext_26m>;
  382. clock-names = "apb_pclk";
  383. out-ports {
  384. port {
  385. etm1_out: endpoint {
  386. remote-endpoint =
  387. <&funnel_little_in_port1>;
  388. };
  389. };
  390. };
  391. };
  392. etm@13240000 {
  393. compatible = "arm,coresight-etm4x", "arm,primecell";
  394. reg = <0 0x13240000 0 0x1000>;
  395. cpu = <&CPU2>;
  396. clocks = <&ext_26m>;
  397. clock-names = "apb_pclk";
  398. out-ports {
  399. port {
  400. etm2_out: endpoint {
  401. remote-endpoint =
  402. <&funnel_little_in_port2>;
  403. };
  404. };
  405. };
  406. };
  407. etm@13340000 {
  408. compatible = "arm,coresight-etm4x", "arm,primecell";
  409. reg = <0 0x13340000 0 0x1000>;
  410. cpu = <&CPU3>;
  411. clocks = <&ext_26m>;
  412. clock-names = "apb_pclk";
  413. out-ports {
  414. port {
  415. etm3_out: endpoint {
  416. remote-endpoint =
  417. <&funnel_little_in_port3>;
  418. };
  419. };
  420. };
  421. };
  422. etm@13440000 {
  423. compatible = "arm,coresight-etm4x", "arm,primecell";
  424. reg = <0 0x13440000 0 0x1000>;
  425. cpu = <&CPU4>;
  426. clocks = <&ext_26m>;
  427. clock-names = "apb_pclk";
  428. out-ports {
  429. port {
  430. etm4_out: endpoint {
  431. remote-endpoint =
  432. <&funnel_big_in_port0>;
  433. };
  434. };
  435. };
  436. };
  437. etm@13540000 {
  438. compatible = "arm,coresight-etm4x", "arm,primecell";
  439. reg = <0 0x13540000 0 0x1000>;
  440. cpu = <&CPU5>;
  441. clocks = <&ext_26m>;
  442. clock-names = "apb_pclk";
  443. out-ports {
  444. port {
  445. etm5_out: endpoint {
  446. remote-endpoint =
  447. <&funnel_big_in_port1>;
  448. };
  449. };
  450. };
  451. };
  452. etm@13640000 {
  453. compatible = "arm,coresight-etm4x", "arm,primecell";
  454. reg = <0 0x13640000 0 0x1000>;
  455. cpu = <&CPU6>;
  456. clocks = <&ext_26m>;
  457. clock-names = "apb_pclk";
  458. out-ports {
  459. port {
  460. etm6_out: endpoint {
  461. remote-endpoint =
  462. <&funnel_big_in_port2>;
  463. };
  464. };
  465. };
  466. };
  467. etm@13740000 {
  468. compatible = "arm,coresight-etm4x", "arm,primecell";
  469. reg = <0 0x13740000 0 0x1000>;
  470. cpu = <&CPU7>;
  471. clocks = <&ext_26m>;
  472. clock-names = "apb_pclk";
  473. out-ports {
  474. port {
  475. etm7_out: endpoint {
  476. remote-endpoint =
  477. <&funnel_big_in_port3>;
  478. };
  479. };
  480. };
  481. };
  482. ap-ahb {
  483. compatible = "simple-bus";
  484. #address-cells = <2>;
  485. #size-cells = <2>;
  486. ranges;
  487. sdio0: sdio@20300000 {
  488. compatible = "sprd,sdhci-r11";
  489. reg = <0 0x20300000 0 0x1000>;
  490. interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>;
  491. clock-names = "sdio", "enable";
  492. clocks = <&aon_clk CLK_SDIO0_2X>,
  493. <&apahb_gate CLK_SDIO0_EB>;
  494. assigned-clocks = <&aon_clk CLK_SDIO0_2X>;
  495. assigned-clock-parents = <&rpll CLK_RPLL_390M>;
  496. bus-width = <4>;
  497. no-sdio;
  498. no-mmc;
  499. };
  500. sdio3: sdio@20600000 {
  501. compatible = "sprd,sdhci-r11";
  502. reg = <0 0x20600000 0 0x1000>;
  503. interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
  504. clock-names = "sdio", "enable";
  505. clocks = <&aon_clk CLK_EMMC_2X>,
  506. <&apahb_gate CLK_EMMC_EB>;
  507. assigned-clocks = <&aon_clk CLK_EMMC_2X>;
  508. assigned-clock-parents = <&rpll CLK_RPLL_390M>;
  509. bus-width = <8>;
  510. non-removable;
  511. no-sdio;
  512. no-sd;
  513. cap-mmc-hw-reset;
  514. };
  515. };
  516. };
  517. };