qcom-mdm9615.dtsi 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550
  1. /*
  2. * Device Tree Source for Qualcomm MDM9615 SoC
  3. *
  4. * Copyright (C) 2016 BayLibre, SAS.
  5. * Author : Neil Armstrong <[email protected]>
  6. *
  7. * This file is dual-licensed: you can use it either under the terms
  8. * of the GPL or the X11 license, at your option. Note that this dual
  9. * licensing only applies to this file, and not this project as a
  10. * whole.
  11. *
  12. * a) This file is free software; you can redistribute it and/or
  13. * modify it under the terms of the GNU General Public License as
  14. * published by the Free Software Foundation; either version 2 of the
  15. * License, or (at your option) any later version.
  16. *
  17. * This file is distributed in the hope that it will be useful,
  18. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  20. * GNU General Public License for more details.
  21. *
  22. * Or, alternatively,
  23. *
  24. * b) Permission is hereby granted, free of charge, to any person
  25. * obtaining a copy of this software and associated documentation
  26. * files (the "Software"), to deal in the Software without
  27. * restriction, including without limitation the rights to use,
  28. * copy, modify, merge, publish, distribute, sublicense, and/or
  29. * sell copies of the Software, and to permit persons to whom the
  30. * Software is furnished to do so, subject to the following
  31. * conditions:
  32. *
  33. * The above copyright notice and this permission notice shall be
  34. * included in all copies or substantial portions of the Software.
  35. *
  36. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  37. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  38. * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  39. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  40. * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  41. * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  42. * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  43. * OTHER DEALINGS IN THE SOFTWARE.
  44. */
  45. /dts-v1/;
  46. #include <dt-bindings/interrupt-controller/arm-gic.h>
  47. #include <dt-bindings/clock/qcom,gcc-mdm9615.h>
  48. #include <dt-bindings/reset/qcom,gcc-mdm9615.h>
  49. #include <dt-bindings/mfd/qcom-rpm.h>
  50. #include <dt-bindings/soc/qcom,gsbi.h>
  51. / {
  52. #address-cells = <1>;
  53. #size-cells = <1>;
  54. model = "Qualcomm MDM9615";
  55. compatible = "qcom,mdm9615";
  56. interrupt-parent = <&intc>;
  57. cpus {
  58. #address-cells = <1>;
  59. #size-cells = <0>;
  60. cpu0: cpu@0 {
  61. compatible = "arm,cortex-a5";
  62. device_type = "cpu";
  63. next-level-cache = <&L2>;
  64. };
  65. };
  66. cpu-pmu {
  67. compatible = "arm,cortex-a5-pmu";
  68. interrupts = <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_HIGH)>;
  69. };
  70. clocks {
  71. cxo_board {
  72. compatible = "fixed-clock";
  73. #clock-cells = <0>;
  74. clock-frequency = <19200000>;
  75. };
  76. };
  77. vsdcc_fixed: vsdcc-regulator {
  78. compatible = "regulator-fixed";
  79. regulator-name = "SDCC Power";
  80. regulator-min-microvolt = <2700000>;
  81. regulator-max-microvolt = <2700000>;
  82. regulator-always-on;
  83. };
  84. soc: soc {
  85. #address-cells = <1>;
  86. #size-cells = <1>;
  87. ranges;
  88. compatible = "simple-bus";
  89. L2: cache-controller@2040000 {
  90. compatible = "arm,pl310-cache";
  91. reg = <0x02040000 0x1000>;
  92. arm,data-latency = <2 2 0>;
  93. cache-unified;
  94. cache-level = <2>;
  95. };
  96. intc: interrupt-controller@2000000 {
  97. compatible = "qcom,msm-qgic2";
  98. interrupt-controller;
  99. #interrupt-cells = <3>;
  100. reg = <0x02000000 0x1000>,
  101. <0x02002000 0x1000>;
  102. };
  103. timer@200a000 {
  104. compatible = "qcom,kpss-timer", "qcom,msm-timer";
  105. interrupts = <GIC_PPI 1 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_EDGE_RISING)>,
  106. <GIC_PPI 2 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_EDGE_RISING)>,
  107. <GIC_PPI 3 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_EDGE_RISING)>;
  108. reg = <0x0200a000 0x100>;
  109. clock-frequency = <27000000>,
  110. <32768>;
  111. cpu-offset = <0x80000>;
  112. };
  113. msmgpio: pinctrl@800000 {
  114. compatible = "qcom,mdm9615-pinctrl";
  115. gpio-controller;
  116. gpio-ranges = <&msmgpio 0 0 88>;
  117. #gpio-cells = <2>;
  118. interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
  119. interrupt-controller;
  120. #interrupt-cells = <2>;
  121. reg = <0x800000 0x4000>;
  122. };
  123. gcc: clock-controller@900000 {
  124. compatible = "qcom,gcc-mdm9615";
  125. #clock-cells = <1>;
  126. #power-domain-cells = <1>;
  127. #reset-cells = <1>;
  128. reg = <0x900000 0x4000>;
  129. };
  130. lcc: clock-controller@28000000 {
  131. compatible = "qcom,lcc-mdm9615";
  132. reg = <0x28000000 0x1000>;
  133. #clock-cells = <1>;
  134. #reset-cells = <1>;
  135. };
  136. l2cc: clock-controller@2011000 {
  137. compatible = "qcom,kpss-gcc", "syscon";
  138. reg = <0x02011000 0x1000>;
  139. };
  140. rng@1a500000 {
  141. compatible = "qcom,prng";
  142. reg = <0x1a500000 0x200>;
  143. clocks = <&gcc PRNG_CLK>;
  144. clock-names = "core";
  145. assigned-clocks = <&gcc PRNG_CLK>;
  146. assigned-clock-rates = <32000000>;
  147. };
  148. gsbi2: gsbi@16100000 {
  149. compatible = "qcom,gsbi-v1.0.0";
  150. cell-index = <2>;
  151. reg = <0x16100000 0x100>;
  152. clocks = <&gcc GSBI2_H_CLK>;
  153. clock-names = "iface";
  154. status = "disabled";
  155. #address-cells = <1>;
  156. #size-cells = <1>;
  157. ranges;
  158. gsbi2_i2c: i2c@16180000 {
  159. compatible = "qcom,i2c-qup-v1.1.1";
  160. #address-cells = <1>;
  161. #size-cells = <0>;
  162. reg = <0x16180000 0x1000>;
  163. interrupts = <GIC_SPI 149 IRQ_TYPE_LEVEL_HIGH>;
  164. clocks = <&gcc GSBI2_QUP_CLK>, <&gcc GSBI2_H_CLK>;
  165. clock-names = "core", "iface";
  166. status = "disabled";
  167. };
  168. };
  169. gsbi3: gsbi@16200000 {
  170. compatible = "qcom,gsbi-v1.0.0";
  171. cell-index = <3>;
  172. reg = <0x16200000 0x100>;
  173. clocks = <&gcc GSBI3_H_CLK>;
  174. clock-names = "iface";
  175. status = "disabled";
  176. #address-cells = <1>;
  177. #size-cells = <1>;
  178. ranges;
  179. gsbi3_spi: spi@16280000 {
  180. compatible = "qcom,spi-qup-v1.1.1";
  181. #address-cells = <1>;
  182. #size-cells = <0>;
  183. reg = <0x16280000 0x1000>;
  184. interrupts = <GIC_SPI 151 IRQ_TYPE_LEVEL_HIGH>;
  185. spi-max-frequency = <24000000>;
  186. clocks = <&gcc GSBI3_QUP_CLK>, <&gcc GSBI3_H_CLK>;
  187. clock-names = "core", "iface";
  188. status = "disabled";
  189. };
  190. };
  191. gsbi4: gsbi@16300000 {
  192. compatible = "qcom,gsbi-v1.0.0";
  193. cell-index = <4>;
  194. reg = <0x16300000 0x100>;
  195. clocks = <&gcc GSBI4_H_CLK>;
  196. clock-names = "iface";
  197. status = "disabled";
  198. #address-cells = <1>;
  199. #size-cells = <1>;
  200. ranges;
  201. syscon-tcsr = <&tcsr>;
  202. gsbi4_serial: serial@16340000 {
  203. compatible = "qcom,msm-uartdm-v1.3", "qcom,msm-uartdm";
  204. reg = <0x16340000 0x1000>,
  205. <0x16300000 0x1000>;
  206. interrupts = <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>;
  207. clocks = <&gcc GSBI4_UART_CLK>, <&gcc GSBI4_H_CLK>;
  208. clock-names = "core", "iface";
  209. status = "disabled";
  210. };
  211. };
  212. gsbi5: gsbi@16400000 {
  213. compatible = "qcom,gsbi-v1.0.0";
  214. cell-index = <5>;
  215. reg = <0x16400000 0x100>;
  216. clocks = <&gcc GSBI5_H_CLK>;
  217. clock-names = "iface";
  218. status = "disabled";
  219. #address-cells = <1>;
  220. #size-cells = <1>;
  221. ranges;
  222. syscon-tcsr = <&tcsr>;
  223. gsbi5_i2c: i2c@16480000 {
  224. compatible = "qcom,i2c-qup-v1.1.1";
  225. #address-cells = <1>;
  226. #size-cells = <0>;
  227. reg = <0x16480000 0x1000>;
  228. interrupts = <GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>;
  229. /* QUP clock is not initialized, set rate */
  230. assigned-clocks = <&gcc GSBI5_QUP_CLK>;
  231. assigned-clock-rates = <24000000>;
  232. clocks = <&gcc GSBI5_QUP_CLK>, <&gcc GSBI5_H_CLK>;
  233. clock-names = "core", "iface";
  234. status = "disabled";
  235. };
  236. gsbi5_serial: serial@16440000 {
  237. compatible = "qcom,msm-uartdm-v1.3", "qcom,msm-uartdm";
  238. reg = <0x16440000 0x1000>,
  239. <0x16400000 0x1000>;
  240. interrupts = <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
  241. clocks = <&gcc GSBI5_UART_CLK>, <&gcc GSBI5_H_CLK>;
  242. clock-names = "core", "iface";
  243. status = "disabled";
  244. };
  245. };
  246. qcom,ssbi@500000 {
  247. compatible = "qcom,ssbi";
  248. reg = <0x500000 0x1000>;
  249. qcom,controller-type = "pmic-arbiter";
  250. pmicintc: pmic@0 {
  251. compatible = "qcom,pm8018", "qcom,pm8921";
  252. interrupts = <GIC_PPI 226 IRQ_TYPE_LEVEL_HIGH>;
  253. #interrupt-cells = <2>;
  254. interrupt-controller;
  255. #address-cells = <1>;
  256. #size-cells = <0>;
  257. pwrkey@1c {
  258. compatible = "qcom,pm8018-pwrkey", "qcom,pm8921-pwrkey";
  259. reg = <0x1c>;
  260. interrupt-parent = <&pmicintc>;
  261. interrupts = <50 IRQ_TYPE_EDGE_RISING>,
  262. <51 IRQ_TYPE_EDGE_RISING>;
  263. debounce = <15625>;
  264. pull-up;
  265. };
  266. pmicmpp: mpps@50 {
  267. compatible = "qcom,pm8018-mpp", "qcom,ssbi-mpp";
  268. interrupt-controller;
  269. #interrupt-cells = <2>;
  270. reg = <0x50>;
  271. gpio-controller;
  272. #gpio-cells = <2>;
  273. gpio-ranges = <&pmicmpp 0 0 6>;
  274. };
  275. rtc@11d {
  276. compatible = "qcom,pm8018-rtc", "qcom,pm8921-rtc";
  277. interrupt-parent = <&pmicintc>;
  278. interrupts = <39 IRQ_TYPE_EDGE_RISING>;
  279. reg = <0x11d>;
  280. allow-set-time;
  281. };
  282. pmicgpio: gpio@150 {
  283. compatible = "qcom,pm8018-gpio", "qcom,ssbi-gpio";
  284. reg = <0x150>;
  285. interrupt-controller;
  286. #interrupt-cells = <2>;
  287. gpio-controller;
  288. gpio-ranges = <&pmicgpio 0 0 6>;
  289. #gpio-cells = <2>;
  290. };
  291. };
  292. };
  293. sdcc1bam: dma-controller@12182000{
  294. compatible = "qcom,bam-v1.3.0";
  295. reg = <0x12182000 0x8000>;
  296. interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
  297. clocks = <&gcc SDC1_H_CLK>;
  298. clock-names = "bam_clk";
  299. #dma-cells = <1>;
  300. qcom,ee = <0>;
  301. };
  302. sdcc2bam: dma-controller@12142000{
  303. compatible = "qcom,bam-v1.3.0";
  304. reg = <0x12142000 0x8000>;
  305. interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
  306. clocks = <&gcc SDC2_H_CLK>;
  307. clock-names = "bam_clk";
  308. #dma-cells = <1>;
  309. qcom,ee = <0>;
  310. };
  311. amba {
  312. compatible = "simple-bus";
  313. #address-cells = <1>;
  314. #size-cells = <1>;
  315. ranges;
  316. sdcc1: mmc@12180000 {
  317. status = "disabled";
  318. compatible = "arm,pl18x", "arm,primecell";
  319. arm,primecell-periphid = <0x00051180>;
  320. reg = <0x12180000 0x2000>;
  321. interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>;
  322. interrupt-names = "cmd_irq";
  323. clocks = <&gcc SDC1_CLK>, <&gcc SDC1_H_CLK>;
  324. clock-names = "mclk", "apb_pclk";
  325. bus-width = <8>;
  326. max-frequency = <48000000>;
  327. cap-sd-highspeed;
  328. cap-mmc-highspeed;
  329. vmmc-supply = <&vsdcc_fixed>;
  330. dmas = <&sdcc1bam 2>, <&sdcc1bam 1>;
  331. dma-names = "tx", "rx";
  332. assigned-clocks = <&gcc SDC1_CLK>;
  333. assigned-clock-rates = <400000>;
  334. };
  335. sdcc2: mmc@12140000 {
  336. compatible = "arm,pl18x", "arm,primecell";
  337. arm,primecell-periphid = <0x00051180>;
  338. status = "disabled";
  339. reg = <0x12140000 0x2000>;
  340. interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
  341. interrupt-names = "cmd_irq";
  342. clocks = <&gcc SDC2_CLK>, <&gcc SDC2_H_CLK>;
  343. clock-names = "mclk", "apb_pclk";
  344. bus-width = <4>;
  345. cap-sd-highspeed;
  346. cap-mmc-highspeed;
  347. max-frequency = <48000000>;
  348. no-1-8-v;
  349. vmmc-supply = <&vsdcc_fixed>;
  350. dmas = <&sdcc2bam 2>, <&sdcc2bam 1>;
  351. dma-names = "tx", "rx";
  352. assigned-clocks = <&gcc SDC2_CLK>;
  353. assigned-clock-rates = <400000>;
  354. };
  355. };
  356. tcsr: syscon@1a400000 {
  357. compatible = "qcom,tcsr-mdm9615", "syscon";
  358. reg = <0x1a400000 0x100>;
  359. };
  360. rpm: rpm@108000 {
  361. compatible = "qcom,rpm-mdm9615";
  362. reg = <0x108000 0x1000>;
  363. qcom,ipc = <&l2cc 0x8 2>;
  364. interrupts = <GIC_SPI 19 IRQ_TYPE_EDGE_RISING>,
  365. <GIC_SPI 21 IRQ_TYPE_EDGE_RISING>,
  366. <GIC_SPI 22 IRQ_TYPE_EDGE_RISING>;
  367. interrupt-names = "ack", "err", "wakeup";
  368. regulators {
  369. compatible = "qcom,rpm-pm8018-regulators";
  370. vin_lvs1-supply = <&pm8018_s3>;
  371. vdd_l7-supply = <&pm8018_s4>;
  372. vdd_l8-supply = <&pm8018_s3>;
  373. vdd_l9_l10_l11_l12-supply = <&pm8018_s5>;
  374. /* Buck SMPS */
  375. pm8018_s1: s1 {
  376. regulator-min-microvolt = <500000>;
  377. regulator-max-microvolt = <1150000>;
  378. qcom,switch-mode-frequency = <1600000>;
  379. bias-pull-down;
  380. };
  381. pm8018_s2: s2 {
  382. regulator-min-microvolt = <1225000>;
  383. regulator-max-microvolt = <1300000>;
  384. qcom,switch-mode-frequency = <1600000>;
  385. bias-pull-down;
  386. };
  387. pm8018_s3: s3 {
  388. regulator-always-on;
  389. regulator-min-microvolt = <1800000>;
  390. regulator-max-microvolt = <1800000>;
  391. qcom,switch-mode-frequency = <1600000>;
  392. bias-pull-down;
  393. };
  394. pm8018_s4: s4 {
  395. regulator-min-microvolt = <2100000>;
  396. regulator-max-microvolt = <2200000>;
  397. qcom,switch-mode-frequency = <1600000>;
  398. bias-pull-down;
  399. };
  400. pm8018_s5: s5 {
  401. regulator-always-on;
  402. regulator-min-microvolt = <1350000>;
  403. regulator-max-microvolt = <1350000>;
  404. qcom,switch-mode-frequency = <1600000>;
  405. bias-pull-down;
  406. };
  407. /* PMOS LDO */
  408. pm8018_l2: l2 {
  409. regulator-always-on;
  410. regulator-min-microvolt = <1800000>;
  411. regulator-max-microvolt = <1800000>;
  412. bias-pull-down;
  413. };
  414. pm8018_l3: l3 {
  415. regulator-always-on;
  416. regulator-min-microvolt = <1800000>;
  417. regulator-max-microvolt = <1800000>;
  418. bias-pull-down;
  419. };
  420. pm8018_l4: l4 {
  421. regulator-min-microvolt = <3300000>;
  422. regulator-max-microvolt = <3300000>;
  423. bias-pull-down;
  424. };
  425. pm8018_l5: l5 {
  426. regulator-min-microvolt = <2850000>;
  427. regulator-max-microvolt = <2850000>;
  428. bias-pull-down;
  429. };
  430. pm8018_l6: l6 {
  431. regulator-min-microvolt = <1800000>;
  432. regulator-max-microvolt = <2850000>;
  433. bias-pull-down;
  434. };
  435. pm8018_l7: l7 {
  436. regulator-min-microvolt = <1850000>;
  437. regulator-max-microvolt = <1900000>;
  438. bias-pull-down;
  439. };
  440. pm8018_l8: l8 {
  441. regulator-min-microvolt = <1200000>;
  442. regulator-max-microvolt = <1200000>;
  443. bias-pull-down;
  444. };
  445. pm8018_l9: l9 {
  446. regulator-min-microvolt = <750000>;
  447. regulator-max-microvolt = <1150000>;
  448. bias-pull-down;
  449. };
  450. pm8018_l10: l10 {
  451. regulator-min-microvolt = <1050000>;
  452. regulator-max-microvolt = <1050000>;
  453. bias-pull-down;
  454. };
  455. pm8018_l11: l11 {
  456. regulator-min-microvolt = <1050000>;
  457. regulator-max-microvolt = <1050000>;
  458. bias-pull-down;
  459. };
  460. pm8018_l12: l12 {
  461. regulator-min-microvolt = <1050000>;
  462. regulator-max-microvolt = <1050000>;
  463. bias-pull-down;
  464. };
  465. pm8018_l13: l13 {
  466. regulator-min-microvolt = <1850000>;
  467. regulator-max-microvolt = <2950000>;
  468. bias-pull-down;
  469. };
  470. pm8018_l14: l14 {
  471. regulator-min-microvolt = <2850000>;
  472. regulator-max-microvolt = <2850000>;
  473. bias-pull-down;
  474. };
  475. /* Low Voltage Switch */
  476. pm8018_lvs1: lvs1 {
  477. bias-pull-down;
  478. };
  479. };
  480. };
  481. };
  482. };