AArch64 Multiprocessor Affinity Register (MPIDR_EL1, read-only).
More...
#include <utils.h>
|
|
uint64_t | raw |
| | Raw 64-bit register value.
|
| |
|
struct { | |
| |
|
uint32_t aff0: 8 | |
| | [7:0] Aff0: Thread/core ID within a cluster. On most simple systems this is the linear core number. When MT==1, this identifies the thread within a core instead.
|
| |
|
uint32_t aff1: 8 | |
| | [15:8] Aff1: Cluster ID. Groups of cores sharing L2 cache or a cluster block typically share the same Aff1.
|
| |
|
uint32_t aff2: 8 | |
| | [23:16] Aff2: Higher-level cluster or socket ID.
|
| |
|
bool mt: 1 | |
| | [24] MT: Multithreading. When 1, Aff0 identifies a thread within a core rather than a core within a cluster.
|
| |
|
uint32_t res0_29_25: 5 | |
| | [29:25] Reserved.
|
| |
|
bool uniprocessor: 1 | |
| | [30] U: Uniprocessor flag. Set to 1 if the implementation is a single PE with no affinity structure.
|
| |
|
uint32_t res1: 1 | |
| | [31] RES1: Always reads as 1 at EL1.
|
| |
|
uint32_t aff3: 8 | |
| | [39:32] Aff3: Highest-level affinity (multi-socket or NUMA node). Zero on most embedded/server implementations.
|
| |
|
uint32_t res0_63_40: 24 | |
| | [63:40] RES1 / implementation defined. Mask before use.
|
| |
| }; | | |
| |
AArch64 Multiprocessor Affinity Register (MPIDR_EL1, read-only).
Identifies the PE within a multiprocessor system. In a simple single-cluster system (e.g. QEMU virt), Aff1/Aff2/Aff3 are 0 and Aff0 is the core number.
Compare AffinityValue (Aff3.Aff2.Aff1.Aff0) against GICR_TYPER.AffinityValue to find the Redistributor frame belonging to this PE.
Note:
- This is a system register, not a memory-mapped register.
- Read via
mrs <Xn>, mpidr_el1.
- Bits [63:40] are RES1 or implementation-defined; mask them before use.
The documentation for this union was generated from the following file: