ARM11: implement provider for new DPM interface
This is a very thin layer over some of the current ARM11 debug TAP utilities. The layer isn't yet hooked up. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>__archive__
parent
e6dc927e97
commit
caf827ee81
|
@ -24,6 +24,7 @@
|
|||
#define ARM11_H
|
||||
|
||||
#include "armv4_5.h"
|
||||
#include "arm_dpm.h"
|
||||
|
||||
/* TEMPORARY -- till we switch to the shared infrastructure */
|
||||
#define ARM11_REGCACHE_COUNT 20
|
||||
|
@ -59,6 +60,9 @@ struct arm11_common
|
|||
struct arm arm;
|
||||
struct target * target; /**< Reference back to the owner */
|
||||
|
||||
/** Debug module state. */
|
||||
struct arm_dpm dpm;
|
||||
|
||||
/** \name Processor type detection */
|
||||
/*@{*/
|
||||
|
||||
|
|
|
@ -951,3 +951,76 @@ int arm11_read_memory_word(struct arm11_common * arm11, uint32_t address, uint32
|
|||
return arm11_run_instr_data_finish(arm11);
|
||||
}
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
|
||||
/*
|
||||
* ARM11 provider for the OpenOCD implementation of the standard
|
||||
* architectural ARM v6/v7 "Debug Programmer's Model" (DPM).
|
||||
*/
|
||||
|
||||
static inline struct arm11_common *dpm_to_arm11(struct arm_dpm *dpm)
|
||||
{
|
||||
return container_of(dpm, struct arm11_common, dpm);
|
||||
}
|
||||
|
||||
static int arm11_dpm_prepare(struct arm_dpm *dpm)
|
||||
{
|
||||
struct arm11_common *arm11 = dpm_to_arm11(dpm);
|
||||
|
||||
arm11 = container_of(dpm->arm, struct arm11_common, arm);
|
||||
|
||||
return arm11_run_instr_data_prepare(dpm_to_arm11(dpm));
|
||||
}
|
||||
|
||||
static int arm11_dpm_finish(struct arm_dpm *dpm)
|
||||
{
|
||||
return arm11_run_instr_data_finish(dpm_to_arm11(dpm));
|
||||
}
|
||||
|
||||
static int arm11_dpm_instr_write_data_dcc(struct arm_dpm *dpm,
|
||||
uint32_t opcode, uint32_t data)
|
||||
{
|
||||
return arm11_run_instr_data_to_core(dpm_to_arm11(dpm),
|
||||
opcode, &data, 1);
|
||||
}
|
||||
|
||||
static int arm11_dpm_instr_write_data_r0(struct arm_dpm *dpm,
|
||||
uint32_t opcode, uint32_t data)
|
||||
{
|
||||
return arm11_run_instr_data_to_core_via_r0(dpm_to_arm11(dpm),
|
||||
opcode, data);
|
||||
}
|
||||
|
||||
static int arm11_dpm_instr_read_data_dcc(struct arm_dpm *dpm,
|
||||
uint32_t opcode, uint32_t *data)
|
||||
{
|
||||
return arm11_run_instr_data_from_core(dpm_to_arm11(dpm),
|
||||
opcode, data, 1);
|
||||
}
|
||||
|
||||
static int arm11_dpm_instr_read_data_r0(struct arm_dpm *dpm,
|
||||
uint32_t opcode, uint32_t *data)
|
||||
{
|
||||
return arm11_run_instr_data_from_core_via_r0(dpm_to_arm11(dpm),
|
||||
opcode, data);
|
||||
}
|
||||
|
||||
|
||||
void arm11_dpm_init(struct arm11_common *arm11, uint32_t didr)
|
||||
{
|
||||
struct arm_dpm *dpm = &arm11->dpm;
|
||||
|
||||
dpm->arm = &arm11->arm;
|
||||
|
||||
dpm->didr = didr;
|
||||
|
||||
dpm->prepare = arm11_dpm_prepare;
|
||||
dpm->finish = arm11_dpm_finish;
|
||||
|
||||
dpm->instr_write_data_dcc = arm11_dpm_instr_write_data_dcc;
|
||||
dpm->instr_write_data_r0 = arm11_dpm_instr_write_data_r0;
|
||||
|
||||
dpm->instr_read_data_dcc = arm11_dpm_instr_read_data_dcc;
|
||||
dpm->instr_read_data_r0 = arm11_dpm_instr_read_data_r0;
|
||||
}
|
||||
|
|
|
@ -60,4 +60,7 @@ void arm11_sc7_set_vcr(struct arm11_common *arm11, uint32_t value);
|
|||
int arm11_read_memory_word(struct arm11_common *arm11,
|
||||
uint32_t address, uint32_t *result);
|
||||
|
||||
/* Set up high-level debug module utilities */
|
||||
void arm11_dpm_init(struct arm11_common *arm11, uint32_t didr);
|
||||
|
||||
#endif // ARM11_DBGTAP_H
|
||||
|
|
Loading…
Reference in New Issue