aboutsummaryrefslogtreecommitdiff
path: root/src/adiv5_jtagdp.c
diff options
context:
space:
mode:
authorGareth McMullin2015-03-14 18:03:04 -0700
committerGareth McMullin2015-03-14 18:03:04 -0700
commit2e785e56fa4e77549878eac88f2c4891af043e64 (patch)
tree3edffa5f46f577d440f8a10fe989db1bd2537a6b /src/adiv5_jtagdp.c
parent6f5b1873d7b986fe7b3bc1f267bae9f7649630a5 (diff)
adiv5: Encode APnDP into register definition.
Clean up magic numbers in adiv5 calls. Removed old adiv5_dp_write_ap and adiv5_dp_read_ap.
Diffstat (limited to 'src/adiv5_jtagdp.c')
-rw-r--r--src/adiv5_jtagdp.c31
1 files changed, 16 insertions, 15 deletions
diff --git a/src/adiv5_jtagdp.c b/src/adiv5_jtagdp.c
index 8f62a11..eb60caa 100644
--- a/src/adiv5_jtagdp.c
+++ b/src/adiv5_jtagdp.c
@@ -36,13 +36,13 @@
#define IR_DPACC 0xA
#define IR_APACC 0xB
-static void adiv5_jtagdp_write(ADIv5_DP_t *dp, uint8_t addr, uint32_t value);
-static uint32_t adiv5_jtagdp_read(ADIv5_DP_t *dp, uint8_t addr);
+static void adiv5_jtagdp_write(ADIv5_DP_t *dp, uint16_t addr, uint32_t value);
+static uint32_t adiv5_jtagdp_read(ADIv5_DP_t *dp, uint16_t addr);
static uint32_t adiv5_jtagdp_error(ADIv5_DP_t *dp);
-static uint32_t adiv5_jtagdp_low_access(ADIv5_DP_t *dp, uint8_t APnDP, uint8_t RnW,
- uint8_t addr, uint32_t value);
+static uint32_t adiv5_jtagdp_low_access(ADIv5_DP_t *dp, uint8_t RnW,
+ uint16_t addr, uint32_t value);
void adiv5_jtag_dp_handler(jtag_dev_t *dev)
@@ -60,35 +60,36 @@ void adiv5_jtag_dp_handler(jtag_dev_t *dev)
adiv5_dp_init(dp);
}
-static void adiv5_jtagdp_write(ADIv5_DP_t *dp, uint8_t addr, uint32_t value)
+static void adiv5_jtagdp_write(ADIv5_DP_t *dp, uint16_t addr, uint32_t value)
{
- adiv5_jtagdp_low_access(dp, ADIV5_LOW_DP, ADIV5_LOW_WRITE, addr, value);
+ adiv5_jtagdp_low_access(dp, ADIV5_LOW_WRITE, addr, value);
}
-static uint32_t adiv5_jtagdp_read(ADIv5_DP_t *dp, uint8_t addr)
+static uint32_t adiv5_jtagdp_read(ADIv5_DP_t *dp, uint16_t addr)
{
- adiv5_jtagdp_low_access(dp, ADIV5_LOW_DP, ADIV5_LOW_READ, addr, 0);
- return adiv5_jtagdp_low_access(dp, ADIV5_LOW_DP, ADIV5_LOW_READ,
+ adiv5_jtagdp_low_access(dp, ADIV5_LOW_READ, addr, 0);
+ return adiv5_jtagdp_low_access(dp, ADIV5_LOW_READ,
ADIV5_DP_RDBUFF, 0);
}
static uint32_t adiv5_jtagdp_error(ADIv5_DP_t *dp)
{
- adiv5_jtagdp_low_access(dp, ADIV5_LOW_DP, ADIV5_LOW_READ,
- ADIV5_DP_CTRLSTAT, 0);
- return adiv5_jtagdp_low_access(dp, ADIV5_LOW_DP, ADIV5_LOW_WRITE,
+ adiv5_jtagdp_low_access(dp, ADIV5_LOW_READ, ADIV5_DP_CTRLSTAT, 0);
+ return adiv5_jtagdp_low_access(dp, ADIV5_LOW_WRITE,
ADIV5_DP_CTRLSTAT, 0xF0000032) & 0x32;
}
-static uint32_t adiv5_jtagdp_low_access(ADIv5_DP_t *dp, uint8_t APnDP, uint8_t RnW,
- uint8_t addr, uint32_t value)
+static uint32_t adiv5_jtagdp_low_access(ADIv5_DP_t *dp, uint8_t RnW,
+ uint16_t addr, uint32_t value)
{
+ bool APnDP = addr & ADIV5_APnDP;
+ addr &= 0xff;
uint64_t request, response;
uint8_t ack;
request = ((uint64_t)value << 3) | ((addr >> 1) & 0x06) | (RnW?1:0);
- jtag_dev_write_ir(dp->dev, APnDP?IR_APACC:IR_DPACC);
+ jtag_dev_write_ir(dp->dev, APnDP ? IR_APACC : IR_DPACC);
int tries = 1000;
do {