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 779c6ede0SLeo Yan/* If SCMI power domain control is enabled */ 879c6ede0SLeo Yan#if TC_SCMI_PD_CTRL_EN 979c6ede0SLeo Yan#define GPU_SCMI_PD_IDX (PLAT_MAX_CPUS_PER_CLUSTER + 1) 1079c6ede0SLeo Yan#define DPU_SCMI_PD_IDX (PLAT_MAX_CPUS_PER_CLUSTER + 2) 1179c6ede0SLeo Yan#endif /* TC_SCMI_PD_CTRL_EN */ 1279c6ede0SLeo Yan 1379c6ede0SLeo Yan/* Use SCMI controlled clocks */ 1479c6ede0SLeo Yan#if TC_DPU_USE_SCMI_CLK 1579c6ede0SLeo Yan#define DPU_CLK_ATTR1 \ 1679c6ede0SLeo Yan clocks = <&scmi_clk 0>; \ 1779c6ede0SLeo Yan clock-names = "aclk" 1879c6ede0SLeo Yan 1979c6ede0SLeo Yan#define DPU_CLK_ATTR2 \ 2079c6ede0SLeo Yan clocks = <&scmi_clk 1>; \ 2179c6ede0SLeo Yan clock-names = "pxclk" 2279c6ede0SLeo Yan 2379c6ede0SLeo Yan#define DPU_CLK_ATTR3 \ 2479c6ede0SLeo Yan clocks = <&scmi_clk 2>; \ 2579c6ede0SLeo Yan clock-names = "pxclk" \ 2679c6ede0SLeo Yan/* Use fixed clocks */ 2779c6ede0SLeo Yan#else /* !TC_DPU_USE_SCMI_CLK */ 2879c6ede0SLeo Yan#define DPU_CLK_ATTR1 \ 2979c6ede0SLeo Yan clocks = <&dpu_aclk>; \ 3079c6ede0SLeo Yan clock-names = "aclk" 3179c6ede0SLeo Yan 3279c6ede0SLeo Yan#define DPU_CLK_ATTR2 \ 3379c6ede0SLeo Yan clocks = <&dpu_pixel_clk>, <&dpu_aclk>; \ 3479c6ede0SLeo Yan clock-names = "pxclk", "aclk" 3579c6ede0SLeo Yan 3679c6ede0SLeo Yan#define DPU_CLK_ATTR3 DPU_CLK_ATTR2 3779c6ede0SLeo 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 /* 51b3a9737cSLeo Yan * Add some dummy entropy for Linux so it 52b3a9737cSLeo Yan * doesn't delay the boot waiting for it. 53b3a9737cSLeo Yan */ 54b3a9737cSLeo Yan rng-seed = <0x01 0x02 0x04 0x05 0x06 0x07 0x08 \ 55b3a9737cSLeo Yan 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 }; 63b3a9737cSLeo Yan 64b3a9737cSLeo Yan cpus { 65b3a9737cSLeo Yan #address-cells = <1>; 66b3a9737cSLeo Yan #size-cells = <0>; 67b3a9737cSLeo Yan 68b3a9737cSLeo Yan cpu-map { 69b3a9737cSLeo Yan cluster0 { 70b3a9737cSLeo Yan core0 { 71b3a9737cSLeo Yan cpu = <&CPU0>; 72b3a9737cSLeo Yan }; 73b3a9737cSLeo Yan core1 { 74b3a9737cSLeo Yan cpu = <&CPU1>; 75b3a9737cSLeo Yan }; 76b3a9737cSLeo Yan core2 { 77b3a9737cSLeo Yan cpu = <&CPU2>; 78b3a9737cSLeo Yan }; 79b3a9737cSLeo Yan core3 { 80b3a9737cSLeo Yan cpu = <&CPU3>; 81b3a9737cSLeo Yan }; 82b3a9737cSLeo Yan core4 { 83b3a9737cSLeo Yan cpu = <&CPU4>; 84b3a9737cSLeo Yan }; 85b3a9737cSLeo Yan core5 { 86b3a9737cSLeo Yan cpu = <&CPU5>; 87b3a9737cSLeo Yan }; 88b3a9737cSLeo Yan core6 { 89b3a9737cSLeo Yan cpu = <&CPU6>; 90b3a9737cSLeo Yan }; 91b3a9737cSLeo Yan core7 { 92b3a9737cSLeo Yan cpu = <&CPU7>; 93b3a9737cSLeo Yan }; 94b3a9737cSLeo Yan }; 95b3a9737cSLeo Yan }; 96b3a9737cSLeo Yan 97b3a9737cSLeo Yan /* 98b3a9737cSLeo Yan * The timings below are just to demonstrate working cpuidle. 99b3a9737cSLeo Yan * These values may be inaccurate. 100b3a9737cSLeo Yan */ 101b3a9737cSLeo Yan idle-states { 102b3a9737cSLeo Yan entry-method = "psci"; 103b3a9737cSLeo Yan 104b3a9737cSLeo Yan CPU_SLEEP_0: cpu-sleep-0 { 105b3a9737cSLeo Yan compatible = "arm,idle-state"; 106b3a9737cSLeo Yan arm,psci-suspend-param = <0x0010000>; 107b3a9737cSLeo Yan local-timer-stop; 108b3a9737cSLeo Yan entry-latency-us = <300>; 109b3a9737cSLeo Yan exit-latency-us = <1200>; 110b3a9737cSLeo Yan min-residency-us = <2000>; 111b3a9737cSLeo Yan }; 112b3a9737cSLeo Yan CLUSTER_SLEEP_0: cluster-sleep-0 { 113b3a9737cSLeo Yan compatible = "arm,idle-state"; 114b3a9737cSLeo Yan arm,psci-suspend-param = <0x1010000>; 115b3a9737cSLeo Yan local-timer-stop; 116b3a9737cSLeo Yan entry-latency-us = <400>; 117b3a9737cSLeo Yan exit-latency-us = <1200>; 118b3a9737cSLeo Yan min-residency-us = <2500>; 119b3a9737cSLeo Yan }; 120b3a9737cSLeo Yan }; 121b3a9737cSLeo Yan 122b3a9737cSLeo Yan amus { 123b3a9737cSLeo Yan amu: amu-0 { 124b3a9737cSLeo Yan #address-cells = <1>; 125b3a9737cSLeo Yan #size-cells = <0>; 126b3a9737cSLeo Yan 127b3a9737cSLeo Yan mpmm_gear0: counter@0 { 128b3a9737cSLeo Yan reg = <0>; 129b3a9737cSLeo Yan enable-at-el3; 130b3a9737cSLeo Yan }; 131b3a9737cSLeo Yan 132b3a9737cSLeo Yan mpmm_gear1: counter@1 { 133b3a9737cSLeo Yan reg = <1>; 134b3a9737cSLeo Yan enable-at-el3; 135b3a9737cSLeo Yan }; 136b3a9737cSLeo Yan 137b3a9737cSLeo Yan mpmm_gear2: counter@2 { 138b3a9737cSLeo Yan reg = <2>; 139b3a9737cSLeo Yan enable-at-el3; 140b3a9737cSLeo Yan }; 141b3a9737cSLeo Yan }; 142b3a9737cSLeo Yan }; 143b3a9737cSLeo Yan 144b3a9737cSLeo Yan CPU0:cpu@0 { 145b3a9737cSLeo Yan device_type = "cpu"; 146b3a9737cSLeo Yan compatible = "arm,armv8"; 147b3a9737cSLeo Yan reg = <0x0>; 148b3a9737cSLeo Yan enable-method = "psci"; 149b3a9737cSLeo Yan clocks = <&scmi_dvfs 0>; 150b3a9737cSLeo Yan cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; 151b3a9737cSLeo Yan capacity-dmips-mhz = <LIT_CAPACITY>; 152b3a9737cSLeo Yan amu = <&amu>; 153b3a9737cSLeo Yan supports-mpmm; 154b3a9737cSLeo Yan }; 155b3a9737cSLeo Yan 156b3a9737cSLeo Yan CPU1:cpu@100 { 157b3a9737cSLeo Yan device_type = "cpu"; 158b3a9737cSLeo Yan compatible = "arm,armv8"; 159b3a9737cSLeo Yan reg = <0x100>; 160b3a9737cSLeo Yan enable-method = "psci"; 161b3a9737cSLeo Yan clocks = <&scmi_dvfs 0>; 162b3a9737cSLeo Yan cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; 163b3a9737cSLeo Yan capacity-dmips-mhz = <LIT_CAPACITY>; 164b3a9737cSLeo Yan amu = <&amu>; 165b3a9737cSLeo Yan supports-mpmm; 166b3a9737cSLeo Yan }; 167b3a9737cSLeo Yan 168b3a9737cSLeo Yan CPU2:cpu@200 { 169b3a9737cSLeo Yan device_type = "cpu"; 170b3a9737cSLeo Yan compatible = "arm,armv8"; 171b3a9737cSLeo Yan reg = <0x200>; 172b3a9737cSLeo Yan enable-method = "psci"; 173b3a9737cSLeo Yan cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; 174b3a9737cSLeo Yan amu = <&amu>; 175b3a9737cSLeo Yan supports-mpmm; 176b3a9737cSLeo Yan }; 177b3a9737cSLeo Yan 178b3a9737cSLeo Yan CPU3:cpu@300 { 179b3a9737cSLeo Yan device_type = "cpu"; 180b3a9737cSLeo Yan compatible = "arm,armv8"; 181b3a9737cSLeo Yan reg = <0x300>; 182b3a9737cSLeo Yan enable-method = "psci"; 183b3a9737cSLeo Yan cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; 184b3a9737cSLeo Yan amu = <&amu>; 185b3a9737cSLeo Yan supports-mpmm; 186b3a9737cSLeo Yan }; 187b3a9737cSLeo Yan 188b3a9737cSLeo Yan CPU4:cpu@400 { 189b3a9737cSLeo Yan device_type = "cpu"; 190b3a9737cSLeo Yan compatible = "arm,armv8"; 191b3a9737cSLeo Yan reg = <0x400>; 192b3a9737cSLeo Yan enable-method = "psci"; 193b3a9737cSLeo Yan clocks = <&scmi_dvfs 1>; 194b3a9737cSLeo Yan cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; 195b3a9737cSLeo Yan capacity-dmips-mhz = <MID_CAPACITY>; 196b3a9737cSLeo Yan amu = <&amu>; 197b3a9737cSLeo Yan supports-mpmm; 198b3a9737cSLeo Yan }; 199b3a9737cSLeo Yan 200b3a9737cSLeo Yan CPU5:cpu@500 { 201b3a9737cSLeo Yan device_type = "cpu"; 202b3a9737cSLeo Yan compatible = "arm,armv8"; 203b3a9737cSLeo Yan reg = <0x500>; 204b3a9737cSLeo Yan enable-method = "psci"; 205b3a9737cSLeo Yan clocks = <&scmi_dvfs 1>; 206b3a9737cSLeo Yan cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; 207b3a9737cSLeo Yan capacity-dmips-mhz = <MID_CAPACITY>; 208b3a9737cSLeo Yan amu = <&amu>; 209b3a9737cSLeo Yan supports-mpmm; 210b3a9737cSLeo Yan }; 211b3a9737cSLeo Yan 212b3a9737cSLeo Yan CPU6:cpu@600 { 213b3a9737cSLeo Yan device_type = "cpu"; 214b3a9737cSLeo Yan compatible = "arm,armv8"; 215b3a9737cSLeo Yan reg = <0x600>; 216b3a9737cSLeo Yan enable-method = "psci"; 217b3a9737cSLeo Yan cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; 218b3a9737cSLeo Yan amu = <&amu>; 219b3a9737cSLeo Yan supports-mpmm; 220b3a9737cSLeo Yan }; 221b3a9737cSLeo Yan 222b3a9737cSLeo Yan CPU7:cpu@700 { 223b3a9737cSLeo Yan device_type = "cpu"; 224b3a9737cSLeo Yan compatible = "arm,armv8"; 225b3a9737cSLeo Yan reg = <0x700>; 226b3a9737cSLeo Yan enable-method = "psci"; 227b3a9737cSLeo Yan cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; 228b3a9737cSLeo Yan amu = <&amu>; 229b3a9737cSLeo Yan supports-mpmm; 230b3a9737cSLeo Yan }; 231b3a9737cSLeo Yan }; 232b3a9737cSLeo Yan 233b3a9737cSLeo Yan reserved-memory { 234b3a9737cSLeo Yan #address-cells = <2>; 235b3a9737cSLeo Yan #size-cells = <2>; 236b3a9737cSLeo Yan ranges; 237b3a9737cSLeo Yan 238b3a9737cSLeo Yan linux,cma { 239b3a9737cSLeo Yan compatible = "shared-dma-pool"; 240b3a9737cSLeo Yan reusable; 241b3a9737cSLeo Yan size = <0x0 0x8000000>; 242b3a9737cSLeo Yan linux,cma-default; 243b3a9737cSLeo Yan }; 244b3a9737cSLeo Yan 245b3a9737cSLeo Yan optee { 246b3a9737cSLeo Yan compatible = "restricted-dma-pool"; 247b3a9737cSLeo Yan reg = <0x0 TC_NS_OPTEE_BASE 0x0 TC_NS_OPTEE_SIZE>; 248b3a9737cSLeo Yan }; 249b3a9737cSLeo Yan 250b3a9737cSLeo Yan fwu_mm { 251b3a9737cSLeo Yan reg = <0x0 TC_NS_FWU_BASE 0x0 TC_NS_FWU_SIZE>; 252b3a9737cSLeo Yan no-map; 253b3a9737cSLeo Yan }; 254b3a9737cSLeo Yan }; 255b3a9737cSLeo Yan 256b3a9737cSLeo Yan memory { 257b3a9737cSLeo Yan device_type = "memory"; 258b3a9737cSLeo Yan reg = <0x0 TC_NS_DRAM1_BASE 0x0 TC_NS_DRAM1_SIZE>, 259b3a9737cSLeo Yan <HI(PLAT_ARM_DRAM2_BASE) LO(PLAT_ARM_DRAM2_BASE) 260b3a9737cSLeo Yan HI(TC_NS_DRAM2_SIZE) LO(TC_NS_DRAM2_SIZE)>; 261b3a9737cSLeo Yan }; 262b3a9737cSLeo Yan 263b3a9737cSLeo Yan psci { 264b3a9737cSLeo Yan compatible = "arm,psci-1.0", "arm,psci-0.2"; 265b3a9737cSLeo Yan method = "smc"; 266b3a9737cSLeo Yan }; 267b3a9737cSLeo Yan 268b3a9737cSLeo Yan cpu-pmu { 269b3a9737cSLeo Yan compatible = "arm,armv8-pmuv3"; 2701300bbceSJagdish Gediya interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH 0>; 271b3a9737cSLeo Yan }; 272b3a9737cSLeo Yan 273b3a9737cSLeo Yan sram: sram@6000000 { 274b3a9737cSLeo Yan compatible = "mmio-sram"; 275b3a9737cSLeo Yan reg = <0x0 PLAT_ARM_NSRAM_BASE 0x0 PLAT_ARM_NSRAM_SIZE>; 276b3a9737cSLeo Yan 277b3a9737cSLeo Yan #address-cells = <1>; 278b3a9737cSLeo Yan #size-cells = <1>; 279b3a9737cSLeo Yan ranges = <0 0x0 PLAT_ARM_NSRAM_BASE PLAT_ARM_NSRAM_SIZE>; 280b3a9737cSLeo Yan 281f2596ff1SBoyan Karatotev cpu_scp_scmi_a2p: scp-shmem@0 { 282b3a9737cSLeo Yan compatible = "arm,scmi-shmem"; 283b3a9737cSLeo Yan reg = <0x0 0x80>; 284b3a9737cSLeo Yan }; 285b3a9737cSLeo Yan }; 286b3a9737cSLeo Yan 287b3a9737cSLeo Yan mbox_db_rx: mhu@MHU_RX_ADDR { 2886c069e71SBoyan Karatotev compatible = MHU_RX_COMPAT; 2896c069e71SBoyan Karatotev reg = <0x0 ADDRESSIFY(MHU_RX_ADDR) 0x0 MHU_OFFSET>; 290b3a9737cSLeo Yan clocks = <&soc_refclk>; 291b3a9737cSLeo Yan clock-names = "apb_pclk"; 2926c069e71SBoyan Karatotev #mbox-cells = <MHU_MBOX_CELLS>; 2931300bbceSJagdish Gediya interrupts = <GIC_SPI MHU_RX_INT_NUM IRQ_TYPE_LEVEL_HIGH 0>; 2946c069e71SBoyan Karatotev interrupt-names = MHU_RX_INT_NAME; 295b3a9737cSLeo Yan }; 296b3a9737cSLeo Yan 297b3a9737cSLeo Yan mbox_db_tx: mhu@MHU_TX_ADDR { 2986c069e71SBoyan Karatotev compatible = MHU_TX_COMPAT; 2996c069e71SBoyan Karatotev reg = <0x0 ADDRESSIFY(MHU_TX_ADDR) 0x0 MHU_OFFSET>; 300b3a9737cSLeo Yan clocks = <&soc_refclk>; 301b3a9737cSLeo Yan clock-names = "apb_pclk"; 3026c069e71SBoyan Karatotev #mbox-cells = <MHU_MBOX_CELLS>; 3036c069e71SBoyan Karatotev interrupt-names = MHU_TX_INT_NAME; 304b3a9737cSLeo Yan }; 305b3a9737cSLeo Yan 306d42987c3SBoyan Karatotev firmware { 307b3a9737cSLeo Yan scmi { 308b3a9737cSLeo Yan compatible = "arm,scmi"; 309b3a9737cSLeo Yan mbox-names = "tx", "rx"; 310b3a9737cSLeo Yan #address-cells = <1>; 311b3a9737cSLeo Yan #size-cells = <0>; 312b3a9737cSLeo Yan 313b3a9737cSLeo Yan#if TC_SCMI_PD_CTRL_EN 314b3a9737cSLeo Yan scmi_devpd: protocol@11 { 315b3a9737cSLeo Yan reg = <0x11>; 316b3a9737cSLeo Yan #power-domain-cells = <1>; 317b3a9737cSLeo Yan }; 318b3a9737cSLeo Yan#endif /* TC_SCMI_PD_CTRL_EN */ 319b3a9737cSLeo Yan 320b3a9737cSLeo Yan scmi_dvfs: protocol@13 { 321b3a9737cSLeo Yan reg = <0x13>; 322b3a9737cSLeo Yan #clock-cells = <1>; 323b3a9737cSLeo Yan }; 324b3a9737cSLeo Yan 325b3a9737cSLeo Yan scmi_clk: protocol@14 { 326b3a9737cSLeo Yan reg = <0x14>; 327b3a9737cSLeo Yan #clock-cells = <1>; 328b3a9737cSLeo Yan }; 329b3a9737cSLeo Yan }; 330d42987c3SBoyan Karatotev }; 331b3a9737cSLeo Yan 332b3a9737cSLeo Yan gic: interrupt-controller@GIC_CTRL_ADDR { 333b3a9737cSLeo Yan compatible = "arm,gic-v3"; 334b3a9737cSLeo Yan #address-cells = <2>; 3351300bbceSJagdish Gediya #interrupt-cells = <4>; 336b3a9737cSLeo Yan #size-cells = <2>; 337b3a9737cSLeo Yan ranges; 338b3a9737cSLeo Yan interrupt-controller; 339b3a9737cSLeo Yan reg = <0x0 0x30000000 0 0x10000>, /* GICD */ 340b3a9737cSLeo Yan <0x0 0x30080000 0 GIC_GICR_OFFSET>; /* GICR */ 3411300bbceSJagdish Gediya interrupts = <GIC_PPI 0x9 IRQ_TYPE_LEVEL_LOW 0>; 342b3a9737cSLeo Yan }; 343b3a9737cSLeo Yan 344b3a9737cSLeo Yan timer { 345b3a9737cSLeo Yan compatible = "arm,armv8-timer"; 3461300bbceSJagdish Gediya interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW 0>, 3471300bbceSJagdish Gediya <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW 0>, 3481300bbceSJagdish Gediya <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW 0>, 3491300bbceSJagdish Gediya <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW 0>; 350b3a9737cSLeo Yan }; 351b3a9737cSLeo Yan 352*77080f6aSJagdish Gediya spe-pmu-mid { 353*77080f6aSJagdish Gediya compatible = "arm,statistical-profiling-extension-v1"; 354*77080f6aSJagdish Gediya interrupts = <GIC_PPI 1 IRQ_TYPE_LEVEL_HIGH &ppi_partition_mid>; 355*77080f6aSJagdish Gediya status = "disabled"; 356*77080f6aSJagdish Gediya }; 357*77080f6aSJagdish Gediya 358*77080f6aSJagdish Gediya spe-pmu-big { 359*77080f6aSJagdish Gediya compatible = "arm,statistical-profiling-extension-v1"; 360*77080f6aSJagdish Gediya interrupts = <GIC_PPI 1 IRQ_TYPE_LEVEL_HIGH &ppi_partition_big>; 361*77080f6aSJagdish Gediya status = "disabled"; 362*77080f6aSJagdish Gediya }; 363*77080f6aSJagdish Gediya 364b3a9737cSLeo Yan soc_refclk: refclk { 365b3a9737cSLeo Yan compatible = "fixed-clock"; 366b3a9737cSLeo Yan #clock-cells = <0>; 367b3a9737cSLeo Yan clock-frequency = <1000000000>; 368b3a9737cSLeo Yan clock-output-names = "apb_pclk"; 369b3a9737cSLeo Yan }; 370b3a9737cSLeo Yan 371b3a9737cSLeo Yan soc_refclk60mhz: refclk60mhz { 372b3a9737cSLeo Yan compatible = "fixed-clock"; 373b3a9737cSLeo Yan #clock-cells = <0>; 374b3a9737cSLeo Yan clock-frequency = <60000000>; 375b3a9737cSLeo Yan clock-output-names = "iofpga_clk"; 376b3a9737cSLeo Yan }; 377b3a9737cSLeo Yan 378b3a9737cSLeo Yan soc_uartclk: uartclk { 379b3a9737cSLeo Yan compatible = "fixed-clock"; 380b3a9737cSLeo Yan #clock-cells = <0>; 381b3a9737cSLeo Yan clock-frequency = <UARTCLK_FREQ>; 382b3a9737cSLeo Yan clock-output-names = "uartclk"; 383b3a9737cSLeo Yan }; 384b3a9737cSLeo Yan 385b3a9737cSLeo Yan /* soc_uart0 on FPGA, ap_ns_uart on FVP */ 386b3a9737cSLeo Yan os_uart: serial@2a400000 { 387b3a9737cSLeo Yan compatible = "arm,pl011", "arm,primecell"; 388b3a9737cSLeo Yan reg = <0x0 0x2A400000 0x0 UART_OFFSET>; 3891300bbceSJagdish Gediya interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH 0>; 390b3a9737cSLeo Yan clocks = <&soc_uartclk>, <&soc_refclk>; 391b3a9737cSLeo Yan clock-names = "uartclk", "apb_pclk"; 392b3a9737cSLeo Yan status = "okay"; 393b3a9737cSLeo Yan }; 394b3a9737cSLeo Yan 39579c6ede0SLeo Yan#if !TC_DPU_USE_SCMI_CLK 39679c6ede0SLeo Yan dpu_aclk: dpu_aclk { 39779c6ede0SLeo Yan compatible = "fixed-clock"; 39879c6ede0SLeo Yan #clock-cells = <0>; 39979c6ede0SLeo Yan clock-frequency = <VENCODER_TIMING_CLK>; 40079c6ede0SLeo Yan clock-output-names = "fpga:dpu_aclk"; 40179c6ede0SLeo Yan }; 40279c6ede0SLeo Yan 40379c6ede0SLeo Yan dpu_pixel_clk: dpu-pixel-clk { 40479c6ede0SLeo Yan compatible = "fixed-clock"; 40579c6ede0SLeo Yan #clock-cells = <0>; 40679c6ede0SLeo Yan clock-frequency = <VENCODER_TIMING_CLK>; 40779c6ede0SLeo Yan clock-output-names = "pxclk"; 40879c6ede0SLeo Yan }; 40979c6ede0SLeo Yan#endif /* !TC_DPU_USE_SCMI_CLK */ 41079c6ede0SLeo Yan 411b3a9737cSLeo Yan vencoder { 412b3a9737cSLeo Yan compatible = "drm,virtual-encoder"; 413b3a9737cSLeo Yan port { 414b3a9737cSLeo Yan vencoder_in: endpoint { 415b3a9737cSLeo Yan remote-endpoint = <&dp_pl0_out0>; 416b3a9737cSLeo Yan }; 417b3a9737cSLeo Yan }; 418b3a9737cSLeo Yan 419b3a9737cSLeo Yan display-timings { 420b3a9737cSLeo Yan timing-panel { 421b3a9737cSLeo Yan VENCODER_TIMING; 422b3a9737cSLeo Yan }; 423b3a9737cSLeo Yan }; 424b3a9737cSLeo Yan 425b3a9737cSLeo Yan }; 426b3a9737cSLeo Yan 427e6ef3ef0SLeo Yan ethernet: ethernet@18000000 { 428b3a9737cSLeo Yan reg = <0x0 0x18000000 0x0 0x10000>; 4291300bbceSJagdish Gediya interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH 0>; 430b3a9737cSLeo Yan 431b3a9737cSLeo Yan reg-io-width = <2>; 432b3a9737cSLeo Yan smsc,irq-push-pull; 433b3a9737cSLeo Yan }; 434b3a9737cSLeo Yan 435b3a9737cSLeo Yan bp_clock24mhz: clock24mhz { 436b3a9737cSLeo Yan compatible = "fixed-clock"; 437b3a9737cSLeo Yan #clock-cells = <0>; 438b3a9737cSLeo Yan clock-frequency = <24000000>; 439b3a9737cSLeo Yan clock-output-names = "bp:clock24mhz"; 440b3a9737cSLeo Yan }; 441b3a9737cSLeo Yan 442b3a9737cSLeo Yan 443b3a9737cSLeo Yan sysreg: sysreg@1c010000 { 444b3a9737cSLeo Yan compatible = "arm,vexpress-sysreg"; 445b3a9737cSLeo Yan reg = <0x0 0x001c010000 0x0 0x1000>; 446b3a9737cSLeo Yan gpio-controller; 447b3a9737cSLeo Yan #gpio-cells = <2>; 448b3a9737cSLeo Yan }; 449b3a9737cSLeo Yan 450b3a9737cSLeo Yan fixed_3v3: v2m-3v3 { 451b3a9737cSLeo Yan compatible = "regulator-fixed"; 452b3a9737cSLeo Yan regulator-name = "3V3"; 453b3a9737cSLeo Yan regulator-min-microvolt = <3300000>; 454b3a9737cSLeo Yan regulator-max-microvolt = <3300000>; 455b3a9737cSLeo Yan regulator-always-on; 456b3a9737cSLeo Yan }; 457b3a9737cSLeo Yan 458e6ef3ef0SLeo Yan mmci: mmci@1c050000 { 459b3a9737cSLeo Yan compatible = "arm,pl180", "arm,primecell"; 460b3a9737cSLeo Yan reg = <0x0 0x001c050000 0x0 0x1000>; 4611300bbceSJagdish Gediya interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH 0>, 4621300bbceSJagdish Gediya <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH 0>; 463b3a9737cSLeo Yan wp-gpios = <&sysreg 1 0>; 464b3a9737cSLeo Yan bus-width = <4>; 465b3a9737cSLeo Yan max-frequency = <25000000>; 466b3a9737cSLeo Yan vmmc-supply = <&fixed_3v3>; 467b3a9737cSLeo Yan clocks = <&bp_clock24mhz>, <&bp_clock24mhz>; 468b3a9737cSLeo Yan clock-names = "mclk", "apb_pclk"; 469b3a9737cSLeo Yan }; 470b3a9737cSLeo Yan 471b3a9737cSLeo Yan gpu_clk: gpu_clk { 472b3a9737cSLeo Yan compatible = "fixed-clock"; 473b3a9737cSLeo Yan #clock-cells = <0>; 474b3a9737cSLeo Yan clock-frequency = <1000000000>; 475b3a9737cSLeo Yan }; 476b3a9737cSLeo Yan 477b3a9737cSLeo Yan gpu_core_clk: gpu_core_clk { 478b3a9737cSLeo Yan compatible = "fixed-clock"; 479b3a9737cSLeo Yan #clock-cells = <0>; 480b3a9737cSLeo Yan clock-frequency = <1000000000>; 481b3a9737cSLeo Yan }; 482b3a9737cSLeo Yan 483b3a9737cSLeo Yan gpu: gpu@2d000000 { 484b3a9737cSLeo Yan compatible = "arm,mali-midgard"; 485b3a9737cSLeo Yan reg = <0x0 0x2d000000 0x0 0x200000>; 4861300bbceSJagdish Gediya interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH 0>, 4871300bbceSJagdish Gediya <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH 0>, 4881300bbceSJagdish Gediya <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH 0>; 489b3a9737cSLeo Yan interrupt-names = "JOB", "MMU", "GPU"; 490b3a9737cSLeo Yan clocks = <&gpu_core_clk>; 491b3a9737cSLeo Yan clock-names = "shadercores"; 492b3a9737cSLeo Yan#if TC_SCMI_PD_CTRL_EN 493b3a9737cSLeo Yan power-domains = <&scmi_devpd GPU_SCMI_PD_IDX>; 494b3a9737cSLeo Yan scmi-perf-domain = <3>; 495b3a9737cSLeo Yan#endif /* TC_SCMI_PD_CTRL_EN */ 496b3a9737cSLeo Yan 497bebefe0fSAngel Rodriguez Garcia pbha { 498bebefe0fSAngel Rodriguez Garcia int-id-override = <0 0x22>, <2 0x23>, <4 0x23>, <7 0x22>, 499bebefe0fSAngel Rodriguez Garcia <8 0x22>, <9 0x22>, <10 0x22>, <11 0x22>, 500bebefe0fSAngel Rodriguez Garcia <12 0x22>, <13 0x22>, <16 0x22>, <17 0x32>, 501bebefe0fSAngel Rodriguez Garcia <18 0x32>, <19 0x22>, <20 0x22>, <21 0x32>, 502bebefe0fSAngel Rodriguez Garcia <22 0x32>, <24 0x22>, <28 0x32>; 503bebefe0fSAngel Rodriguez Garcia propagate-bits = <0x0f>; 504bebefe0fSAngel Rodriguez Garcia }; 505b3a9737cSLeo Yan }; 506b3a9737cSLeo Yan 507b3a9737cSLeo Yan power_model_simple { 508b3a9737cSLeo Yan /* 509b3a9737cSLeo Yan * Numbers used are irrelevant to Titan, 510b3a9737cSLeo Yan * it helps suppressing the kernel warnings. 511b3a9737cSLeo Yan */ 512b3a9737cSLeo Yan compatible = "arm,mali-simple-power-model"; 513b3a9737cSLeo Yan static-coefficient = <2427750>; 514b3a9737cSLeo Yan dynamic-coefficient = <4687>; 515b3a9737cSLeo Yan ts = <20000 2000 (-20) 2>; 516b3a9737cSLeo Yan thermal-zone = ""; 517b3a9737cSLeo Yan }; 518b3a9737cSLeo Yan 5194c6960caSBen Horgan smmu_600: smmu@2ce00000 { 5204c6960caSBen Horgan compatible = "arm,smmu-v3"; 5214c6960caSBen Horgan reg = <0 0x2ce00000 0 0x20000>; 5221300bbceSJagdish Gediya interrupts = <GIC_SPI 75 IRQ_TYPE_EDGE_RISING 0>, 5231300bbceSJagdish Gediya <GIC_SPI 74 IRQ_TYPE_EDGE_RISING 0>, 5241300bbceSJagdish Gediya <GIC_SPI 76 IRQ_TYPE_EDGE_RISING 0>, 5251300bbceSJagdish Gediya <GIC_SPI 77 IRQ_TYPE_EDGE_RISING 0>; 5264c6960caSBen Horgan interrupt-names = "eventq", "priq", "cmdq-sync", "gerror"; 5274c6960caSBen Horgan #iommu-cells = <1>; 5284c6960caSBen Horgan status = "disabled"; 5294c6960caSBen Horgan }; 5304c6960caSBen Horgan 531b3a9737cSLeo Yan smmu_700: iommu@3f000000 { 532b3a9737cSLeo Yan #iommu-cells = <1>; 533b3a9737cSLeo Yan compatible = "arm,smmu-v3"; 534b3a9737cSLeo Yan reg = <0x0 0x3f000000 0x0 0x5000000>; 5351300bbceSJagdish Gediya interrupts = <GIC_SPI 228 IRQ_TYPE_EDGE_RISING 0>, 5361300bbceSJagdish Gediya <GIC_SPI 229 IRQ_TYPE_EDGE_RISING 0>, 5371300bbceSJagdish Gediya <GIC_SPI 230 IRQ_TYPE_EDGE_RISING 0>; 538b3a9737cSLeo Yan interrupt-names = "eventq", "cmdq-sync", "gerror"; 539b3a9737cSLeo Yan dma-coherent; 5402458b387SLeo Yan status = "disabled"; 541b3a9737cSLeo Yan }; 542b3a9737cSLeo Yan 5430458d3acSJackson Cooper-Driver smmu_700_dpu: iommu@4002a00000 { 5440458d3acSJackson Cooper-Driver #iommu-cells = <1>; 5450458d3acSJackson Cooper-Driver compatible = "arm,smmu-v3"; 5460458d3acSJackson Cooper-Driver reg = <HI(0x4002a00000) LO(0x4002a00000) 0x0 0x5000000>; 5471300bbceSJagdish Gediya interrupts = <GIC_SPI 481 IRQ_TYPE_EDGE_RISING 0>, 5481300bbceSJagdish Gediya <GIC_SPI 482 IRQ_TYPE_EDGE_RISING 0>, 5491300bbceSJagdish Gediya <GIC_SPI 483 IRQ_TYPE_EDGE_RISING 0>; 5500458d3acSJackson Cooper-Driver interrupt-names = "eventq", "cmdq-sync", "gerror"; 5510458d3acSJackson Cooper-Driver dma-coherent; 5520458d3acSJackson Cooper-Driver status = "disabled"; 5530458d3acSJackson Cooper-Driver }; 5540458d3acSJackson Cooper-Driver 555b3a9737cSLeo Yan dp0: display@DPU_ADDR { 556b3a9737cSLeo Yan #address-cells = <1>; 557b3a9737cSLeo Yan #size-cells = <0>; 558b3a9737cSLeo Yan compatible = "arm,mali-d71"; 559b3a9737cSLeo Yan reg = <HI(ADDRESSIFY(DPU_ADDR)) LO(ADDRESSIFY(DPU_ADDR)) 0 0x20000>; 5601300bbceSJagdish Gediya interrupts = <GIC_SPI DPU_IRQ IRQ_TYPE_LEVEL_HIGH 0>; 561b3a9737cSLeo Yan interrupt-names = "DPU"; 562b3a9737cSLeo Yan DPU_CLK_ATTR1; 563b3a9737cSLeo Yan 564b3a9737cSLeo Yan pl0: pipeline@0 { 565b3a9737cSLeo Yan reg = <0>; 566b3a9737cSLeo Yan DPU_CLK_ATTR2; 567b3a9737cSLeo Yan pl_id = <0>; 568b3a9737cSLeo Yan ports { 569b3a9737cSLeo Yan #address-cells = <1>; 570b3a9737cSLeo Yan #size-cells = <0>; 571b3a9737cSLeo Yan port@0 { 572b3a9737cSLeo Yan reg = <0>; 573b3a9737cSLeo Yan dp_pl0_out0: endpoint { 574b3a9737cSLeo Yan remote-endpoint = <&vencoder_in>; 575b3a9737cSLeo Yan }; 576b3a9737cSLeo Yan }; 577b3a9737cSLeo Yan }; 578b3a9737cSLeo Yan }; 579b3a9737cSLeo Yan 580b3a9737cSLeo Yan pl1: pipeline@1 { 581b3a9737cSLeo Yan reg = <1>; 582b3a9737cSLeo Yan DPU_CLK_ATTR3; 583b3a9737cSLeo Yan pl_id = <1>; 584b3a9737cSLeo Yan ports { 585b3a9737cSLeo Yan #address-cells = <1>; 586b3a9737cSLeo Yan #size-cells = <0>; 587b3a9737cSLeo Yan port@0 { 588b3a9737cSLeo Yan reg = <0>; 589b3a9737cSLeo Yan }; 590b3a9737cSLeo Yan }; 591b3a9737cSLeo Yan }; 592b3a9737cSLeo Yan }; 593b3a9737cSLeo Yan 594b3a9737cSLeo Yan /* 595b3a9737cSLeo Yan * L3 cache in the DSU is the Memory System Component (MSC) 596b3a9737cSLeo Yan * The MPAM registers are accessed through utility bus in the DSU 597b3a9737cSLeo Yan */ 598b3a9737cSLeo Yan msc0 { 599b3a9737cSLeo Yan compatible = "arm,mpam-msc"; 600b3a9737cSLeo Yan reg = <MPAM_ADDR 0x0 0x2000>; 601b3a9737cSLeo Yan }; 602b3a9737cSLeo Yan 603b3a9737cSLeo Yan ete0 { 604b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 605b3a9737cSLeo Yan cpu = <&CPU0>; 606b3a9737cSLeo Yan }; 607b3a9737cSLeo Yan 608b3a9737cSLeo Yan ete1 { 609b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 610b3a9737cSLeo Yan cpu = <&CPU1>; 611b3a9737cSLeo Yan }; 612b3a9737cSLeo Yan 613b3a9737cSLeo Yan ete2 { 614b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 615b3a9737cSLeo Yan cpu = <&CPU2>; 616b3a9737cSLeo Yan }; 617b3a9737cSLeo Yan 618b3a9737cSLeo Yan ete3 { 619b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 620b3a9737cSLeo Yan cpu = <&CPU3>; 621b3a9737cSLeo Yan }; 622b3a9737cSLeo Yan 623b3a9737cSLeo Yan ete4 { 624b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 625b3a9737cSLeo Yan cpu = <&CPU4>; 626b3a9737cSLeo Yan }; 627b3a9737cSLeo Yan 628b3a9737cSLeo Yan ete5 { 629b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 630b3a9737cSLeo Yan cpu = <&CPU5>; 631b3a9737cSLeo Yan }; 632b3a9737cSLeo Yan 633b3a9737cSLeo Yan ete6 { 634b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 635b3a9737cSLeo Yan cpu = <&CPU6>; 636b3a9737cSLeo Yan }; 637b3a9737cSLeo Yan 638b3a9737cSLeo Yan ete7 { 639b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 640b3a9737cSLeo Yan cpu = <&CPU7>; 641b3a9737cSLeo Yan }; 642b3a9737cSLeo Yan 643b3a9737cSLeo Yan trbe { 644b3a9737cSLeo Yan compatible = "arm,trace-buffer-extension"; 6451300bbceSJagdish Gediya interrupts = <GIC_PPI 2 IRQ_TYPE_LEVEL_LOW 0>; 646b3a9737cSLeo Yan }; 647b3a9737cSLeo Yan 648b3a9737cSLeo Yan trusty { 649b3a9737cSLeo Yan #size-cells = <0x02>; 650b3a9737cSLeo Yan #address-cells = <0x02>; 651b3a9737cSLeo Yan ranges = <0x00>; 652b3a9737cSLeo Yan compatible = "android,trusty-v1"; 653b3a9737cSLeo Yan 654b3a9737cSLeo Yan virtio { 655b3a9737cSLeo Yan compatible = "android,trusty-virtio-v1"; 656b3a9737cSLeo Yan }; 657b3a9737cSLeo Yan 658b3a9737cSLeo Yan test { 659b3a9737cSLeo Yan compatible = "android,trusty-test-v1"; 660b3a9737cSLeo Yan }; 661b3a9737cSLeo Yan 662b3a9737cSLeo Yan log { 663b3a9737cSLeo Yan compatible = "android,trusty-log-v1"; 664b3a9737cSLeo Yan }; 665b3a9737cSLeo Yan 666b3a9737cSLeo Yan irq { 667b3a9737cSLeo Yan ipi-range = <0x08 0x0f 0x08>; 668b3a9737cSLeo Yan interrupt-ranges = <0x00 0x0f 0x00 0x10 0x1f 0x01 0x20 0x3f 0x02>; 669b3a9737cSLeo Yan interrupt-templates = <0x01 0x00 0x8001 0x01 0x01 0x04 0x8001 0x01 0x00 0x04>; 670b3a9737cSLeo Yan compatible = "android,trusty-irq-v1"; 671b3a9737cSLeo Yan }; 672b3a9737cSLeo Yan }; 673b3a9737cSLeo Yan 674b3a9737cSLeo Yan /* used in U-boot, Linux doesn't care */ 675b3a9737cSLeo Yan arm_ffa { 676b3a9737cSLeo Yan compatible = "arm,ffa"; 677b3a9737cSLeo Yan method = "smc"; 678b3a9737cSLeo Yan }; 679b3a9737cSLeo Yan}; 680