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>
23 lines
535 B
C
23 lines
535 B
C
/* SPDX-License-Identifier: GPL-2.0+ OR MIT
|
|
*
|
|
* C preprocessor macros for t600x multi die support.
|
|
*/
|
|
|
|
#ifndef __DTS_APPLE_MULTI_DIE_CPP_H
|
|
#define __DTS_APPLE_MULTI_DIE_CPP_H
|
|
|
|
#ifndef __stringify
|
|
#define __stringify_1(x...) #x
|
|
#define __stringify(x...) __stringify_1(x)
|
|
#endif
|
|
|
|
#ifndef __concat
|
|
#define __concat_1(x, y...) x ## y
|
|
#define __concat(x, y...) __concat_1(x, y)
|
|
#endif
|
|
|
|
#define DIE_NODE(a) __concat(a, DIE)
|
|
#define DIE_LABEL(a) __stringify(__concat(a, DIE))
|
|
|
|
#endif /* !__DTS_APPLE_MULTI_DIE_CPP_H */
|