sun6i-a31.dtsi 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900
  1. /*
  2. * Copyright 2013 Maxime Ripard
  3. *
  4. * Maxime Ripard <maxime.ripard@free-electrons.com>
  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. * You should have received a copy of the GNU General Public
  22. * License along with this file; if not, write to the Free
  23. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
  24. * MA 02110-1301 USA
  25. *
  26. * Or, alternatively,
  27. *
  28. * b) Permission is hereby granted, free of charge, to any person
  29. * obtaining a copy of this software and associated documentation
  30. * files (the "Software"), to deal in the Software without
  31. * restriction, including without limitation the rights to use,
  32. * copy, modify, merge, publish, distribute, sublicense, and/or
  33. * sell copies of the Software, and to permit persons to whom the
  34. * Software is furnished to do so, subject to the following
  35. * conditions:
  36. *
  37. * The above copyright notice and this permission notice shall be
  38. * included in all copies or substantial portions of the Software.
  39. *
  40. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  41. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  42. * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  43. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  44. * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  45. * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  46. * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  47. * OTHER DEALINGS IN THE SOFTWARE.
  48. */
  49. /include/ "skeleton.dtsi"
  50. / {
  51. interrupt-parent = <&gic>;
  52. aliases {
  53. ethernet0 = &gmac;
  54. };
  55. chosen {
  56. #address-cells = <1>;
  57. #size-cells = <1>;
  58. ranges;
  59. framebuffer@0 {
  60. compatible = "allwinner,simple-framebuffer", "simple-framebuffer";
  61. allwinner,pipeline = "de_be0-lcd0-hdmi";
  62. clocks = <&pll6 0>;
  63. status = "disabled";
  64. };
  65. };
  66. cpus {
  67. enable-method = "allwinner,sun6i-a31";
  68. #address-cells = <1>;
  69. #size-cells = <0>;
  70. cpu@0 {
  71. compatible = "arm,cortex-a7";
  72. device_type = "cpu";
  73. reg = <0>;
  74. };
  75. cpu@1 {
  76. compatible = "arm,cortex-a7";
  77. device_type = "cpu";
  78. reg = <1>;
  79. };
  80. cpu@2 {
  81. compatible = "arm,cortex-a7";
  82. device_type = "cpu";
  83. reg = <2>;
  84. };
  85. cpu@3 {
  86. compatible = "arm,cortex-a7";
  87. device_type = "cpu";
  88. reg = <3>;
  89. };
  90. };
  91. memory {
  92. reg = <0x40000000 0x80000000>;
  93. };
  94. pmu {
  95. compatible = "arm,cortex-a7-pmu", "arm,cortex-a15-pmu";
  96. interrupts = <0 120 4>,
  97. <0 121 4>,
  98. <0 122 4>,
  99. <0 123 4>;
  100. };
  101. clocks {
  102. #address-cells = <1>;
  103. #size-cells = <1>;
  104. ranges;
  105. osc24M: osc24M {
  106. #clock-cells = <0>;
  107. compatible = "fixed-clock";
  108. clock-frequency = <24000000>;
  109. };
  110. osc32k: clk@0 {
  111. #clock-cells = <0>;
  112. compatible = "fixed-clock";
  113. clock-frequency = <32768>;
  114. clock-output-names = "osc32k";
  115. };
  116. pll1: clk@01c20000 {
  117. #clock-cells = <0>;
  118. compatible = "allwinner,sun6i-a31-pll1-clk";
  119. reg = <0x01c20000 0x4>;
  120. clocks = <&osc24M>;
  121. clock-output-names = "pll1";
  122. };
  123. pll6: clk@01c20028 {
  124. #clock-cells = <1>;
  125. compatible = "allwinner,sun6i-a31-pll6-clk";
  126. reg = <0x01c20028 0x4>;
  127. clocks = <&osc24M>;
  128. clock-output-names = "pll6", "pll6x2";
  129. };
  130. cpu: cpu@01c20050 {
  131. #clock-cells = <0>;
  132. compatible = "allwinner,sun4i-a10-cpu-clk";
  133. reg = <0x01c20050 0x4>;
  134. /*
  135. * PLL1 is listed twice here.
  136. * While it looks suspicious, it's actually documented
  137. * that way both in the datasheet and in the code from
  138. * Allwinner.
  139. */
  140. clocks = <&osc32k>, <&osc24M>, <&pll1>, <&pll1>;
  141. clock-output-names = "cpu";
  142. };
  143. axi: axi@01c20050 {
  144. #clock-cells = <0>;
  145. compatible = "allwinner,sun4i-a10-axi-clk";
  146. reg = <0x01c20050 0x4>;
  147. clocks = <&cpu>;
  148. clock-output-names = "axi";
  149. };
  150. ahb1_mux: ahb1_mux@01c20054 {
  151. #clock-cells = <0>;
  152. compatible = "allwinner,sun6i-a31-ahb1-mux-clk";
  153. reg = <0x01c20054 0x4>;
  154. clocks = <&osc32k>, <&osc24M>, <&axi>, <&pll6 0>;
  155. clock-output-names = "ahb1_mux";
  156. };
  157. ahb1: ahb1@01c20054 {
  158. #clock-cells = <0>;
  159. compatible = "allwinner,sun4i-a10-ahb-clk";
  160. reg = <0x01c20054 0x4>;
  161. clocks = <&ahb1_mux>;
  162. clock-output-names = "ahb1";
  163. };
  164. ahb1_gates: clk@01c20060 {
  165. #clock-cells = <1>;
  166. compatible = "allwinner,sun6i-a31-ahb1-gates-clk";
  167. reg = <0x01c20060 0x8>;
  168. clocks = <&ahb1>;
  169. clock-output-names = "ahb1_mipidsi", "ahb1_ss",
  170. "ahb1_dma", "ahb1_mmc0", "ahb1_mmc1",
  171. "ahb1_mmc2", "ahb1_mmc3", "ahb1_nand1",
  172. "ahb1_nand0", "ahb1_sdram",
  173. "ahb1_gmac", "ahb1_ts", "ahb1_hstimer",
  174. "ahb1_spi0", "ahb1_spi1", "ahb1_spi2",
  175. "ahb1_spi3", "ahb1_otg", "ahb1_ehci0",
  176. "ahb1_ehci1", "ahb1_ohci0",
  177. "ahb1_ohci1", "ahb1_ohci2", "ahb1_ve",
  178. "ahb1_lcd0", "ahb1_lcd1", "ahb1_csi",
  179. "ahb1_hdmi", "ahb1_de0", "ahb1_de1",
  180. "ahb1_fe0", "ahb1_fe1", "ahb1_mp",
  181. "ahb1_gpu", "ahb1_deu0", "ahb1_deu1",
  182. "ahb1_drc0", "ahb1_drc1";
  183. };
  184. apb1: apb1@01c20054 {
  185. #clock-cells = <0>;
  186. compatible = "allwinner,sun4i-a10-apb0-clk";
  187. reg = <0x01c20054 0x4>;
  188. clocks = <&ahb1>;
  189. clock-output-names = "apb1";
  190. };
  191. apb1_gates: clk@01c20068 {
  192. #clock-cells = <1>;
  193. compatible = "allwinner,sun6i-a31-apb1-gates-clk";
  194. reg = <0x01c20068 0x4>;
  195. clocks = <&apb1>;
  196. clock-output-names = "apb1_codec", "apb1_digital_mic",
  197. "apb1_pio", "apb1_daudio0",
  198. "apb1_daudio1";
  199. };
  200. apb2: clk@01c20058 {
  201. #clock-cells = <0>;
  202. compatible = "allwinner,sun4i-a10-apb1-clk";
  203. reg = <0x01c20058 0x4>;
  204. clocks = <&osc32k>, <&osc24M>, <&pll6 0>, <&pll6 0>;
  205. clock-output-names = "apb2";
  206. };
  207. apb2_gates: clk@01c2006c {
  208. #clock-cells = <1>;
  209. compatible = "allwinner,sun6i-a31-apb2-gates-clk";
  210. reg = <0x01c2006c 0x4>;
  211. clocks = <&apb2>;
  212. clock-output-names = "apb2_i2c0", "apb2_i2c1",
  213. "apb2_i2c2", "apb2_i2c3", "apb2_uart0",
  214. "apb2_uart1", "apb2_uart2", "apb2_uart3",
  215. "apb2_uart4", "apb2_uart5";
  216. };
  217. mmc0_clk: clk@01c20088 {
  218. #clock-cells = <0>;
  219. compatible = "allwinner,sun4i-a10-mod0-clk";
  220. reg = <0x01c20088 0x4>;
  221. clocks = <&osc24M>, <&pll6 0>;
  222. clock-output-names = "mmc0";
  223. };
  224. mmc1_clk: clk@01c2008c {
  225. #clock-cells = <0>;
  226. compatible = "allwinner,sun4i-a10-mod0-clk";
  227. reg = <0x01c2008c 0x4>;
  228. clocks = <&osc24M>, <&pll6 0>;
  229. clock-output-names = "mmc1";
  230. };
  231. mmc2_clk: clk@01c20090 {
  232. #clock-cells = <0>;
  233. compatible = "allwinner,sun4i-a10-mod0-clk";
  234. reg = <0x01c20090 0x4>;
  235. clocks = <&osc24M>, <&pll6 0>;
  236. clock-output-names = "mmc2";
  237. };
  238. mmc3_clk: clk@01c20094 {
  239. #clock-cells = <0>;
  240. compatible = "allwinner,sun4i-a10-mod0-clk";
  241. reg = <0x01c20094 0x4>;
  242. clocks = <&osc24M>, <&pll6 0>;
  243. clock-output-names = "mmc3";
  244. };
  245. spi0_clk: clk@01c200a0 {
  246. #clock-cells = <0>;
  247. compatible = "allwinner,sun4i-a10-mod0-clk";
  248. reg = <0x01c200a0 0x4>;
  249. clocks = <&osc24M>, <&pll6 0>;
  250. clock-output-names = "spi0";
  251. };
  252. spi1_clk: clk@01c200a4 {
  253. #clock-cells = <0>;
  254. compatible = "allwinner,sun4i-a10-mod0-clk";
  255. reg = <0x01c200a4 0x4>;
  256. clocks = <&osc24M>, <&pll6 0>;
  257. clock-output-names = "spi1";
  258. };
  259. spi2_clk: clk@01c200a8 {
  260. #clock-cells = <0>;
  261. compatible = "allwinner,sun4i-a10-mod0-clk";
  262. reg = <0x01c200a8 0x4>;
  263. clocks = <&osc24M>, <&pll6 0>;
  264. clock-output-names = "spi2";
  265. };
  266. spi3_clk: clk@01c200ac {
  267. #clock-cells = <0>;
  268. compatible = "allwinner,sun4i-a10-mod0-clk";
  269. reg = <0x01c200ac 0x4>;
  270. clocks = <&osc24M>, <&pll6 0>;
  271. clock-output-names = "spi3";
  272. };
  273. usb_clk: clk@01c200cc {
  274. #clock-cells = <1>;
  275. #reset-cells = <1>;
  276. compatible = "allwinner,sun6i-a31-usb-clk";
  277. reg = <0x01c200cc 0x4>;
  278. clocks = <&osc24M>;
  279. clock-output-names = "usb_phy0", "usb_phy1", "usb_phy2",
  280. "usb_ohci0", "usb_ohci1",
  281. "usb_ohci2";
  282. };
  283. /*
  284. * The following two are dummy clocks, placeholders used in the gmac_tx
  285. * clock. The gmac driver will choose one parent depending on the PHY
  286. * interface mode, using clk_set_rate auto-reparenting.
  287. * The actual TX clock rate is not controlled by the gmac_tx clock.
  288. */
  289. mii_phy_tx_clk: clk@1 {
  290. #clock-cells = <0>;
  291. compatible = "fixed-clock";
  292. clock-frequency = <25000000>;
  293. clock-output-names = "mii_phy_tx";
  294. };
  295. gmac_int_tx_clk: clk@2 {
  296. #clock-cells = <0>;
  297. compatible = "fixed-clock";
  298. clock-frequency = <125000000>;
  299. clock-output-names = "gmac_int_tx";
  300. };
  301. gmac_tx_clk: clk@01c200d0 {
  302. #clock-cells = <0>;
  303. compatible = "allwinner,sun7i-a20-gmac-clk";
  304. reg = <0x01c200d0 0x4>;
  305. clocks = <&mii_phy_tx_clk>, <&gmac_int_tx_clk>;
  306. clock-output-names = "gmac_tx";
  307. };
  308. };
  309. soc@01c00000 {
  310. compatible = "simple-bus";
  311. #address-cells = <1>;
  312. #size-cells = <1>;
  313. ranges;
  314. dma: dma-controller@01c02000 {
  315. compatible = "allwinner,sun6i-a31-dma";
  316. reg = <0x01c02000 0x1000>;
  317. interrupts = <0 50 4>;
  318. clocks = <&ahb1_gates 6>;
  319. resets = <&ahb1_rst 6>;
  320. #dma-cells = <1>;
  321. /* DMA controller requires AHB1 clocked from PLL6 */
  322. assigned-clocks = <&ahb1_mux>;
  323. assigned-clock-parents = <&pll6 0>;
  324. };
  325. mmc0: mmc@01c0f000 {
  326. compatible = "allwinner,sun5i-a13-mmc";
  327. reg = <0x01c0f000 0x1000>;
  328. clocks = <&ahb1_gates 8>, <&mmc0_clk>;
  329. clock-names = "ahb", "mmc";
  330. resets = <&ahb1_rst 8>;
  331. reset-names = "ahb";
  332. interrupts = <0 60 4>;
  333. status = "disabled";
  334. };
  335. mmc1: mmc@01c10000 {
  336. compatible = "allwinner,sun5i-a13-mmc";
  337. reg = <0x01c10000 0x1000>;
  338. clocks = <&ahb1_gates 9>, <&mmc1_clk>;
  339. clock-names = "ahb", "mmc";
  340. resets = <&ahb1_rst 9>;
  341. reset-names = "ahb";
  342. interrupts = <0 61 4>;
  343. status = "disabled";
  344. };
  345. mmc2: mmc@01c11000 {
  346. compatible = "allwinner,sun5i-a13-mmc";
  347. reg = <0x01c11000 0x1000>;
  348. clocks = <&ahb1_gates 10>, <&mmc2_clk>;
  349. clock-names = "ahb", "mmc";
  350. resets = <&ahb1_rst 10>;
  351. reset-names = "ahb";
  352. interrupts = <0 62 4>;
  353. status = "disabled";
  354. };
  355. mmc3: mmc@01c12000 {
  356. compatible = "allwinner,sun5i-a13-mmc";
  357. reg = <0x01c12000 0x1000>;
  358. clocks = <&ahb1_gates 11>, <&mmc3_clk>;
  359. clock-names = "ahb", "mmc";
  360. resets = <&ahb1_rst 11>;
  361. reset-names = "ahb";
  362. interrupts = <0 63 4>;
  363. status = "disabled";
  364. };
  365. usbphy: phy@01c19400 {
  366. compatible = "allwinner,sun6i-a31-usb-phy";
  367. reg = <0x01c19400 0x10>,
  368. <0x01c1a800 0x4>,
  369. <0x01c1b800 0x4>;
  370. reg-names = "phy_ctrl",
  371. "pmu1",
  372. "pmu2";
  373. clocks = <&usb_clk 8>,
  374. <&usb_clk 9>,
  375. <&usb_clk 10>;
  376. clock-names = "usb0_phy",
  377. "usb1_phy",
  378. "usb2_phy";
  379. resets = <&usb_clk 0>,
  380. <&usb_clk 1>,
  381. <&usb_clk 2>;
  382. reset-names = "usb0_reset",
  383. "usb1_reset",
  384. "usb2_reset";
  385. status = "disabled";
  386. #phy-cells = <1>;
  387. };
  388. ehci0: usb@01c1a000 {
  389. compatible = "allwinner,sun6i-a31-ehci", "generic-ehci";
  390. reg = <0x01c1a000 0x100>;
  391. interrupts = <0 72 4>;
  392. clocks = <&ahb1_gates 26>;
  393. resets = <&ahb1_rst 26>;
  394. phys = <&usbphy 1>;
  395. phy-names = "usb";
  396. status = "disabled";
  397. };
  398. ohci0: usb@01c1a400 {
  399. compatible = "allwinner,sun6i-a31-ohci", "generic-ohci";
  400. reg = <0x01c1a400 0x100>;
  401. interrupts = <0 73 4>;
  402. clocks = <&ahb1_gates 29>, <&usb_clk 16>;
  403. resets = <&ahb1_rst 29>;
  404. phys = <&usbphy 1>;
  405. phy-names = "usb";
  406. status = "disabled";
  407. };
  408. ehci1: usb@01c1b000 {
  409. compatible = "allwinner,sun6i-a31-ehci", "generic-ehci";
  410. reg = <0x01c1b000 0x100>;
  411. interrupts = <0 74 4>;
  412. clocks = <&ahb1_gates 27>;
  413. resets = <&ahb1_rst 27>;
  414. phys = <&usbphy 2>;
  415. phy-names = "usb";
  416. status = "disabled";
  417. };
  418. ohci1: usb@01c1b400 {
  419. compatible = "allwinner,sun6i-a31-ohci", "generic-ohci";
  420. reg = <0x01c1b400 0x100>;
  421. interrupts = <0 75 4>;
  422. clocks = <&ahb1_gates 30>, <&usb_clk 17>;
  423. resets = <&ahb1_rst 30>;
  424. phys = <&usbphy 2>;
  425. phy-names = "usb";
  426. status = "disabled";
  427. };
  428. ohci2: usb@01c1c400 {
  429. compatible = "allwinner,sun6i-a31-ohci", "generic-ohci";
  430. reg = <0x01c1c400 0x100>;
  431. interrupts = <0 77 4>;
  432. clocks = <&ahb1_gates 31>, <&usb_clk 18>;
  433. resets = <&ahb1_rst 31>;
  434. status = "disabled";
  435. };
  436. pio: pinctrl@01c20800 {
  437. compatible = "allwinner,sun6i-a31-pinctrl";
  438. reg = <0x01c20800 0x400>;
  439. interrupts = <0 11 4>,
  440. <0 15 4>,
  441. <0 16 4>,
  442. <0 17 4>;
  443. clocks = <&apb1_gates 5>;
  444. gpio-controller;
  445. interrupt-controller;
  446. #interrupt-cells = <2>;
  447. #size-cells = <0>;
  448. #gpio-cells = <3>;
  449. uart0_pins_a: uart0@0 {
  450. allwinner,pins = "PH20", "PH21";
  451. allwinner,function = "uart0";
  452. allwinner,drive = <0>;
  453. allwinner,pull = <0>;
  454. };
  455. i2c0_pins_a: i2c0@0 {
  456. allwinner,pins = "PH14", "PH15";
  457. allwinner,function = "i2c0";
  458. allwinner,drive = <0>;
  459. allwinner,pull = <0>;
  460. };
  461. i2c1_pins_a: i2c1@0 {
  462. allwinner,pins = "PH16", "PH17";
  463. allwinner,function = "i2c1";
  464. allwinner,drive = <0>;
  465. allwinner,pull = <0>;
  466. };
  467. i2c2_pins_a: i2c2@0 {
  468. allwinner,pins = "PH18", "PH19";
  469. allwinner,function = "i2c2";
  470. allwinner,drive = <0>;
  471. allwinner,pull = <0>;
  472. };
  473. mmc0_pins_a: mmc0@0 {
  474. allwinner,pins = "PF0","PF1","PF2","PF3","PF4","PF5";
  475. allwinner,function = "mmc0";
  476. allwinner,drive = <2>;
  477. allwinner,pull = <0>;
  478. };
  479. gmac_pins_mii_a: gmac_mii@0 {
  480. allwinner,pins = "PA0", "PA1", "PA2", "PA3",
  481. "PA8", "PA9", "PA11",
  482. "PA12", "PA13", "PA14", "PA19",
  483. "PA20", "PA21", "PA22", "PA23",
  484. "PA24", "PA26", "PA27";
  485. allwinner,function = "gmac";
  486. allwinner,drive = <0>;
  487. allwinner,pull = <0>;
  488. };
  489. gmac_pins_gmii_a: gmac_gmii@0 {
  490. allwinner,pins = "PA0", "PA1", "PA2", "PA3",
  491. "PA4", "PA5", "PA6", "PA7",
  492. "PA8", "PA9", "PA10", "PA11",
  493. "PA12", "PA13", "PA14", "PA15",
  494. "PA16", "PA17", "PA18", "PA19",
  495. "PA20", "PA21", "PA22", "PA23",
  496. "PA24", "PA25", "PA26", "PA27";
  497. allwinner,function = "gmac";
  498. /*
  499. * data lines in GMII mode run at 125MHz and
  500. * might need a higher signal drive strength
  501. */
  502. allwinner,drive = <2>;
  503. allwinner,pull = <0>;
  504. };
  505. gmac_pins_rgmii_a: gmac_rgmii@0 {
  506. allwinner,pins = "PA0", "PA1", "PA2", "PA3",
  507. "PA9", "PA10", "PA11",
  508. "PA12", "PA13", "PA14", "PA19",
  509. "PA20", "PA25", "PA26", "PA27";
  510. allwinner,function = "gmac";
  511. /*
  512. * data lines in RGMII mode use DDR mode
  513. * and need a higher signal drive strength
  514. */
  515. allwinner,drive = <3>;
  516. allwinner,pull = <0>;
  517. };
  518. };
  519. ahb1_rst: reset@01c202c0 {
  520. #reset-cells = <1>;
  521. compatible = "allwinner,sun6i-a31-ahb1-reset";
  522. reg = <0x01c202c0 0xc>;
  523. };
  524. apb1_rst: reset@01c202d0 {
  525. #reset-cells = <1>;
  526. compatible = "allwinner,sun6i-a31-clock-reset";
  527. reg = <0x01c202d0 0x4>;
  528. };
  529. apb2_rst: reset@01c202d8 {
  530. #reset-cells = <1>;
  531. compatible = "allwinner,sun6i-a31-clock-reset";
  532. reg = <0x01c202d8 0x4>;
  533. };
  534. timer@01c20c00 {
  535. compatible = "allwinner,sun4i-a10-timer";
  536. reg = <0x01c20c00 0xa0>;
  537. interrupts = <0 18 4>,
  538. <0 19 4>,
  539. <0 20 4>,
  540. <0 21 4>,
  541. <0 22 4>;
  542. clocks = <&osc24M>;
  543. };
  544. wdt1: watchdog@01c20ca0 {
  545. compatible = "allwinner,sun6i-a31-wdt";
  546. reg = <0x01c20ca0 0x20>;
  547. };
  548. uart0: serial@01c28000 {
  549. compatible = "snps,dw-apb-uart";
  550. reg = <0x01c28000 0x400>;
  551. interrupts = <0 0 4>;
  552. reg-shift = <2>;
  553. reg-io-width = <4>;
  554. clocks = <&apb2_gates 16>;
  555. resets = <&apb2_rst 16>;
  556. dmas = <&dma 6>, <&dma 6>;
  557. dma-names = "rx", "tx";
  558. status = "disabled";
  559. };
  560. uart1: serial@01c28400 {
  561. compatible = "snps,dw-apb-uart";
  562. reg = <0x01c28400 0x400>;
  563. interrupts = <0 1 4>;
  564. reg-shift = <2>;
  565. reg-io-width = <4>;
  566. clocks = <&apb2_gates 17>;
  567. resets = <&apb2_rst 17>;
  568. dmas = <&dma 7>, <&dma 7>;
  569. dma-names = "rx", "tx";
  570. status = "disabled";
  571. };
  572. uart2: serial@01c28800 {
  573. compatible = "snps,dw-apb-uart";
  574. reg = <0x01c28800 0x400>;
  575. interrupts = <0 2 4>;
  576. reg-shift = <2>;
  577. reg-io-width = <4>;
  578. clocks = <&apb2_gates 18>;
  579. resets = <&apb2_rst 18>;
  580. dmas = <&dma 8>, <&dma 8>;
  581. dma-names = "rx", "tx";
  582. status = "disabled";
  583. };
  584. uart3: serial@01c28c00 {
  585. compatible = "snps,dw-apb-uart";
  586. reg = <0x01c28c00 0x400>;
  587. interrupts = <0 3 4>;
  588. reg-shift = <2>;
  589. reg-io-width = <4>;
  590. clocks = <&apb2_gates 19>;
  591. resets = <&apb2_rst 19>;
  592. dmas = <&dma 9>, <&dma 9>;
  593. dma-names = "rx", "tx";
  594. status = "disabled";
  595. };
  596. uart4: serial@01c29000 {
  597. compatible = "snps,dw-apb-uart";
  598. reg = <0x01c29000 0x400>;
  599. interrupts = <0 4 4>;
  600. reg-shift = <2>;
  601. reg-io-width = <4>;
  602. clocks = <&apb2_gates 20>;
  603. resets = <&apb2_rst 20>;
  604. dmas = <&dma 10>, <&dma 10>;
  605. dma-names = "rx", "tx";
  606. status = "disabled";
  607. };
  608. uart5: serial@01c29400 {
  609. compatible = "snps,dw-apb-uart";
  610. reg = <0x01c29400 0x400>;
  611. interrupts = <0 5 4>;
  612. reg-shift = <2>;
  613. reg-io-width = <4>;
  614. clocks = <&apb2_gates 21>;
  615. resets = <&apb2_rst 21>;
  616. dmas = <&dma 22>, <&dma 22>;
  617. dma-names = "rx", "tx";
  618. status = "disabled";
  619. };
  620. i2c0: i2c@01c2ac00 {
  621. compatible = "allwinner,sun6i-a31-i2c";
  622. reg = <0x01c2ac00 0x400>;
  623. interrupts = <0 6 4>;
  624. clocks = <&apb2_gates 0>;
  625. resets = <&apb2_rst 0>;
  626. status = "disabled";
  627. #address-cells = <1>;
  628. #size-cells = <0>;
  629. };
  630. i2c1: i2c@01c2b000 {
  631. compatible = "allwinner,sun6i-a31-i2c";
  632. reg = <0x01c2b000 0x400>;
  633. interrupts = <0 7 4>;
  634. clocks = <&apb2_gates 1>;
  635. resets = <&apb2_rst 1>;
  636. status = "disabled";
  637. #address-cells = <1>;
  638. #size-cells = <0>;
  639. };
  640. i2c2: i2c@01c2b400 {
  641. compatible = "allwinner,sun6i-a31-i2c";
  642. reg = <0x01c2b400 0x400>;
  643. interrupts = <0 8 4>;
  644. clocks = <&apb2_gates 2>;
  645. resets = <&apb2_rst 2>;
  646. status = "disabled";
  647. #address-cells = <1>;
  648. #size-cells = <0>;
  649. };
  650. i2c3: i2c@01c2b800 {
  651. compatible = "allwinner,sun6i-a31-i2c";
  652. reg = <0x01c2b800 0x400>;
  653. interrupts = <0 9 4>;
  654. clocks = <&apb2_gates 3>;
  655. resets = <&apb2_rst 3>;
  656. status = "disabled";
  657. #address-cells = <1>;
  658. #size-cells = <0>;
  659. };
  660. gmac: ethernet@01c30000 {
  661. compatible = "allwinner,sun7i-a20-gmac";
  662. reg = <0x01c30000 0x1054>;
  663. interrupts = <0 82 4>;
  664. interrupt-names = "macirq";
  665. clocks = <&ahb1_gates 17>, <&gmac_tx_clk>;
  666. clock-names = "stmmaceth", "allwinner_gmac_tx";
  667. resets = <&ahb1_rst 17>;
  668. reset-names = "stmmaceth";
  669. snps,pbl = <2>;
  670. snps,fixed-burst;
  671. snps,force_sf_dma_mode;
  672. status = "disabled";
  673. #address-cells = <1>;
  674. #size-cells = <0>;
  675. };
  676. timer@01c60000 {
  677. compatible = "allwinner,sun6i-a31-hstimer", "allwinner,sun7i-a20-hstimer";
  678. reg = <0x01c60000 0x1000>;
  679. interrupts = <0 51 4>,
  680. <0 52 4>,
  681. <0 53 4>,
  682. <0 54 4>;
  683. clocks = <&ahb1_gates 19>;
  684. resets = <&ahb1_rst 19>;
  685. };
  686. spi0: spi@01c68000 {
  687. compatible = "allwinner,sun6i-a31-spi";
  688. reg = <0x01c68000 0x1000>;
  689. interrupts = <0 65 4>;
  690. clocks = <&ahb1_gates 20>, <&spi0_clk>;
  691. clock-names = "ahb", "mod";
  692. dmas = <&dma 23>, <&dma 23>;
  693. dma-names = "rx", "tx";
  694. resets = <&ahb1_rst 20>;
  695. status = "disabled";
  696. };
  697. spi1: spi@01c69000 {
  698. compatible = "allwinner,sun6i-a31-spi";
  699. reg = <0x01c69000 0x1000>;
  700. interrupts = <0 66 4>;
  701. clocks = <&ahb1_gates 21>, <&spi1_clk>;
  702. clock-names = "ahb", "mod";
  703. dmas = <&dma 24>, <&dma 24>;
  704. dma-names = "rx", "tx";
  705. resets = <&ahb1_rst 21>;
  706. status = "disabled";
  707. };
  708. spi2: spi@01c6a000 {
  709. compatible = "allwinner,sun6i-a31-spi";
  710. reg = <0x01c6a000 0x1000>;
  711. interrupts = <0 67 4>;
  712. clocks = <&ahb1_gates 22>, <&spi2_clk>;
  713. clock-names = "ahb", "mod";
  714. dmas = <&dma 25>, <&dma 25>;
  715. dma-names = "rx", "tx";
  716. resets = <&ahb1_rst 22>;
  717. status = "disabled";
  718. };
  719. spi3: spi@01c6b000 {
  720. compatible = "allwinner,sun6i-a31-spi";
  721. reg = <0x01c6b000 0x1000>;
  722. interrupts = <0 68 4>;
  723. clocks = <&ahb1_gates 23>, <&spi3_clk>;
  724. clock-names = "ahb", "mod";
  725. dmas = <&dma 26>, <&dma 26>;
  726. dma-names = "rx", "tx";
  727. resets = <&ahb1_rst 23>;
  728. status = "disabled";
  729. };
  730. gic: interrupt-controller@01c81000 {
  731. compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic";
  732. reg = <0x01c81000 0x1000>,
  733. <0x01c82000 0x1000>,
  734. <0x01c84000 0x2000>,
  735. <0x01c86000 0x2000>;
  736. interrupt-controller;
  737. #interrupt-cells = <3>;
  738. interrupts = <1 9 0xf04>;
  739. };
  740. rtc: rtc@01f00000 {
  741. compatible = "allwinner,sun6i-a31-rtc";
  742. reg = <0x01f00000 0x54>;
  743. interrupts = <0 40 4>, <0 41 4>;
  744. };
  745. nmi_intc: interrupt-controller@01f00c0c {
  746. compatible = "allwinner,sun6i-a31-sc-nmi";
  747. interrupt-controller;
  748. #interrupt-cells = <2>;
  749. reg = <0x01f00c0c 0x38>;
  750. interrupts = <0 32 4>;
  751. };
  752. prcm@01f01400 {
  753. compatible = "allwinner,sun6i-a31-prcm";
  754. reg = <0x01f01400 0x200>;
  755. ar100: ar100_clk {
  756. compatible = "allwinner,sun6i-a31-ar100-clk";
  757. #clock-cells = <0>;
  758. clocks = <&osc32k>, <&osc24M>, <&pll6 0>, <&pll6 0>;
  759. clock-output-names = "ar100";
  760. };
  761. ahb0: ahb0_clk {
  762. compatible = "fixed-factor-clock";
  763. #clock-cells = <0>;
  764. clock-div = <1>;
  765. clock-mult = <1>;
  766. clocks = <&ar100>;
  767. clock-output-names = "ahb0";
  768. };
  769. apb0: apb0_clk {
  770. compatible = "allwinner,sun6i-a31-apb0-clk";
  771. #clock-cells = <0>;
  772. clocks = <&ahb0>;
  773. clock-output-names = "apb0";
  774. };
  775. apb0_gates: apb0_gates_clk {
  776. compatible = "allwinner,sun6i-a31-apb0-gates-clk";
  777. #clock-cells = <1>;
  778. clocks = <&apb0>;
  779. clock-output-names = "apb0_pio", "apb0_ir",
  780. "apb0_timer", "apb0_p2wi",
  781. "apb0_uart", "apb0_1wire",
  782. "apb0_i2c";
  783. };
  784. apb0_rst: apb0_rst {
  785. compatible = "allwinner,sun6i-a31-clock-reset";
  786. #reset-cells = <1>;
  787. };
  788. };
  789. cpucfg@01f01c00 {
  790. compatible = "allwinner,sun6i-a31-cpuconfig";
  791. reg = <0x01f01c00 0x300>;
  792. };
  793. r_pio: pinctrl@01f02c00 {
  794. compatible = "allwinner,sun6i-a31-r-pinctrl";
  795. reg = <0x01f02c00 0x400>;
  796. interrupts = <0 45 4>,
  797. <0 46 4>;
  798. clocks = <&apb0_gates 0>;
  799. resets = <&apb0_rst 0>;
  800. gpio-controller;
  801. interrupt-controller;
  802. #interrupt-cells = <2>;
  803. #size-cells = <0>;
  804. #gpio-cells = <3>;
  805. };
  806. };
  807. };