1b3a9737cSLeo Yan/* 2b3a9737cSLeo Yan * Copyright (c) 2020-2024, Arm Limited. All rights reserved. 3b3a9737cSLeo Yan * 4b3a9737cSLeo Yan * SPDX-License-Identifier: BSD-3-Clause 5b3a9737cSLeo Yan */ 6b3a9737cSLeo Yan 7*79c6ede0SLeo Yan/* If SCMI power domain control is enabled */ 8*79c6ede0SLeo Yan#if TC_SCMI_PD_CTRL_EN 9*79c6ede0SLeo Yan#define GPU_SCMI_PD_IDX (PLAT_MAX_CPUS_PER_CLUSTER + 1) 10*79c6ede0SLeo Yan#define DPU_SCMI_PD_IDX (PLAT_MAX_CPUS_PER_CLUSTER + 2) 11*79c6ede0SLeo Yan#endif /* TC_SCMI_PD_CTRL_EN */ 12*79c6ede0SLeo Yan 13*79c6ede0SLeo Yan/* Use SCMI controlled clocks */ 14*79c6ede0SLeo Yan#if TC_DPU_USE_SCMI_CLK 15*79c6ede0SLeo Yan#define DPU_CLK_ATTR1 \ 16*79c6ede0SLeo Yan clocks = <&scmi_clk 0>; \ 17*79c6ede0SLeo Yan clock-names = "aclk" 18*79c6ede0SLeo Yan 19*79c6ede0SLeo Yan#define DPU_CLK_ATTR2 \ 20*79c6ede0SLeo Yan clocks = <&scmi_clk 1>; \ 21*79c6ede0SLeo Yan clock-names = "pxclk" 22*79c6ede0SLeo Yan 23*79c6ede0SLeo Yan#define DPU_CLK_ATTR3 \ 24*79c6ede0SLeo Yan clocks = <&scmi_clk 2>; \ 25*79c6ede0SLeo Yan clock-names = "pxclk" \ 26*79c6ede0SLeo Yan/* Use fixed clocks */ 27*79c6ede0SLeo Yan#else /* !TC_DPU_USE_SCMI_CLK */ 28*79c6ede0SLeo Yan#define DPU_CLK_ATTR1 \ 29*79c6ede0SLeo Yan clocks = <&dpu_aclk>; \ 30*79c6ede0SLeo Yan clock-names = "aclk" 31*79c6ede0SLeo Yan 32*79c6ede0SLeo Yan#define DPU_CLK_ATTR2 \ 33*79c6ede0SLeo Yan clocks = <&dpu_pixel_clk>, <&dpu_aclk>; \ 34*79c6ede0SLeo Yan clock-names = "pxclk", "aclk" 35*79c6ede0SLeo Yan 36*79c6ede0SLeo Yan#define DPU_CLK_ATTR3 DPU_CLK_ATTR2 37*79c6ede0SLeo Yan#endif /* !TC_DPU_USE_SCMI_CLK */ 38b3a9737cSLeo Yan 39b3a9737cSLeo Yan/ { 40b3a9737cSLeo Yan compatible = "arm,tc"; 41b3a9737cSLeo Yan interrupt-parent = <&gic>; 42b3a9737cSLeo Yan #address-cells = <2>; 43b3a9737cSLeo Yan #size-cells = <2>; 44b3a9737cSLeo Yan 45b3a9737cSLeo Yan aliases { 46b3a9737cSLeo Yan serial0 = &os_uart; 47b3a9737cSLeo Yan }; 48b3a9737cSLeo Yan 49b3a9737cSLeo Yan chosen { 50b3a9737cSLeo Yan stdout-path = STDOUT_PATH; 51b3a9737cSLeo Yan /* 52b3a9737cSLeo Yan * Add some dummy entropy for Linux so it 53b3a9737cSLeo Yan * doesn't delay the boot waiting for it. 54b3a9737cSLeo Yan */ 55b3a9737cSLeo Yan rng-seed = <0x01 0x02 0x04 0x05 0x06 0x07 0x08 \ 56b3a9737cSLeo Yan 0x01 0x02 0x04 0x05 0x06 0x07 0x08 \ 57b3a9737cSLeo Yan 0x01 0x02 0x04 0x05 0x06 0x07 0x08 \ 58b3a9737cSLeo Yan 0x01 0x02 0x04 0x05 0x06 0x07 0x08 \ 59b3a9737cSLeo Yan 0x01 0x02 0x04 0x05 0x06 0x07 0x08 \ 60b3a9737cSLeo Yan 0x01 0x02 0x04 0x05 0x06 0x07 0x08 \ 61b3a9737cSLeo Yan 0x01 0x02 0x04 0x05 0x06 0x07 0x08 \ 62b3a9737cSLeo Yan 0x01 0x02 0x04 0x05 0x06 0x07 0x08 >; 63b3a9737cSLeo Yan }; 64b3a9737cSLeo Yan 65b3a9737cSLeo Yan cpus { 66b3a9737cSLeo Yan #address-cells = <1>; 67b3a9737cSLeo Yan #size-cells = <0>; 68b3a9737cSLeo Yan 69b3a9737cSLeo Yan cpu-map { 70b3a9737cSLeo Yan cluster0 { 71b3a9737cSLeo Yan core0 { 72b3a9737cSLeo Yan cpu = <&CPU0>; 73b3a9737cSLeo Yan }; 74b3a9737cSLeo Yan core1 { 75b3a9737cSLeo Yan cpu = <&CPU1>; 76b3a9737cSLeo Yan }; 77b3a9737cSLeo Yan core2 { 78b3a9737cSLeo Yan cpu = <&CPU2>; 79b3a9737cSLeo Yan }; 80b3a9737cSLeo Yan core3 { 81b3a9737cSLeo Yan cpu = <&CPU3>; 82b3a9737cSLeo Yan }; 83b3a9737cSLeo Yan core4 { 84b3a9737cSLeo Yan cpu = <&CPU4>; 85b3a9737cSLeo Yan }; 86b3a9737cSLeo Yan core5 { 87b3a9737cSLeo Yan cpu = <&CPU5>; 88b3a9737cSLeo Yan }; 89b3a9737cSLeo Yan core6 { 90b3a9737cSLeo Yan cpu = <&CPU6>; 91b3a9737cSLeo Yan }; 92b3a9737cSLeo Yan core7 { 93b3a9737cSLeo Yan cpu = <&CPU7>; 94b3a9737cSLeo Yan }; 95b3a9737cSLeo Yan }; 96b3a9737cSLeo Yan }; 97b3a9737cSLeo Yan 98b3a9737cSLeo Yan /* 99b3a9737cSLeo Yan * The timings below are just to demonstrate working cpuidle. 100b3a9737cSLeo Yan * These values may be inaccurate. 101b3a9737cSLeo Yan */ 102b3a9737cSLeo Yan idle-states { 103b3a9737cSLeo Yan entry-method = "psci"; 104b3a9737cSLeo Yan 105b3a9737cSLeo Yan CPU_SLEEP_0: cpu-sleep-0 { 106b3a9737cSLeo Yan compatible = "arm,idle-state"; 107b3a9737cSLeo Yan arm,psci-suspend-param = <0x0010000>; 108b3a9737cSLeo Yan local-timer-stop; 109b3a9737cSLeo Yan entry-latency-us = <300>; 110b3a9737cSLeo Yan exit-latency-us = <1200>; 111b3a9737cSLeo Yan min-residency-us = <2000>; 112b3a9737cSLeo Yan }; 113b3a9737cSLeo Yan CLUSTER_SLEEP_0: cluster-sleep-0 { 114b3a9737cSLeo Yan compatible = "arm,idle-state"; 115b3a9737cSLeo Yan arm,psci-suspend-param = <0x1010000>; 116b3a9737cSLeo Yan local-timer-stop; 117b3a9737cSLeo Yan entry-latency-us = <400>; 118b3a9737cSLeo Yan exit-latency-us = <1200>; 119b3a9737cSLeo Yan min-residency-us = <2500>; 120b3a9737cSLeo Yan }; 121b3a9737cSLeo Yan }; 122b3a9737cSLeo Yan 123b3a9737cSLeo Yan amus { 124b3a9737cSLeo Yan amu: amu-0 { 125b3a9737cSLeo Yan #address-cells = <1>; 126b3a9737cSLeo Yan #size-cells = <0>; 127b3a9737cSLeo Yan 128b3a9737cSLeo Yan mpmm_gear0: counter@0 { 129b3a9737cSLeo Yan reg = <0>; 130b3a9737cSLeo Yan enable-at-el3; 131b3a9737cSLeo Yan }; 132b3a9737cSLeo Yan 133b3a9737cSLeo Yan mpmm_gear1: counter@1 { 134b3a9737cSLeo Yan reg = <1>; 135b3a9737cSLeo Yan enable-at-el3; 136b3a9737cSLeo Yan }; 137b3a9737cSLeo Yan 138b3a9737cSLeo Yan mpmm_gear2: counter@2 { 139b3a9737cSLeo Yan reg = <2>; 140b3a9737cSLeo Yan enable-at-el3; 141b3a9737cSLeo Yan }; 142b3a9737cSLeo Yan }; 143b3a9737cSLeo Yan }; 144b3a9737cSLeo Yan 145b3a9737cSLeo Yan CPU0:cpu@0 { 146b3a9737cSLeo Yan device_type = "cpu"; 147b3a9737cSLeo Yan compatible = "arm,armv8"; 148b3a9737cSLeo Yan reg = <0x0>; 149b3a9737cSLeo Yan enable-method = "psci"; 150b3a9737cSLeo Yan clocks = <&scmi_dvfs 0>; 151b3a9737cSLeo Yan cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; 152b3a9737cSLeo Yan capacity-dmips-mhz = <LIT_CAPACITY>; 153b3a9737cSLeo Yan amu = <&amu>; 154b3a9737cSLeo Yan supports-mpmm; 155b3a9737cSLeo Yan }; 156b3a9737cSLeo Yan 157b3a9737cSLeo Yan CPU1:cpu@100 { 158b3a9737cSLeo Yan device_type = "cpu"; 159b3a9737cSLeo Yan compatible = "arm,armv8"; 160b3a9737cSLeo Yan reg = <0x100>; 161b3a9737cSLeo Yan enable-method = "psci"; 162b3a9737cSLeo Yan clocks = <&scmi_dvfs 0>; 163b3a9737cSLeo Yan cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; 164b3a9737cSLeo Yan capacity-dmips-mhz = <LIT_CAPACITY>; 165b3a9737cSLeo Yan amu = <&amu>; 166b3a9737cSLeo Yan supports-mpmm; 167b3a9737cSLeo Yan }; 168b3a9737cSLeo Yan 169b3a9737cSLeo Yan CPU2:cpu@200 { 170b3a9737cSLeo Yan device_type = "cpu"; 171b3a9737cSLeo Yan compatible = "arm,armv8"; 172b3a9737cSLeo Yan reg = <0x200>; 173b3a9737cSLeo Yan enable-method = "psci"; 174b3a9737cSLeo Yan cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; 175b3a9737cSLeo Yan amu = <&amu>; 176b3a9737cSLeo Yan supports-mpmm; 177b3a9737cSLeo Yan }; 178b3a9737cSLeo Yan 179b3a9737cSLeo Yan CPU3:cpu@300 { 180b3a9737cSLeo Yan device_type = "cpu"; 181b3a9737cSLeo Yan compatible = "arm,armv8"; 182b3a9737cSLeo Yan reg = <0x300>; 183b3a9737cSLeo Yan enable-method = "psci"; 184b3a9737cSLeo Yan cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; 185b3a9737cSLeo Yan amu = <&amu>; 186b3a9737cSLeo Yan supports-mpmm; 187b3a9737cSLeo Yan }; 188b3a9737cSLeo Yan 189b3a9737cSLeo Yan CPU4:cpu@400 { 190b3a9737cSLeo Yan device_type = "cpu"; 191b3a9737cSLeo Yan compatible = "arm,armv8"; 192b3a9737cSLeo Yan reg = <0x400>; 193b3a9737cSLeo Yan enable-method = "psci"; 194b3a9737cSLeo Yan clocks = <&scmi_dvfs 1>; 195b3a9737cSLeo Yan cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; 196b3a9737cSLeo Yan capacity-dmips-mhz = <MID_CAPACITY>; 197b3a9737cSLeo Yan amu = <&amu>; 198b3a9737cSLeo Yan supports-mpmm; 199b3a9737cSLeo Yan }; 200b3a9737cSLeo Yan 201b3a9737cSLeo Yan CPU5:cpu@500 { 202b3a9737cSLeo Yan device_type = "cpu"; 203b3a9737cSLeo Yan compatible = "arm,armv8"; 204b3a9737cSLeo Yan reg = <0x500>; 205b3a9737cSLeo Yan enable-method = "psci"; 206b3a9737cSLeo Yan clocks = <&scmi_dvfs 1>; 207b3a9737cSLeo Yan cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; 208b3a9737cSLeo Yan capacity-dmips-mhz = <MID_CAPACITY>; 209b3a9737cSLeo Yan amu = <&amu>; 210b3a9737cSLeo Yan supports-mpmm; 211b3a9737cSLeo Yan }; 212b3a9737cSLeo Yan 213b3a9737cSLeo Yan CPU6:cpu@600 { 214b3a9737cSLeo Yan device_type = "cpu"; 215b3a9737cSLeo Yan compatible = "arm,armv8"; 216b3a9737cSLeo Yan reg = <0x600>; 217b3a9737cSLeo Yan enable-method = "psci"; 218b3a9737cSLeo Yan cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; 219b3a9737cSLeo Yan amu = <&amu>; 220b3a9737cSLeo Yan supports-mpmm; 221b3a9737cSLeo Yan }; 222b3a9737cSLeo Yan 223b3a9737cSLeo Yan CPU7:cpu@700 { 224b3a9737cSLeo Yan device_type = "cpu"; 225b3a9737cSLeo Yan compatible = "arm,armv8"; 226b3a9737cSLeo Yan reg = <0x700>; 227b3a9737cSLeo Yan enable-method = "psci"; 228b3a9737cSLeo Yan cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; 229b3a9737cSLeo Yan amu = <&amu>; 230b3a9737cSLeo Yan supports-mpmm; 231b3a9737cSLeo Yan }; 232b3a9737cSLeo Yan }; 233b3a9737cSLeo Yan 234b3a9737cSLeo Yan reserved-memory { 235b3a9737cSLeo Yan #address-cells = <2>; 236b3a9737cSLeo Yan #size-cells = <2>; 237b3a9737cSLeo Yan ranges; 238b3a9737cSLeo Yan 239b3a9737cSLeo Yan linux,cma { 240b3a9737cSLeo Yan compatible = "shared-dma-pool"; 241b3a9737cSLeo Yan reusable; 242b3a9737cSLeo Yan size = <0x0 0x8000000>; 243b3a9737cSLeo Yan linux,cma-default; 244b3a9737cSLeo Yan }; 245b3a9737cSLeo Yan 246b3a9737cSLeo Yan optee { 247b3a9737cSLeo Yan compatible = "restricted-dma-pool"; 248b3a9737cSLeo Yan reg = <0x0 TC_NS_OPTEE_BASE 0x0 TC_NS_OPTEE_SIZE>; 249b3a9737cSLeo Yan }; 250b3a9737cSLeo Yan 251b3a9737cSLeo Yan fwu_mm { 252b3a9737cSLeo Yan reg = <0x0 TC_NS_FWU_BASE 0x0 TC_NS_FWU_SIZE>; 253b3a9737cSLeo Yan no-map; 254b3a9737cSLeo Yan }; 255b3a9737cSLeo Yan }; 256b3a9737cSLeo Yan 257b3a9737cSLeo Yan memory { 258b3a9737cSLeo Yan device_type = "memory"; 259b3a9737cSLeo Yan reg = <0x0 TC_NS_DRAM1_BASE 0x0 TC_NS_DRAM1_SIZE>, 260b3a9737cSLeo Yan <HI(PLAT_ARM_DRAM2_BASE) LO(PLAT_ARM_DRAM2_BASE) 261b3a9737cSLeo Yan HI(TC_NS_DRAM2_SIZE) LO(TC_NS_DRAM2_SIZE)>; 262b3a9737cSLeo Yan }; 263b3a9737cSLeo Yan 264b3a9737cSLeo Yan psci { 265b3a9737cSLeo Yan compatible = "arm,psci-1.0", "arm,psci-0.2"; 266b3a9737cSLeo Yan method = "smc"; 267b3a9737cSLeo Yan }; 268b3a9737cSLeo Yan 269b3a9737cSLeo Yan cpu-pmu { 270b3a9737cSLeo Yan compatible = "arm,armv8-pmuv3"; 271b3a9737cSLeo Yan interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH>; 272b3a9737cSLeo Yan }; 273b3a9737cSLeo Yan 274b3a9737cSLeo Yan sram: sram@6000000 { 275b3a9737cSLeo Yan compatible = "mmio-sram"; 276b3a9737cSLeo Yan reg = <0x0 PLAT_ARM_NSRAM_BASE 0x0 PLAT_ARM_NSRAM_SIZE>; 277b3a9737cSLeo Yan 278b3a9737cSLeo Yan #address-cells = <1>; 279b3a9737cSLeo Yan #size-cells = <1>; 280b3a9737cSLeo Yan ranges = <0 0x0 PLAT_ARM_NSRAM_BASE PLAT_ARM_NSRAM_SIZE>; 281b3a9737cSLeo Yan 282b3a9737cSLeo Yan cpu_scp_scmi_mem: scp-shmem@0 { 283b3a9737cSLeo Yan compatible = "arm,scmi-shmem"; 284b3a9737cSLeo Yan reg = <0x0 0x80>; 285b3a9737cSLeo Yan }; 286b3a9737cSLeo Yan }; 287b3a9737cSLeo Yan 288b3a9737cSLeo Yan mbox_db_rx: mhu@MHU_RX_ADDR { 289b3a9737cSLeo Yan compatible = "arm,mhuv2-rx","arm,primecell"; 290b3a9737cSLeo Yan reg = <0x0 ADDRESSIFY(MHU_RX_ADDR) 0x0 0x1000>; 291b3a9737cSLeo Yan clocks = <&soc_refclk>; 292b3a9737cSLeo Yan clock-names = "apb_pclk"; 293b3a9737cSLeo Yan #mbox-cells = <2>; 294b3a9737cSLeo Yan interrupts = <GIC_SPI INT_MBOX_RX IRQ_TYPE_LEVEL_HIGH>; 295b3a9737cSLeo Yan interrupt-names = "mhu_rx"; 296b3a9737cSLeo Yan mhu-protocol = "doorbell"; 297b3a9737cSLeo Yan arm,mhuv2-protocols = <0 1>; 298b3a9737cSLeo Yan }; 299b3a9737cSLeo Yan 300b3a9737cSLeo Yan mbox_db_tx: mhu@MHU_TX_ADDR { 301b3a9737cSLeo Yan compatible = "arm,mhuv2-tx","arm,primecell"; 302b3a9737cSLeo Yan reg = <0x0 ADDRESSIFY(MHU_TX_ADDR) 0x0 0x1000>; 303b3a9737cSLeo Yan clocks = <&soc_refclk>; 304b3a9737cSLeo Yan clock-names = "apb_pclk"; 305b3a9737cSLeo Yan #mbox-cells = <2>; 306b3a9737cSLeo Yan interrupt-names = "mhu_tx"; 307b3a9737cSLeo Yan mhu-protocol = "doorbell"; 308b3a9737cSLeo Yan arm,mhuv2-protocols = <0 1>; 309b3a9737cSLeo Yan }; 310b3a9737cSLeo Yan 311b3a9737cSLeo Yan scmi { 312b3a9737cSLeo Yan compatible = "arm,scmi"; 313b3a9737cSLeo Yan mbox-names = "tx", "rx"; 314b3a9737cSLeo Yan mboxes = <&mbox_db_tx 0 0 &mbox_db_rx 0 0 >; 315b3a9737cSLeo Yan shmem = <&cpu_scp_scmi_mem &cpu_scp_scmi_mem>; 316b3a9737cSLeo Yan #address-cells = <1>; 317b3a9737cSLeo Yan #size-cells = <0>; 318b3a9737cSLeo Yan 319b3a9737cSLeo Yan#if TC_SCMI_PD_CTRL_EN 320b3a9737cSLeo Yan scmi_devpd: protocol@11 { 321b3a9737cSLeo Yan reg = <0x11>; 322b3a9737cSLeo Yan #power-domain-cells = <1>; 323b3a9737cSLeo Yan }; 324b3a9737cSLeo Yan#endif /* TC_SCMI_PD_CTRL_EN */ 325b3a9737cSLeo Yan 326b3a9737cSLeo Yan scmi_dvfs: protocol@13 { 327b3a9737cSLeo Yan reg = <0x13>; 328b3a9737cSLeo Yan #clock-cells = <1>; 329b3a9737cSLeo Yan }; 330b3a9737cSLeo Yan 331b3a9737cSLeo Yan scmi_clk: protocol@14 { 332b3a9737cSLeo Yan reg = <0x14>; 333b3a9737cSLeo Yan #clock-cells = <1>; 334b3a9737cSLeo Yan }; 335b3a9737cSLeo Yan }; 336b3a9737cSLeo Yan 337b3a9737cSLeo Yan gic: interrupt-controller@GIC_CTRL_ADDR { 338b3a9737cSLeo Yan compatible = "arm,gic-v3"; 339b3a9737cSLeo Yan #address-cells = <2>; 340b3a9737cSLeo Yan #interrupt-cells = <3>; 341b3a9737cSLeo Yan #size-cells = <2>; 342b3a9737cSLeo Yan ranges; 343b3a9737cSLeo Yan interrupt-controller; 344b3a9737cSLeo Yan reg = <0x0 0x30000000 0 0x10000>, /* GICD */ 345b3a9737cSLeo Yan <0x0 0x30080000 0 GIC_GICR_OFFSET>; /* GICR */ 346b3a9737cSLeo Yan interrupts = <GIC_PPI 0x9 IRQ_TYPE_LEVEL_LOW>; 347b3a9737cSLeo Yan }; 348b3a9737cSLeo Yan 349b3a9737cSLeo Yan timer { 350b3a9737cSLeo Yan compatible = "arm,armv8-timer"; 351b3a9737cSLeo Yan interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW>, 352b3a9737cSLeo Yan <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW>, 353b3a9737cSLeo Yan <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>, 354b3a9737cSLeo Yan <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>; 355b3a9737cSLeo Yan }; 356b3a9737cSLeo Yan 357b3a9737cSLeo Yan soc_refclk: refclk { 358b3a9737cSLeo Yan compatible = "fixed-clock"; 359b3a9737cSLeo Yan #clock-cells = <0>; 360b3a9737cSLeo Yan clock-frequency = <1000000000>; 361b3a9737cSLeo Yan clock-output-names = "apb_pclk"; 362b3a9737cSLeo Yan }; 363b3a9737cSLeo Yan 364b3a9737cSLeo Yan soc_refclk60mhz: refclk60mhz { 365b3a9737cSLeo Yan compatible = "fixed-clock"; 366b3a9737cSLeo Yan #clock-cells = <0>; 367b3a9737cSLeo Yan clock-frequency = <60000000>; 368b3a9737cSLeo Yan clock-output-names = "iofpga_clk"; 369b3a9737cSLeo Yan }; 370b3a9737cSLeo Yan 371b3a9737cSLeo Yan soc_uartclk: uartclk { 372b3a9737cSLeo Yan compatible = "fixed-clock"; 373b3a9737cSLeo Yan #clock-cells = <0>; 374b3a9737cSLeo Yan clock-frequency = <UARTCLK_FREQ>; 375b3a9737cSLeo Yan clock-output-names = "uartclk"; 376b3a9737cSLeo Yan }; 377b3a9737cSLeo Yan 378b3a9737cSLeo Yan /* soc_uart0 on FPGA, ap_ns_uart on FVP */ 379b3a9737cSLeo Yan os_uart: serial@2a400000 { 380b3a9737cSLeo Yan compatible = "arm,pl011", "arm,primecell"; 381b3a9737cSLeo Yan reg = <0x0 0x2A400000 0x0 UART_OFFSET>; 382b3a9737cSLeo Yan interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>; 383b3a9737cSLeo Yan clocks = <&soc_uartclk>, <&soc_refclk>; 384b3a9737cSLeo Yan clock-names = "uartclk", "apb_pclk"; 385b3a9737cSLeo Yan status = "okay"; 386b3a9737cSLeo Yan }; 387b3a9737cSLeo Yan 388*79c6ede0SLeo Yan#if !TC_DPU_USE_SCMI_CLK 389*79c6ede0SLeo Yan dpu_aclk: dpu_aclk { 390*79c6ede0SLeo Yan compatible = "fixed-clock"; 391*79c6ede0SLeo Yan #clock-cells = <0>; 392*79c6ede0SLeo Yan clock-frequency = <VENCODER_TIMING_CLK>; 393*79c6ede0SLeo Yan clock-output-names = "fpga:dpu_aclk"; 394*79c6ede0SLeo Yan }; 395*79c6ede0SLeo Yan 396*79c6ede0SLeo Yan dpu_pixel_clk: dpu-pixel-clk { 397*79c6ede0SLeo Yan compatible = "fixed-clock"; 398*79c6ede0SLeo Yan #clock-cells = <0>; 399*79c6ede0SLeo Yan clock-frequency = <VENCODER_TIMING_CLK>; 400*79c6ede0SLeo Yan clock-output-names = "pxclk"; 401*79c6ede0SLeo Yan }; 402*79c6ede0SLeo Yan#endif /* !TC_DPU_USE_SCMI_CLK */ 403*79c6ede0SLeo Yan 404b3a9737cSLeo Yan vencoder { 405b3a9737cSLeo Yan compatible = "drm,virtual-encoder"; 406b3a9737cSLeo Yan port { 407b3a9737cSLeo Yan vencoder_in: endpoint { 408b3a9737cSLeo Yan remote-endpoint = <&dp_pl0_out0>; 409b3a9737cSLeo Yan }; 410b3a9737cSLeo Yan }; 411b3a9737cSLeo Yan 412b3a9737cSLeo Yan display-timings { 413b3a9737cSLeo Yan timing-panel { 414b3a9737cSLeo Yan VENCODER_TIMING; 415b3a9737cSLeo Yan }; 416b3a9737cSLeo Yan }; 417b3a9737cSLeo Yan 418b3a9737cSLeo Yan }; 419b3a9737cSLeo Yan 420b3a9737cSLeo Yan ethernet@18000000 { 421b3a9737cSLeo Yan compatible = ETH_COMPATIBLE; 422b3a9737cSLeo Yan reg = <0x0 0x18000000 0x0 0x10000>; 423b3a9737cSLeo Yan interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>; 424b3a9737cSLeo Yan 425b3a9737cSLeo Yan /* FPGA only but will work on FVP. Keep for simplicity */ 426b3a9737cSLeo Yan phy-mode = "mii"; 427b3a9737cSLeo Yan reg-io-width = <2>; 428b3a9737cSLeo Yan smsc,irq-push-pull; 429b3a9737cSLeo Yan }; 430b3a9737cSLeo Yan 431b3a9737cSLeo Yan bp_clock24mhz: clock24mhz { 432b3a9737cSLeo Yan compatible = "fixed-clock"; 433b3a9737cSLeo Yan #clock-cells = <0>; 434b3a9737cSLeo Yan clock-frequency = <24000000>; 435b3a9737cSLeo Yan clock-output-names = "bp:clock24mhz"; 436b3a9737cSLeo Yan }; 437b3a9737cSLeo Yan 438b3a9737cSLeo Yan 439b3a9737cSLeo Yan sysreg: sysreg@1c010000 { 440b3a9737cSLeo Yan compatible = "arm,vexpress-sysreg"; 441b3a9737cSLeo Yan reg = <0x0 0x001c010000 0x0 0x1000>; 442b3a9737cSLeo Yan gpio-controller; 443b3a9737cSLeo Yan #gpio-cells = <2>; 444b3a9737cSLeo Yan }; 445b3a9737cSLeo Yan 446b3a9737cSLeo Yan fixed_3v3: v2m-3v3 { 447b3a9737cSLeo Yan compatible = "regulator-fixed"; 448b3a9737cSLeo Yan regulator-name = "3V3"; 449b3a9737cSLeo Yan regulator-min-microvolt = <3300000>; 450b3a9737cSLeo Yan regulator-max-microvolt = <3300000>; 451b3a9737cSLeo Yan regulator-always-on; 452b3a9737cSLeo Yan }; 453b3a9737cSLeo Yan 454b3a9737cSLeo Yan mmci@1c050000 { 455b3a9737cSLeo Yan compatible = "arm,pl180", "arm,primecell"; 456b3a9737cSLeo Yan reg = <0x0 0x001c050000 0x0 0x1000>; 457b3a9737cSLeo Yan interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>, 458b3a9737cSLeo Yan <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>; 459b3a9737cSLeo Yan MMC_REMOVABLE; 460b3a9737cSLeo Yan wp-gpios = <&sysreg 1 0>; 461b3a9737cSLeo Yan bus-width = <4>; 462b3a9737cSLeo Yan max-frequency = <25000000>; 463b3a9737cSLeo Yan vmmc-supply = <&fixed_3v3>; 464b3a9737cSLeo Yan clocks = <&bp_clock24mhz>, <&bp_clock24mhz>; 465b3a9737cSLeo Yan clock-names = "mclk", "apb_pclk"; 466b3a9737cSLeo Yan }; 467b3a9737cSLeo Yan 468b3a9737cSLeo Yan gpu_clk: gpu_clk { 469b3a9737cSLeo Yan compatible = "fixed-clock"; 470b3a9737cSLeo Yan #clock-cells = <0>; 471b3a9737cSLeo Yan clock-frequency = <1000000000>; 472b3a9737cSLeo Yan }; 473b3a9737cSLeo Yan 474b3a9737cSLeo Yan gpu_core_clk: gpu_core_clk { 475b3a9737cSLeo Yan compatible = "fixed-clock"; 476b3a9737cSLeo Yan #clock-cells = <0>; 477b3a9737cSLeo Yan clock-frequency = <1000000000>; 478b3a9737cSLeo Yan }; 479b3a9737cSLeo Yan 480b3a9737cSLeo Yan gpu: gpu@2d000000 { 481b3a9737cSLeo Yan compatible = "arm,mali-midgard"; 482b3a9737cSLeo Yan reg = <0x0 0x2d000000 0x0 0x200000>; 483b3a9737cSLeo Yan interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>, 484b3a9737cSLeo Yan <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>, 485b3a9737cSLeo Yan <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>; 486b3a9737cSLeo Yan interrupt-names = "JOB", "MMU", "GPU"; 487b3a9737cSLeo Yan clocks = <&gpu_core_clk>; 488b3a9737cSLeo Yan clock-names = "shadercores"; 489b3a9737cSLeo Yan#if TC_SCMI_PD_CTRL_EN 490b3a9737cSLeo Yan power-domains = <&scmi_devpd GPU_SCMI_PD_IDX>; 491b3a9737cSLeo Yan scmi-perf-domain = <3>; 492b3a9737cSLeo Yan#endif /* TC_SCMI_PD_CTRL_EN */ 493b3a9737cSLeo Yan 494b3a9737cSLeo Yan#if TC_IOMMU_EN 495b3a9737cSLeo Yan iommus = <&smmu_700 0x200>; 496b3a9737cSLeo Yan#endif /* TC_IOMMU_EN */ 497b3a9737cSLeo Yan }; 498b3a9737cSLeo Yan 499b3a9737cSLeo Yan power_model_simple { 500b3a9737cSLeo Yan /* 501b3a9737cSLeo Yan * Numbers used are irrelevant to Titan, 502b3a9737cSLeo Yan * it helps suppressing the kernel warnings. 503b3a9737cSLeo Yan */ 504b3a9737cSLeo Yan compatible = "arm,mali-simple-power-model"; 505b3a9737cSLeo Yan static-coefficient = <2427750>; 506b3a9737cSLeo Yan dynamic-coefficient = <4687>; 507b3a9737cSLeo Yan ts = <20000 2000 (-20) 2>; 508b3a9737cSLeo Yan thermal-zone = ""; 509b3a9737cSLeo Yan }; 510b3a9737cSLeo Yan 511b3a9737cSLeo Yan#if TC_IOMMU_EN 512b3a9737cSLeo Yan smmu_700: iommu@3f000000 { 513b3a9737cSLeo Yan #iommu-cells = <1>; 514b3a9737cSLeo Yan compatible = "arm,smmu-v3"; 515b3a9737cSLeo Yan reg = <0x0 0x3f000000 0x0 0x5000000>; 516b3a9737cSLeo Yan interrupts = <GIC_SPI 228 IRQ_TYPE_EDGE_RISING>, 517b3a9737cSLeo Yan <GIC_SPI 229 IRQ_TYPE_EDGE_RISING>, 518b3a9737cSLeo Yan <GIC_SPI 230 IRQ_TYPE_EDGE_RISING>; 519b3a9737cSLeo Yan interrupt-names = "eventq", "cmdq-sync", "gerror"; 520b3a9737cSLeo Yan dma-coherent; 521b3a9737cSLeo Yan }; 522b3a9737cSLeo Yan#endif /* TC_IOMMU_EN */ 523b3a9737cSLeo Yan 524b3a9737cSLeo Yan dp0: display@DPU_ADDR { 525b3a9737cSLeo Yan #address-cells = <1>; 526b3a9737cSLeo Yan #size-cells = <0>; 527b3a9737cSLeo Yan compatible = "arm,mali-d71"; 528b3a9737cSLeo Yan reg = <HI(ADDRESSIFY(DPU_ADDR)) LO(ADDRESSIFY(DPU_ADDR)) 0 0x20000>; 529b3a9737cSLeo Yan interrupts = <GIC_SPI DPU_IRQ IRQ_TYPE_LEVEL_HIGH>; 530b3a9737cSLeo Yan interrupt-names = "DPU"; 531b3a9737cSLeo Yan DPU_CLK_ATTR1; 532b3a9737cSLeo Yan#if TC_IOMMU_EN 533b3a9737cSLeo Yan iommus = <&smmu_700 0x100>; 534b3a9737cSLeo Yan#endif /* TC_IOMMU_EN */ 535b3a9737cSLeo Yan 536b3a9737cSLeo Yan pl0: pipeline@0 { 537b3a9737cSLeo Yan reg = <0>; 538b3a9737cSLeo Yan DPU_CLK_ATTR2; 539b3a9737cSLeo Yan pl_id = <0>; 540b3a9737cSLeo Yan ports { 541b3a9737cSLeo Yan #address-cells = <1>; 542b3a9737cSLeo Yan #size-cells = <0>; 543b3a9737cSLeo Yan port@0 { 544b3a9737cSLeo Yan reg = <0>; 545b3a9737cSLeo Yan dp_pl0_out0: endpoint { 546b3a9737cSLeo Yan remote-endpoint = <&vencoder_in>; 547b3a9737cSLeo Yan }; 548b3a9737cSLeo Yan }; 549b3a9737cSLeo Yan }; 550b3a9737cSLeo Yan }; 551b3a9737cSLeo Yan 552b3a9737cSLeo Yan pl1: pipeline@1 { 553b3a9737cSLeo Yan reg = <1>; 554b3a9737cSLeo Yan DPU_CLK_ATTR3; 555b3a9737cSLeo Yan pl_id = <1>; 556b3a9737cSLeo Yan ports { 557b3a9737cSLeo Yan #address-cells = <1>; 558b3a9737cSLeo Yan #size-cells = <0>; 559b3a9737cSLeo Yan port@0 { 560b3a9737cSLeo Yan reg = <0>; 561b3a9737cSLeo Yan }; 562b3a9737cSLeo Yan }; 563b3a9737cSLeo Yan }; 564b3a9737cSLeo Yan }; 565b3a9737cSLeo Yan 566b3a9737cSLeo Yan /* 567b3a9737cSLeo Yan * L3 cache in the DSU is the Memory System Component (MSC) 568b3a9737cSLeo Yan * The MPAM registers are accessed through utility bus in the DSU 569b3a9737cSLeo Yan */ 570b3a9737cSLeo Yan msc0 { 571b3a9737cSLeo Yan compatible = "arm,mpam-msc"; 572b3a9737cSLeo Yan reg = <MPAM_ADDR 0x0 0x2000>; 573b3a9737cSLeo Yan }; 574b3a9737cSLeo Yan 575b3a9737cSLeo Yan ete0 { 576b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 577b3a9737cSLeo Yan cpu = <&CPU0>; 578b3a9737cSLeo Yan }; 579b3a9737cSLeo Yan 580b3a9737cSLeo Yan ete1 { 581b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 582b3a9737cSLeo Yan cpu = <&CPU1>; 583b3a9737cSLeo Yan }; 584b3a9737cSLeo Yan 585b3a9737cSLeo Yan ete2 { 586b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 587b3a9737cSLeo Yan cpu = <&CPU2>; 588b3a9737cSLeo Yan }; 589b3a9737cSLeo Yan 590b3a9737cSLeo Yan ete3 { 591b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 592b3a9737cSLeo Yan cpu = <&CPU3>; 593b3a9737cSLeo Yan }; 594b3a9737cSLeo Yan 595b3a9737cSLeo Yan ete4 { 596b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 597b3a9737cSLeo Yan cpu = <&CPU4>; 598b3a9737cSLeo Yan }; 599b3a9737cSLeo Yan 600b3a9737cSLeo Yan ete5 { 601b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 602b3a9737cSLeo Yan cpu = <&CPU5>; 603b3a9737cSLeo Yan }; 604b3a9737cSLeo Yan 605b3a9737cSLeo Yan ete6 { 606b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 607b3a9737cSLeo Yan cpu = <&CPU6>; 608b3a9737cSLeo Yan }; 609b3a9737cSLeo Yan 610b3a9737cSLeo Yan ete7 { 611b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 612b3a9737cSLeo Yan cpu = <&CPU7>; 613b3a9737cSLeo Yan }; 614b3a9737cSLeo Yan 615b3a9737cSLeo Yan trbe { 616b3a9737cSLeo Yan compatible = "arm,trace-buffer-extension"; 617b3a9737cSLeo Yan interrupts = <GIC_PPI 2 IRQ_TYPE_LEVEL_LOW>; 618b3a9737cSLeo Yan }; 619b3a9737cSLeo Yan 620b3a9737cSLeo Yan trusty { 621b3a9737cSLeo Yan #size-cells = <0x02>; 622b3a9737cSLeo Yan #address-cells = <0x02>; 623b3a9737cSLeo Yan ranges = <0x00>; 624b3a9737cSLeo Yan compatible = "android,trusty-v1"; 625b3a9737cSLeo Yan 626b3a9737cSLeo Yan virtio { 627b3a9737cSLeo Yan compatible = "android,trusty-virtio-v1"; 628b3a9737cSLeo Yan }; 629b3a9737cSLeo Yan 630b3a9737cSLeo Yan test { 631b3a9737cSLeo Yan compatible = "android,trusty-test-v1"; 632b3a9737cSLeo Yan }; 633b3a9737cSLeo Yan 634b3a9737cSLeo Yan log { 635b3a9737cSLeo Yan compatible = "android,trusty-log-v1"; 636b3a9737cSLeo Yan }; 637b3a9737cSLeo Yan 638b3a9737cSLeo Yan irq { 639b3a9737cSLeo Yan ipi-range = <0x08 0x0f 0x08>; 640b3a9737cSLeo Yan interrupt-ranges = <0x00 0x0f 0x00 0x10 0x1f 0x01 0x20 0x3f 0x02>; 641b3a9737cSLeo Yan interrupt-templates = <0x01 0x00 0x8001 0x01 0x01 0x04 0x8001 0x01 0x00 0x04>; 642b3a9737cSLeo Yan compatible = "android,trusty-irq-v1"; 643b3a9737cSLeo Yan }; 644b3a9737cSLeo Yan }; 645b3a9737cSLeo Yan 646b3a9737cSLeo Yan /* used in U-boot, Linux doesn't care */ 647b3a9737cSLeo Yan arm_ffa { 648b3a9737cSLeo Yan compatible = "arm,ffa"; 649b3a9737cSLeo Yan method = "smc"; 650b3a9737cSLeo Yan }; 651b3a9737cSLeo Yan}; 652