blob: e906fdf1bf175e92e5330f3209ad42163d35db90 [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
Peter Robinson152c4192025-03-16 14:59:52 +00008#define MIDR_PARTNUM_CORTEX_A55 0xD05
Marek Vasut47c44922025-01-01 20:19:05 +01009#define MIDR_PARTNUM_CORTEX_A57 0xD07
Marek Vasut188e7f22025-01-01 20:19:04 +010010#define MIDR_PARTNUM_CORTEX_A72 0xD08
Peter Robinson152c4192025-03-16 14:59:52 +000011#define MIDR_PARTNUM_CORTEX_A73 0xD09
12#define MIDR_PARTNUM_CORTEX_A75 0xD0A
Marek Vasut47c44922025-01-01 20:19:05 +010013#define MIDR_PARTNUM_CORTEX_A76 0xD0B
Marek Vasut188e7f22025-01-01 20:19:04 +010014#define MIDR_PARTNUM_SHIFT 0x4
15#define MIDR_PARTNUM_MASK (0xFFF << MIDR_PARTNUM_SHIFT)
Peng Fanb3415342018-10-18 14:28:17 +020016
17static inline unsigned int read_midr(void)
18{
19 unsigned long val;
20
21 asm volatile("mrs %0, midr_el1" : "=r" (val));
22
23 return val;
24}
25
Marek Vasut188e7f22025-01-01 20:19:04 +010026#define is_cortex_a(__n) \
27 static inline int is_cortex_a##__n(void) \
28 { \
29 unsigned int midr = read_midr(); \
30 midr &= MIDR_PARTNUM_MASK; \
31 midr >>= MIDR_PARTNUM_SHIFT; \
32 return midr == MIDR_PARTNUM_CORTEX_A##__n; \
33 }
34
35is_cortex_a(35)
36is_cortex_a(53)
Peter Robinson152c4192025-03-16 14:59:52 +000037is_cortex_a(55)
Marek Vasut47c44922025-01-01 20:19:05 +010038is_cortex_a(57)
Marek Vasut188e7f22025-01-01 20:19:04 +010039is_cortex_a(72)
Peter Robinson152c4192025-03-16 14:59:52 +000040is_cortex_a(73)
41is_cortex_a(75)
Marek Vasut47c44922025-01-01 20:19:05 +010042is_cortex_a(76)