bcm283x.dtsi 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501
  1. #include <dt-bindings/pinctrl/bcm2835.h>
  2. #include <dt-bindings/clock/bcm2835.h>
  3. #include <dt-bindings/clock/bcm2835-aux.h>
  4. #include <dt-bindings/gpio/gpio.h>
  5. #include <dt-bindings/interrupt-controller/irq.h>
  6. #include <dt-bindings/soc/bcm2835-pm.h>
  7. /* firmware-provided startup stubs live here, where the secondary CPUs are
  8. * spinning.
  9. */
  10. /memreserve/ 0x00000000 0x00001000;
  11. /* This include file covers the common peripherals and configuration between
  12. * bcm2835 and bcm2836 implementations, leaving the CPU configuration to
  13. * bcm2835.dtsi and bcm2836.dtsi.
  14. */
  15. / {
  16. compatible = "brcm,bcm2835";
  17. model = "BCM2835";
  18. #address-cells = <1>;
  19. #size-cells = <1>;
  20. aliases {
  21. serial0 = &uart0;
  22. serial1 = &uart1;
  23. };
  24. chosen {
  25. stdout-path = "serial0:115200n8";
  26. };
  27. rmem: reserved-memory {
  28. #address-cells = <1>;
  29. #size-cells = <1>;
  30. ranges;
  31. cma: linux,cma {
  32. compatible = "shared-dma-pool";
  33. size = <0x4000000>; /* 64MB */
  34. reusable;
  35. linux,cma-default;
  36. };
  37. };
  38. thermal-zones {
  39. cpu_thermal: cpu-thermal {
  40. polling-delay-passive = <0>;
  41. polling-delay = <1000>;
  42. trips {
  43. cpu-crit {
  44. temperature = <90000>;
  45. hysteresis = <0>;
  46. type = "critical";
  47. };
  48. };
  49. cooling-maps {
  50. };
  51. };
  52. };
  53. soc {
  54. compatible = "simple-bus";
  55. #address-cells = <1>;
  56. #size-cells = <1>;
  57. system_timer: timer@7e003000 {
  58. compatible = "brcm,bcm2835-system-timer";
  59. reg = <0x7e003000 0x1000>;
  60. interrupts = <1 0>, <1 1>, <1 2>, <1 3>;
  61. /* This could be a reference to BCM2835_CLOCK_TIMER,
  62. * but we don't have the driver using the common clock
  63. * support yet.
  64. */
  65. clock-frequency = <1000000>;
  66. };
  67. txp: txp@7e004000 {
  68. compatible = "brcm,bcm2835-txp";
  69. reg = <0x7e004000 0x20>;
  70. interrupts = <1 11>;
  71. };
  72. clocks: cprman@7e101000 {
  73. compatible = "brcm,bcm2835-cprman";
  74. #clock-cells = <1>;
  75. reg = <0x7e101000 0x2000>;
  76. /* CPRMAN derives almost everything from the
  77. * platform's oscillator. However, the DSI
  78. * pixel clocks come from the DSI analog PHY.
  79. */
  80. clocks = <&clk_osc>,
  81. <&dsi0 0>, <&dsi0 1>, <&dsi0 2>,
  82. <&dsi1 0>, <&dsi1 1>, <&dsi1 2>;
  83. };
  84. mailbox: mailbox@7e00b880 {
  85. compatible = "brcm,bcm2835-mbox";
  86. reg = <0x7e00b880 0x40>;
  87. interrupts = <0 1>;
  88. #mbox-cells = <0>;
  89. };
  90. gpio: gpio@7e200000 {
  91. compatible = "brcm,bcm2835-gpio";
  92. reg = <0x7e200000 0xb4>;
  93. /*
  94. * The GPIO IP block is designed for 3 banks of GPIOs.
  95. * Each bank has a GPIO interrupt for itself.
  96. * There is an overall "any bank" interrupt.
  97. * In order, these are GIC interrupts 17, 18, 19, 20.
  98. * Since the BCM2835 only has 2 banks, the 2nd bank
  99. * interrupt output appears to be mirrored onto the
  100. * 3rd bank's interrupt signal.
  101. * So, a bank0 interrupt shows up on 17, 20, and
  102. * a bank1 interrupt shows up on 18, 19, 20!
  103. */
  104. interrupts = <2 17>, <2 18>, <2 19>, <2 20>;
  105. gpio-controller;
  106. #gpio-cells = <2>;
  107. interrupt-controller;
  108. #interrupt-cells = <2>;
  109. gpio-ranges = <&gpio 0 0 54>;
  110. /* Defines common pin muxing groups
  111. *
  112. * While each pin can have its mux selected
  113. * for various functions individually, some
  114. * groups only make sense to switch to a
  115. * particular function together.
  116. */
  117. dpi_gpio0: dpi_gpio0 {
  118. brcm,pins = <0 1 2 3 4 5 6 7 8 9 10 11
  119. 12 13 14 15 16 17 18 19
  120. 20 21 22 23 24 25 26 27>;
  121. brcm,function = <BCM2835_FSEL_ALT2>;
  122. };
  123. emmc_gpio22: emmc_gpio22 {
  124. brcm,pins = <22 23 24 25 26 27>;
  125. brcm,function = <BCM2835_FSEL_ALT3>;
  126. };
  127. emmc_gpio34: emmc_gpio34 {
  128. brcm,pins = <34 35 36 37 38 39>;
  129. brcm,function = <BCM2835_FSEL_ALT3>;
  130. brcm,pull = <BCM2835_PUD_OFF
  131. BCM2835_PUD_UP
  132. BCM2835_PUD_UP
  133. BCM2835_PUD_UP
  134. BCM2835_PUD_UP
  135. BCM2835_PUD_UP>;
  136. };
  137. emmc_gpio48: emmc_gpio48 {
  138. brcm,pins = <48 49 50 51 52 53>;
  139. brcm,function = <BCM2835_FSEL_ALT3>;
  140. };
  141. gpclk0_gpio4: gpclk0_gpio4 {
  142. brcm,pins = <4>;
  143. brcm,function = <BCM2835_FSEL_ALT0>;
  144. };
  145. gpclk1_gpio5: gpclk1_gpio5 {
  146. brcm,pins = <5>;
  147. brcm,function = <BCM2835_FSEL_ALT0>;
  148. };
  149. gpclk1_gpio42: gpclk1_gpio42 {
  150. brcm,pins = <42>;
  151. brcm,function = <BCM2835_FSEL_ALT0>;
  152. };
  153. gpclk1_gpio44: gpclk1_gpio44 {
  154. brcm,pins = <44>;
  155. brcm,function = <BCM2835_FSEL_ALT0>;
  156. };
  157. gpclk2_gpio6: gpclk2_gpio6 {
  158. brcm,pins = <6>;
  159. brcm,function = <BCM2835_FSEL_ALT0>;
  160. };
  161. gpclk2_gpio43: gpclk2_gpio43 {
  162. brcm,pins = <43>;
  163. brcm,function = <BCM2835_FSEL_ALT0>;
  164. brcm,pull = <BCM2835_PUD_OFF>;
  165. };
  166. i2c0_gpio0: i2c0_gpio0 {
  167. brcm,pins = <0 1>;
  168. brcm,function = <BCM2835_FSEL_ALT0>;
  169. };
  170. i2c0_gpio28: i2c0_gpio28 {
  171. brcm,pins = <28 29>;
  172. brcm,function = <BCM2835_FSEL_ALT0>;
  173. };
  174. i2c0_gpio44: i2c0_gpio44 {
  175. brcm,pins = <44 45>;
  176. brcm,function = <BCM2835_FSEL_ALT1>;
  177. };
  178. i2c1_gpio2: i2c1_gpio2 {
  179. brcm,pins = <2 3>;
  180. brcm,function = <BCM2835_FSEL_ALT0>;
  181. };
  182. i2c1_gpio44: i2c1_gpio44 {
  183. brcm,pins = <44 45>;
  184. brcm,function = <BCM2835_FSEL_ALT2>;
  185. };
  186. jtag_gpio22: jtag_gpio22 {
  187. brcm,pins = <22 23 24 25 26 27>;
  188. brcm,function = <BCM2835_FSEL_ALT4>;
  189. };
  190. pcm_gpio18: pcm_gpio18 {
  191. brcm,pins = <18 19 20 21>;
  192. brcm,function = <BCM2835_FSEL_ALT0>;
  193. };
  194. pcm_gpio28: pcm_gpio28 {
  195. brcm,pins = <28 29 30 31>;
  196. brcm,function = <BCM2835_FSEL_ALT2>;
  197. };
  198. sdhost_gpio48: sdhost_gpio48 {
  199. brcm,pins = <48 49 50 51 52 53>;
  200. brcm,function = <BCM2835_FSEL_ALT0>;
  201. };
  202. spi0_gpio7: spi0_gpio7 {
  203. brcm,pins = <7 8 9 10 11>;
  204. brcm,function = <BCM2835_FSEL_ALT0>;
  205. };
  206. spi0_gpio35: spi0_gpio35 {
  207. brcm,pins = <35 36 37 38 39>;
  208. brcm,function = <BCM2835_FSEL_ALT0>;
  209. };
  210. spi1_gpio16: spi1_gpio16 {
  211. brcm,pins = <16 17 18 19 20 21>;
  212. brcm,function = <BCM2835_FSEL_ALT4>;
  213. };
  214. spi2_gpio40: spi2_gpio40 {
  215. brcm,pins = <40 41 42 43 44 45>;
  216. brcm,function = <BCM2835_FSEL_ALT4>;
  217. };
  218. uart0_gpio14: uart0_gpio14 {
  219. brcm,pins = <14 15>;
  220. brcm,function = <BCM2835_FSEL_ALT0>;
  221. };
  222. /* Separate from the uart0_gpio14 group
  223. * because it conflicts with spi1_gpio16, and
  224. * people often run uart0 on the two pins
  225. * without flow control.
  226. */
  227. uart0_ctsrts_gpio16: uart0_ctsrts_gpio16 {
  228. brcm,pins = <16 17>;
  229. brcm,function = <BCM2835_FSEL_ALT3>;
  230. };
  231. uart0_ctsrts_gpio30: uart0_ctsrts_gpio30 {
  232. brcm,pins = <30 31>;
  233. brcm,function = <BCM2835_FSEL_ALT3>;
  234. brcm,pull = <BCM2835_PUD_UP BCM2835_PUD_OFF>;
  235. };
  236. uart0_gpio32: uart0_gpio32 {
  237. brcm,pins = <32 33>;
  238. brcm,function = <BCM2835_FSEL_ALT3>;
  239. brcm,pull = <BCM2835_PUD_OFF BCM2835_PUD_UP>;
  240. };
  241. uart0_gpio36: uart0_gpio36 {
  242. brcm,pins = <36 37>;
  243. brcm,function = <BCM2835_FSEL_ALT2>;
  244. };
  245. uart0_ctsrts_gpio38: uart0_ctsrts_gpio38 {
  246. brcm,pins = <38 39>;
  247. brcm,function = <BCM2835_FSEL_ALT2>;
  248. };
  249. uart1_gpio14: uart1_gpio14 {
  250. brcm,pins = <14 15>;
  251. brcm,function = <BCM2835_FSEL_ALT5>;
  252. };
  253. uart1_ctsrts_gpio16: uart1_ctsrts_gpio16 {
  254. brcm,pins = <16 17>;
  255. brcm,function = <BCM2835_FSEL_ALT5>;
  256. };
  257. uart1_gpio32: uart1_gpio32 {
  258. brcm,pins = <32 33>;
  259. brcm,function = <BCM2835_FSEL_ALT5>;
  260. };
  261. uart1_ctsrts_gpio30: uart1_ctsrts_gpio30 {
  262. brcm,pins = <30 31>;
  263. brcm,function = <BCM2835_FSEL_ALT5>;
  264. };
  265. uart1_gpio40: uart1_gpio40 {
  266. brcm,pins = <40 41>;
  267. brcm,function = <BCM2835_FSEL_ALT5>;
  268. };
  269. uart1_ctsrts_gpio42: uart1_ctsrts_gpio42 {
  270. brcm,pins = <42 43>;
  271. brcm,function = <BCM2835_FSEL_ALT5>;
  272. };
  273. };
  274. uart0: serial@7e201000 {
  275. compatible = "arm,pl011", "arm,primecell";
  276. reg = <0x7e201000 0x200>;
  277. interrupts = <2 25>;
  278. clocks = <&clocks BCM2835_CLOCK_UART>,
  279. <&clocks BCM2835_CLOCK_VPU>;
  280. clock-names = "uartclk", "apb_pclk";
  281. arm,primecell-periphid = <0x00241011>;
  282. };
  283. sdhost: mmc@7e202000 {
  284. compatible = "brcm,bcm2835-sdhost";
  285. reg = <0x7e202000 0x100>;
  286. interrupts = <2 24>;
  287. clocks = <&clocks BCM2835_CLOCK_VPU>;
  288. status = "disabled";
  289. };
  290. i2s: i2s@7e203000 {
  291. compatible = "brcm,bcm2835-i2s";
  292. reg = <0x7e203000 0x24>;
  293. clocks = <&clocks BCM2835_CLOCK_PCM>;
  294. status = "disabled";
  295. };
  296. spi: spi@7e204000 {
  297. compatible = "brcm,bcm2835-spi";
  298. reg = <0x7e204000 0x200>;
  299. interrupts = <2 22>;
  300. clocks = <&clocks BCM2835_CLOCK_VPU>;
  301. #address-cells = <1>;
  302. #size-cells = <0>;
  303. status = "disabled";
  304. };
  305. i2c0: i2c@7e205000 {
  306. compatible = "brcm,bcm2835-i2c";
  307. reg = <0x7e205000 0x200>;
  308. interrupts = <2 21>;
  309. clocks = <&clocks BCM2835_CLOCK_VPU>;
  310. #address-cells = <1>;
  311. #size-cells = <0>;
  312. status = "disabled";
  313. };
  314. dpi: dpi@7e208000 {
  315. compatible = "brcm,bcm2835-dpi";
  316. reg = <0x7e208000 0x8c>;
  317. clocks = <&clocks BCM2835_CLOCK_VPU>,
  318. <&clocks BCM2835_CLOCK_DPI>;
  319. clock-names = "core", "pixel";
  320. status = "disabled";
  321. };
  322. dsi0: dsi@7e209000 {
  323. compatible = "brcm,bcm2835-dsi0";
  324. reg = <0x7e209000 0x78>;
  325. interrupts = <2 4>;
  326. #address-cells = <1>;
  327. #size-cells = <0>;
  328. #clock-cells = <1>;
  329. clocks = <&clocks BCM2835_PLLA_DSI0>,
  330. <&clocks BCM2835_CLOCK_DSI0E>,
  331. <&clocks BCM2835_CLOCK_DSI0P>;
  332. clock-names = "phy", "escape", "pixel";
  333. clock-output-names = "dsi0_byte",
  334. "dsi0_ddr2",
  335. "dsi0_ddr";
  336. status = "disabled";
  337. };
  338. aux: aux@7e215000 {
  339. compatible = "brcm,bcm2835-aux";
  340. #clock-cells = <1>;
  341. reg = <0x7e215000 0x8>;
  342. clocks = <&clocks BCM2835_CLOCK_VPU>;
  343. };
  344. uart1: serial@7e215040 {
  345. compatible = "brcm,bcm2835-aux-uart";
  346. reg = <0x7e215040 0x40>;
  347. interrupts = <1 29>;
  348. clocks = <&aux BCM2835_AUX_CLOCK_UART>;
  349. status = "disabled";
  350. };
  351. spi1: spi@7e215080 {
  352. compatible = "brcm,bcm2835-aux-spi";
  353. reg = <0x7e215080 0x40>;
  354. interrupts = <1 29>;
  355. clocks = <&aux BCM2835_AUX_CLOCK_SPI1>;
  356. #address-cells = <1>;
  357. #size-cells = <0>;
  358. status = "disabled";
  359. };
  360. spi2: spi@7e2150c0 {
  361. compatible = "brcm,bcm2835-aux-spi";
  362. reg = <0x7e2150c0 0x40>;
  363. interrupts = <1 29>;
  364. clocks = <&aux BCM2835_AUX_CLOCK_SPI2>;
  365. #address-cells = <1>;
  366. #size-cells = <0>;
  367. status = "disabled";
  368. };
  369. pwm: pwm@7e20c000 {
  370. compatible = "brcm,bcm2835-pwm";
  371. reg = <0x7e20c000 0x28>;
  372. clocks = <&clocks BCM2835_CLOCK_PWM>;
  373. assigned-clocks = <&clocks BCM2835_CLOCK_PWM>;
  374. assigned-clock-rates = <10000000>;
  375. #pwm-cells = <2>;
  376. status = "disabled";
  377. };
  378. sdhci: mmc@7e300000 {
  379. compatible = "brcm,bcm2835-sdhci";
  380. reg = <0x7e300000 0x100>;
  381. interrupts = <2 30>;
  382. clocks = <&clocks BCM2835_CLOCK_EMMC>;
  383. status = "disabled";
  384. };
  385. hvs@7e400000 {
  386. compatible = "brcm,bcm2835-hvs";
  387. reg = <0x7e400000 0x6000>;
  388. interrupts = <2 1>;
  389. };
  390. dsi1: dsi@7e700000 {
  391. compatible = "brcm,bcm2835-dsi1";
  392. reg = <0x7e700000 0x8c>;
  393. interrupts = <2 12>;
  394. #address-cells = <1>;
  395. #size-cells = <0>;
  396. #clock-cells = <1>;
  397. clocks = <&clocks BCM2835_PLLD_DSI1>,
  398. <&clocks BCM2835_CLOCK_DSI1E>,
  399. <&clocks BCM2835_CLOCK_DSI1P>;
  400. clock-names = "phy", "escape", "pixel";
  401. clock-output-names = "dsi1_byte",
  402. "dsi1_ddr2",
  403. "dsi1_ddr";
  404. status = "disabled";
  405. };
  406. i2c1: i2c@7e804000 {
  407. compatible = "brcm,bcm2835-i2c";
  408. reg = <0x7e804000 0x1000>;
  409. interrupts = <2 21>;
  410. clocks = <&clocks BCM2835_CLOCK_VPU>;
  411. #address-cells = <1>;
  412. #size-cells = <0>;
  413. status = "disabled";
  414. };
  415. usb: usb@7e980000 {
  416. compatible = "brcm,bcm2835-usb";
  417. reg = <0x7e980000 0x10000>;
  418. interrupts = <1 9>;
  419. #address-cells = <1>;
  420. #size-cells = <0>;
  421. clocks = <&clk_usb>;
  422. clock-names = "otg";
  423. phys = <&usbphy>;
  424. phy-names = "usb2-phy";
  425. };
  426. };
  427. clocks {
  428. /* The oscillator is the root of the clock tree. */
  429. clk_osc: clk-osc {
  430. compatible = "fixed-clock";
  431. #clock-cells = <0>;
  432. clock-output-names = "osc";
  433. clock-frequency = <19200000>;
  434. };
  435. clk_usb: clk-usb {
  436. compatible = "fixed-clock";
  437. #clock-cells = <0>;
  438. clock-output-names = "otg";
  439. clock-frequency = <480000000>;
  440. };
  441. };
  442. usbphy: phy {
  443. compatible = "usb-nop-xceiv";
  444. #phy-cells = <0>;
  445. };
  446. };