xtensa: update XDM register map for TRAX support
[openocd.git] / src / target / xtensa / xtensa_regs.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2
3 /***************************************************************************
4 * Generic Xtensa target API for OpenOCD *
5 * Copyright (C) 2020-2022 Cadence Design Systems, Inc. *
6 * Copyright (C) 2016-2019 Espressif Systems Ltd. *
7 * Author: Angus Gratton gus@projectgus.com *
8 ***************************************************************************/
9
10 #ifndef OPENOCD_TARGET_XTENSA_REGS_H
11 #define OPENOCD_TARGET_XTENSA_REGS_H
12
13 struct reg_arch_type;
14
15 enum xtensa_reg_id {
16 XT_REG_IDX_PC = 0,
17 XT_REG_IDX_AR0,
18 XT_REG_IDX_ARFIRST = XT_REG_IDX_AR0,
19 XT_REG_IDX_AR1,
20 XT_REG_IDX_AR2,
21 XT_REG_IDX_AR3,
22 XT_REG_IDX_AR4,
23 XT_REG_IDX_AR5,
24 XT_REG_IDX_AR6,
25 XT_REG_IDX_AR7,
26 XT_REG_IDX_AR8,
27 XT_REG_IDX_AR9,
28 XT_REG_IDX_AR10,
29 XT_REG_IDX_AR11,
30 XT_REG_IDX_AR12,
31 XT_REG_IDX_AR13,
32 XT_REG_IDX_AR14,
33 XT_REG_IDX_AR15,
34 XT_REG_IDX_ARLAST = 64, /* Max 64 ARs */
35 XT_REG_IDX_WINDOWBASE,
36 XT_REG_IDX_WINDOWSTART,
37 XT_REG_IDX_PS,
38 XT_REG_IDX_IBREAKENABLE,
39 XT_REG_IDX_DDR,
40 XT_REG_IDX_IBREAKA0,
41 XT_REG_IDX_IBREAKA1,
42 XT_REG_IDX_DBREAKA0,
43 XT_REG_IDX_DBREAKA1,
44 XT_REG_IDX_DBREAKC0,
45 XT_REG_IDX_DBREAKC1,
46 XT_REG_IDX_CPENABLE,
47 XT_REG_IDX_EXCCAUSE,
48 XT_REG_IDX_DEBUGCAUSE,
49 XT_REG_IDX_ICOUNT,
50 XT_REG_IDX_ICOUNTLEVEL,
51 XT_REG_IDX_A0,
52 XT_REG_IDX_A1,
53 XT_REG_IDX_A2,
54 XT_REG_IDX_A3,
55 XT_REG_IDX_A4,
56 XT_REG_IDX_A5,
57 XT_REG_IDX_A6,
58 XT_REG_IDX_A7,
59 XT_REG_IDX_A8,
60 XT_REG_IDX_A9,
61 XT_REG_IDX_A10,
62 XT_REG_IDX_A11,
63 XT_REG_IDX_A12,
64 XT_REG_IDX_A13,
65 XT_REG_IDX_A14,
66 XT_REG_IDX_A15,
67 XT_NUM_REGS
68 };
69
70 typedef uint32_t xtensa_reg_val_t;
71
72 #define XT_NUM_A_REGS 16
73
74 enum xtensa_reg_type {
75 XT_REG_GENERAL = 0, /* General-purpose register; part of the windowed register set */
76 XT_REG_USER = 1, /* User register, needs RUR to read */
77 XT_REG_SPECIAL = 2, /* Special register, needs RSR to read */
78 XT_REG_DEBUG = 3, /* Register used for the debug interface. Don't mess with this. */
79 XT_REG_RELGEN = 4, /* Relative general address. Points to the absolute addresses plus the window
80 * index */
81 XT_REG_FR = 5, /* Floating-point register */
82 XT_REG_TIE = 6, /* TIE (custom) register */
83 XT_REG_OTHER = 7, /* Other (typically legacy) register */
84 XT_REG_TYPE_NUM,
85
86 /* enum names must be one of the above types + _VAL or _MASK */
87 XT_REG_GENERAL_MASK = 0xFFC0,
88 XT_REG_GENERAL_VAL = 0x0100,
89 XT_REG_USER_MASK = 0xFF00,
90 XT_REG_USER_VAL = 0x0300,
91 XT_REG_SPECIAL_MASK = 0xFF00,
92 XT_REG_SPECIAL_VAL = 0x0200,
93 XT_REG_DEBUG_MASK = 0xFF00,
94 XT_REG_DEBUG_VAL = 0x0200,
95 XT_REG_RELGEN_MASK = 0xFFE0,
96 XT_REG_RELGEN_VAL = 0x0000,
97 XT_REG_FR_MASK = 0xFFF0,
98 XT_REG_FR_VAL = 0x0030,
99 XT_REG_TIE_MASK = 0xF000,
100 XT_REG_TIE_VAL = 0xF000, /* unused */
101 XT_REG_OTHER_MASK = 0xFFFF,
102 XT_REG_OTHER_VAL = 0xF000, /* unused */
103
104 XT_REG_INDEX_MASK = 0x00FF
105 };
106
107 enum xtensa_reg_flags {
108 XT_REGF_NOREAD = 0x01, /* Register is write-only */
109 XT_REGF_COPROC0 = 0x02, /* Can't be read if coproc0 isn't enabled */
110 XT_REGF_MASK = 0x03
111 };
112
113 struct xtensa_reg_desc {
114 const char *name;
115 bool exist;
116 unsigned int reg_num; /* ISA register num (meaning depends on register type) */
117 unsigned int dbreg_num; /* Debugger-visible register num (reg type encoded) */
118 enum xtensa_reg_type type;
119 enum xtensa_reg_flags flags;
120 };
121
122 #define _XT_MK_DBREGN(reg_num, reg_type) \
123 ((reg_type ## _VAL) | (reg_num))
124
125 #define _XT_MK_DBREGN_MASK(reg_num, reg_mask) \
126 ((reg_mask) | (reg_num))
127
128 #define XT_MK_REG_DESC(n, r, t, f) \
129 { .name = (n), .exist = false, .reg_num = (r), \
130 .dbreg_num = _XT_MK_DBREGN(r, t), .type = (t), \
131 .flags = (f) }
132
133 extern struct xtensa_reg_desc xtensa_regs[XT_NUM_REGS];
134
135 #endif /* OPENOCD_TARGET_XTENSA_REGS_H */

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)