1*a8f20eb6SHector Martin// SPDX-License-Identifier: GPL-2.0+ OR MIT 2*a8f20eb6SHector Martin/* 3*a8f20eb6SHector Martin * Apple T6022 "M2 Ultra" SoC 4*a8f20eb6SHector Martin * 5*a8f20eb6SHector Martin * Other names: H14J, "Rhodes 2C" 6*a8f20eb6SHector Martin * 7*a8f20eb6SHector Martin * Copyright The Asahi Linux Contributors 8*a8f20eb6SHector Martin */ 9*a8f20eb6SHector Martin 10*a8f20eb6SHector Martin#include <dt-bindings/gpio/gpio.h> 11*a8f20eb6SHector Martin#include <dt-bindings/interrupt-controller/apple-aic.h> 12*a8f20eb6SHector Martin#include <dt-bindings/interrupt-controller/irq.h> 13*a8f20eb6SHector Martin#include <dt-bindings/pinctrl/apple.h> 14*a8f20eb6SHector Martin#include <dt-bindings/phy/phy.h> 15*a8f20eb6SHector Martin#include <dt-bindings/spmi/spmi.h> 16*a8f20eb6SHector Martin 17*a8f20eb6SHector Martin#include "multi-die-cpp.h" 18*a8f20eb6SHector Martin 19*a8f20eb6SHector Martin#include "t602x-common.dtsi" 20*a8f20eb6SHector Martin 21*a8f20eb6SHector Martin/ { 22*a8f20eb6SHector Martin compatible = "apple,t6022", "apple,arm-platform"; 23*a8f20eb6SHector Martin 24*a8f20eb6SHector Martin #address-cells = <2>; 25*a8f20eb6SHector Martin #size-cells = <2>; 26*a8f20eb6SHector Martin 27*a8f20eb6SHector Martin cpus { 28*a8f20eb6SHector Martin cpu-map { 29*a8f20eb6SHector Martin cluster3 { 30*a8f20eb6SHector Martin core0 { 31*a8f20eb6SHector Martin cpu = <&cpu_e10>; 32*a8f20eb6SHector Martin }; 33*a8f20eb6SHector Martin core1 { 34*a8f20eb6SHector Martin cpu = <&cpu_e11>; 35*a8f20eb6SHector Martin }; 36*a8f20eb6SHector Martin core2 { 37*a8f20eb6SHector Martin cpu = <&cpu_e12>; 38*a8f20eb6SHector Martin }; 39*a8f20eb6SHector Martin core3 { 40*a8f20eb6SHector Martin cpu = <&cpu_e13>; 41*a8f20eb6SHector Martin }; 42*a8f20eb6SHector Martin }; 43*a8f20eb6SHector Martin 44*a8f20eb6SHector Martin cluster4 { 45*a8f20eb6SHector Martin core0 { 46*a8f20eb6SHector Martin cpu = <&cpu_p20>; 47*a8f20eb6SHector Martin }; 48*a8f20eb6SHector Martin core1 { 49*a8f20eb6SHector Martin cpu = <&cpu_p21>; 50*a8f20eb6SHector Martin }; 51*a8f20eb6SHector Martin core2 { 52*a8f20eb6SHector Martin cpu = <&cpu_p22>; 53*a8f20eb6SHector Martin }; 54*a8f20eb6SHector Martin core3 { 55*a8f20eb6SHector Martin cpu = <&cpu_p23>; 56*a8f20eb6SHector Martin }; 57*a8f20eb6SHector Martin }; 58*a8f20eb6SHector Martin 59*a8f20eb6SHector Martin cluster5 { 60*a8f20eb6SHector Martin core0 { 61*a8f20eb6SHector Martin cpu = <&cpu_p30>; 62*a8f20eb6SHector Martin }; 63*a8f20eb6SHector Martin core1 { 64*a8f20eb6SHector Martin cpu = <&cpu_p31>; 65*a8f20eb6SHector Martin }; 66*a8f20eb6SHector Martin core2 { 67*a8f20eb6SHector Martin cpu = <&cpu_p32>; 68*a8f20eb6SHector Martin }; 69*a8f20eb6SHector Martin core3 { 70*a8f20eb6SHector Martin cpu = <&cpu_p33>; 71*a8f20eb6SHector Martin }; 72*a8f20eb6SHector Martin }; 73*a8f20eb6SHector Martin }; 74*a8f20eb6SHector Martin 75*a8f20eb6SHector Martin cpu_e10: cpu@800 { 76*a8f20eb6SHector Martin compatible = "apple,blizzard"; 77*a8f20eb6SHector Martin device_type = "cpu"; 78*a8f20eb6SHector Martin reg = <0x0 0x800>; 79*a8f20eb6SHector Martin enable-method = "spin-table"; 80*a8f20eb6SHector Martin cpu-release-addr = <0 0>; /* to be filled by loader */ 81*a8f20eb6SHector Martin next-level-cache = <&l2_cache_3>; 82*a8f20eb6SHector Martin i-cache-size = <0x20000>; 83*a8f20eb6SHector Martin d-cache-size = <0x10000>; 84*a8f20eb6SHector Martin operating-points-v2 = <&blizzard_opp>; 85*a8f20eb6SHector Martin capacity-dmips-mhz = <756>; 86*a8f20eb6SHector Martin performance-domains = <&cpufreq_e_die1>; 87*a8f20eb6SHector Martin }; 88*a8f20eb6SHector Martin 89*a8f20eb6SHector Martin cpu_e11: cpu@801 { 90*a8f20eb6SHector Martin compatible = "apple,blizzard"; 91*a8f20eb6SHector Martin device_type = "cpu"; 92*a8f20eb6SHector Martin reg = <0x0 0x801>; 93*a8f20eb6SHector Martin enable-method = "spin-table"; 94*a8f20eb6SHector Martin cpu-release-addr = <0 0>; /* to be filled by loader */ 95*a8f20eb6SHector Martin next-level-cache = <&l2_cache_3>; 96*a8f20eb6SHector Martin i-cache-size = <0x20000>; 97*a8f20eb6SHector Martin d-cache-size = <0x10000>; 98*a8f20eb6SHector Martin operating-points-v2 = <&blizzard_opp>; 99*a8f20eb6SHector Martin capacity-dmips-mhz = <756>; 100*a8f20eb6SHector Martin performance-domains = <&cpufreq_e_die1>; 101*a8f20eb6SHector Martin }; 102*a8f20eb6SHector Martin 103*a8f20eb6SHector Martin cpu_e12: cpu@802 { 104*a8f20eb6SHector Martin compatible = "apple,blizzard"; 105*a8f20eb6SHector Martin device_type = "cpu"; 106*a8f20eb6SHector Martin reg = <0x0 0x802>; 107*a8f20eb6SHector Martin enable-method = "spin-table"; 108*a8f20eb6SHector Martin cpu-release-addr = <0 0>; /* to be filled by loader */ 109*a8f20eb6SHector Martin next-level-cache = <&l2_cache_3>; 110*a8f20eb6SHector Martin i-cache-size = <0x20000>; 111*a8f20eb6SHector Martin d-cache-size = <0x10000>; 112*a8f20eb6SHector Martin operating-points-v2 = <&blizzard_opp>; 113*a8f20eb6SHector Martin capacity-dmips-mhz = <756>; 114*a8f20eb6SHector Martin performance-domains = <&cpufreq_e_die1>; 115*a8f20eb6SHector Martin }; 116*a8f20eb6SHector Martin 117*a8f20eb6SHector Martin cpu_e13: cpu@803 { 118*a8f20eb6SHector Martin compatible = "apple,blizzard"; 119*a8f20eb6SHector Martin device_type = "cpu"; 120*a8f20eb6SHector Martin reg = <0x0 0x803>; 121*a8f20eb6SHector Martin enable-method = "spin-table"; 122*a8f20eb6SHector Martin cpu-release-addr = <0 0>; /* to be filled by loader */ 123*a8f20eb6SHector Martin next-level-cache = <&l2_cache_3>; 124*a8f20eb6SHector Martin i-cache-size = <0x20000>; 125*a8f20eb6SHector Martin d-cache-size = <0x10000>; 126*a8f20eb6SHector Martin operating-points-v2 = <&blizzard_opp>; 127*a8f20eb6SHector Martin capacity-dmips-mhz = <756>; 128*a8f20eb6SHector Martin performance-domains = <&cpufreq_e_die1>; 129*a8f20eb6SHector Martin }; 130*a8f20eb6SHector Martin 131*a8f20eb6SHector Martin cpu_p20: cpu@10900 { 132*a8f20eb6SHector Martin compatible = "apple,avalanche"; 133*a8f20eb6SHector Martin device_type = "cpu"; 134*a8f20eb6SHector Martin reg = <0x0 0x10900>; 135*a8f20eb6SHector Martin enable-method = "spin-table"; 136*a8f20eb6SHector Martin cpu-release-addr = <0 0>; /* To be filled by loader */ 137*a8f20eb6SHector Martin next-level-cache = <&l2_cache_4>; 138*a8f20eb6SHector Martin i-cache-size = <0x30000>; 139*a8f20eb6SHector Martin d-cache-size = <0x20000>; 140*a8f20eb6SHector Martin operating-points-v2 = <&avalanche_opp>; 141*a8f20eb6SHector Martin capacity-dmips-mhz = <1024>; 142*a8f20eb6SHector Martin performance-domains = <&cpufreq_p0_die1>; 143*a8f20eb6SHector Martin }; 144*a8f20eb6SHector Martin 145*a8f20eb6SHector Martin cpu_p21: cpu@10901 { 146*a8f20eb6SHector Martin compatible = "apple,avalanche"; 147*a8f20eb6SHector Martin device_type = "cpu"; 148*a8f20eb6SHector Martin reg = <0x0 0x10901>; 149*a8f20eb6SHector Martin enable-method = "spin-table"; 150*a8f20eb6SHector Martin cpu-release-addr = <0 0>; /* To be filled by loader */ 151*a8f20eb6SHector Martin next-level-cache = <&l2_cache_4>; 152*a8f20eb6SHector Martin i-cache-size = <0x30000>; 153*a8f20eb6SHector Martin d-cache-size = <0x20000>; 154*a8f20eb6SHector Martin operating-points-v2 = <&avalanche_opp>; 155*a8f20eb6SHector Martin capacity-dmips-mhz = <1024>; 156*a8f20eb6SHector Martin performance-domains = <&cpufreq_p0_die1>; 157*a8f20eb6SHector Martin }; 158*a8f20eb6SHector Martin 159*a8f20eb6SHector Martin cpu_p22: cpu@10902 { 160*a8f20eb6SHector Martin compatible = "apple,avalanche"; 161*a8f20eb6SHector Martin device_type = "cpu"; 162*a8f20eb6SHector Martin reg = <0x0 0x10902>; 163*a8f20eb6SHector Martin enable-method = "spin-table"; 164*a8f20eb6SHector Martin cpu-release-addr = <0 0>; /* To be filled by loader */ 165*a8f20eb6SHector Martin next-level-cache = <&l2_cache_4>; 166*a8f20eb6SHector Martin i-cache-size = <0x30000>; 167*a8f20eb6SHector Martin d-cache-size = <0x20000>; 168*a8f20eb6SHector Martin operating-points-v2 = <&avalanche_opp>; 169*a8f20eb6SHector Martin capacity-dmips-mhz = <1024>; 170*a8f20eb6SHector Martin performance-domains = <&cpufreq_p0_die1>; 171*a8f20eb6SHector Martin }; 172*a8f20eb6SHector Martin 173*a8f20eb6SHector Martin cpu_p23: cpu@10903 { 174*a8f20eb6SHector Martin compatible = "apple,avalanche"; 175*a8f20eb6SHector Martin device_type = "cpu"; 176*a8f20eb6SHector Martin reg = <0x0 0x10903>; 177*a8f20eb6SHector Martin enable-method = "spin-table"; 178*a8f20eb6SHector Martin cpu-release-addr = <0 0>; /* To be filled by loader */ 179*a8f20eb6SHector Martin next-level-cache = <&l2_cache_4>; 180*a8f20eb6SHector Martin i-cache-size = <0x30000>; 181*a8f20eb6SHector Martin d-cache-size = <0x20000>; 182*a8f20eb6SHector Martin operating-points-v2 = <&avalanche_opp>; 183*a8f20eb6SHector Martin capacity-dmips-mhz = <1024>; 184*a8f20eb6SHector Martin performance-domains = <&cpufreq_p0_die1>; 185*a8f20eb6SHector Martin }; 186*a8f20eb6SHector Martin 187*a8f20eb6SHector Martin cpu_p30: cpu@10a00 { 188*a8f20eb6SHector Martin compatible = "apple,avalanche"; 189*a8f20eb6SHector Martin device_type = "cpu"; 190*a8f20eb6SHector Martin reg = <0x0 0x10a00>; 191*a8f20eb6SHector Martin enable-method = "spin-table"; 192*a8f20eb6SHector Martin cpu-release-addr = <0 0>; /* To be filled by loader */ 193*a8f20eb6SHector Martin next-level-cache = <&l2_cache_5>; 194*a8f20eb6SHector Martin i-cache-size = <0x30000>; 195*a8f20eb6SHector Martin d-cache-size = <0x20000>; 196*a8f20eb6SHector Martin operating-points-v2 = <&avalanche_opp>; 197*a8f20eb6SHector Martin capacity-dmips-mhz = <1024>; 198*a8f20eb6SHector Martin performance-domains = <&cpufreq_p1_die1>; 199*a8f20eb6SHector Martin }; 200*a8f20eb6SHector Martin 201*a8f20eb6SHector Martin cpu_p31: cpu@10a01 { 202*a8f20eb6SHector Martin compatible = "apple,avalanche"; 203*a8f20eb6SHector Martin device_type = "cpu"; 204*a8f20eb6SHector Martin reg = <0x0 0x10a01>; 205*a8f20eb6SHector Martin enable-method = "spin-table"; 206*a8f20eb6SHector Martin cpu-release-addr = <0 0>; /* To be filled by loader */ 207*a8f20eb6SHector Martin next-level-cache = <&l2_cache_5>; 208*a8f20eb6SHector Martin i-cache-size = <0x30000>; 209*a8f20eb6SHector Martin d-cache-size = <0x20000>; 210*a8f20eb6SHector Martin operating-points-v2 = <&avalanche_opp>; 211*a8f20eb6SHector Martin capacity-dmips-mhz = <1024>; 212*a8f20eb6SHector Martin performance-domains = <&cpufreq_p1_die1>; 213*a8f20eb6SHector Martin }; 214*a8f20eb6SHector Martin 215*a8f20eb6SHector Martin cpu_p32: cpu@10a02 { 216*a8f20eb6SHector Martin compatible = "apple,avalanche"; 217*a8f20eb6SHector Martin device_type = "cpu"; 218*a8f20eb6SHector Martin reg = <0x0 0x10a02>; 219*a8f20eb6SHector Martin enable-method = "spin-table"; 220*a8f20eb6SHector Martin cpu-release-addr = <0 0>; /* To be filled by loader */ 221*a8f20eb6SHector Martin next-level-cache = <&l2_cache_5>; 222*a8f20eb6SHector Martin i-cache-size = <0x30000>; 223*a8f20eb6SHector Martin d-cache-size = <0x20000>; 224*a8f20eb6SHector Martin operating-points-v2 = <&avalanche_opp>; 225*a8f20eb6SHector Martin capacity-dmips-mhz = <1024>; 226*a8f20eb6SHector Martin performance-domains = <&cpufreq_p1_die1>; 227*a8f20eb6SHector Martin }; 228*a8f20eb6SHector Martin 229*a8f20eb6SHector Martin cpu_p33: cpu@10a03 { 230*a8f20eb6SHector Martin compatible = "apple,avalanche"; 231*a8f20eb6SHector Martin device_type = "cpu"; 232*a8f20eb6SHector Martin reg = <0x0 0x10a03>; 233*a8f20eb6SHector Martin enable-method = "spin-table"; 234*a8f20eb6SHector Martin cpu-release-addr = <0 0>; /* To be filled by loader */ 235*a8f20eb6SHector Martin next-level-cache = <&l2_cache_5>; 236*a8f20eb6SHector Martin i-cache-size = <0x30000>; 237*a8f20eb6SHector Martin d-cache-size = <0x20000>; 238*a8f20eb6SHector Martin operating-points-v2 = <&avalanche_opp>; 239*a8f20eb6SHector Martin capacity-dmips-mhz = <1024>; 240*a8f20eb6SHector Martin performance-domains = <&cpufreq_p1_die1>; 241*a8f20eb6SHector Martin }; 242*a8f20eb6SHector Martin 243*a8f20eb6SHector Martin l2_cache_3: l2-cache-3 { 244*a8f20eb6SHector Martin compatible = "cache"; 245*a8f20eb6SHector Martin cache-level = <2>; 246*a8f20eb6SHector Martin cache-unified; 247*a8f20eb6SHector Martin cache-size = <0x400000>; 248*a8f20eb6SHector Martin }; 249*a8f20eb6SHector Martin 250*a8f20eb6SHector Martin l2_cache_4: l2-cache-4 { 251*a8f20eb6SHector Martin compatible = "cache"; 252*a8f20eb6SHector Martin cache-level = <2>; 253*a8f20eb6SHector Martin cache-unified; 254*a8f20eb6SHector Martin cache-size = <0x1000000>; 255*a8f20eb6SHector Martin }; 256*a8f20eb6SHector Martin 257*a8f20eb6SHector Martin l2_cache_5: l2-cache-5 { 258*a8f20eb6SHector Martin compatible = "cache"; 259*a8f20eb6SHector Martin cache-level = <2>; 260*a8f20eb6SHector Martin cache-unified; 261*a8f20eb6SHector Martin cache-size = <0x1000000>; 262*a8f20eb6SHector Martin }; 263*a8f20eb6SHector Martin }; 264*a8f20eb6SHector Martin 265*a8f20eb6SHector Martin die0: soc@200000000 { 266*a8f20eb6SHector Martin compatible = "simple-bus"; 267*a8f20eb6SHector Martin #address-cells = <2>; 268*a8f20eb6SHector Martin #size-cells = <2>; 269*a8f20eb6SHector Martin ranges = <0x02 0x00000000 0x02 0x00000000 0x4 0x00000000>, 270*a8f20eb6SHector Martin <0x05 0x80000000 0x05 0x80000000 0x1 0x80000000>, 271*a8f20eb6SHector Martin <0x07 0x00000000 0x07 0x00000000 0xf 0x80000000>, 272*a8f20eb6SHector Martin <0x16 0x80000000 0x16 0x80000000 0x5 0x80000000>; 273*a8f20eb6SHector Martin nonposted-mmio; 274*a8f20eb6SHector Martin /* Required to get >32-bit DMA via DARTs */ 275*a8f20eb6SHector Martin dma-ranges = <0 0 0 0 0xffffffff 0xffffc000>; 276*a8f20eb6SHector Martin 277*a8f20eb6SHector Martin // filled via templated includes at the end of the file 278*a8f20eb6SHector Martin }; 279*a8f20eb6SHector Martin 280*a8f20eb6SHector Martin die1: soc@2200000000 { 281*a8f20eb6SHector Martin compatible = "simple-bus"; 282*a8f20eb6SHector Martin #address-cells = <2>; 283*a8f20eb6SHector Martin #size-cells = <2>; 284*a8f20eb6SHector Martin ranges = <0x02 0x00000000 0x22 0x00000000 0x4 0x00000000>, 285*a8f20eb6SHector Martin <0x07 0x00000000 0x27 0x00000000 0xf 0x80000000>, 286*a8f20eb6SHector Martin <0x16 0x80000000 0x36 0x80000000 0x5 0x80000000>; 287*a8f20eb6SHector Martin nonposted-mmio; 288*a8f20eb6SHector Martin /* Required to get >32-bit DMA via DARTs */ 289*a8f20eb6SHector Martin dma-ranges = <0 0 0 0 0xffffffff 0xffffc000>; 290*a8f20eb6SHector Martin 291*a8f20eb6SHector Martin // filled via templated includes at the end of the file 292*a8f20eb6SHector Martin }; 293*a8f20eb6SHector Martin}; 294*a8f20eb6SHector Martin 295*a8f20eb6SHector Martin#define DIE 296*a8f20eb6SHector Martin#define DIE_NO 0 297*a8f20eb6SHector Martin 298*a8f20eb6SHector Martin&die0 { 299*a8f20eb6SHector Martin #include "t602x-die0.dtsi" 300*a8f20eb6SHector Martin #include "t602x-dieX.dtsi" 301*a8f20eb6SHector Martin}; 302*a8f20eb6SHector Martin 303*a8f20eb6SHector Martin#include "t602x-pmgr.dtsi" 304*a8f20eb6SHector Martin#include "t602x-gpio-pins.dtsi" 305*a8f20eb6SHector Martin 306*a8f20eb6SHector Martin#undef DIE 307*a8f20eb6SHector Martin#undef DIE_NO 308*a8f20eb6SHector Martin 309*a8f20eb6SHector Martin#define DIE _die1 310*a8f20eb6SHector Martin#define DIE_NO 1 311*a8f20eb6SHector Martin 312*a8f20eb6SHector Martin&die1 { 313*a8f20eb6SHector Martin #include "t602x-dieX.dtsi" 314*a8f20eb6SHector Martin #include "t602x-nvme.dtsi" 315*a8f20eb6SHector Martin}; 316*a8f20eb6SHector Martin 317*a8f20eb6SHector Martin#include "t602x-pmgr.dtsi" 318*a8f20eb6SHector Martin 319*a8f20eb6SHector Martin/delete-node/ &ps_pmp_die1; 320*a8f20eb6SHector Martin 321*a8f20eb6SHector Martin#undef DIE 322*a8f20eb6SHector Martin#undef DIE_NO 323*a8f20eb6SHector Martin 324*a8f20eb6SHector Martin&aic { 325*a8f20eb6SHector Martin affinities { 326*a8f20eb6SHector Martin e-core-pmu-affinity { 327*a8f20eb6SHector Martin apple,fiq-index = <AIC_CPU_PMU_E>; 328*a8f20eb6SHector Martin cpus = <&cpu_e00 &cpu_e01 &cpu_e02 &cpu_e03 329*a8f20eb6SHector Martin &cpu_e10 &cpu_e11 &cpu_e12 &cpu_e13>; 330*a8f20eb6SHector Martin }; 331*a8f20eb6SHector Martin 332*a8f20eb6SHector Martin p-core-pmu-affinity { 333*a8f20eb6SHector Martin apple,fiq-index = <AIC_CPU_PMU_P>; 334*a8f20eb6SHector Martin cpus = <&cpu_p00 &cpu_p01 &cpu_p02 &cpu_p03 335*a8f20eb6SHector Martin &cpu_p10 &cpu_p11 &cpu_p12 &cpu_p13 336*a8f20eb6SHector Martin &cpu_p20 &cpu_p21 &cpu_p22 &cpu_p23 337*a8f20eb6SHector Martin &cpu_p30 &cpu_p31 &cpu_p32 &cpu_p33>; 338*a8f20eb6SHector Martin }; 339*a8f20eb6SHector Martin }; 340*a8f20eb6SHector Martin}; 341*a8f20eb6SHector Martin 342*a8f20eb6SHector Martin&ps_gfx { 343*a8f20eb6SHector Martin // On t6022, the die0 GPU power domain needs both AFR power domains 344*a8f20eb6SHector Martin power-domains = <&ps_afr>, <&ps_afr_die1>; 345*a8f20eb6SHector Martin}; 346*a8f20eb6SHector Martin 347*a8f20eb6SHector Martin&gpu { 348*a8f20eb6SHector Martin compatible = "apple,agx-g14d", "apple,agx-g14s"; 349*a8f20eb6SHector Martin}; 350