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"; 270b3a9737cSLeo Yan interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH>; 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>; 2936c069e71SBoyan Karatotev interrupts = <GIC_SPI MHU_RX_INT_NUM IRQ_TYPE_LEVEL_HIGH>; 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>; 335b3a9737cSLeo Yan #interrupt-cells = <3>; 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 */ 341b3a9737cSLeo Yan interrupts = <GIC_PPI 0x9 IRQ_TYPE_LEVEL_LOW>; 342b3a9737cSLeo Yan }; 343b3a9737cSLeo Yan 344b3a9737cSLeo Yan timer { 345b3a9737cSLeo Yan compatible = "arm,armv8-timer"; 346b3a9737cSLeo Yan interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW>, 347b3a9737cSLeo Yan <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW>, 348b3a9737cSLeo Yan <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>, 349b3a9737cSLeo Yan <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>; 350b3a9737cSLeo Yan }; 351b3a9737cSLeo Yan 352b3a9737cSLeo Yan soc_refclk: refclk { 353b3a9737cSLeo Yan compatible = "fixed-clock"; 354b3a9737cSLeo Yan #clock-cells = <0>; 355b3a9737cSLeo Yan clock-frequency = <1000000000>; 356b3a9737cSLeo Yan clock-output-names = "apb_pclk"; 357b3a9737cSLeo Yan }; 358b3a9737cSLeo Yan 359b3a9737cSLeo Yan soc_refclk60mhz: refclk60mhz { 360b3a9737cSLeo Yan compatible = "fixed-clock"; 361b3a9737cSLeo Yan #clock-cells = <0>; 362b3a9737cSLeo Yan clock-frequency = <60000000>; 363b3a9737cSLeo Yan clock-output-names = "iofpga_clk"; 364b3a9737cSLeo Yan }; 365b3a9737cSLeo Yan 366b3a9737cSLeo Yan soc_uartclk: uartclk { 367b3a9737cSLeo Yan compatible = "fixed-clock"; 368b3a9737cSLeo Yan #clock-cells = <0>; 369b3a9737cSLeo Yan clock-frequency = <UARTCLK_FREQ>; 370b3a9737cSLeo Yan clock-output-names = "uartclk"; 371b3a9737cSLeo Yan }; 372b3a9737cSLeo Yan 373b3a9737cSLeo Yan /* soc_uart0 on FPGA, ap_ns_uart on FVP */ 374b3a9737cSLeo Yan os_uart: serial@2a400000 { 375b3a9737cSLeo Yan compatible = "arm,pl011", "arm,primecell"; 376b3a9737cSLeo Yan reg = <0x0 0x2A400000 0x0 UART_OFFSET>; 377b3a9737cSLeo Yan interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>; 378b3a9737cSLeo Yan clocks = <&soc_uartclk>, <&soc_refclk>; 379b3a9737cSLeo Yan clock-names = "uartclk", "apb_pclk"; 380b3a9737cSLeo Yan status = "okay"; 381b3a9737cSLeo Yan }; 382b3a9737cSLeo Yan 38379c6ede0SLeo Yan#if !TC_DPU_USE_SCMI_CLK 38479c6ede0SLeo Yan dpu_aclk: dpu_aclk { 38579c6ede0SLeo Yan compatible = "fixed-clock"; 38679c6ede0SLeo Yan #clock-cells = <0>; 38779c6ede0SLeo Yan clock-frequency = <VENCODER_TIMING_CLK>; 38879c6ede0SLeo Yan clock-output-names = "fpga:dpu_aclk"; 38979c6ede0SLeo Yan }; 39079c6ede0SLeo Yan 39179c6ede0SLeo Yan dpu_pixel_clk: dpu-pixel-clk { 39279c6ede0SLeo Yan compatible = "fixed-clock"; 39379c6ede0SLeo Yan #clock-cells = <0>; 39479c6ede0SLeo Yan clock-frequency = <VENCODER_TIMING_CLK>; 39579c6ede0SLeo Yan clock-output-names = "pxclk"; 39679c6ede0SLeo Yan }; 39779c6ede0SLeo Yan#endif /* !TC_DPU_USE_SCMI_CLK */ 39879c6ede0SLeo Yan 399b3a9737cSLeo Yan vencoder { 400b3a9737cSLeo Yan compatible = "drm,virtual-encoder"; 401b3a9737cSLeo Yan port { 402b3a9737cSLeo Yan vencoder_in: endpoint { 403b3a9737cSLeo Yan remote-endpoint = <&dp_pl0_out0>; 404b3a9737cSLeo Yan }; 405b3a9737cSLeo Yan }; 406b3a9737cSLeo Yan 407b3a9737cSLeo Yan display-timings { 408b3a9737cSLeo Yan timing-panel { 409b3a9737cSLeo Yan VENCODER_TIMING; 410b3a9737cSLeo Yan }; 411b3a9737cSLeo Yan }; 412b3a9737cSLeo Yan 413b3a9737cSLeo Yan }; 414b3a9737cSLeo Yan 415e6ef3ef0SLeo Yan ethernet: ethernet@18000000 { 416b3a9737cSLeo Yan reg = <0x0 0x18000000 0x0 0x10000>; 417b3a9737cSLeo Yan interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>; 418b3a9737cSLeo Yan 419b3a9737cSLeo Yan reg-io-width = <2>; 420b3a9737cSLeo Yan smsc,irq-push-pull; 421b3a9737cSLeo Yan }; 422b3a9737cSLeo Yan 423b3a9737cSLeo Yan bp_clock24mhz: clock24mhz { 424b3a9737cSLeo Yan compatible = "fixed-clock"; 425b3a9737cSLeo Yan #clock-cells = <0>; 426b3a9737cSLeo Yan clock-frequency = <24000000>; 427b3a9737cSLeo Yan clock-output-names = "bp:clock24mhz"; 428b3a9737cSLeo Yan }; 429b3a9737cSLeo Yan 430b3a9737cSLeo Yan 431b3a9737cSLeo Yan sysreg: sysreg@1c010000 { 432b3a9737cSLeo Yan compatible = "arm,vexpress-sysreg"; 433b3a9737cSLeo Yan reg = <0x0 0x001c010000 0x0 0x1000>; 434b3a9737cSLeo Yan gpio-controller; 435b3a9737cSLeo Yan #gpio-cells = <2>; 436b3a9737cSLeo Yan }; 437b3a9737cSLeo Yan 438b3a9737cSLeo Yan fixed_3v3: v2m-3v3 { 439b3a9737cSLeo Yan compatible = "regulator-fixed"; 440b3a9737cSLeo Yan regulator-name = "3V3"; 441b3a9737cSLeo Yan regulator-min-microvolt = <3300000>; 442b3a9737cSLeo Yan regulator-max-microvolt = <3300000>; 443b3a9737cSLeo Yan regulator-always-on; 444b3a9737cSLeo Yan }; 445b3a9737cSLeo Yan 446e6ef3ef0SLeo Yan mmci: mmci@1c050000 { 447b3a9737cSLeo Yan compatible = "arm,pl180", "arm,primecell"; 448b3a9737cSLeo Yan reg = <0x0 0x001c050000 0x0 0x1000>; 449b3a9737cSLeo Yan interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>, 450b3a9737cSLeo Yan <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>; 451b3a9737cSLeo Yan wp-gpios = <&sysreg 1 0>; 452b3a9737cSLeo Yan bus-width = <4>; 453b3a9737cSLeo Yan max-frequency = <25000000>; 454b3a9737cSLeo Yan vmmc-supply = <&fixed_3v3>; 455b3a9737cSLeo Yan clocks = <&bp_clock24mhz>, <&bp_clock24mhz>; 456b3a9737cSLeo Yan clock-names = "mclk", "apb_pclk"; 457b3a9737cSLeo Yan }; 458b3a9737cSLeo Yan 459b3a9737cSLeo Yan gpu_clk: gpu_clk { 460b3a9737cSLeo Yan compatible = "fixed-clock"; 461b3a9737cSLeo Yan #clock-cells = <0>; 462b3a9737cSLeo Yan clock-frequency = <1000000000>; 463b3a9737cSLeo Yan }; 464b3a9737cSLeo Yan 465b3a9737cSLeo Yan gpu_core_clk: gpu_core_clk { 466b3a9737cSLeo Yan compatible = "fixed-clock"; 467b3a9737cSLeo Yan #clock-cells = <0>; 468b3a9737cSLeo Yan clock-frequency = <1000000000>; 469b3a9737cSLeo Yan }; 470b3a9737cSLeo Yan 471b3a9737cSLeo Yan gpu: gpu@2d000000 { 472b3a9737cSLeo Yan compatible = "arm,mali-midgard"; 473b3a9737cSLeo Yan reg = <0x0 0x2d000000 0x0 0x200000>; 474b3a9737cSLeo Yan interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>, 475b3a9737cSLeo Yan <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>, 476b3a9737cSLeo Yan <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>; 477b3a9737cSLeo Yan interrupt-names = "JOB", "MMU", "GPU"; 478b3a9737cSLeo Yan clocks = <&gpu_core_clk>; 479b3a9737cSLeo Yan clock-names = "shadercores"; 480b3a9737cSLeo Yan#if TC_SCMI_PD_CTRL_EN 481b3a9737cSLeo Yan power-domains = <&scmi_devpd GPU_SCMI_PD_IDX>; 482b3a9737cSLeo Yan scmi-perf-domain = <3>; 483b3a9737cSLeo Yan#endif /* TC_SCMI_PD_CTRL_EN */ 484b3a9737cSLeo Yan 485bebefe0fSAngel Rodriguez Garcia pbha { 486bebefe0fSAngel Rodriguez Garcia int-id-override = <0 0x22>, <2 0x23>, <4 0x23>, <7 0x22>, 487bebefe0fSAngel Rodriguez Garcia <8 0x22>, <9 0x22>, <10 0x22>, <11 0x22>, 488bebefe0fSAngel Rodriguez Garcia <12 0x22>, <13 0x22>, <16 0x22>, <17 0x32>, 489bebefe0fSAngel Rodriguez Garcia <18 0x32>, <19 0x22>, <20 0x22>, <21 0x32>, 490bebefe0fSAngel Rodriguez Garcia <22 0x32>, <24 0x22>, <28 0x32>; 491bebefe0fSAngel Rodriguez Garcia propagate-bits = <0x0f>; 492bebefe0fSAngel Rodriguez Garcia }; 493b3a9737cSLeo Yan }; 494b3a9737cSLeo Yan 495b3a9737cSLeo Yan power_model_simple { 496b3a9737cSLeo Yan /* 497b3a9737cSLeo Yan * Numbers used are irrelevant to Titan, 498b3a9737cSLeo Yan * it helps suppressing the kernel warnings. 499b3a9737cSLeo Yan */ 500b3a9737cSLeo Yan compatible = "arm,mali-simple-power-model"; 501b3a9737cSLeo Yan static-coefficient = <2427750>; 502b3a9737cSLeo Yan dynamic-coefficient = <4687>; 503b3a9737cSLeo Yan ts = <20000 2000 (-20) 2>; 504b3a9737cSLeo Yan thermal-zone = ""; 505b3a9737cSLeo Yan }; 506b3a9737cSLeo Yan 507b3a9737cSLeo Yan smmu_700: iommu@3f000000 { 508b3a9737cSLeo Yan #iommu-cells = <1>; 509b3a9737cSLeo Yan compatible = "arm,smmu-v3"; 510b3a9737cSLeo Yan reg = <0x0 0x3f000000 0x0 0x5000000>; 511b3a9737cSLeo Yan interrupts = <GIC_SPI 228 IRQ_TYPE_EDGE_RISING>, 512b3a9737cSLeo Yan <GIC_SPI 229 IRQ_TYPE_EDGE_RISING>, 513b3a9737cSLeo Yan <GIC_SPI 230 IRQ_TYPE_EDGE_RISING>; 514b3a9737cSLeo Yan interrupt-names = "eventq", "cmdq-sync", "gerror"; 515b3a9737cSLeo Yan dma-coherent; 516*2458b387SLeo Yan status = "disabled"; 517b3a9737cSLeo Yan }; 518b3a9737cSLeo Yan 519b3a9737cSLeo Yan dp0: display@DPU_ADDR { 520b3a9737cSLeo Yan #address-cells = <1>; 521b3a9737cSLeo Yan #size-cells = <0>; 522b3a9737cSLeo Yan compatible = "arm,mali-d71"; 523b3a9737cSLeo Yan reg = <HI(ADDRESSIFY(DPU_ADDR)) LO(ADDRESSIFY(DPU_ADDR)) 0 0x20000>; 524b3a9737cSLeo Yan interrupts = <GIC_SPI DPU_IRQ IRQ_TYPE_LEVEL_HIGH>; 525b3a9737cSLeo Yan interrupt-names = "DPU"; 526b3a9737cSLeo Yan DPU_CLK_ATTR1; 527b3a9737cSLeo Yan 528b3a9737cSLeo Yan pl0: pipeline@0 { 529b3a9737cSLeo Yan reg = <0>; 530b3a9737cSLeo Yan DPU_CLK_ATTR2; 531b3a9737cSLeo Yan pl_id = <0>; 532b3a9737cSLeo Yan ports { 533b3a9737cSLeo Yan #address-cells = <1>; 534b3a9737cSLeo Yan #size-cells = <0>; 535b3a9737cSLeo Yan port@0 { 536b3a9737cSLeo Yan reg = <0>; 537b3a9737cSLeo Yan dp_pl0_out0: endpoint { 538b3a9737cSLeo Yan remote-endpoint = <&vencoder_in>; 539b3a9737cSLeo Yan }; 540b3a9737cSLeo Yan }; 541b3a9737cSLeo Yan }; 542b3a9737cSLeo Yan }; 543b3a9737cSLeo Yan 544b3a9737cSLeo Yan pl1: pipeline@1 { 545b3a9737cSLeo Yan reg = <1>; 546b3a9737cSLeo Yan DPU_CLK_ATTR3; 547b3a9737cSLeo Yan pl_id = <1>; 548b3a9737cSLeo Yan ports { 549b3a9737cSLeo Yan #address-cells = <1>; 550b3a9737cSLeo Yan #size-cells = <0>; 551b3a9737cSLeo Yan port@0 { 552b3a9737cSLeo Yan reg = <0>; 553b3a9737cSLeo Yan }; 554b3a9737cSLeo Yan }; 555b3a9737cSLeo Yan }; 556b3a9737cSLeo Yan }; 557b3a9737cSLeo Yan 558b3a9737cSLeo Yan /* 559b3a9737cSLeo Yan * L3 cache in the DSU is the Memory System Component (MSC) 560b3a9737cSLeo Yan * The MPAM registers are accessed through utility bus in the DSU 561b3a9737cSLeo Yan */ 562b3a9737cSLeo Yan msc0 { 563b3a9737cSLeo Yan compatible = "arm,mpam-msc"; 564b3a9737cSLeo Yan reg = <MPAM_ADDR 0x0 0x2000>; 565b3a9737cSLeo Yan }; 566b3a9737cSLeo Yan 567b3a9737cSLeo Yan ete0 { 568b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 569b3a9737cSLeo Yan cpu = <&CPU0>; 570b3a9737cSLeo Yan }; 571b3a9737cSLeo Yan 572b3a9737cSLeo Yan ete1 { 573b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 574b3a9737cSLeo Yan cpu = <&CPU1>; 575b3a9737cSLeo Yan }; 576b3a9737cSLeo Yan 577b3a9737cSLeo Yan ete2 { 578b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 579b3a9737cSLeo Yan cpu = <&CPU2>; 580b3a9737cSLeo Yan }; 581b3a9737cSLeo Yan 582b3a9737cSLeo Yan ete3 { 583b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 584b3a9737cSLeo Yan cpu = <&CPU3>; 585b3a9737cSLeo Yan }; 586b3a9737cSLeo Yan 587b3a9737cSLeo Yan ete4 { 588b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 589b3a9737cSLeo Yan cpu = <&CPU4>; 590b3a9737cSLeo Yan }; 591b3a9737cSLeo Yan 592b3a9737cSLeo Yan ete5 { 593b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 594b3a9737cSLeo Yan cpu = <&CPU5>; 595b3a9737cSLeo Yan }; 596b3a9737cSLeo Yan 597b3a9737cSLeo Yan ete6 { 598b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 599b3a9737cSLeo Yan cpu = <&CPU6>; 600b3a9737cSLeo Yan }; 601b3a9737cSLeo Yan 602b3a9737cSLeo Yan ete7 { 603b3a9737cSLeo Yan compatible = "arm,embedded-trace-extension"; 604b3a9737cSLeo Yan cpu = <&CPU7>; 605b3a9737cSLeo Yan }; 606b3a9737cSLeo Yan 607b3a9737cSLeo Yan trbe { 608b3a9737cSLeo Yan compatible = "arm,trace-buffer-extension"; 609b3a9737cSLeo Yan interrupts = <GIC_PPI 2 IRQ_TYPE_LEVEL_LOW>; 610b3a9737cSLeo Yan }; 611b3a9737cSLeo Yan 612b3a9737cSLeo Yan trusty { 613b3a9737cSLeo Yan #size-cells = <0x02>; 614b3a9737cSLeo Yan #address-cells = <0x02>; 615b3a9737cSLeo Yan ranges = <0x00>; 616b3a9737cSLeo Yan compatible = "android,trusty-v1"; 617b3a9737cSLeo Yan 618b3a9737cSLeo Yan virtio { 619b3a9737cSLeo Yan compatible = "android,trusty-virtio-v1"; 620b3a9737cSLeo Yan }; 621b3a9737cSLeo Yan 622b3a9737cSLeo Yan test { 623b3a9737cSLeo Yan compatible = "android,trusty-test-v1"; 624b3a9737cSLeo Yan }; 625b3a9737cSLeo Yan 626b3a9737cSLeo Yan log { 627b3a9737cSLeo Yan compatible = "android,trusty-log-v1"; 628b3a9737cSLeo Yan }; 629b3a9737cSLeo Yan 630b3a9737cSLeo Yan irq { 631b3a9737cSLeo Yan ipi-range = <0x08 0x0f 0x08>; 632b3a9737cSLeo Yan interrupt-ranges = <0x00 0x0f 0x00 0x10 0x1f 0x01 0x20 0x3f 0x02>; 633b3a9737cSLeo Yan interrupt-templates = <0x01 0x00 0x8001 0x01 0x01 0x04 0x8001 0x01 0x00 0x04>; 634b3a9737cSLeo Yan compatible = "android,trusty-irq-v1"; 635b3a9737cSLeo Yan }; 636b3a9737cSLeo Yan }; 637b3a9737cSLeo Yan 638b3a9737cSLeo Yan /* used in U-boot, Linux doesn't care */ 639b3a9737cSLeo Yan arm_ffa { 640b3a9737cSLeo Yan compatible = "arm,ffa"; 641b3a9737cSLeo Yan method = "smc"; 642b3a9737cSLeo Yan }; 643b3a9737cSLeo Yan}; 644