1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 /***************************************************************************
4 * Copyright (C) 2011 by Julius Baxter *
5 * julius@opencores.org *
7 * Copyright (C) 2013 by Marek Czerski *
8 * ma.czerski@gmail.com *
10 * Copyright (C) 2013 by Franck Jullien *
11 * elec4fun@gmail.com *
13 ***************************************************************************/
15 #ifndef OPENOCD_TARGET_OPENRISC_OR1K_H
16 #define OPENOCD_TARGET_OPENRISC_OR1K_H
22 #include <target/target.h>
24 /* SPR groups start address */
25 #define GROUP0 (0 << 11)
26 #define GROUP1 (1 << 11)
27 #define GROUP2 (2 << 11)
28 #define GROUP3 (3 << 11)
29 #define GROUP4 (4 << 11)
30 #define GROUP5 (5 << 11)
31 #define GROUP6 (6 << 11)
32 #define GROUP7 (7 << 11)
33 #define GROUP8 (8 << 11)
34 #define GROUP9 (9 << 11)
35 #define GROUP10 (10 << 11)
80 int or1k_jtag_module_selected;
81 uint8_t *current_reg_idx;
82 struct or1k_tap_ip *tap_ip;
83 struct or1k_du *du_core;
84 struct target *target;
88 struct or1k_jtag jtag;
89 struct reg_cache *core_cache;
90 uint32_t core_regs[OR1KNUMCOREREGS];
92 struct or1k_core_reg *arch_info;
95 static inline struct or1k_common *
96 target_to_or1k(struct target *target)
98 return (struct or1k_common *)target->arch_info;
101 struct or1k_core_reg {
103 uint32_t list_num; /* Index in register cache */
104 uint32_t spr_num; /* Number in architecture's SPR space */
105 struct target *target;
106 struct or1k_common *or1k_common;
107 const char *feature; /* feature name in XML tdesc file */
108 const char *group; /* register group in XML tdesc file */
111 struct or1k_core_reg_init {
113 uint32_t spr_num; /* Number in architecture's SPR space */
114 const char *feature; /* feature name in XML tdesc file */
115 const char *group; /* register group in XML tdesc file */
118 /* ORBIS32 Trap instruction */
119 #define OR1K_TRAP_INSTR 0x21000001
121 enum or1k_debug_reg_nums {
122 OR1K_DEBUG_REG_DMR1 = 0,
124 OR1K_DEBUG_REG_DCWR0,
125 OR1K_DEBUG_REG_DCWR1,
131 #define NO_SINGLE_STEP 0
132 #define SINGLE_STEP 1
134 /* OR1K Debug registers and bits needed for resuming */
135 #define OR1K_DEBUG_REG_BASE GROUP6 /* Debug registers Base address */
136 #define OR1K_DMR1_CPU_REG_ADD (OR1K_DEBUG_REG_BASE + 16) /* Debug Mode Register 1 0x3010 */
137 #define OR1K_DMR1_ST 0x00400000 /* Single-step trace */
138 #define OR1K_DMR1_BT 0x00800000 /* Branch trace */
139 #define OR1K_DMR2_WGB 0x003ff000 /* Watchpoints generating breakpoint */
140 #define OR1K_DSR_TE 0x00002000 /* Trap exception */
142 /* OR1K Instruction cache registers needed for invalidating instruction
143 * memory during adding and removing breakpoints.
145 #define OR1K_ICBIR_CPU_REG_ADD ((4 << 11) + 2) /* IC Block Invalidate Register 0x2002 */
147 #endif /* OPENOCD_TARGET_OPENRISC_OR1K_H */