mpfs.dtsi 14 KB

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