This is an automated email from Gerrit.

Tarek BOCHKATI ([email protected]) just uploaded a new patch set to 
Gerrit, which you can find at http://openocd.zylin.com/5315

-- gerrit

commit 69a27c11f1224e6249c00516f5c74435427717a2
Author: Tarek BOCHKATI <[email protected]>
Date:   Fri Oct 4 15:40:52 2019 +0200

    target/arm_cti: add new 'ack' and 'channel' commands
    
    these commands have been introduced to ease the manipulation of CTI trough
    script files, these commands are:
     - $cti_name ack $event : to acknowledge a CTI event
     - $cti_name channel $operation $channel_number: to perform an operation
        on a specific channel, the possible operations are:
        gate, ungate, set, clear and pulse
    
    Change-Id: I35463867a3c85072f3776c3aeb1e5788953ec435
    Signed-off-by: Tarek BOCHKATI <[email protected]>

diff --git a/doc/openocd.texi b/doc/openocd.texi
index c5a926c..b7e35c9 100644
--- a/doc/openocd.texi
+++ b/doc/openocd.texi
@@ -8386,6 +8386,15 @@ Write @var{value} to the CTI register with the symbolic 
name @var{reg_name}.
 Print the value read from the CTI register with the symbolic name 
@var{reg_name}.
 @end deffn
 
+@deffn Command {$cti_name ack} @var{event}
+Acknowledge a CTI @var{event}.
+@end deffn
+
+@deffn Command {$cti_name channel} @var{operation} @var{channel_number}
+Perform a specific channel operation, the possible operations are:
+gate, ungate, set, clear and pulse
+@end deffn
+
 @deffn Command {$cti_name testmode} @option{on|off}
 Enable (@option{on}) or disable (@option{off}) the integration test mode
 of the CTI.
diff --git a/src/target/arm_cti.c b/src/target/arm_cti.c
index 3f063b8..b966b73 100644
--- a/src/target/arm_cti.c
+++ b/src/target/arm_cti.c
@@ -341,6 +341,63 @@ COMMAND_HANDLER(handle_cti_read)
        return ERROR_OK;
 }
 
+COMMAND_HANDLER(handle_cti_ack)
+{
+       struct arm_cti_object *obj = CMD_DATA;
+       Jim_Interp *interp = CMD_CTX->interp;
+       struct arm_cti *cti = &obj->cti;
+       uint32_t event;
+
+       if (CMD_ARGC != 1) {
+               Jim_SetResultString(interp, "Wrong numer of args", -1);
+               return ERROR_FAIL;
+       }
+
+       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], event);
+
+       int retval = arm_cti_ack_events(cti, 1 << event);
+
+
+       if (retval != ERROR_OK)
+               return retval;
+
+       return ERROR_OK;
+}
+
+COMMAND_HANDLER(handle_cti_channel)
+{
+       struct arm_cti_object *obj = CMD_DATA;
+       Jim_Interp *interp = CMD_CTX->interp;
+       struct arm_cti *cti = &obj->cti;
+       int retval = ERROR_OK;
+       uint32_t ch_num;
+
+       if (CMD_ARGC != 2) {
+               Jim_SetResultString(interp, "Wrong numer of args", -1);
+               return ERROR_FAIL;
+       }
+
+       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], ch_num);
+
+       if (!strcmp(CMD_ARGV[0], "gate"))
+               retval = arm_cti_gate_channel(cti, ch_num);
+       else if (!strcmp(CMD_ARGV[0], "ungate"))
+               retval = arm_cti_ungate_channel(cti, ch_num);
+       else if (!strcmp(CMD_ARGV[0], "pulse"))
+               retval = arm_cti_pulse_channel(cti, ch_num);
+       else if (!strcmp(CMD_ARGV[0], "set"))
+               retval = arm_cti_set_channel(cti, ch_num);
+       else if (!strcmp(CMD_ARGV[0], "clear"))
+               retval = arm_cti_clear_channel(cti, ch_num);
+       else
+               return ERROR_COMMAND_ARGUMENT_INVALID;
+
+       if (retval != ERROR_OK)
+               return retval;
+
+       return ERROR_OK;
+}
+
 static const struct command_registration cti_instance_command_handlers[] = {
        {
                .name  = "dump",
@@ -377,6 +434,21 @@ static const struct command_registration 
cti_instance_command_handlers[] = {
                .help = "read a CTI register",
                .usage = "register_name",
        },
+       {
+               .name = "ack",
+               .mode = COMMAND_EXEC,
+               .handler = handle_cti_ack,
+               .help = "acknowledge a CTI event",
+               .usage = "event",
+       },
+       {
+               .name = "channel",
+               .mode = COMMAND_EXEC,
+               .handler = handle_cti_channel,
+               .help = "do an operation on one CTI channel, possible 
operations: "
+                               "gate, ungate, set, clear and pulse",
+               .usage = "operation channel_number",
+       },
        COMMAND_REGISTRATION_DONE
 };
 

-- 


_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to