jlink_adiv5_swdp: remove duplicated logic on swdp low access

This commit is contained in:
Rafael Silva 2022-08-06 21:01:51 +01:00 committed by Rachel Mant
parent 4f01ffe56c
commit 0075abacbf
3 changed files with 9 additions and 16 deletions

View File

@ -178,9 +178,8 @@ static uint32_t jlink_adiv5_swdp_error(ADIv5_DP_t *dp)
static uint32_t jlink_adiv5_swdp_low_access(ADIv5_DP_t *dp, uint8_t RnW, uint16_t addr, uint32_t value)
{
uint8_t request = make_packet_request(RnW, addr);
bool APnDP = addr & ADIV5_APnDP;
uint8_t addr8 = addr & 0xffU;
uint8_t request = 0x81U;
uint32_t response = 0;
uint8_t ack;
platform_timeout timeout;
@ -188,16 +187,6 @@ static uint32_t jlink_adiv5_swdp_low_access(ADIv5_DP_t *dp, uint8_t RnW, uint16_
if (APnDP && dp->fault)
return 0;
if (APnDP)
request ^= 0x22U;
if (RnW)
request ^= 0x24U;
addr8 &= 0xCU;
request |= (addr8 << 1U) & 0x18U;
if ((addr8 == 4U) || (addr8 == 8U))
request ^= 0x20U;
uint8_t cmd[16];
memset(cmd, 0, sizeof(cmd));

View File

@ -298,7 +298,7 @@ struct ADIv5_AP_s {
uint16_t partno;
};
unsigned int make_packet_request(uint8_t RnW, uint16_t addr);
uint8_t make_packet_request(uint8_t RnW, uint16_t addr);
#if PC_HOSTED == 0
static inline uint32_t adiv5_dp_read(ADIv5_DP_t *dp, uint16_t addr)

View File

@ -29,11 +29,14 @@
#include "target.h"
#include "target_internal.h"
unsigned int make_packet_request(uint8_t RnW, uint16_t addr)
uint8_t make_packet_request(uint8_t RnW, uint16_t addr)
{
bool APnDP = addr & ADIV5_APnDP;
addr &= 0xffU;
unsigned int request = 0x81U; /* Park and Startbit */
uint8_t request = 0x81U; /* Park and Startbit */
if (APnDP)
request ^= 0x22U;
if (RnW)
@ -43,6 +46,7 @@ unsigned int make_packet_request(uint8_t RnW, uint16_t addr)
request |= (addr << 1U) & 0x18U;
if (addr == 4U || addr == 8U)
request ^= 0x20U;
return request;
}
@ -235,7 +239,7 @@ uint32_t firmware_swdp_error(ADIv5_DP_t *dp)
uint32_t firmware_swdp_low_access(ADIv5_DP_t *dp, uint8_t RnW, uint16_t addr, uint32_t value)
{
uint32_t request = make_packet_request(RnW, addr);
uint8_t request = make_packet_request(RnW, addr);
uint32_t response = 0;
uint32_t ack = SWDP_ACK_WAIT;
platform_timeout timeout;