0021-riscv-dts-starfive-Add-initial-StarFive-JH7110-devic.patch 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  1. From ca57ce82224c21f93ad43754474fb8de1baf5caa Mon Sep 17 00:00:00 2001
  2. From: Emil Renner Berthing <[email protected]>
  3. Date: Sat, 1 Apr 2023 19:19:31 +0800
  4. Subject: [PATCH 021/122] riscv: dts: starfive: Add initial StarFive JH7110
  5. device tree
  6. Add initial device tree for the JH7110 RISC-V SoC by StarFive
  7. Technology Ltd.
  8. Tested-by: Tommaso Merciai <[email protected]>
  9. Reviewed-by: Conor Dooley <[email protected]>
  10. Signed-off-by: Emil Renner Berthing <[email protected]>
  11. Co-developed-by: Jianlong Huang <[email protected]>
  12. Signed-off-by: Jianlong Huang <[email protected]>
  13. Co-developed-by: Hal Feng <[email protected]>
  14. Signed-off-by: Hal Feng <[email protected]>
  15. [conor: squashed in the removal of the S7's non-existent mmu]
  16. Reviewed-by: Emil Renner Berthing <[email protected]>
  17. Signed-off-by: Conor Dooley <[email protected]>
  18. ---
  19. arch/riscv/Kconfig.socs | 5 +
  20. arch/riscv/boot/dts/starfive/jh7110.dtsi | 500 +++++++++++++++++++++++
  21. 2 files changed, 505 insertions(+)
  22. create mode 100644 arch/riscv/boot/dts/starfive/jh7110.dtsi
  23. --- a/arch/riscv/Kconfig.socs
  24. +++ b/arch/riscv/Kconfig.socs
  25. @@ -7,6 +7,8 @@ config SOC_MICROCHIP_POLARFIRE
  26. help
  27. This enables support for Microchip PolarFire SoC platforms.
  28. +config ARCH_SIFIVE
  29. + def_bool SOC_SIFIVE
  30. config SOC_SIFIVE
  31. bool "SiFive SoCs"
  32. select SERIAL_SIFIVE if TTY
  33. @@ -18,6 +20,9 @@ config SOC_SIFIVE
  34. help
  35. This enables support for SiFive SoC platform hardware.
  36. +config ARCH_STARFIVE
  37. + def_bool SOC_STARFIVE
  38. +
  39. config SOC_STARFIVE
  40. bool "StarFive SoCs"
  41. select PINCTRL
  42. --- /dev/null
  43. +++ b/arch/riscv/boot/dts/starfive/jh7110.dtsi
  44. @@ -0,0 +1,500 @@
  45. +// SPDX-License-Identifier: GPL-2.0 OR MIT
  46. +/*
  47. + * Copyright (C) 2022 StarFive Technology Co., Ltd.
  48. + * Copyright (C) 2022 Emil Renner Berthing <[email protected]>
  49. + */
  50. +
  51. +/dts-v1/;
  52. +#include <dt-bindings/clock/starfive,jh7110-crg.h>
  53. +#include <dt-bindings/reset/starfive,jh7110-crg.h>
  54. +
  55. +/ {
  56. + compatible = "starfive,jh7110";
  57. + #address-cells = <2>;
  58. + #size-cells = <2>;
  59. +
  60. + cpus {
  61. + #address-cells = <1>;
  62. + #size-cells = <0>;
  63. +
  64. + S7_0: cpu@0 {
  65. + compatible = "sifive,s7", "riscv";
  66. + reg = <0>;
  67. + device_type = "cpu";
  68. + i-cache-block-size = <64>;
  69. + i-cache-sets = <64>;
  70. + i-cache-size = <16384>;
  71. + next-level-cache = <&ccache>;
  72. + riscv,isa = "rv64imac_zba_zbb";
  73. + status = "disabled";
  74. +
  75. + cpu0_intc: interrupt-controller {
  76. + compatible = "riscv,cpu-intc";
  77. + interrupt-controller;
  78. + #interrupt-cells = <1>;
  79. + };
  80. + };
  81. +
  82. + U74_1: cpu@1 {
  83. + compatible = "sifive,u74-mc", "riscv";
  84. + reg = <1>;
  85. + d-cache-block-size = <64>;
  86. + d-cache-sets = <64>;
  87. + d-cache-size = <32768>;
  88. + d-tlb-sets = <1>;
  89. + d-tlb-size = <40>;
  90. + device_type = "cpu";
  91. + i-cache-block-size = <64>;
  92. + i-cache-sets = <64>;
  93. + i-cache-size = <32768>;
  94. + i-tlb-sets = <1>;
  95. + i-tlb-size = <40>;
  96. + mmu-type = "riscv,sv39";
  97. + next-level-cache = <&ccache>;
  98. + riscv,isa = "rv64imafdc_zba_zbb";
  99. + tlb-split;
  100. +
  101. + cpu1_intc: interrupt-controller {
  102. + compatible = "riscv,cpu-intc";
  103. + interrupt-controller;
  104. + #interrupt-cells = <1>;
  105. + };
  106. + };
  107. +
  108. + U74_2: cpu@2 {
  109. + compatible = "sifive,u74-mc", "riscv";
  110. + reg = <2>;
  111. + d-cache-block-size = <64>;
  112. + d-cache-sets = <64>;
  113. + d-cache-size = <32768>;
  114. + d-tlb-sets = <1>;
  115. + d-tlb-size = <40>;
  116. + device_type = "cpu";
  117. + i-cache-block-size = <64>;
  118. + i-cache-sets = <64>;
  119. + i-cache-size = <32768>;
  120. + i-tlb-sets = <1>;
  121. + i-tlb-size = <40>;
  122. + mmu-type = "riscv,sv39";
  123. + next-level-cache = <&ccache>;
  124. + riscv,isa = "rv64imafdc_zba_zbb";
  125. + tlb-split;
  126. +
  127. + cpu2_intc: interrupt-controller {
  128. + compatible = "riscv,cpu-intc";
  129. + interrupt-controller;
  130. + #interrupt-cells = <1>;
  131. + };
  132. + };
  133. +
  134. + U74_3: cpu@3 {
  135. + compatible = "sifive,u74-mc", "riscv";
  136. + reg = <3>;
  137. + d-cache-block-size = <64>;
  138. + d-cache-sets = <64>;
  139. + d-cache-size = <32768>;
  140. + d-tlb-sets = <1>;
  141. + d-tlb-size = <40>;
  142. + device_type = "cpu";
  143. + i-cache-block-size = <64>;
  144. + i-cache-sets = <64>;
  145. + i-cache-size = <32768>;
  146. + i-tlb-sets = <1>;
  147. + i-tlb-size = <40>;
  148. + mmu-type = "riscv,sv39";
  149. + next-level-cache = <&ccache>;
  150. + riscv,isa = "rv64imafdc_zba_zbb";
  151. + tlb-split;
  152. +
  153. + cpu3_intc: interrupt-controller {
  154. + compatible = "riscv,cpu-intc";
  155. + interrupt-controller;
  156. + #interrupt-cells = <1>;
  157. + };
  158. + };
  159. +
  160. + U74_4: cpu@4 {
  161. + compatible = "sifive,u74-mc", "riscv";
  162. + reg = <4>;
  163. + d-cache-block-size = <64>;
  164. + d-cache-sets = <64>;
  165. + d-cache-size = <32768>;
  166. + d-tlb-sets = <1>;
  167. + d-tlb-size = <40>;
  168. + device_type = "cpu";
  169. + i-cache-block-size = <64>;
  170. + i-cache-sets = <64>;
  171. + i-cache-size = <32768>;
  172. + i-tlb-sets = <1>;
  173. + i-tlb-size = <40>;
  174. + mmu-type = "riscv,sv39";
  175. + next-level-cache = <&ccache>;
  176. + riscv,isa = "rv64imafdc_zba_zbb";
  177. + tlb-split;
  178. +
  179. + cpu4_intc: interrupt-controller {
  180. + compatible = "riscv,cpu-intc";
  181. + interrupt-controller;
  182. + #interrupt-cells = <1>;
  183. + };
  184. + };
  185. +
  186. + cpu-map {
  187. + cluster0 {
  188. + core0 {
  189. + cpu = <&S7_0>;
  190. + };
  191. +
  192. + core1 {
  193. + cpu = <&U74_1>;
  194. + };
  195. +
  196. + core2 {
  197. + cpu = <&U74_2>;
  198. + };
  199. +
  200. + core3 {
  201. + cpu = <&U74_3>;
  202. + };
  203. +
  204. + core4 {
  205. + cpu = <&U74_4>;
  206. + };
  207. + };
  208. + };
  209. + };
  210. +
  211. + gmac0_rgmii_rxin: gmac0-rgmii-rxin-clock {
  212. + compatible = "fixed-clock";
  213. + clock-output-names = "gmac0_rgmii_rxin";
  214. + #clock-cells = <0>;
  215. + };
  216. +
  217. + gmac0_rmii_refin: gmac0-rmii-refin-clock {
  218. + compatible = "fixed-clock";
  219. + clock-output-names = "gmac0_rmii_refin";
  220. + #clock-cells = <0>;
  221. + };
  222. +
  223. + gmac1_rgmii_rxin: gmac1-rgmii-rxin-clock {
  224. + compatible = "fixed-clock";
  225. + clock-output-names = "gmac1_rgmii_rxin";
  226. + #clock-cells = <0>;
  227. + };
  228. +
  229. + gmac1_rmii_refin: gmac1-rmii-refin-clock {
  230. + compatible = "fixed-clock";
  231. + clock-output-names = "gmac1_rmii_refin";
  232. + #clock-cells = <0>;
  233. + };
  234. +
  235. + i2srx_bclk_ext: i2srx-bclk-ext-clock {
  236. + compatible = "fixed-clock";
  237. + clock-output-names = "i2srx_bclk_ext";
  238. + #clock-cells = <0>;
  239. + };
  240. +
  241. + i2srx_lrck_ext: i2srx-lrck-ext-clock {
  242. + compatible = "fixed-clock";
  243. + clock-output-names = "i2srx_lrck_ext";
  244. + #clock-cells = <0>;
  245. + };
  246. +
  247. + i2stx_bclk_ext: i2stx-bclk-ext-clock {
  248. + compatible = "fixed-clock";
  249. + clock-output-names = "i2stx_bclk_ext";
  250. + #clock-cells = <0>;
  251. + };
  252. +
  253. + i2stx_lrck_ext: i2stx-lrck-ext-clock {
  254. + compatible = "fixed-clock";
  255. + clock-output-names = "i2stx_lrck_ext";
  256. + #clock-cells = <0>;
  257. + };
  258. +
  259. + mclk_ext: mclk-ext-clock {
  260. + compatible = "fixed-clock";
  261. + clock-output-names = "mclk_ext";
  262. + #clock-cells = <0>;
  263. + };
  264. +
  265. + osc: oscillator {
  266. + compatible = "fixed-clock";
  267. + clock-output-names = "osc";
  268. + #clock-cells = <0>;
  269. + };
  270. +
  271. + rtc_osc: rtc-oscillator {
  272. + compatible = "fixed-clock";
  273. + clock-output-names = "rtc_osc";
  274. + #clock-cells = <0>;
  275. + };
  276. +
  277. + tdm_ext: tdm-ext-clock {
  278. + compatible = "fixed-clock";
  279. + clock-output-names = "tdm_ext";
  280. + #clock-cells = <0>;
  281. + };
  282. +
  283. + soc {
  284. + compatible = "simple-bus";
  285. + interrupt-parent = <&plic>;
  286. + #address-cells = <2>;
  287. + #size-cells = <2>;
  288. + ranges;
  289. +
  290. + clint: timer@2000000 {
  291. + compatible = "starfive,jh7110-clint", "sifive,clint0";
  292. + reg = <0x0 0x2000000 0x0 0x10000>;
  293. + interrupts-extended = <&cpu0_intc 3>, <&cpu0_intc 7>,
  294. + <&cpu1_intc 3>, <&cpu1_intc 7>,
  295. + <&cpu2_intc 3>, <&cpu2_intc 7>,
  296. + <&cpu3_intc 3>, <&cpu3_intc 7>,
  297. + <&cpu4_intc 3>, <&cpu4_intc 7>;
  298. + };
  299. +
  300. + ccache: cache-controller@2010000 {
  301. + compatible = "starfive,jh7110-ccache", "sifive,ccache0", "cache";
  302. + reg = <0x0 0x2010000 0x0 0x4000>;
  303. + interrupts = <1>, <3>, <4>, <2>;
  304. + cache-block-size = <64>;
  305. + cache-level = <2>;
  306. + cache-sets = <2048>;
  307. + cache-size = <2097152>;
  308. + cache-unified;
  309. + };
  310. +
  311. + plic: interrupt-controller@c000000 {
  312. + compatible = "starfive,jh7110-plic", "sifive,plic-1.0.0";
  313. + reg = <0x0 0xc000000 0x0 0x4000000>;
  314. + interrupts-extended = <&cpu0_intc 11>,
  315. + <&cpu1_intc 11>, <&cpu1_intc 9>,
  316. + <&cpu2_intc 11>, <&cpu2_intc 9>,
  317. + <&cpu3_intc 11>, <&cpu3_intc 9>,
  318. + <&cpu4_intc 11>, <&cpu4_intc 9>;
  319. + interrupt-controller;
  320. + #interrupt-cells = <1>;
  321. + #address-cells = <0>;
  322. + riscv,ndev = <136>;
  323. + };
  324. +
  325. + uart0: serial@10000000 {
  326. + compatible = "snps,dw-apb-uart";
  327. + reg = <0x0 0x10000000 0x0 0x10000>;
  328. + clocks = <&syscrg JH7110_SYSCLK_UART0_CORE>,
  329. + <&syscrg JH7110_SYSCLK_UART0_APB>;
  330. + clock-names = "baudclk", "apb_pclk";
  331. + resets = <&syscrg JH7110_SYSRST_UART0_APB>;
  332. + interrupts = <32>;
  333. + reg-io-width = <4>;
  334. + reg-shift = <2>;
  335. + status = "disabled";
  336. + };
  337. +
  338. + uart1: serial@10010000 {
  339. + compatible = "snps,dw-apb-uart";
  340. + reg = <0x0 0x10010000 0x0 0x10000>;
  341. + clocks = <&syscrg JH7110_SYSCLK_UART1_CORE>,
  342. + <&syscrg JH7110_SYSCLK_UART1_APB>;
  343. + clock-names = "baudclk", "apb_pclk";
  344. + resets = <&syscrg JH7110_SYSRST_UART1_APB>;
  345. + interrupts = <33>;
  346. + reg-io-width = <4>;
  347. + reg-shift = <2>;
  348. + status = "disabled";
  349. + };
  350. +
  351. + uart2: serial@10020000 {
  352. + compatible = "snps,dw-apb-uart";
  353. + reg = <0x0 0x10020000 0x0 0x10000>;
  354. + clocks = <&syscrg JH7110_SYSCLK_UART2_CORE>,
  355. + <&syscrg JH7110_SYSCLK_UART2_APB>;
  356. + clock-names = "baudclk", "apb_pclk";
  357. + resets = <&syscrg JH7110_SYSRST_UART2_APB>;
  358. + interrupts = <34>;
  359. + reg-io-width = <4>;
  360. + reg-shift = <2>;
  361. + status = "disabled";
  362. + };
  363. +
  364. + i2c0: i2c@10030000 {
  365. + compatible = "snps,designware-i2c";
  366. + reg = <0x0 0x10030000 0x0 0x10000>;
  367. + clocks = <&syscrg JH7110_SYSCLK_I2C0_APB>;
  368. + clock-names = "ref";
  369. + resets = <&syscrg JH7110_SYSRST_I2C0_APB>;
  370. + interrupts = <35>;
  371. + #address-cells = <1>;
  372. + #size-cells = <0>;
  373. + status = "disabled";
  374. + };
  375. +
  376. + i2c1: i2c@10040000 {
  377. + compatible = "snps,designware-i2c";
  378. + reg = <0x0 0x10040000 0x0 0x10000>;
  379. + clocks = <&syscrg JH7110_SYSCLK_I2C1_APB>;
  380. + clock-names = "ref";
  381. + resets = <&syscrg JH7110_SYSRST_I2C1_APB>;
  382. + interrupts = <36>;
  383. + #address-cells = <1>;
  384. + #size-cells = <0>;
  385. + status = "disabled";
  386. + };
  387. +
  388. + i2c2: i2c@10050000 {
  389. + compatible = "snps,designware-i2c";
  390. + reg = <0x0 0x10050000 0x0 0x10000>;
  391. + clocks = <&syscrg JH7110_SYSCLK_I2C2_APB>;
  392. + clock-names = "ref";
  393. + resets = <&syscrg JH7110_SYSRST_I2C2_APB>;
  394. + interrupts = <37>;
  395. + #address-cells = <1>;
  396. + #size-cells = <0>;
  397. + status = "disabled";
  398. + };
  399. +
  400. + uart3: serial@12000000 {
  401. + compatible = "snps,dw-apb-uart";
  402. + reg = <0x0 0x12000000 0x0 0x10000>;
  403. + clocks = <&syscrg JH7110_SYSCLK_UART3_CORE>,
  404. + <&syscrg JH7110_SYSCLK_UART3_APB>;
  405. + clock-names = "baudclk", "apb_pclk";
  406. + resets = <&syscrg JH7110_SYSRST_UART3_APB>;
  407. + interrupts = <45>;
  408. + reg-io-width = <4>;
  409. + reg-shift = <2>;
  410. + status = "disabled";
  411. + };
  412. +
  413. + uart4: serial@12010000 {
  414. + compatible = "snps,dw-apb-uart";
  415. + reg = <0x0 0x12010000 0x0 0x10000>;
  416. + clocks = <&syscrg JH7110_SYSCLK_UART4_CORE>,
  417. + <&syscrg JH7110_SYSCLK_UART4_APB>;
  418. + clock-names = "baudclk", "apb_pclk";
  419. + resets = <&syscrg JH7110_SYSRST_UART4_APB>;
  420. + interrupts = <46>;
  421. + reg-io-width = <4>;
  422. + reg-shift = <2>;
  423. + status = "disabled";
  424. + };
  425. +
  426. + uart5: serial@12020000 {
  427. + compatible = "snps,dw-apb-uart";
  428. + reg = <0x0 0x12020000 0x0 0x10000>;
  429. + clocks = <&syscrg JH7110_SYSCLK_UART5_CORE>,
  430. + <&syscrg JH7110_SYSCLK_UART5_APB>;
  431. + clock-names = "baudclk", "apb_pclk";
  432. + resets = <&syscrg JH7110_SYSRST_UART5_APB>;
  433. + interrupts = <47>;
  434. + reg-io-width = <4>;
  435. + reg-shift = <2>;
  436. + status = "disabled";
  437. + };
  438. +
  439. + i2c3: i2c@12030000 {
  440. + compatible = "snps,designware-i2c";
  441. + reg = <0x0 0x12030000 0x0 0x10000>;
  442. + clocks = <&syscrg JH7110_SYSCLK_I2C3_APB>;
  443. + clock-names = "ref";
  444. + resets = <&syscrg JH7110_SYSRST_I2C3_APB>;
  445. + interrupts = <48>;
  446. + #address-cells = <1>;
  447. + #size-cells = <0>;
  448. + status = "disabled";
  449. + };
  450. +
  451. + i2c4: i2c@12040000 {
  452. + compatible = "snps,designware-i2c";
  453. + reg = <0x0 0x12040000 0x0 0x10000>;
  454. + clocks = <&syscrg JH7110_SYSCLK_I2C4_APB>;
  455. + clock-names = "ref";
  456. + resets = <&syscrg JH7110_SYSRST_I2C4_APB>;
  457. + interrupts = <49>;
  458. + #address-cells = <1>;
  459. + #size-cells = <0>;
  460. + status = "disabled";
  461. + };
  462. +
  463. + i2c5: i2c@12050000 {
  464. + compatible = "snps,designware-i2c";
  465. + reg = <0x0 0x12050000 0x0 0x10000>;
  466. + clocks = <&syscrg JH7110_SYSCLK_I2C5_APB>;
  467. + clock-names = "ref";
  468. + resets = <&syscrg JH7110_SYSRST_I2C5_APB>;
  469. + interrupts = <50>;
  470. + #address-cells = <1>;
  471. + #size-cells = <0>;
  472. + status = "disabled";
  473. + };
  474. +
  475. + i2c6: i2c@12060000 {
  476. + compatible = "snps,designware-i2c";
  477. + reg = <0x0 0x12060000 0x0 0x10000>;
  478. + clocks = <&syscrg JH7110_SYSCLK_I2C6_APB>;
  479. + clock-names = "ref";
  480. + resets = <&syscrg JH7110_SYSRST_I2C6_APB>;
  481. + interrupts = <51>;
  482. + #address-cells = <1>;
  483. + #size-cells = <0>;
  484. + status = "disabled";
  485. + };
  486. +
  487. + syscrg: clock-controller@13020000 {
  488. + compatible = "starfive,jh7110-syscrg";
  489. + reg = <0x0 0x13020000 0x0 0x10000>;
  490. + clocks = <&osc>, <&gmac1_rmii_refin>,
  491. + <&gmac1_rgmii_rxin>,
  492. + <&i2stx_bclk_ext>, <&i2stx_lrck_ext>,
  493. + <&i2srx_bclk_ext>, <&i2srx_lrck_ext>,
  494. + <&tdm_ext>, <&mclk_ext>;
  495. + clock-names = "osc", "gmac1_rmii_refin",
  496. + "gmac1_rgmii_rxin",
  497. + "i2stx_bclk_ext", "i2stx_lrck_ext",
  498. + "i2srx_bclk_ext", "i2srx_lrck_ext",
  499. + "tdm_ext", "mclk_ext";
  500. + #clock-cells = <1>;
  501. + #reset-cells = <1>;
  502. + };
  503. +
  504. + sysgpio: pinctrl@13040000 {
  505. + compatible = "starfive,jh7110-sys-pinctrl";
  506. + reg = <0x0 0x13040000 0x0 0x10000>;
  507. + clocks = <&syscrg JH7110_SYSCLK_IOMUX_APB>;
  508. + resets = <&syscrg JH7110_SYSRST_IOMUX_APB>;
  509. + interrupts = <86>;
  510. + interrupt-controller;
  511. + #interrupt-cells = <2>;
  512. + gpio-controller;
  513. + #gpio-cells = <2>;
  514. + };
  515. +
  516. + aoncrg: clock-controller@17000000 {
  517. + compatible = "starfive,jh7110-aoncrg";
  518. + reg = <0x0 0x17000000 0x0 0x10000>;
  519. + clocks = <&osc>, <&gmac0_rmii_refin>,
  520. + <&gmac0_rgmii_rxin>,
  521. + <&syscrg JH7110_SYSCLK_STG_AXIAHB>,
  522. + <&syscrg JH7110_SYSCLK_APB_BUS>,
  523. + <&syscrg JH7110_SYSCLK_GMAC0_GTXCLK>,
  524. + <&rtc_osc>;
  525. + clock-names = "osc", "gmac0_rmii_refin",
  526. + "gmac0_rgmii_rxin", "stg_axiahb",
  527. + "apb_bus", "gmac0_gtxclk",
  528. + "rtc_osc";
  529. + #clock-cells = <1>;
  530. + #reset-cells = <1>;
  531. + };
  532. +
  533. + aongpio: pinctrl@17020000 {
  534. + compatible = "starfive,jh7110-aon-pinctrl";
  535. + reg = <0x0 0x17020000 0x0 0x10000>;
  536. + resets = <&aoncrg JH7110_AONRST_IOMUX>;
  537. + interrupts = <85>;
  538. + interrupt-controller;
  539. + #interrupt-cells = <2>;
  540. + gpio-controller;
  541. + #gpio-cells = <2>;
  542. + };
  543. + };
  544. +};