1a9a28afbSKonrad Dybcio// SPDX-License-Identifier: GPL-2.0+ OR MIT 2a9a28afbSKonrad Dybcio/* 3a9a28afbSKonrad Dybcio * Apple T8011 "A10X" SoC 4a9a28afbSKonrad Dybcio * 5a9a28afbSKonrad Dybcio * Other names: H9G, "Myst" 6a9a28afbSKonrad Dybcio * 7a9a28afbSKonrad Dybcio * Copyright (c) 2022, Konrad Dybcio <konradybcio@kernel.org> 8a9a28afbSKonrad Dybcio */ 9a9a28afbSKonrad Dybcio 10a9a28afbSKonrad Dybcio#include <dt-bindings/gpio/gpio.h> 11a9a28afbSKonrad Dybcio#include <dt-bindings/interrupt-controller/apple-aic.h> 12a9a28afbSKonrad Dybcio#include <dt-bindings/interrupt-controller/irq.h> 13a9a28afbSKonrad Dybcio#include <dt-bindings/pinctrl/apple.h> 14a9a28afbSKonrad Dybcio 15a9a28afbSKonrad Dybcio/ { 16a9a28afbSKonrad Dybcio interrupt-parent = <&aic>; 17a9a28afbSKonrad Dybcio #address-cells = <2>; 18a9a28afbSKonrad Dybcio #size-cells = <2>; 19a9a28afbSKonrad Dybcio 20a9a28afbSKonrad Dybcio clkref: clock-ref { 21a9a28afbSKonrad Dybcio compatible = "fixed-clock"; 22a9a28afbSKonrad Dybcio #clock-cells = <0>; 23a9a28afbSKonrad Dybcio clock-frequency = <24000000>; 24a9a28afbSKonrad Dybcio clock-output-names = "clkref"; 25a9a28afbSKonrad Dybcio }; 26a9a28afbSKonrad Dybcio 27a9a28afbSKonrad Dybcio cpus { 28a9a28afbSKonrad Dybcio #address-cells = <2>; 29a9a28afbSKonrad Dybcio #size-cells = <0>; 30a9a28afbSKonrad Dybcio 31a9a28afbSKonrad Dybcio cpu0: cpu@0 { 32a9a28afbSKonrad Dybcio compatible = "apple,hurricane-zephyr"; 33a9a28afbSKonrad Dybcio reg = <0x0 0x0>; 34a9a28afbSKonrad Dybcio cpu-release-addr = <0 0>; /* To be filled by loader */ 351174a469SNick Chan operating-points-v2 = <&fusion_opp>; 361174a469SNick Chan performance-domains = <&cpufreq>; 37a9a28afbSKonrad Dybcio enable-method = "spin-table"; 38a9a28afbSKonrad Dybcio device_type = "cpu"; 39*66be2180SNick Chan next-level-cache = <&l2_cache>; 40*66be2180SNick Chan i-cache-size = <0x10000>; /* P-core */ 41*66be2180SNick Chan d-cache-size = <0x10000>; /* P-core */ 42a9a28afbSKonrad Dybcio }; 43a9a28afbSKonrad Dybcio 44a9a28afbSKonrad Dybcio cpu1: cpu@1 { 45a9a28afbSKonrad Dybcio compatible = "apple,hurricane-zephyr"; 46a9a28afbSKonrad Dybcio reg = <0x0 0x1>; 47a9a28afbSKonrad Dybcio cpu-release-addr = <0 0>; /* To be filled by loader */ 481174a469SNick Chan operating-points-v2 = <&fusion_opp>; 491174a469SNick Chan performance-domains = <&cpufreq>; 50a9a28afbSKonrad Dybcio enable-method = "spin-table"; 51a9a28afbSKonrad Dybcio device_type = "cpu"; 52*66be2180SNick Chan next-level-cache = <&l2_cache>; 53*66be2180SNick Chan i-cache-size = <0x10000>; /* P-core */ 54*66be2180SNick Chan d-cache-size = <0x10000>; /* P-core */ 55a9a28afbSKonrad Dybcio }; 56a9a28afbSKonrad Dybcio 57a9a28afbSKonrad Dybcio cpu2: cpu@2 { 58a9a28afbSKonrad Dybcio compatible = "apple,hurricane-zephyr"; 59a9a28afbSKonrad Dybcio reg = <0x0 0x2>; 60a9a28afbSKonrad Dybcio cpu-release-addr = <0 0>; /* To be filled by loader */ 611174a469SNick Chan operating-points-v2 = <&fusion_opp>; 621174a469SNick Chan performance-domains = <&cpufreq>; 63a9a28afbSKonrad Dybcio enable-method = "spin-table"; 64a9a28afbSKonrad Dybcio device_type = "cpu"; 65*66be2180SNick Chan next-level-cache = <&l2_cache>; 66*66be2180SNick Chan i-cache-size = <0x10000>; /* P-core */ 67*66be2180SNick Chan d-cache-size = <0x10000>; /* P-core */ 68*66be2180SNick Chan }; 69*66be2180SNick Chan 70*66be2180SNick Chan l2_cache: l2-cache { 71*66be2180SNick Chan compatible = "cache"; 72*66be2180SNick Chan cache-level = <2>; 73*66be2180SNick Chan cache-unified; 74*66be2180SNick Chan cache-size = <0x800000>; /* P-cluster */ 75a9a28afbSKonrad Dybcio }; 76a9a28afbSKonrad Dybcio }; 77a9a28afbSKonrad Dybcio 781174a469SNick Chan fusion_opp: opp-table { 791174a469SNick Chan compatible = "operating-points-v2"; 801174a469SNick Chan 811174a469SNick Chan /* 821174a469SNick Chan * Apple Fusion Architecture: Hardwired big.LITTLE switcher 831174a469SNick Chan * that use p-state transitions to switch between cores. 841174a469SNick Chan * 851174a469SNick Chan * The E-core frequencies are adjusted so performance scales 861174a469SNick Chan * linearly with reported clock speed. 871174a469SNick Chan */ 881174a469SNick Chan 891174a469SNick Chan opp01 { 901174a469SNick Chan opp-hz = /bits/ 64 <172000000>; /* 300 MHz, E-core */ 911174a469SNick Chan opp-level = <1>; 921174a469SNick Chan clock-latency-ns = <12000>; 931174a469SNick Chan }; 941174a469SNick Chan opp02 { 951174a469SNick Chan opp-hz = /bits/ 64 <230000000>; /* 396 MHz, E-core */ 961174a469SNick Chan opp-level = <2>; 971174a469SNick Chan clock-latency-ns = <135000>; 981174a469SNick Chan }; 991174a469SNick Chan opp03 { 1001174a469SNick Chan opp-hz = /bits/ 64 <448000000>; /* 768 MHz, E-core */ 1011174a469SNick Chan opp-level = <3>; 1021174a469SNick Chan clock-latency-ns = <105000>; 1031174a469SNick Chan }; 1041174a469SNick Chan opp04 { 1051174a469SNick Chan opp-hz = /bits/ 64 <662000000>; /* 1152 MHz, E-core */ 1061174a469SNick Chan opp-level = <4>; 1071174a469SNick Chan clock-latency-ns = <115000>; 1081174a469SNick Chan }; 1091174a469SNick Chan opp05 { 1101174a469SNick Chan opp-hz = /bits/ 64 <804000000>; 1111174a469SNick Chan opp-level = <5>; 1121174a469SNick Chan clock-latency-ns = <122000>; 1131174a469SNick Chan }; 1141174a469SNick Chan opp06 { 1151174a469SNick Chan opp-hz = /bits/ 64 <1140000000>; 1161174a469SNick Chan opp-level = <6>; 1171174a469SNick Chan clock-latency-ns = <120000>; 1181174a469SNick Chan }; 1191174a469SNick Chan opp07 { 1201174a469SNick Chan opp-hz = /bits/ 64 <1548000000>; 1211174a469SNick Chan opp-level = <7>; 1221174a469SNick Chan clock-latency-ns = <125000>; 1231174a469SNick Chan }; 1241174a469SNick Chan opp08 { 1251174a469SNick Chan opp-hz = /bits/ 64 <1956000000>; 1261174a469SNick Chan opp-level = <8>; 1271174a469SNick Chan clock-latency-ns = <135000>; 1281174a469SNick Chan }; 1291174a469SNick Chan opp09 { 1301174a469SNick Chan opp-hz = /bits/ 64 <2316000000>; 1311174a469SNick Chan opp-level = <9>; 1321174a469SNick Chan clock-latency-ns = <140000>; 1331174a469SNick Chan }; 1341174a469SNick Chan#if 0 1351174a469SNick Chan /* Not available until CPU deep sleep is implemented */ 1361174a469SNick Chan opp10 { 1371174a469SNick Chan opp-hz = /bits/ 64 <2400000000>; 1381174a469SNick Chan opp-level = <10>; 1391174a469SNick Chan clock-latency-ns = <140000>; 1401174a469SNick Chan turbo-mode; 1411174a469SNick Chan }; 1421174a469SNick Chan#endif 1431174a469SNick Chan }; 1441174a469SNick Chan 145a9a28afbSKonrad Dybcio soc { 146a9a28afbSKonrad Dybcio compatible = "simple-bus"; 147a9a28afbSKonrad Dybcio #address-cells = <2>; 148a9a28afbSKonrad Dybcio #size-cells = <2>; 149a9a28afbSKonrad Dybcio nonposted-mmio; 150a9a28afbSKonrad Dybcio ranges; 151a9a28afbSKonrad Dybcio 1521174a469SNick Chan cpufreq: performance-controller@202f20000 { 1531174a469SNick Chan compatible = "apple,t8010-cluster-cpufreq", "apple,t8103-cluster-cpufreq", "apple,cluster-cpufreq"; 1541174a469SNick Chan reg = <0x2 0x02f20000 0 0x1000>; 1551174a469SNick Chan #performance-domain-cells = <0>; 1561174a469SNick Chan }; 1571174a469SNick Chan 158a9a28afbSKonrad Dybcio serial0: serial@20a0c0000 { 159a9a28afbSKonrad Dybcio compatible = "apple,s5l-uart"; 160a9a28afbSKonrad Dybcio reg = <0x2 0x0a0c0000 0x0 0x4000>; 161a9a28afbSKonrad Dybcio reg-io-width = <4>; 162a9a28afbSKonrad Dybcio interrupt-parent = <&aic>; 163a9a28afbSKonrad Dybcio interrupts = <AIC_IRQ 216 IRQ_TYPE_LEVEL_HIGH>; 164a9a28afbSKonrad Dybcio /* Use the bootloader-enabled clocks for now. */ 165a9a28afbSKonrad Dybcio clocks = <&clkref>, <&clkref>; 166a9a28afbSKonrad Dybcio clock-names = "uart", "clk_uart_baud0"; 167c6dfa348SNick Chan power-domains = <&ps_uart0>; 168a9a28afbSKonrad Dybcio status = "disabled"; 169a9a28afbSKonrad Dybcio }; 170a9a28afbSKonrad Dybcio 171c6dfa348SNick Chan pmgr: power-management@20e000000 { 172c6dfa348SNick Chan compatible = "apple,t8010-pmgr", "apple,pmgr", "syscon", "simple-mfd"; 173c6dfa348SNick Chan #address-cells = <1>; 174c6dfa348SNick Chan #size-cells = <1>; 175c6dfa348SNick Chan 176c6dfa348SNick Chan reg = <0x2 0xe000000 0 0x8c000>; 177c6dfa348SNick Chan }; 178c6dfa348SNick Chan 179a9a28afbSKonrad Dybcio aic: interrupt-controller@20e100000 { 180a9a28afbSKonrad Dybcio compatible = "apple,t8010-aic", "apple,aic"; 181a9a28afbSKonrad Dybcio reg = <0x2 0x0e100000 0x0 0x100000>; 182a9a28afbSKonrad Dybcio #interrupt-cells = <3>; 183a9a28afbSKonrad Dybcio interrupt-controller; 184c6dfa348SNick Chan power-domains = <&ps_aic>; 185a9a28afbSKonrad Dybcio }; 186a9a28afbSKonrad Dybcio 187a9a28afbSKonrad Dybcio pinctrl_ap: pinctrl@20f100000 { 188a9a28afbSKonrad Dybcio compatible = "apple,t8010-pinctrl", "apple,pinctrl"; 189a9a28afbSKonrad Dybcio reg = <0x2 0x0f100000 0x0 0x100000>; 190c6dfa348SNick Chan power-domains = <&ps_gpio>; 191a9a28afbSKonrad Dybcio 192a9a28afbSKonrad Dybcio gpio-controller; 193a9a28afbSKonrad Dybcio #gpio-cells = <2>; 194a9a28afbSKonrad Dybcio gpio-ranges = <&pinctrl_ap 0 0 219>; 195a9a28afbSKonrad Dybcio apple,npins = <219>; 196a9a28afbSKonrad Dybcio 197a9a28afbSKonrad Dybcio interrupt-controller; 198a9a28afbSKonrad Dybcio #interrupt-cells = <2>; 199a9a28afbSKonrad Dybcio interrupt-parent = <&aic>; 200a9a28afbSKonrad Dybcio interrupts = <AIC_IRQ 42 IRQ_TYPE_LEVEL_HIGH>, 201a9a28afbSKonrad Dybcio <AIC_IRQ 43 IRQ_TYPE_LEVEL_HIGH>, 202a9a28afbSKonrad Dybcio <AIC_IRQ 44 IRQ_TYPE_LEVEL_HIGH>, 203a9a28afbSKonrad Dybcio <AIC_IRQ 45 IRQ_TYPE_LEVEL_HIGH>, 204a9a28afbSKonrad Dybcio <AIC_IRQ 46 IRQ_TYPE_LEVEL_HIGH>, 205a9a28afbSKonrad Dybcio <AIC_IRQ 47 IRQ_TYPE_LEVEL_HIGH>, 206a9a28afbSKonrad Dybcio <AIC_IRQ 48 IRQ_TYPE_LEVEL_HIGH>; 207a9a28afbSKonrad Dybcio }; 208a9a28afbSKonrad Dybcio 209a9a28afbSKonrad Dybcio pinctrl_aop: pinctrl@2100f0000 { 210a9a28afbSKonrad Dybcio compatible = "apple,t8010-pinctrl", "apple,pinctrl"; 211a9a28afbSKonrad Dybcio reg = <0x2 0x100f0000 0x0 0x100000>; 212c6dfa348SNick Chan power-domains = <&ps_aop_gpio>; 213a9a28afbSKonrad Dybcio 214a9a28afbSKonrad Dybcio gpio-controller; 215a9a28afbSKonrad Dybcio #gpio-cells = <2>; 216a9a28afbSKonrad Dybcio gpio-ranges = <&pinctrl_aop 0 0 42>; 217a9a28afbSKonrad Dybcio apple,npins = <42>; 218a9a28afbSKonrad Dybcio 219a9a28afbSKonrad Dybcio interrupt-controller; 220a9a28afbSKonrad Dybcio #interrupt-cells = <2>; 221a9a28afbSKonrad Dybcio interrupt-parent = <&aic>; 222a9a28afbSKonrad Dybcio interrupts = <AIC_IRQ 125 IRQ_TYPE_LEVEL_HIGH>, 223a9a28afbSKonrad Dybcio <AIC_IRQ 126 IRQ_TYPE_LEVEL_HIGH>, 224a9a28afbSKonrad Dybcio <AIC_IRQ 127 IRQ_TYPE_LEVEL_HIGH>, 225a9a28afbSKonrad Dybcio <AIC_IRQ 128 IRQ_TYPE_LEVEL_HIGH>, 226a9a28afbSKonrad Dybcio <AIC_IRQ 129 IRQ_TYPE_LEVEL_HIGH>, 227a9a28afbSKonrad Dybcio <AIC_IRQ 130 IRQ_TYPE_LEVEL_HIGH>, 228a9a28afbSKonrad Dybcio <AIC_IRQ 131 IRQ_TYPE_LEVEL_HIGH>; 229a9a28afbSKonrad Dybcio }; 230a9a28afbSKonrad Dybcio 231c6dfa348SNick Chan pmgr_mini: power-management@210200000 { 232c6dfa348SNick Chan compatible = "apple,t8010-pmgr", "apple,pmgr", "syscon", "simple-mfd"; 233c6dfa348SNick Chan #address-cells = <1>; 234c6dfa348SNick Chan #size-cells = <1>; 235c6dfa348SNick Chan 236c6dfa348SNick Chan reg = <0x2 0x10200000 0 0x84000>; 237c6dfa348SNick Chan }; 238c6dfa348SNick Chan 239a9a28afbSKonrad Dybcio wdt: watchdog@2102b0000 { 240a9a28afbSKonrad Dybcio compatible = "apple,t8010-wdt", "apple,wdt"; 241a9a28afbSKonrad Dybcio reg = <0x2 0x102b0000 0x0 0x4000>; 242a9a28afbSKonrad Dybcio clocks = <&clkref>; 243a9a28afbSKonrad Dybcio interrupt-parent = <&aic>; 244a9a28afbSKonrad Dybcio interrupts = <AIC_IRQ 4 IRQ_TYPE_LEVEL_HIGH>; 245a9a28afbSKonrad Dybcio }; 246a9a28afbSKonrad Dybcio }; 247a9a28afbSKonrad Dybcio 248a9a28afbSKonrad Dybcio timer { 249a9a28afbSKonrad Dybcio compatible = "arm,armv8-timer"; 250a9a28afbSKonrad Dybcio interrupt-parent = <&aic>; 251a9a28afbSKonrad Dybcio interrupt-names = "phys", "virt"; 252a9a28afbSKonrad Dybcio /* Note that A10X doesn't actually have a hypervisor (EL2 is not implemented). */ 253a9a28afbSKonrad Dybcio interrupts = <AIC_FIQ AIC_TMR_GUEST_PHYS IRQ_TYPE_LEVEL_HIGH>, 254a9a28afbSKonrad Dybcio <AIC_FIQ AIC_TMR_GUEST_VIRT IRQ_TYPE_LEVEL_HIGH>; 255a9a28afbSKonrad Dybcio }; 256a9a28afbSKonrad Dybcio}; 257c6dfa348SNick Chan 258c6dfa348SNick Chan#include "t8011-pmgr.dtsi" 259