sun8i-r40.dtsi 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326
  1. /*
  2. * Copyright 2017 Chen-Yu Tsai <[email protected]>
  3. * Copyright 2017 Icenowy Zheng <[email protected]>
  4. *
  5. * This file is dual-licensed: you can use it either under the terms
  6. * of the GPL or the X11 license, at your option. Note that this dual
  7. * licensing only applies to this file, and not this project as a
  8. * whole.
  9. *
  10. * a) This file is free software; you can redistribute it and/or
  11. * modify it under the terms of the GNU General Public License as
  12. * published by the Free Software Foundation; either version 2 of the
  13. * License, or (at your option) any later version.
  14. *
  15. * This file is distributed in the hope that it will be useful,
  16. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18. * GNU General Public License for more details.
  19. *
  20. * Or, alternatively,
  21. *
  22. * b) Permission is hereby granted, free of charge, to any person
  23. * obtaining a copy of this software and associated documentation
  24. * files (the "Software"), to deal in the Software without
  25. * restriction, including without limitation the rights to use,
  26. * copy, modify, merge, publish, distribute, sublicense, and/or
  27. * sell copies of the Software, and to permit persons to whom the
  28. * Software is furnished to do so, subject to the following
  29. * conditions:
  30. *
  31. * The above copyright notice and this permission notice shall be
  32. * included in all copies or substantial portions of the Software.
  33. *
  34. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  35. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  36. * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  37. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  38. * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  39. * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  40. * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  41. * OTHER DEALINGS IN THE SOFTWARE.
  42. */
  43. #include <dt-bindings/interrupt-controller/arm-gic.h>
  44. #include <dt-bindings/clock/sun6i-rtc.h>
  45. #include <dt-bindings/clock/sun8i-de2.h>
  46. #include <dt-bindings/clock/sun8i-r40-ccu.h>
  47. #include <dt-bindings/clock/sun8i-tcon-top.h>
  48. #include <dt-bindings/reset/sun8i-r40-ccu.h>
  49. #include <dt-bindings/reset/sun8i-de2.h>
  50. #include <dt-bindings/thermal/thermal.h>
  51. / {
  52. #address-cells = <1>;
  53. #size-cells = <1>;
  54. interrupt-parent = <&gic>;
  55. clocks {
  56. #address-cells = <1>;
  57. #size-cells = <1>;
  58. ranges;
  59. osc24M: osc24M {
  60. #clock-cells = <0>;
  61. compatible = "fixed-clock";
  62. clock-frequency = <24000000>;
  63. clock-accuracy = <50000>;
  64. clock-output-names = "osc24M";
  65. };
  66. osc32k: osc32k {
  67. #clock-cells = <0>;
  68. compatible = "fixed-clock";
  69. clock-frequency = <32768>;
  70. clock-accuracy = <20000>;
  71. clock-output-names = "ext-osc32k";
  72. };
  73. };
  74. cpus {
  75. #address-cells = <1>;
  76. #size-cells = <0>;
  77. cpu0: cpu@0 {
  78. compatible = "arm,cortex-a7";
  79. device_type = "cpu";
  80. reg = <0>;
  81. clocks = <&ccu CLK_CPU>;
  82. clock-names = "cpu";
  83. #cooling-cells = <2>;
  84. };
  85. cpu1: cpu@1 {
  86. compatible = "arm,cortex-a7";
  87. device_type = "cpu";
  88. reg = <1>;
  89. clocks = <&ccu CLK_CPU>;
  90. clock-names = "cpu";
  91. #cooling-cells = <2>;
  92. };
  93. cpu2: cpu@2 {
  94. compatible = "arm,cortex-a7";
  95. device_type = "cpu";
  96. reg = <2>;
  97. clocks = <&ccu CLK_CPU>;
  98. clock-names = "cpu";
  99. #cooling-cells = <2>;
  100. };
  101. cpu3: cpu@3 {
  102. compatible = "arm,cortex-a7";
  103. device_type = "cpu";
  104. reg = <3>;
  105. clocks = <&ccu CLK_CPU>;
  106. clock-names = "cpu";
  107. #cooling-cells = <2>;
  108. };
  109. };
  110. de: display-engine {
  111. compatible = "allwinner,sun8i-r40-display-engine";
  112. allwinner,pipelines = <&mixer0>, <&mixer1>;
  113. status = "disabled";
  114. };
  115. thermal-zones {
  116. cpu_thermal: cpu0-thermal {
  117. /* milliseconds */
  118. polling-delay-passive = <0>;
  119. polling-delay = <0>;
  120. thermal-sensors = <&ths 0>;
  121. trips {
  122. cpu_hot_trip: cpu-hot {
  123. temperature = <80000>;
  124. hysteresis = <2000>;
  125. type = "passive";
  126. };
  127. cpu_very_hot_trip: cpu-very-hot {
  128. temperature = <115000>;
  129. hysteresis = <0>;
  130. type = "critical";
  131. };
  132. };
  133. cooling-maps {
  134. cpu-hot-limit {
  135. trip = <&cpu_hot_trip>;
  136. cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
  137. <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
  138. <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
  139. <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
  140. };
  141. };
  142. };
  143. gpu_thermal: gpu-thermal {
  144. /* milliseconds */
  145. polling-delay-passive = <0>;
  146. polling-delay = <0>;
  147. thermal-sensors = <&ths 1>;
  148. };
  149. };
  150. soc {
  151. compatible = "simple-bus";
  152. #address-cells = <1>;
  153. #size-cells = <1>;
  154. ranges;
  155. display_clocks: clock@1000000 {
  156. compatible = "allwinner,sun8i-r40-de2-clk",
  157. "allwinner,sun8i-h3-de2-clk";
  158. reg = <0x01000000 0x10000>;
  159. clocks = <&ccu CLK_BUS_DE>,
  160. <&ccu CLK_DE>;
  161. clock-names = "bus",
  162. "mod";
  163. resets = <&ccu RST_BUS_DE>;
  164. #clock-cells = <1>;
  165. #reset-cells = <1>;
  166. };
  167. mixer0: mixer@1100000 {
  168. compatible = "allwinner,sun8i-r40-de2-mixer-0";
  169. reg = <0x01100000 0x100000>;
  170. clocks = <&display_clocks CLK_BUS_MIXER0>,
  171. <&display_clocks CLK_MIXER0>;
  172. clock-names = "bus",
  173. "mod";
  174. resets = <&display_clocks RST_MIXER0>;
  175. ports {
  176. #address-cells = <1>;
  177. #size-cells = <0>;
  178. mixer0_out: port@1 {
  179. reg = <1>;
  180. mixer0_out_tcon_top: endpoint {
  181. remote-endpoint = <&tcon_top_mixer0_in_mixer0>;
  182. };
  183. };
  184. };
  185. };
  186. mixer1: mixer@1200000 {
  187. compatible = "allwinner,sun8i-r40-de2-mixer-1";
  188. reg = <0x01200000 0x100000>;
  189. clocks = <&display_clocks CLK_BUS_MIXER1>,
  190. <&display_clocks CLK_MIXER1>;
  191. clock-names = "bus",
  192. "mod";
  193. resets = <&display_clocks RST_WB>;
  194. ports {
  195. #address-cells = <1>;
  196. #size-cells = <0>;
  197. mixer1_out: port@1 {
  198. reg = <1>;
  199. mixer1_out_tcon_top: endpoint {
  200. remote-endpoint = <&tcon_top_mixer1_in_mixer1>;
  201. };
  202. };
  203. };
  204. };
  205. deinterlace: deinterlace@1400000 {
  206. compatible = "allwinner,sun8i-r40-deinterlace",
  207. "allwinner,sun8i-h3-deinterlace";
  208. reg = <0x01400000 0x20000>;
  209. clocks = <&ccu CLK_BUS_DEINTERLACE>,
  210. <&ccu CLK_DEINTERLACE>,
  211. /*
  212. * NOTE: Contrary to what datasheet claims,
  213. * DRAM deinterlace gate doesn't exist and
  214. * it's shared with CSI1.
  215. */
  216. <&ccu CLK_DRAM_CSI1>;
  217. clock-names = "bus", "mod", "ram";
  218. resets = <&ccu RST_BUS_DEINTERLACE>;
  219. interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
  220. interconnects = <&mbus 9>;
  221. interconnect-names = "dma-mem";
  222. };
  223. syscon: system-control@1c00000 {
  224. compatible = "allwinner,sun8i-r40-system-control",
  225. "allwinner,sun4i-a10-system-control";
  226. reg = <0x01c00000 0x30>;
  227. #address-cells = <1>;
  228. #size-cells = <1>;
  229. ranges;
  230. sram_c: sram@1d00000 {
  231. compatible = "mmio-sram";
  232. reg = <0x01d00000 0xd0000>;
  233. #address-cells = <1>;
  234. #size-cells = <1>;
  235. ranges = <0 0x01d00000 0xd0000>;
  236. ve_sram: sram-section@0 {
  237. compatible = "allwinner,sun8i-r40-sram-c1",
  238. "allwinner,sun4i-a10-sram-c1";
  239. reg = <0x000000 0x80000>;
  240. };
  241. };
  242. };
  243. nmi_intc: interrupt-controller@1c00030 {
  244. compatible = "allwinner,sun7i-a20-sc-nmi";
  245. interrupt-controller;
  246. #interrupt-cells = <2>;
  247. reg = <0x01c00030 0x0c>;
  248. interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
  249. };
  250. dma: dma-controller@1c02000 {
  251. compatible = "allwinner,sun8i-r40-dma",
  252. "allwinner,sun50i-a64-dma";
  253. reg = <0x01c02000 0x1000>;
  254. interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>;
  255. clocks = <&ccu CLK_BUS_DMA>;
  256. dma-channels = <16>;
  257. dma-requests = <31>;
  258. resets = <&ccu RST_BUS_DMA>;
  259. #dma-cells = <1>;
  260. };
  261. spi0: spi@1c05000 {
  262. compatible = "allwinner,sun8i-r40-spi",
  263. "allwinner,sun8i-h3-spi";
  264. reg = <0x01c05000 0x1000>;
  265. interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
  266. clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_SPI0>;
  267. clock-names = "ahb", "mod";
  268. resets = <&ccu RST_BUS_SPI0>;
  269. status = "disabled";
  270. #address-cells = <1>;
  271. #size-cells = <0>;
  272. };
  273. spi1: spi@1c06000 {
  274. compatible = "allwinner,sun8i-r40-spi",
  275. "allwinner,sun8i-h3-spi";
  276. reg = <0x01c06000 0x1000>;
  277. interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
  278. clocks = <&ccu CLK_BUS_SPI1>, <&ccu CLK_SPI1>;
  279. clock-names = "ahb", "mod";
  280. resets = <&ccu RST_BUS_SPI1>;
  281. status = "disabled";
  282. #address-cells = <1>;
  283. #size-cells = <0>;
  284. };
  285. csi0: csi@1c09000 {
  286. compatible = "allwinner,sun8i-r40-csi0",
  287. "allwinner,sun7i-a20-csi0";
  288. reg = <0x01c09000 0x1000>;
  289. interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
  290. clocks = <&ccu CLK_BUS_CSI0>, <&ccu CLK_CSI_SCLK>,
  291. <&ccu CLK_DRAM_CSI0>;
  292. clock-names = "bus", "isp", "ram";
  293. resets = <&ccu RST_BUS_CSI0>;
  294. interconnects = <&mbus 5>;
  295. interconnect-names = "dma-mem";
  296. status = "disabled";
  297. };
  298. video-codec@1c0e000 {
  299. compatible = "allwinner,sun8i-r40-video-engine";
  300. reg = <0x01c0e000 0x1000>;
  301. clocks = <&ccu CLK_BUS_VE>, <&ccu CLK_VE>,
  302. <&ccu CLK_DRAM_VE>;
  303. clock-names = "ahb", "mod", "ram";
  304. resets = <&ccu RST_BUS_VE>;
  305. interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
  306. allwinner,sram = <&ve_sram 1>;
  307. };
  308. mmc0: mmc@1c0f000 {
  309. compatible = "allwinner,sun8i-r40-mmc",
  310. "allwinner,sun50i-a64-mmc";
  311. reg = <0x01c0f000 0x1000>;
  312. clocks = <&ccu CLK_BUS_MMC0>, <&ccu CLK_MMC0>;
  313. clock-names = "ahb", "mmc";
  314. resets = <&ccu RST_BUS_MMC0>;
  315. reset-names = "ahb";
  316. pinctrl-0 = <&mmc0_pins>;
  317. pinctrl-names = "default";
  318. interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
  319. status = "disabled";
  320. #address-cells = <1>;
  321. #size-cells = <0>;
  322. };
  323. mmc1: mmc@1c10000 {
  324. compatible = "allwinner,sun8i-r40-mmc",
  325. "allwinner,sun50i-a64-mmc";
  326. reg = <0x01c10000 0x1000>;
  327. clocks = <&ccu CLK_BUS_MMC1>, <&ccu CLK_MMC1>;
  328. clock-names = "ahb", "mmc";
  329. resets = <&ccu RST_BUS_MMC1>;
  330. reset-names = "ahb";
  331. interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
  332. status = "disabled";
  333. #address-cells = <1>;
  334. #size-cells = <0>;
  335. };
  336. mmc2: mmc@1c11000 {
  337. compatible = "allwinner,sun8i-r40-emmc",
  338. "allwinner,sun50i-a64-emmc";
  339. reg = <0x01c11000 0x1000>;
  340. clocks = <&ccu CLK_BUS_MMC2>, <&ccu CLK_MMC2>;
  341. clock-names = "ahb", "mmc";
  342. resets = <&ccu RST_BUS_MMC2>;
  343. reset-names = "ahb";
  344. pinctrl-0 = <&mmc2_pins>;
  345. pinctrl-names = "default";
  346. interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
  347. status = "disabled";
  348. #address-cells = <1>;
  349. #size-cells = <0>;
  350. };
  351. mmc3: mmc@1c12000 {
  352. compatible = "allwinner,sun8i-r40-mmc",
  353. "allwinner,sun50i-a64-mmc";
  354. reg = <0x01c12000 0x1000>;
  355. clocks = <&ccu CLK_BUS_MMC3>, <&ccu CLK_MMC3>;
  356. clock-names = "ahb", "mmc";
  357. resets = <&ccu RST_BUS_MMC3>;
  358. reset-names = "ahb";
  359. pinctrl-0 = <&mmc3_pins>;
  360. pinctrl-names = "default";
  361. interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
  362. status = "disabled";
  363. #address-cells = <1>;
  364. #size-cells = <0>;
  365. };
  366. usbphy: phy@1c13400 {
  367. compatible = "allwinner,sun8i-r40-usb-phy";
  368. reg = <0x01c13400 0x14>,
  369. <0x01c14800 0x4>,
  370. <0x01c19800 0x4>,
  371. <0x01c1c800 0x4>;
  372. reg-names = "phy_ctrl",
  373. "pmu0",
  374. "pmu1",
  375. "pmu2";
  376. clocks = <&ccu CLK_USB_PHY0>,
  377. <&ccu CLK_USB_PHY1>,
  378. <&ccu CLK_USB_PHY2>;
  379. clock-names = "usb0_phy",
  380. "usb1_phy",
  381. "usb2_phy";
  382. resets = <&ccu RST_USB_PHY0>,
  383. <&ccu RST_USB_PHY1>,
  384. <&ccu RST_USB_PHY2>;
  385. reset-names = "usb0_reset",
  386. "usb1_reset",
  387. "usb2_reset";
  388. status = "disabled";
  389. #phy-cells = <1>;
  390. };
  391. crypto: crypto@1c15000 {
  392. compatible = "allwinner,sun8i-r40-crypto";
  393. reg = <0x01c15000 0x1000>;
  394. interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
  395. clocks = <&ccu CLK_BUS_CE>, <&ccu CLK_CE>;
  396. clock-names = "bus", "mod";
  397. resets = <&ccu RST_BUS_CE>;
  398. };
  399. spi2: spi@1c17000 {
  400. compatible = "allwinner,sun8i-r40-spi",
  401. "allwinner,sun8i-h3-spi";
  402. reg = <0x01c17000 0x1000>;
  403. interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
  404. clocks = <&ccu CLK_BUS_SPI2>, <&ccu CLK_SPI2>;
  405. clock-names = "ahb", "mod";
  406. resets = <&ccu RST_BUS_SPI2>;
  407. status = "disabled";
  408. #address-cells = <1>;
  409. #size-cells = <0>;
  410. };
  411. ahci: sata@1c18000 {
  412. compatible = "allwinner,sun8i-r40-ahci";
  413. reg = <0x01c18000 0x1000>;
  414. interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>;
  415. clocks = <&ccu CLK_BUS_SATA>, <&ccu CLK_SATA>;
  416. resets = <&ccu RST_BUS_SATA>;
  417. reset-names = "ahci";
  418. status = "disabled";
  419. };
  420. ehci1: usb@1c19000 {
  421. compatible = "allwinner,sun8i-r40-ehci", "generic-ehci";
  422. reg = <0x01c19000 0x100>;
  423. interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
  424. clocks = <&ccu CLK_BUS_EHCI1>;
  425. resets = <&ccu RST_BUS_EHCI1>;
  426. phys = <&usbphy 1>;
  427. phy-names = "usb";
  428. status = "disabled";
  429. };
  430. ohci1: usb@1c19400 {
  431. compatible = "allwinner,sun8i-r40-ohci", "generic-ohci";
  432. reg = <0x01c19400 0x100>;
  433. interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
  434. clocks = <&ccu CLK_BUS_OHCI1>,
  435. <&ccu CLK_USB_OHCI1>;
  436. resets = <&ccu RST_BUS_OHCI1>;
  437. phys = <&usbphy 1>;
  438. phy-names = "usb";
  439. status = "disabled";
  440. };
  441. ehci2: usb@1c1c000 {
  442. compatible = "allwinner,sun8i-r40-ehci", "generic-ehci";
  443. reg = <0x01c1c000 0x100>;
  444. interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
  445. clocks = <&ccu CLK_BUS_EHCI2>;
  446. resets = <&ccu RST_BUS_EHCI2>;
  447. phys = <&usbphy 2>;
  448. phy-names = "usb";
  449. status = "disabled";
  450. };
  451. ohci2: usb@1c1c400 {
  452. compatible = "allwinner,sun8i-r40-ohci", "generic-ohci";
  453. reg = <0x01c1c400 0x100>;
  454. interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
  455. clocks = <&ccu CLK_BUS_OHCI2>,
  456. <&ccu CLK_USB_OHCI2>;
  457. resets = <&ccu RST_BUS_OHCI2>;
  458. phys = <&usbphy 2>;
  459. phy-names = "usb";
  460. status = "disabled";
  461. };
  462. spi3: spi@1c1f000 {
  463. compatible = "allwinner,sun8i-r40-spi",
  464. "allwinner,sun8i-h3-spi";
  465. reg = <0x01c1f000 0x1000>;
  466. interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
  467. clocks = <&ccu CLK_BUS_SPI3>, <&ccu CLK_SPI3>;
  468. clock-names = "ahb", "mod";
  469. resets = <&ccu RST_BUS_SPI3>;
  470. status = "disabled";
  471. #address-cells = <1>;
  472. #size-cells = <0>;
  473. };
  474. ccu: clock@1c20000 {
  475. compatible = "allwinner,sun8i-r40-ccu";
  476. reg = <0x01c20000 0x400>;
  477. clocks = <&osc24M>, <&rtc CLK_OSC32K>;
  478. clock-names = "hosc", "losc";
  479. #clock-cells = <1>;
  480. #reset-cells = <1>;
  481. };
  482. rtc: rtc@1c20400 {
  483. compatible = "allwinner,sun8i-r40-rtc";
  484. reg = <0x01c20400 0x400>;
  485. interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
  486. clock-output-names = "osc32k", "osc32k-out";
  487. clocks = <&osc32k>;
  488. #clock-cells = <1>;
  489. };
  490. pio: pinctrl@1c20800 {
  491. compatible = "allwinner,sun8i-r40-pinctrl";
  492. reg = <0x01c20800 0x400>;
  493. interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
  494. clocks = <&ccu CLK_BUS_PIO>, <&osc24M>,
  495. <&rtc CLK_OSC32K>;
  496. clock-names = "apb", "hosc", "losc";
  497. gpio-controller;
  498. interrupt-controller;
  499. #interrupt-cells = <3>;
  500. #gpio-cells = <3>;
  501. can_ph_pins: can-ph-pins {
  502. pins = "PH20", "PH21";
  503. function = "can";
  504. };
  505. can_pa_pins: can-pa-pins {
  506. pins = "PA16", "PA17";
  507. function = "can";
  508. };
  509. clk_out_a_pin: clk-out-a-pin {
  510. pins = "PI12";
  511. function = "clk_out_a";
  512. };
  513. /omit-if-no-ref/
  514. csi0_8bits_pins: csi0-8bits-pins {
  515. pins = "PE0", "PE2", "PE3", "PE4", "PE5",
  516. "PE6", "PE7", "PE8", "PE9", "PE10",
  517. "PE11";
  518. function = "csi0";
  519. };
  520. /omit-if-no-ref/
  521. csi0_mclk_pin: csi0-mclk-pin {
  522. pins = "PE1";
  523. function = "csi0";
  524. };
  525. gmac_rgmii_pins: gmac-rgmii-pins {
  526. pins = "PA0", "PA1", "PA2", "PA3",
  527. "PA4", "PA5", "PA6", "PA7",
  528. "PA8", "PA10", "PA11", "PA12",
  529. "PA13", "PA15", "PA16";
  530. function = "gmac";
  531. /*
  532. * data lines in RGMII mode use DDR mode
  533. * and need a higher signal drive strength
  534. */
  535. drive-strength = <40>;
  536. };
  537. i2c0_pins: i2c0-pins {
  538. pins = "PB0", "PB1";
  539. function = "i2c0";
  540. };
  541. i2c1_pins: i2c1-pins {
  542. pins = "PB18", "PB19";
  543. function = "i2c1";
  544. };
  545. i2c2_pins: i2c2-pins {
  546. pins = "PB20", "PB21";
  547. function = "i2c2";
  548. };
  549. i2c3_pins: i2c3-pins {
  550. pins = "PI0", "PI1";
  551. function = "i2c3";
  552. };
  553. i2c4_pins: i2c4-pins {
  554. pins = "PI2", "PI3";
  555. function = "i2c4";
  556. };
  557. ir0_pins: ir0-pins {
  558. pins = "PB4";
  559. function = "ir0";
  560. };
  561. ir1_pins: ir1-pins {
  562. pins = "PB23";
  563. function = "ir1";
  564. };
  565. mmc0_pins: mmc0-pins {
  566. pins = "PF0", "PF1", "PF2",
  567. "PF3", "PF4", "PF5";
  568. function = "mmc0";
  569. drive-strength = <30>;
  570. bias-pull-up;
  571. };
  572. mmc1_pg_pins: mmc1-pg-pins {
  573. pins = "PG0", "PG1", "PG2",
  574. "PG3", "PG4", "PG5";
  575. function = "mmc1";
  576. drive-strength = <30>;
  577. bias-pull-up;
  578. };
  579. mmc2_pins: mmc2-pins {
  580. pins = "PC5", "PC6", "PC7", "PC8", "PC9",
  581. "PC10", "PC11", "PC12", "PC13", "PC14",
  582. "PC15", "PC24";
  583. function = "mmc2";
  584. drive-strength = <30>;
  585. bias-pull-up;
  586. };
  587. /omit-if-no-ref/
  588. mmc3_pins: mmc3-pins {
  589. pins = "PI4", "PI5", "PI6",
  590. "PI7", "PI8", "PI9";
  591. function = "mmc3";
  592. drive-strength = <30>;
  593. bias-pull-up;
  594. };
  595. /omit-if-no-ref/
  596. spi0_pc_pins: spi0-pc-pins {
  597. pins = "PC0", "PC1", "PC2";
  598. function = "spi0";
  599. };
  600. /omit-if-no-ref/
  601. spi0_cs0_pc_pin: spi0-cs0-pc-pin {
  602. pins = "PC23";
  603. function = "spi0";
  604. };
  605. /omit-if-no-ref/
  606. spi1_pi_pins: spi1-pi-pins {
  607. pins = "PI17", "PI18", "PI19";
  608. function = "spi1";
  609. };
  610. /omit-if-no-ref/
  611. spi1_cs0_pi_pin: spi1-cs0-pi-pin {
  612. pins = "PI16";
  613. function = "spi1";
  614. };
  615. /omit-if-no-ref/
  616. spi1_cs1_pi_pin: spi1-cs1-pi-pin {
  617. pins = "PI15";
  618. function = "spi1";
  619. };
  620. /omit-if-no-ref/
  621. uart0_pb_pins: uart0-pb-pins {
  622. pins = "PB22", "PB23";
  623. function = "uart0";
  624. };
  625. /omit-if-no-ref/
  626. uart2_pi_pins: uart2-pi-pins {
  627. pins = "PI18", "PI19";
  628. function = "uart2";
  629. };
  630. /omit-if-no-ref/
  631. uart2_rts_cts_pi_pins: uart2-rts-cts-pi-pins{
  632. pins = "PI16", "PI17";
  633. function = "uart2";
  634. };
  635. /omit-if-no-ref/
  636. uart3_pg_pins: uart3-pg-pins {
  637. pins = "PG6", "PG7";
  638. function = "uart3";
  639. };
  640. /omit-if-no-ref/
  641. uart3_rts_cts_pg_pins: uart3-rts-cts-pg-pins {
  642. pins = "PG8", "PG9";
  643. function = "uart3";
  644. };
  645. /omit-if-no-ref/
  646. uart4_pg_pins: uart4-pg-pins {
  647. pins = "PG10", "PG11";
  648. function = "uart4";
  649. };
  650. /omit-if-no-ref/
  651. uart5_ph_pins: uart5-ph-pins {
  652. pins = "PH6", "PH7";
  653. function = "uart5";
  654. };
  655. /omit-if-no-ref/
  656. uart7_pi_pins: uart7-pi-pins {
  657. pins = "PI20", "PI21";
  658. function = "uart7";
  659. };
  660. };
  661. timer@1c20c00 {
  662. compatible = "allwinner,sun4i-a10-timer";
  663. reg = <0x01c20c00 0x90>;
  664. interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>,
  665. <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>,
  666. <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>,
  667. <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>,
  668. <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>,
  669. <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>;
  670. clocks = <&osc24M>;
  671. };
  672. wdt: watchdog@1c20c90 {
  673. compatible = "allwinner,sun4i-a10-wdt";
  674. reg = <0x01c20c90 0x10>;
  675. interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
  676. clocks = <&osc24M>;
  677. };
  678. ir0: ir@1c21800 {
  679. compatible = "allwinner,sun8i-r40-ir",
  680. "allwinner,sun6i-a31-ir";
  681. reg = <0x01c21800 0x400>;
  682. pinctrl-0 = <&ir0_pins>;
  683. pinctrl-names = "default";
  684. clocks = <&ccu CLK_BUS_IR0>, <&ccu CLK_IR0>;
  685. clock-names = "apb", "ir";
  686. interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
  687. resets = <&ccu RST_BUS_IR0>;
  688. status = "disabled";
  689. };
  690. ir1: ir@1c21c00 {
  691. compatible = "allwinner,sun8i-r40-ir",
  692. "allwinner,sun6i-a31-ir";
  693. reg = <0x01c21c00 0x400>;
  694. pinctrl-0 = <&ir1_pins>;
  695. pinctrl-names = "default";
  696. clocks = <&ccu CLK_BUS_IR1>, <&ccu CLK_IR1>;
  697. clock-names = "apb", "ir";
  698. interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
  699. resets = <&ccu RST_BUS_IR1>;
  700. status = "disabled";
  701. };
  702. i2s0: i2s@1c22000 {
  703. #sound-dai-cells = <0>;
  704. compatible = "allwinner,sun8i-r40-i2s",
  705. "allwinner,sun8i-h3-i2s";
  706. reg = <0x01c22000 0x400>;
  707. interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
  708. clocks = <&ccu CLK_BUS_I2S0>, <&ccu CLK_I2S0>;
  709. clock-names = "apb", "mod";
  710. resets = <&ccu RST_BUS_I2S0>;
  711. dmas = <&dma 3>, <&dma 3>;
  712. dma-names = "rx", "tx";
  713. };
  714. i2s1: i2s@1c22400 {
  715. #sound-dai-cells = <0>;
  716. compatible = "allwinner,sun8i-r40-i2s",
  717. "allwinner,sun8i-h3-i2s";
  718. reg = <0x01c22400 0x400>;
  719. interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;
  720. clocks = <&ccu CLK_BUS_I2S1>, <&ccu CLK_I2S1>;
  721. clock-names = "apb", "mod";
  722. resets = <&ccu RST_BUS_I2S1>;
  723. dmas = <&dma 4>, <&dma 4>;
  724. dma-names = "rx", "tx";
  725. };
  726. i2s2: i2s@1c22800 {
  727. #sound-dai-cells = <0>;
  728. compatible = "allwinner,sun8i-r40-i2s",
  729. "allwinner,sun8i-h3-i2s";
  730. reg = <0x01c22800 0x400>;
  731. interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
  732. clocks = <&ccu CLK_BUS_I2S2>, <&ccu CLK_I2S2>;
  733. clock-names = "apb", "mod";
  734. resets = <&ccu RST_BUS_I2S2>;
  735. dmas = <&dma 6>, <&dma 6>;
  736. dma-names = "rx", "tx";
  737. };
  738. ths: thermal-sensor@1c24c00 {
  739. compatible = "allwinner,sun8i-r40-ths";
  740. reg = <0x01c24c00 0x100>;
  741. clocks = <&ccu CLK_BUS_THS>, <&ccu CLK_THS>;
  742. clock-names = "bus", "mod";
  743. interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
  744. resets = <&ccu RST_BUS_THS>;
  745. /* TODO: add nvmem-cells for calibration */
  746. #thermal-sensor-cells = <1>;
  747. };
  748. uart0: serial@1c28000 {
  749. compatible = "snps,dw-apb-uart";
  750. reg = <0x01c28000 0x400>;
  751. interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
  752. reg-shift = <2>;
  753. reg-io-width = <4>;
  754. clocks = <&ccu CLK_BUS_UART0>;
  755. resets = <&ccu RST_BUS_UART0>;
  756. status = "disabled";
  757. };
  758. uart1: serial@1c28400 {
  759. compatible = "snps,dw-apb-uart";
  760. reg = <0x01c28400 0x400>;
  761. interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
  762. reg-shift = <2>;
  763. reg-io-width = <4>;
  764. clocks = <&ccu CLK_BUS_UART1>;
  765. resets = <&ccu RST_BUS_UART1>;
  766. status = "disabled";
  767. };
  768. uart2: serial@1c28800 {
  769. compatible = "snps,dw-apb-uart";
  770. reg = <0x01c28800 0x400>;
  771. interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
  772. reg-shift = <2>;
  773. reg-io-width = <4>;
  774. clocks = <&ccu CLK_BUS_UART2>;
  775. resets = <&ccu RST_BUS_UART2>;
  776. status = "disabled";
  777. };
  778. uart3: serial@1c28c00 {
  779. compatible = "snps,dw-apb-uart";
  780. reg = <0x01c28c00 0x400>;
  781. interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
  782. reg-shift = <2>;
  783. reg-io-width = <4>;
  784. clocks = <&ccu CLK_BUS_UART3>;
  785. resets = <&ccu RST_BUS_UART3>;
  786. status = "disabled";
  787. };
  788. uart4: serial@1c29000 {
  789. compatible = "snps,dw-apb-uart";
  790. reg = <0x01c29000 0x400>;
  791. interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
  792. reg-shift = <2>;
  793. reg-io-width = <4>;
  794. clocks = <&ccu CLK_BUS_UART4>;
  795. resets = <&ccu RST_BUS_UART4>;
  796. status = "disabled";
  797. };
  798. uart5: serial@1c29400 {
  799. compatible = "snps,dw-apb-uart";
  800. reg = <0x01c29400 0x400>;
  801. interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
  802. reg-shift = <2>;
  803. reg-io-width = <4>;
  804. clocks = <&ccu CLK_BUS_UART5>;
  805. resets = <&ccu RST_BUS_UART5>;
  806. status = "disabled";
  807. };
  808. uart6: serial@1c29800 {
  809. compatible = "snps,dw-apb-uart";
  810. reg = <0x01c29800 0x400>;
  811. interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
  812. reg-shift = <2>;
  813. reg-io-width = <4>;
  814. clocks = <&ccu CLK_BUS_UART6>;
  815. resets = <&ccu RST_BUS_UART6>;
  816. status = "disabled";
  817. };
  818. uart7: serial@1c29c00 {
  819. compatible = "snps,dw-apb-uart";
  820. reg = <0x01c29c00 0x400>;
  821. interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
  822. reg-shift = <2>;
  823. reg-io-width = <4>;
  824. clocks = <&ccu CLK_BUS_UART7>;
  825. resets = <&ccu RST_BUS_UART7>;
  826. status = "disabled";
  827. };
  828. i2c0: i2c@1c2ac00 {
  829. compatible = "allwinner,sun6i-a31-i2c";
  830. reg = <0x01c2ac00 0x400>;
  831. interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
  832. clocks = <&ccu CLK_BUS_I2C0>;
  833. resets = <&ccu RST_BUS_I2C0>;
  834. pinctrl-0 = <&i2c0_pins>;
  835. pinctrl-names = "default";
  836. status = "disabled";
  837. #address-cells = <1>;
  838. #size-cells = <0>;
  839. };
  840. i2c1: i2c@1c2b000 {
  841. compatible = "allwinner,sun6i-a31-i2c";
  842. reg = <0x01c2b000 0x400>;
  843. interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
  844. clocks = <&ccu CLK_BUS_I2C1>;
  845. resets = <&ccu RST_BUS_I2C1>;
  846. pinctrl-0 = <&i2c1_pins>;
  847. pinctrl-names = "default";
  848. status = "disabled";
  849. #address-cells = <1>;
  850. #size-cells = <0>;
  851. };
  852. i2c2: i2c@1c2b400 {
  853. compatible = "allwinner,sun6i-a31-i2c";
  854. reg = <0x01c2b400 0x400>;
  855. interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
  856. clocks = <&ccu CLK_BUS_I2C2>;
  857. resets = <&ccu RST_BUS_I2C2>;
  858. pinctrl-0 = <&i2c2_pins>;
  859. pinctrl-names = "default";
  860. status = "disabled";
  861. #address-cells = <1>;
  862. #size-cells = <0>;
  863. };
  864. i2c3: i2c@1c2b800 {
  865. compatible = "allwinner,sun6i-a31-i2c";
  866. reg = <0x01c2b800 0x400>;
  867. interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
  868. clocks = <&ccu CLK_BUS_I2C3>;
  869. resets = <&ccu RST_BUS_I2C3>;
  870. pinctrl-0 = <&i2c3_pins>;
  871. pinctrl-names = "default";
  872. status = "disabled";
  873. #address-cells = <1>;
  874. #size-cells = <0>;
  875. };
  876. can0: can@1c2bc00 {
  877. compatible = "allwinner,sun8i-r40-can";
  878. reg = <0x01c2bc00 0x400>;
  879. interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
  880. clocks = <&ccu CLK_BUS_CAN>;
  881. resets = <&ccu RST_BUS_CAN>;
  882. status = "disabled";
  883. };
  884. i2c4: i2c@1c2c000 {
  885. compatible = "allwinner,sun6i-a31-i2c";
  886. reg = <0x01c2c000 0x400>;
  887. interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
  888. clocks = <&ccu CLK_BUS_I2C4>;
  889. resets = <&ccu RST_BUS_I2C4>;
  890. pinctrl-0 = <&i2c4_pins>;
  891. pinctrl-names = "default";
  892. status = "disabled";
  893. #address-cells = <1>;
  894. #size-cells = <0>;
  895. };
  896. mali: gpu@1c40000 {
  897. compatible = "allwinner,sun8i-r40-mali", "arm,mali-400";
  898. reg = <0x01c40000 0x10000>;
  899. interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
  900. <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
  901. <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>,
  902. <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
  903. <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>,
  904. <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>,
  905. <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
  906. interrupt-names = "gp",
  907. "gpmmu",
  908. "pp0",
  909. "ppmmu0",
  910. "pp1",
  911. "ppmmu1",
  912. "pmu";
  913. clocks = <&ccu CLK_BUS_GPU>, <&ccu CLK_GPU>;
  914. clock-names = "bus", "core";
  915. resets = <&ccu RST_BUS_GPU>;
  916. };
  917. gmac: ethernet@1c50000 {
  918. compatible = "allwinner,sun8i-r40-gmac";
  919. syscon = <&ccu>;
  920. reg = <0x01c50000 0x10000>;
  921. interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
  922. interrupt-names = "macirq";
  923. resets = <&ccu RST_BUS_GMAC>;
  924. reset-names = "stmmaceth";
  925. clocks = <&ccu CLK_BUS_GMAC>;
  926. clock-names = "stmmaceth";
  927. status = "disabled";
  928. gmac_mdio: mdio {
  929. compatible = "snps,dwmac-mdio";
  930. #address-cells = <1>;
  931. #size-cells = <0>;
  932. };
  933. };
  934. mbus: dram-controller@1c62000 {
  935. compatible = "allwinner,sun8i-r40-mbus";
  936. reg = <0x01c62000 0x1000>;
  937. clocks = <&ccu 155>;
  938. #address-cells = <1>;
  939. #size-cells = <1>;
  940. dma-ranges = <0x00000000 0x40000000 0x80000000>;
  941. #interconnect-cells = <1>;
  942. };
  943. tcon_top: tcon-top@1c70000 {
  944. compatible = "allwinner,sun8i-r40-tcon-top";
  945. reg = <0x01c70000 0x1000>;
  946. clocks = <&ccu CLK_BUS_TCON_TOP>,
  947. <&ccu CLK_TCON_TV0>,
  948. <&ccu CLK_TVE0>,
  949. <&ccu CLK_TCON_TV1>,
  950. <&ccu CLK_TVE1>,
  951. <&ccu CLK_DSI_DPHY>;
  952. clock-names = "bus",
  953. "tcon-tv0",
  954. "tve0",
  955. "tcon-tv1",
  956. "tve1",
  957. "dsi";
  958. clock-output-names = "tcon-top-tv0",
  959. "tcon-top-tv1",
  960. "tcon-top-dsi";
  961. resets = <&ccu RST_BUS_TCON_TOP>;
  962. #clock-cells = <1>;
  963. ports {
  964. #address-cells = <1>;
  965. #size-cells = <0>;
  966. tcon_top_mixer0_in: port@0 {
  967. reg = <0>;
  968. tcon_top_mixer0_in_mixer0: endpoint {
  969. remote-endpoint = <&mixer0_out_tcon_top>;
  970. };
  971. };
  972. tcon_top_mixer0_out: port@1 {
  973. #address-cells = <1>;
  974. #size-cells = <0>;
  975. reg = <1>;
  976. tcon_top_mixer0_out_tcon_lcd0: endpoint@0 {
  977. reg = <0>;
  978. };
  979. tcon_top_mixer0_out_tcon_lcd1: endpoint@1 {
  980. reg = <1>;
  981. };
  982. tcon_top_mixer0_out_tcon_tv0: endpoint@2 {
  983. reg = <2>;
  984. remote-endpoint = <&tcon_tv0_in_tcon_top_mixer0>;
  985. };
  986. tcon_top_mixer0_out_tcon_tv1: endpoint@3 {
  987. reg = <3>;
  988. remote-endpoint = <&tcon_tv1_in_tcon_top_mixer0>;
  989. };
  990. };
  991. tcon_top_mixer1_in: port@2 {
  992. #address-cells = <1>;
  993. #size-cells = <0>;
  994. reg = <2>;
  995. tcon_top_mixer1_in_mixer1: endpoint@1 {
  996. reg = <1>;
  997. remote-endpoint = <&mixer1_out_tcon_top>;
  998. };
  999. };
  1000. tcon_top_mixer1_out: port@3 {
  1001. #address-cells = <1>;
  1002. #size-cells = <0>;
  1003. reg = <3>;
  1004. tcon_top_mixer1_out_tcon_lcd0: endpoint@0 {
  1005. reg = <0>;
  1006. };
  1007. tcon_top_mixer1_out_tcon_lcd1: endpoint@1 {
  1008. reg = <1>;
  1009. };
  1010. tcon_top_mixer1_out_tcon_tv0: endpoint@2 {
  1011. reg = <2>;
  1012. remote-endpoint = <&tcon_tv0_in_tcon_top_mixer1>;
  1013. };
  1014. tcon_top_mixer1_out_tcon_tv1: endpoint@3 {
  1015. reg = <3>;
  1016. remote-endpoint = <&tcon_tv1_in_tcon_top_mixer1>;
  1017. };
  1018. };
  1019. tcon_top_hdmi_in: port@4 {
  1020. #address-cells = <1>;
  1021. #size-cells = <0>;
  1022. reg = <4>;
  1023. tcon_top_hdmi_in_tcon_tv0: endpoint@0 {
  1024. reg = <0>;
  1025. remote-endpoint = <&tcon_tv0_out_tcon_top>;
  1026. };
  1027. tcon_top_hdmi_in_tcon_tv1: endpoint@1 {
  1028. reg = <1>;
  1029. remote-endpoint = <&tcon_tv1_out_tcon_top>;
  1030. };
  1031. };
  1032. tcon_top_hdmi_out: port@5 {
  1033. reg = <5>;
  1034. tcon_top_hdmi_out_hdmi: endpoint {
  1035. remote-endpoint = <&hdmi_in_tcon_top>;
  1036. };
  1037. };
  1038. };
  1039. };
  1040. tcon_tv0: lcd-controller@1c73000 {
  1041. compatible = "allwinner,sun8i-r40-tcon-tv";
  1042. reg = <0x01c73000 0x1000>;
  1043. interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
  1044. clocks = <&ccu CLK_BUS_TCON_TV0>, <&tcon_top CLK_TCON_TOP_TV0>;
  1045. clock-names = "ahb", "tcon-ch1";
  1046. resets = <&ccu RST_BUS_TCON_TV0>;
  1047. reset-names = "lcd";
  1048. status = "disabled";
  1049. ports {
  1050. #address-cells = <1>;
  1051. #size-cells = <0>;
  1052. tcon_tv0_in: port@0 {
  1053. #address-cells = <1>;
  1054. #size-cells = <0>;
  1055. reg = <0>;
  1056. tcon_tv0_in_tcon_top_mixer0: endpoint@0 {
  1057. reg = <0>;
  1058. remote-endpoint = <&tcon_top_mixer0_out_tcon_tv0>;
  1059. };
  1060. tcon_tv0_in_tcon_top_mixer1: endpoint@1 {
  1061. reg = <1>;
  1062. remote-endpoint = <&tcon_top_mixer1_out_tcon_tv0>;
  1063. };
  1064. };
  1065. tcon_tv0_out: port@1 {
  1066. #address-cells = <1>;
  1067. #size-cells = <0>;
  1068. reg = <1>;
  1069. tcon_tv0_out_tcon_top: endpoint@1 {
  1070. reg = <1>;
  1071. remote-endpoint = <&tcon_top_hdmi_in_tcon_tv0>;
  1072. };
  1073. };
  1074. };
  1075. };
  1076. tcon_tv1: lcd-controller@1c74000 {
  1077. compatible = "allwinner,sun8i-r40-tcon-tv";
  1078. reg = <0x01c74000 0x1000>;
  1079. interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
  1080. clocks = <&ccu CLK_BUS_TCON_TV1>, <&tcon_top CLK_TCON_TOP_TV1>;
  1081. clock-names = "ahb", "tcon-ch1";
  1082. resets = <&ccu RST_BUS_TCON_TV1>;
  1083. reset-names = "lcd";
  1084. status = "disabled";
  1085. ports {
  1086. #address-cells = <1>;
  1087. #size-cells = <0>;
  1088. tcon_tv1_in: port@0 {
  1089. #address-cells = <1>;
  1090. #size-cells = <0>;
  1091. reg = <0>;
  1092. tcon_tv1_in_tcon_top_mixer0: endpoint@0 {
  1093. reg = <0>;
  1094. remote-endpoint = <&tcon_top_mixer0_out_tcon_tv1>;
  1095. };
  1096. tcon_tv1_in_tcon_top_mixer1: endpoint@1 {
  1097. reg = <1>;
  1098. remote-endpoint = <&tcon_top_mixer1_out_tcon_tv1>;
  1099. };
  1100. };
  1101. tcon_tv1_out: port@1 {
  1102. #address-cells = <1>;
  1103. #size-cells = <0>;
  1104. reg = <1>;
  1105. tcon_tv1_out_tcon_top: endpoint@1 {
  1106. reg = <1>;
  1107. remote-endpoint = <&tcon_top_hdmi_in_tcon_tv1>;
  1108. };
  1109. };
  1110. };
  1111. };
  1112. gic: interrupt-controller@1c81000 {
  1113. compatible = "arm,gic-400";
  1114. reg = <0x01c81000 0x1000>,
  1115. <0x01c82000 0x2000>,
  1116. <0x01c84000 0x2000>,
  1117. <0x01c86000 0x2000>;
  1118. interrupt-controller;
  1119. #interrupt-cells = <3>;
  1120. interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
  1121. };
  1122. hdmi: hdmi@1ee0000 {
  1123. compatible = "allwinner,sun8i-r40-dw-hdmi",
  1124. "allwinner,sun8i-a83t-dw-hdmi";
  1125. reg = <0x01ee0000 0x10000>;
  1126. reg-io-width = <1>;
  1127. interrupts = <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>;
  1128. clocks = <&ccu CLK_BUS_HDMI0>, <&ccu CLK_HDMI_SLOW>,
  1129. <&ccu CLK_HDMI>, <&rtc CLK_OSC32K>;
  1130. clock-names = "iahb", "isfr", "tmds", "cec";
  1131. resets = <&ccu RST_BUS_HDMI1>;
  1132. reset-names = "ctrl";
  1133. phys = <&hdmi_phy>;
  1134. phy-names = "phy";
  1135. status = "disabled";
  1136. ports {
  1137. #address-cells = <1>;
  1138. #size-cells = <0>;
  1139. hdmi_in: port@0 {
  1140. reg = <0>;
  1141. hdmi_in_tcon_top: endpoint {
  1142. remote-endpoint = <&tcon_top_hdmi_out_hdmi>;
  1143. };
  1144. };
  1145. hdmi_out: port@1 {
  1146. reg = <1>;
  1147. };
  1148. };
  1149. };
  1150. hdmi_phy: hdmi-phy@1ef0000 {
  1151. compatible = "allwinner,sun8i-r40-hdmi-phy";
  1152. reg = <0x01ef0000 0x10000>;
  1153. clocks = <&ccu CLK_BUS_HDMI1>, <&ccu CLK_HDMI_SLOW>,
  1154. <&ccu CLK_PLL_VIDEO0>, <&ccu CLK_PLL_VIDEO1>;
  1155. clock-names = "bus", "mod", "pll-0", "pll-1";
  1156. resets = <&ccu RST_BUS_HDMI0>;
  1157. reset-names = "phy";
  1158. #phy-cells = <0>;
  1159. };
  1160. };
  1161. pmu {
  1162. compatible = "arm,cortex-a7-pmu";
  1163. interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>,
  1164. <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
  1165. <GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
  1166. <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
  1167. interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
  1168. };
  1169. timer {
  1170. compatible = "arm,armv7-timer";
  1171. interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
  1172. <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
  1173. <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
  1174. <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
  1175. };
  1176. };