1*7b0b0191SHector Martin// SPDX-License-Identifier: GPL-2.0+ OR MIT 2*7b0b0191SHector Martin/* 3*7b0b0191SHector Martin * Devices used on die 0 on the Apple T6002 "M1 Ultra" SoC and present on 4*7b0b0191SHector Martin * Apple T6000 / T6001 "M1 Pro" / "M1 Max". 5*7b0b0191SHector Martin * 6*7b0b0191SHector Martin * Copyright The Asahi Linux Contributors 7*7b0b0191SHector Martin */ 8*7b0b0191SHector Martin 9*7b0b0191SHector Martin 10*7b0b0191SHector Martin aic: interrupt-controller@28e100000 { 11*7b0b0191SHector Martin compatible = "apple,t6000-aic", "apple,aic2"; 12*7b0b0191SHector Martin #interrupt-cells = <4>; 13*7b0b0191SHector Martin interrupt-controller; 14*7b0b0191SHector Martin reg = <0x2 0x8e100000 0x0 0xc000>, 15*7b0b0191SHector Martin <0x2 0x8e10c000 0x0 0x4>; 16*7b0b0191SHector Martin reg-names = "core", "event"; 17*7b0b0191SHector Martin power-domains = <&ps_aic>; 18*7b0b0191SHector Martin }; 19*7b0b0191SHector Martin 20*7b0b0191SHector Martin pinctrl_smc: pinctrl@290820000 { 21*7b0b0191SHector Martin compatible = "apple,t6000-pinctrl", "apple,pinctrl"; 22*7b0b0191SHector Martin reg = <0x2 0x90820000 0x0 0x4000>; 23*7b0b0191SHector Martin 24*7b0b0191SHector Martin gpio-controller; 25*7b0b0191SHector Martin #gpio-cells = <2>; 26*7b0b0191SHector Martin gpio-ranges = <&pinctrl_smc 0 0 30>; 27*7b0b0191SHector Martin apple,npins = <30>; 28*7b0b0191SHector Martin 29*7b0b0191SHector Martin interrupt-controller; 30*7b0b0191SHector Martin #interrupt-cells = <2>; 31*7b0b0191SHector Martin interrupt-parent = <&aic>; 32*7b0b0191SHector Martin interrupts = <AIC_IRQ 0 743 IRQ_TYPE_LEVEL_HIGH>, 33*7b0b0191SHector Martin <AIC_IRQ 0 744 IRQ_TYPE_LEVEL_HIGH>, 34*7b0b0191SHector Martin <AIC_IRQ 0 745 IRQ_TYPE_LEVEL_HIGH>, 35*7b0b0191SHector Martin <AIC_IRQ 0 746 IRQ_TYPE_LEVEL_HIGH>, 36*7b0b0191SHector Martin <AIC_IRQ 0 747 IRQ_TYPE_LEVEL_HIGH>, 37*7b0b0191SHector Martin <AIC_IRQ 0 748 IRQ_TYPE_LEVEL_HIGH>, 38*7b0b0191SHector Martin <AIC_IRQ 0 749 IRQ_TYPE_LEVEL_HIGH>; 39*7b0b0191SHector Martin }; 40*7b0b0191SHector Martin 41*7b0b0191SHector Martin wdt: watchdog@2922b0000 { 42*7b0b0191SHector Martin compatible = "apple,t6000-wdt", "apple,wdt"; 43*7b0b0191SHector Martin reg = <0x2 0x922b0000 0x0 0x4000>; 44*7b0b0191SHector Martin clocks = <&clkref>; 45*7b0b0191SHector Martin interrupt-parent = <&aic>; 46*7b0b0191SHector Martin interrupts = <AIC_IRQ 0 631 IRQ_TYPE_LEVEL_HIGH>; 47*7b0b0191SHector Martin }; 48*7b0b0191SHector Martin 49*7b0b0191SHector Martin i2c0: i2c@39b040000 { 50*7b0b0191SHector Martin compatible = "apple,t6000-i2c", "apple,i2c"; 51*7b0b0191SHector Martin reg = <0x3 0x9b040000 0x0 0x4000>; 52*7b0b0191SHector Martin clocks = <&clkref>; 53*7b0b0191SHector Martin interrupt-parent = <&aic>; 54*7b0b0191SHector Martin interrupts = <AIC_IRQ 0 1119 IRQ_TYPE_LEVEL_HIGH>; 55*7b0b0191SHector Martin pinctrl-0 = <&i2c0_pins>; 56*7b0b0191SHector Martin pinctrl-names = "default"; 57*7b0b0191SHector Martin power-domains = <&ps_i2c0>; 58*7b0b0191SHector Martin #address-cells = <0x1>; 59*7b0b0191SHector Martin #size-cells = <0x0>; 60*7b0b0191SHector Martin }; 61*7b0b0191SHector Martin 62*7b0b0191SHector Martin i2c1: i2c@39b044000 { 63*7b0b0191SHector Martin compatible = "apple,t6000-i2c", "apple,i2c"; 64*7b0b0191SHector Martin reg = <0x3 0x9b044000 0x0 0x4000>; 65*7b0b0191SHector Martin clocks = <&clkref>; 66*7b0b0191SHector Martin interrupt-parent = <&aic>; 67*7b0b0191SHector Martin interrupts = <AIC_IRQ 0 1120 IRQ_TYPE_LEVEL_HIGH>; 68*7b0b0191SHector Martin pinctrl-0 = <&i2c1_pins>; 69*7b0b0191SHector Martin pinctrl-names = "default"; 70*7b0b0191SHector Martin power-domains = <&ps_i2c1>; 71*7b0b0191SHector Martin #address-cells = <0x1>; 72*7b0b0191SHector Martin #size-cells = <0x0>; 73*7b0b0191SHector Martin status = "disabled"; 74*7b0b0191SHector Martin }; 75*7b0b0191SHector Martin 76*7b0b0191SHector Martin i2c2: i2c@39b048000 { 77*7b0b0191SHector Martin compatible = "apple,t6000-i2c", "apple,i2c"; 78*7b0b0191SHector Martin reg = <0x3 0x9b048000 0x0 0x4000>; 79*7b0b0191SHector Martin clocks = <&clkref>; 80*7b0b0191SHector Martin interrupt-parent = <&aic>; 81*7b0b0191SHector Martin interrupts = <AIC_IRQ 0 1121 IRQ_TYPE_LEVEL_HIGH>; 82*7b0b0191SHector Martin pinctrl-0 = <&i2c2_pins>; 83*7b0b0191SHector Martin pinctrl-names = "default"; 84*7b0b0191SHector Martin power-domains = <&ps_i2c2>; 85*7b0b0191SHector Martin #address-cells = <0x1>; 86*7b0b0191SHector Martin #size-cells = <0x0>; 87*7b0b0191SHector Martin status = "disabled"; 88*7b0b0191SHector Martin }; 89*7b0b0191SHector Martin 90*7b0b0191SHector Martin i2c3: i2c@39b04c000 { 91*7b0b0191SHector Martin compatible = "apple,t6000-i2c", "apple,i2c"; 92*7b0b0191SHector Martin reg = <0x3 0x9b04c000 0x0 0x4000>; 93*7b0b0191SHector Martin clocks = <&clkref>; 94*7b0b0191SHector Martin interrupt-parent = <&aic>; 95*7b0b0191SHector Martin interrupts = <AIC_IRQ 0 1122 IRQ_TYPE_LEVEL_HIGH>; 96*7b0b0191SHector Martin pinctrl-0 = <&i2c3_pins>; 97*7b0b0191SHector Martin pinctrl-names = "default"; 98*7b0b0191SHector Martin power-domains = <&ps_i2c3>; 99*7b0b0191SHector Martin #address-cells = <0x1>; 100*7b0b0191SHector Martin #size-cells = <0x0>; 101*7b0b0191SHector Martin status = "disabled"; 102*7b0b0191SHector Martin }; 103*7b0b0191SHector Martin 104*7b0b0191SHector Martin i2c4: i2c@39b050000 { 105*7b0b0191SHector Martin compatible = "apple,t6000-i2c", "apple,i2c"; 106*7b0b0191SHector Martin reg = <0x3 0x9b050000 0x0 0x4000>; 107*7b0b0191SHector Martin clocks = <&clkref>; 108*7b0b0191SHector Martin interrupt-parent = <&aic>; 109*7b0b0191SHector Martin interrupts = <AIC_IRQ 0 1123 IRQ_TYPE_LEVEL_HIGH>; 110*7b0b0191SHector Martin pinctrl-0 = <&i2c4_pins>; 111*7b0b0191SHector Martin pinctrl-names = "default"; 112*7b0b0191SHector Martin power-domains = <&ps_i2c4>; 113*7b0b0191SHector Martin #address-cells = <0x1>; 114*7b0b0191SHector Martin #size-cells = <0x0>; 115*7b0b0191SHector Martin status = "disabled"; 116*7b0b0191SHector Martin }; 117*7b0b0191SHector Martin 118*7b0b0191SHector Martin i2c5: i2c@39b054000 { 119*7b0b0191SHector Martin compatible = "apple,t6000-i2c", "apple,i2c"; 120*7b0b0191SHector Martin reg = <0x3 0x9b054000 0x0 0x4000>; 121*7b0b0191SHector Martin clocks = <&clkref>; 122*7b0b0191SHector Martin interrupt-parent = <&aic>; 123*7b0b0191SHector Martin interrupts = <AIC_IRQ 0 1124 IRQ_TYPE_LEVEL_HIGH>; 124*7b0b0191SHector Martin pinctrl-0 = <&i2c5_pins>; 125*7b0b0191SHector Martin pinctrl-names = "default"; 126*7b0b0191SHector Martin power-domains = <&ps_i2c5>; 127*7b0b0191SHector Martin #address-cells = <0x1>; 128*7b0b0191SHector Martin #size-cells = <0x0>; 129*7b0b0191SHector Martin status = "disabled"; 130*7b0b0191SHector Martin }; 131*7b0b0191SHector Martin 132*7b0b0191SHector Martin serial0: serial@39b200000 { 133*7b0b0191SHector Martin compatible = "apple,s5l-uart"; 134*7b0b0191SHector Martin reg = <0x3 0x9b200000 0x0 0x1000>; 135*7b0b0191SHector Martin reg-io-width = <4>; 136*7b0b0191SHector Martin interrupt-parent = <&aic>; 137*7b0b0191SHector Martin interrupts = <AIC_IRQ 0 1097 IRQ_TYPE_LEVEL_HIGH>; 138*7b0b0191SHector Martin /* 139*7b0b0191SHector Martin * TODO: figure out the clocking properly, there may 140*7b0b0191SHector Martin * be a third selectable clock. 141*7b0b0191SHector Martin */ 142*7b0b0191SHector Martin clocks = <&clkref>, <&clkref>; 143*7b0b0191SHector Martin clock-names = "uart", "clk_uart_baud0"; 144*7b0b0191SHector Martin power-domains = <&ps_uart0>; 145*7b0b0191SHector Martin status = "disabled"; 146*7b0b0191SHector Martin }; 147*7b0b0191SHector Martin 148*7b0b0191SHector Martin pcie0_dart_0: dart@581008000 { 149*7b0b0191SHector Martin compatible = "apple,t6000-dart"; 150*7b0b0191SHector Martin reg = <0x5 0x81008000 0x0 0x4000>; 151*7b0b0191SHector Martin #iommu-cells = <1>; 152*7b0b0191SHector Martin interrupt-parent = <&aic>; 153*7b0b0191SHector Martin interrupts = <AIC_IRQ 0 1271 IRQ_TYPE_LEVEL_HIGH>; 154*7b0b0191SHector Martin power-domains = <&ps_apcie_gp_sys>; 155*7b0b0191SHector Martin }; 156*7b0b0191SHector Martin 157*7b0b0191SHector Martin pcie0_dart_1: dart@582008000 { 158*7b0b0191SHector Martin compatible = "apple,t6000-dart"; 159*7b0b0191SHector Martin reg = <0x5 0x82008000 0x0 0x4000>; 160*7b0b0191SHector Martin #iommu-cells = <1>; 161*7b0b0191SHector Martin interrupt-parent = <&aic>; 162*7b0b0191SHector Martin interrupts = <AIC_IRQ 0 1274 IRQ_TYPE_LEVEL_HIGH>; 163*7b0b0191SHector Martin power-domains = <&ps_apcie_gp_sys>; 164*7b0b0191SHector Martin }; 165*7b0b0191SHector Martin 166*7b0b0191SHector Martin pcie0_dart_2: dart@583008000 { 167*7b0b0191SHector Martin compatible = "apple,t6000-dart"; 168*7b0b0191SHector Martin reg = <0x5 0x83008000 0x0 0x4000>; 169*7b0b0191SHector Martin #iommu-cells = <1>; 170*7b0b0191SHector Martin interrupt-parent = <&aic>; 171*7b0b0191SHector Martin interrupts = <AIC_IRQ 0 1277 IRQ_TYPE_LEVEL_HIGH>; 172*7b0b0191SHector Martin power-domains = <&ps_apcie_gp_sys>; 173*7b0b0191SHector Martin }; 174*7b0b0191SHector Martin 175*7b0b0191SHector Martin pcie0_dart_3: dart@584008000 { 176*7b0b0191SHector Martin compatible = "apple,t6000-dart"; 177*7b0b0191SHector Martin reg = <0x5 0x84008000 0x0 0x4000>; 178*7b0b0191SHector Martin #iommu-cells = <1>; 179*7b0b0191SHector Martin interrupt-parent = <&aic>; 180*7b0b0191SHector Martin interrupts = <AIC_IRQ 0 1280 IRQ_TYPE_LEVEL_HIGH>; 181*7b0b0191SHector Martin power-domains = <&ps_apcie_gp_sys>; 182*7b0b0191SHector Martin }; 183*7b0b0191SHector Martin 184*7b0b0191SHector Martin pcie0: pcie@590000000 { 185*7b0b0191SHector Martin compatible = "apple,t6000-pcie", "apple,pcie"; 186*7b0b0191SHector Martin device_type = "pci"; 187*7b0b0191SHector Martin 188*7b0b0191SHector Martin reg = <0x5 0x90000000 0x0 0x1000000>, 189*7b0b0191SHector Martin <0x5 0x80000000 0x0 0x100000>, 190*7b0b0191SHector Martin <0x5 0x81000000 0x0 0x4000>, 191*7b0b0191SHector Martin <0x5 0x82000000 0x0 0x4000>, 192*7b0b0191SHector Martin <0x5 0x83000000 0x0 0x4000>, 193*7b0b0191SHector Martin <0x5 0x84000000 0x0 0x4000>; 194*7b0b0191SHector Martin reg-names = "config", "rc", "port0", "port1", "port2", "port3"; 195*7b0b0191SHector Martin 196*7b0b0191SHector Martin interrupt-parent = <&aic>; 197*7b0b0191SHector Martin interrupts = <AIC_IRQ 0 1270 IRQ_TYPE_LEVEL_HIGH>, 198*7b0b0191SHector Martin <AIC_IRQ 0 1273 IRQ_TYPE_LEVEL_HIGH>, 199*7b0b0191SHector Martin <AIC_IRQ 0 1276 IRQ_TYPE_LEVEL_HIGH>, 200*7b0b0191SHector Martin <AIC_IRQ 0 1279 IRQ_TYPE_LEVEL_HIGH>; 201*7b0b0191SHector Martin 202*7b0b0191SHector Martin msi-controller; 203*7b0b0191SHector Martin msi-parent = <&pcie0>; 204*7b0b0191SHector Martin msi-ranges = <&aic AIC_IRQ 0 1581 IRQ_TYPE_EDGE_RISING 32>; 205*7b0b0191SHector Martin 206*7b0b0191SHector Martin 207*7b0b0191SHector Martin iommu-map = <0x100 &pcie0_dart_0 1 1>, 208*7b0b0191SHector Martin <0x200 &pcie0_dart_1 1 1>, 209*7b0b0191SHector Martin <0x300 &pcie0_dart_2 1 1>, 210*7b0b0191SHector Martin <0x400 &pcie0_dart_3 1 1>; 211*7b0b0191SHector Martin iommu-map-mask = <0xff00>; 212*7b0b0191SHector Martin 213*7b0b0191SHector Martin bus-range = <0 4>; 214*7b0b0191SHector Martin #address-cells = <3>; 215*7b0b0191SHector Martin #size-cells = <2>; 216*7b0b0191SHector Martin ranges = <0x43000000 0x5 0xa0000000 0x5 0xa0000000 0x0 0x20000000>, 217*7b0b0191SHector Martin <0x02000000 0x0 0xc0000000 0x5 0xc0000000 0x0 0x40000000>; 218*7b0b0191SHector Martin 219*7b0b0191SHector Martin power-domains = <&ps_apcie_gp_sys>; 220*7b0b0191SHector Martin pinctrl-0 = <&pcie_pins>; 221*7b0b0191SHector Martin pinctrl-names = "default"; 222*7b0b0191SHector Martin 223*7b0b0191SHector Martin port00: pci@0,0 { 224*7b0b0191SHector Martin device_type = "pci"; 225*7b0b0191SHector Martin reg = <0x0 0x0 0x0 0x0 0x0>; 226*7b0b0191SHector Martin reset-gpios = <&pinctrl_ap 4 GPIO_ACTIVE_LOW>; 227*7b0b0191SHector Martin 228*7b0b0191SHector Martin #address-cells = <3>; 229*7b0b0191SHector Martin #size-cells = <2>; 230*7b0b0191SHector Martin ranges; 231*7b0b0191SHector Martin 232*7b0b0191SHector Martin interrupt-controller; 233*7b0b0191SHector Martin #interrupt-cells = <1>; 234*7b0b0191SHector Martin 235*7b0b0191SHector Martin interrupt-map-mask = <0 0 0 7>; 236*7b0b0191SHector Martin interrupt-map = <0 0 0 1 &port00 0 0 0 0>, 237*7b0b0191SHector Martin <0 0 0 2 &port00 0 0 0 1>, 238*7b0b0191SHector Martin <0 0 0 3 &port00 0 0 0 2>, 239*7b0b0191SHector Martin <0 0 0 4 &port00 0 0 0 3>; 240*7b0b0191SHector Martin }; 241*7b0b0191SHector Martin 242*7b0b0191SHector Martin port01: pci@1,0 { 243*7b0b0191SHector Martin device_type = "pci"; 244*7b0b0191SHector Martin reg = <0x800 0x0 0x0 0x0 0x0>; 245*7b0b0191SHector Martin reset-gpios = <&pinctrl_ap 5 GPIO_ACTIVE_LOW>; 246*7b0b0191SHector Martin 247*7b0b0191SHector Martin #address-cells = <3>; 248*7b0b0191SHector Martin #size-cells = <2>; 249*7b0b0191SHector Martin ranges; 250*7b0b0191SHector Martin 251*7b0b0191SHector Martin interrupt-controller; 252*7b0b0191SHector Martin #interrupt-cells = <1>; 253*7b0b0191SHector Martin 254*7b0b0191SHector Martin interrupt-map-mask = <0 0 0 7>; 255*7b0b0191SHector Martin interrupt-map = <0 0 0 1 &port01 0 0 0 0>, 256*7b0b0191SHector Martin <0 0 0 2 &port01 0 0 0 1>, 257*7b0b0191SHector Martin <0 0 0 3 &port01 0 0 0 2>, 258*7b0b0191SHector Martin <0 0 0 4 &port01 0 0 0 3>; 259*7b0b0191SHector Martin }; 260*7b0b0191SHector Martin 261*7b0b0191SHector Martin port02: pci@2,0 { 262*7b0b0191SHector Martin device_type = "pci"; 263*7b0b0191SHector Martin reg = <0x1000 0x0 0x0 0x0 0x0>; 264*7b0b0191SHector Martin reset-gpios = <&pinctrl_ap 6 GPIO_ACTIVE_LOW>; 265*7b0b0191SHector Martin 266*7b0b0191SHector Martin #address-cells = <3>; 267*7b0b0191SHector Martin #size-cells = <2>; 268*7b0b0191SHector Martin ranges; 269*7b0b0191SHector Martin 270*7b0b0191SHector Martin interrupt-controller; 271*7b0b0191SHector Martin #interrupt-cells = <1>; 272*7b0b0191SHector Martin 273*7b0b0191SHector Martin interrupt-map-mask = <0 0 0 7>; 274*7b0b0191SHector Martin interrupt-map = <0 0 0 1 &port02 0 0 0 0>, 275*7b0b0191SHector Martin <0 0 0 2 &port02 0 0 0 1>, 276*7b0b0191SHector Martin <0 0 0 3 &port02 0 0 0 2>, 277*7b0b0191SHector Martin <0 0 0 4 &port02 0 0 0 3>; 278*7b0b0191SHector Martin }; 279*7b0b0191SHector Martin 280*7b0b0191SHector Martin port03: pci@3,0 { 281*7b0b0191SHector Martin device_type = "pci"; 282*7b0b0191SHector Martin reg = <0x1800 0x0 0x0 0x0 0x0>; 283*7b0b0191SHector Martin reset-gpios = <&pinctrl_ap 7 GPIO_ACTIVE_LOW>; 284*7b0b0191SHector Martin 285*7b0b0191SHector Martin #address-cells = <3>; 286*7b0b0191SHector Martin #size-cells = <2>; 287*7b0b0191SHector Martin ranges; 288*7b0b0191SHector Martin 289*7b0b0191SHector Martin interrupt-controller; 290*7b0b0191SHector Martin #interrupt-cells = <1>; 291*7b0b0191SHector Martin 292*7b0b0191SHector Martin interrupt-map-mask = <0 0 0 7>; 293*7b0b0191SHector Martin interrupt-map = <0 0 0 1 &port03 0 0 0 0>, 294*7b0b0191SHector Martin <0 0 0 2 &port03 0 0 0 1>, 295*7b0b0191SHector Martin <0 0 0 3 &port03 0 0 0 2>, 296*7b0b0191SHector Martin <0 0 0 4 &port03 0 0 0 3>; 297*7b0b0191SHector Martin }; 298*7b0b0191SHector Martin }; 299