1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * Copyright (C) 2015 Altera Corporation
4*4882a593Smuzhiyun * Copyright (C) 2011 Tobias Klauser <tklauser@distanz.ch>
5*4882a593Smuzhiyun *
6*4882a593Smuzhiyun * Based on the code posted by Kazuyasu on the Altera Forum at:
7*4882a593Smuzhiyun * http://www.alteraforum.com/forum/showpost.php?p=77003&postcount=20
8*4882a593Smuzhiyun */
9*4882a593Smuzhiyun
10*4882a593Smuzhiyun #ifndef _ASM_NIOS2_KGDB_H
11*4882a593Smuzhiyun #define _ASM_NIOS2_KGDB_H
12*4882a593Smuzhiyun
13*4882a593Smuzhiyun #define CACHE_FLUSH_IS_SAFE 1
14*4882a593Smuzhiyun #define BUFMAX 2048
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun enum regnames {
17*4882a593Smuzhiyun GDB_R0 = 0,
18*4882a593Smuzhiyun GDB_AT,
19*4882a593Smuzhiyun GDB_R2,
20*4882a593Smuzhiyun GDB_R3,
21*4882a593Smuzhiyun GDB_R4,
22*4882a593Smuzhiyun GDB_R5,
23*4882a593Smuzhiyun GDB_R6,
24*4882a593Smuzhiyun GDB_R7,
25*4882a593Smuzhiyun GDB_R8,
26*4882a593Smuzhiyun GDB_R9,
27*4882a593Smuzhiyun GDB_R10,
28*4882a593Smuzhiyun GDB_R11,
29*4882a593Smuzhiyun GDB_R12,
30*4882a593Smuzhiyun GDB_R13,
31*4882a593Smuzhiyun GDB_R14,
32*4882a593Smuzhiyun GDB_R15,
33*4882a593Smuzhiyun GDB_R16,
34*4882a593Smuzhiyun GDB_R17,
35*4882a593Smuzhiyun GDB_R18,
36*4882a593Smuzhiyun GDB_R19,
37*4882a593Smuzhiyun GDB_R20,
38*4882a593Smuzhiyun GDB_R21,
39*4882a593Smuzhiyun GDB_R22,
40*4882a593Smuzhiyun GDB_R23,
41*4882a593Smuzhiyun GDB_ET,
42*4882a593Smuzhiyun GDB_BT,
43*4882a593Smuzhiyun GDB_GP,
44*4882a593Smuzhiyun GDB_SP,
45*4882a593Smuzhiyun GDB_FP,
46*4882a593Smuzhiyun GDB_EA,
47*4882a593Smuzhiyun GDB_BA,
48*4882a593Smuzhiyun GDB_RA,
49*4882a593Smuzhiyun GDB_PC,
50*4882a593Smuzhiyun GDB_STATUS,
51*4882a593Smuzhiyun GDB_ESTATUS,
52*4882a593Smuzhiyun GDB_BSTATUS,
53*4882a593Smuzhiyun GDB_IENABLE,
54*4882a593Smuzhiyun GDB_IPENDING,
55*4882a593Smuzhiyun GDB_CPUID,
56*4882a593Smuzhiyun GDB_CTL6,
57*4882a593Smuzhiyun GDB_EXCEPTION,
58*4882a593Smuzhiyun GDB_PTEADDR,
59*4882a593Smuzhiyun GDB_TLBACC,
60*4882a593Smuzhiyun GDB_TLBMISC,
61*4882a593Smuzhiyun GDB_ECCINJ,
62*4882a593Smuzhiyun GDB_BADADDR,
63*4882a593Smuzhiyun GDB_CONFIG,
64*4882a593Smuzhiyun GDB_MPUBASE,
65*4882a593Smuzhiyun GDB_MPUACC,
66*4882a593Smuzhiyun /* do not change the last entry or anything below! */
67*4882a593Smuzhiyun GDB_NUMREGBYTES /* number of registers */
68*4882a593Smuzhiyun };
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun #define GDB_SIZEOF_REG sizeof(u32)
71*4882a593Smuzhiyun #define DBG_MAX_REG_NUM (49)
72*4882a593Smuzhiyun #define NUMREGBYTES (DBG_MAX_REG_NUM * sizeof(GDB_SIZEOF_REG))
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun #define BREAK_INSTR_SIZE 4
arch_kgdb_breakpoint(void)75*4882a593Smuzhiyun static inline void arch_kgdb_breakpoint(void)
76*4882a593Smuzhiyun {
77*4882a593Smuzhiyun __asm__ __volatile__("trap 30\n");
78*4882a593Smuzhiyun }
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun #endif /* _ASM_NIOS2_KGDB_H */
81