Freddie Chopin <freddie_chopin@op.pl> move files about to where they belong
[fw/openocd] / src / target / arm926ejs.c
index c959f1351386ee25216bfd57430c690a14f48314..cef7061ed13ac3e05d4c958ee96f20afaf7d21b7 100644 (file)
 #endif
 
 #include "arm926ejs.h"
-#include "jtag.h"
-#include "log.h"
 #include "time_support.h"
 
-#include <stdlib.h>
-#include <string.h>
 
 #if 0
 #define _DEBUG_INSTRUCTION_EXECUTION_
 #endif
 
 /* cli handling */
-int arm926ejs_register_commands(struct command_context_s *cmd_ctx);
-
 int arm926ejs_handle_cp15_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
 int arm926ejs_handle_cp15i_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
 int arm926ejs_handle_virt2phys_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
@@ -50,10 +44,8 @@ int arm926ejs_handle_read_mmu_command(struct command_context_s *cmd_ctx, char *c
 int arm926ejs_target_create(struct target_s *target, Jim_Interp *interp);
 int arm926ejs_init_target(struct command_context_s *cmd_ctx, struct target_s *target);
 int arm926ejs_quit(void);
-int arm926ejs_arch_state(struct target_s *target);
 int arm926ejs_read_memory(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer);
-int arm926ejs_write_memory(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer);
-int arm926ejs_soft_reset_halt(struct target_s *target);
+
 static int arm926ejs_virt2phys(struct target_s *target, u32 virtual, u32 *physical);
 static int arm926ejs_mmu(struct target_s *target, int *enabled);
 
@@ -98,9 +90,12 @@ target_type_t arm926ejs_target =
        .mmu = arm926ejs_mmu
 };
 
-
 int arm926ejs_catch_broken_irscan(u8 *captured, void *priv, scan_field_t *field)
 {
+       /* FIX!!!! this code should be reenabled. For now it does not check
+        * the queue...*/
+       return 0;
+#if 0
        /* The ARM926EJ-S' instruction register is 4 bits wide */
        u8 t = *captured & 0xf;
        u8 t2 = *field->in_check_value & 0xf;
@@ -114,6 +109,7 @@ int arm926ejs_catch_broken_irscan(u8 *captured, void *priv, scan_field_t *field)
                return ERROR_OK;
        }
        return ERROR_JTAG_QUEUE_FAILED;;
+#endif
 }
 
 #define ARM926EJS_CP15_ADDR(opcode_1, opcode_2, CRn, CRm) ((opcode_1 << 11) | (opcode_2 << 8) | (CRn << 4) | (CRm << 0))
@@ -133,7 +129,7 @@ int arm926ejs_cp15_read(target_t *target, u32 op1, u32 op2, u32 CRn, u32 CRm, u3
        buf_set_u32(address_buf, 0, 14, address);
 
        jtag_add_end_state(TAP_IDLE);
-       if((retval = arm_jtag_scann(jtag_info, 0xf)) != ERROR_OK)
+       if ((retval = arm_jtag_scann(jtag_info, 0xf)) != ERROR_OK)
        {
                return retval;
        }
@@ -142,47 +138,25 @@ int arm926ejs_cp15_read(target_t *target, u32 op1, u32 op2, u32 CRn, u32 CRm, u3
        fields[0].tap = jtag_info->tap;
        fields[0].num_bits = 32;
        fields[0].out_value = NULL;
-       fields[0].out_mask = NULL;
-       fields[0].in_value = NULL;
-       fields[0].in_check_value = NULL;
-       fields[0].in_check_mask = NULL;
-       fields[0].in_handler = NULL;
-       fields[0].in_handler_priv = NULL;
+       fields[0].in_value = (u8 *)value;
+
 
        fields[1].tap = jtag_info->tap;
        fields[1].num_bits = 1;
        fields[1].out_value = &access;
-       fields[1].out_mask = NULL;
        fields[1].in_value = &access;
-       fields[1].in_check_value = NULL;
-       fields[1].in_check_mask = NULL;
-       fields[1].in_handler = NULL;
-       fields[1].in_handler_priv = NULL;
 
        fields[2].tap = jtag_info->tap;
        fields[2].num_bits = 14;
        fields[2].out_value = address_buf;
-       fields[2].out_mask = NULL;
        fields[2].in_value = NULL;
-       fields[2].in_check_value = NULL;
-       fields[2].in_check_mask = NULL;
-       fields[2].in_handler = NULL;
-       fields[2].in_handler_priv = NULL;
 
        fields[3].tap = jtag_info->tap;
        fields[3].num_bits = 1;
        fields[3].out_value = &nr_w_buf;
-       fields[3].out_mask = NULL;
        fields[3].in_value = NULL;
-       fields[3].in_check_value = NULL;
-       fields[3].in_check_mask = NULL;
-       fields[3].in_handler = NULL;
-       fields[3].in_handler_priv = NULL;
-
-       jtag_add_dr_scan(4, fields, -1);
 
-       fields[0].in_handler_priv = value;
-       fields[0].in_handler = arm_jtag_buf_to_u32;
+       jtag_add_dr_scan(4, fields, TAP_INVALID);
 
        /*TODO: add timeout*/
        do
@@ -190,8 +164,11 @@ int arm926ejs_cp15_read(target_t *target, u32 op1, u32 op2, u32 CRn, u32 CRm, u3
                /* rescan with NOP, to wait for the access to complete */
                access = 0;
                nr_w_buf = 0;
-               jtag_add_dr_scan(4, fields, -1);
-               if((retval = jtag_execute_queue()) != ERROR_OK)
+               jtag_add_dr_scan(4, fields, TAP_INVALID);
+
+               jtag_add_callback(arm_le_to_h_u32, (u8 *)value);
+
+               if ((retval = jtag_execute_queue()) != ERROR_OK)
                {
                        return retval;
                }
@@ -223,7 +200,7 @@ int arm926ejs_cp15_write(target_t *target, u32 op1, u32 op2, u32 CRn, u32 CRm, u
        buf_set_u32(value_buf, 0, 32, value);
 
        jtag_add_end_state(TAP_IDLE);
-       if((retval = arm_jtag_scann(jtag_info, 0xf)) != ERROR_OK)
+       if ((retval = arm_jtag_scann(jtag_info, 0xf)) != ERROR_OK)
        {
                return retval;
        }
@@ -232,52 +209,32 @@ int arm926ejs_cp15_write(target_t *target, u32 op1, u32 op2, u32 CRn, u32 CRm, u
        fields[0].tap = jtag_info->tap;
        fields[0].num_bits = 32;
        fields[0].out_value = value_buf;
-       fields[0].out_mask = NULL;
        fields[0].in_value = NULL;
-       fields[0].in_check_value = NULL;
-       fields[0].in_check_mask = NULL;
-       fields[0].in_handler = NULL;
-       fields[0].in_handler_priv = NULL;
 
        fields[1].tap = jtag_info->tap;
        fields[1].num_bits = 1;
        fields[1].out_value = &access;
-       fields[1].out_mask = NULL;
        fields[1].in_value = &access;
-       fields[1].in_check_value = NULL;
-       fields[1].in_check_mask = NULL;
-       fields[1].in_handler = NULL;
-       fields[1].in_handler_priv = NULL;
 
        fields[2].tap = jtag_info->tap;
        fields[2].num_bits = 14;
        fields[2].out_value = address_buf;
-       fields[2].out_mask = NULL;
        fields[2].in_value = NULL;
-       fields[2].in_check_value = NULL;
-       fields[2].in_check_mask = NULL;
-       fields[2].in_handler = NULL;
-       fields[2].in_handler_priv = NULL;
 
        fields[3].tap = jtag_info->tap;
        fields[3].num_bits = 1;
        fields[3].out_value = &nr_w_buf;
-       fields[3].out_mask = NULL;
        fields[3].in_value = NULL;
-       fields[3].in_check_value = NULL;
-       fields[3].in_check_mask = NULL;
-       fields[3].in_handler = NULL;
-       fields[3].in_handler_priv = NULL;
 
-       jtag_add_dr_scan(4, fields, -1);
+       jtag_add_dr_scan(4, fields, TAP_INVALID);
        /*TODO: add timeout*/
        do
        {
                /* rescan with NOP, to wait for the access to complete */
                access = 0;
                nr_w_buf = 0;
-               jtag_add_dr_scan(4, fields, -1);
-               if((retval = jtag_execute_queue()) != ERROR_OK)
+               jtag_add_dr_scan(4, fields, TAP_INVALID);
+               if ((retval = jtag_execute_queue()) != ERROR_OK)
                {
                        return retval;
                }
@@ -498,7 +455,6 @@ void arm926ejs_post_debug_entry(target_t *target)
        LOG_DEBUG("D FSR: 0x%8.8x, D FAR: 0x%8.8x, I FSR: 0x%8.8x",
                arm926ejs->d_fsr, arm926ejs->d_far, arm926ejs->i_fsr);
 
-
        u32 cache_dbg_ctrl;
 
        /* read-modify-write CP15 cache debug control register
@@ -610,7 +566,7 @@ int arm926ejs_soft_reset_halt(struct target_s *target)
        arm926ejs_common_t *arm926ejs = arm9tdmi->arch_info;
        reg_t *dbg_stat = &arm7_9->eice_cache->reg_list[EICE_DBG_STAT];
 
-       if((retval = target_halt(target)) != ERROR_OK)
+       if ((retval = target_halt(target)) != ERROR_OK)
        {
                return retval;
        }
@@ -622,7 +578,7 @@ int arm926ejs_soft_reset_halt(struct target_s *target)
                if (buf_get_u32(dbg_stat->value, EICE_DBG_STATUS_DBGACK, 1) == 0)
                {
                        embeddedice_read_reg(dbg_stat);
-                       if((retval = jtag_execute_queue()) != ERROR_OK)
+                       if ((retval = jtag_execute_queue()) != ERROR_OK)
                        {
                                return retval;
                        }
@@ -666,7 +622,6 @@ int arm926ejs_soft_reset_halt(struct target_s *target)
        arm926ejs->armv4_5_mmu.armv4_5_cache.i_cache_enabled = 0;
 
        return target_call_event_callbacks(target, TARGET_EVENT_HALTED);
-
 }
 
 int arm926ejs_write_memory(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer)
@@ -705,23 +660,21 @@ int arm926ejs_init_target(struct command_context_s *cmd_ctx, struct target_s *ta
        arm9tdmi_init_target(cmd_ctx, target);
 
        return ERROR_OK;
-
 }
 
 int arm926ejs_quit(void)
 {
-
        return ERROR_OK;
 }
 
-int arm926ejs_init_arch_info(target_t *target, arm926ejs_common_t *arm926ejs, jtag_tap_t *tap, const char *variant)
+int arm926ejs_init_arch_info(target_t *target, arm926ejs_common_t *arm926ejs, jtag_tap_t *tap)
 {
        arm9tdmi_common_t *arm9tdmi = &arm926ejs->arm9tdmi_common;
        arm7_9_common_t *arm7_9 = &arm9tdmi->arm7_9_common;
 
        /* initialize arm9tdmi specific info (including arm7_9 and armv4_5)
         */
-       arm9tdmi_init_arch_info(target, arm9tdmi, tap, variant);
+       arm9tdmi_init_arch_info(target, arm9tdmi, tap);
 
        arm9tdmi->arch_info = arm926ejs;
        arm926ejs->common_magic = ARM926EJS_COMMON_MAGIC;
@@ -755,7 +708,7 @@ int arm926ejs_target_create(struct target_s *target, Jim_Interp *interp)
 {
        arm926ejs_common_t *arm926ejs = calloc(1,sizeof(arm926ejs_common_t));
 
-       arm926ejs_init_arch_info(target, arm926ejs, target->tap, target->variant);
+       arm926ejs_init_arch_info(target, arm926ejs, target->tap);
 
        return ERROR_OK;
 }
@@ -830,7 +783,7 @@ int arm926ejs_handle_cp15_command(struct command_context_s *cmd_ctx, char *cmd,
                        command_print(cmd_ctx, "couldn't access register");
                        return ERROR_OK;
                }
-               if((retval = jtag_execute_queue()) != ERROR_OK)
+               if ((retval = jtag_execute_queue()) != ERROR_OK)
                {
                        return retval;
                }
@@ -945,6 +898,7 @@ int arm926ejs_handle_mw_phys_command(command_context_t *cmd_ctx, char *cmd, char
 
        return armv4_5_mmu_handle_mw_phys_command(cmd_ctx, cmd, args, argc, target, &arm926ejs->armv4_5_mmu);
 }
+
 static int arm926ejs_virt2phys(struct target_s *target, u32 virtual, u32 *physical)
 {
        int retval;