berlin4ct.dtsi 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. /*
  2. * Copyright (C) 2015 Marvell Technology Group Ltd.
  3. *
  4. * Author: Jisheng Zhang <jszhang@marvell.com>
  5. *
  6. * This file is dual-licensed: you can use it either under the terms
  7. * of the GPLv2 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. * 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 <dt-bindings/interrupt-controller/arm-gic.h>
  45. / {
  46. compatible = "marvell,berlin4ct", "marvell,berlin";
  47. interrupt-parent = <&gic>;
  48. #address-cells = <2>;
  49. #size-cells = <2>;
  50. aliases {
  51. serial0 = &uart0;
  52. };
  53. psci {
  54. compatible = "arm,psci-1.0", "arm,psci-0.2";
  55. method = "smc";
  56. };
  57. cpus {
  58. #address-cells = <1>;
  59. #size-cells = <0>;
  60. cpu0: cpu@0 {
  61. compatible = "arm,cortex-a53", "arm,armv8";
  62. device_type = "cpu";
  63. reg = <0x0>;
  64. enable-method = "psci";
  65. next-level-cache = <&l2>;
  66. cpu-idle-states = <&CPU_SLEEP_0>;
  67. };
  68. cpu1: cpu@1 {
  69. compatible = "arm,cortex-a53", "arm,armv8";
  70. device_type = "cpu";
  71. reg = <0x1>;
  72. enable-method = "psci";
  73. next-level-cache = <&l2>;
  74. cpu-idle-states = <&CPU_SLEEP_0>;
  75. };
  76. cpu2: cpu@2 {
  77. compatible = "arm,cortex-a53", "arm,armv8";
  78. device_type = "cpu";
  79. reg = <0x2>;
  80. enable-method = "psci";
  81. next-level-cache = <&l2>;
  82. cpu-idle-states = <&CPU_SLEEP_0>;
  83. };
  84. cpu3: cpu@3 {
  85. compatible = "arm,cortex-a53", "arm,armv8";
  86. device_type = "cpu";
  87. reg = <0x3>;
  88. enable-method = "psci";
  89. next-level-cache = <&l2>;
  90. cpu-idle-states = <&CPU_SLEEP_0>;
  91. };
  92. l2: cache {
  93. compatible = "cache";
  94. };
  95. idle-states {
  96. entry-method = "psci";
  97. CPU_SLEEP_0: cpu-sleep-0 {
  98. compatible = "arm,idle-state";
  99. local-timer-stop;
  100. arm,psci-suspend-param = <0x0010000>;
  101. entry-latency-us = <75>;
  102. exit-latency-us = <155>;
  103. min-residency-us = <1000>;
  104. };
  105. };
  106. };
  107. osc: osc {
  108. compatible = "fixed-clock";
  109. #clock-cells = <0>;
  110. clock-frequency = <25000000>;
  111. };
  112. pmu {
  113. compatible = "arm,cortex-a53-pmu", "arm,armv8-pmuv3";
  114. interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>,
  115. <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>,
  116. <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>,
  117. <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
  118. interrupt-affinity = <&cpu0>,
  119. <&cpu1>,
  120. <&cpu2>,
  121. <&cpu3>;
  122. };
  123. timer {
  124. compatible = "arm,armv8-timer";
  125. interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
  126. <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
  127. <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
  128. <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
  129. };
  130. soc {
  131. compatible = "simple-bus";
  132. #address-cells = <1>;
  133. #size-cells = <1>;
  134. ranges = <0 0 0xf7000000 0x1000000>;
  135. gic: interrupt-controller@901000 {
  136. compatible = "arm,gic-400";
  137. #interrupt-cells = <3>;
  138. interrupt-controller;
  139. reg = <0x901000 0x1000>,
  140. <0x902000 0x2000>,
  141. <0x904000 0x2000>,
  142. <0x906000 0x2000>;
  143. interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
  144. };
  145. apb@e80000 {
  146. compatible = "simple-bus";
  147. #address-cells = <1>;
  148. #size-cells = <1>;
  149. ranges = <0 0xe80000 0x10000>;
  150. interrupt-parent = <&aic>;
  151. gpio0: gpio@0400 {
  152. compatible = "snps,dw-apb-gpio";
  153. reg = <0x0400 0x400>;
  154. #address-cells = <1>;
  155. #size-cells = <0>;
  156. porta: gpio-port@0 {
  157. compatible = "snps,dw-apb-gpio-port";
  158. gpio-controller;
  159. #gpio-cells = <2>;
  160. snps,nr-gpios = <32>;
  161. reg = <0>;
  162. interrupt-controller;
  163. #interrupt-cells = <2>;
  164. interrupts = <0>;
  165. };
  166. };
  167. gpio1: gpio@0800 {
  168. compatible = "snps,dw-apb-gpio";
  169. reg = <0x0800 0x400>;
  170. #address-cells = <1>;
  171. #size-cells = <0>;
  172. portb: gpio-port@1 {
  173. compatible = "snps,dw-apb-gpio-port";
  174. gpio-controller;
  175. #gpio-cells = <2>;
  176. snps,nr-gpios = <32>;
  177. reg = <0>;
  178. interrupt-controller;
  179. #interrupt-cells = <2>;
  180. interrupts = <1>;
  181. };
  182. };
  183. gpio2: gpio@0c00 {
  184. compatible = "snps,dw-apb-gpio";
  185. reg = <0x0c00 0x400>;
  186. #address-cells = <1>;
  187. #size-cells = <0>;
  188. portc: gpio-port@2 {
  189. compatible = "snps,dw-apb-gpio-port";
  190. gpio-controller;
  191. #gpio-cells = <2>;
  192. snps,nr-gpios = <32>;
  193. reg = <0>;
  194. interrupt-controller;
  195. #interrupt-cells = <2>;
  196. interrupts = <2>;
  197. };
  198. };
  199. gpio3: gpio@1000 {
  200. compatible = "snps,dw-apb-gpio";
  201. reg = <0x1000 0x400>;
  202. #address-cells = <1>;
  203. #size-cells = <0>;
  204. portd: gpio-port@3 {
  205. compatible = "snps,dw-apb-gpio-port";
  206. gpio-controller;
  207. #gpio-cells = <2>;
  208. snps,nr-gpios = <32>;
  209. reg = <0>;
  210. interrupt-controller;
  211. #interrupt-cells = <2>;
  212. interrupts = <3>;
  213. };
  214. };
  215. aic: interrupt-controller@3800 {
  216. compatible = "snps,dw-apb-ictl";
  217. reg = <0x3800 0x30>;
  218. interrupt-controller;
  219. #interrupt-cells = <1>;
  220. interrupt-parent = <&gic>;
  221. interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
  222. };
  223. };
  224. soc_pinctrl: pin-controller@ea8000 {
  225. compatible = "marvell,berlin4ct-soc-pinctrl";
  226. reg = <0xea8000 0x14>;
  227. };
  228. avio_pinctrl: pin-controller@ea8400 {
  229. compatible = "marvell,berlin4ct-avio-pinctrl";
  230. reg = <0xea8400 0x8>;
  231. };
  232. apb@fc0000 {
  233. compatible = "simple-bus";
  234. #address-cells = <1>;
  235. #size-cells = <1>;
  236. ranges = <0 0xfc0000 0x10000>;
  237. interrupt-parent = <&sic>;
  238. sic: interrupt-controller@1000 {
  239. compatible = "snps,dw-apb-ictl";
  240. reg = <0x1000 0x30>;
  241. interrupt-controller;
  242. #interrupt-cells = <1>;
  243. interrupt-parent = <&gic>;
  244. interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
  245. };
  246. wdt0: watchdog@3000 {
  247. compatible = "snps,dw-wdt";
  248. reg = <0x3000 0x100>;
  249. clocks = <&osc>;
  250. interrupts = <0>;
  251. };
  252. wdt1: watchdog@4000 {
  253. compatible = "snps,dw-wdt";
  254. reg = <0x4000 0x100>;
  255. clocks = <&osc>;
  256. interrupts = <1>;
  257. };
  258. wdt2: watchdog@5000 {
  259. compatible = "snps,dw-wdt";
  260. reg = <0x5000 0x100>;
  261. clocks = <&osc>;
  262. interrupts = <2>;
  263. };
  264. sm_gpio0: gpio@8000 {
  265. compatible = "snps,dw-apb-gpio";
  266. reg = <0x8000 0x400>;
  267. #address-cells = <1>;
  268. #size-cells = <0>;
  269. porte: gpio-port@4 {
  270. compatible = "snps,dw-apb-gpio-port";
  271. gpio-controller;
  272. #gpio-cells = <2>;
  273. snps,nr-gpios = <32>;
  274. reg = <0>;
  275. };
  276. };
  277. sm_gpio1: gpio@9000 {
  278. compatible = "snps,dw-apb-gpio";
  279. reg = <0x9000 0x400>;
  280. #address-cells = <1>;
  281. #size-cells = <0>;
  282. portf: gpio-port@5 {
  283. compatible = "snps,dw-apb-gpio-port";
  284. gpio-controller;
  285. #gpio-cells = <2>;
  286. snps,nr-gpios = <32>;
  287. reg = <0>;
  288. };
  289. };
  290. uart0: uart@d000 {
  291. compatible = "snps,dw-apb-uart";
  292. reg = <0xd000 0x100>;
  293. interrupts = <8>;
  294. clocks = <&osc>;
  295. reg-shift = <2>;
  296. status = "disabled";
  297. pinctrl-0 = <&uart0_pmux>;
  298. pinctrl-names = "default";
  299. };
  300. };
  301. system_pinctrl: pin-controller@fe2200 {
  302. compatible = "marvell,berlin4ct-system-pinctrl";
  303. reg = <0xfe2200 0xc>;
  304. uart0_pmux: uart0-pmux {
  305. groups = "SM_URT0_TXD", "SM_URT0_RXD";
  306. function = "uart0";
  307. };
  308. };
  309. };
  310. };