arm-realview-pb1176.dts 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608
  1. /*
  2. * Copyright 2014 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. /dts-v1/;
  23. #include <dt-bindings/interrupt-controller/irq.h>
  24. #include <dt-bindings/gpio/gpio.h>
  25. / {
  26. #address-cells = <1>;
  27. #size-cells = <1>;
  28. model = "ARM RealView PB1176";
  29. compatible = "arm,realview-pb1176";
  30. chosen { };
  31. aliases {
  32. serial0 = &pb1176_serial0;
  33. serial1 = &pb1176_serial1;
  34. serial2 = &pb1176_serial2;
  35. serial3 = &pb1176_serial3;
  36. serial4 = &fpga_serial;
  37. };
  38. memory {
  39. device_type = "memory";
  40. /* 128 MiB memory @ 0x0 */
  41. reg = <0x00000000 0x08000000>;
  42. };
  43. /* The voltage to the MMC card is hardwired at 3.3V */
  44. vmmc: regulator-vmmc {
  45. compatible = "regulator-fixed";
  46. regulator-name = "vmmc";
  47. regulator-min-microvolt = <3300000>;
  48. regulator-max-microvolt = <3300000>;
  49. regulator-boot-on;
  50. };
  51. veth: regulator-veth {
  52. compatible = "regulator-fixed";
  53. regulator-name = "veth";
  54. regulator-min-microvolt = <3300000>;
  55. regulator-max-microvolt = <3300000>;
  56. regulator-boot-on;
  57. };
  58. xtal24mhz: xtal24mhz@24M {
  59. #clock-cells = <0>;
  60. compatible = "fixed-clock";
  61. clock-frequency = <24000000>;
  62. };
  63. timclk: timclk@1M {
  64. #clock-cells = <0>;
  65. compatible = "fixed-factor-clock";
  66. clock-div = <24>;
  67. clock-mult = <1>;
  68. clocks = <&xtal24mhz>;
  69. };
  70. mclk: mclk@24M {
  71. #clock-cells = <0>;
  72. compatible = "fixed-factor-clock";
  73. clock-div = <1>;
  74. clock-mult = <1>;
  75. clocks = <&xtal24mhz>;
  76. };
  77. kmiclk: kmiclk@24M {
  78. #clock-cells = <0>;
  79. compatible = "fixed-factor-clock";
  80. clock-div = <1>;
  81. clock-mult = <1>;
  82. clocks = <&xtal24mhz>;
  83. };
  84. sspclk: sspclk@24M {
  85. #clock-cells = <0>;
  86. compatible = "fixed-factor-clock";
  87. clock-div = <1>;
  88. clock-mult = <1>;
  89. clocks = <&xtal24mhz>;
  90. };
  91. uartclk: uartclk@24M {
  92. #clock-cells = <0>;
  93. compatible = "fixed-factor-clock";
  94. clock-div = <1>;
  95. clock-mult = <1>;
  96. clocks = <&xtal24mhz>;
  97. };
  98. /* FIXME: this actually hangs off the PLL clocks */
  99. pclk: pclk@0 {
  100. #clock-cells = <0>;
  101. compatible = "fixed-clock";
  102. clock-frequency = <0>;
  103. };
  104. flash@30000000 {
  105. compatible = "arm,versatile-flash", "cfi-flash";
  106. reg = <0x30000000 0x4000000>;
  107. bank-width = <4>;
  108. partitions {
  109. compatible = "arm,arm-firmware-suite";
  110. };
  111. };
  112. fpga_flash@38000000 {
  113. compatible = "arm,versatile-flash", "cfi-flash";
  114. reg = <0x38000000 0x800000>;
  115. bank-width = <4>;
  116. partitions {
  117. compatible = "arm,arm-firmware-suite";
  118. };
  119. };
  120. /*
  121. * The "secure flash" contains things like the boot
  122. * monitor so we don't want people to accidentally
  123. * screw this up. Mark the device tree node disabled
  124. * by default.
  125. */
  126. secflash@3c000000 {
  127. compatible = "arm,versatile-flash", "cfi-flash";
  128. reg = <0x3c000000 0x4000000>;
  129. bank-width = <4>;
  130. status = "disabled";
  131. };
  132. /* SMSC 9118 ethernet with PHY and EEPROM */
  133. ethernet@3a000000 {
  134. compatible = "smsc,lan9118", "smsc,lan9115";
  135. reg = <0x3a000000 0x10000>;
  136. interrupt-parent = <&intc_fpga1176>;
  137. interrupts = <0 10 IRQ_TYPE_LEVEL_HIGH>;
  138. phy-mode = "mii";
  139. reg-io-width = <4>;
  140. smsc,irq-active-high;
  141. smsc,irq-push-pull;
  142. vdd33a-supply = <&veth>;
  143. vddvario-supply = <&veth>;
  144. };
  145. usb@3b000000 {
  146. compatible = "nxp,usb-isp1761";
  147. reg = <0x3b000000 0x20000>;
  148. interrupt-parent = <&intc_fpga1176>;
  149. interrupts = <0 11 IRQ_TYPE_LEVEL_HIGH>;
  150. dr_mode = "peripheral";
  151. };
  152. bridge {
  153. compatible = "ti,ths8134a", "ti,ths8134";
  154. #address-cells = <1>;
  155. #size-cells = <0>;
  156. ports {
  157. #address-cells = <1>;
  158. #size-cells = <0>;
  159. port@0 {
  160. reg = <0>;
  161. vga_bridge_in: endpoint {
  162. remote-endpoint = <&clcd_pads>;
  163. };
  164. };
  165. port@1 {
  166. reg = <1>;
  167. vga_bridge_out: endpoint {
  168. remote-endpoint = <&vga_con_in>;
  169. };
  170. };
  171. };
  172. };
  173. vga {
  174. compatible = "vga-connector";
  175. port {
  176. vga_con_in: endpoint {
  177. remote-endpoint = <&vga_bridge_out>;
  178. };
  179. };
  180. };
  181. soc {
  182. #address-cells = <1>;
  183. #size-cells = <1>;
  184. compatible = "arm,realview-pb1176-soc", "simple-bus";
  185. regmap = <&syscon>;
  186. ranges;
  187. syscon: syscon@10000000 {
  188. compatible = "arm,realview-pb1176-syscon", "syscon", "simple-mfd";
  189. reg = <0x10000000 0x1000>;
  190. ranges = <0x0 0x10000000 0x1000>;
  191. #address-cells = <1>;
  192. #size-cells = <1>;
  193. led@8,0 {
  194. compatible = "register-bit-led";
  195. reg = <0x08 0x04>;
  196. offset = <0x08>;
  197. mask = <0x01>;
  198. label = "versatile:0";
  199. linux,default-trigger = "heartbeat";
  200. default-state = "on";
  201. };
  202. led@8,1 {
  203. compatible = "register-bit-led";
  204. reg = <0x08 0x04>;
  205. offset = <0x08>;
  206. mask = <0x02>;
  207. label = "versatile:1";
  208. linux,default-trigger = "mmc0";
  209. default-state = "off";
  210. };
  211. led@8,2 {
  212. compatible = "register-bit-led";
  213. reg = <0x08 0x04>;
  214. offset = <0x08>;
  215. mask = <0x04>;
  216. label = "versatile:2";
  217. linux,default-trigger = "cpu0";
  218. default-state = "off";
  219. };
  220. led@8,3 {
  221. compatible = "register-bit-led";
  222. reg = <0x08 0x04>;
  223. offset = <0x08>;
  224. mask = <0x08>;
  225. label = "versatile:3";
  226. default-state = "off";
  227. };
  228. led@8,4 {
  229. compatible = "register-bit-led";
  230. reg = <0x08 0x04>;
  231. offset = <0x08>;
  232. mask = <0x10>;
  233. label = "versatile:4";
  234. default-state = "off";
  235. };
  236. led@8,5 {
  237. compatible = "register-bit-led";
  238. reg = <0x08 0x04>;
  239. offset = <0x08>;
  240. mask = <0x20>;
  241. label = "versatile:5";
  242. default-state = "off";
  243. };
  244. led@8,6 {
  245. compatible = "register-bit-led";
  246. reg = <0x08 0x04>;
  247. offset = <0x08>;
  248. mask = <0x40>;
  249. label = "versatile:6";
  250. default-state = "off";
  251. };
  252. led@8,7 {
  253. compatible = "register-bit-led";
  254. reg = <0x08 0x04>;
  255. offset = <0x08>;
  256. mask = <0x80>;
  257. label = "versatile:7";
  258. default-state = "off";
  259. };
  260. oscclk0: clock-controller@c {
  261. compatible = "arm,syscon-icst307";
  262. reg = <0x0c 0x04>;
  263. #clock-cells = <0>;
  264. lock-offset = <0x20>;
  265. vco-offset = <0x0C>;
  266. clocks = <&xtal24mhz>;
  267. };
  268. oscclk1: clock-controller@10 {
  269. compatible = "arm,syscon-icst307";
  270. reg = <0x10 0x04>;
  271. #clock-cells = <0>;
  272. lock-offset = <0x20>;
  273. vco-offset = <0x10>;
  274. clocks = <&xtal24mhz>;
  275. };
  276. oscclk2: clock-controller@14 {
  277. compatible = "arm,syscon-icst307";
  278. reg = <0x14 0x04>;
  279. #clock-cells = <0>;
  280. lock-offset = <0x20>;
  281. vco-offset = <0x14>;
  282. clocks = <&xtal24mhz>;
  283. };
  284. oscclk3: clock-controller@18 {
  285. compatible = "arm,syscon-icst307";
  286. reg = <0x18 0x04>;
  287. #clock-cells = <0>;
  288. lock-offset = <0x20>;
  289. vco-offset = <0x18>;
  290. clocks = <&xtal24mhz>;
  291. };
  292. oscclk4: clock-controller@1c {
  293. compatible = "arm,syscon-icst307";
  294. reg = <0x1c 0x04>;
  295. #clock-cells = <0>;
  296. lock-offset = <0x20>;
  297. vco-offset = <0x1c>;
  298. clocks = <&xtal24mhz>;
  299. };
  300. };
  301. /* Primary DevChip GIC synthesized with the CPU */
  302. intc_dc1176: interrupt-controller@10120000 {
  303. compatible = "arm,arm1176jzf-devchip-gic", "arm,arm11mp-gic";
  304. #interrupt-cells = <3>;
  305. #address-cells = <1>;
  306. interrupt-controller;
  307. reg = <0x10121000 0x1000>,
  308. <0x10120000 0x100>;
  309. };
  310. L2: cache-controller {
  311. compatible = "arm,l220-cache";
  312. reg = <0x10110000 0x1000>;
  313. interrupt-parent = <&intc_dc1176>;
  314. interrupts = <0 13 IRQ_TYPE_LEVEL_HIGH>;
  315. cache-unified;
  316. cache-level = <2>;
  317. /*
  318. * Override default cache size, sets and
  319. * associativity as these may be erroneously set
  320. * up by boot loader(s).
  321. */
  322. arm,override-auxreg;
  323. cache-size = <131072>; // 128kB
  324. cache-sets = <512>;
  325. cache-line-size = <32>;
  326. };
  327. pmu {
  328. compatible = "arm,arm1176-pmu";
  329. interrupt-parent = <&intc_dc1176>;
  330. interrupts = <0 7 IRQ_TYPE_LEVEL_HIGH>;
  331. };
  332. timer01: timer@10104000 {
  333. compatible = "arm,sp804", "arm,primecell";
  334. reg = <0x10104000 0x1000>;
  335. interrupt-parent = <&intc_dc1176>;
  336. interrupts = <0 8 IRQ_TYPE_LEVEL_HIGH>, <0 9 IRQ_TYPE_LEVEL_HIGH>;
  337. clocks = <&timclk>, <&timclk>, <&pclk>;
  338. clock-names = "timer1", "timer2", "apb_pclk";
  339. };
  340. timer23: timer@10105000 {
  341. compatible = "arm,sp804", "arm,primecell";
  342. reg = <0x10105000 0x1000>;
  343. interrupt-parent = <&intc_dc1176>;
  344. interrupts = <0 10 IRQ_TYPE_LEVEL_HIGH>;
  345. arm,sp804-has-irq = <1>;
  346. clocks = <&timclk>, <&timclk>, <&pclk>;
  347. clock-names = "timer1", "timer2", "apb_pclk";
  348. };
  349. pb1176_rtc: rtc@10108000 {
  350. compatible = "arm,pl031", "arm,primecell";
  351. reg = <0x10108000 0x1000>;
  352. interrupt-parent = <&intc_dc1176>;
  353. interrupts = <0 14 IRQ_TYPE_LEVEL_HIGH>;
  354. clocks = <&pclk>;
  355. clock-names = "apb_pclk";
  356. };
  357. pb1176_gpio0: gpio@1010a000 {
  358. compatible = "arm,pl061", "arm,primecell";
  359. reg = <0x1010a000 0x1000>;
  360. gpio-controller;
  361. interrupt-parent = <&intc_dc1176>;
  362. interrupts = <0 16 IRQ_TYPE_LEVEL_HIGH>;
  363. #gpio-cells = <2>;
  364. interrupt-controller;
  365. #interrupt-cells = <2>;
  366. clocks = <&pclk>;
  367. clock-names = "apb_pclk";
  368. };
  369. pb1176_ssp: spi@1010b000 {
  370. compatible = "arm,pl022", "arm,primecell";
  371. reg = <0x1010b000 0x1000>;
  372. interrupt-parent = <&intc_dc1176>;
  373. interrupts = <0 17 IRQ_TYPE_LEVEL_HIGH>;
  374. clocks = <&sspclk>, <&pclk>;
  375. clock-names = "sspclk", "apb_pclk";
  376. };
  377. pb1176_serial0: serial@1010c000 {
  378. compatible = "arm,pl011", "arm,primecell";
  379. reg = <0x1010c000 0x1000>;
  380. interrupt-parent = <&intc_dc1176>;
  381. interrupts = <0 18 IRQ_TYPE_LEVEL_HIGH>;
  382. clocks = <&uartclk>, <&pclk>;
  383. clock-names = "uartclk", "apb_pclk";
  384. };
  385. pb1176_serial1: serial@1010d000 {
  386. compatible = "arm,pl011", "arm,primecell";
  387. reg = <0x1010d000 0x1000>;
  388. interrupt-parent = <&intc_dc1176>;
  389. interrupts = <0 19 IRQ_TYPE_LEVEL_HIGH>;
  390. clocks = <&uartclk>, <&pclk>;
  391. clock-names = "uartclk", "apb_pclk";
  392. };
  393. pb1176_serial2: serial@1010e000 {
  394. compatible = "arm,pl011", "arm,primecell";
  395. reg = <0x1010e000 0x1000>;
  396. interrupt-parent = <&intc_dc1176>;
  397. interrupts = <0 20 IRQ_TYPE_LEVEL_HIGH>;
  398. clocks = <&uartclk>, <&pclk>;
  399. clock-names = "uartclk", "apb_pclk";
  400. };
  401. pb1176_serial3: serial@1010f000 {
  402. compatible = "arm,pl011", "arm,primecell";
  403. reg = <0x1010f000 0x1000>;
  404. interrupt-parent = <&intc_dc1176>;
  405. interrupts = <0 21 IRQ_TYPE_LEVEL_HIGH>;
  406. clocks = <&uartclk>, <&pclk>;
  407. clock-names = "uartclk", "apb_pclk";
  408. };
  409. /* Direct-mapped development chip ROM */
  410. pb1176_rom@10200000 {
  411. compatible = "direct-mapped";
  412. reg = <0x10200000 0x4000>;
  413. bank-width = <1>;
  414. };
  415. clcd@10112000 {
  416. compatible = "arm,pl111", "arm,primecell";
  417. reg = <0x10112000 0x1000>;
  418. interrupt-parent = <&intc_dc1176>;
  419. interrupt-names = "combined";
  420. interrupts = <0 47 IRQ_TYPE_LEVEL_HIGH>;
  421. clocks = <&oscclk0>, <&pclk>;
  422. clock-names = "clcdclk", "apb_pclk";
  423. /* 1024x768 16bpp @65MHz works fine */
  424. max-memory-bandwidth = <95000000>;
  425. port {
  426. clcd_pads: endpoint {
  427. remote-endpoint = <&vga_bridge_in>;
  428. arm,pl11x,tft-r0g0b0-pads = <0 8 16>;
  429. };
  430. };
  431. };
  432. };
  433. /* These peripherals are inside the FPGA rather than the DevChip */
  434. fpga {
  435. #address-cells = <1>;
  436. #size-cells = <1>;
  437. compatible = "simple-bus";
  438. ranges;
  439. i2c0: i2c@10002000 {
  440. #address-cells = <1>;
  441. #size-cells = <0>;
  442. compatible = "arm,versatile-i2c";
  443. reg = <0x10002000 0x1000>;
  444. rtc@68 {
  445. compatible = "dallas,ds1338";
  446. reg = <0x68>;
  447. };
  448. };
  449. fpga_aaci: aaci@10004000 {
  450. compatible = "arm,pl041", "arm,primecell";
  451. reg = <0x10004000 0x1000>;
  452. interrupt-parent = <&intc_fpga1176>;
  453. interrupts = <0 19 IRQ_TYPE_LEVEL_HIGH>;
  454. clocks = <&pclk>;
  455. clock-names = "apb_pclk";
  456. };
  457. fpga_mci: mmcsd@10005000 {
  458. compatible = "arm,pl18x", "arm,primecell";
  459. reg = <0x10005000 0x1000>;
  460. interrupt-parent = <&intc_fpga1176>;
  461. interrupts = <0 1 IRQ_TYPE_LEVEL_HIGH>,
  462. <0 2 IRQ_TYPE_LEVEL_HIGH>;
  463. /* Due to frequent FIFO overruns, use just 500 kHz */
  464. max-frequency = <500000>;
  465. bus-width = <4>;
  466. cap-sd-highspeed;
  467. cap-mmc-highspeed;
  468. clocks = <&mclk>, <&pclk>;
  469. clock-names = "mclk", "apb_pclk";
  470. vmmc-supply = <&vmmc>;
  471. cd-gpios = <&fpga_gpio1 0 GPIO_ACTIVE_LOW>;
  472. wp-gpios = <&fpga_gpio1 1 GPIO_ACTIVE_HIGH>;
  473. };
  474. fpga_kmi0: kmi@10006000 {
  475. compatible = "arm,pl050", "arm,primecell";
  476. reg = <0x10006000 0x1000>;
  477. interrupt-parent = <&intc_fpga1176>;
  478. interrupts = <0 3 IRQ_TYPE_LEVEL_HIGH>;
  479. clocks = <&kmiclk>, <&pclk>;
  480. clock-names = "KMIREFCLK", "apb_pclk";
  481. };
  482. fpga_kmi1: kmi@10007000 {
  483. compatible = "arm,pl050", "arm,primecell";
  484. reg = <0x10007000 0x1000>;
  485. interrupt-parent = <&intc_fpga1176>;
  486. interrupts = <0 4 IRQ_TYPE_LEVEL_HIGH>;
  487. clocks = <&kmiclk>, <&pclk>;
  488. clock-names = "KMIREFCLK", "apb_pclk";
  489. };
  490. fpga_charlcd: charlcd@10008000 {
  491. compatible = "arm,versatile-lcd";
  492. reg = <0x10008000 0x1000>;
  493. interrupt-parent = <&intc_fpga1176>;
  494. interrupts = <0 7 IRQ_TYPE_LEVEL_HIGH>;
  495. clocks = <&pclk>;
  496. clock-names = "apb_pclk";
  497. };
  498. fpga_serial: serial@10009000 {
  499. compatible = "arm,pl011", "arm,primecell";
  500. reg = <0x10009000 0x1000>;
  501. interrupt-parent = <&intc_fpga1176>;
  502. interrupts = <0 6 IRQ_TYPE_LEVEL_HIGH>;
  503. clocks = <&uartclk>, <&pclk>;
  504. clock-names = "uartclk", "apb_pclk";
  505. };
  506. /* This GIC on the board is cascaded off the DevChip GIC */
  507. intc_fpga1176: interrupt-controller@10040000 {
  508. compatible = "arm,arm1176jzf-devchip-gic", "arm,arm11mp-gic";
  509. #interrupt-cells = <3>;
  510. #address-cells = <1>;
  511. interrupt-controller;
  512. reg = <0x10041000 0x1000>,
  513. <0x10040000 0x100>;
  514. interrupt-parent = <&intc_dc1176>;
  515. interrupts = <0 31 IRQ_TYPE_LEVEL_HIGH>;
  516. };
  517. fpga_gpio0: gpio@10014000 {
  518. compatible = "arm,pl061", "arm,primecell";
  519. reg = <0x10014000 0x1000>;
  520. gpio-controller;
  521. interrupt-parent = <&intc_fpga1176>;
  522. interrupts = <0 8 IRQ_TYPE_LEVEL_HIGH>;
  523. #gpio-cells = <2>;
  524. interrupt-controller;
  525. #interrupt-cells = <2>;
  526. clocks = <&pclk>;
  527. clock-names = "apb_pclk";
  528. };
  529. fpga_gpio1: gpio@10015000 {
  530. compatible = "arm,pl061", "arm,primecell";
  531. reg = <0x10015000 0x1000>;
  532. gpio-controller;
  533. interrupt-parent = <&intc_fpga1176>;
  534. interrupts = <0 9 IRQ_TYPE_LEVEL_HIGH>;
  535. #gpio-cells = <2>;
  536. interrupt-controller;
  537. #interrupt-cells = <2>;
  538. clocks = <&pclk>;
  539. clock-names = "apb_pclk";
  540. };
  541. fpga_rtc: rtc@10017000 {
  542. compatible = "arm,pl031", "arm,primecell";
  543. reg = <0x10017000 0x1000>;
  544. interrupt-parent = <&intc_fpga1176>;
  545. interrupts = <0 25 IRQ_TYPE_LEVEL_HIGH>;
  546. clocks = <&pclk>;
  547. clock-names = "apb_pclk";
  548. };
  549. };
  550. };