mpfs.dtsi 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511
  1. // SPDX-License-Identifier: (GPL-2.0+ OR MIT)
  2. /* Copyright (c) 2020-2021 Microchip Technology Inc */
  3. #include "dt-bindings/clock/microchip-mpfs-clock.h"
  4. / {
  5. #address-cells = <2>;
  6. #size-cells = <2>;
  7. model = "Microchip PolarFire SoC";
  8. compatible = "microchip,mpfs";
  9. cpus {
  10. #address-cells = <1>;
  11. #size-cells = <0>;
  12. cpu0: cpu@0 {
  13. compatible = "sifive,e51", "sifive,rocket0", "riscv";
  14. device_type = "cpu";
  15. i-cache-block-size = <64>;
  16. i-cache-sets = <128>;
  17. i-cache-size = <16384>;
  18. reg = <0>;
  19. riscv,isa = "rv64imac";
  20. clocks = <&clkcfg CLK_CPU>;
  21. status = "disabled";
  22. cpu0_intc: interrupt-controller {
  23. #interrupt-cells = <1>;
  24. compatible = "riscv,cpu-intc";
  25. interrupt-controller;
  26. };
  27. };
  28. cpu1: cpu@1 {
  29. compatible = "sifive,u54-mc", "sifive,rocket0", "riscv";
  30. d-cache-block-size = <64>;
  31. d-cache-sets = <64>;
  32. d-cache-size = <32768>;
  33. d-tlb-sets = <1>;
  34. d-tlb-size = <32>;
  35. device_type = "cpu";
  36. i-cache-block-size = <64>;
  37. i-cache-sets = <64>;
  38. i-cache-size = <32768>;
  39. i-tlb-sets = <1>;
  40. i-tlb-size = <32>;
  41. mmu-type = "riscv,sv39";
  42. reg = <1>;
  43. riscv,isa = "rv64imafdc";
  44. clocks = <&clkcfg CLK_CPU>;
  45. tlb-split;
  46. next-level-cache = <&cctrllr>;
  47. status = "okay";
  48. cpu1_intc: interrupt-controller {
  49. #interrupt-cells = <1>;
  50. compatible = "riscv,cpu-intc";
  51. interrupt-controller;
  52. };
  53. };
  54. cpu2: cpu@2 {
  55. compatible = "sifive,u54-mc", "sifive,rocket0", "riscv";
  56. d-cache-block-size = <64>;
  57. d-cache-sets = <64>;
  58. d-cache-size = <32768>;
  59. d-tlb-sets = <1>;
  60. d-tlb-size = <32>;
  61. device_type = "cpu";
  62. i-cache-block-size = <64>;
  63. i-cache-sets = <64>;
  64. i-cache-size = <32768>;
  65. i-tlb-sets = <1>;
  66. i-tlb-size = <32>;
  67. mmu-type = "riscv,sv39";
  68. reg = <2>;
  69. riscv,isa = "rv64imafdc";
  70. clocks = <&clkcfg CLK_CPU>;
  71. tlb-split;
  72. next-level-cache = <&cctrllr>;
  73. status = "okay";
  74. cpu2_intc: interrupt-controller {
  75. #interrupt-cells = <1>;
  76. compatible = "riscv,cpu-intc";
  77. interrupt-controller;
  78. };
  79. };
  80. cpu3: cpu@3 {
  81. compatible = "sifive,u54-mc", "sifive,rocket0", "riscv";
  82. d-cache-block-size = <64>;
  83. d-cache-sets = <64>;
  84. d-cache-size = <32768>;
  85. d-tlb-sets = <1>;
  86. d-tlb-size = <32>;
  87. device_type = "cpu";
  88. i-cache-block-size = <64>;
  89. i-cache-sets = <64>;
  90. i-cache-size = <32768>;
  91. i-tlb-sets = <1>;
  92. i-tlb-size = <32>;
  93. mmu-type = "riscv,sv39";
  94. reg = <3>;
  95. riscv,isa = "rv64imafdc";
  96. clocks = <&clkcfg CLK_CPU>;
  97. tlb-split;
  98. next-level-cache = <&cctrllr>;
  99. status = "okay";
  100. cpu3_intc: interrupt-controller {
  101. #interrupt-cells = <1>;
  102. compatible = "riscv,cpu-intc";
  103. interrupt-controller;
  104. };
  105. };
  106. cpu4: cpu@4 {
  107. compatible = "sifive,u54-mc", "sifive,rocket0", "riscv";
  108. d-cache-block-size = <64>;
  109. d-cache-sets = <64>;
  110. d-cache-size = <32768>;
  111. d-tlb-sets = <1>;
  112. d-tlb-size = <32>;
  113. device_type = "cpu";
  114. i-cache-block-size = <64>;
  115. i-cache-sets = <64>;
  116. i-cache-size = <32768>;
  117. i-tlb-sets = <1>;
  118. i-tlb-size = <32>;
  119. mmu-type = "riscv,sv39";
  120. reg = <4>;
  121. riscv,isa = "rv64imafdc";
  122. clocks = <&clkcfg CLK_CPU>;
  123. tlb-split;
  124. next-level-cache = <&cctrllr>;
  125. status = "okay";
  126. cpu4_intc: interrupt-controller {
  127. #interrupt-cells = <1>;
  128. compatible = "riscv,cpu-intc";
  129. interrupt-controller;
  130. };
  131. };
  132. cpu-map {
  133. cluster0 {
  134. core0 {
  135. cpu = <&cpu0>;
  136. };
  137. core1 {
  138. cpu = <&cpu1>;
  139. };
  140. core2 {
  141. cpu = <&cpu2>;
  142. };
  143. core3 {
  144. cpu = <&cpu3>;
  145. };
  146. core4 {
  147. cpu = <&cpu4>;
  148. };
  149. };
  150. };
  151. };
  152. refclk: mssrefclk {
  153. compatible = "fixed-clock";
  154. #clock-cells = <0>;
  155. };
  156. syscontroller: syscontroller {
  157. compatible = "microchip,mpfs-sys-controller";
  158. mboxes = <&mbox 0>;
  159. };
  160. soc {
  161. #address-cells = <2>;
  162. #size-cells = <2>;
  163. compatible = "simple-bus";
  164. ranges;
  165. cctrllr: cache-controller@2010000 {
  166. compatible = "microchip,mpfs-ccache", "sifive,fu540-c000-ccache", "cache";
  167. reg = <0x0 0x2010000 0x0 0x1000>;
  168. cache-block-size = <64>;
  169. cache-level = <2>;
  170. cache-sets = <1024>;
  171. cache-size = <2097152>;
  172. cache-unified;
  173. interrupt-parent = <&plic>;
  174. interrupts = <1>, <3>, <4>, <2>;
  175. };
  176. clint: clint@2000000 {
  177. compatible = "sifive,fu540-c000-clint", "sifive,clint0";
  178. reg = <0x0 0x2000000 0x0 0xC000>;
  179. interrupts-extended = <&cpu0_intc 3>, <&cpu0_intc 7>,
  180. <&cpu1_intc 3>, <&cpu1_intc 7>,
  181. <&cpu2_intc 3>, <&cpu2_intc 7>,
  182. <&cpu3_intc 3>, <&cpu3_intc 7>,
  183. <&cpu4_intc 3>, <&cpu4_intc 7>;
  184. };
  185. plic: interrupt-controller@c000000 {
  186. compatible = "sifive,fu540-c000-plic", "sifive,plic-1.0.0";
  187. reg = <0x0 0xc000000 0x0 0x4000000>;
  188. #address-cells = <0>;
  189. #interrupt-cells = <1>;
  190. interrupt-controller;
  191. interrupts-extended = <&cpu0_intc 11>,
  192. <&cpu1_intc 11>, <&cpu1_intc 9>,
  193. <&cpu2_intc 11>, <&cpu2_intc 9>,
  194. <&cpu3_intc 11>, <&cpu3_intc 9>,
  195. <&cpu4_intc 11>, <&cpu4_intc 9>;
  196. riscv,ndev = <186>;
  197. };
  198. pdma: dma-controller@3000000 {
  199. compatible = "sifive,fu540-c000-pdma", "sifive,pdma0";
  200. reg = <0x0 0x3000000 0x0 0x8000>;
  201. interrupt-parent = <&plic>;
  202. interrupts = <5 6>, <7 8>, <9 10>, <11 12>;
  203. dma-channels = <4>;
  204. #dma-cells = <1>;
  205. };
  206. clkcfg: clkcfg@20002000 {
  207. compatible = "microchip,mpfs-clkcfg";
  208. reg = <0x0 0x20002000 0x0 0x1000>, <0x0 0x3E001000 0x0 0x1000>;
  209. clocks = <&refclk>;
  210. #clock-cells = <1>;
  211. #reset-cells = <1>;
  212. };
  213. ccc_se: clock-controller@38010000 {
  214. compatible = "microchip,mpfs-ccc";
  215. reg = <0x0 0x38010000 0x0 0x1000>, <0x0 0x38020000 0x0 0x1000>,
  216. <0x0 0x39010000 0x0 0x1000>, <0x0 0x39020000 0x0 0x1000>;
  217. #clock-cells = <1>;
  218. status = "disabled";
  219. };
  220. ccc_ne: clock-controller@38040000 {
  221. compatible = "microchip,mpfs-ccc";
  222. reg = <0x0 0x38040000 0x0 0x1000>, <0x0 0x38080000 0x0 0x1000>,
  223. <0x0 0x39040000 0x0 0x1000>, <0x0 0x39080000 0x0 0x1000>;
  224. #clock-cells = <1>;
  225. status = "disabled";
  226. };
  227. ccc_nw: clock-controller@38100000 {
  228. compatible = "microchip,mpfs-ccc";
  229. reg = <0x0 0x38100000 0x0 0x1000>, <0x0 0x38200000 0x0 0x1000>,
  230. <0x0 0x39100000 0x0 0x1000>, <0x0 0x39200000 0x0 0x1000>;
  231. #clock-cells = <1>;
  232. status = "disabled";
  233. };
  234. ccc_sw: clock-controller@38400000 {
  235. compatible = "microchip,mpfs-ccc";
  236. reg = <0x0 0x38400000 0x0 0x1000>, <0x0 0x38800000 0x0 0x1000>,
  237. <0x0 0x39400000 0x0 0x1000>, <0x0 0x39800000 0x0 0x1000>;
  238. #clock-cells = <1>;
  239. status = "disabled";
  240. };
  241. mmuart0: serial@20000000 {
  242. compatible = "ns16550a";
  243. reg = <0x0 0x20000000 0x0 0x400>;
  244. reg-io-width = <4>;
  245. reg-shift = <2>;
  246. interrupt-parent = <&plic>;
  247. interrupts = <90>;
  248. current-speed = <115200>;
  249. clocks = <&clkcfg CLK_MMUART0>;
  250. status = "disabled"; /* Reserved for the HSS */
  251. };
  252. mmuart1: serial@20100000 {
  253. compatible = "ns16550a";
  254. reg = <0x0 0x20100000 0x0 0x400>;
  255. reg-io-width = <4>;
  256. reg-shift = <2>;
  257. interrupt-parent = <&plic>;
  258. interrupts = <91>;
  259. current-speed = <115200>;
  260. clocks = <&clkcfg CLK_MMUART1>;
  261. status = "disabled";
  262. };
  263. mmuart2: serial@20102000 {
  264. compatible = "ns16550a";
  265. reg = <0x0 0x20102000 0x0 0x400>;
  266. reg-io-width = <4>;
  267. reg-shift = <2>;
  268. interrupt-parent = <&plic>;
  269. interrupts = <92>;
  270. current-speed = <115200>;
  271. clocks = <&clkcfg CLK_MMUART2>;
  272. status = "disabled";
  273. };
  274. mmuart3: serial@20104000 {
  275. compatible = "ns16550a";
  276. reg = <0x0 0x20104000 0x0 0x400>;
  277. reg-io-width = <4>;
  278. reg-shift = <2>;
  279. interrupt-parent = <&plic>;
  280. interrupts = <93>;
  281. current-speed = <115200>;
  282. clocks = <&clkcfg CLK_MMUART3>;
  283. status = "disabled";
  284. };
  285. mmuart4: serial@20106000 {
  286. compatible = "ns16550a";
  287. reg = <0x0 0x20106000 0x0 0x400>;
  288. reg-io-width = <4>;
  289. reg-shift = <2>;
  290. interrupt-parent = <&plic>;
  291. interrupts = <94>;
  292. clocks = <&clkcfg CLK_MMUART4>;
  293. current-speed = <115200>;
  294. status = "disabled";
  295. };
  296. /* Common node entry for emmc/sd */
  297. mmc: mmc@20008000 {
  298. compatible = "microchip,mpfs-sd4hc", "cdns,sd4hc";
  299. reg = <0x0 0x20008000 0x0 0x1000>;
  300. interrupt-parent = <&plic>;
  301. interrupts = <88>;
  302. clocks = <&clkcfg CLK_MMC>;
  303. max-frequency = <200000000>;
  304. status = "disabled";
  305. };
  306. spi0: spi@20108000 {
  307. compatible = "microchip,mpfs-spi";
  308. #address-cells = <1>;
  309. #size-cells = <0>;
  310. reg = <0x0 0x20108000 0x0 0x1000>;
  311. interrupt-parent = <&plic>;
  312. interrupts = <54>;
  313. clocks = <&clkcfg CLK_SPI0>;
  314. status = "disabled";
  315. };
  316. spi1: spi@20109000 {
  317. compatible = "microchip,mpfs-spi";
  318. #address-cells = <1>;
  319. #size-cells = <0>;
  320. reg = <0x0 0x20109000 0x0 0x1000>;
  321. interrupt-parent = <&plic>;
  322. interrupts = <55>;
  323. clocks = <&clkcfg CLK_SPI1>;
  324. status = "disabled";
  325. };
  326. qspi: spi@21000000 {
  327. compatible = "microchip,mpfs-qspi", "microchip,coreqspi-rtl-v2";
  328. #address-cells = <1>;
  329. #size-cells = <0>;
  330. reg = <0x0 0x21000000 0x0 0x1000>;
  331. interrupt-parent = <&plic>;
  332. interrupts = <85>;
  333. clocks = <&clkcfg CLK_QSPI>;
  334. status = "disabled";
  335. };
  336. i2c0: i2c@2010a000 {
  337. compatible = "microchip,mpfs-i2c", "microchip,corei2c-rtl-v7";
  338. reg = <0x0 0x2010a000 0x0 0x1000>;
  339. #address-cells = <1>;
  340. #size-cells = <0>;
  341. interrupt-parent = <&plic>;
  342. interrupts = <58>;
  343. clocks = <&clkcfg CLK_I2C0>;
  344. clock-frequency = <100000>;
  345. status = "disabled";
  346. };
  347. i2c1: i2c@2010b000 {
  348. compatible = "microchip,mpfs-i2c", "microchip,corei2c-rtl-v7";
  349. reg = <0x0 0x2010b000 0x0 0x1000>;
  350. #address-cells = <1>;
  351. #size-cells = <0>;
  352. interrupt-parent = <&plic>;
  353. interrupts = <61>;
  354. clocks = <&clkcfg CLK_I2C1>;
  355. clock-frequency = <100000>;
  356. status = "disabled";
  357. };
  358. can0: can@2010c000 {
  359. compatible = "microchip,mpfs-can";
  360. reg = <0x0 0x2010c000 0x0 0x1000>;
  361. clocks = <&clkcfg CLK_CAN0>;
  362. interrupt-parent = <&plic>;
  363. interrupts = <56>;
  364. status = "disabled";
  365. };
  366. can1: can@2010d000 {
  367. compatible = "microchip,mpfs-can";
  368. reg = <0x0 0x2010d000 0x0 0x1000>;
  369. clocks = <&clkcfg CLK_CAN1>;
  370. interrupt-parent = <&plic>;
  371. interrupts = <57>;
  372. status = "disabled";
  373. };
  374. mac0: ethernet@20110000 {
  375. compatible = "microchip,mpfs-macb", "cdns,macb";
  376. reg = <0x0 0x20110000 0x0 0x2000>;
  377. #address-cells = <1>;
  378. #size-cells = <0>;
  379. interrupt-parent = <&plic>;
  380. interrupts = <64>, <65>, <66>, <67>, <68>, <69>;
  381. local-mac-address = [00 00 00 00 00 00];
  382. clocks = <&clkcfg CLK_MAC0>, <&clkcfg CLK_AHB>;
  383. clock-names = "pclk", "hclk";
  384. resets = <&clkcfg CLK_MAC0>;
  385. status = "disabled";
  386. };
  387. mac1: ethernet@20112000 {
  388. compatible = "microchip,mpfs-macb", "cdns,macb";
  389. reg = <0x0 0x20112000 0x0 0x2000>;
  390. #address-cells = <1>;
  391. #size-cells = <0>;
  392. interrupt-parent = <&plic>;
  393. interrupts = <70>, <71>, <72>, <73>, <74>, <75>;
  394. local-mac-address = [00 00 00 00 00 00];
  395. clocks = <&clkcfg CLK_MAC1>, <&clkcfg CLK_AHB>;
  396. clock-names = "pclk", "hclk";
  397. resets = <&clkcfg CLK_MAC1>;
  398. status = "disabled";
  399. };
  400. gpio0: gpio@20120000 {
  401. compatible = "microchip,mpfs-gpio";
  402. reg = <0x0 0x20120000 0x0 0x1000>;
  403. interrupt-parent = <&plic>;
  404. interrupt-controller;
  405. #interrupt-cells = <1>;
  406. clocks = <&clkcfg CLK_GPIO0>;
  407. gpio-controller;
  408. #gpio-cells = <2>;
  409. status = "disabled";
  410. };
  411. gpio1: gpio@20121000 {
  412. compatible = "microchip,mpfs-gpio";
  413. reg = <0x0 0x20121000 0x0 0x1000>;
  414. interrupt-parent = <&plic>;
  415. interrupt-controller;
  416. #interrupt-cells = <1>;
  417. clocks = <&clkcfg CLK_GPIO1>;
  418. gpio-controller;
  419. #gpio-cells = <2>;
  420. status = "disabled";
  421. };
  422. gpio2: gpio@20122000 {
  423. compatible = "microchip,mpfs-gpio";
  424. reg = <0x0 0x20122000 0x0 0x1000>;
  425. interrupt-parent = <&plic>;
  426. interrupt-controller;
  427. #interrupt-cells = <1>;
  428. clocks = <&clkcfg CLK_GPIO2>;
  429. gpio-controller;
  430. #gpio-cells = <2>;
  431. status = "disabled";
  432. };
  433. rtc: rtc@20124000 {
  434. compatible = "microchip,mpfs-rtc";
  435. reg = <0x0 0x20124000 0x0 0x1000>;
  436. interrupt-parent = <&plic>;
  437. interrupts = <80>, <81>;
  438. clocks = <&clkcfg CLK_RTC>, <&clkcfg CLK_RTCREF>;
  439. clock-names = "rtc", "rtcref";
  440. status = "disabled";
  441. };
  442. usb: usb@20201000 {
  443. compatible = "microchip,mpfs-musb";
  444. reg = <0x0 0x20201000 0x0 0x1000>;
  445. interrupt-parent = <&plic>;
  446. interrupts = <86>, <87>;
  447. clocks = <&clkcfg CLK_USB>;
  448. interrupt-names = "dma","mc";
  449. status = "disabled";
  450. };
  451. mbox: mailbox@37020000 {
  452. compatible = "microchip,mpfs-mailbox";
  453. reg = <0x0 0x37020000 0x0 0x58>, <0x0 0x2000318C 0x0 0x40>,
  454. <0x0 0x37020800 0x0 0x100>;
  455. interrupt-parent = <&plic>;
  456. interrupts = <96>;
  457. #mbox-cells = <1>;
  458. status = "disabled";
  459. };
  460. };
  461. };