More fixes thanks to Kees Jongenburger
[fw/openocd] / src / target / arm9tdmi.c
index 69e9b79767ee6446f4abd4fd2732d2abb4a14966..70ee62390f2eae5917705effa23980085fb7e930 100644 (file)
@@ -5,6 +5,9 @@
  *   Copyright (C) 2008 by Spencer Oliver                                  *
  *   spen@spen-soft.co.uk                                                  *
  *                                                                         *
+ *   Copyright (C) 2008 by Hongtao Zheng                                   *
+ *   hontor@126.com                                                        *
+ *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
  *   the Free Software Foundation; either version 2 of the License, or     *
@@ -124,7 +127,7 @@ int arm9tdmi_examine_debug_reason(target_t *target)
 
                jtag_add_end_state(TAP_PD);
 
-               fields[0].device = arm7_9->jtag_info.chain_pos;
+               fields[0].tap = arm7_9->jtag_info.tap;
                fields[0].num_bits = 32;
                fields[0].out_value = NULL;
                fields[0].out_mask = NULL;
@@ -134,7 +137,7 @@ int arm9tdmi_examine_debug_reason(target_t *target)
                fields[0].in_handler = NULL;
                fields[0].in_handler_priv = NULL;
                
-               fields[1].device = arm7_9->jtag_info.chain_pos;
+               fields[1].tap = arm7_9->jtag_info.tap;
                fields[1].num_bits = 3;
                fields[1].out_value = NULL;
                fields[1].out_mask = NULL;
@@ -144,7 +147,7 @@ int arm9tdmi_examine_debug_reason(target_t *target)
                fields[1].in_handler = NULL;
                fields[1].in_handler_priv = NULL;
                
-               fields[2].device = arm7_9->jtag_info.chain_pos;
+               fields[2].tap = arm7_9->jtag_info.tap;
                fields[2].num_bits = 32;
                fields[2].out_value = NULL;
                fields[2].out_mask = NULL;
@@ -212,7 +215,7 @@ int arm9tdmi_clock_out(arm_jtag_t *jtag_info, u32 instr, u32 out, u32 *in, int s
        
        arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL);
                
-       fields[0].device = jtag_info->chain_pos;
+       fields[0].tap = jtag_info->tap;
        fields[0].num_bits = 32;
        fields[0].out_value = out_buf;
        fields[0].out_mask = NULL;
@@ -230,7 +233,7 @@ int arm9tdmi_clock_out(arm_jtag_t *jtag_info, u32 instr, u32 out, u32 *in, int s
        fields[0].in_check_value = NULL;
        fields[0].in_check_mask = NULL;
        
-       fields[1].device = jtag_info->chain_pos;
+       fields[1].tap = jtag_info->tap;
        fields[1].num_bits = 3;
        fields[1].out_value = &sysspeed_buf;
        fields[1].out_mask = NULL;
@@ -240,7 +243,7 @@ int arm9tdmi_clock_out(arm_jtag_t *jtag_info, u32 instr, u32 out, u32 *in, int s
        fields[1].in_handler = NULL;
        fields[1].in_handler_priv = NULL;
                
-       fields[2].device = jtag_info->chain_pos;
+       fields[2].tap = jtag_info->tap;
        fields[2].num_bits = 32;
        fields[2].out_value = instr_buf;
        fields[2].out_mask = NULL;
@@ -287,7 +290,7 @@ int arm9tdmi_clock_data_in(arm_jtag_t *jtag_info, u32 *in)
        
        arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL);
                
-       fields[0].device = jtag_info->chain_pos;
+       fields[0].tap = jtag_info->tap;
        fields[0].num_bits = 32;
        fields[0].out_value = NULL;
        fields[0].out_mask = NULL;
@@ -297,7 +300,7 @@ int arm9tdmi_clock_data_in(arm_jtag_t *jtag_info, u32 *in)
        fields[0].in_check_value = NULL;
        fields[0].in_check_mask = NULL;
        
-       fields[1].device = jtag_info->chain_pos;
+       fields[1].tap = jtag_info->tap;
        fields[1].num_bits = 3;
        fields[1].out_value = NULL;
        fields[1].out_mask = NULL;
@@ -307,7 +310,7 @@ int arm9tdmi_clock_data_in(arm_jtag_t *jtag_info, u32 *in)
        fields[1].in_check_value = NULL;
        fields[1].in_check_mask = NULL;
 
-       fields[2].device = jtag_info->chain_pos;
+       fields[2].tap = jtag_info->tap;
        fields[2].num_bits = 32;
        fields[2].out_value = NULL;
        fields[2].out_mask = NULL;
@@ -359,7 +362,7 @@ int arm9tdmi_clock_data_in_endianness(arm_jtag_t *jtag_info, void *in, int size,
        
        arm_jtag_set_instr(jtag_info, jtag_info->intest_instr, NULL);
                
-       fields[0].device = jtag_info->chain_pos;
+       fields[0].tap = jtag_info->tap;
        fields[0].num_bits = 32;
        fields[0].out_value = NULL;
        fields[0].out_mask = NULL;
@@ -380,7 +383,7 @@ int arm9tdmi_clock_data_in_endianness(arm_jtag_t *jtag_info, void *in, int size,
        fields[0].in_check_value = NULL;
        fields[0].in_check_mask = NULL;
        
-       fields[1].device = jtag_info->chain_pos;
+       fields[1].tap = jtag_info->tap;
        fields[1].num_bits = 3;
        fields[1].out_value = NULL;
        fields[1].out_mask = NULL;
@@ -390,7 +393,7 @@ int arm9tdmi_clock_data_in_endianness(arm_jtag_t *jtag_info, void *in, int size,
        fields[1].in_check_value = NULL;
        fields[1].in_check_mask = NULL;
 
-       fields[2].device = jtag_info->chain_pos;
+       fields[2].tap = jtag_info->tap;
        fields[2].num_bits = 32;
        fields[2].out_value = NULL;
        fields[2].out_mask = NULL;
@@ -841,7 +844,7 @@ void arm9tdmi_branch_resume_thumb(target_t *target)
 
 }
 
-void arm9tdmi_enable_single_step(target_t *target)
+void arm9tdmi_enable_single_step(target_t *target, u32 next_pc)
 {
        /* get pointers to arch-specific information */
        armv4_5_common_t *armv4_5 = target->arch_info;
@@ -854,7 +857,7 @@ void arm9tdmi_enable_single_step(target_t *target)
        }
        else
        {
-               arm7_9_enable_eice_step(target);
+               arm7_9_enable_eice_step(target, next_pc);
        }
 }
 
@@ -938,7 +941,7 @@ int arm9tdmi_quit(void)
        return ERROR_OK;
 }
 
-int arm9tdmi_init_arch_info(target_t *target, arm9tdmi_common_t *arm9tdmi, int chain_pos, const char *variant)
+int arm9tdmi_init_arch_info(target_t *target, arm9tdmi_common_t *arm9tdmi, jtag_tap_t *tap, const char *variant)
 {
        armv4_5_common_t *armv4_5;
        arm7_9_common_t *arm7_9;
@@ -947,7 +950,7 @@ int arm9tdmi_init_arch_info(target_t *target, arm9tdmi_common_t *arm9tdmi, int c
        armv4_5 = &arm7_9->armv4_5_common;
        
        /* prepare JTAG information for the new target */
-       arm7_9->jtag_info.chain_pos = chain_pos;
+       arm7_9->jtag_info.tap = tap;
        arm7_9->jtag_info.scann_size = 5;
        
        /* register arch-specific functions */
@@ -1048,7 +1051,7 @@ int arm9tdmi_target_create(struct target_s *target, Jim_Interp *interp)
 {
        arm9tdmi_common_t *arm9tdmi = calloc(1,sizeof(arm9tdmi_common_t));
 
-       arm9tdmi_init_arch_info(target, arm9tdmi, target->chain_position, target->variant);
+       arm9tdmi_init_arch_info(target, arm9tdmi, target->tap, target->variant);
        
        return ERROR_OK;
 }