adiv6: re-organize mem_ap registers definition
ADIv5 MEM-AP registers are a subset of ADIv6 MEM-AP registers and are located at different offset. To prepare for introducing ADIv6, add 'struct adiv5_dap *' as argument to ADIv5 registers macro. Check the ADI version and use the proper address. Both adapter drivers rshim and stlink are ADIv5 only, so let them use the ADIv5 macros only. Split from change https://review.openocd.org/6077/ Change-Id: Ib861ddcdab74637b2082cc9f2612dea0007d77b1 Signed-off-by: Kevin Burke <kevinb@os.amperecomputing.com> Signed-off-by: Daniel Goehring <dgoehrin@os.amperecomputing.com> Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/6457 Tested-by: jenkins
This commit is contained in:
committed by
Antonio Borneo
parent
1fe82f9f1d
commit
a6e4aabc66
@@ -283,35 +283,35 @@ static int rshim_ap_q_read(struct adiv5_ap *ap, unsigned int reg,
|
||||
int rc = ERROR_OK, tile;
|
||||
|
||||
switch (reg) {
|
||||
case MEM_AP_REG_CSW:
|
||||
case ADIV5_MEM_AP_REG_CSW:
|
||||
*data = ap_csw;
|
||||
break;
|
||||
|
||||
case MEM_AP_REG_CFG:
|
||||
case ADIV5_MEM_AP_REG_CFG:
|
||||
*data = 0;
|
||||
break;
|
||||
|
||||
case MEM_AP_REG_BASE:
|
||||
case ADIV5_MEM_AP_REG_BASE:
|
||||
*data = RSH_CS_ROM_BASE;
|
||||
break;
|
||||
|
||||
case AP_REG_IDR:
|
||||
case ADIV5_AP_REG_IDR:
|
||||
if (ap->ap_num == 0)
|
||||
*data = APB_AP_IDR;
|
||||
else
|
||||
*data = 0;
|
||||
break;
|
||||
|
||||
case MEM_AP_REG_BD0:
|
||||
case MEM_AP_REG_BD1:
|
||||
case MEM_AP_REG_BD2:
|
||||
case MEM_AP_REG_BD3:
|
||||
case ADIV5_MEM_AP_REG_BD0:
|
||||
case ADIV5_MEM_AP_REG_BD1:
|
||||
case ADIV5_MEM_AP_REG_BD2:
|
||||
case ADIV5_MEM_AP_REG_BD3:
|
||||
addr = (ap_tar & ~0xf) + (reg & 0x0C);
|
||||
ap_addr_2_tile(&tile, &addr);
|
||||
rc = coresight_read(tile, addr, data);
|
||||
break;
|
||||
|
||||
case MEM_AP_REG_DRW:
|
||||
case ADIV5_MEM_AP_REG_DRW:
|
||||
addr = (ap_tar & ~0x3) + ap_tar_inc;
|
||||
ap_addr_2_tile(&tile, &addr);
|
||||
rc = coresight_read(tile, addr, data);
|
||||
@@ -344,25 +344,25 @@ static int rshim_ap_q_write(struct adiv5_ap *ap, unsigned int reg,
|
||||
}
|
||||
|
||||
switch (reg) {
|
||||
case MEM_AP_REG_CSW:
|
||||
case ADIV5_MEM_AP_REG_CSW:
|
||||
ap_csw = data;
|
||||
break;
|
||||
|
||||
case MEM_AP_REG_TAR:
|
||||
case ADIV5_MEM_AP_REG_TAR:
|
||||
ap_tar = data;
|
||||
ap_tar_inc = 0;
|
||||
break;
|
||||
|
||||
case MEM_AP_REG_BD0:
|
||||
case MEM_AP_REG_BD1:
|
||||
case MEM_AP_REG_BD2:
|
||||
case MEM_AP_REG_BD3:
|
||||
case ADIV5_MEM_AP_REG_BD0:
|
||||
case ADIV5_MEM_AP_REG_BD1:
|
||||
case ADIV5_MEM_AP_REG_BD2:
|
||||
case ADIV5_MEM_AP_REG_BD3:
|
||||
addr = (ap_tar & ~0xf) + (reg & 0x0C);
|
||||
ap_addr_2_tile(&tile, &addr);
|
||||
rc = coresight_write(tile, addr, data);
|
||||
break;
|
||||
|
||||
case MEM_AP_REG_DRW:
|
||||
case ADIV5_MEM_AP_REG_DRW:
|
||||
ap_drw = data;
|
||||
addr = (ap_tar & ~0x3) + ap_tar_inc;
|
||||
ap_addr_2_tile(&tile, &addr);
|
||||
|
||||
@@ -4286,7 +4286,7 @@ static int stlink_dap_ap_read(struct adiv5_ap *ap, unsigned int reg, uint32_t *d
|
||||
uint32_t dummy;
|
||||
int retval;
|
||||
|
||||
if (reg != AP_REG_IDR) {
|
||||
if (reg != ADIV5_AP_REG_IDR) {
|
||||
retval = stlink_dap_open_ap(ap->ap_num);
|
||||
if (retval != ERROR_OK)
|
||||
return retval;
|
||||
@@ -4591,7 +4591,7 @@ static void stlink_dap_run_internal(struct adiv5_dap *dap)
|
||||
break;
|
||||
case CMD_AP_WRITE:
|
||||
/* ignore increment packed, not supported */
|
||||
if (q->ap_w.reg == MEM_AP_REG_CSW)
|
||||
if (q->ap_w.reg == ADIV5_MEM_AP_REG_CSW)
|
||||
q->ap_w.data &= ~CSW_ADDRINC_PACKED;
|
||||
retval = stlink_dap_ap_write(q->ap_w.ap, q->ap_w.reg, q->ap_w.data);
|
||||
break;
|
||||
@@ -4736,18 +4736,18 @@ static int stlink_dap_op_queue_ap_read(struct adiv5_ap *ap, unsigned int reg,
|
||||
/* test STLINK_F_HAS_CSW implicitly tests STLINK_F_HAS_MEM_16BIT, STLINK_F_HAS_MEM_RD_NO_INC
|
||||
* and STLINK_F_HAS_RW_MISC */
|
||||
if ((stlink_dap_handle->version.flags & STLINK_F_HAS_CSW) &&
|
||||
(reg == MEM_AP_REG_DRW || reg == MEM_AP_REG_BD0 || reg == MEM_AP_REG_BD1 ||
|
||||
reg == MEM_AP_REG_BD2 || reg == MEM_AP_REG_BD3)) {
|
||||
(reg == ADIV5_MEM_AP_REG_DRW || reg == ADIV5_MEM_AP_REG_BD0 || reg == ADIV5_MEM_AP_REG_BD1 ||
|
||||
reg == ADIV5_MEM_AP_REG_BD2 || reg == ADIV5_MEM_AP_REG_BD3)) {
|
||||
/* de-queue previous write-TAR */
|
||||
struct dap_queue *prev_q = q - 1;
|
||||
if (i && prev_q->cmd == CMD_AP_WRITE && prev_q->ap_w.ap == ap && prev_q->ap_w.reg == MEM_AP_REG_TAR) {
|
||||
if (i && prev_q->cmd == CMD_AP_WRITE && prev_q->ap_w.ap == ap && prev_q->ap_w.reg == ADIV5_MEM_AP_REG_TAR) {
|
||||
stlink_dap_handle->queue_index = i;
|
||||
i--;
|
||||
q = prev_q;
|
||||
prev_q--;
|
||||
}
|
||||
/* de-queue previous write-CSW if it didn't changed ap->csw_default */
|
||||
if (i && prev_q->cmd == CMD_AP_WRITE && prev_q->ap_w.ap == ap && prev_q->ap_w.reg == MEM_AP_REG_CSW &&
|
||||
if (i && prev_q->cmd == CMD_AP_WRITE && prev_q->ap_w.ap == ap && prev_q->ap_w.reg == ADIV5_MEM_AP_REG_CSW &&
|
||||
!prev_q->ap_w.changes_csw_default) {
|
||||
stlink_dap_handle->queue_index = i;
|
||||
q = prev_q;
|
||||
@@ -4769,7 +4769,7 @@ static int stlink_dap_op_queue_ap_read(struct adiv5_ap *ap, unsigned int reg,
|
||||
return ERROR_FAIL;
|
||||
}
|
||||
|
||||
q->mem_ap.addr = (reg == MEM_AP_REG_DRW) ? ap->tar_value : ((ap->tar_value & ~0x0f) | (reg & 0x0c));
|
||||
q->mem_ap.addr = (reg == ADIV5_MEM_AP_REG_DRW) ? ap->tar_value : ((ap->tar_value & ~0x0f) | (reg & 0x0c));
|
||||
q->mem_ap.ap = ap;
|
||||
q->mem_ap.p_data = data;
|
||||
q->mem_ap.csw = ap->csw_default;
|
||||
@@ -4802,18 +4802,18 @@ static int stlink_dap_op_queue_ap_write(struct adiv5_ap *ap, unsigned int reg,
|
||||
/* test STLINK_F_HAS_CSW implicitly tests STLINK_F_HAS_MEM_16BIT, STLINK_F_HAS_MEM_WR_NO_INC
|
||||
* and STLINK_F_HAS_RW_MISC */
|
||||
if ((stlink_dap_handle->version.flags & STLINK_F_HAS_CSW) &&
|
||||
(reg == MEM_AP_REG_DRW || reg == MEM_AP_REG_BD0 || reg == MEM_AP_REG_BD1 ||
|
||||
reg == MEM_AP_REG_BD2 || reg == MEM_AP_REG_BD3)) {
|
||||
(reg == ADIV5_MEM_AP_REG_DRW || reg == ADIV5_MEM_AP_REG_BD0 || reg == ADIV5_MEM_AP_REG_BD1 ||
|
||||
reg == ADIV5_MEM_AP_REG_BD2 || reg == ADIV5_MEM_AP_REG_BD3)) {
|
||||
/* de-queue previous write-TAR */
|
||||
struct dap_queue *prev_q = q - 1;
|
||||
if (i && prev_q->cmd == CMD_AP_WRITE && prev_q->ap_w.ap == ap && prev_q->ap_w.reg == MEM_AP_REG_TAR) {
|
||||
if (i && prev_q->cmd == CMD_AP_WRITE && prev_q->ap_w.ap == ap && prev_q->ap_w.reg == ADIV5_MEM_AP_REG_TAR) {
|
||||
stlink_dap_handle->queue_index = i;
|
||||
i--;
|
||||
q = prev_q;
|
||||
prev_q--;
|
||||
}
|
||||
/* de-queue previous write-CSW if it didn't changed ap->csw_default */
|
||||
if (i && prev_q->cmd == CMD_AP_WRITE && prev_q->ap_w.ap == ap && prev_q->ap_w.reg == MEM_AP_REG_CSW &&
|
||||
if (i && prev_q->cmd == CMD_AP_WRITE && prev_q->ap_w.ap == ap && prev_q->ap_w.reg == ADIV5_MEM_AP_REG_CSW &&
|
||||
!prev_q->ap_w.changes_csw_default) {
|
||||
stlink_dap_handle->queue_index = i;
|
||||
q = prev_q;
|
||||
@@ -4835,7 +4835,7 @@ static int stlink_dap_op_queue_ap_write(struct adiv5_ap *ap, unsigned int reg,
|
||||
return ERROR_FAIL;
|
||||
}
|
||||
|
||||
q->mem_ap.addr = (reg == MEM_AP_REG_DRW) ? ap->tar_value : ((ap->tar_value & ~0x0f) | (reg & 0x0c));
|
||||
q->mem_ap.addr = (reg == ADIV5_MEM_AP_REG_DRW) ? ap->tar_value : ((ap->tar_value & ~0x0f) | (reg & 0x0c));
|
||||
q->mem_ap.ap = ap;
|
||||
q->mem_ap.data = data;
|
||||
q->mem_ap.csw = ap->csw_default;
|
||||
@@ -4848,7 +4848,7 @@ static int stlink_dap_op_queue_ap_write(struct adiv5_ap *ap, unsigned int reg,
|
||||
q->ap_w.reg = reg;
|
||||
q->ap_w.ap = ap;
|
||||
q->ap_w.data = data;
|
||||
if (reg == MEM_AP_REG_CSW && ap->csw_default != last_csw_default[ap->ap_num]) {
|
||||
if (reg == ADIV5_MEM_AP_REG_CSW && ap->csw_default != last_csw_default[ap->ap_num]) {
|
||||
q->ap_w.changes_csw_default = true;
|
||||
last_csw_default[ap->ap_num] = ap->csw_default;
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user