bcm2711.dtsi 25 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171
  1. // SPDX-License-Identifier: GPL-2.0
  2. #include "bcm283x.dtsi"
  3. #include <dt-bindings/interrupt-controller/arm-gic.h>
  4. #include <dt-bindings/soc/bcm2835-pm.h>
  5. / {
  6. compatible = "brcm,bcm2711";
  7. #address-cells = <2>;
  8. #size-cells = <1>;
  9. interrupt-parent = <&gicv2>;
  10. vc4: gpu {
  11. compatible = "brcm,bcm2711-vc5";
  12. status = "disabled";
  13. };
  14. clk_27MHz: clk-27M {
  15. #clock-cells = <0>;
  16. compatible = "fixed-clock";
  17. clock-frequency = <27000000>;
  18. clock-output-names = "27MHz-clock";
  19. };
  20. clk_108MHz: clk-108M {
  21. #clock-cells = <0>;
  22. compatible = "fixed-clock";
  23. clock-frequency = <108000000>;
  24. clock-output-names = "108MHz-clock";
  25. };
  26. soc {
  27. /*
  28. * Defined ranges:
  29. * Common BCM283x peripherals
  30. * BCM2711-specific peripherals
  31. * ARM-local peripherals
  32. */
  33. ranges = <0x7e000000 0x0 0xfe000000 0x01800000>,
  34. <0x7c000000 0x0 0xfc000000 0x02000000>,
  35. <0x40000000 0x0 0xff800000 0x00800000>;
  36. /* Emulate a contiguous 30-bit address range for DMA */
  37. dma-ranges = <0xc0000000 0x0 0x00000000 0x40000000>;
  38. /*
  39. * This node is the provider for the enable-method for
  40. * bringing up secondary cores.
  41. */
  42. local_intc: local_intc@40000000 {
  43. compatible = "brcm,bcm2836-l1-intc";
  44. reg = <0x40000000 0x100>;
  45. };
  46. gicv2: interrupt-controller@40041000 {
  47. interrupt-controller;
  48. #interrupt-cells = <3>;
  49. compatible = "arm,gic-400";
  50. reg = <0x40041000 0x1000>,
  51. <0x40042000 0x2000>,
  52. <0x40044000 0x2000>,
  53. <0x40046000 0x2000>;
  54. interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) |
  55. IRQ_TYPE_LEVEL_HIGH)>;
  56. };
  57. avs_monitor: avs-monitor@7d5d2000 {
  58. compatible = "brcm,bcm2711-avs-monitor",
  59. "syscon", "simple-mfd";
  60. reg = <0x7d5d2000 0xf00>;
  61. thermal: thermal {
  62. compatible = "brcm,bcm2711-thermal";
  63. #thermal-sensor-cells = <0>;
  64. };
  65. };
  66. dma: dma@7e007000 {
  67. compatible = "brcm,bcm2835-dma";
  68. reg = <0x7e007000 0xb00>;
  69. interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>,
  70. <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>,
  71. <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>,
  72. <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>,
  73. <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>,
  74. <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>,
  75. <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>,
  76. /* DMA lite 7 - 10 */
  77. <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>,
  78. <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>,
  79. <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>,
  80. <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
  81. interrupt-names = "dma0",
  82. "dma1",
  83. "dma2",
  84. "dma3",
  85. "dma4",
  86. "dma5",
  87. "dma6",
  88. "dma7",
  89. "dma8",
  90. "dma9",
  91. "dma10";
  92. #dma-cells = <1>;
  93. brcm,dma-channel-mask = <0x07f5>;
  94. };
  95. pm: watchdog@7e100000 {
  96. compatible = "brcm,bcm2711-pm", "brcm,bcm2835-pm-wdt";
  97. #power-domain-cells = <1>;
  98. #reset-cells = <1>;
  99. reg = <0x7e100000 0x114>,
  100. <0x7e00a000 0x24>,
  101. <0x7ec11000 0x20>;
  102. reg-names = "pm", "asb", "rpivid_asb";
  103. clocks = <&clocks BCM2835_CLOCK_V3D>,
  104. <&clocks BCM2835_CLOCK_PERI_IMAGE>,
  105. <&clocks BCM2835_CLOCK_H264>,
  106. <&clocks BCM2835_CLOCK_ISP>;
  107. clock-names = "v3d", "peri_image", "h264", "isp";
  108. system-power-controller;
  109. };
  110. rng@7e104000 {
  111. compatible = "brcm,bcm2711-rng200";
  112. reg = <0x7e104000 0x28>;
  113. };
  114. uart2: serial@7e201400 {
  115. compatible = "arm,pl011", "arm,primecell";
  116. reg = <0x7e201400 0x200>;
  117. interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
  118. clocks = <&clocks BCM2835_CLOCK_UART>,
  119. <&clocks BCM2835_CLOCK_VPU>;
  120. clock-names = "uartclk", "apb_pclk";
  121. arm,primecell-periphid = <0x00241011>;
  122. status = "disabled";
  123. };
  124. uart3: serial@7e201600 {
  125. compatible = "arm,pl011", "arm,primecell";
  126. reg = <0x7e201600 0x200>;
  127. interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
  128. clocks = <&clocks BCM2835_CLOCK_UART>,
  129. <&clocks BCM2835_CLOCK_VPU>;
  130. clock-names = "uartclk", "apb_pclk";
  131. arm,primecell-periphid = <0x00241011>;
  132. status = "disabled";
  133. };
  134. uart4: serial@7e201800 {
  135. compatible = "arm,pl011", "arm,primecell";
  136. reg = <0x7e201800 0x200>;
  137. interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
  138. clocks = <&clocks BCM2835_CLOCK_UART>,
  139. <&clocks BCM2835_CLOCK_VPU>;
  140. clock-names = "uartclk", "apb_pclk";
  141. arm,primecell-periphid = <0x00241011>;
  142. status = "disabled";
  143. };
  144. uart5: serial@7e201a00 {
  145. compatible = "arm,pl011", "arm,primecell";
  146. reg = <0x7e201a00 0x200>;
  147. interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
  148. clocks = <&clocks BCM2835_CLOCK_UART>,
  149. <&clocks BCM2835_CLOCK_VPU>;
  150. clock-names = "uartclk", "apb_pclk";
  151. arm,primecell-periphid = <0x00241011>;
  152. status = "disabled";
  153. };
  154. spi3: spi@7e204600 {
  155. compatible = "brcm,bcm2835-spi";
  156. reg = <0x7e204600 0x0200>;
  157. interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
  158. clocks = <&clocks BCM2835_CLOCK_VPU>;
  159. #address-cells = <1>;
  160. #size-cells = <0>;
  161. status = "disabled";
  162. };
  163. spi4: spi@7e204800 {
  164. compatible = "brcm,bcm2835-spi";
  165. reg = <0x7e204800 0x0200>;
  166. interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
  167. clocks = <&clocks BCM2835_CLOCK_VPU>;
  168. #address-cells = <1>;
  169. #size-cells = <0>;
  170. status = "disabled";
  171. };
  172. spi5: spi@7e204a00 {
  173. compatible = "brcm,bcm2835-spi";
  174. reg = <0x7e204a00 0x0200>;
  175. interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
  176. clocks = <&clocks BCM2835_CLOCK_VPU>;
  177. #address-cells = <1>;
  178. #size-cells = <0>;
  179. status = "disabled";
  180. };
  181. spi6: spi@7e204c00 {
  182. compatible = "brcm,bcm2835-spi";
  183. reg = <0x7e204c00 0x0200>;
  184. interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
  185. clocks = <&clocks BCM2835_CLOCK_VPU>;
  186. #address-cells = <1>;
  187. #size-cells = <0>;
  188. status = "disabled";
  189. };
  190. i2c3: i2c@7e205600 {
  191. compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
  192. reg = <0x7e205600 0x200>;
  193. interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
  194. clocks = <&clocks BCM2835_CLOCK_VPU>;
  195. #address-cells = <1>;
  196. #size-cells = <0>;
  197. status = "disabled";
  198. };
  199. i2c4: i2c@7e205800 {
  200. compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
  201. reg = <0x7e205800 0x200>;
  202. interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
  203. clocks = <&clocks BCM2835_CLOCK_VPU>;
  204. #address-cells = <1>;
  205. #size-cells = <0>;
  206. status = "disabled";
  207. };
  208. i2c5: i2c@7e205a00 {
  209. compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
  210. reg = <0x7e205a00 0x200>;
  211. interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
  212. clocks = <&clocks BCM2835_CLOCK_VPU>;
  213. #address-cells = <1>;
  214. #size-cells = <0>;
  215. status = "disabled";
  216. };
  217. i2c6: i2c@7e205c00 {
  218. compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
  219. reg = <0x7e205c00 0x200>;
  220. interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
  221. clocks = <&clocks BCM2835_CLOCK_VPU>;
  222. #address-cells = <1>;
  223. #size-cells = <0>;
  224. status = "disabled";
  225. };
  226. pixelvalve0: pixelvalve@7e206000 {
  227. compatible = "brcm,bcm2711-pixelvalve0";
  228. reg = <0x7e206000 0x100>;
  229. interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
  230. status = "disabled";
  231. };
  232. pixelvalve1: pixelvalve@7e207000 {
  233. compatible = "brcm,bcm2711-pixelvalve1";
  234. reg = <0x7e207000 0x100>;
  235. interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
  236. status = "disabled";
  237. };
  238. pixelvalve2: pixelvalve@7e20a000 {
  239. compatible = "brcm,bcm2711-pixelvalve2";
  240. reg = <0x7e20a000 0x100>;
  241. interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
  242. status = "disabled";
  243. };
  244. pwm1: pwm@7e20c800 {
  245. compatible = "brcm,bcm2835-pwm";
  246. reg = <0x7e20c800 0x28>;
  247. clocks = <&clocks BCM2835_CLOCK_PWM>;
  248. assigned-clocks = <&clocks BCM2835_CLOCK_PWM>;
  249. assigned-clock-rates = <10000000>;
  250. #pwm-cells = <2>;
  251. status = "disabled";
  252. };
  253. pixelvalve4: pixelvalve@7e216000 {
  254. compatible = "brcm,bcm2711-pixelvalve4";
  255. reg = <0x7e216000 0x100>;
  256. interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
  257. status = "disabled";
  258. };
  259. hvs: hvs@7e400000 {
  260. compatible = "brcm,bcm2711-hvs";
  261. reg = <0x7e400000 0x8000>;
  262. interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
  263. };
  264. pixelvalve3: pixelvalve@7ec12000 {
  265. compatible = "brcm,bcm2711-pixelvalve3";
  266. reg = <0x7ec12000 0x100>;
  267. interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>;
  268. status = "disabled";
  269. };
  270. vec: vec@7ec13000 {
  271. compatible = "brcm,bcm2711-vec";
  272. reg = <0x7ec13000 0x1000>;
  273. clocks = <&clocks BCM2835_CLOCK_VEC>;
  274. interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
  275. status = "disabled";
  276. };
  277. dvp: clock@7ef00000 {
  278. compatible = "brcm,brcm2711-dvp";
  279. reg = <0x7ef00000 0x10>;
  280. clocks = <&clk_108MHz>;
  281. #clock-cells = <1>;
  282. #reset-cells = <1>;
  283. };
  284. aon_intr: interrupt-controller@7ef00100 {
  285. compatible = "brcm,bcm2711-l2-intc", "brcm,l2-intc";
  286. reg = <0x7ef00100 0x30>;
  287. interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
  288. interrupt-controller;
  289. #interrupt-cells = <1>;
  290. };
  291. hdmi0: hdmi@7ef00700 {
  292. compatible = "brcm,bcm2711-hdmi0";
  293. reg = <0x7ef00700 0x300>,
  294. <0x7ef00300 0x200>,
  295. <0x7ef00f00 0x80>,
  296. <0x7ef00f80 0x80>,
  297. <0x7ef01b00 0x200>,
  298. <0x7ef01f00 0x400>,
  299. <0x7ef00200 0x80>,
  300. <0x7ef04300 0x100>,
  301. <0x7ef20000 0x100>;
  302. reg-names = "hdmi",
  303. "dvp",
  304. "phy",
  305. "rm",
  306. "packet",
  307. "metadata",
  308. "csc",
  309. "cec",
  310. "hd";
  311. clock-names = "hdmi", "bvb", "audio", "cec";
  312. resets = <&dvp 0>;
  313. interrupt-parent = <&aon_intr>;
  314. interrupts = <0>, <1>, <2>,
  315. <3>, <4>, <5>;
  316. interrupt-names = "cec-tx", "cec-rx", "cec-low",
  317. "wakeup", "hpd-connected", "hpd-removed";
  318. ddc = <&ddc0>;
  319. dmas = <&dma 10>;
  320. dma-names = "audio-rx";
  321. status = "disabled";
  322. };
  323. ddc0: i2c@7ef04500 {
  324. compatible = "brcm,bcm2711-hdmi-i2c";
  325. reg = <0x7ef04500 0x100>, <0x7ef00b00 0x300>;
  326. reg-names = "bsc", "auto-i2c";
  327. clock-frequency = <97500>;
  328. status = "disabled";
  329. };
  330. hdmi1: hdmi@7ef05700 {
  331. compatible = "brcm,bcm2711-hdmi1";
  332. reg = <0x7ef05700 0x300>,
  333. <0x7ef05300 0x200>,
  334. <0x7ef05f00 0x80>,
  335. <0x7ef05f80 0x80>,
  336. <0x7ef06b00 0x200>,
  337. <0x7ef06f00 0x400>,
  338. <0x7ef00280 0x80>,
  339. <0x7ef09300 0x100>,
  340. <0x7ef20000 0x100>;
  341. reg-names = "hdmi",
  342. "dvp",
  343. "phy",
  344. "rm",
  345. "packet",
  346. "metadata",
  347. "csc",
  348. "cec",
  349. "hd";
  350. ddc = <&ddc1>;
  351. clock-names = "hdmi", "bvb", "audio", "cec";
  352. resets = <&dvp 1>;
  353. interrupt-parent = <&aon_intr>;
  354. interrupts = <8>, <7>, <6>,
  355. <9>, <10>, <11>;
  356. interrupt-names = "cec-tx", "cec-rx", "cec-low",
  357. "wakeup", "hpd-connected", "hpd-removed";
  358. dmas = <&dma 17>;
  359. dma-names = "audio-rx";
  360. status = "disabled";
  361. };
  362. ddc1: i2c@7ef09500 {
  363. compatible = "brcm,bcm2711-hdmi-i2c";
  364. reg = <0x7ef09500 0x100>, <0x7ef05b00 0x300>;
  365. reg-names = "bsc", "auto-i2c";
  366. clock-frequency = <97500>;
  367. status = "disabled";
  368. };
  369. };
  370. /*
  371. * emmc2 has different DMA constraints based on SoC revisions. It was
  372. * moved into its own bus, so as for RPi4's firmware to update them.
  373. * The firmware will find whether the emmc2bus alias is defined, and if
  374. * so, it'll edit the dma-ranges property below accordingly.
  375. */
  376. emmc2bus: emmc2bus {
  377. compatible = "simple-bus";
  378. #address-cells = <2>;
  379. #size-cells = <1>;
  380. ranges = <0x0 0x7e000000 0x0 0xfe000000 0x01800000>;
  381. dma-ranges = <0x0 0xc0000000 0x0 0x00000000 0x40000000>;
  382. emmc2: mmc@7e340000 {
  383. compatible = "brcm,bcm2711-emmc2";
  384. reg = <0x0 0x7e340000 0x100>;
  385. interrupts = <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>;
  386. clocks = <&clocks BCM2711_CLOCK_EMMC2>;
  387. status = "disabled";
  388. };
  389. };
  390. arm-pmu {
  391. compatible = "arm,cortex-a72-pmu", "arm,armv8-pmuv3";
  392. interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>,
  393. <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>,
  394. <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>,
  395. <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
  396. interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
  397. };
  398. timer {
  399. compatible = "arm,armv8-timer";
  400. interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) |
  401. IRQ_TYPE_LEVEL_LOW)>,
  402. <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) |
  403. IRQ_TYPE_LEVEL_LOW)>,
  404. <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) |
  405. IRQ_TYPE_LEVEL_LOW)>,
  406. <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) |
  407. IRQ_TYPE_LEVEL_LOW)>;
  408. /* This only applies to the ARMv7 stub */
  409. arm,cpu-registers-not-fw-configured;
  410. };
  411. cpus: cpus {
  412. #address-cells = <1>;
  413. #size-cells = <0>;
  414. enable-method = "brcm,bcm2836-smp"; // for ARM 32-bit
  415. /* Source for d/i-cache-line-size and d/i-cache-sets
  416. * https://developer.arm.com/documentation/100095/0003
  417. * /Level-1-Memory-System/About-the-L1-memory-system?lang=en
  418. * Source for d/i-cache-size
  419. * https://www.raspberrypi.com/documentation/computers
  420. * /processors.html#bcm2711
  421. */
  422. cpu0: cpu@0 {
  423. device_type = "cpu";
  424. compatible = "arm,cortex-a72";
  425. reg = <0>;
  426. enable-method = "spin-table";
  427. cpu-release-addr = <0x0 0x000000d8>;
  428. d-cache-size = <0x8000>;
  429. d-cache-line-size = <64>;
  430. d-cache-sets = <256>; // 32KiB(size)/64(line-size)=512ways/2-way set
  431. i-cache-size = <0xc000>;
  432. i-cache-line-size = <64>;
  433. i-cache-sets = <256>; // 48KiB(size)/64(line-size)=768ways/3-way set
  434. next-level-cache = <&l2>;
  435. };
  436. cpu1: cpu@1 {
  437. device_type = "cpu";
  438. compatible = "arm,cortex-a72";
  439. reg = <1>;
  440. enable-method = "spin-table";
  441. cpu-release-addr = <0x0 0x000000e0>;
  442. d-cache-size = <0x8000>;
  443. d-cache-line-size = <64>;
  444. d-cache-sets = <256>; // 32KiB(size)/64(line-size)=512ways/2-way set
  445. i-cache-size = <0xc000>;
  446. i-cache-line-size = <64>;
  447. i-cache-sets = <256>; // 48KiB(size)/64(line-size)=768ways/3-way set
  448. next-level-cache = <&l2>;
  449. };
  450. cpu2: cpu@2 {
  451. device_type = "cpu";
  452. compatible = "arm,cortex-a72";
  453. reg = <2>;
  454. enable-method = "spin-table";
  455. cpu-release-addr = <0x0 0x000000e8>;
  456. d-cache-size = <0x8000>;
  457. d-cache-line-size = <64>;
  458. d-cache-sets = <256>; // 32KiB(size)/64(line-size)=512ways/2-way set
  459. i-cache-size = <0xc000>;
  460. i-cache-line-size = <64>;
  461. i-cache-sets = <256>; // 48KiB(size)/64(line-size)=768ways/3-way set
  462. next-level-cache = <&l2>;
  463. };
  464. cpu3: cpu@3 {
  465. device_type = "cpu";
  466. compatible = "arm,cortex-a72";
  467. reg = <3>;
  468. enable-method = "spin-table";
  469. cpu-release-addr = <0x0 0x000000f0>;
  470. d-cache-size = <0x8000>;
  471. d-cache-line-size = <64>;
  472. d-cache-sets = <256>; // 32KiB(size)/64(line-size)=512ways/2-way set
  473. i-cache-size = <0xc000>;
  474. i-cache-line-size = <64>;
  475. i-cache-sets = <256>; // 48KiB(size)/64(line-size)=768ways/3-way set
  476. next-level-cache = <&l2>;
  477. };
  478. /* Source for d/i-cache-line-size and d/i-cache-sets
  479. * https://developer.arm.com/documentation/100095/0003
  480. * /Level-2-Memory-System/About-the-L2-memory-system?lang=en
  481. * Source for d/i-cache-size
  482. * https://www.raspberrypi.com/documentation/computers
  483. * /processors.html#bcm2711
  484. */
  485. l2: l2-cache0 {
  486. compatible = "cache";
  487. cache-size = <0x100000>;
  488. cache-line-size = <64>;
  489. cache-sets = <1024>; // 1MiB(size)/64(line-size)=16384ways/16-way set
  490. cache-level = <2>;
  491. };
  492. };
  493. scb {
  494. compatible = "simple-bus";
  495. #address-cells = <2>;
  496. #size-cells = <1>;
  497. ranges = <0x0 0x7c000000 0x0 0xfc000000 0x03800000>,
  498. <0x6 0x00000000 0x6 0x00000000 0x40000000>;
  499. pcie0: pcie@7d500000 {
  500. compatible = "brcm,bcm2711-pcie";
  501. reg = <0x0 0x7d500000 0x9310>;
  502. device_type = "pci";
  503. #address-cells = <3>;
  504. #interrupt-cells = <1>;
  505. #size-cells = <2>;
  506. interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>,
  507. <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
  508. interrupt-names = "pcie", "msi";
  509. interrupt-map-mask = <0x0 0x0 0x0 0x7>;
  510. interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 143
  511. IRQ_TYPE_LEVEL_HIGH>,
  512. <0 0 0 2 &gicv2 GIC_SPI 144
  513. IRQ_TYPE_LEVEL_HIGH>,
  514. <0 0 0 3 &gicv2 GIC_SPI 145
  515. IRQ_TYPE_LEVEL_HIGH>,
  516. <0 0 0 4 &gicv2 GIC_SPI 146
  517. IRQ_TYPE_LEVEL_HIGH>;
  518. msi-controller;
  519. msi-parent = <&pcie0>;
  520. ranges = <0x02000000 0x0 0xf8000000 0x6 0x00000000
  521. 0x0 0x04000000>;
  522. /*
  523. * The wrapper around the PCIe block has a bug
  524. * preventing it from accessing beyond the first 3GB of
  525. * memory.
  526. */
  527. dma-ranges = <0x02000000 0x0 0x00000000 0x0 0x00000000
  528. 0x0 0xc0000000>;
  529. brcm,enable-ssc;
  530. };
  531. genet: ethernet@7d580000 {
  532. compatible = "brcm,bcm2711-genet-v5";
  533. reg = <0x0 0x7d580000 0x10000>;
  534. #address-cells = <0x1>;
  535. #size-cells = <0x1>;
  536. interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>,
  537. <GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>;
  538. status = "disabled";
  539. genet_mdio: mdio@e14 {
  540. compatible = "brcm,genet-mdio-v5";
  541. reg = <0xe14 0x8>;
  542. reg-names = "mdio";
  543. #address-cells = <0x1>;
  544. #size-cells = <0x0>;
  545. };
  546. };
  547. v3d: gpu@7ec00000 {
  548. compatible = "brcm,2711-v3d";
  549. reg = <0x0 0x7ec00000 0x4000>,
  550. <0x0 0x7ec04000 0x4000>;
  551. reg-names = "hub", "core0";
  552. power-domains = <&pm BCM2835_POWER_DOMAIN_GRAFX_V3D>;
  553. resets = <&pm BCM2835_RESET_V3D>;
  554. interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
  555. };
  556. };
  557. };
  558. &clk_osc {
  559. clock-frequency = <54000000>;
  560. };
  561. &clocks {
  562. compatible = "brcm,bcm2711-cprman";
  563. };
  564. &cpu_thermal {
  565. coefficients = <(-487) 410040>;
  566. thermal-sensors = <&thermal>;
  567. };
  568. &dsi0 {
  569. interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
  570. };
  571. &dsi1 {
  572. interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
  573. compatible = "brcm,bcm2711-dsi1";
  574. };
  575. &gpio {
  576. compatible = "brcm,bcm2711-gpio";
  577. interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>,
  578. <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>,
  579. <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>,
  580. <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
  581. gpio-ranges = <&gpio 0 0 58>;
  582. gpclk0_gpio49: gpclk0_gpio49 {
  583. pin-gpclk {
  584. pins = "gpio49";
  585. function = "alt1";
  586. bias-disable;
  587. };
  588. };
  589. gpclk1_gpio50: gpclk1_gpio50 {
  590. pin-gpclk {
  591. pins = "gpio50";
  592. function = "alt1";
  593. bias-disable;
  594. };
  595. };
  596. gpclk2_gpio51: gpclk2_gpio51 {
  597. pin-gpclk {
  598. pins = "gpio51";
  599. function = "alt1";
  600. bias-disable;
  601. };
  602. };
  603. i2c0_gpio46: i2c0_gpio46 {
  604. pin-sda {
  605. function = "alt0";
  606. pins = "gpio46";
  607. bias-pull-up;
  608. };
  609. pin-scl {
  610. function = "alt0";
  611. pins = "gpio47";
  612. bias-disable;
  613. };
  614. };
  615. i2c1_gpio46: i2c1_gpio46 {
  616. pin-sda {
  617. function = "alt1";
  618. pins = "gpio46";
  619. bias-pull-up;
  620. };
  621. pin-scl {
  622. function = "alt1";
  623. pins = "gpio47";
  624. bias-disable;
  625. };
  626. };
  627. i2c3_gpio2: i2c3_gpio2 {
  628. pin-sda {
  629. function = "alt5";
  630. pins = "gpio2";
  631. bias-pull-up;
  632. };
  633. pin-scl {
  634. function = "alt5";
  635. pins = "gpio3";
  636. bias-disable;
  637. };
  638. };
  639. i2c3_gpio4: i2c3_gpio4 {
  640. pin-sda {
  641. function = "alt5";
  642. pins = "gpio4";
  643. bias-pull-up;
  644. };
  645. pin-scl {
  646. function = "alt5";
  647. pins = "gpio5";
  648. bias-disable;
  649. };
  650. };
  651. i2c4_gpio6: i2c4_gpio6 {
  652. pin-sda {
  653. function = "alt5";
  654. pins = "gpio6";
  655. bias-pull-up;
  656. };
  657. pin-scl {
  658. function = "alt5";
  659. pins = "gpio7";
  660. bias-disable;
  661. };
  662. };
  663. i2c4_gpio8: i2c4_gpio8 {
  664. pin-sda {
  665. function = "alt5";
  666. pins = "gpio8";
  667. bias-pull-up;
  668. };
  669. pin-scl {
  670. function = "alt5";
  671. pins = "gpio9";
  672. bias-disable;
  673. };
  674. };
  675. i2c5_gpio10: i2c5_gpio10 {
  676. pin-sda {
  677. function = "alt5";
  678. pins = "gpio10";
  679. bias-pull-up;
  680. };
  681. pin-scl {
  682. function = "alt5";
  683. pins = "gpio11";
  684. bias-disable;
  685. };
  686. };
  687. i2c5_gpio12: i2c5_gpio12 {
  688. pin-sda {
  689. function = "alt5";
  690. pins = "gpio12";
  691. bias-pull-up;
  692. };
  693. pin-scl {
  694. function = "alt5";
  695. pins = "gpio13";
  696. bias-disable;
  697. };
  698. };
  699. i2c6_gpio0: i2c6_gpio0 {
  700. pin-sda {
  701. function = "alt5";
  702. pins = "gpio0";
  703. bias-pull-up;
  704. };
  705. pin-scl {
  706. function = "alt5";
  707. pins = "gpio1";
  708. bias-disable;
  709. };
  710. };
  711. i2c6_gpio22: i2c6_gpio22 {
  712. pin-sda {
  713. function = "alt5";
  714. pins = "gpio22";
  715. bias-pull-up;
  716. };
  717. pin-scl {
  718. function = "alt5";
  719. pins = "gpio23";
  720. bias-disable;
  721. };
  722. };
  723. i2c_slave_gpio8: i2c_slave_gpio8 {
  724. pins-i2c-slave {
  725. pins = "gpio8",
  726. "gpio9",
  727. "gpio10",
  728. "gpio11";
  729. function = "alt3";
  730. };
  731. };
  732. jtag_gpio48: jtag_gpio48 {
  733. pins-jtag {
  734. pins = "gpio48",
  735. "gpio49",
  736. "gpio50",
  737. "gpio51",
  738. "gpio52",
  739. "gpio53";
  740. function = "alt4";
  741. };
  742. };
  743. mii_gpio28: mii_gpio28 {
  744. pins-mii {
  745. pins = "gpio28",
  746. "gpio29",
  747. "gpio30",
  748. "gpio31";
  749. function = "alt4";
  750. };
  751. };
  752. mii_gpio36: mii_gpio36 {
  753. pins-mii {
  754. pins = "gpio36",
  755. "gpio37",
  756. "gpio38",
  757. "gpio39";
  758. function = "alt5";
  759. };
  760. };
  761. pcm_gpio50: pcm_gpio50 {
  762. pins-pcm {
  763. pins = "gpio50",
  764. "gpio51",
  765. "gpio52",
  766. "gpio53";
  767. function = "alt2";
  768. };
  769. };
  770. pwm0_0_gpio12: pwm0_0_gpio12 {
  771. pin-pwm {
  772. pins = "gpio12";
  773. function = "alt0";
  774. bias-disable;
  775. };
  776. };
  777. pwm0_0_gpio18: pwm0_0_gpio18 {
  778. pin-pwm {
  779. pins = "gpio18";
  780. function = "alt5";
  781. bias-disable;
  782. };
  783. };
  784. pwm1_0_gpio40: pwm1_0_gpio40 {
  785. pin-pwm {
  786. pins = "gpio40";
  787. function = "alt0";
  788. bias-disable;
  789. };
  790. };
  791. pwm0_1_gpio13: pwm0_1_gpio13 {
  792. pin-pwm {
  793. pins = "gpio13";
  794. function = "alt0";
  795. bias-disable;
  796. };
  797. };
  798. pwm0_1_gpio19: pwm0_1_gpio19 {
  799. pin-pwm {
  800. pins = "gpio19";
  801. function = "alt5";
  802. bias-disable;
  803. };
  804. };
  805. pwm1_1_gpio41: pwm1_1_gpio41 {
  806. pin-pwm {
  807. pins = "gpio41";
  808. function = "alt0";
  809. bias-disable;
  810. };
  811. };
  812. pwm0_1_gpio45: pwm0_1_gpio45 {
  813. pin-pwm {
  814. pins = "gpio45";
  815. function = "alt0";
  816. bias-disable;
  817. };
  818. };
  819. pwm0_0_gpio52: pwm0_0_gpio52 {
  820. pin-pwm {
  821. pins = "gpio52";
  822. function = "alt1";
  823. bias-disable;
  824. };
  825. };
  826. pwm0_1_gpio53: pwm0_1_gpio53 {
  827. pin-pwm {
  828. pins = "gpio53";
  829. function = "alt1";
  830. bias-disable;
  831. };
  832. };
  833. rgmii_gpio35: rgmii_gpio35 {
  834. pin-start-stop {
  835. pins = "gpio35";
  836. function = "alt4";
  837. };
  838. pin-rx-ok {
  839. pins = "gpio36";
  840. function = "alt4";
  841. };
  842. };
  843. rgmii_irq_gpio34: rgmii_irq_gpio34 {
  844. pin-irq {
  845. pins = "gpio34";
  846. function = "alt5";
  847. };
  848. };
  849. rgmii_irq_gpio39: rgmii_irq_gpio39 {
  850. pin-irq {
  851. pins = "gpio39";
  852. function = "alt4";
  853. };
  854. };
  855. rgmii_mdio_gpio28: rgmii_mdio_gpio28 {
  856. pins-mdio {
  857. pins = "gpio28",
  858. "gpio29";
  859. function = "alt5";
  860. };
  861. };
  862. rgmii_mdio_gpio37: rgmii_mdio_gpio37 {
  863. pins-mdio {
  864. pins = "gpio37",
  865. "gpio38";
  866. function = "alt4";
  867. };
  868. };
  869. spi0_gpio46: spi0_gpio46 {
  870. pins-spi {
  871. pins = "gpio46",
  872. "gpio47",
  873. "gpio48",
  874. "gpio49";
  875. function = "alt2";
  876. };
  877. };
  878. spi2_gpio46: spi2_gpio46 {
  879. pins-spi {
  880. pins = "gpio46",
  881. "gpio47",
  882. "gpio48",
  883. "gpio49",
  884. "gpio50";
  885. function = "alt5";
  886. };
  887. };
  888. spi3_gpio0: spi3_gpio0 {
  889. pins-spi {
  890. pins = "gpio0",
  891. "gpio1",
  892. "gpio2",
  893. "gpio3";
  894. function = "alt3";
  895. };
  896. };
  897. spi4_gpio4: spi4_gpio4 {
  898. pins-spi {
  899. pins = "gpio4",
  900. "gpio5",
  901. "gpio6",
  902. "gpio7";
  903. function = "alt3";
  904. };
  905. };
  906. spi5_gpio12: spi5_gpio12 {
  907. pins-spi {
  908. pins = "gpio12",
  909. "gpio13",
  910. "gpio14",
  911. "gpio15";
  912. function = "alt3";
  913. };
  914. };
  915. spi6_gpio18: spi6_gpio18 {
  916. pins-spi {
  917. pins = "gpio18",
  918. "gpio19",
  919. "gpio20",
  920. "gpio21";
  921. function = "alt3";
  922. };
  923. };
  924. uart2_gpio0: uart2_gpio0 {
  925. pin-tx {
  926. pins = "gpio0";
  927. function = "alt4";
  928. bias-disable;
  929. };
  930. pin-rx {
  931. pins = "gpio1";
  932. function = "alt4";
  933. bias-pull-up;
  934. };
  935. };
  936. uart2_ctsrts_gpio2: uart2_ctsrts_gpio2 {
  937. pin-cts {
  938. pins = "gpio2";
  939. function = "alt4";
  940. bias-pull-up;
  941. };
  942. pin-rts {
  943. pins = "gpio3";
  944. function = "alt4";
  945. bias-disable;
  946. };
  947. };
  948. uart3_gpio4: uart3_gpio4 {
  949. pin-tx {
  950. pins = "gpio4";
  951. function = "alt4";
  952. bias-disable;
  953. };
  954. pin-rx {
  955. pins = "gpio5";
  956. function = "alt4";
  957. bias-pull-up;
  958. };
  959. };
  960. uart3_ctsrts_gpio6: uart3_ctsrts_gpio6 {
  961. pin-cts {
  962. pins = "gpio6";
  963. function = "alt4";
  964. bias-pull-up;
  965. };
  966. pin-rts {
  967. pins = "gpio7";
  968. function = "alt4";
  969. bias-disable;
  970. };
  971. };
  972. uart4_gpio8: uart4_gpio8 {
  973. pin-tx {
  974. pins = "gpio8";
  975. function = "alt4";
  976. bias-disable;
  977. };
  978. pin-rx {
  979. pins = "gpio9";
  980. function = "alt4";
  981. bias-pull-up;
  982. };
  983. };
  984. uart4_ctsrts_gpio10: uart4_ctsrts_gpio10 {
  985. pin-cts {
  986. pins = "gpio10";
  987. function = "alt4";
  988. bias-pull-up;
  989. };
  990. pin-rts {
  991. pins = "gpio11";
  992. function = "alt4";
  993. bias-disable;
  994. };
  995. };
  996. uart5_gpio12: uart5_gpio12 {
  997. pin-tx {
  998. pins = "gpio12";
  999. function = "alt4";
  1000. bias-disable;
  1001. };
  1002. pin-rx {
  1003. pins = "gpio13";
  1004. function = "alt4";
  1005. bias-pull-up;
  1006. };
  1007. };
  1008. uart5_ctsrts_gpio14: uart5_ctsrts_gpio14 {
  1009. pin-cts {
  1010. pins = "gpio14";
  1011. function = "alt4";
  1012. bias-pull-up;
  1013. };
  1014. pin-rts {
  1015. pins = "gpio15";
  1016. function = "alt4";
  1017. bias-disable;
  1018. };
  1019. };
  1020. };
  1021. &rmem {
  1022. #address-cells = <2>;
  1023. };
  1024. &cma {
  1025. /*
  1026. * arm64 reserves the CMA by default somewhere in ZONE_DMA32,
  1027. * that's not good enough for the BCM2711 as some devices can
  1028. * only address the lower 1G of memory (ZONE_DMA).
  1029. */
  1030. alloc-ranges = <0x0 0x00000000 0x40000000>;
  1031. };
  1032. &i2c0 {
  1033. compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
  1034. interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
  1035. };
  1036. &i2c1 {
  1037. compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
  1038. interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
  1039. };
  1040. &mailbox {
  1041. interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
  1042. };
  1043. &sdhci {
  1044. interrupts = <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>;
  1045. };
  1046. &sdhost {
  1047. interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
  1048. };
  1049. &spi {
  1050. interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
  1051. };
  1052. &spi1 {
  1053. interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
  1054. };
  1055. &spi2 {
  1056. interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
  1057. };
  1058. &system_timer {
  1059. interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>,
  1060. <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>,
  1061. <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>,
  1062. <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
  1063. };
  1064. &txp {
  1065. interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
  1066. };
  1067. &uart0 {
  1068. interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
  1069. };
  1070. &uart1 {
  1071. interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
  1072. };
  1073. &usb {
  1074. interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
  1075. };
  1076. &vec {
  1077. compatible = "brcm,bcm2711-vec";
  1078. interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
  1079. };