linux-loongson/arch/arm64/boot/dts/apple/t600x-nvme.dtsi
Hector Martin 7b0b0191a2 arm64: dts: apple: Add initial t6000/t6001/t6002 DTs
These SoCs are found in Apple devices with M1 Pro (t6000), M1 Max
(t6001) and M1 Ultra (t6002).

t6000 is a cut-down version of t6001, so the former just includes the
latter and disables the missing bits (This is currently just one PMGR
node and all of its domains.

t6002 is two connected t6001 dies. The implementation seems to use
t6001 with blocks disabled (mostly on the second die). MMIO addresses on
the second die have a constant offset. The interrupt controller is
multi-die aware. This setup can be represented in the device tree with
two top level "soc" nodes. The MMIO offset is applied via "ranges" and
devices are included with preproceesor macros to make the node labels
unique and to specify the die number for the interrupt definition.

Device nodes are distributed over dtsi files based on whether they are
present on both dies or just on the first die. The only execption is the
NVMe controller which resides on the second die. Its nodes are in a
separate file.

Co-developed-by: Janne Grunau <j@jannau.net>
Signed-off-by: Janne Grunau <j@jannau.net>
Acked-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Hector Martin <marcan@marcan.st>
2022-10-24 13:44:22 +09:00

43 lines
1.4 KiB
Plaintext

// SPDX-License-Identifier: GPL-2.0+ OR MIT
/*
* NVMe related devices for Apple T600x SoCs.
*
* Copyright The Asahi Linux Contributors
*/
DIE_NODE(ans_mbox): mbox@38f408000 {
compatible = "apple,t6000-asc-mailbox", "apple,asc-mailbox-v4";
reg = <0x3 0x8f408000 0x0 0x4000>;
interrupt-parent = <&aic>;
interrupts = <AIC_IRQ DIE_NO 1069 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 1070 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 1071 IRQ_TYPE_LEVEL_HIGH>,
<AIC_IRQ DIE_NO 1072 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "send-empty", "send-not-empty",
"recv-empty", "recv-not-empty";
power-domains = <&DIE_NODE(ps_ans2)>;
#mbox-cells = <0>;
};
DIE_NODE(sart): sart@393c50000 {
compatible = "apple,t6000-sart";
reg = <0x3 0x93c50000 0x0 0x10000>;
power-domains = <&DIE_NODE(ps_ans2)>;
};
DIE_NODE(nvme): nvme@393cc0000 {
compatible = "apple,t6000-nvme-ans2", "apple,nvme-ans2";
reg = <0x3 0x93cc0000 0x0 0x40000>, <0x3 0x8f400000 0x0 0x4000>;
reg-names = "nvme", "ans";
interrupt-parent = <&aic>;
/* The NVME interrupt is always routed to die */
interrupts = <AIC_IRQ 0 1613 IRQ_TYPE_LEVEL_HIGH>;
mboxes = <&DIE_NODE(ans_mbox)>;
apple,sart = <&DIE_NODE(sart)>;
power-domains = <&DIE_NODE(ps_ans2)>,
<&DIE_NODE(ps_apcie_st_sys)>,
<&DIE_NODE(ps_apcie_st1_sys)>;
power-domain-names = "ans", "apcie0", "apcie1";
resets = <&DIE_NODE(ps_ans2)>;
};