17d2d16ccSHector Martin// SPDX-License-Identifier: GPL-2.0+ OR MIT 27d2d16ccSHector Martin/* 37d2d16ccSHector Martin * Apple T8103 "M1" SoC 47d2d16ccSHector Martin * 57d2d16ccSHector Martin * Other names: H13G, "Tonga" 67d2d16ccSHector Martin * 77d2d16ccSHector Martin * Copyright The Asahi Linux Contributors 87d2d16ccSHector Martin */ 97d2d16ccSHector Martin 107d2d16ccSHector Martin#include <dt-bindings/interrupt-controller/apple-aic.h> 117d2d16ccSHector Martin#include <dt-bindings/interrupt-controller/irq.h> 120a8282b8SMark Kettenis#include <dt-bindings/pinctrl/apple.h> 137d2d16ccSHector Martin 147d2d16ccSHector Martin/ { 157d2d16ccSHector Martin compatible = "apple,t8103", "apple,arm-platform"; 167d2d16ccSHector Martin 177d2d16ccSHector Martin #address-cells = <2>; 187d2d16ccSHector Martin #size-cells = <2>; 197d2d16ccSHector Martin 207d2d16ccSHector Martin cpus { 217d2d16ccSHector Martin #address-cells = <2>; 227d2d16ccSHector Martin #size-cells = <0>; 237d2d16ccSHector Martin 247d2d16ccSHector Martin cpu0: cpu@0 { 257d2d16ccSHector Martin compatible = "apple,icestorm"; 267d2d16ccSHector Martin device_type = "cpu"; 277d2d16ccSHector Martin reg = <0x0 0x0>; 287d2d16ccSHector Martin enable-method = "spin-table"; 297d2d16ccSHector Martin cpu-release-addr = <0 0>; /* To be filled by loader */ 307d2d16ccSHector Martin }; 317d2d16ccSHector Martin 327d2d16ccSHector Martin cpu1: cpu@1 { 337d2d16ccSHector Martin compatible = "apple,icestorm"; 347d2d16ccSHector Martin device_type = "cpu"; 357d2d16ccSHector Martin reg = <0x0 0x1>; 367d2d16ccSHector Martin enable-method = "spin-table"; 377d2d16ccSHector Martin cpu-release-addr = <0 0>; /* To be filled by loader */ 387d2d16ccSHector Martin }; 397d2d16ccSHector Martin 407d2d16ccSHector Martin cpu2: cpu@2 { 417d2d16ccSHector Martin compatible = "apple,icestorm"; 427d2d16ccSHector Martin device_type = "cpu"; 437d2d16ccSHector Martin reg = <0x0 0x2>; 447d2d16ccSHector Martin enable-method = "spin-table"; 457d2d16ccSHector Martin cpu-release-addr = <0 0>; /* To be filled by loader */ 467d2d16ccSHector Martin }; 477d2d16ccSHector Martin 487d2d16ccSHector Martin cpu3: cpu@3 { 497d2d16ccSHector Martin compatible = "apple,icestorm"; 507d2d16ccSHector Martin device_type = "cpu"; 517d2d16ccSHector Martin reg = <0x0 0x3>; 527d2d16ccSHector Martin enable-method = "spin-table"; 537d2d16ccSHector Martin cpu-release-addr = <0 0>; /* To be filled by loader */ 547d2d16ccSHector Martin }; 557d2d16ccSHector Martin 567d2d16ccSHector Martin cpu4: cpu@10100 { 577d2d16ccSHector Martin compatible = "apple,firestorm"; 587d2d16ccSHector Martin device_type = "cpu"; 597d2d16ccSHector Martin reg = <0x0 0x10100>; 607d2d16ccSHector Martin enable-method = "spin-table"; 617d2d16ccSHector Martin cpu-release-addr = <0 0>; /* To be filled by loader */ 627d2d16ccSHector Martin }; 637d2d16ccSHector Martin 647d2d16ccSHector Martin cpu5: cpu@10101 { 657d2d16ccSHector Martin compatible = "apple,firestorm"; 667d2d16ccSHector Martin device_type = "cpu"; 677d2d16ccSHector Martin reg = <0x0 0x10101>; 687d2d16ccSHector Martin enable-method = "spin-table"; 697d2d16ccSHector Martin cpu-release-addr = <0 0>; /* To be filled by loader */ 707d2d16ccSHector Martin }; 717d2d16ccSHector Martin 727d2d16ccSHector Martin cpu6: cpu@10102 { 737d2d16ccSHector Martin compatible = "apple,firestorm"; 747d2d16ccSHector Martin device_type = "cpu"; 757d2d16ccSHector Martin reg = <0x0 0x10102>; 767d2d16ccSHector Martin enable-method = "spin-table"; 777d2d16ccSHector Martin cpu-release-addr = <0 0>; /* To be filled by loader */ 787d2d16ccSHector Martin }; 797d2d16ccSHector Martin 807d2d16ccSHector Martin cpu7: cpu@10103 { 817d2d16ccSHector Martin compatible = "apple,firestorm"; 827d2d16ccSHector Martin device_type = "cpu"; 837d2d16ccSHector Martin reg = <0x0 0x10103>; 847d2d16ccSHector Martin enable-method = "spin-table"; 857d2d16ccSHector Martin cpu-release-addr = <0 0>; /* To be filled by loader */ 867d2d16ccSHector Martin }; 877d2d16ccSHector Martin }; 887d2d16ccSHector Martin 897d2d16ccSHector Martin timer { 907d2d16ccSHector Martin compatible = "arm,armv8-timer"; 917d2d16ccSHector Martin interrupt-parent = <&aic>; 927d2d16ccSHector Martin interrupt-names = "phys", "virt", "hyp-phys", "hyp-virt"; 937d2d16ccSHector Martin interrupts = <AIC_FIQ AIC_TMR_GUEST_PHYS IRQ_TYPE_LEVEL_HIGH>, 947d2d16ccSHector Martin <AIC_FIQ AIC_TMR_GUEST_VIRT IRQ_TYPE_LEVEL_HIGH>, 957d2d16ccSHector Martin <AIC_FIQ AIC_TMR_HV_PHYS IRQ_TYPE_LEVEL_HIGH>, 967d2d16ccSHector Martin <AIC_FIQ AIC_TMR_HV_VIRT IRQ_TYPE_LEVEL_HIGH>; 977d2d16ccSHector Martin }; 987d2d16ccSHector Martin 997d2d16ccSHector Martin clk24: clock-24m { 1007d2d16ccSHector Martin compatible = "fixed-clock"; 1017d2d16ccSHector Martin #clock-cells = <0>; 1027d2d16ccSHector Martin clock-frequency = <24000000>; 1037d2d16ccSHector Martin clock-output-names = "clk24"; 1047d2d16ccSHector Martin }; 1057d2d16ccSHector Martin 1067d2d16ccSHector Martin soc { 1077d2d16ccSHector Martin compatible = "simple-bus"; 1087d2d16ccSHector Martin #address-cells = <2>; 1097d2d16ccSHector Martin #size-cells = <2>; 1107d2d16ccSHector Martin 1117d2d16ccSHector Martin ranges; 1127d2d16ccSHector Martin nonposted-mmio; 1137d2d16ccSHector Martin 1147d2d16ccSHector Martin serial0: serial@235200000 { 1157d2d16ccSHector Martin compatible = "apple,s5l-uart"; 1167d2d16ccSHector Martin reg = <0x2 0x35200000 0x0 0x1000>; 1177d2d16ccSHector Martin reg-io-width = <4>; 1187d2d16ccSHector Martin interrupt-parent = <&aic>; 1197d2d16ccSHector Martin interrupts = <AIC_IRQ 605 IRQ_TYPE_LEVEL_HIGH>; 1207d2d16ccSHector Martin /* 1217d2d16ccSHector Martin * TODO: figure out the clocking properly, there may 1227d2d16ccSHector Martin * be a third selectable clock. 1237d2d16ccSHector Martin */ 1247d2d16ccSHector Martin clocks = <&clk24>, <&clk24>; 1257d2d16ccSHector Martin clock-names = "uart", "clk_uart_baud0"; 1267d2d16ccSHector Martin status = "disabled"; 1277d2d16ccSHector Martin }; 1287d2d16ccSHector Martin 1297d2d16ccSHector Martin aic: interrupt-controller@23b100000 { 1307d2d16ccSHector Martin compatible = "apple,t8103-aic", "apple,aic"; 1317d2d16ccSHector Martin #interrupt-cells = <3>; 1327d2d16ccSHector Martin interrupt-controller; 1337d2d16ccSHector Martin reg = <0x2 0x3b100000 0x0 0x8000>; 1347d2d16ccSHector Martin }; 1350a8282b8SMark Kettenis 1360a8282b8SMark Kettenis pinctrl_ap: pinctrl@23c100000 { 1370a8282b8SMark Kettenis compatible = "apple,t8103-pinctrl", "apple,pinctrl"; 1380a8282b8SMark Kettenis reg = <0x2 0x3c100000 0x0 0x100000>; 1390a8282b8SMark Kettenis 1400a8282b8SMark Kettenis gpio-controller; 1410a8282b8SMark Kettenis #gpio-cells = <2>; 1420a8282b8SMark Kettenis gpio-ranges = <&pinctrl_ap 0 0 212>; 1430a8282b8SMark Kettenis apple,npins = <212>; 1440a8282b8SMark Kettenis 1450a8282b8SMark Kettenis interrupt-controller; 1460a8282b8SMark Kettenis interrupt-parent = <&aic>; 1470a8282b8SMark Kettenis interrupts = <AIC_IRQ 190 IRQ_TYPE_LEVEL_HIGH>, 1480a8282b8SMark Kettenis <AIC_IRQ 191 IRQ_TYPE_LEVEL_HIGH>, 1490a8282b8SMark Kettenis <AIC_IRQ 192 IRQ_TYPE_LEVEL_HIGH>, 1500a8282b8SMark Kettenis <AIC_IRQ 193 IRQ_TYPE_LEVEL_HIGH>, 1510a8282b8SMark Kettenis <AIC_IRQ 194 IRQ_TYPE_LEVEL_HIGH>, 1520a8282b8SMark Kettenis <AIC_IRQ 195 IRQ_TYPE_LEVEL_HIGH>, 1530a8282b8SMark Kettenis <AIC_IRQ 196 IRQ_TYPE_LEVEL_HIGH>; 1540a8282b8SMark Kettenis 1550a8282b8SMark Kettenis pcie_pins: pcie-pins { 1560a8282b8SMark Kettenis pinmux = <APPLE_PINMUX(150, 1)>, 1570a8282b8SMark Kettenis <APPLE_PINMUX(151, 1)>, 1580a8282b8SMark Kettenis <APPLE_PINMUX(32, 1)>; 1590a8282b8SMark Kettenis }; 1600a8282b8SMark Kettenis }; 1610a8282b8SMark Kettenis 1620a8282b8SMark Kettenis pinctrl_aop: pinctrl@24a820000 { 1630a8282b8SMark Kettenis compatible = "apple,t8103-pinctrl", "apple,pinctrl"; 1640a8282b8SMark Kettenis reg = <0x2 0x4a820000 0x0 0x4000>; 1650a8282b8SMark Kettenis 1660a8282b8SMark Kettenis gpio-controller; 1670a8282b8SMark Kettenis #gpio-cells = <2>; 1680a8282b8SMark Kettenis gpio-ranges = <&pinctrl_aop 0 0 42>; 1690a8282b8SMark Kettenis apple,npins = <42>; 1700a8282b8SMark Kettenis 1710a8282b8SMark Kettenis interrupt-controller; 1720a8282b8SMark Kettenis interrupt-parent = <&aic>; 1730a8282b8SMark Kettenis interrupts = <AIC_IRQ 268 IRQ_TYPE_LEVEL_HIGH>, 1740a8282b8SMark Kettenis <AIC_IRQ 269 IRQ_TYPE_LEVEL_HIGH>, 1750a8282b8SMark Kettenis <AIC_IRQ 270 IRQ_TYPE_LEVEL_HIGH>, 1760a8282b8SMark Kettenis <AIC_IRQ 271 IRQ_TYPE_LEVEL_HIGH>, 1770a8282b8SMark Kettenis <AIC_IRQ 272 IRQ_TYPE_LEVEL_HIGH>, 1780a8282b8SMark Kettenis <AIC_IRQ 273 IRQ_TYPE_LEVEL_HIGH>, 1790a8282b8SMark Kettenis <AIC_IRQ 274 IRQ_TYPE_LEVEL_HIGH>; 1800a8282b8SMark Kettenis }; 1810a8282b8SMark Kettenis 1820a8282b8SMark Kettenis pinctrl_nub: pinctrl@23d1f0000 { 1830a8282b8SMark Kettenis compatible = "apple,t8103-pinctrl", "apple,pinctrl"; 1840a8282b8SMark Kettenis reg = <0x2 0x3d1f0000 0x0 0x4000>; 1850a8282b8SMark Kettenis 1860a8282b8SMark Kettenis gpio-controller; 1870a8282b8SMark Kettenis #gpio-cells = <2>; 1880a8282b8SMark Kettenis gpio-ranges = <&pinctrl_nub 0 0 23>; 1890a8282b8SMark Kettenis apple,npins = <23>; 1900a8282b8SMark Kettenis 1910a8282b8SMark Kettenis interrupt-controller; 1920a8282b8SMark Kettenis interrupt-parent = <&aic>; 1930a8282b8SMark Kettenis interrupts = <AIC_IRQ 330 IRQ_TYPE_LEVEL_HIGH>, 1940a8282b8SMark Kettenis <AIC_IRQ 331 IRQ_TYPE_LEVEL_HIGH>, 1950a8282b8SMark Kettenis <AIC_IRQ 332 IRQ_TYPE_LEVEL_HIGH>, 1960a8282b8SMark Kettenis <AIC_IRQ 333 IRQ_TYPE_LEVEL_HIGH>, 1970a8282b8SMark Kettenis <AIC_IRQ 334 IRQ_TYPE_LEVEL_HIGH>, 1980a8282b8SMark Kettenis <AIC_IRQ 335 IRQ_TYPE_LEVEL_HIGH>, 1990a8282b8SMark Kettenis <AIC_IRQ 336 IRQ_TYPE_LEVEL_HIGH>; 2000a8282b8SMark Kettenis }; 2010a8282b8SMark Kettenis 2020a8282b8SMark Kettenis pinctrl_smc: pinctrl@23e820000 { 2030a8282b8SMark Kettenis compatible = "apple,t8103-pinctrl", "apple,pinctrl"; 2040a8282b8SMark Kettenis reg = <0x2 0x3e820000 0x0 0x4000>; 2050a8282b8SMark Kettenis 2060a8282b8SMark Kettenis gpio-controller; 2070a8282b8SMark Kettenis #gpio-cells = <2>; 2080a8282b8SMark Kettenis gpio-ranges = <&pinctrl_smc 0 0 16>; 2090a8282b8SMark Kettenis apple,npins = <16>; 2100a8282b8SMark Kettenis 2110a8282b8SMark Kettenis interrupt-controller; 2120a8282b8SMark Kettenis interrupt-parent = <&aic>; 2130a8282b8SMark Kettenis interrupts = <AIC_IRQ 391 IRQ_TYPE_LEVEL_HIGH>, 2140a8282b8SMark Kettenis <AIC_IRQ 392 IRQ_TYPE_LEVEL_HIGH>, 2150a8282b8SMark Kettenis <AIC_IRQ 393 IRQ_TYPE_LEVEL_HIGH>, 2160a8282b8SMark Kettenis <AIC_IRQ 394 IRQ_TYPE_LEVEL_HIGH>, 2170a8282b8SMark Kettenis <AIC_IRQ 395 IRQ_TYPE_LEVEL_HIGH>, 2180a8282b8SMark Kettenis <AIC_IRQ 396 IRQ_TYPE_LEVEL_HIGH>, 2190a8282b8SMark Kettenis <AIC_IRQ 397 IRQ_TYPE_LEVEL_HIGH>; 2200a8282b8SMark Kettenis }; 221ff2a8d91SMark Kettenis 222*3c866bb7SMarc Zyngier pcie0_dart_0: dart@681008000 { 223*3c866bb7SMarc Zyngier compatible = "apple,t8103-dart"; 224*3c866bb7SMarc Zyngier reg = <0x6 0x81008000 0x0 0x4000>; 225*3c866bb7SMarc Zyngier #iommu-cells = <1>; 226*3c866bb7SMarc Zyngier interrupt-parent = <&aic>; 227*3c866bb7SMarc Zyngier interrupts = <AIC_IRQ 696 IRQ_TYPE_LEVEL_HIGH>; 228*3c866bb7SMarc Zyngier }; 229*3c866bb7SMarc Zyngier 230*3c866bb7SMarc Zyngier pcie0_dart_1: dart@682008000 { 231*3c866bb7SMarc Zyngier compatible = "apple,t8103-dart"; 232*3c866bb7SMarc Zyngier reg = <0x6 0x82008000 0x0 0x4000>; 233*3c866bb7SMarc Zyngier #iommu-cells = <1>; 234*3c866bb7SMarc Zyngier interrupt-parent = <&aic>; 235*3c866bb7SMarc Zyngier interrupts = <AIC_IRQ 699 IRQ_TYPE_LEVEL_HIGH>; 236*3c866bb7SMarc Zyngier }; 237*3c866bb7SMarc Zyngier 238*3c866bb7SMarc Zyngier pcie0_dart_2: dart@683008000 { 239*3c866bb7SMarc Zyngier compatible = "apple,t8103-dart"; 240*3c866bb7SMarc Zyngier reg = <0x6 0x83008000 0x0 0x4000>; 241*3c866bb7SMarc Zyngier #iommu-cells = <1>; 242*3c866bb7SMarc Zyngier interrupt-parent = <&aic>; 243*3c866bb7SMarc Zyngier interrupts = <AIC_IRQ 702 IRQ_TYPE_LEVEL_HIGH>; 244*3c866bb7SMarc Zyngier }; 245*3c866bb7SMarc Zyngier 246ff2a8d91SMark Kettenis pcie0: pcie@690000000 { 247ff2a8d91SMark Kettenis compatible = "apple,t8103-pcie", "apple,pcie"; 248ff2a8d91SMark Kettenis device_type = "pci"; 249ff2a8d91SMark Kettenis 250ff2a8d91SMark Kettenis reg = <0x6 0x90000000 0x0 0x1000000>, 251ff2a8d91SMark Kettenis <0x6 0x80000000 0x0 0x100000>, 252ff2a8d91SMark Kettenis <0x6 0x81000000 0x0 0x4000>, 253ff2a8d91SMark Kettenis <0x6 0x82000000 0x0 0x4000>, 254ff2a8d91SMark Kettenis <0x6 0x83000000 0x0 0x4000>; 255ff2a8d91SMark Kettenis reg-names = "config", "rc", "port0", "port1", "port2"; 256ff2a8d91SMark Kettenis 257ff2a8d91SMark Kettenis interrupt-parent = <&aic>; 258ff2a8d91SMark Kettenis interrupts = <AIC_IRQ 695 IRQ_TYPE_LEVEL_HIGH>, 259ff2a8d91SMark Kettenis <AIC_IRQ 698 IRQ_TYPE_LEVEL_HIGH>, 260ff2a8d91SMark Kettenis <AIC_IRQ 701 IRQ_TYPE_LEVEL_HIGH>; 261ff2a8d91SMark Kettenis 262ff2a8d91SMark Kettenis msi-controller; 263ff2a8d91SMark Kettenis msi-parent = <&pcie0>; 264ff2a8d91SMark Kettenis msi-ranges = <&aic AIC_IRQ 704 IRQ_TYPE_EDGE_RISING 32>; 265ff2a8d91SMark Kettenis 266*3c866bb7SMarc Zyngier 267*3c866bb7SMarc Zyngier iommu-map = <0x100 &pcie0_dart_0 1 1>, 268*3c866bb7SMarc Zyngier <0x200 &pcie0_dart_1 1 1>, 269*3c866bb7SMarc Zyngier <0x300 &pcie0_dart_2 1 1>; 270*3c866bb7SMarc Zyngier iommu-map-mask = <0xff00>; 271*3c866bb7SMarc Zyngier 272ff2a8d91SMark Kettenis bus-range = <0 3>; 273ff2a8d91SMark Kettenis #address-cells = <3>; 274ff2a8d91SMark Kettenis #size-cells = <2>; 275ff2a8d91SMark Kettenis ranges = <0x43000000 0x6 0xa0000000 0x6 0xa0000000 0x0 0x20000000>, 276ff2a8d91SMark Kettenis <0x02000000 0x0 0xc0000000 0x6 0xc0000000 0x0 0x40000000>; 277ff2a8d91SMark Kettenis 278ff2a8d91SMark Kettenis pinctrl-0 = <&pcie_pins>; 279ff2a8d91SMark Kettenis pinctrl-names = "default"; 280ff2a8d91SMark Kettenis 281ff2a8d91SMark Kettenis pci@0,0 { 282ff2a8d91SMark Kettenis device_type = "pci"; 283ff2a8d91SMark Kettenis reg = <0x0 0x0 0x0 0x0 0x0>; 284ff2a8d91SMark Kettenis reset-gpios = <&pinctrl_ap 152 0>; 285ff2a8d91SMark Kettenis max-link-speed = <2>; 286ff2a8d91SMark Kettenis 287ff2a8d91SMark Kettenis #address-cells = <3>; 288ff2a8d91SMark Kettenis #size-cells = <2>; 289ff2a8d91SMark Kettenis ranges; 290ff2a8d91SMark Kettenis }; 291ff2a8d91SMark Kettenis 292ff2a8d91SMark Kettenis pci@1,0 { 293ff2a8d91SMark Kettenis device_type = "pci"; 294ff2a8d91SMark Kettenis reg = <0x800 0x0 0x0 0x0 0x0>; 295ff2a8d91SMark Kettenis reset-gpios = <&pinctrl_ap 153 0>; 296ff2a8d91SMark Kettenis max-link-speed = <2>; 297ff2a8d91SMark Kettenis 298ff2a8d91SMark Kettenis #address-cells = <3>; 299ff2a8d91SMark Kettenis #size-cells = <2>; 300ff2a8d91SMark Kettenis ranges; 301ff2a8d91SMark Kettenis }; 302ff2a8d91SMark Kettenis 303ff2a8d91SMark Kettenis pci@2,0 { 304ff2a8d91SMark Kettenis device_type = "pci"; 305ff2a8d91SMark Kettenis reg = <0x1000 0x0 0x0 0x0 0x0>; 306ff2a8d91SMark Kettenis reset-gpios = <&pinctrl_ap 33 0>; 307ff2a8d91SMark Kettenis max-link-speed = <1>; 308ff2a8d91SMark Kettenis 309ff2a8d91SMark Kettenis #address-cells = <3>; 310ff2a8d91SMark Kettenis #size-cells = <2>; 311ff2a8d91SMark Kettenis ranges; 312ff2a8d91SMark Kettenis }; 313ff2a8d91SMark Kettenis }; 3147d2d16ccSHector Martin }; 3157d2d16ccSHector Martin}; 316