armv7: Add CPU & MP primitive instructions

To configure multi-processors, we need the intrinsic functions to get core ID,
put core into idle state, and to wake up cores.

Change-Id: I87a62dab6efd6c8bb0c8e46373da7c7eb7b16b35
Signed-off-by: Hung-Te Lin <hungte@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/65112
Reviewed-on: http://review.coreboot.org/4444
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
This commit is contained in:
Hung-Te Lin 2013-08-08 11:27:27 +08:00 committed by Patrick Georgi
parent 792b621ac0
commit 93951f4ed8
1 changed files with 36 additions and 0 deletions

View File

@ -48,4 +48,40 @@ struct cpuinfo_arm {
#endif #endif
/* Primitives for CPU and MP cores. */
/* read Main Id register (MIDR) */
inline static uint32_t read_midr(void)
{
uint32_t value;
asm volatile ("mrc p15, 0, %0, c0, c0, 0" : "=r"(value));
return value;
}
/* read Multiprocessor Affinity Register (MPIDR) */
inline static uint32_t read_mpidr(void)
{
uint32_t value;
asm volatile ("mrc p15, 0, %0, c0, c0, 5" : "=r"(value));
return value;
}
/* wait for interrupt. */
inline static void wfi(void)
{
asm volatile ("wfi" : : : "memory");
}
/* wait for event. */
inline static void wfe(void)
{
asm volatile ("wfe");
}
/* set event (to bring up cores in WFE state). */
inline static void sev(void)
{
asm volatile ("sev");
}
#endif /* __ARCH_CPU_H__ */ #endif /* __ARCH_CPU_H__ */