1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * Copyright (C) 2011 Tobias Klauser <tklauser@distanz.ch>
4  */
5 
6 #ifndef _ASM_NIOS2_REGISTERS_H
7 #define _ASM_NIOS2_REGISTERS_H
8 
9 #ifndef __ASSEMBLY__
10 #include <asm/cpuinfo.h>
11 #endif
12 
13 /* control register numbers */
14 #define CTL_FSTATUS	0
15 #define CTL_ESTATUS	1
16 #define CTL_BSTATUS	2
17 #define CTL_IENABLE	3
18 #define CTL_IPENDING	4
19 #define CTL_CPUID	5
20 #define CTL_RSV1	6
21 #define CTL_EXCEPTION	7
22 #define CTL_PTEADDR	8
23 #define CTL_TLBACC	9
24 #define CTL_TLBMISC	10
25 #define CTL_RSV2	11
26 #define CTL_BADADDR	12
27 #define CTL_CONFIG	13
28 #define CTL_MPUBASE	14
29 #define CTL_MPUACC	15
30 
31 /* access control registers using GCC builtins */
32 #define RDCTL(r)	__builtin_rdctl(r)
33 #define WRCTL(r, v)	__builtin_wrctl(r, v)
34 
35 /* status register bits */
36 #define STATUS_PIE	(1 << 0)	/* processor interrupt enable */
37 #define STATUS_U	(1 << 1)	/* user mode */
38 #define STATUS_EH	(1 << 2)	/* Exception mode */
39 
40 /* estatus register bits */
41 #define ESTATUS_EPIE	(1 << 0)	/* processor interrupt enable */
42 #define ESTATUS_EU	(1 << 1)	/* user mode */
43 #define ESTATUS_EH	(1 << 2)	/* Exception mode */
44 
45 /* tlbmisc register bits */
46 #define TLBMISC_PID_SHIFT	4
47 #ifndef __ASSEMBLY__
48 #define TLBMISC_PID_MASK	((1UL << cpuinfo.tlb_pid_num_bits) - 1)
49 #endif
50 #define TLBMISC_WAY_MASK	0xf
51 #define TLBMISC_WAY_SHIFT	20
52 
53 #define TLBMISC_PID	(TLBMISC_PID_MASK << TLBMISC_PID_SHIFT)	/* TLB PID */
54 #define TLBMISC_WE	(1 << 18)	/* TLB write enable */
55 #define TLBMISC_RD	(1 << 19)	/* TLB read */
56 #define TLBMISC_WAY	(TLBMISC_WAY_MASK << TLBMISC_WAY_SHIFT) /* TLB way */
57 
58 #endif /* _ASM_NIOS2_REGISTERS_H */
59