# HG changeset patch # User Space Falcon # Date 1441700322 0 # Node ID f50c71442d50b9caa1212a834e956a5d0f37f865 # Parent 42719fa3e6af9e51607b322076d15750faa6a6fc etmsync: die ID read implemented diff -r 42719fa3e6af -r f50c71442d50 rvinterf/etmsync/fscmdtab.c --- a/rvinterf/etmsync/fscmdtab.c Tue Sep 08 07:52:29 2015 +0000 +++ b/rvinterf/etmsync/fscmdtab.c Tue Sep 08 08:18:42 2015 +0000 @@ -7,6 +7,7 @@ extern int cmd_cpout(); extern int cmd_cpout_file(); extern int cmd_delete(); +extern int cmd_dieid(); extern int cmd_exec(); extern int cmd_exit(); extern int cmd_fd(); @@ -32,6 +33,7 @@ {"cpout", 2, 2, cmd_cpout}, {"cpout-file", 2, 2, cmd_cpout_file}, {"delete", 1, 1, cmd_delete}, + {"dieid", 0, 0, cmd_dieid}, {"exec", 1, 1, cmd_exec}, {"exit", 0, 0, cmd_exit}, {"fd", 2, 3, cmd_fd}, diff -r 42719fa3e6af -r f50c71442d50 rvinterf/etmsync/memcmd.c --- a/rvinterf/etmsync/memcmd.c Tue Sep 08 07:52:29 2015 +0000 +++ b/rvinterf/etmsync/memcmd.c Tue Sep 08 08:18:42 2015 +0000 @@ -12,7 +12,7 @@ #include "localtypes.h" #include "exitcodes.h" -void +static void memdump_line(addr, buf, len) u32 addr; u_char *buf; @@ -57,3 +57,16 @@ } return(0); } + +cmd_dieid() +{ + u_char buf[8]; + int rc; + + rc = do_dieid_read(buf); + if (rc) + return(rc); + printf("%02X %02X %02X %02X %02X %02X %02X %02X\n", buf[0], buf[1], + buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]); + return(0); +} diff -r 42719fa3e6af -r f50c71442d50 rvinterf/etmsync/memops.c --- a/rvinterf/etmsync/memops.c Tue Sep 08 07:52:29 2015 +0000 +++ b/rvinterf/etmsync/memops.c Tue Sep 08 08:18:42 2015 +0000 @@ -54,3 +54,31 @@ bcopy(rvi_msg + 6, databuf, nbytes); return(0); } + +do_dieid_read(databuf) + u_char *databuf; +{ + u_char cmdpkt[4]; + int rc; + + cmdpkt[1] = ETM_CORE; + cmdpkt[2] = TMCORE_OPC_DIEID; + rc = etm_pkt_exch(cmdpkt, 2); + if (rc) + return(rc); + if (rvi_msg[3]) { + printf("ETM error response to die ID read request: 0x%02X\n", + rvi_msg[3]); + return(ERROR_TARGET); + } + if (rvi_msg_len != 14) { + printf("error: die ID read response has wrong length\n"); + return(ERROR_TARGET); + } + if (rvi_msg[4] != TMCORE_OPC_DIEID) { + printf("error: die ID read response has wrong opcode\n"); + return(ERROR_TARGET); + } + bcopy(rvi_msg + 5, databuf, 8); + return(0); +}