- rename log functions to stop conflicts under win32 (wingdi)
[fw/openocd] / src / target / arm966e.c
index 01d01d756c72eb2ab82860d00ce142ef96112f2b..0201ca56c227937bc609304b4d6886c7bb0e9e42 100644 (file)
@@ -43,8 +43,6 @@
 int arm966e_register_commands(struct command_context_s *cmd_ctx);
 
 /* forward declarations */
-int arm966e_deassert_reset(target_t *target);
-int arm966e_assert_reset(target_t *target);
 int arm966e_target_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct target_s *target);
 int arm966e_init_target(struct command_context_s *cmd_ctx, struct target_s *target);
 int arm966e_quit(void);
@@ -56,12 +54,14 @@ target_type_t arm966e_target =
        .poll = arm7_9_poll,
        .arch_state = armv4_5_arch_state,
 
+       .target_request_data = arm7_9_target_request_data,
+
        .halt = arm7_9_halt,
        .resume = arm7_9_resume,
        .step = arm7_9_step,
 
-       .assert_reset = arm966e_assert_reset,
-       .deassert_reset = arm966e_deassert_reset,
+       .assert_reset = arm7_9_assert_reset,
+       .deassert_reset = arm7_9_deassert_reset,
        .soft_reset_halt = arm7_9_soft_reset_halt,
        .prepare_reset_halt = arm7_9_prepare_reset_halt,
 
@@ -70,7 +70,8 @@ target_type_t arm966e_target =
        .read_memory = arm7_9_read_memory,
        .write_memory = arm7_9_write_memory,
        .bulk_write_memory = arm7_9_bulk_write_memory,
-
+       .checksum_memory = arm7_9_checksum_memory,
+       
        .run_algorithm = armv4_5_run_algorithm,
        
        .add_breakpoint = arm7_9_add_breakpoint,
@@ -84,77 +85,6 @@ target_type_t arm966e_target =
        .quit = arm966e_quit,
 };
 
-int arm966e_assert_reset(target_t *target)
-{
-       int retval;
-       
-       DEBUG("target->state: %s", target_state_strings[target->state]);
-       
-       if (target->state == TARGET_HALTED || target->state == TARGET_UNKNOWN)
-       {
-               /* assert SRST and TRST */
-               /* system would get ouf sync if we didn't reset test-logic, too */
-               if ((retval = jtag_add_reset(1, 1)) != ERROR_OK)
-               {
-                       if (retval == ERROR_JTAG_RESET_CANT_SRST)
-                       {
-                               WARNING("can't assert srst");
-                               return retval;
-                       }
-                       else
-                       {
-                               ERROR("unknown error");
-                               exit(-1);
-                       }
-               }
-               jtag_add_sleep(5000);
-               if ((retval = jtag_add_reset(0, 1)) != ERROR_OK)
-               {
-                       if (retval == ERROR_JTAG_RESET_WOULD_ASSERT_TRST)
-                       {
-                               WARNING("srst resets test logic, too");
-                               retval = jtag_add_reset(1, 1);
-                       }
-               }
-       }
-       else
-       {
-               if ((retval = jtag_add_reset(0, 1)) != ERROR_OK)
-               {
-                       if (retval == ERROR_JTAG_RESET_WOULD_ASSERT_TRST)
-                       {
-                               WARNING("srst resets test logic, too");
-                               retval = jtag_add_reset(1, 1);
-                       }
-                       
-                       if (retval == ERROR_JTAG_RESET_CANT_SRST)
-                       {
-                               WARNING("can't assert srst");
-                               return retval;
-                       }
-                       else if (retval != ERROR_OK)
-                       {
-                               ERROR("unknown error");
-                               exit(-1);
-                       }
-               }
-       }
-       
-       target->state = TARGET_RESET;
-       jtag_add_sleep(50000);
-       
-       armv4_5_invalidate_core_regs(target);
-       
-       return ERROR_OK;
-}
-
-int arm966e_deassert_reset(target_t *target)
-{
-       arm7_9_deassert_reset( target );
-       
-       return ERROR_OK;
-}
-
 int arm966e_init_target(struct command_context_s *cmd_ctx, struct target_s *target)
 {
        arm9tdmi_init_target(cmd_ctx, target);
@@ -195,10 +125,11 @@ int arm966e_target_command(struct command_context_s *cmd_ctx, char *cmd, char **
        int chain_pos;
        char *variant = NULL;
        arm966e_common_t *arm966e = malloc(sizeof(arm966e_common_t));
+       memset(arm966e, 0, sizeof(*arm966e));
        
        if (argc < 4)
        {
-               ERROR("'target arm966e' requires at least one additional argument");
+               LOG_ERROR("'target arm966e' requires at least one additional argument");
                exit(-1);
        }
        
@@ -207,7 +138,7 @@ int arm966e_target_command(struct command_context_s *cmd_ctx, char *cmd, char **
        if (argc >= 5)
                variant = args[4];
        
-       DEBUG("chain_pos: %i, variant: %s", chain_pos, variant);
+       LOG_DEBUG("chain_pos: %i, variant: %s", chain_pos, variant);
        
        arm966e_init_arch_info(target, arm966e, chain_pos, variant);
 
@@ -295,11 +226,17 @@ int arm966e_read_cp15(target_t *target, int reg_addr, u32 *value)
        fields[2].in_handler = NULL;
        fields[2].in_handler_priv = NULL;
        
-       jtag_add_dr_scan(3, fields, -1, NULL);
+       jtag_add_dr_scan(3, fields, -1);
 
-       fields[0].in_value = (u8*)value;
+       fields[0].in_handler_priv = value;
+       fields[0].in_handler = arm_jtag_buf_to_u32;
 
-       jtag_add_dr_scan(3, fields, -1, NULL);
+       jtag_add_dr_scan(3, fields, -1);
+
+#ifdef _DEBUG_INSTRUCTION_EXECUTION_
+       jtag_execute_queue();
+       LOG_DEBUG("addr: 0x%x value: %8.8x", reg_addr, *value);
+#endif
 
        return ERROR_OK;
 }
@@ -312,6 +249,9 @@ int arm966e_write_cp15(target_t *target, int reg_addr, u32 value)
        scan_field_t fields[3];
        u8 reg_addr_buf = reg_addr & 0x3f;
        u8 nr_w_buf = 1;
+       u8 value_buf[4];
+       
+       buf_set_u32(value_buf, 0, 32, value);
        
        jtag_add_end_state(TAP_RTI);
        arm_jtag_scann(jtag_info, 0xf);
@@ -319,7 +259,7 @@ int arm966e_write_cp15(target_t *target, int reg_addr, u32 value)
 
        fields[0].device = jtag_info->chain_pos;
        fields[0].num_bits = 32;
-       fields[0].out_value = (u8*)&value;
+       fields[0].out_value = value_buf;
        fields[0].out_mask = NULL;
        fields[0].in_value = NULL;
        fields[0].in_check_value = NULL;
@@ -347,7 +287,11 @@ int arm966e_write_cp15(target_t *target, int reg_addr, u32 value)
        fields[2].in_handler = NULL;
        fields[2].in_handler_priv = NULL;
        
-       jtag_add_dr_scan(3, fields, -1, NULL);
+       jtag_add_dr_scan(3, fields, -1);
+
+#ifdef _DEBUG_INSTRUCTION_EXECUTION_
+       LOG_DEBUG("addr: 0x%x value: %8.8x", reg_addr, value);
+#endif
 
        return ERROR_OK;
 }
@@ -413,7 +357,7 @@ int arm966e_register_commands(struct command_context_s *cmd_ctx)
        int retval;
        command_t *arm966e_cmd;
        
-       retval = arm7_9_register_commands(cmd_ctx);
+       retval = arm9tdmi_register_commands(cmd_ctx);
        arm966e_cmd = register_command(cmd_ctx, NULL, "arm966e", NULL, COMMAND_ANY, "arm966e specific commands");
        register_command(cmd_ctx, arm966e_cmd, "cp15", arm966e_handle_cp15_command, COMMAND_EXEC, "display/modify cp15 register <num> [value]");