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