summaryrefslogtreecommitdiff
path: root/arch/arm/include/asm/armv8/cpu.h
blob: e906fdf1bf175e92e5330f3209ad42163d35db90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Copyright 2018 NXP
 */

#define MIDR_PARTNUM_CORTEX_A35		0xD04
#define MIDR_PARTNUM_CORTEX_A53		0xD03
#define MIDR_PARTNUM_CORTEX_A55		0xD05
#define MIDR_PARTNUM_CORTEX_A57		0xD07
#define MIDR_PARTNUM_CORTEX_A72		0xD08
#define MIDR_PARTNUM_CORTEX_A73		0xD09
#define MIDR_PARTNUM_CORTEX_A75		0xD0A
#define MIDR_PARTNUM_CORTEX_A76		0xD0B
#define MIDR_PARTNUM_SHIFT		0x4
#define MIDR_PARTNUM_MASK		(0xFFF << MIDR_PARTNUM_SHIFT)

static inline unsigned int read_midr(void)
{
	unsigned long val;

	asm volatile("mrs %0, midr_el1" : "=r" (val));

	return val;
}

#define is_cortex_a(__n)					\
	static inline int is_cortex_a##__n(void)		\
	{							\
		unsigned int midr = read_midr();		\
		midr &= MIDR_PARTNUM_MASK;			\
		midr >>= MIDR_PARTNUM_SHIFT;			\
		return midr == MIDR_PARTNUM_CORTEX_A##__n;	\
	}

is_cortex_a(35)
is_cortex_a(53)
is_cortex_a(55)
is_cortex_a(57)
is_cortex_a(72)
is_cortex_a(73)
is_cortex_a(75)
is_cortex_a(76)