esirisc: support eSi-RISC targets
[openocd.git] / src / target / esirisc_jtag.h
1 /***************************************************************************
2 * Copyright (C) 2018 by Square, Inc. *
3 * Steven Stallion <stallion@squareup.com> *
4 * James Zhao <hjz@squareup.com> *
5 * *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
18 ***************************************************************************/
19
20 #ifndef OPENOCD_TARGET_ESIRISC_JTAG_H
21 #define OPENOCD_TARGET_ESIRISC_JTAG_H
22
23 #include <jtag/jtag.h>
24
25 /* TAP Instructions */
26 #define INSTR_IDCODE 0x8
27 #define INSTR_DEBUG 0x9
28 #define INSTR_BYPASS 0xf
29 #define INSTR_LENGTH 4
30
31 /* eSi-Debug Commands */
32 #define DEBUG_NOP 0x00
33 #define DEBUG_READ_BYTE 0x10
34 #define DEBUG_READ_HWORD 0x20
35 #define DEBUG_READ_WORD 0x30
36 #define DEBUG_WRITE_BYTE 0x60
37 #define DEBUG_WRITE_HWORD 0x70
38 #define DEBUG_WRITE_WORD 0x80
39 #define DEBUG_READ_REG 0xb0
40 #define DEBUG_WRITE_REG 0xc0
41 #define DEBUG_READ_CSR 0xd0
42 #define DEBUG_WRITE_CSR 0xe0
43 #define DEBUG_ENABLE_DEBUG 0xf0
44 #define DEBUG_DISABLE_DEBUG 0xf2
45 #define DEBUG_ASSERT_RESET 0xf4
46 #define DEBUG_DEASSERT_RESET 0xf6
47 #define DEBUG_BREAK 0xf8
48 #define DEBUG_CONTINUE 0xfa
49 #define DEBUG_FLUSH_CACHES 0xfc
50
51 /* Exception IDs */
52 #define EID_OVERFLOW 0x3d
53 #define EID_CANT_DEBUG 0x3e
54 #define EID_NONE 0x3f
55
56 /* Byte Stuffing */
57 #define STUFF_MARKER 0x55
58 #define PAD_BYTE 0xaa
59
60 struct esirisc_jtag {
61 struct jtag_tap *tap;
62 uint8_t status;
63 };
64
65 bool esirisc_jtag_is_debug_active(struct esirisc_jtag *jtag_info);
66 bool esirisc_jtag_is_stopped(struct esirisc_jtag *jtag_info);
67 uint8_t esirisc_jtag_get_eid(struct esirisc_jtag *jtag_info);
68
69 int esirisc_jtag_read_byte(struct esirisc_jtag *jtag_info,
70 uint32_t address, uint8_t *data);
71 int esirisc_jtag_read_hword(struct esirisc_jtag *jtag_info,
72 uint32_t address, uint16_t *data);
73 int esirisc_jtag_read_word(struct esirisc_jtag *jtag_info,
74 uint32_t address, uint32_t *data);
75
76 int esirisc_jtag_write_byte(struct esirisc_jtag *jtag_info,
77 uint32_t address, uint8_t data);
78 int esirisc_jtag_write_hword(struct esirisc_jtag *jtag_info,
79 uint32_t address, uint16_t data);
80 int esirisc_jtag_write_word(struct esirisc_jtag *jtag_info,
81 uint32_t address, uint32_t data);
82
83 int esirisc_jtag_read_reg(struct esirisc_jtag *jtag_info,
84 uint8_t reg, uint32_t *data);
85 int esirisc_jtag_write_reg(struct esirisc_jtag *jtag_info,
86 uint8_t reg, uint32_t data);
87
88 int esirisc_jtag_read_csr(struct esirisc_jtag *jtag_info,
89 uint8_t bank, uint8_t csr, uint32_t *data);
90 int esirisc_jtag_write_csr(struct esirisc_jtag *jtag_info,
91 uint8_t bank, uint8_t csr, uint32_t data);
92
93 int esirisc_jtag_enable_debug(struct esirisc_jtag *jtag_info);
94 int esirisc_jtag_disable_debug(struct esirisc_jtag *jtag_info);
95
96 int esirisc_jtag_assert_reset(struct esirisc_jtag *jtag_info);
97 int esirisc_jtag_deassert_reset(struct esirisc_jtag *jtag_info);
98
99 int esirisc_jtag_break(struct esirisc_jtag *jtag_info);
100 int esirisc_jtag_continue(struct esirisc_jtag *jtag_info);
101
102 int esirisc_jtag_flush_caches(struct esirisc_jtag *jtag_info);
103
104 #endif /* OPENOCD_TARGET_ESIRISC_JTAG_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)