versatile-ab.dts 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. // SPDX-License-Identifier: GPL-2.0
  2. /dts-v1/;
  3. / {
  4. model = "ARM Versatile AB";
  5. compatible = "arm,versatile-ab";
  6. #address-cells = <1>;
  7. #size-cells = <1>;
  8. interrupt-parent = <&vic>;
  9. aliases {
  10. serial0 = &uart0;
  11. serial1 = &uart1;
  12. serial2 = &uart2;
  13. i2c0 = &i2c0;
  14. };
  15. chosen {
  16. stdout-path = &uart0;
  17. };
  18. memory {
  19. device_type = "memory";
  20. reg = <0x0 0x08000000>;
  21. };
  22. xtal24mhz: xtal24mhz@24M {
  23. #clock-cells = <0>;
  24. compatible = "fixed-clock";
  25. clock-frequency = <24000000>;
  26. };
  27. bridge {
  28. compatible = "ti,ths8134b", "ti,ths8134";
  29. #address-cells = <1>;
  30. #size-cells = <0>;
  31. ports {
  32. #address-cells = <1>;
  33. #size-cells = <0>;
  34. port@0 {
  35. reg = <0>;
  36. vga_bridge_in: endpoint {
  37. remote-endpoint = <&clcd_pads_vga_dac>;
  38. };
  39. };
  40. port@1 {
  41. reg = <1>;
  42. vga_bridge_out: endpoint {
  43. remote-endpoint = <&vga_con_in>;
  44. };
  45. };
  46. };
  47. };
  48. vga {
  49. compatible = "vga-connector";
  50. port {
  51. vga_con_in: endpoint {
  52. remote-endpoint = <&vga_bridge_out>;
  53. };
  54. };
  55. };
  56. core-module@10000000 {
  57. compatible = "arm,core-module-versatile", "syscon", "simple-mfd";
  58. reg = <0x10000000 0x200>;
  59. ranges = <0x0 0x10000000 0x200>;
  60. #address-cells = <1>;
  61. #size-cells = <1>;
  62. led@8,0 {
  63. compatible = "register-bit-led";
  64. reg = <0x08 0x04>;
  65. offset = <0x08>;
  66. mask = <0x01>;
  67. label = "versatile:0";
  68. linux,default-trigger = "heartbeat";
  69. default-state = "on";
  70. };
  71. led@8,1 {
  72. compatible = "register-bit-led";
  73. reg = <0x08 0x04>;
  74. offset = <0x08>;
  75. mask = <0x02>;
  76. label = "versatile:1";
  77. linux,default-trigger = "mmc0";
  78. default-state = "off";
  79. };
  80. led@8,2 {
  81. compatible = "register-bit-led";
  82. reg = <0x08 0x04>;
  83. offset = <0x08>;
  84. mask = <0x04>;
  85. label = "versatile:2";
  86. linux,default-trigger = "cpu0";
  87. default-state = "off";
  88. };
  89. led@8,3 {
  90. compatible = "register-bit-led";
  91. reg = <0x08 0x04>;
  92. offset = <0x08>;
  93. mask = <0x08>;
  94. label = "versatile:3";
  95. default-state = "off";
  96. };
  97. led@8,4 {
  98. compatible = "register-bit-led";
  99. reg = <0x08 0x04>;
  100. offset = <0x08>;
  101. mask = <0x10>;
  102. label = "versatile:4";
  103. default-state = "off";
  104. };
  105. led@8,5 {
  106. compatible = "register-bit-led";
  107. reg = <0x08 0x04>;
  108. offset = <0x08>;
  109. mask = <0x20>;
  110. label = "versatile:5";
  111. default-state = "off";
  112. };
  113. led@8,6 {
  114. compatible = "register-bit-led";
  115. reg = <0x08 0x04>;
  116. offset = <0x08>;
  117. mask = <0x40>;
  118. label = "versatile:6";
  119. default-state = "off";
  120. };
  121. led@8,7 {
  122. compatible = "register-bit-led";
  123. reg = <0x08 0x04>;
  124. offset = <0x08>;
  125. mask = <0x80>;
  126. label = "versatile:7";
  127. default-state = "off";
  128. };
  129. /* OSC1 on AB, OSC4 on PB */
  130. osc1: cm_aux_osc@24M {
  131. #clock-cells = <0>;
  132. compatible = "arm,versatile-cm-auxosc";
  133. clocks = <&xtal24mhz>;
  134. };
  135. /* The timer clock is the 24 MHz oscillator divided to 1MHz */
  136. timclk: timclk@1M {
  137. #clock-cells = <0>;
  138. compatible = "fixed-factor-clock";
  139. clock-div = <24>;
  140. clock-mult = <1>;
  141. clocks = <&xtal24mhz>;
  142. };
  143. pclk: pclk@24M {
  144. #clock-cells = <0>;
  145. compatible = "fixed-factor-clock";
  146. clock-div = <1>;
  147. clock-mult = <1>;
  148. clocks = <&xtal24mhz>;
  149. };
  150. };
  151. flash@34000000 {
  152. /* 64 MiB NOR flash in non-interleaved chips */
  153. compatible = "arm,versatile-flash", "cfi-flash";
  154. reg = <0x34000000 0x04000000>;
  155. bank-width = <4>;
  156. partitions {
  157. compatible = "arm,arm-firmware-suite";
  158. };
  159. };
  160. i2c0: i2c@10002000 {
  161. #address-cells = <1>;
  162. #size-cells = <0>;
  163. compatible = "arm,versatile-i2c";
  164. reg = <0x10002000 0x1000>;
  165. rtc@68 {
  166. compatible = "dallas,ds1338";
  167. reg = <0x68>;
  168. };
  169. };
  170. net@10010000 {
  171. compatible = "smsc,lan91c111";
  172. reg = <0x10010000 0x10000>;
  173. interrupts = <25>;
  174. };
  175. lcd@10008000 {
  176. compatible = "arm,versatile-lcd";
  177. reg = <0x10008000 0x1000>;
  178. };
  179. amba {
  180. compatible = "simple-bus";
  181. #address-cells = <1>;
  182. #size-cells = <1>;
  183. ranges;
  184. vic: interrupt-controller@10140000 {
  185. compatible = "arm,versatile-vic";
  186. interrupt-controller;
  187. #interrupt-cells = <1>;
  188. reg = <0x10140000 0x1000>;
  189. valid-mask = <0xffffffff>;
  190. };
  191. sic: interrupt-controller@10003000 {
  192. compatible = "arm,versatile-sic";
  193. interrupt-controller;
  194. #interrupt-cells = <1>;
  195. reg = <0x10003000 0x1000>;
  196. interrupt-parent = <&vic>;
  197. interrupts = <31>; /* Cascaded to vic */
  198. clear-mask = <0xffffffff>;
  199. /*
  200. * Valid interrupt lines mask according to
  201. * table 4-36 page 4-50 of ARM DUI 0225D
  202. */
  203. valid-mask = <0x0760031b>;
  204. };
  205. dma@10130000 {
  206. compatible = "arm,pl081", "arm,primecell";
  207. reg = <0x10130000 0x1000>;
  208. interrupts = <17>;
  209. clocks = <&pclk>;
  210. clock-names = "apb_pclk";
  211. };
  212. uart0: uart@101f1000 {
  213. compatible = "arm,pl011", "arm,primecell";
  214. reg = <0x101f1000 0x1000>;
  215. interrupts = <12>;
  216. clocks = <&xtal24mhz>, <&pclk>;
  217. clock-names = "uartclk", "apb_pclk";
  218. };
  219. uart1: uart@101f2000 {
  220. compatible = "arm,pl011", "arm,primecell";
  221. reg = <0x101f2000 0x1000>;
  222. interrupts = <13>;
  223. clocks = <&xtal24mhz>, <&pclk>;
  224. clock-names = "uartclk", "apb_pclk";
  225. };
  226. uart2: uart@101f3000 {
  227. compatible = "arm,pl011", "arm,primecell";
  228. reg = <0x101f3000 0x1000>;
  229. interrupts = <14>;
  230. clocks = <&xtal24mhz>, <&pclk>;
  231. clock-names = "uartclk", "apb_pclk";
  232. };
  233. smc@10100000 {
  234. compatible = "arm,primecell";
  235. reg = <0x10100000 0x1000>;
  236. clocks = <&pclk>;
  237. clock-names = "apb_pclk";
  238. };
  239. mpmc@10110000 {
  240. compatible = "arm,primecell";
  241. reg = <0x10110000 0x1000>;
  242. clocks = <&pclk>;
  243. clock-names = "apb_pclk";
  244. };
  245. display@10120000 {
  246. compatible = "arm,pl110", "arm,primecell";
  247. reg = <0x10120000 0x1000>;
  248. interrupts = <16>;
  249. clocks = <&osc1>, <&pclk>;
  250. clock-names = "clcdclk", "apb_pclk";
  251. /* 800x600 16bpp @ 36MHz works fine */
  252. max-memory-bandwidth = <54000000>;
  253. /*
  254. * This port is routed through a PLD (Programmable
  255. * Logic Device) that routes the output from the CLCD
  256. * (after transformations) to the VGA DAC and also an
  257. * external panel connector. The PLD is essential for
  258. * supporting RGB565/BGR565.
  259. *
  260. * The signals from the port thus reaches two endpoints.
  261. * The PLD is managed through a few special bits in the
  262. * FPGA "sysreg".
  263. *
  264. * This arrangement can be clearly seen in
  265. * ARM DUI 0225D, page 3-41, figure 3-19.
  266. */
  267. port@0 {
  268. #address-cells = <1>;
  269. #size-cells = <0>;
  270. clcd_pads_panel: endpoint@0 {
  271. reg = <0>;
  272. remote-endpoint = <&panel_in>;
  273. arm,pl11x,tft-r0g0b0-pads = <0 8 16>;
  274. };
  275. clcd_pads_vga_dac: endpoint@1 {
  276. reg = <1>;
  277. remote-endpoint = <&vga_bridge_in>;
  278. arm,pl11x,tft-r0g0b0-pads = <0 8 16>;
  279. };
  280. };
  281. };
  282. sctl@101e0000 {
  283. compatible = "arm,primecell";
  284. reg = <0x101e0000 0x1000>;
  285. clocks = <&pclk>;
  286. clock-names = "apb_pclk";
  287. };
  288. watchdog@101e1000 {
  289. compatible = "arm,primecell";
  290. reg = <0x101e1000 0x1000>;
  291. interrupts = <0>;
  292. clocks = <&pclk>;
  293. clock-names = "apb_pclk";
  294. };
  295. timer@101e2000 {
  296. compatible = "arm,sp804", "arm,primecell";
  297. reg = <0x101e2000 0x1000>;
  298. interrupts = <4>;
  299. clocks = <&timclk>, <&timclk>, <&pclk>;
  300. clock-names = "timer0", "timer1", "apb_pclk";
  301. };
  302. timer@101e3000 {
  303. compatible = "arm,sp804", "arm,primecell";
  304. reg = <0x101e3000 0x1000>;
  305. interrupts = <5>;
  306. clocks = <&timclk>, <&timclk>, <&pclk>;
  307. clock-names = "timer0", "timer1", "apb_pclk";
  308. };
  309. gpio0: gpio@101e4000 {
  310. compatible = "arm,pl061", "arm,primecell";
  311. reg = <0x101e4000 0x1000>;
  312. gpio-controller;
  313. interrupts = <6>;
  314. #gpio-cells = <2>;
  315. interrupt-controller;
  316. #interrupt-cells = <2>;
  317. clocks = <&pclk>;
  318. clock-names = "apb_pclk";
  319. };
  320. gpio1: gpio@101e5000 {
  321. compatible = "arm,pl061", "arm,primecell";
  322. reg = <0x101e5000 0x1000>;
  323. interrupts = <7>;
  324. gpio-controller;
  325. #gpio-cells = <2>;
  326. interrupt-controller;
  327. #interrupt-cells = <2>;
  328. clocks = <&pclk>;
  329. clock-names = "apb_pclk";
  330. };
  331. rtc@101e8000 {
  332. compatible = "arm,pl030", "arm,primecell";
  333. reg = <0x101e8000 0x1000>;
  334. interrupts = <10>;
  335. clocks = <&pclk>;
  336. clock-names = "apb_pclk";
  337. };
  338. sci@101f0000 {
  339. compatible = "arm,primecell";
  340. reg = <0x101f0000 0x1000>;
  341. interrupts = <15>;
  342. clocks = <&pclk>;
  343. clock-names = "apb_pclk";
  344. };
  345. spi@101f4000 {
  346. compatible = "arm,pl022", "arm,primecell";
  347. reg = <0x101f4000 0x1000>;
  348. interrupts = <11>;
  349. clocks = <&xtal24mhz>, <&pclk>;
  350. clock-names = "sspclk", "apb_pclk";
  351. };
  352. fpga {
  353. compatible = "arm,versatile-fpga", "simple-bus";
  354. #address-cells = <1>;
  355. #size-cells = <1>;
  356. ranges = <0 0x10000000 0x10000>;
  357. sysreg@0 {
  358. compatible = "arm,versatile-sysreg", "syscon", "simple-mfd";
  359. reg = <0x00000 0x1000>;
  360. panel: display@0 {
  361. compatible = "arm,versatile-tft-panel";
  362. port {
  363. panel_in: endpoint {
  364. remote-endpoint = <&clcd_pads_panel>;
  365. };
  366. };
  367. };
  368. };
  369. aaci@4000 {
  370. compatible = "arm,primecell";
  371. reg = <0x4000 0x1000>;
  372. interrupts = <24>;
  373. clocks = <&pclk>;
  374. clock-names = "apb_pclk";
  375. };
  376. mmc@5000 {
  377. compatible = "arm,pl180", "arm,primecell";
  378. reg = <0x5000 0x1000>;
  379. interrupts-extended = <&vic 22 &sic 1>;
  380. clocks = <&xtal24mhz>, <&pclk>;
  381. clock-names = "mclk", "apb_pclk";
  382. };
  383. kmi@6000 {
  384. compatible = "arm,pl050", "arm,primecell";
  385. reg = <0x6000 0x1000>;
  386. interrupt-parent = <&sic>;
  387. interrupts = <3>;
  388. clocks = <&xtal24mhz>, <&pclk>;
  389. clock-names = "KMIREFCLK", "apb_pclk";
  390. };
  391. kmi@7000 {
  392. compatible = "arm,pl050", "arm,primecell";
  393. reg = <0x7000 0x1000>;
  394. interrupt-parent = <&sic>;
  395. interrupts = <4>;
  396. clocks = <&xtal24mhz>, <&pclk>;
  397. clock-names = "KMIREFCLK", "apb_pclk";
  398. };
  399. };
  400. };
  401. };