sun6i-a31.dtsi 22 KB

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