Skip to content

Commit 7dabe97

Browse files
committed
Clean up a bit
1 parent 0e23f30 commit 7dabe97

File tree

2 files changed

+20
-22
lines changed

2 files changed

+20
-22
lines changed

src/dap.rs

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -802,7 +802,8 @@ where
802802
resp: &mut ResponseWriter,
803803
) {
804804
let idx = req.next_u8();
805-
let mut ntransfers = req.next_u8();
805+
let transfer_count = req.next_u8();
806+
let mut ntransfers = transfer_count;
806807

807808
resp.skip(2);
808809

@@ -829,6 +830,7 @@ where
829830
let wait_retries = transfer_config.wait_retries;
830831

831832
while ntransfers > 0 {
833+
debug!("JTAG transfer {}/{}", response_count + 1, transfer_count);
832834
let request_value = jtag::TransferInfo::from(req.next_u8());
833835
ntransfers -= 1;
834836
let request_ir = if request_value.ap_ndp == APnDP::AP {
@@ -1016,24 +1018,18 @@ where
10161018
if matches!(response_value, TransferResult::Ok(_)) {
10171019
// Select JTAG chain
10181020
if ir != JTAG_DPACC {
1019-
ir = JTAG_DPACC;
10201021
jtag.shift_ir(ir);
10211022
}
1022-
if post_read {
1023-
// Read previous data
10241023

1025-
response_value =
1026-
transfer_with_retry(jtag, read_rdbuff, transfer_config, 0, wait_retries);
1024+
// Check last write, or read previous read's result.
1025+
response_value =
1026+
transfer_with_retry(jtag, read_rdbuff, transfer_config, 0, wait_retries);
10271027

1028+
if post_read {
1029+
// Read previous data
10281030
if let TransferResult::Ok(data) = response_value {
10291031
resp.write_u32(data);
1030-
} else {
1031-
// goto end
10321032
}
1033-
} else {
1034-
// Check last write
1035-
response_value =
1036-
transfer_with_retry(jtag, read_rdbuff, transfer_config, 0, wait_retries);
10371033
}
10381034
}
10391035

@@ -1284,13 +1280,15 @@ fn transfer_with_retry<DEPS>(
12841280
mut retry: usize,
12851281
) -> jtag::TransferResult {
12861282
let mut response_value;
1283+
1284+
if request_value.r_nw == RnW::W {
1285+
debug!("Transfer: {:?} ({:x})", request_value, data);
1286+
} else {
1287+
debug!("Transfer: {:?}", request_value);
1288+
}
1289+
12871290
loop {
1288-
// Read register until its value matches or retry counter expires
1289-
if request_value.r_nw == RnW::W {
1290-
debug!("Transfer: {:?} ({:x})", request_value, data);
1291-
} else {
1292-
debug!("Transfer: {:?}", request_value);
1293-
}
1291+
// Read register until retry counter expires or the read returns !Wait
12941292
response_value = jtag.transfer(request_value, transfer_config, data);
12951293
if response_value != jtag::TransferResult::Wait || retry == 0 {
12961294
debug!("Transfer result: {:x}", response_value);

src/jtag.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
22
dap::{self, TransferConfig},
3-
swd::{APnDP, RnW},
3+
swd::{APnDP, DPRegister, RnW},
44
};
55

66
/// Describes a JTAG sequence request.
@@ -44,7 +44,7 @@ impl From<u8> for SequenceInfo {
4444
pub struct TransferInfo {
4545
pub ap_ndp: APnDP,
4646
pub r_nw: RnW,
47-
pub a2a3: u8,
47+
pub a2a3: DPRegister,
4848
pub match_value: bool,
4949
pub match_mask: bool,
5050
pub timestamp: bool,
@@ -71,7 +71,7 @@ impl From<u8> for TransferInfo {
7171
} else {
7272
RnW::W
7373
},
74-
a2a3: (byte & (DAP_TRANSFER_A2 | DAP_TRANSFER_A3)) >> 2,
74+
a2a3: DPRegister::try_from((byte & (DAP_TRANSFER_A2 | DAP_TRANSFER_A3)) >> 2).unwrap(),
7575
match_value: byte & DAP_TRANSFER_MATCH_VALUE != 0,
7676
match_mask: byte & DAP_TRANSFER_MATCH_MASK != 0,
7777
timestamp: byte & DAP_TRANSFER_TIMESTAMP != 0,
@@ -302,7 +302,7 @@ pub trait Jtag<DEPS>: From<DEPS> {
302302
capture: true,
303303
tms: false,
304304
},
305-
&[(req.a2a3 << 1) | req.r_nw as u8],
305+
&[((req.a2a3 as u8) << 1) | req.r_nw as u8],
306306
core::slice::from_mut(&mut ack),
307307
);
308308

0 commit comments

Comments
 (0)