mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-02 16:44:59 +00:00

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>
43 lines
1.4 KiB
Plaintext
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)>;
|
|
};
|