@@ -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) ;
0 commit comments