[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openocd-development
Subject:    [PATCH]: 887d47f1fa jtag/drivers/bitbang: use LOG_CUSTOM_LEVEL() macro for SWD
From:       gerrit () openocd ! org
Date:       2024-02-17 12:46:25
Message-ID: 20240217124626.2919AD1 () openocd ! org
[Download RAW message or body]

This is an automated email from Gerrit.

"Tomas Vanek <vanekt@fbl.cz>" just uploaded a new patch set to Gerrit, which you can \
find at https://review.openocd.org/c/openocd/+/8152

-- gerrit

commit 887d47f1fad9a95e2ccbab9c904bae10ee6bb150
Author: Tomas Vanek <vanekt@fbl.cz>
Date:   Sat Feb 17 12:48:46 2024 +0100

    jtag/drivers/bitbang: use LOG_CUSTOM_LEVEL() macro for SWD
    
    Log SWD commands with not OK response but WAIT retries at debug level.
    For commands responded OK and WAIT retries use debug io level
    not to flood the log.
    
    Signed-off-by: Tomas Vanek <vanekt@fbl.cz>
    Change-Id: Idf658e82ed970061c155945df55d06908ed25e09

diff --git a/src/jtag/drivers/bitbang.c b/src/jtag/drivers/bitbang.c
index 8df51764b7..f0236848b3 100644
--- a/src/jtag/drivers/bitbang.c
+++ b/src/jtag/drivers/bitbang.c
@@ -474,7 +474,7 @@ static void bitbang_swd_read_reg(uint8_t cmd, uint32_t *value, \
uint32_t ap_delay  return;
 	}
 
-	for (;;) {
+	for (unsigned int retry = 0;; retry++) {
 		uint8_t trn_ack_data_parity_trn[DIV_ROUND_UP(4 + 3 + 32 + 1 + 4, 8)];
 
 		cmd |= SWD_CMD_START | SWD_CMD_PARK;
@@ -488,16 +488,22 @@ static void bitbang_swd_read_reg(uint8_t cmd, uint32_t *value, \
uint32_t ap_delay  uint32_t data = buf_get_u32(trn_ack_data_parity_trn, 1 + 3, 32);
 		int parity = buf_get_u32(trn_ack_data_parity_trn, 1 + 3 + 32, 1);
 
-		LOG_DEBUG_IO("%s %s read reg %X = %08" PRIx32,
-			  ack == SWD_ACK_OK ? "OK" : ack == SWD_ACK_WAIT ? "WAIT" : ack == SWD_ACK_FAULT \
                ? "FAULT" : "JUNK",
-			  cmd & SWD_CMD_APNDP ? "AP" : "DP",
-			  (cmd & SWD_CMD_A32) >> 1,
-			  data);
+		LOG_CUSTOM_LEVEL((ack != SWD_ACK_OK && (retry == 0 || ack != SWD_ACK_WAIT))
+				? LOG_LVL_DEBUG : LOG_LVL_DEBUG_IO,
+			"%s %s read reg %X = %08" PRIx32,
+			ack == SWD_ACK_OK ? "OK" : ack == SWD_ACK_WAIT ? "WAIT" : ack == SWD_ACK_FAULT ? \
"FAULT" : "JUNK", +			cmd & SWD_CMD_APNDP ? "AP" : "DP",
+			(cmd & SWD_CMD_A32) >> 1,
+			data);
 
 		if (ack == SWD_ACK_WAIT) {
 			swd_clear_sticky_errors();
 			continue;
-		} else if (ack != SWD_ACK_OK) {
+		}
+		if (retry > 1)
+			LOG_DEBUG("SWD WAIT: retried %u times", retry);
+
+		if (ack != SWD_ACK_OK) {
 			queued_retval = swd_ack_to_error_code(ack);
 			return;
 		}
@@ -529,7 +535,7 @@ static void bitbang_swd_write_reg(uint8_t cmd, uint32_t value, \
uint32_t ap_delay  
 	/* init the array to silence scan-build */
 	uint8_t trn_ack_data_parity_trn[DIV_ROUND_UP(4 + 3 + 32 + 1 + 4, 8)] = {0};
-	for (;;) {
+	for (unsigned int retry = 0;; retry++) {
 		buf_set_u32(trn_ack_data_parity_trn, 1 + 3 + 1, 32, value);
 		buf_set_u32(trn_ack_data_parity_trn, 1 + 3 + 1 + 32, 1, parity_u32(value));
 
@@ -554,22 +560,26 @@ static void bitbang_swd_write_reg(uint8_t cmd, uint32_t value, \
uint32_t ap_delay  bitbang_swd_exchange(false, trn_ack_data_parity_trn, 1 + 3 + 1, 32 \
+ 1);  
 		int ack = buf_get_u32(trn_ack_data_parity_trn, 1, 3);
+		LOG_CUSTOM_LEVEL((check_ack && ack != SWD_ACK_OK && (retry == 0 || ack != \
SWD_ACK_WAIT)) +				? LOG_LVL_DEBUG : LOG_LVL_DEBUG_IO,
+			"%s%s %s write reg %X = %08" PRIx32,
+			check_ack ? "" : "ack ignored ",
+			ack == SWD_ACK_OK ? "OK" : ack == SWD_ACK_WAIT ? "WAIT" : ack == SWD_ACK_FAULT ? \
"FAULT" : "JUNK", +			cmd & SWD_CMD_APNDP ? "AP" : "DP",
+			(cmd & SWD_CMD_A32) >> 1,
+			buf_get_u32(trn_ack_data_parity_trn, 1 + 3 + 1, 32));
+
+		if (check_ack && ack == SWD_ACK_WAIT) {
+			swd_clear_sticky_errors();
+			continue;
+		}
 
-		LOG_DEBUG_IO("%s%s %s write reg %X = %08" PRIx32,
-			  check_ack ? "" : "ack ignored ",
-			  ack == SWD_ACK_OK ? "OK" : ack == SWD_ACK_WAIT ? "WAIT" : ack == SWD_ACK_FAULT \
                ? "FAULT" : "JUNK",
-			  cmd & SWD_CMD_APNDP ? "AP" : "DP",
-			  (cmd & SWD_CMD_A32) >> 1,
-			  buf_get_u32(trn_ack_data_parity_trn, 1 + 3 + 1, 32));
-
-		if (check_ack) {
-			if (ack == SWD_ACK_WAIT) {
-				swd_clear_sticky_errors();
-				continue;
-			} else if (ack != SWD_ACK_OK) {
-				queued_retval = swd_ack_to_error_code(ack);
-				return;
-			}
+		if (retry > 1)
+			LOG_DEBUG("SWD WAIT: retried %u times", retry);
+
+		if (check_ack && ack != SWD_ACK_OK) {
+			queued_retval = swd_ack_to_error_code(ack);
+			return;
 		}
 
 		if (cmd & SWD_CMD_APNDP)

-- 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic