dsp5680xx - mark erase after unlocking flash
[fw/openocd] / src / target / arm11_dbgtap.c
index 9ecd08f78c3932e974e1ed2f1f8c7342566754b5..a5dc37687c95ccbd139a74f85a5b9b89ecc1f5a9 100644 (file)
@@ -199,11 +199,17 @@ int arm11_add_debug_SCAN_N(struct arm11_common *arm11,
         * NOTE:  the ITRSEL instruction fakes SCREG changing;
         * but leaves its actual value unchanged.
         */
+#if 0
+       // FIX!!! the optimization below is broken because we do not
+       // invalidate the cur_scan_chain upon a TRST/TMS. See arm_jtag.c
+       // for example on how to invalidate cur_scan_chain. Tested patches gladly
+       // accepted!
        if (arm11->jtag_info.cur_scan_chain == chain) {
                JTAG_DEBUG("SCREG <= %d SKIPPED", chain);
                return jtag_add_statemove((state == ARM11_TAP_DEFAULT)
                                        ? TAP_DRPAUSE : state);
        }
+#endif
        JTAG_DEBUG("SCREG <= %d", chain);
 
        arm11_add_IR(arm11, ARM11_SCAN_N, ARM11_TAP_DEFAULT);
@@ -679,7 +685,7 @@ int arm11_run_instr_data_to_core_noack(struct arm11_common * arm11, uint32_t opc
 
        int retval = arm11_run_instr_data_to_core_noack_inner(arm11->arm.target->tap, opcode, data, count);
 
-       if (retval != ERROR_FAIL)
+       if (retval != ERROR_OK)
                return retval;
 
        arm11_add_IR(arm11, ARM11_INTEST, ARM11_TAP_DEFAULT);
@@ -964,7 +970,7 @@ int arm11_sc7_run(struct arm11_common * arm11, struct arm11_sc7_action * actions
  * \param arm11                Target state variable.
  *
  */
-void arm11_sc7_clear_vbw(struct arm11_common * arm11)
+int arm11_sc7_clear_vbw(struct arm11_common * arm11)
 {
        size_t clear_bw_size = arm11->brp + 1;
        struct arm11_sc7_action         *clear_bw = malloc(sizeof(struct arm11_sc7_action) * clear_bw_size);
@@ -981,9 +987,12 @@ void arm11_sc7_clear_vbw(struct arm11_common * arm11)
 
        (pos++)->address = ARM11_SC7_VCR;
 
-       arm11_sc7_run(arm11, clear_bw, clear_bw_size);
+       int retval;
+       retval = arm11_sc7_run(arm11, clear_bw, clear_bw_size);
 
        free (clear_bw);
+
+       return retval;
 }
 
 /** Write VCR register
@@ -991,7 +1000,7 @@ void arm11_sc7_clear_vbw(struct arm11_common * arm11)
  * \param arm11                Target state variable.
  * \param value                Value to be written
  */
-void arm11_sc7_set_vcr(struct arm11_common * arm11, uint32_t value)
+int arm11_sc7_set_vcr(struct arm11_common * arm11, uint32_t value)
 {
        struct arm11_sc7_action         set_vcr;
 
@@ -999,7 +1008,7 @@ void arm11_sc7_set_vcr(struct arm11_common * arm11, uint32_t value)
        set_vcr.address         = ARM11_SC7_VCR;
        set_vcr.value           = value;
 
-       arm11_sc7_run(arm11, &set_vcr, 1);
+       return arm11_sc7_run(arm11, &set_vcr, 1);
 }
 
 
@@ -1042,10 +1051,6 @@ static inline struct arm11_common *dpm_to_arm11(struct arm_dpm *dpm)
 
 static int arm11_dpm_prepare(struct arm_dpm *dpm)
 {
-       struct arm11_common *arm11 = dpm_to_arm11(dpm);
-
-       arm11 = container_of(dpm->arm, struct arm11_common, arm);
-
        return arm11_run_instr_data_prepare(dpm_to_arm11(dpm));
 }