blob: aa1470bb72dba4d9048c480ef8540a4055b38489 [file] [log] [blame]
Peng Fanb3415342018-10-18 14:28:17 +02001/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * Copyright 2018 NXP
4 */
5
Marek Vasut188e7f22025-01-01 20:19:04 +01006#define MIDR_PARTNUM_CORTEX_A35 0xD04
7#define MIDR_PARTNUM_CORTEX_A53 0xD03
8#define MIDR_PARTNUM_CORTEX_A72 0xD08
9#define MIDR_PARTNUM_SHIFT 0x4
10#define MIDR_PARTNUM_MASK (0xFFF << MIDR_PARTNUM_SHIFT)
Peng Fanb3415342018-10-18 14:28:17 +020011
12static inline unsigned int read_midr(void)
13{
14 unsigned long val;
15
16 asm volatile("mrs %0, midr_el1" : "=r" (val));
17
18 return val;
19}
20
Marek Vasut188e7f22025-01-01 20:19:04 +010021#define is_cortex_a(__n) \
22 static inline int is_cortex_a##__n(void) \
23 { \
24 unsigned int midr = read_midr(); \
25 midr &= MIDR_PARTNUM_MASK; \
26 midr >>= MIDR_PARTNUM_SHIFT; \
27 return midr == MIDR_PARTNUM_CORTEX_A##__n; \
28 }
29
30is_cortex_a(35)
31is_cortex_a(53)
32is_cortex_a(72)