Page MenuHomePhabricator

MPIDR_CPU/CLUSTER_ID macros are not MT-cores aware
Closed, ResolvedPublic

Description

On cores that have the MPIDR.MT bit set,

  • affinity level 0 is the thread ID
  • affinity level 1 is the CPU ID
  • affinity level 2 is the cluster ID

Thus, on these cores, the MPIDR_CPU_ID (resp. MPIDR_CLUSTER_ID) macro should extract bits 8 to 15 (resp. 16 to 23). At the moment, these macros do not inspect the MPIDR.MT bit (see their definitions) so they will not work as intended on multi-threaded cores.

This can be easily reproduced on the AEM FVP (revC), which has the MPIDR.MT bit set for all cores.

Here is a patch that modifies the template multi-core test to print the output of these macros for each core. This incorrectly shows:

[cpu 0x0000] cluster ID: 0
[cpu 0x0000] CPU ID: 0
[cpu 0x0100] MPID=0x81000100
[cpu 0x0100] cluster ID: 1
[cpu 0x0100] CPU ID: 0
[cpu 0x0200] MPID=0x81000200
[cpu 0x0200] cluster ID: 2
[cpu 0x0200] CPU ID: 0
[cpu 0x0300] MPID=0x81000300
[cpu 0x0300] cluster ID: 3
[cpu 0x0300] CPU ID: 0
[cpu 0x0000] MPID=0x81010000
[cpu 0x0000] cluster ID: 0
[cpu 0x0000] CPU ID: 0
[cpu 0x0100] MPID=0x81010100
[cpu 0x0100] cluster ID: 1
[cpu 0x0100] CPU ID: 0
[cpu 0x0200] MPID=0x81010200
[cpu 0x0200] cluster ID: 2
[cpu 0x0200] CPU ID: 0
[cpu 0x0300] MPID=0x81010300
[cpu 0x0300] cluster ID: 3
[cpu 0x0300] CPU ID: 0

Event Timeline

sandrine-bailleux-arm updated the task description. (Show Details)
sandrine-bailleux-arm changed the visibility from "sandrine-bailleux-arm (Sandrine Bailleux)" to "All Users".
sandrine-bailleux-arm changed the edit policy from "sandrine-bailleux-arm (Sandrine Bailleux)" to "All Users".
sandrine-bailleux-arm closed this task as Resolved.Dec 13 2018, 1:14 PM

The MPIDR_CPU/CLUSTER_ID macros have been removed by this patch.