arm-realview-pbx.dtsi 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593
  1. /*
  2. * Copyright 2016 Linaro Ltd
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a copy
  5. * of this software and associated documentation files (the "Software"), to deal
  6. * in the Software without restriction, including without limitation the rights
  7. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  8. * copies of the Software, and to permit persons to whom the Software is
  9. * furnished to do so, subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice shall be included in
  12. * all copies or substantial portions of the Software.
  13. *
  14. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  17. * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  20. * THE SOFTWARE.
  21. */
  22. #include <dt-bindings/interrupt-controller/irq.h>
  23. #include <dt-bindings/gpio/gpio.h>
  24. / {
  25. #address-cells = <1>;
  26. #size-cells = <1>;
  27. compatible = "arm,realview-pbx";
  28. chosen { };
  29. aliases {
  30. serial0 = &serial0;
  31. serial1 = &serial1;
  32. serial2 = &serial2;
  33. serial3 = &serial3;
  34. i2c0 = &i2c0;
  35. i2c1 = &i2c1;
  36. };
  37. memory {
  38. device_type = "memory";
  39. /* 128 MiB memory @ 0x0 */
  40. reg = <0x00000000 0x08000000>;
  41. };
  42. /* The voltage to the MMC card is hardwired at 3.3V */
  43. vmmc: regulator-vmmc {
  44. compatible = "regulator-fixed";
  45. regulator-name = "vmmc";
  46. regulator-min-microvolt = <3300000>;
  47. regulator-max-microvolt = <3300000>;
  48. regulator-boot-on;
  49. };
  50. veth: regulator-veth {
  51. compatible = "regulator-fixed";
  52. regulator-name = "veth";
  53. regulator-min-microvolt = <3300000>;
  54. regulator-max-microvolt = <3300000>;
  55. regulator-boot-on;
  56. };
  57. xtal24mhz: xtal24mhz@24M {
  58. #clock-cells = <0>;
  59. compatible = "fixed-clock";
  60. clock-frequency = <24000000>;
  61. };
  62. refclk32khz: refclk32khz {
  63. #clock-cells = <0>;
  64. compatible = "fixed-clock";
  65. clock-frequency = <32768>;
  66. };
  67. timclk: timclk@1M {
  68. #clock-cells = <0>;
  69. compatible = "fixed-factor-clock";
  70. clock-div = <24>;
  71. clock-mult = <1>;
  72. clocks = <&xtal24mhz>;
  73. };
  74. mclk: mclk@24M {
  75. #clock-cells = <0>;
  76. compatible = "fixed-factor-clock";
  77. clock-div = <1>;
  78. clock-mult = <1>;
  79. clocks = <&xtal24mhz>;
  80. };
  81. kmiclk: kmiclk@24M {
  82. #clock-cells = <0>;
  83. compatible = "fixed-factor-clock";
  84. clock-div = <1>;
  85. clock-mult = <1>;
  86. clocks = <&xtal24mhz>;
  87. };
  88. sspclk: sspclk@24M {
  89. #clock-cells = <0>;
  90. compatible = "fixed-factor-clock";
  91. clock-div = <1>;
  92. clock-mult = <1>;
  93. clocks = <&xtal24mhz>;
  94. };
  95. uartclk: uartclk@24M {
  96. #clock-cells = <0>;
  97. compatible = "fixed-factor-clock";
  98. clock-div = <1>;
  99. clock-mult = <1>;
  100. clocks = <&xtal24mhz>;
  101. };
  102. wdogclk: wdogclk@24M {
  103. #clock-cells = <0>;
  104. compatible = "fixed-factor-clock";
  105. clock-div = <1>;
  106. clock-mult = <1>;
  107. clocks = <&xtal24mhz>;
  108. };
  109. /* FIXME: this actually hangs off the PLL clocks */
  110. pclk: pclk@0 {
  111. #clock-cells = <0>;
  112. compatible = "fixed-clock";
  113. clock-frequency = <0>;
  114. };
  115. flash0@40000000 {
  116. /* 2 * 32MiB NOR Flash memory */
  117. compatible = "arm,versatile-flash", "cfi-flash";
  118. reg = <0x40000000 0x04000000>;
  119. bank-width = <4>;
  120. partitions {
  121. compatible = "arm,arm-firmware-suite";
  122. };
  123. };
  124. flash1@44000000 {
  125. /* 2 * 32MiB NOR Flash memory */
  126. compatible = "arm,versatile-flash", "cfi-flash";
  127. reg = <0x44000000 0x04000000>;
  128. bank-width = <4>;
  129. partitions {
  130. compatible = "arm,arm-firmware-suite";
  131. };
  132. };
  133. /* SMSC 9118 ethernet with PHY and EEPROM */
  134. ethernet: ethernet@4e000000 {
  135. compatible = "smsc,lan9118", "smsc,lan9115";
  136. reg = <0x4e000000 0x10000>;
  137. phy-mode = "mii";
  138. reg-io-width = <4>;
  139. smsc,irq-active-high;
  140. smsc,irq-push-pull;
  141. vdd33a-supply = <&veth>;
  142. vddvario-supply = <&veth>;
  143. };
  144. usb: usb@4f000000 {
  145. compatible = "nxp,usb-isp1761";
  146. reg = <0x4f000000 0x20000>;
  147. dr_mode = "peripheral";
  148. };
  149. bridge {
  150. compatible = "ti,ths8134a", "ti,ths8134";
  151. #address-cells = <1>;
  152. #size-cells = <0>;
  153. ports {
  154. #address-cells = <1>;
  155. #size-cells = <0>;
  156. port@0 {
  157. reg = <0>;
  158. vga_bridge_in: endpoint {
  159. remote-endpoint = <&clcd_pads>;
  160. };
  161. };
  162. port@1 {
  163. reg = <1>;
  164. vga_bridge_out: endpoint {
  165. remote-endpoint = <&vga_con_in>;
  166. };
  167. };
  168. };
  169. };
  170. vga {
  171. /*
  172. * This DDC I2C is connected directly to the DVI portions
  173. * of the connector, so it's not really working when the
  174. * monitor is connected to the VGA connector.
  175. */
  176. compatible = "vga-connector";
  177. ddc-i2c-bus = <&i2c1>;
  178. port {
  179. vga_con_in: endpoint {
  180. remote-endpoint = <&vga_bridge_out>;
  181. };
  182. };
  183. };
  184. soc: soc {
  185. compatible = "arm,realview-pbx-soc", "simple-bus";
  186. #address-cells = <1>;
  187. #size-cells = <1>;
  188. regmap = <&syscon>;
  189. ranges;
  190. syscon: syscon@10000000 {
  191. compatible = "arm,realview-pbx-syscon", "syscon", "simple-mfd";
  192. reg = <0x10000000 0x1000>;
  193. ranges = <0x0 0x10000000 0x1000>;
  194. #address-cells = <1>;
  195. #size-cells = <1>;
  196. led@8,0 {
  197. compatible = "register-bit-led";
  198. reg = <0x08 0x04>;
  199. offset = <0x08>;
  200. mask = <0x01>;
  201. label = "versatile:0";
  202. linux,default-trigger = "heartbeat";
  203. default-state = "on";
  204. };
  205. led@8,1 {
  206. compatible = "register-bit-led";
  207. reg = <0x08 0x04>;
  208. offset = <0x08>;
  209. mask = <0x02>;
  210. label = "versatile:1";
  211. linux,default-trigger = "mmc0";
  212. default-state = "off";
  213. };
  214. led@8,2 {
  215. compatible = "register-bit-led";
  216. reg = <0x08 0x04>;
  217. offset = <0x08>;
  218. mask = <0x04>;
  219. label = "versatile:2";
  220. linux,default-trigger = "cpu0";
  221. default-state = "off";
  222. };
  223. led@8,3 {
  224. compatible = "register-bit-led";
  225. reg = <0x08 0x04>;
  226. offset = <0x08>;
  227. mask = <0x08>;
  228. label = "versatile:3";
  229. default-state = "off";
  230. };
  231. led@8,4 {
  232. compatible = "register-bit-led";
  233. reg = <0x08 0x04>;
  234. offset = <0x08>;
  235. mask = <0x10>;
  236. label = "versatile:4";
  237. default-state = "off";
  238. };
  239. led@8,5 {
  240. compatible = "register-bit-led";
  241. reg = <0x08 0x04>;
  242. offset = <0x08>;
  243. mask = <0x20>;
  244. label = "versatile:5";
  245. default-state = "off";
  246. };
  247. led@8,6 {
  248. compatible = "register-bit-led";
  249. reg = <0x08 0x04>;
  250. offset = <0x08>;
  251. mask = <0x40>;
  252. label = "versatile:6";
  253. default-state = "off";
  254. };
  255. led@8,7 {
  256. compatible = "register-bit-led";
  257. reg = <0x08 0x04>;
  258. offset = <0x08>;
  259. mask = <0x80>;
  260. label = "versatile:7";
  261. default-state = "off";
  262. };
  263. oscclk0: clock-controller@c {
  264. compatible = "arm,syscon-icst307";
  265. reg = <0x0c 0x04>;
  266. #clock-cells = <0>;
  267. lock-offset = <0x20>;
  268. vco-offset = <0x0C>;
  269. clocks = <&xtal24mhz>;
  270. };
  271. oscclk1: clock-controller@10 {
  272. compatible = "arm,syscon-icst307";
  273. reg = <0x10 0x04>;
  274. #clock-cells = <0>;
  275. lock-offset = <0x20>;
  276. vco-offset = <0x10>;
  277. clocks = <&xtal24mhz>;
  278. };
  279. oscclk2: clock-controller@14 {
  280. compatible = "arm,syscon-icst307";
  281. reg = <0x14 0x04>;
  282. #clock-cells = <0>;
  283. lock-offset = <0x20>;
  284. vco-offset = <0x14>;
  285. clocks = <&xtal24mhz>;
  286. };
  287. oscclk3: clock-controller@18 {
  288. compatible = "arm,syscon-icst307";
  289. reg = <0x18 0x04>;
  290. #clock-cells = <0>;
  291. lock-offset = <0x20>;
  292. vco-offset = <0x18>;
  293. clocks = <&xtal24mhz>;
  294. };
  295. oscclk4: clock-controller@1c {
  296. compatible = "arm,syscon-icst307";
  297. reg = <0x1c 0x04>;
  298. #clock-cells = <0>;
  299. lock-offset = <0x20>;
  300. vco-offset = <0x1c>;
  301. clocks = <&xtal24mhz>;
  302. };
  303. };
  304. sp810_syscon0: sysctl@10001000 {
  305. compatible = "arm,sp810", "arm,primecell";
  306. reg = <0x10001000 0x1000>;
  307. clocks = <&refclk32khz>, <&timclk>, <&xtal24mhz>;
  308. clock-names = "refclk", "timclk", "apb_pclk";
  309. #clock-cells = <1>;
  310. clock-output-names = "timerclk0",
  311. "timerclk1",
  312. "timerclk2",
  313. "timerclk3";
  314. assigned-clocks = <&sp810_syscon0 0>,
  315. <&sp810_syscon0 1>,
  316. <&sp810_syscon0 2>,
  317. <&sp810_syscon0 3>;
  318. assigned-clock-parents = <&timclk>,
  319. <&timclk>,
  320. <&timclk>,
  321. <&timclk>;
  322. };
  323. i2c0: i2c@10002000 {
  324. #address-cells = <1>;
  325. #size-cells = <0>;
  326. compatible = "arm,versatile-i2c";
  327. reg = <0x10002000 0x1000>;
  328. rtc@68 {
  329. compatible = "dallas,ds1338";
  330. reg = <0x68>;
  331. };
  332. };
  333. serial0: serial@10009000 {
  334. compatible = "arm,pl011", "arm,primecell";
  335. reg = <0x10009000 0x1000>;
  336. clocks = <&uartclk>, <&pclk>;
  337. clock-names = "uartclk", "apb_pclk";
  338. };
  339. serial1: serial@1000a000 {
  340. compatible = "arm,pl011", "arm,primecell";
  341. reg = <0x1000a000 0x1000>;
  342. clocks = <&uartclk>, <&pclk>;
  343. clock-names = "uartclk", "apb_pclk";
  344. };
  345. serial2: serial@1000b000 {
  346. compatible = "arm,pl011", "arm,primecell";
  347. reg = <0x1000b000 0x1000>;
  348. clocks = <&uartclk>, <&pclk>;
  349. clock-names = "uartclk", "apb_pclk";
  350. };
  351. ssp: spi@1000d000 {
  352. compatible = "arm,pl022", "arm,primecell";
  353. reg = <0x1000d000 0x1000>;
  354. clocks = <&sspclk>, <&pclk>;
  355. clock-names = "sspclk", "apb_pclk";
  356. };
  357. wdog0: watchdog@1000f000 {
  358. compatible = "arm,sp805", "arm,primecell";
  359. reg = <0x1000f000 0x1000>;
  360. clocks = <&wdogclk>, <&pclk>;
  361. clock-names = "wdog_clk", "apb_pclk";
  362. status = "disabled";
  363. };
  364. wdog1: watchdog@10010000 {
  365. compatible = "arm,sp805", "arm,primecell";
  366. reg = <0x10010000 0x1000>;
  367. clocks = <&wdogclk>, <&pclk>;
  368. clock-names = "wdog_clk", "apb_pclk";
  369. status = "disabled";
  370. };
  371. timer01: timer@10011000 {
  372. compatible = "arm,sp804", "arm,primecell";
  373. reg = <0x10011000 0x1000>;
  374. clocks = <&sp810_syscon0 0>,
  375. <&sp810_syscon0 1>,
  376. <&pclk>;
  377. clock-names = "timerclk0",
  378. "timerclk1",
  379. "apb_pclk";
  380. };
  381. timer23: timer@10012000 {
  382. compatible = "arm,sp804", "arm,primecell";
  383. reg = <0x10012000 0x1000>;
  384. clocks = <&sp810_syscon0 2>,
  385. <&sp810_syscon0 3>,
  386. <&pclk>;
  387. clock-names = "timerclk2",
  388. "timerclk3",
  389. "apb_pclk";
  390. };
  391. gpio0: gpio@10013000 {
  392. compatible = "arm,pl061", "arm,primecell";
  393. reg = <0x10013000 0x1000>;
  394. gpio-controller;
  395. #gpio-cells = <2>;
  396. interrupt-controller;
  397. #interrupt-cells = <2>;
  398. clocks = <&pclk>;
  399. clock-names = "apb_pclk";
  400. };
  401. gpio1: gpio@10014000 {
  402. compatible = "arm,pl061", "arm,primecell";
  403. reg = <0x10014000 0x1000>;
  404. gpio-controller;
  405. #gpio-cells = <2>;
  406. interrupt-controller;
  407. #interrupt-cells = <2>;
  408. clocks = <&pclk>;
  409. clock-names = "apb_pclk";
  410. };
  411. gpio2: gpio@10015000 {
  412. compatible = "arm,pl061", "arm,primecell";
  413. reg = <0x10015000 0x1000>;
  414. gpio-controller;
  415. #gpio-cells = <2>;
  416. interrupt-controller;
  417. #interrupt-cells = <2>;
  418. clocks = <&pclk>;
  419. clock-names = "apb_pclk";
  420. };
  421. i2c1: i2c@10016000 {
  422. #address-cells = <1>;
  423. #size-cells = <0>;
  424. compatible = "arm,versatile-i2c";
  425. reg = <0x10016000 0x1000>;
  426. };
  427. rtc: rtc@10017000 {
  428. compatible = "arm,pl031", "arm,primecell";
  429. reg = <0x10017000 0x1000>;
  430. clocks = <&pclk>;
  431. clock-names = "apb_pclk";
  432. };
  433. timer45: timer@10018000 {
  434. compatible = "arm,sp804", "arm,primecell";
  435. reg = <0x10018000 0x1000>;
  436. clocks = <&timclk>, <&timclk>, <&pclk>;
  437. clock-names = "timerclk4", "timerclk5", "apb_pclk";
  438. };
  439. timer67: timer@10019000 {
  440. compatible = "arm,sp804", "arm,primecell";
  441. reg = <0x10019000 0x1000>;
  442. clocks = <&timclk>, <&timclk>, <&pclk>;
  443. clock-names = "timerclk6", "timerclk7", "apb_pclk";
  444. };
  445. sp810_syscon1: sysctl@1001a000 {
  446. compatible = "arm,sp810", "arm,primecell";
  447. reg = <0x1001a000 0x1000>;
  448. clocks = <&refclk32khz>, <&timclk>, <&xtal24mhz>;
  449. clock-names = "refclk", "timclk", "apb_pclk";
  450. #clock-cells = <1>;
  451. clock-output-names = "timerclk4",
  452. "timerclk5",
  453. "timerclk6",
  454. "timerclk7";
  455. assigned-clocks = <&sp810_syscon1 0>,
  456. <&sp810_syscon1 1>,
  457. <&sp810_syscon1 2>,
  458. <&sp810_syscon1 3>;
  459. assigned-clock-parents = <&timclk>,
  460. <&timclk>,
  461. <&timclk>,
  462. <&timclk>;
  463. };
  464. };
  465. /* These peripherals are inside the FPGA */
  466. fpga {
  467. #address-cells = <1>;
  468. #size-cells = <1>;
  469. compatible = "simple-bus";
  470. ranges;
  471. aaci: aaci@10004000 {
  472. compatible = "arm,pl041", "arm,primecell";
  473. reg = <0x10004000 0x1000>;
  474. clocks = <&pclk>;
  475. clock-names = "apb_pclk";
  476. };
  477. mmc: mmcsd@10005000 {
  478. compatible = "arm,pl18x", "arm,primecell";
  479. reg = <0x10005000 0x1000>;
  480. /* Due to frequent FIFO overruns, use just 500 kHz */
  481. max-frequency = <500000>;
  482. bus-width = <4>;
  483. cap-sd-highspeed;
  484. cap-mmc-highspeed;
  485. clocks = <&mclk>, <&pclk>;
  486. clock-names = "mclk", "apb_pclk";
  487. vmmc-supply = <&vmmc>;
  488. cd-gpios = <&gpio2 0 GPIO_ACTIVE_LOW>;
  489. wp-gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>;
  490. };
  491. kmi0: kmi@10006000 {
  492. compatible = "arm,pl050", "arm,primecell";
  493. reg = <0x10006000 0x1000>;
  494. clocks = <&kmiclk>, <&pclk>;
  495. clock-names = "KMIREFCLK", "apb_pclk";
  496. };
  497. kmi1: kmi@10007000 {
  498. compatible = "arm,pl050", "arm,primecell";
  499. reg = <0x10007000 0x1000>;
  500. clocks = <&kmiclk>, <&pclk>;
  501. clock-names = "KMIREFCLK", "apb_pclk";
  502. };
  503. serial3: serial@1000c000 {
  504. compatible = "arm,pl011", "arm,primecell";
  505. reg = <0x1000c000 0x1000>;
  506. clocks = <&uartclk>, <&pclk>;
  507. clock-names = "uartclk", "apb_pclk";
  508. };
  509. };
  510. /* These peripherals are inside the NEC ISSP */
  511. issp {
  512. #address-cells = <1>;
  513. #size-cells = <1>;
  514. compatible = "simple-bus";
  515. ranges;
  516. clcd: clcd@10020000 {
  517. compatible = "arm,pl111", "arm,primecell";
  518. reg = <0x10020000 0x1000>;
  519. interrupt-names = "combined";
  520. clocks = <&oscclk4>, <&pclk>;
  521. clock-names = "clcdclk", "apb_pclk";
  522. /* 1024x768 16bpp @65MHz works fine */
  523. max-memory-bandwidth = <95000000>;
  524. port {
  525. clcd_pads: endpoint {
  526. remote-endpoint = <&vga_bridge_in>;
  527. arm,pl11x,tft-r0g0b0-pads = <0 8 16>;
  528. };
  529. };
  530. };
  531. };
  532. };