// SPDX-License-Identifier: (GPL-2.0 OR MIT) /* * Unisoc UMS512 SoC DTS file * * Copyright (C) 2021, Unisoc Inc. */ #include #include / { interrupt-parent = <&gic>; #address-cells = <2>; #size-cells = <2>; cpus { #address-cells = <2>; #size-cells = <0>; cpu-map { cluster0 { core0 { cpu = <&CPU0>; }; core1 { cpu = <&CPU1>; }; core2 { cpu = <&CPU2>; }; core3 { cpu = <&CPU3>; }; core4 { cpu = <&CPU4>; }; core5 { cpu = <&CPU5>; }; core6 { cpu = <&CPU6>; }; core7 { cpu = <&CPU7>; }; }; }; CPU0: cpu@0 { device_type = "cpu"; compatible = "arm,cortex-a55"; reg = <0x0 0x0>; enable-method = "psci"; cpu-idle-states = <&CORE_PD>; }; CPU1: cpu@100 { device_type = "cpu"; compatible = "arm,cortex-a55"; reg = <0x0 0x100>; enable-method = "psci"; cpu-idle-states = <&CORE_PD>; }; CPU2: cpu@200 { device_type = "cpu"; compatible = "arm,cortex-a55"; reg = <0x0 0x200>; enable-method = "psci"; cpu-idle-states = <&CORE_PD>; }; CPU3: cpu@300 { device_type = "cpu"; compatible = "arm,cortex-a55"; reg = <0x0 0x300>; enable-method = "psci"; cpu-idle-states = <&CORE_PD>; }; CPU4: cpu@400 { device_type = "cpu"; compatible = "arm,cortex-a55"; reg = <0x0 0x400>; enable-method = "psci"; cpu-idle-states = <&CORE_PD>; }; CPU5: cpu@500 { device_type = "cpu"; compatible = "arm,cortex-a55"; reg = <0x0 0x500>; enable-method = "psci"; cpu-idle-states = <&CORE_PD>; }; CPU6: cpu@600 { device_type = "cpu"; compatible = "arm,cortex-a75"; reg = <0x0 0x600>; enable-method = "psci"; cpu-idle-states = <&CORE_PD>; }; CPU7: cpu@700 { device_type = "cpu"; compatible = "arm,cortex-a75"; reg = <0x0 0x700>; enable-method = "psci"; cpu-idle-states = <&CORE_PD>; }; }; idle-states { entry-method = "psci"; CORE_PD: cpu-pd { compatible = "arm,idle-state"; entry-latency-us = <4000>; exit-latency-us = <4000>; min-residency-us = <10000>; local-timer-stop; arm,psci-suspend-param = <0x00010000>; }; }; psci { compatible = "arm,psci-0.2"; method = "smc"; }; timer { compatible = "arm,armv8-timer"; interrupts = , /* Physical Secure PPI */ , /* Physical Non-Secure PPI */ , /* Virtual PPI */ ; /* Hipervisor PPI */ }; pmu-a55 { compatible = "arm,cortex-a55-pmu"; interrupts = , , , , , ; interrupt-affinity = <&CPU0>, <&CPU1>, <&CPU2>, <&CPU3>, <&CPU4>, <&CPU5>; }; pmu-a75 { compatible = "arm,cortex-a75-pmu"; interrupts = , ; interrupt-affinity = <&CPU6>, <&CPU7>; }; soc: soc { compatible = "simple-bus"; #address-cells = <2>; #size-cells = <2>; ranges; gic: interrupt-controller@12000000 { compatible = "arm,gic-v3"; reg = <0x0 0x12000000 0 0x20000>, /* GICD */ <0x0 0x12040000 0 0x100000>; /* GICR */ #interrupt-cells = <3>; #address-cells = <2>; #size-cells = <2>; ranges; redistributor-stride = <0x0 0x20000>; /* 128KB stride */ #redistributor-regions = <1>; interrupt-controller; interrupts = ; }; ap_ahb_regs: syscon@20100000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x20100000 0 0x4000>; #address-cells = <1>; #size-cells = <1>; ranges = <0 0 0x20100000 0x4000>; apahb_gate: clock-controller@0 { compatible = "sprd,ums512-apahb-gate"; reg = <0x0 0x3000>; clocks = <&ext_26m>; clock-names = "ext-26m"; #clock-cells = <1>; }; }; pub_apb_regs: syscon@31050000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x31050000 0 0x9000>; }; top_dvfs_apb_regs: syscon@322a0000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x322a0000 0 0x8000>; }; ap_intc0_regs: syscon@32310000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x32310000 0 0x1000>; }; ap_intc1_regs: syscon@32320000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x32320000 0 0x1000>; }; ap_intc2_regs: syscon@32330000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x32330000 0 0x1000>; }; ap_intc3_regs: syscon@32340000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x32340000 0 0x1000>; }; ap_intc4_regs: syscon@32350000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x32350000 0 0x1000>; }; ap_intc5_regs: syscon@32360000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x32360000 0 0x1000>; }; anlg_phy_g0_regs: syscon@32390000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x32390000 0 0x3000>; #address-cells = <1>; #size-cells = <1>; ranges = <0 0 0x32390000 0x3000>; dpll0: clock-controller@0 { compatible = "sprd,ums512-g0-pll"; reg = <0x0 0x100>; #clock-cells = <1>; }; }; anlg_phy_g2_regs: syscon@323b0000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x323b0000 0 0x3000>; #address-cells = <1>; #size-cells = <1>; ranges = <0 0 0x323b0000 0x3000>; mpll1: clock-controller@0 { compatible = "sprd,ums512-g2-pll"; reg = <0x0 0x100>; #clock-cells = <1>; }; }; anlg_phy_g3_regs: syscon@323c0000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x323c0000 0 0x3000>; #address-cells = <1>; #size-cells = <1>; ranges = <0 0 0x323c0000 0x3000>; pll1: clock-controller@0 { compatible = "sprd,ums512-g3-pll"; reg = <0x0 0x3000>; clocks = <&ext_26m>; clock-names = "ext-26m"; #clock-cells = <1>; }; }; anlg_phy_gc_regs: syscon@323e0000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x323e0000 0 0x3000>; #address-cells = <1>; #size-cells = <1>; ranges = <0 0 0x323e0000 0x3000>; pll2: clock-controller@0 { compatible = "sprd,ums512-gc-pll"; reg = <0x0 0x100>; clocks = <&ext_26m>; clock-names = "ext-26m"; #clock-cells = <1>; }; }; anlg_phy_g10_regs: syscon@323f0000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x323f0000 0 0x3000>; }; aon_apb_regs: syscon@327d0000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x327d0000 0 0x3000>; #address-cells = <1>; #size-cells = <1>; ranges = <0 0 0x327d0000 0x3000>; aonapb_gate: clock-controller@0 { compatible = "sprd,ums512-aon-gate"; reg = <0x0 0x3000>; clocks = <&ext_26m>; clock-names = "ext-26m"; #clock-cells = <1>; }; }; pmu_apb_regs: syscon@327e0000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x327e0000 0 0x3000>; #address-cells = <1>; #size-cells = <1>; ranges = <0 0 0x327e0000 0x3000>; pmu_gate: clock-controller@0 { compatible = "sprd,ums512-pmu-gate"; reg = <0x0 0x3000>; clocks = <&ext_26m>; clock-names = "ext-26m"; #clock-cells = <1>; }; }; audcp_apb_regs: syscon@3350d000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x3350d000 0 0x1000>; #address-cells = <1>; #size-cells = <1>; ranges = <0 0 0x3350d000 0x1000>; audcpapb_gate: clock-controller@0 { compatible = "sprd,ums512-audcpapb-gate"; reg = <0x0 0x300>; #clock-cells = <1>; }; }; audcp_ahb_regs: syscon@335e0000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x335e0000 0 0x1000>; #address-cells = <1>; #size-cells = <1>; ranges = <0 0 0x335e0000 0x1000>; audcpahb_gate: clock-controller@0 { compatible = "sprd,ums512-audcpahb-gate"; reg = <0x0 0x300>; #clock-cells = <1>; }; }; gpu_apb_regs: syscon@60100000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x60100000 0 0x3000>; #address-cells = <1>; #size-cells = <1>; ranges = <0 0 0x60100000 0x3000>; gpu_clk: clock-controller@0 { compatible = "sprd,ums512-gpu-clk"; clocks = <&ext_26m>; clock-names = "ext-26m"; reg = <0x0 0x100>; #clock-cells = <1>; }; }; gpu_dvfs_apb_regs: syscon@60110000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x60110000 0 0x3000>; }; mm_ahb_regs: syscon@62200000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x62200000 0 0x3000>; #address-cells = <1>; #size-cells = <1>; ranges = <0 0 0x62200000 0x3000>; mm_gate: clock-controller@0 { compatible = "sprd,ums512-mm-gate-clk"; reg = <0x0 0x3000>; #clock-cells = <1>; }; }; ap_apb_regs: syscon@71000000 { compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd"; reg = <0 0x71000000 0 0x3000>; #address-cells = <1>; #size-cells = <1>; ranges = <0 0 0x71000000 0x3000>; apapb_gate: clock-controller@0 { compatible = "sprd,ums512-apapb-gate"; reg = <0x0 0x3000>; #clock-cells = <1>; }; }; ap_clk: clock-controller@20200000 { compatible = "sprd,ums512-ap-clk"; reg = <0 0x20200000 0 0x1000>; clocks = <&ext_26m>; clock-names = "ext-26m"; #clock-cells = <1>; }; aon_clk: clock-controller@32080000 { compatible = "sprd,ums512-aonapb-clk"; reg = <0 0x32080000 0 0x1000>; clocks = <&ext_26m>, <&ext_32k>, <&ext_4m>, <&rco_100m>; clock-names = "ext-26m", "ext-32k", "ext-4m", "rco-100m"; #clock-cells = <1>; }; mm_clk: clock-controller@62100000 { compatible = "sprd,ums512-mm-clk"; reg = <0 0x62100000 0 0x1000>; clocks = <&ext_26m>; clock-names = "ext-26m"; #clock-cells = <1>; }; /* SoC Funnel */ funnel@3c002000 { compatible = "arm,coresight-dynamic-funnel", "arm,primecell"; reg = <0 0x3c002000 0 0x1000>; clocks = <&ext_26m>; clock-names = "apb_pclk"; out-ports { port { funnel_soc_out_port: endpoint { remote-endpoint = <&etb_in>; }; }; }; in-ports { #address-cells = <1>; #size-cells = <0>; port@1 { reg = <1>; funnel_soc_in_port: endpoint { remote-endpoint = <&funnel_corinth_out_port>; }; }; }; }; /* SoC ETF */ soc_etb: etb@3c003000 { compatible = "arm,coresight-tmc", "arm,primecell"; reg = <0 0x3c003000 0 0x1000>; clocks = <&ext_26m>; clock-names = "apb_pclk"; in-ports { port { etb_in: endpoint { remote-endpoint = <&funnel_soc_out_port>; }; }; }; }; /* AP-CPU Funnel for core3/4/5/7 */ funnel@3e001000 { compatible = "arm,coresight-dynamic-funnel", "arm,primecell"; reg = <0 0x3e001000 0 0x1000>; clocks = <&ext_26m>; clock-names = "apb_pclk"; out-ports { port { funnel_corinth_lit_out_port: endpoint { remote-endpoint = <&corinth_etf_lit_in>; }; }; }; in-ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; funnel_core_in_port3: endpoint { remote-endpoint = <&etm3_out>; }; }; port@1 { reg = <1>; funnel_core_in_port4: endpoint { remote-endpoint = <&etm4_out>; }; }; port@2 { reg = <2>; funnel_core_in_port5: endpoint { remote-endpoint = <&etm5_out>; }; }; port@3 { reg = <3>; funnel_core_in_port7: endpoint { remote-endpoint = <&etm7_out>; }; }; }; }; /* AP-CPU ETF for little cores */ etf@3e002000 { compatible = "arm,coresight-tmc", "arm,primecell"; reg = <0 0x3e002000 0 0x1000>; clocks = <&ext_26m>; clock-names = "apb_pclk"; out-ports { port { corinth_etf_lit_out: endpoint { remote-endpoint = <&funnel_corinth_from_lit_in_port>; }; }; }; in-ports { port { corinth_etf_lit_in: endpoint { remote-endpoint = <&funnel_corinth_lit_out_port>; }; }; }; }; /* AP-CPU ETF for big cores */ etf@3e003000 { compatible = "arm,coresight-tmc", "arm,primecell"; reg = <0 0x3e003000 0 0x1000>; clocks = <&ext_26m>; clock-names = "apb_pclk"; out-ports { port { corinth_etf_big_out: endpoint { remote-endpoint = <&funnel_corinth_from_big_in_port>; }; }; }; in-ports { port { corinth_etf_big_in: endpoint { remote-endpoint = <&funnel_corinth_big_out_port>; }; }; }; }; /* Funnel to SoC */ funnel@3e004000 { compatible = "arm,coresight-dynamic-funnel", "arm,primecell"; reg = <0 0x3e004000 0 0x1000>; clocks = <&ext_26m>; clock-names = "apb_pclk"; out-ports { port { funnel_corinth_out_port: endpoint { remote-endpoint = <&funnel_soc_in_port>; }; }; }; in-ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; funnel_corinth_from_lit_in_port: endpoint { remote-endpoint = <&corinth_etf_lit_out>; }; }; port@1 { reg = <1>; funnel_corinth_from_big_in_port: endpoint { remote-endpoint = <&corinth_etf_big_out>; }; }; }; }; /* AP-CPU Funnel for core0/1/2/6 */ funnel@3e005000 { compatible = "arm,coresight-dynamic-funnel", "arm,primecell"; reg = <0 0x3e005000 0 0x1000>; clocks = <&ext_26m>; clock-names = "apb_pclk"; out-ports { port { funnel_corinth_big_out_port: endpoint { remote-endpoint = <&corinth_etf_big_in>; }; }; }; in-ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; funnel_core_in_port0: endpoint { remote-endpoint = <&etm0_out>; }; }; port@1 { reg = <1>; funnel_core_in_port1: endpoint { remote-endpoint = <&etm1_out>; }; }; port@2 { reg = <2>; funnel_core_in_port2: endpoint { remote-endpoint = <&etm2_out>; }; }; port@3 { reg = <3>; funnel_core_in_port6: endpoint { remote-endpoint = <&etm6_out>; }; }; }; }; etm0: etm@3f040000 { compatible = "arm,coresight-etm4x", "arm,primecell"; reg = <0 0x3f040000 0 0x1000>; cpu = <&CPU0>; clocks = <&ext_26m>; clock-names = "apb_pclk"; out-ports { port { etm0_out: endpoint { remote-endpoint = <&funnel_core_in_port0>; }; }; }; }; etm1: etm@3f140000 { compatible = "arm,coresight-etm4x", "arm,primecell"; reg = <0 0x3f140000 0 0x1000>; cpu = <&CPU1>; clocks = <&ext_26m>; clock-names = "apb_pclk"; out-ports { port { etm1_out: endpoint { remote-endpoint = <&funnel_core_in_port1>; }; }; }; }; etm2: etm@3f240000 { compatible = "arm,coresight-etm4x", "arm,primecell"; reg = <0 0x3f240000 0 0x1000>; cpu = <&CPU2>; clocks = <&ext_26m>; clock-names = "apb_pclk"; out-ports { port { etm2_out: endpoint { remote-endpoint = <&funnel_core_in_port2>; }; }; }; }; etm3: etm@3f340000 { compatible = "arm,coresight-etm4x", "arm,primecell"; reg = <0 0x3f340000 0 0x1000>; cpu = <&CPU3>; clocks = <&ext_26m>; clock-names = "apb_pclk"; out-ports { port { etm3_out: endpoint { remote-endpoint = <&funnel_core_in_port3>; }; }; }; }; etm4: etm@3f440000 { compatible = "arm,coresight-etm4x", "arm,primecell"; reg = <0 0x3f440000 0 0x1000>; cpu = <&CPU4>; clocks = <&ext_26m>; clock-names = "apb_pclk"; out-ports { port { etm4_out: endpoint { remote-endpoint = <&funnel_core_in_port4>; }; }; }; }; etm5: etm@3f540000 { compatible = "arm,coresight-etm4x", "arm,primecell"; reg = <0 0x3f540000 0 0x1000>; cpu = <&CPU5>; clocks = <&ext_26m>; clock-names = "apb_pclk"; out-ports { port { etm5_out: endpoint { remote-endpoint = <&funnel_core_in_port5>; }; }; }; }; etm6: etm@3f640000 { compatible = "arm,coresight-etm4x", "arm,primecell"; reg = <0 0x3f640000 0 0x1000>; cpu = <&CPU6>; clocks = <&ext_26m>; clock-names = "apb_pclk"; out-ports { port { etm6_out: endpoint { remote-endpoint = <&funnel_core_in_port6>; }; }; }; }; etm7: etm@3f740000 { compatible = "arm,coresight-etm4x", "arm,primecell"; reg = <0 0x3f740000 0 0x1000>; cpu = <&CPU7>; clocks = <&ext_26m>; clock-names = "apb_pclk"; out-ports { port { etm7_out: endpoint { remote-endpoint = <&funnel_core_in_port7>; }; }; }; }; apb@70000000 { compatible = "simple-bus"; #address-cells = <1>; #size-cells = <1>; ranges = <0 0x0 0x70000000 0x10000000>; uart0: serial@0 { compatible = "sprd,ums512-uart", "sprd,sc9836-uart"; reg = <0x0 0x100>; interrupts = ; clocks = <&ext_26m>; status = "disabled"; }; uart1: serial@100000 { compatible = "sprd,ums512-uart", "sprd,sc9836-uart"; reg = <0x100000 0x100>; interrupts = ; clocks = <&ext_26m>; status = "disabled"; }; sdio0: mmc@1100000 { compatible = "sprd,sdhci-r11"; reg = <0x1100000 0x1000>; interrupts = ; clocks = <&ap_clk CLK_SDIO0_2X>, <&apapb_gate CLK_SDIO0_EB>; clock-names = "sdio", "enable"; assigned-clocks = <&ap_clk CLK_SDIO0_2X>; assigned-clock-parents = <&pll1 CLK_RPLL>; status = "disabled"; }; sdio3: mmc@1400000 { compatible = "sprd,sdhci-r11"; reg = <0x1400000 0x1000>; interrupts = ; clocks = <&ap_clk CLK_EMMC_2X>, <&apapb_gate CLK_EMMC_EB>; clock-names = "sdio", "enable"; assigned-clocks = <&ap_clk CLK_EMMC_2X>; assigned-clock-parents = <&pll1 CLK_RPLL>; status = "disabled"; }; }; aon: bus@32000000 { compatible = "simple-bus"; #address-cells = <1>; #size-cells = <1>; ranges = <0 0x0 0x32000000 0x1000000>; adi_bus: spi@100000 { compatible = "sprd,ums512-adi"; reg = <0x100000 0x100000>; #address-cells = <1>; #size-cells = <0>; sprd,hw-channels = <2 0x18cc>, <3 0x18cc>, <13 0x1854>, <15 0x1874>, <17 0x1844>,<19 0x1844>, <21 0x1864>, <30 0x1820>, <35 0x19b8>, <39 0x19ac>; }; }; }; ext_26m: clk-26m { compatible = "fixed-clock"; #clock-cells = <0>; clock-frequency = <26000000>; clock-output-names = "ext-26m"; }; ext_32k: clk-32k { compatible = "fixed-clock"; #clock-cells = <0>; clock-frequency = <32768>; clock-output-names = "ext-32k"; }; ext_4m: clk-4m { compatible = "fixed-clock"; #clock-cells = <0>; clock-frequency = <4000000>; clock-output-names = "ext-4m"; }; rco_100m: clk-100m { compatible = "fixed-clock"; #clock-cells = <0>; clock-frequency = <100000000>; clock-output-names = "rco-100m"; }; };