sun9i-a80.dtsi 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935
  1. /*
  2. * Copyright 2014 Chen-Yu Tsai
  3. *
  4. * Chen-Yu Tsai <wens@csie.org>
  5. *
  6. * This file is dual-licensed: you can use it either under the terms
  7. * of the GPL or the X11 license, at your option. Note that this dual
  8. * licensing only applies to this file, and not this project as a
  9. * whole.
  10. *
  11. * a) This file is free software; you can redistribute it and/or
  12. * modify it under the terms of the GNU General Public License as
  13. * published by the Free Software Foundation; either version 2 of the
  14. * License, or (at your option) any later version.
  15. *
  16. * This file is distributed in the hope that it will be useful,
  17. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  19. * GNU General Public License for more details.
  20. *
  21. * Or, alternatively,
  22. *
  23. * b) Permission is hereby granted, free of charge, to any person
  24. * obtaining a copy of this software and associated documentation
  25. * files (the "Software"), to deal in the Software without
  26. * restriction, including without limitation the rights to use,
  27. * copy, modify, merge, publish, distribute, sublicense, and/or
  28. * sell copies of the Software, and to permit persons to whom the
  29. * Software is furnished to do so, subject to the following
  30. * conditions:
  31. *
  32. * The above copyright notice and this permission notice shall be
  33. * included in all copies or substantial portions of the Software.
  34. *
  35. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  36. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  37. * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  38. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  39. * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  40. * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  41. * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  42. * OTHER DEALINGS IN THE SOFTWARE.
  43. */
  44. #include "skeleton64.dtsi"
  45. #include <dt-bindings/interrupt-controller/arm-gic.h>
  46. #include <dt-bindings/pinctrl/sun4i-a10.h>
  47. / {
  48. interrupt-parent = <&gic>;
  49. cpus {
  50. #address-cells = <1>;
  51. #size-cells = <0>;
  52. cpu0: cpu@0 {
  53. compatible = "arm,cortex-a7";
  54. device_type = "cpu";
  55. reg = <0x0>;
  56. };
  57. cpu1: cpu@1 {
  58. compatible = "arm,cortex-a7";
  59. device_type = "cpu";
  60. reg = <0x1>;
  61. };
  62. cpu2: cpu@2 {
  63. compatible = "arm,cortex-a7";
  64. device_type = "cpu";
  65. reg = <0x2>;
  66. };
  67. cpu3: cpu@3 {
  68. compatible = "arm,cortex-a7";
  69. device_type = "cpu";
  70. reg = <0x3>;
  71. };
  72. cpu4: cpu@100 {
  73. compatible = "arm,cortex-a15";
  74. device_type = "cpu";
  75. reg = <0x100>;
  76. };
  77. cpu5: cpu@101 {
  78. compatible = "arm,cortex-a15";
  79. device_type = "cpu";
  80. reg = <0x101>;
  81. };
  82. cpu6: cpu@102 {
  83. compatible = "arm,cortex-a15";
  84. device_type = "cpu";
  85. reg = <0x102>;
  86. };
  87. cpu7: cpu@103 {
  88. compatible = "arm,cortex-a15";
  89. device_type = "cpu";
  90. reg = <0x103>;
  91. };
  92. };
  93. memory {
  94. /* 8GB max. with LPAE */
  95. reg = <0 0x20000000 0x02 0>;
  96. };
  97. timer {
  98. compatible = "arm,armv7-timer";
  99. interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
  100. <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
  101. <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
  102. <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
  103. clock-frequency = <24000000>;
  104. arm,cpu-registers-not-fw-configured;
  105. };
  106. clocks {
  107. #address-cells = <1>;
  108. #size-cells = <1>;
  109. /*
  110. * map 64 bit address range down to 32 bits,
  111. * as the peripherals are all under 512MB.
  112. */
  113. ranges = <0 0 0 0x20000000>;
  114. /*
  115. * This clock is actually configurable from the PRCM address
  116. * space. The external 24M oscillator can be turned off, and
  117. * the clock switched to an internal 16M RC oscillator. Under
  118. * normal operation there's no reason to do this, and the
  119. * default is to use the external good one, so just model this
  120. * as a fixed clock. Also it is not entirely clear if the
  121. * osc24M mux in the PRCM affects the entire clock tree, which
  122. * would also throw all the PLL clock rates off, or just the
  123. * downstream clocks in the PRCM.
  124. */
  125. osc24M: osc24M_clk {
  126. #clock-cells = <0>;
  127. compatible = "fixed-clock";
  128. clock-frequency = <24000000>;
  129. clock-output-names = "osc24M";
  130. };
  131. /*
  132. * The 32k clock is from an external source, normally the
  133. * AC100 codec/RTC chip. This clock is by default enabled
  134. * and clocked at 32768 Hz, from the oscillator connected
  135. * to the AC100. It is configurable, but no such driver or
  136. * bindings exist yet.
  137. */
  138. osc32k: osc32k_clk {
  139. #clock-cells = <0>;
  140. compatible = "fixed-clock";
  141. clock-frequency = <32768>;
  142. clock-output-names = "osc32k";
  143. };
  144. usb_mod_clk: clk@00a08000 {
  145. #clock-cells = <1>;
  146. #reset-cells = <1>;
  147. compatible = "allwinner,sun9i-a80-usb-mod-clk";
  148. reg = <0x00a08000 0x4>;
  149. clocks = <&ahb1_gates 1>;
  150. clock-output-names = "usb0_ahb", "usb_ohci0",
  151. "usb1_ahb", "usb_ohci1",
  152. "usb2_ahb", "usb_ohci2";
  153. };
  154. usb_phy_clk: clk@00a08004 {
  155. #clock-cells = <1>;
  156. #reset-cells = <1>;
  157. compatible = "allwinner,sun9i-a80-usb-phy-clk";
  158. reg = <0x00a08004 0x4>;
  159. clocks = <&ahb1_gates 1>;
  160. clock-output-names = "usb_phy0", "usb_hsic1_480M",
  161. "usb_phy1", "usb_hsic2_480M",
  162. "usb_phy2", "usb_hsic_12M";
  163. };
  164. pll3: clk@06000008 {
  165. /* placeholder until implemented */
  166. #clock-cells = <0>;
  167. compatible = "fixed-clock";
  168. clock-rate = <0>;
  169. clock-output-names = "pll3";
  170. };
  171. pll4: clk@0600000c {
  172. #clock-cells = <0>;
  173. compatible = "allwinner,sun9i-a80-pll4-clk";
  174. reg = <0x0600000c 0x4>;
  175. clocks = <&osc24M>;
  176. clock-output-names = "pll4";
  177. };
  178. pll12: clk@0600002c {
  179. #clock-cells = <0>;
  180. compatible = "allwinner,sun9i-a80-pll4-clk";
  181. reg = <0x0600002c 0x4>;
  182. clocks = <&osc24M>;
  183. clock-output-names = "pll12";
  184. };
  185. gt_clk: clk@0600005c {
  186. #clock-cells = <0>;
  187. compatible = "allwinner,sun9i-a80-gt-clk";
  188. reg = <0x0600005c 0x4>;
  189. clocks = <&osc24M>, <&pll4>, <&pll12>, <&pll12>;
  190. clock-output-names = "gt";
  191. };
  192. ahb0: clk@06000060 {
  193. #clock-cells = <0>;
  194. compatible = "allwinner,sun9i-a80-ahb-clk";
  195. reg = <0x06000060 0x4>;
  196. clocks = <&gt_clk>, <&pll4>, <&pll12>, <&pll12>;
  197. clock-output-names = "ahb0";
  198. };
  199. ahb1: clk@06000064 {
  200. #clock-cells = <0>;
  201. compatible = "allwinner,sun9i-a80-ahb-clk";
  202. reg = <0x06000064 0x4>;
  203. clocks = <&gt_clk>, <&pll4>, <&pll12>, <&pll12>;
  204. clock-output-names = "ahb1";
  205. };
  206. ahb2: clk@06000068 {
  207. #clock-cells = <0>;
  208. compatible = "allwinner,sun9i-a80-ahb-clk";
  209. reg = <0x06000068 0x4>;
  210. clocks = <&gt_clk>, <&pll4>, <&pll12>, <&pll12>;
  211. clock-output-names = "ahb2";
  212. };
  213. apb0: clk@06000070 {
  214. #clock-cells = <0>;
  215. compatible = "allwinner,sun9i-a80-apb0-clk";
  216. reg = <0x06000070 0x4>;
  217. clocks = <&osc24M>, <&pll4>;
  218. clock-output-names = "apb0";
  219. };
  220. apb1: clk@06000074 {
  221. #clock-cells = <0>;
  222. compatible = "allwinner,sun9i-a80-apb1-clk";
  223. reg = <0x06000074 0x4>;
  224. clocks = <&osc24M>, <&pll4>;
  225. clock-output-names = "apb1";
  226. };
  227. cci400_clk: clk@06000078 {
  228. #clock-cells = <0>;
  229. compatible = "allwinner,sun9i-a80-gt-clk";
  230. reg = <0x06000078 0x4>;
  231. clocks = <&osc24M>, <&pll4>, <&pll12>, <&pll12>;
  232. clock-output-names = "cci400";
  233. };
  234. mmc0_clk: clk@06000410 {
  235. #clock-cells = <1>;
  236. compatible = "allwinner,sun9i-a80-mmc-clk";
  237. reg = <0x06000410 0x4>;
  238. clocks = <&osc24M>, <&pll4>;
  239. clock-output-names = "mmc0", "mmc0_output",
  240. "mmc0_sample";
  241. };
  242. mmc1_clk: clk@06000414 {
  243. #clock-cells = <1>;
  244. compatible = "allwinner,sun9i-a80-mmc-clk";
  245. reg = <0x06000414 0x4>;
  246. clocks = <&osc24M>, <&pll4>;
  247. clock-output-names = "mmc1", "mmc1_output",
  248. "mmc1_sample";
  249. };
  250. mmc2_clk: clk@06000418 {
  251. #clock-cells = <1>;
  252. compatible = "allwinner,sun9i-a80-mmc-clk";
  253. reg = <0x06000418 0x4>;
  254. clocks = <&osc24M>, <&pll4>;
  255. clock-output-names = "mmc2", "mmc2_output",
  256. "mmc2_sample";
  257. };
  258. mmc3_clk: clk@0600041c {
  259. #clock-cells = <1>;
  260. compatible = "allwinner,sun9i-a80-mmc-clk";
  261. reg = <0x0600041c 0x4>;
  262. clocks = <&osc24M>, <&pll4>;
  263. clock-output-names = "mmc3", "mmc3_output",
  264. "mmc3_sample";
  265. };
  266. ahb0_gates: clk@06000580 {
  267. #clock-cells = <1>;
  268. compatible = "allwinner,sun9i-a80-ahb0-gates-clk";
  269. reg = <0x06000580 0x4>;
  270. clocks = <&ahb0>;
  271. clock-indices = <0>, <1>, <3>,
  272. <5>, <8>, <12>,
  273. <13>, <14>,
  274. <15>, <16>, <18>,
  275. <20>, <21>, <22>,
  276. <23>;
  277. clock-output-names = "ahb0_fd", "ahb0_ve", "ahb0_gpu",
  278. "ahb0_ss", "ahb0_sd", "ahb0_nand1",
  279. "ahb0_nand0", "ahb0_sdram",
  280. "ahb0_mipi_hsi", "ahb0_sata", "ahb0_ts",
  281. "ahb0_spi0", "ahb0_spi1", "ahb0_spi2",
  282. "ahb0_spi3";
  283. };
  284. ahb1_gates: clk@06000584 {
  285. #clock-cells = <1>;
  286. compatible = "allwinner,sun9i-a80-ahb1-gates-clk";
  287. reg = <0x06000584 0x4>;
  288. clocks = <&ahb1>;
  289. clock-indices = <0>, <1>,
  290. <17>, <21>,
  291. <22>, <23>,
  292. <24>;
  293. clock-output-names = "ahb1_usbotg", "ahb1_usbhci",
  294. "ahb1_gmac", "ahb1_msgbox",
  295. "ahb1_spinlock", "ahb1_hstimer",
  296. "ahb1_dma";
  297. };
  298. ahb2_gates: clk@06000588 {
  299. #clock-cells = <1>;
  300. compatible = "allwinner,sun9i-a80-ahb2-gates-clk";
  301. reg = <0x06000588 0x4>;
  302. clocks = <&ahb2>;
  303. clock-indices = <0>, <1>,
  304. <2>, <4>, <5>,
  305. <7>, <8>, <11>;
  306. clock-output-names = "ahb2_lcd0", "ahb2_lcd1",
  307. "ahb2_edp", "ahb2_csi", "ahb2_hdmi",
  308. "ahb2_de", "ahb2_mp", "ahb2_mipi_dsi";
  309. };
  310. apb0_gates: clk@06000590 {
  311. #clock-cells = <1>;
  312. compatible = "allwinner,sun9i-a80-apb0-gates-clk";
  313. reg = <0x06000590 0x4>;
  314. clocks = <&apb0>;
  315. clock-indices = <1>, <5>,
  316. <11>, <12>, <13>,
  317. <15>, <17>, <18>,
  318. <19>;
  319. clock-output-names = "apb0_spdif", "apb0_pio",
  320. "apb0_ac97", "apb0_i2s0", "apb0_i2s1",
  321. "apb0_lradc", "apb0_gpadc", "apb0_twd",
  322. "apb0_cirtx";
  323. };
  324. apb1_gates: clk@06000594 {
  325. #clock-cells = <1>;
  326. compatible = "allwinner,sun9i-a80-apb1-gates-clk";
  327. reg = <0x06000594 0x4>;
  328. clocks = <&apb1>;
  329. clock-indices = <0>, <1>,
  330. <2>, <3>, <4>,
  331. <16>, <17>,
  332. <18>, <19>,
  333. <20>, <21>;
  334. clock-output-names = "apb1_i2c0", "apb1_i2c1",
  335. "apb1_i2c2", "apb1_i2c3", "apb1_i2c4",
  336. "apb1_uart0", "apb1_uart1",
  337. "apb1_uart2", "apb1_uart3",
  338. "apb1_uart4", "apb1_uart5";
  339. };
  340. cpus_clk: clk@08001410 {
  341. compatible = "allwinner,sun9i-a80-cpus-clk";
  342. reg = <0x08001410 0x4>;
  343. #clock-cells = <0>;
  344. clocks = <&osc32k>, <&osc24M>, <&pll4>, <&pll3>;
  345. clock-output-names = "cpus";
  346. };
  347. ahbs: ahbs_clk {
  348. compatible = "fixed-factor-clock";
  349. #clock-cells = <0>;
  350. clock-div = <1>;
  351. clock-mult = <1>;
  352. clocks = <&cpus_clk>;
  353. clock-output-names = "ahbs";
  354. };
  355. apbs: clk@0800141c {
  356. compatible = "allwinner,sun8i-a23-apb0-clk";
  357. reg = <0x0800141c 0x4>;
  358. #clock-cells = <0>;
  359. clocks = <&ahbs>;
  360. clock-output-names = "apbs";
  361. };
  362. apbs_gates: clk@08001428 {
  363. compatible = "allwinner,sun9i-a80-apbs-gates-clk";
  364. reg = <0x08001428 0x4>;
  365. #clock-cells = <1>;
  366. clocks = <&apbs>;
  367. clock-indices = <0>, <1>,
  368. <2>, <3>,
  369. <4>, <5>,
  370. <6>, <7>,
  371. <12>, <13>,
  372. <16>, <17>,
  373. <18>, <20>;
  374. clock-output-names = "apbs_pio", "apbs_ir",
  375. "apbs_timer", "apbs_rsb",
  376. "apbs_uart", "apbs_1wire",
  377. "apbs_i2c0", "apbs_i2c1",
  378. "apbs_ps2_0", "apbs_ps2_1",
  379. "apbs_dma", "apbs_i2s0",
  380. "apbs_i2s1", "apbs_twd";
  381. };
  382. r_1wire_clk: clk@08001450 {
  383. reg = <0x08001450 0x4>;
  384. #clock-cells = <0>;
  385. compatible = "allwinner,sun4i-a10-mod0-clk";
  386. clocks = <&osc32k>, <&osc24M>;
  387. clock-output-names = "r_1wire";
  388. };
  389. r_ir_clk: clk@08001454 {
  390. reg = <0x08001454 0x4>;
  391. #clock-cells = <0>;
  392. compatible = "allwinner,sun4i-a10-mod0-clk";
  393. clocks = <&osc32k>, <&osc24M>;
  394. clock-output-names = "r_ir";
  395. };
  396. };
  397. soc {
  398. compatible = "simple-bus";
  399. #address-cells = <1>;
  400. #size-cells = <1>;
  401. /*
  402. * map 64 bit address range down to 32 bits,
  403. * as the peripherals are all under 512MB.
  404. */
  405. ranges = <0 0 0 0x20000000>;
  406. ehci0: usb@00a00000 {
  407. compatible = "allwinner,sun9i-a80-ehci", "generic-ehci";
  408. reg = <0x00a00000 0x100>;
  409. interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
  410. clocks = <&usb_mod_clk 1>;
  411. resets = <&usb_mod_clk 17>;
  412. phys = <&usbphy1>;
  413. phy-names = "usb";
  414. status = "disabled";
  415. };
  416. ohci0: usb@00a00400 {
  417. compatible = "allwinner,sun9i-a80-ohci", "generic-ohci";
  418. reg = <0x00a00400 0x100>;
  419. interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
  420. clocks = <&usb_mod_clk 1>, <&usb_mod_clk 2>;
  421. resets = <&usb_mod_clk 17>;
  422. phys = <&usbphy1>;
  423. phy-names = "usb";
  424. status = "disabled";
  425. };
  426. usbphy1: phy@00a00800 {
  427. compatible = "allwinner,sun9i-a80-usb-phy";
  428. reg = <0x00a00800 0x4>;
  429. clocks = <&usb_phy_clk 1>;
  430. clock-names = "phy";
  431. resets = <&usb_phy_clk 17>;
  432. reset-names = "phy";
  433. status = "disabled";
  434. #phy-cells = <0>;
  435. };
  436. ehci1: usb@00a01000 {
  437. compatible = "allwinner,sun9i-a80-ehci", "generic-ehci";
  438. reg = <0x00a01000 0x100>;
  439. interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
  440. clocks = <&usb_mod_clk 3>;
  441. resets = <&usb_mod_clk 18>;
  442. phys = <&usbphy2>;
  443. phy-names = "usb";
  444. status = "disabled";
  445. };
  446. usbphy2: phy@00a01800 {
  447. compatible = "allwinner,sun9i-a80-usb-phy";
  448. reg = <0x00a01800 0x4>;
  449. clocks = <&usb_phy_clk 2>, <&usb_phy_clk 10>,
  450. <&usb_phy_clk 3>;
  451. clock-names = "hsic_480M", "hsic_12M", "phy";
  452. resets = <&usb_phy_clk 18>, <&usb_phy_clk 19>;
  453. reset-names = "hsic", "phy";
  454. status = "disabled";
  455. #phy-cells = <0>;
  456. /* usb1 is always used with HSIC */
  457. phy_type = "hsic";
  458. };
  459. ehci2: usb@00a02000 {
  460. compatible = "allwinner,sun9i-a80-ehci", "generic-ehci";
  461. reg = <0x00a02000 0x100>;
  462. interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
  463. clocks = <&usb_mod_clk 5>;
  464. resets = <&usb_mod_clk 19>;
  465. phys = <&usbphy3>;
  466. phy-names = "usb";
  467. status = "disabled";
  468. };
  469. ohci2: usb@00a02400 {
  470. compatible = "allwinner,sun9i-a80-ohci", "generic-ohci";
  471. reg = <0x00a02400 0x100>;
  472. interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
  473. clocks = <&usb_mod_clk 5>, <&usb_mod_clk 6>;
  474. resets = <&usb_mod_clk 19>;
  475. phys = <&usbphy3>;
  476. phy-names = "usb";
  477. status = "disabled";
  478. };
  479. usbphy3: phy@00a02800 {
  480. compatible = "allwinner,sun9i-a80-usb-phy";
  481. reg = <0x00a02800 0x4>;
  482. clocks = <&usb_phy_clk 4>, <&usb_phy_clk 10>,
  483. <&usb_phy_clk 5>;
  484. clock-names = "hsic_480M", "hsic_12M", "phy";
  485. resets = <&usb_phy_clk 20>, <&usb_phy_clk 21>;
  486. reset-names = "hsic", "phy";
  487. status = "disabled";
  488. #phy-cells = <0>;
  489. };
  490. mmc0: mmc@01c0f000 {
  491. compatible = "allwinner,sun9i-a80-mmc";
  492. reg = <0x01c0f000 0x1000>;
  493. clocks = <&mmc_config_clk 0>, <&mmc0_clk 0>,
  494. <&mmc0_clk 1>, <&mmc0_clk 2>;
  495. clock-names = "ahb", "mmc", "output", "sample";
  496. resets = <&mmc_config_clk 0>;
  497. reset-names = "ahb";
  498. interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
  499. status = "disabled";
  500. #address-cells = <1>;
  501. #size-cells = <0>;
  502. };
  503. mmc1: mmc@01c10000 {
  504. compatible = "allwinner,sun9i-a80-mmc";
  505. reg = <0x01c10000 0x1000>;
  506. clocks = <&mmc_config_clk 1>, <&mmc1_clk 0>,
  507. <&mmc1_clk 1>, <&mmc1_clk 2>;
  508. clock-names = "ahb", "mmc", "output", "sample";
  509. resets = <&mmc_config_clk 1>;
  510. reset-names = "ahb";
  511. interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
  512. status = "disabled";
  513. #address-cells = <1>;
  514. #size-cells = <0>;
  515. };
  516. mmc2: mmc@01c11000 {
  517. compatible = "allwinner,sun9i-a80-mmc";
  518. reg = <0x01c11000 0x1000>;
  519. clocks = <&mmc_config_clk 2>, <&mmc2_clk 0>,
  520. <&mmc2_clk 1>, <&mmc2_clk 2>;
  521. clock-names = "ahb", "mmc", "output", "sample";
  522. resets = <&mmc_config_clk 2>;
  523. reset-names = "ahb";
  524. interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
  525. status = "disabled";
  526. #address-cells = <1>;
  527. #size-cells = <0>;
  528. };
  529. mmc3: mmc@01c12000 {
  530. compatible = "allwinner,sun9i-a80-mmc";
  531. reg = <0x01c12000 0x1000>;
  532. clocks = <&mmc_config_clk 3>, <&mmc3_clk 0>,
  533. <&mmc3_clk 1>, <&mmc3_clk 2>;
  534. clock-names = "ahb", "mmc", "output", "sample";
  535. resets = <&mmc_config_clk 3>;
  536. reset-names = "ahb";
  537. interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
  538. status = "disabled";
  539. #address-cells = <1>;
  540. #size-cells = <0>;
  541. };
  542. mmc_config_clk: clk@01c13000 {
  543. compatible = "allwinner,sun9i-a80-mmc-config-clk";
  544. reg = <0x01c13000 0x10>;
  545. clocks = <&ahb0_gates 8>;
  546. clock-names = "ahb";
  547. resets = <&ahb0_resets 8>;
  548. reset-names = "ahb";
  549. #clock-cells = <1>;
  550. #reset-cells = <1>;
  551. clock-output-names = "mmc0_config", "mmc1_config",
  552. "mmc2_config", "mmc3_config";
  553. };
  554. gic: interrupt-controller@01c41000 {
  555. compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic";
  556. reg = <0x01c41000 0x1000>,
  557. <0x01c42000 0x1000>,
  558. <0x01c44000 0x2000>,
  559. <0x01c46000 0x2000>;
  560. interrupt-controller;
  561. #interrupt-cells = <3>;
  562. interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
  563. };
  564. ahb0_resets: reset@060005a0 {
  565. #reset-cells = <1>;
  566. compatible = "allwinner,sun6i-a31-clock-reset";
  567. reg = <0x060005a0 0x4>;
  568. };
  569. ahb1_resets: reset@060005a4 {
  570. #reset-cells = <1>;
  571. compatible = "allwinner,sun6i-a31-clock-reset";
  572. reg = <0x060005a4 0x4>;
  573. };
  574. ahb2_resets: reset@060005a8 {
  575. #reset-cells = <1>;
  576. compatible = "allwinner,sun6i-a31-clock-reset";
  577. reg = <0x060005a8 0x4>;
  578. };
  579. apb0_resets: reset@060005b0 {
  580. #reset-cells = <1>;
  581. compatible = "allwinner,sun6i-a31-clock-reset";
  582. reg = <0x060005b0 0x4>;
  583. };
  584. apb1_resets: reset@060005b4 {
  585. #reset-cells = <1>;
  586. compatible = "allwinner,sun6i-a31-clock-reset";
  587. reg = <0x060005b4 0x4>;
  588. };
  589. timer@06000c00 {
  590. compatible = "allwinner,sun4i-a10-timer";
  591. reg = <0x06000c00 0xa0>;
  592. interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>,
  593. <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>,
  594. <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>,
  595. <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>,
  596. <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>,
  597. <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
  598. clocks = <&osc24M>;
  599. };
  600. wdt: watchdog@06000ca0 {
  601. compatible = "allwinner,sun6i-a31-wdt";
  602. reg = <0x06000ca0 0x20>;
  603. interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
  604. };
  605. pio: pinctrl@06000800 {
  606. compatible = "allwinner,sun9i-a80-pinctrl";
  607. reg = <0x06000800 0x400>;
  608. interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>,
  609. <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
  610. <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>,
  611. <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>,
  612. <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
  613. clocks = <&apb0_gates 5>;
  614. gpio-controller;
  615. interrupt-controller;
  616. #interrupt-cells = <3>;
  617. #size-cells = <0>;
  618. #gpio-cells = <3>;
  619. i2c3_pins_a: i2c3@0 {
  620. allwinner,pins = "PG10", "PG11";
  621. allwinner,function = "i2c3";
  622. allwinner,drive = <SUN4I_PINCTRL_10_MA>;
  623. allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
  624. };
  625. mmc0_pins: mmc0 {
  626. allwinner,pins = "PF0", "PF1" ,"PF2", "PF3",
  627. "PF4", "PF5";
  628. allwinner,function = "mmc0";
  629. allwinner,drive = <SUN4I_PINCTRL_30_MA>;
  630. allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
  631. };
  632. mmc2_8bit_pins: mmc2_8bit {
  633. allwinner,pins = "PC6", "PC7", "PC8", "PC9",
  634. "PC10", "PC11", "PC12",
  635. "PC13", "PC14", "PC15",
  636. "PC16";
  637. allwinner,function = "mmc2";
  638. allwinner,drive = <SUN4I_PINCTRL_30_MA>;
  639. allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
  640. };
  641. uart0_pins_a: uart0@0 {
  642. allwinner,pins = "PH12", "PH13";
  643. allwinner,function = "uart0";
  644. allwinner,drive = <SUN4I_PINCTRL_10_MA>;
  645. allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
  646. };
  647. uart4_pins_a: uart4@0 {
  648. allwinner,pins = "PG12", "PG13", "PG14", "PG15";
  649. allwinner,function = "uart4";
  650. allwinner,drive = <SUN4I_PINCTRL_10_MA>;
  651. allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
  652. };
  653. };
  654. uart0: serial@07000000 {
  655. compatible = "snps,dw-apb-uart";
  656. reg = <0x07000000 0x400>;
  657. interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
  658. reg-shift = <2>;
  659. reg-io-width = <4>;
  660. clocks = <&apb1_gates 16>;
  661. resets = <&apb1_resets 16>;
  662. status = "disabled";
  663. };
  664. uart1: serial@07000400 {
  665. compatible = "snps,dw-apb-uart";
  666. reg = <0x07000400 0x400>;
  667. interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
  668. reg-shift = <2>;
  669. reg-io-width = <4>;
  670. clocks = <&apb1_gates 17>;
  671. resets = <&apb1_resets 17>;
  672. status = "disabled";
  673. };
  674. uart2: serial@07000800 {
  675. compatible = "snps,dw-apb-uart";
  676. reg = <0x07000800 0x400>;
  677. interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
  678. reg-shift = <2>;
  679. reg-io-width = <4>;
  680. clocks = <&apb1_gates 18>;
  681. resets = <&apb1_resets 18>;
  682. status = "disabled";
  683. };
  684. uart3: serial@07000c00 {
  685. compatible = "snps,dw-apb-uart";
  686. reg = <0x07000c00 0x400>;
  687. interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
  688. reg-shift = <2>;
  689. reg-io-width = <4>;
  690. clocks = <&apb1_gates 19>;
  691. resets = <&apb1_resets 19>;
  692. status = "disabled";
  693. };
  694. uart4: serial@07001000 {
  695. compatible = "snps,dw-apb-uart";
  696. reg = <0x07001000 0x400>;
  697. interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
  698. reg-shift = <2>;
  699. reg-io-width = <4>;
  700. clocks = <&apb1_gates 20>;
  701. resets = <&apb1_resets 20>;
  702. status = "disabled";
  703. };
  704. uart5: serial@07001400 {
  705. compatible = "snps,dw-apb-uart";
  706. reg = <0x07001400 0x400>;
  707. interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
  708. reg-shift = <2>;
  709. reg-io-width = <4>;
  710. clocks = <&apb1_gates 21>;
  711. resets = <&apb1_resets 21>;
  712. status = "disabled";
  713. };
  714. i2c0: i2c@07002800 {
  715. compatible = "allwinner,sun6i-a31-i2c";
  716. reg = <0x07002800 0x400>;
  717. interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
  718. clocks = <&apb1_gates 0>;
  719. resets = <&apb1_resets 0>;
  720. status = "disabled";
  721. #address-cells = <1>;
  722. #size-cells = <0>;
  723. };
  724. i2c1: i2c@07002c00 {
  725. compatible = "allwinner,sun6i-a31-i2c";
  726. reg = <0x07002c00 0x400>;
  727. interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
  728. clocks = <&apb1_gates 1>;
  729. resets = <&apb1_resets 1>;
  730. status = "disabled";
  731. #address-cells = <1>;
  732. #size-cells = <0>;
  733. };
  734. i2c2: i2c@07003000 {
  735. compatible = "allwinner,sun6i-a31-i2c";
  736. reg = <0x07003000 0x400>;
  737. interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
  738. clocks = <&apb1_gates 2>;
  739. resets = <&apb1_resets 2>;
  740. status = "disabled";
  741. #address-cells = <1>;
  742. #size-cells = <0>;
  743. };
  744. i2c3: i2c@07003400 {
  745. compatible = "allwinner,sun6i-a31-i2c";
  746. reg = <0x07003400 0x400>;
  747. interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
  748. clocks = <&apb1_gates 3>;
  749. resets = <&apb1_resets 3>;
  750. status = "disabled";
  751. #address-cells = <1>;
  752. #size-cells = <0>;
  753. };
  754. i2c4: i2c@07003800 {
  755. compatible = "allwinner,sun6i-a31-i2c";
  756. reg = <0x07003800 0x400>;
  757. interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
  758. clocks = <&apb1_gates 4>;
  759. resets = <&apb1_resets 4>;
  760. status = "disabled";
  761. #address-cells = <1>;
  762. #size-cells = <0>;
  763. };
  764. r_wdt: watchdog@08001000 {
  765. compatible = "allwinner,sun6i-a31-wdt";
  766. reg = <0x08001000 0x20>;
  767. interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
  768. };
  769. apbs_rst: reset@080014b0 {
  770. reg = <0x080014b0 0x4>;
  771. compatible = "allwinner,sun6i-a31-clock-reset";
  772. #reset-cells = <1>;
  773. };
  774. nmi_intc: interrupt-controller@080015a0 {
  775. compatible = "allwinner,sun9i-a80-nmi";
  776. interrupt-controller;
  777. #interrupt-cells = <2>;
  778. reg = <0x080015a0 0xc>;
  779. interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
  780. };
  781. r_ir: ir@08002000 {
  782. compatible = "allwinner,sun5i-a13-ir";
  783. interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
  784. pinctrl-names = "default";
  785. pinctrl-0 = <&r_ir_pins>;
  786. clocks = <&apbs_gates 1>, <&r_ir_clk>;
  787. clock-names = "apb", "ir";
  788. resets = <&apbs_rst 1>;
  789. reg = <0x08002000 0x40>;
  790. status = "disabled";
  791. };
  792. r_uart: serial@08002800 {
  793. compatible = "snps,dw-apb-uart";
  794. reg = <0x08002800 0x400>;
  795. interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
  796. reg-shift = <2>;
  797. reg-io-width = <4>;
  798. clocks = <&apbs_gates 4>;
  799. resets = <&apbs_rst 4>;
  800. status = "disabled";
  801. };
  802. r_pio: pinctrl@08002c00 {
  803. compatible = "allwinner,sun9i-a80-r-pinctrl";
  804. reg = <0x08002c00 0x400>;
  805. interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>,
  806. <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
  807. clocks = <&apbs_gates 0>;
  808. resets = <&apbs_rst 0>;
  809. gpio-controller;
  810. interrupt-controller;
  811. #address-cells = <1>;
  812. #size-cells = <0>;
  813. #gpio-cells = <3>;
  814. r_ir_pins: r_ir {
  815. allwinner,pins = "PL6";
  816. allwinner,function = "s_cir_rx";
  817. allwinner,drive = <SUN4I_PINCTRL_10_MA>;
  818. allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
  819. };
  820. r_rsb_pins: r_rsb {
  821. allwinner,pins = "PN0", "PN1";
  822. allwinner,function = "s_rsb";
  823. allwinner,drive = <SUN4I_PINCTRL_20_MA>;
  824. allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
  825. };
  826. };
  827. r_rsb: i2c@08003400 {
  828. compatible = "allwinner,sun8i-a23-rsb";
  829. reg = <0x08003400 0x400>;
  830. interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
  831. clocks = <&apbs_gates 3>;
  832. clock-frequency = <3000000>;
  833. resets = <&apbs_rst 3>;
  834. pinctrl-names = "default";
  835. pinctrl-0 = <&r_rsb_pins>;
  836. status = "disabled";
  837. #address-cells = <1>;
  838. #size-cells = <0>;
  839. };
  840. };
  841. };