nds32: Add jtag scan_chain command
[fw/openocd] / src / jtag / aice / aice_interface.c
index 20f1f07f9b91d199649ad8f492ee78006e7841d8..c758bb43b9156ce800fe5b0bfb61ada034d19cbc 100644 (file)
@@ -239,6 +239,30 @@ static int aice_khz(int khz, int *jtag_speed)
        return ERROR_OK;
 }
 
+int aice_scan_jtag_chain(void)
+{
+       LOG_DEBUG("=== %s ===", __func__);
+       uint8_t num_of_idcode = 0;
+       struct target *target;
+
+       int res = aice_port->api->idcode(aice_target_id_codes, &num_of_idcode);
+       if (res != ERROR_OK) {
+               LOG_ERROR("<-- TARGET ERROR! Failed to identify AndesCore "
+                                       "JTAG Manufacture ID in the JTAG scan chain. "
+                                       "Failed to access EDM registers. -->");
+               return res;
+       }
+
+       for (uint32_t i = 0; i < num_of_idcode; i++)
+               LOG_DEBUG("id_codes[%d] = 0x%x", i, aice_target_id_codes[i]);
+
+       /* Update tap idcode */
+       for (target = all_targets; target; target = target->next)
+               target->tap->idcode = aice_target_id_codes[target->tap->abs_chain_position];
+
+       return ERROR_OK;
+}
+
 /***************************************************************************/
 /* Command handlers */
 COMMAND_HANDLER(aice_handle_aice_info_command)