projects
/
fw
/
openocd
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Cleanup and improve handle_halt_command:
[fw/openocd]
/
src
/
target
/
mips_ejtag.c
diff --git
a/src/target/mips_ejtag.c
b/src/target/mips_ejtag.c
index 432500467336780525f4ce60b24fe8340c6db575..4c8010b5388e7dce7ce4eae6e515d5fbc6ac92b6 100644
(file)
--- a/
src/target/mips_ejtag.c
+++ b/
src/target/mips_ejtag.c
@@
-26,57
+26,54
@@
#include "mips32.h"
#include "mips_ejtag.h"
#include "mips32.h"
#include "mips_ejtag.h"
-#include "binarybuffer.h"
-#include "log.h"
-#include "jtag.h"
-#include <stdlib.h>
-
-int mips_ejtag_set_instr(mips_ejtag_t *ejtag_info, int new_instr, in_handler_t handler)
+int mips_ejtag_set_instr(mips_ejtag_t *ejtag_info, int new_instr, void *delete_me_and_submit_patch)
{
{
- jtag_device_t *device = jtag_get_device(ejtag_info->chain_pos);
- if (device==NULL)
+ jtag_tap_t *tap;
+
+ tap = ejtag_info->tap;
+ if (tap==NULL)
return ERROR_FAIL;
return ERROR_FAIL;
- if (buf_get_u32(
device->cur_instr, 0, device->ir_length) !=
new_instr)
+ if (buf_get_u32(
tap->cur_instr, 0, tap->ir_length) != (u32)
new_instr)
{
scan_field_t field;
u8 t[4];
{
scan_field_t field;
u8 t[4];
- field.
device = ejtag_info->chain_pos
;
- field.num_bits =
device
->ir_length;
+ field.
tap = tap
;
+ field.num_bits =
tap
->ir_length;
field.out_value = t;
buf_set_u32(field.out_value, 0, field.num_bits, new_instr);
field.out_value = t;
buf_set_u32(field.out_value, 0, field.num_bits, new_instr);
- field.out_mask = NULL;
+
field.in_value = NULL;
field.in_value = NULL;
- field.in_check_value = NULL;
- field.in_check_mask = NULL;
- field.in_handler = handler;
- field.in_handler_priv = NULL;
- jtag_add_ir_scan(1, &field,
-1
);
+
+
+
+
+ jtag_add_ir_scan(1, &field,
jtag_get_end_state()
);
}
return ERROR_OK;
}
}
return ERROR_OK;
}
-int mips_ejtag_get_idcode(mips_ejtag_t *ejtag_info, u32 *idcode
, in_handler_t handler
)
+int mips_ejtag_get_idcode(mips_ejtag_t *ejtag_info, u32 *idcode)
{
scan_field_t field;
{
scan_field_t field;
- jtag_
add_end_state(TAP_RTI
);
+ jtag_
set_end_state(TAP_IDLE
);
mips_ejtag_set_instr(ejtag_info, EJTAG_INST_IDCODE, NULL);
mips_ejtag_set_instr(ejtag_info, EJTAG_INST_IDCODE, NULL);
- field.
device = ejtag_info->chain_pos
;
+ field.
tap = ejtag_info->tap
;
field.num_bits = 32;
field.out_value = NULL;
field.num_bits = 32;
field.out_value = NULL;
- field.out_mask = NULL;
+
field.in_value = (void*)idcode;
field.in_value = (void*)idcode;
- field.in_check_value = NULL;
- field.in_check_mask = NULL;
- field.in_handler = NULL;
- field.in_handler_priv = NULL;
- jtag_add_dr_scan(1, &field,
-1
);
+
+
+
+
+ jtag_add_dr_scan(1, &field,
jtag_get_end_state()
);
if (jtag_execute_queue() != ERROR_OK)
{
if (jtag_execute_queue() != ERROR_OK)
{
@@
-86,24
+83,24
@@
int mips_ejtag_get_idcode(mips_ejtag_t *ejtag_info, u32 *idcode, in_handler_t ha
return ERROR_OK;
}
return ERROR_OK;
}
-int mips_ejtag_get_impcode(mips_ejtag_t *ejtag_info, u32 *impcode
, in_handler_t handler
)
+int mips_ejtag_get_impcode(mips_ejtag_t *ejtag_info, u32 *impcode)
{
scan_field_t field;
{
scan_field_t field;
- jtag_
add_end_state(TAP_RTI
);
+ jtag_
set_end_state(TAP_IDLE
);
mips_ejtag_set_instr(ejtag_info, EJTAG_INST_IMPCODE, NULL);
mips_ejtag_set_instr(ejtag_info, EJTAG_INST_IMPCODE, NULL);
- field.
device = ejtag_info->chain_pos
;
+ field.
tap = ejtag_info->tap
;
field.num_bits = 32;
field.out_value = NULL;
field.num_bits = 32;
field.out_value = NULL;
- field.out_mask = NULL;
+
field.in_value = (void*)impcode;
field.in_value = (void*)impcode;
- field.in_check_value = NULL;
- field.in_check_mask = NULL;
- field.in_handler = NULL;
- field.in_handler_priv = NULL;
- jtag_add_dr_scan(1, &field,
-1
);
+
+
+
+
+ jtag_add_dr_scan(1, &field,
jtag_get_end_state()
);
if (jtag_execute_queue() != ERROR_OK)
{
if (jtag_execute_queue() != ERROR_OK)
{
@@
-115,26
+112,26
@@
int mips_ejtag_get_impcode(mips_ejtag_t *ejtag_info, u32 *impcode, in_handler_t
int mips_ejtag_drscan_32(mips_ejtag_t *ejtag_info, u32 *data)
{
int mips_ejtag_drscan_32(mips_ejtag_t *ejtag_info, u32 *data)
{
- jtag_
device_t *device
;
-
device = jtag_get_device(ejtag_info->chain_pos)
;
+ jtag_
tap_t *tap
;
+
tap = ejtag_info->tap
;
- if (
device
==NULL)
+ if (
tap
==NULL)
return ERROR_FAIL;
scan_field_t field;
return ERROR_FAIL;
scan_field_t field;
- u8 t[4];
+ u8 t[4]
, r[4]
;
int retval;
int retval;
- field.
device = ejtag_info->chain_pos
;
+ field.
tap = tap
;
field.num_bits = 32;
field.out_value = t;
buf_set_u32(field.out_value, 0, field.num_bits, *data);
field.num_bits = 32;
field.out_value = t;
buf_set_u32(field.out_value, 0, field.num_bits, *data);
- field.out_mask = NULL;
- field.in_value =
(u8*)data
;
- field.in_check_value = NULL;
- field.in_check_mask = NULL;
- field.in_handler = NULL;
- field.in_handler_priv = NULL;
- jtag_add_dr_scan(1, &field,
-1
);
+
+ field.in_value =
r
;
+
+
+
+
+ jtag_add_dr_scan(1, &field,
jtag_get_end_state()
);
if ((retval = jtag_execute_queue()) != ERROR_OK)
{
if ((retval = jtag_execute_queue()) != ERROR_OK)
{
@@
-142,6
+139,10
@@
int mips_ejtag_drscan_32(mips_ejtag_t *ejtag_info, u32 *data)
return retval;
}
return retval;
}
+ *data = buf_get_u32(field.in_value, 0, 32);
+
+ keep_alive();
+
return ERROR_OK;
}
return ERROR_OK;
}
@@
-200,7
+201,7
@@
int mips_ejtag_config_step(mips_ejtag_t *ejtag_info, int enable_step)
int mips_ejtag_enter_debug(mips_ejtag_t *ejtag_info)
{
u32 ejtag_ctrl;
int mips_ejtag_enter_debug(mips_ejtag_t *ejtag_info)
{
u32 ejtag_ctrl;
- jtag_
add_end_state(TAP_RTI
);
+ jtag_
set_end_state(TAP_IDLE
);
mips_ejtag_set_instr(ejtag_info, EJTAG_INST_CONTROL, NULL);
/* set debug break bit */
mips_ejtag_set_instr(ejtag_info, EJTAG_INST_CONTROL, NULL);
/* set debug break bit */
@@
-217,13
+218,11
@@
int mips_ejtag_enter_debug(mips_ejtag_t *ejtag_info)
return ERROR_OK;
}
return ERROR_OK;
}
-int mips_ejtag_exit_debug(mips_ejtag_t *ejtag_info
, int enable_interrupts
)
+int mips_ejtag_exit_debug(mips_ejtag_t *ejtag_info)
{
u32 inst;
inst = MIPS32_DRET;
{
u32 inst;
inst = MIPS32_DRET;
-
- /* TODO : enable/disable interrrupts */
-
+
/* execute our dret instruction */
mips32_pracc_exec(ejtag_info, 1, &inst, 0, NULL, 0, NULL, 0);
/* execute our dret instruction */
mips32_pracc_exec(ejtag_info, 1, &inst, 0, NULL, 0, NULL, 0);
@@
-261,7
+260,7
@@
int mips_ejtag_init(mips_ejtag_t *ejtag_info)
{
u32 ejtag_version;
{
u32 ejtag_version;
- mips_ejtag_get_impcode(ejtag_info, &ejtag_info->impcode
, NULL
);
+ mips_ejtag_get_impcode(ejtag_info, &ejtag_info->impcode);
LOG_DEBUG("impcode: 0x%8.8x", ejtag_info->impcode);
/* get ejtag version */
LOG_DEBUG("impcode: 0x%8.8x", ejtag_info->impcode);
/* get ejtag version */