fix irlen handling
authorRodrigo L. Rosa <rodrigorosa.LG@gmail.com>
Tue, 30 Aug 2011 21:46:20 +0000 (14:46 -0700)
committerRodrigo L. Rosa <rodrigorosa.LG@gmail.com>
Tue, 30 Aug 2011 22:17:00 +0000 (15:17 -0700)
sometimes the master tap will be enabled, since tap switching is required during halt/lock/unlocking procedures.
now irscan handles this, avoiding unnecessary warnings and preventing errors.

src/target/dsp5680xx.c

index 675dfce51b5ab3f52c0f5bc08902a1ee85047d8f..7a1f9902214ad3b86f80bd489a1202a4fff68085 100644 (file)
@@ -90,12 +90,17 @@ static int dsp5680xx_irscan(struct target * target, uint32_t * data_to_shift_int
        err_check(retval,"Invalid tap");
   }
   if (ir_len != target->tap->ir_length){
-    LOG_WARNING("%s: Invalid ir_len of core tap. If you are removing protection on flash then do not worry about this warninig.",__FUNCTION__);
-    //return ERROR_FAIL;//TODO this was commented out to enable unlocking using the master tap. did not find a way to enable the master tap without using tcl.
+    if(target->tap->enabled){
+      retval = ERROR_FAIL;
+      err_check(retval,"Invalid irlen");
+    }else{
+      struct jtag_tap * master_tap = jtag_tap_by_string("dsp568013.chp");
+      if((master_tap == NULL) || ((master_tap->enabled) && (ir_len != DSP5680XX_JTAG_MASTER_TAP_IRLEN))){
+        retval = ERROR_FAIL;
+        err_check(retval,"Invalid irlen");
+      }
+    }
   }
-  //TODO what values of len are valid for jtag_add_plain_ir_scan?
-  //can i send as many bits as i want?
-  //is the casting necessary?
   jtag_add_plain_ir_scan(ir_len,(uint8_t *)data_to_shift_into_ir,(uint8_t *)data_shifted_out_of_ir, TAP_IDLE);
   if(dsp5680xx_context.flush){
     retval = dsp5680xx_execute_queue();