OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-6.8/] [gdb/] [or1k-jtag.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1739 jeremybenn
/* Remote debugging interface for OpenRISC 1000 JTAG debugging protocol.
2
 
3
   Copyright (C) 2001 Chris Ziomkowski, chris@asics.ws
4
   Copyright 2008 Embecosm Limited
5
 
6
   Areas noted by (CZ) were modified by Chris Ziomkowski <chris@asics.ws>
7
   Contributor Jeremy Bennett <jeremy.bennett@embecosm.com>
8
 
9
   This file is part of GDB.
10
 
11
   This program is free software; you can redistribute it and/or modify it
12
   under the terms of the GNU General Public License as published by the Free
13
   Software Foundation; either version 3 of the License, or (at your option)
14
   any later version.
15
 
16
   This program is distributed in the hope that it will be useful, but WITHOUT
17
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18
   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
19
   more details.
20
 
21
   You should have received a copy of the GNU General Public License along
22
   with this program.  If not, see <http://www.gnu.org/licenses/>.
23
*/
24
 
25
/*!---------------------------------------------------------------------------
26
   Updated for GDB 6.8 by Jeremy Bennett. All code converted to ANSI C style
27
   and in general to GDB format. All global OpenRISC specific functions and
28
   variables should now have a prefix of or1k_ or OR1K_.
29
 
30
   JTAG connects to or1k target ops. See or1k-tdep.c. This header is also used
31
   by Or1ksim, the OpenRISC 1000 architectural simulator.
32
   --------------------------------------------------------------------------*/
33
 
34
#ifndef OR1K_JTAG__H
35
#define OR1K_JTAG__H
36
 
37
#include <sys/types.h>
38
#include <inttypes.h>
39
 
40
/*! JTAG instruction size. See JTAG documentation about these.  */
41
#define OR1K_JI_SIZE (4)
42
 
43
/*! JTAG instructions. See JTAG documentation about these.  */
44
enum or1k_jtag_instr {
45
  OR1K_JI_CHAIN_SELECT = 3,
46
  OR1K_JI_DEBUG        = 8
47
};
48
 
49
/*! Scan chain size in bits.  */
50
#define OR1K_SC_SIZE (4)
51
 
52
/*! All JTAG chains.  */
53
enum or1k_jtag_chains {
54
  OR1K_SC_UNDEF      = -1,      /* Scan chain not defined */
55
  OR1K_SC_RISC_DEBUG =  1,      /* 1 RISC Debug Interface chain (for SPRs) */
56
  OR1K_SC_REGISTER   =  4,      /* 4 JTAG Register Chain */
57
  OR1K_SC_WISHBONE   =  5,      /* 5 Wisbone Chain (for memory access) */
58
};
59
 
60
/*! Version of the debug interface. This affects the address on the control
61
    (SC_REGISTER) scan chain. */
62
enum or1k_dbg_if_version_enum {
63
  OR1K_DBG_IF_ORPSOC,                   /* Version with ORPSoC */
64
  OR1K_DBG_IF_MOHOR                     /* Igor Mohor's debug interface */
65
};
66
 
67
/*! JTAG registers (for use with ORK1_SC_REGISTER scan chain). There are two
68
   flavours of this, depending which version of the debug interface you are
69
   using. */
70
#define OR1K_JTAG_RISCOP  (OR1K_DBG_IF_ORPSOC == or1k_dbg_if_version ? 0x04 : \
71
                                                                       0x00 )
72
 
73
/* JTAG register fields */
74
 
75
#define OR1K_JTAG_RISCOP_STALL  0x00000001
76
#define OR1K_JTAG_RISCOP_RESET  0x00000002
77
 
78
/*! The OR1K JTAG proxy protocol commands. */
79
enum or1k_jtag_proxy_protocol_commands {
80
  OR1K_JTAG_COMMAND_READ        = 1,
81
  OR1K_JTAG_COMMAND_WRITE       = 2,
82
  OR1K_JTAG_COMMAND_READ_BLOCK  = 3,
83
  OR1K_JTAG_COMMAND_WRITE_BLOCK = 4,
84
  OR1K_JTAG_COMMAND_CHAIN       = 5,
85
};
86
 
87
/*! Maximum size of write block sent in one go */
88
#define  OR1K_MAX_JTAG_WRITE  1024
89
 
90
/* Each transmit structure must begin with an integer which specifies the type
91
 * of command. Information after this is variable. Make sure to have all
92
 * information aligned properly. If we stick with 32 bit integers, it should
93
 * be portable onto every platform. These structures will be transmitted
94
 * across the network in network byte order.
95
*/
96
 
97
struct jtr_read_message {
98
  uint32_t  command;
99
  uint32_t  length;
100
  uint32_t  address;
101
};
102
 
103
struct jtr_write_message {
104
  uint32_t  command;
105
  uint32_t  length;
106
  uint32_t  address;
107
  uint32_t  data_h;
108
  uint32_t  data_l;
109
};
110
 
111
struct jtr_read_block_message {
112
  uint32_t  command;
113
  uint32_t  length;
114
  uint32_t  address;
115
  int32_t   num_regs;
116
};
117
 
118
struct jtr_write_block_message {
119
  uint32_t  command;
120
  uint32_t  length;
121
  uint32_t  address;
122
  int32_t   num_regs;
123
  uint32_t  data[1];
124
};
125
 
126
struct jtr_chain_message {
127
  uint32_t  command;
128
  uint32_t  length;
129
  uint32_t  chain;
130
};
131
 
132
/* The responses are messages specific, however convention states the first
133
 * word should be an error code. Again, sticking with 32 bit integers should
134
 * provide maximum portability. */
135
 
136
struct jtr_failure_response {
137
  int32_t  status;
138
};
139
 
140
struct jtr_read_response {
141
  int32_t   status;
142
  uint32_t  data_h;
143
  uint32_t  data_l;
144
};
145
 
146
struct jtr_write_response {
147
  int32_t  status;
148
};
149
 
150
struct jtr_read_block_response {
151
  int32_t   status;
152
  int32_t   num_regs;
153
};
154
 
155
struct jtr_write_block_response {
156
  int32_t  status;
157
};
158
 
159
struct jtr_chain_response {
160
  int32_t  status;
161
};
162
 
163
 
164
/*! Error codes for the OpenRISC 1000 JTAG debugging protocol */
165
enum or1k_jtag_errors  /* modified <chris@asics.ws> CZ 24/05/01 */
166
{
167
  /* Codes > 0 are for system errors */
168
 
169
  OR1K_JTAG_ERR_NONE = 0,
170
  OR1K_JTAG_ERR_CRC = -1,
171
  OR1K_JTAG_ERR_MEM = -2,
172
  OR1K_JTAG_ERR_INVALID_COMMAND = -3,
173
  OR1K_JTAG_ERR_SERVER_TERMINATED = -4,
174
  OR1K_JTAG_ERR_NO_CONNECTION = -5,
175
  OR1K_JTAG_ERR_PROTOCOL_ERROR = -6,
176
  OR1K_JTAG_ERR_COMMAND_NOT_IMPLEMENTED = -7,
177
  OR1K_JTAG_ERR_INVALID_CHAIN = -8,
178
  OR1K_JTAG_ERR_INVALID_ADDRESS = -9,
179
  OR1K_JTAG_ERR_ACCESS_EXCEPTION = -10, /* Write to ROM */
180
  OR1K_JTAG_ERR_INVALID_LENGTH = -11,
181
  OR1K_JTAG_ERR_OUT_OF_MEMORY = -12,
182
};
183
 
184
/* Global variable identifying the debug interface version */
185
extern enum or1k_dbg_if_version_enum  or1k_dbg_if_version;
186
 
187
/* Global OR1K JTAG functions */
188
extern void      or1k_jtag_init (char *args);
189
extern void      or1k_jtag_close ();
190
extern ULONGEST  or1k_jtag_read_spr (unsigned int  sprnum);
191
extern void      or1k_jtag_write_spr (unsigned int  sprnum,
192
                                      ULONGEST      data);
193
extern int       or1k_jtag_read_mem (CORE_ADDR  addr,
194
                                     gdb_byte  *bdata,
195
                                     int        len);
196
extern int       or1k_jtag_write_mem (CORE_ADDR       addr,
197
                                      const gdb_byte *bdata,
198
                                      int             len);
199
extern void      or1k_jtag_stall ();
200
extern void      or1k_jtag_unstall ();
201
extern void      or1k_jtag_wait (int  fast);
202
 
203
 
204
#endif /* OR1K_JTAG__H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.