| 1 | /* | 
| 2 |  * Copyright (c) 2007-2023 Apple Inc. All rights reserved. | 
| 3 |  * Copyright (c) 2005-2006 Apple Computer, Inc. All rights reserved. | 
| 4 |  */ | 
| 5 | #ifndef _PEXPERT_ARM_BOARD_CONFIG_H | 
| 6 | #define _PEXPERT_ARM_BOARD_CONFIG_H | 
| 7 |  | 
| 8 | #include <mach/machine.h> | 
| 9 |  | 
| 10 | /* | 
| 11 |  * Per-SoC configuration.  General order is: | 
| 12 |  * | 
| 13 |  * CPU type | 
| 14 |  * CPU configuration | 
| 15 |  * CPU feature disables / workarounds | 
| 16 |  * CPU topology | 
| 17 |  * Other platform configuration (e.g. DARTs, PPL) | 
| 18 |  * | 
| 19 |  * This should answer the question: "what's unique about this SoC?" | 
| 20 |  * | 
| 21 |  * arm64/H*.h should answer the question: "what's unique about this CPU core?" | 
| 22 |  * | 
| 23 |  * For __ARM_AMP__ systems that have different cache line sizes on different | 
| 24 |  * clusters, MAX_L2_CLINE must reflect the largest L2 cache line size | 
| 25 |  * across all clusters. | 
| 26 |  */ | 
| 27 |  | 
| 28 | #ifdef ARM64_BOARD_CONFIG_T6000 | 
| 29 | #include <pexpert/arm64/H13.h> | 
| 30 |  | 
| 31 |  | 
| 32 | #define MAX_L2_CLINE                   7 | 
| 33 | #define MAX_CPUS                       10 | 
| 34 | #define MAX_CPU_CLUSTERS               3 | 
| 35 | #define MAX_CPU_CLUSTER_PHY_ID         10 | 
| 36 | #define HAS_IOA                        1 | 
| 37 |  | 
| 38 | #define PMAP_CS                        1 | 
| 39 | #define PMAP_CS_ENABLE                 1 | 
| 40 | #define XNU_MONITOR                    1 /* Secure pmap runtime */ | 
| 41 | #define __ARM_42BIT_PA_SPACE__         1 | 
| 42 | #define USE_APPLEARMSMP                1 | 
| 43 | #if DEVELOPMENT || DEBUG | 
| 44 | #define XNU_ENABLE_PROCESSOR_EXIT      1 /* Enable xnu processor_exit() by default */ | 
| 45 | #endif | 
| 46 | #define XNU_HANDLE_MCC                 1 /* This platform may support MCC error recovery */ | 
| 47 | #endif  /* ARM64_BOARD_CONFIG_T6000 */ | 
| 48 |  | 
| 49 | #ifdef ARM64_BOARD_CONFIG_T6020 | 
| 50 | #include <pexpert/arm64/H14.h> | 
| 51 |  | 
| 52 | #define MAX_L2_CLINE                   7 | 
| 53 | #define MAX_CPUS                       24 | 
| 54 | #define MAX_CPU_CLUSTERS               6 | 
| 55 | #define MAX_CPU_CLUSTER_PHY_ID         10 | 
| 56 | #define HAS_IOA                        1 | 
| 57 |  | 
| 58 | #define PMAP_CS                        1 | 
| 59 | #define PMAP_CS_ENABLE                 1 | 
| 60 | #define XNU_MONITOR                    1 /* Secure pmap runtime */ | 
| 61 | #define XNU_MONITOR_NVME_PPL           1 /* NVMe PPL plugin for secure pmap runtime */ | 
| 62 | #define XNU_MONITOR_ANS2_SART          1 /* ANS2 SART plugin for secure pmap runtime */ | 
| 63 | #define XNU_MONITOR_UAT_PPL            1 /* UAT PPL plugin for secure pmap runtime */ | 
| 64 | #if HIBERNATION | 
| 65 | #define XNU_MONITOR_PPL_HIB            1 /* HMAC SHA driver exposed as a PPL plugin */ | 
| 66 | #endif /* HIBERNATION */ | 
| 67 | #define XNU_MONITOR_T6000_DART         1 | 
| 68 | #define XNU_MONITOR_T8110_DART         1 /* T8110 DART plugin for secure pmap runtime */ | 
| 69 | #define __ARM_42BIT_PA_SPACE__         1 | 
| 70 | #define USE_APPLEARMSMP                1 | 
| 71 | #define XNU_CLUSTER_POWER_DOWN         1 /* Enable xnu cluster power down by default */ | 
| 72 | #define RHODES_CLUSTER_POWERDOWN_WORKAROUND 1 /* Workaround for rdar://89107373 (Rhodes cluster power down: cannot manually power down and up a core multiple times without powering down the cluster) */ | 
| 73 | #define XNU_PLATFORM_ERROR_HANDLER     1 /* This platform uses the platform error handler inside XNU rather than a kext */ | 
| 74 | #define XNU_HANDLE_ECC                 1 /* This platform may support ECC error recovery */ | 
| 75 | #define XNU_HANDLE_MCC                 1 /* This platform may support MCC error recovery */ | 
| 76 | #endif  /* ARM64_BOARD_CONFIG_T6020 */ | 
| 77 |  | 
| 78 |  | 
| 79 |  | 
| 80 |  | 
| 81 |  | 
| 82 |  | 
| 83 |  | 
| 84 |  | 
| 85 | #ifdef ARM64_BOARD_CONFIG_T8101 | 
| 86 | #include <pexpert/arm64/H13.h> | 
| 87 |  | 
| 88 | #define MAX_L2_CLINE                   7 | 
| 89 | #define MAX_CPUS                       8 | 
| 90 | #define MAX_CPU_CLUSTERS               2 | 
| 91 |  | 
| 92 | #define PMAP_CS                        1 | 
| 93 | #define PMAP_CS_ENABLE                 1 | 
| 94 | #define XNU_MONITOR                    1 /* Secure pmap runtime */ | 
| 95 | #endif  /* ARM64_BOARD_CONFIG_T8101 */ | 
| 96 |  | 
| 97 | #ifdef ARM64_BOARD_CONFIG_T8103 | 
| 98 | #include <pexpert/arm64/H13.h> | 
| 99 |  | 
| 100 | #define MAX_L2_CLINE                   7 | 
| 101 | #define MAX_CPUS                       8 | 
| 102 | #define MAX_CPU_CLUSTERS               2 | 
| 103 |  | 
| 104 | #define PMAP_CS                        1 | 
| 105 | #define PMAP_CS_ENABLE                 1 | 
| 106 | #define XNU_MONITOR                    1 /* Secure pmap runtime */ | 
| 107 | #endif  /* ARM64_BOARD_CONFIG_T8103 */ | 
| 108 |  | 
| 109 |  | 
| 110 | #ifdef ARM64_BOARD_CONFIG_T8112 | 
| 111 | #include <pexpert/arm64/H14.h> | 
| 112 |  | 
| 113 | #define MAX_L2_CLINE                   7 | 
| 114 | #define MAX_CPUS                       8 /* Actually has 6 CPUs, see doc/xnu_build_consolidation.md for more info */ | 
| 115 | #define MAX_CPU_CLUSTERS               2 | 
| 116 |  | 
| 117 | #define PMAP_CS                        1 | 
| 118 | #define PMAP_CS_ENABLE                 1 | 
| 119 | #define XNU_MONITOR                    1 /* Secure pmap runtime */ | 
| 120 | #define USE_APPLEARMSMP                1 | 
| 121 | #endif  /* ARM64_BOARD_CONFIG_T8112 */ | 
| 122 |  | 
| 123 |  | 
| 124 |  | 
| 125 |  | 
| 126 |  | 
| 127 |  | 
| 128 |  | 
| 129 |  | 
| 130 |  | 
| 131 |  | 
| 132 |  | 
| 133 | #ifdef ARM64_BOARD_CONFIG_BCM2837 | 
| 134 | #include <pexpert/arm64/BCM2837.h> | 
| 135 |  | 
| 136 | #define MAX_L2_CLINE                   6 | 
| 137 | #define MAX_CPUS                       4 | 
| 138 | #define MAX_CPU_CLUSTERS               1 | 
| 139 |  | 
| 140 | #define CORE_NCTRS                     8 /* Placeholder; KPC is not enabled for this target */ | 
| 141 | #endif  /* ARM64_BOARD_CONFIG_BCM2837 */ | 
| 142 |  | 
| 143 | #ifdef ARM64_BOARD_CONFIG_VMAPPLE | 
| 144 | #include <pexpert/arm64/VMAPPLE.h> | 
| 145 |  | 
| 146 | #define MAX_L2_CLINE                   7 | 
| 147 | #define MAX_CPUS                       32 /* limited by CPU copy window size and cpu checkin mask */ | 
| 148 | #define MAX_CPU_CLUSTERS               1 | 
| 149 |  | 
| 150 | #define CORE_NCTRS                     2 | 
| 151 |  | 
| 152 | #define USE_APPLEARMSMP                1 | 
| 153 |  | 
| 154 | #if XNU_TARGET_OS_WATCH | 
| 155 | #define PREFER_ARM64_32_BINARIES       1 | 
| 156 | #endif | 
| 157 |  | 
| 158 | #endif  /* ARM64_BOARD_CONFIG_VMAPPLE */ | 
| 159 |  | 
| 160 |  | 
| 161 | #ifndef HAS_UNCORE_CTRS | 
| 162 | #undef UNCORE_VERSION | 
| 163 | #undef UNCORE_PER_CLUSTER | 
| 164 | #undef UNCORE_NCTRS | 
| 165 | #endif | 
| 166 |  | 
| 167 | #if MAX_CPU_CLUSTERS == 1 | 
| 168 | #undef __ARM_AMP__ | 
| 169 | #endif | 
| 170 |  | 
| 171 | #ifndef MAX_CPU_CLUSTER_PHY_ID | 
| 172 | #define MAX_CPU_CLUSTER_PHY_ID (MAX_CPU_CLUSTERS - 1) | 
| 173 | #endif | 
| 174 |  | 
| 175 | #ifdef PREFER_ARM64_32_BINARIES | 
| 176 | #define PREFERRED_USER_CPU_TYPE CPU_TYPE_ARM64_32 | 
| 177 | #define PREFERRED_USER_CPU_SUBTYPE CPU_SUBTYPE_ARM64_32_V8 | 
| 178 | #endif | 
| 179 |  | 
| 180 |  | 
| 181 | /* | 
| 182 |  * Some platforms have very expensive timebase routines.  An optimization | 
| 183 |  * is to avoid switching timers on kernel exit/entry, which results in all | 
| 184 |  * time billed to the system timer.  However, when exposed to userspace, it's | 
| 185 |  * reported as user time to indicate that work was done on behalf of | 
| 186 |  * userspace. | 
| 187 |  */ | 
| 188 |  | 
| 189 | #if CONFIG_SKIP_PRECISE_USER_KERNEL_TIME | 
| 190 | #define PRECISE_USER_KERNEL_TIME HAS_FAST_CNTVCT | 
| 191 | #else /* CONFIG_SKIP_PRECISE_USER_KERNEL_TIME */ | 
| 192 | #define PRECISE_USER_KERNEL_TIME 1 | 
| 193 | #endif /* !CONFIG_SKIP_PRECISE_USER_KERNEL_TIME */ | 
| 194 |  | 
| 195 | /** | 
| 196 |  * On supported hardware, debuggable builds make the HID bits read-only | 
| 197 |  * without locking them.  This lets people manually modify HID bits while | 
| 198 |  * debugging, since they can use a debugging tool to first reset the HID | 
| 199 |  * bits back to read/write.  However it will still catch xnu changes that | 
| 200 |  * accidentally write to HID bits after they've been made read-only. | 
| 201 |  */ | 
| 202 |  | 
| 203 | #endif /* ! _PEXPERT_ARM_BOARD_CONFIG_H */ | 
| 204 |  |