1/*
2 * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 */
6
7#include <armv/machine.h>
8#include <types.h>
9
10/* we only care about the affinity bits */
11#define MPIDR_MASK (0xff00ffffff)
12
13word_t read_cpuid_mpidr(void)
14{
15    uint64_t val;
16    asm volatile("mrs %x0, mpidr_el1" : "=r"(val) :: "cc");
17    return val & MPIDR_MASK;
18}
19
20#define CURRENTEL_EL2           (2 << 2)
21word_t is_hyp_mode(void)
22{
23    uint32_t val;
24    asm volatile("mrs %x0, CurrentEL" : "=r"(val) :: "cc");
25    return (val == CURRENTEL_EL2);
26}
27
28uint32_t read_cpuid_id(void)
29{
30    uint32_t val;
31    asm volatile("mrs %x0, midr_el1" : "=r"(val) :: "cc");
32    return val;
33}
34