adiv5: Attempt to handle JTAG DPv0 devices
This commit is contained in:
parent
b795cb7ef4
commit
79575cc8a9
|
@ -136,7 +136,7 @@ uint32_t jlink_swdp_scan(bmp_info_t *info)
|
|||
|
||||
jlink_adiv5_swdp_error(dp);
|
||||
|
||||
adiv5_dp_init(dp);
|
||||
adiv5_dp_init(dp, 0);
|
||||
|
||||
return target_list ? 1U : 0U;
|
||||
}
|
||||
|
|
|
@ -1099,7 +1099,7 @@ uint32_t stlink_swdp_scan(bmp_info_t *info)
|
|||
|
||||
stlink_dp_error(dp);
|
||||
|
||||
adiv5_dp_init(dp);
|
||||
adiv5_dp_init(dp, 0);
|
||||
|
||||
return target_list ? 1U : 0U;
|
||||
}
|
||||
|
|
|
@ -681,7 +681,7 @@ static void rp_rescue_setup(ADIv5_DP_t *dp)
|
|||
return;
|
||||
}
|
||||
|
||||
void adiv5_dp_init(ADIv5_DP_t *dp)
|
||||
void adiv5_dp_init(ADIv5_DP_t *dp, const uint32_t idcode)
|
||||
{
|
||||
/*
|
||||
* Assume DP v1 or later.
|
||||
|
@ -691,10 +691,11 @@ void adiv5_dp_init(ADIv5_DP_t *dp)
|
|||
*
|
||||
* for SWD-DP, we are guaranteed to be DP v1 or later.
|
||||
*/
|
||||
volatile uint32_t dpidr;
|
||||
volatile uint32_t dpidr = 0;
|
||||
volatile struct exception e;
|
||||
TRY_CATCH (e, EXCEPTION_ALL) {
|
||||
dpidr = adiv5_dp_read(dp, ADIV5_DP_DPIDR);
|
||||
if (idcode != JTAG_IDCODE_ARM_DPv0)
|
||||
dpidr = adiv5_dp_read(dp, ADIV5_DP_DPIDR);
|
||||
}
|
||||
if (e.type) {
|
||||
DEBUG_WARN("DP not responding!...\n");
|
||||
|
@ -728,16 +729,13 @@ void adiv5_dp_init(ADIv5_DP_t *dp)
|
|||
} else {
|
||||
DEBUG_WARN("Invalid DPIDR %08" PRIx32 " assuming DP version 0\n", dpidr);
|
||||
dp->version = 0;
|
||||
dp->designer_code = 0;
|
||||
dp->partno = 0;
|
||||
dp->mindp = false;
|
||||
}
|
||||
|
||||
}
|
||||
if (dp->version == 0) {
|
||||
} else if (dp->version == 0)
|
||||
/* DP v0 */
|
||||
DEBUG_WARN("DPv0 detected, no designer code available\n");
|
||||
dp->designer_code = 0;
|
||||
dp->partno = 0;
|
||||
dp->mindp = 0;
|
||||
}
|
||||
DEBUG_WARN("DPv0 detected based on JTAG IDCode\n");
|
||||
|
||||
if (dp->version >= 2) {
|
||||
adiv5_dp_write(dp, ADIV5_DP_SELECT, 2); /* TARGETID is on bank 2 */
|
||||
|
|
|
@ -162,6 +162,8 @@
|
|||
#define JTAG_IDCODE_DESIGNER_OFFSET 1U
|
||||
#define JTAG_IDCODE_DESIGNER_MASK (0x7ffU << JTAG_IDCODE_DESIGNER_OFFSET)
|
||||
|
||||
#define JTAG_IDCODE_ARM_DPv0 0x4ba00477U
|
||||
|
||||
/* Constants to make RnW parameters more clear in code */
|
||||
#define ADIV5_LOW_WRITE 0
|
||||
#define ADIV5_LOW_READ 1
|
||||
|
@ -358,7 +360,7 @@ void adiv5_mem_write_sized(ADIv5_AP_t *ap, uint32_t dest, const void *src, size_
|
|||
void adiv5_dp_write(ADIv5_DP_t *dp, uint16_t addr, uint32_t value);
|
||||
#endif
|
||||
|
||||
void adiv5_dp_init(ADIv5_DP_t *dp);
|
||||
void adiv5_dp_init(ADIv5_DP_t *dp, uint32_t idcode);
|
||||
void platform_adiv5_dp_defaults(ADIv5_DP_t *dp);
|
||||
ADIv5_AP_t *adiv5_new_ap(ADIv5_DP_t *dp, uint8_t apsel);
|
||||
void remote_jtag_dev(const jtag_dev_t *jtag_dev);
|
||||
|
|
|
@ -56,7 +56,7 @@ void adiv5_jtag_dp_handler(uint8_t jd_index)
|
|||
dp->abort = adiv5_jtagdp_abort;
|
||||
}
|
||||
|
||||
adiv5_dp_init(dp);
|
||||
adiv5_dp_init(dp, jtag_devs[jd_index].jd_idcode);
|
||||
}
|
||||
|
||||
uint32_t fw_adiv5_jtagdp_read(ADIv5_DP_t *dp, uint16_t addr)
|
||||
|
|
|
@ -194,7 +194,7 @@ uint32_t adiv5_swdp_scan(uint32_t targetid)
|
|||
memcpy(dp, initial_dp, sizeof(ADIv5_DP_t));
|
||||
dp->instance = i;
|
||||
|
||||
adiv5_dp_init(dp);
|
||||
adiv5_dp_init(dp, 0);
|
||||
}
|
||||
return target_list ? 1U : 0U;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue