// SPDX-License-Identifier: GPL-2.0+ OR MIT /* * Apple T6030 "M3 Pro" SoC * * Other names: H15J, "Lobos" * * Copyright The Asahi Linux Contributors */ #include #include #include / { #address-cells = <2>; #size-cells = <2>; cpus { #address-cells = <2>; #size-cells = <0>; cpu-map { cluster0 { core0 { cpu = <&cpu_e00>; }; core1 { cpu = <&cpu_e01>; }; core2 { cpu = <&cpu_e02>; }; core3 { cpu = <&cpu_e03>; }; core4 { cpu = <&cpu_e04>; }; core5 { cpu = <&cpu_e05>; }; }; cluster1 { core0 { cpu = <&cpu_p00>; }; core1 { cpu = <&cpu_p01>; }; core2 { cpu = <&cpu_p02>; }; core3 { cpu = <&cpu_p03>; }; core4 { cpu = <&cpu_p04>; }; core5 { cpu = <&cpu_p05>; }; }; }; cpu_e00: cpu@0 { compatible = "apple,sawtooth"; device_type = "cpu"; reg = <0x0 0x0>; enable-method = "spin-table"; cpu-release-addr = <0 0>; /* to be filled by loader */ next-level-cache = <&l2_cache_0>; i-cache-size = <0x20000>; d-cache-size = <0x10000>; }; cpu_e01: cpu@1 { compatible = "apple,sawtooth"; device_type = "cpu"; reg = <0x0 0x1>; enable-method = "spin-table"; cpu-release-addr = <0 0>; /* to be filled by loader */ next-level-cache = <&l2_cache_0>; i-cache-size = <0x20000>; d-cache-size = <0x10000>; }; cpu_e02: cpu@2 { compatible = "apple,sawtooth"; device_type = "cpu"; reg = <0x0 0x2>; enable-method = "spin-table"; cpu-release-addr = <0 0>; /* to be filled by loader */ next-level-cache = <&l2_cache_0>; i-cache-size = <0x20000>; d-cache-size = <0x10000>; }; cpu_e03: cpu@3 { compatible = "apple,sawtooth"; device_type = "cpu"; reg = <0x0 0x3>; enable-method = "spin-table"; cpu-release-addr = <0 0>; /* to be filled by loader */ next-level-cache = <&l2_cache_0>; i-cache-size = <0x20000>; d-cache-size = <0x10000>; }; cpu_e04: cpu@4 { compatible = "apple,sawtooth"; device_type = "cpu"; reg = <0x0 0x4>; enable-method = "spin-table"; cpu-release-addr = <0 0>; /* to be filled by loader */ next-level-cache = <&l2_cache_0>; i-cache-size = <0x20000>; d-cache-size = <0x10000>; }; cpu_e05: cpu@5 { compatible = "apple,sawtooth"; device_type = "cpu"; reg = <0x0 0x5>; enable-method = "spin-table"; cpu-release-addr = <0 0>; /* to be filled by loader */ next-level-cache = <&l2_cache_0>; i-cache-size = <0x20000>; d-cache-size = <0x10000>; }; cpu_p00: cpu@10100 { compatible = "apple,everest"; device_type = "cpu"; reg = <0x0 0x10100>; enable-method = "spin-table"; cpu-release-addr = <0 0>; /* To be filled by loader */ next-level-cache = <&l2_cache_1>; i-cache-size = <0x30000>; d-cache-size = <0x20000>; }; cpu_p01: cpu@10101 { compatible = "apple,everest"; device_type = "cpu"; reg = <0x0 0x10101>; enable-method = "spin-table"; cpu-release-addr = <0 0>; /* To be filled by loader */ next-level-cache = <&l2_cache_1>; i-cache-size = <0x30000>; d-cache-size = <0x20000>; }; cpu_p02: cpu@10102 { compatible = "apple,everest"; device_type = "cpu"; reg = <0x0 0x10102>; enable-method = "spin-table"; cpu-release-addr = <0 0>; /* To be filled by loader */ next-level-cache = <&l2_cache_1>; i-cache-size = <0x30000>; d-cache-size = <0x20000>; }; cpu_p03: cpu@10103 { compatible = "apple,everest"; device_type = "cpu"; reg = <0x0 0x10103>; enable-method = "spin-table"; cpu-release-addr = <0 0>; /* To be filled by loader */ next-level-cache = <&l2_cache_1>; i-cache-size = <0x30000>; d-cache-size = <0x20000>; }; cpu_p04: cpu@10104 { compatible = "apple,everest"; device_type = "cpu"; reg = <0x0 0x10104>; enable-method = "spin-table"; cpu-release-addr = <0 0>; /* To be filled by loader */ next-level-cache = <&l2_cache_1>; i-cache-size = <0x30000>; d-cache-size = <0x20000>; }; cpu_p05: cpu@10105 { compatible = "apple,everest"; device_type = "cpu"; reg = <0x0 0x10105>; enable-method = "spin-table"; cpu-release-addr = <0 0>; /* To be filled by loader */ next-level-cache = <&l2_cache_1>; i-cache-size = <0x30000>; d-cache-size = <0x20000>; }; l2_cache_0: l2-cache-0 { compatible = "cache"; cache-level = <2>; cache-unified; cache-size = <0x400000>; }; l2_cache_1: l2-cache-1 { compatible = "cache"; cache-level = <2>; cache-unified; cache-size = <0x1000000>; }; }; timer { compatible = "arm,armv8-timer"; interrupt-parent = <&aic>; interrupt-names = "phys", "virt", "hyp-phys", "hyp-virt"; interrupts = , , , ; }; clkref: clock-ref { compatible = "fixed-clock"; #clock-cells = <0>; clock-frequency = <24000000>; clock-output-names = "clkref"; }; reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; }; soc: soc { compatible = "simple-bus"; #address-cells = <2>; #size-cells = <2>; ranges; nonposted-mmio; /* Required to get >32-bit DMA via DARTs */ dma-ranges = <0 0 0 0 0xffffffff 0xffffc000>; i2c1: i2c@289014000 { compatible = "apple,t6030-i2c", "apple,t8103-i2c"; reg = <0x2 0x89014000 0x0 0x4000>; clocks = <&clkref>; interrupt-parent = <&aic>; interrupts = ; pinctrl-0 = <&i2c1_pins>; pinctrl-names = "default"; #address-cells = <0x1>; #size-cells = <0x0>; power-domains = <&ps_i2c1>; status = "disabled"; }; i2c2: i2c@289018000 { compatible = "apple,t6030-i2c", "apple,t8103-i2c"; reg = <0x2 0x89018000 0x0 0x4000>; clocks = <&clkref>; interrupt-parent = <&aic>; interrupts = ; pinctrl-0 = <&i2c2_pins>; pinctrl-names = "default"; #address-cells = <0x1>; #size-cells = <0x0>; power-domains = <&ps_i2c2>; status = "disabled"; }; i2c3: i2c@28901c000 { compatible = "apple,t6030-i2c", "apple,t8103-i2c"; reg = <0x2 0x8901c000 0x0 0x4000>; clocks = <&clkref>; interrupt-parent = <&aic>; interrupts = ; pinctrl-0 = <&i2c3_pins>; pinctrl-names = "default"; #address-cells = <0x1>; #size-cells = <0x0>; power-domains = <&ps_i2c3>; status = "disabled"; }; i2c4: i2c@289020000 { compatible = "apple,t6030-i2c", "apple,t8103-i2c"; reg = <0x2 0x89020000 0x0 0x4000>; clocks = <&clkref>; interrupt-parent = <&aic>; interrupts = ; pinctrl-0 = <&i2c4_pins>; pinctrl-names = "default"; #address-cells = <0x1>; #size-cells = <0x0>; power-domains = <&ps_i2c4>; status = "disabled"; }; i2c6: i2c@289028000 { compatible = "apple,t6030-i2c", "apple,t8103-i2c"; reg = <0x2 0x89028000 0x0 0x4000>; clocks = <&clkref>; interrupt-parent = <&aic>; interrupts = ; pinctrl-0 = <&i2c6_pins>; pinctrl-names = "default"; #address-cells = <0x1>; #size-cells = <0x0>; power-domains = <&ps_i2c6>; status = "disabled"; }; i2c8: i2c@289030000 { compatible = "apple,t6030-i2c", "apple,t8103-i2c"; reg = <0x2 0x89030000 0x0 0x4000>; clocks = <&clkref>; interrupt-parent = <&aic>; interrupts = ; pinctrl-0 = <&i2c8_pins>; pinctrl-names = "default"; #address-cells = <0x1>; #size-cells = <0x0>; power-domains = <&ps_i2c8>; status = "disabled"; }; fpwm0: pwm@289040000 { compatible = "apple,t6030-fpwm", "apple,s5l-fpwm"; reg = <0x2 0x89040000 0x0 0x4000>; power-domains = <&ps_fpwm0>; clocks = <&clkref>; #pwm-cells = <2>; status = "disabled"; }; serial0: serial@289200000 { compatible = "apple,s5l-uart"; reg = <0x2 0x89200000 0x0 0x1000>; reg-io-width = <4>; interrupt-parent = <&aic>; interrupts = ; /* * TODO: figure out the clocking properly, there may * be a third selectable clock. */ clocks = <&clkref>, <&clkref>; clock-names = "uart", "clk_uart_baud0"; power-domains = <&ps_uart0>; status = "disabled"; }; pmgr_gfx: power-management@290e80000 { compatible = "apple,t6030-pmgr", "apple,t8103-pmgr", "syscon", "simple-mfd"; #address-cells = <1>; #size-cells = <1>; reg = <0x2 0x90e80000 0 0x4000>; /* child nodes are added in t6030-pmgr.dtsi */ }; pinctrl_ap: pinctrl@347100000 { compatible = "apple,t6030-pinctrl", "apple,t8103-pinctrl"; reg = <0x3 0x47100000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = , , , , , , ; power-domains = <&ps_gpio>; gpio-controller; #gpio-cells = <2>; gpio-ranges = <&pinctrl_ap 0 0 224>; apple,npins = <224>; interrupt-controller; #interrupt-cells = <2>; i2c1_pins: i2c1-pins { pinmux = , ; }; i2c2_pins: i2c2-pins { pinmux = , ; }; i2c3_pins: i2c3-pins { pinmux = , ; }; i2c4_pins: i2c4-pins { pinmux = , ; }; i2c6_pins: i2c6-pins { pinmux = , ; }; i2c8_pins: i2c8-pins { pinmux = , ; }; }; pmgr: power-management@350700000 { compatible = "apple,t6030-pmgr", "apple,t8103-pmgr", "syscon", "simple-mfd"; #address-cells = <1>; #size-cells = <1>; reg = <0x3 0x50700000 0 0x14000>; /* child nodes are added in t6030-pmgr.dtsi */ }; aic: interrupt-controller@351000000 { compatible = "apple,t6030-aic3", "apple,t8122-aic3"; #interrupt-cells = <3>; interrupt-controller; reg = <0x3 0x51000000 0x0 0x184000>, <0x3 0x51040000 0x0 0x4000>; reg-names = "core", "event"; power-domains = <&ps_aic>; }; pinctrl_nub: pinctrl@3641f0000 { compatible = "apple,t6030-pinctrl", "apple,t8103-pinctrl"; reg = <0x3 0x641f0000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = , , , , , , ; gpio-controller; #gpio-cells = <2>; gpio-ranges = <&pinctrl_nub 0 0 37>; apple,npins = <37>; interrupt-controller; #interrupt-cells = <2>; }; pmgr_mini: power-management@364280000 { compatible = "apple,t6030-pmgr", "apple,t8103-pmgr", "syscon", "simple-mfd"; #address-cells = <1>; #size-cells = <1>; reg = <0x3 0x64280000 0 0x4000>; /* child nodes are added in t6030-pmgr.dtsi */ }; wdt: watchdog@3642b0000 { compatible = "apple,t6030-wdt", "apple,t8103-wdt"; reg = <0x3 0x642b0000 0x0 0x4000>; clocks = <&clkref>; interrupt-parent = <&aic>; interrupts = ; }; pinctrl_smc: pinctrl@36c820000 { compatible = "apple,t6030-pinctrl", "apple,t8103-pinctrl"; reg = <0x3 0x6c820000 0x0 0x4000>; gpio-controller; #gpio-cells = <2>; gpio-ranges = <&pinctrl_smc 0 0 18>; apple,npins = <18>; interrupt-controller; #interrupt-cells = <2>; interrupt-parent = <&aic>; interrupts = , , , , , , ; }; pinctrl_aop: pinctrl@374824000 { compatible = "apple,t6030-pinctrl", "apple,t8103-pinctrl"; reg = <0x3 0x74824000 0x0 0x4000>; interrupt-parent = <&aic>; interrupts = , , , , , , ; clocks = <&clkref>; gpio-controller; #gpio-cells = <2>; gpio-ranges = <&pinctrl_aop 0 0 54>; apple,npins = <54>; interrupt-controller; #interrupt-cells = <2>; }; }; }; #include "t6030-pmgr.dtsi"