aboutsummaryrefslogtreecommitdiff
path: root/src/target
diff options
context:
space:
mode:
authorHsiangkai Wang <hsiangkai@gmail.com>2013-08-27 16:10:16 +0800
committerSpencer Oliver <spen@spen-soft.co.uk>2013-09-13 19:37:23 +0000
commit9288a59aa1bad76c8ae91c00b876fe24508476fd (patch)
treec8374152da6f3d91f470d8ec2c474b1c50e69b69 /src/target
parent6d86ded4dbc7fb44cc659c6c39d6507752133c6b (diff)
downloadriscv-openocd-9288a59aa1bad76c8ae91c00b876fe24508476fd.zip
riscv-openocd-9288a59aa1bad76c8ae91c00b876fe24508476fd.tar.gz
riscv-openocd-9288a59aa1bad76c8ae91c00b876fe24508476fd.tar.bz2
nds32: support Andes profiling function
Change-Id: Ibc45ec5777d6841956c02de6b4ae8e74c2a6de37 Signed-off-by: Hsiangkai Wang <hsiangkai@gmail.com> Reviewed-on: http://openocd.zylin.com/1585 Tested-by: jenkins Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Diffstat (limited to 'src/target')
-rw-r--r--src/target/nds32.c19
-rw-r--r--src/target/nds32.h2
-rw-r--r--src/target/nds32_v3.c2
3 files changed, 23 insertions, 0 deletions
diff --git a/src/target/nds32.c b/src/target/nds32.c
index 11bb01d..49fde0c 100644
--- a/src/target/nds32.c
+++ b/src/target/nds32.c
@@ -2455,6 +2455,25 @@ int nds32_gdb_fileio_end(struct target *target, int retcode, int fileio_errno, b
return ERROR_OK;
}
+int nds32_profiling(struct target *target, uint32_t *samples,
+ uint32_t max_num_samples, uint32_t *num_samples, uint32_t seconds)
+{
+ /* sample $PC every 10 milliseconds */
+ uint32_t iteration = seconds * 100;
+ struct aice_port_s *aice = target_to_aice(target);
+ struct nds32 *nds32 = target_to_nds32(target);
+
+ if (max_num_samples < iteration)
+ iteration = max_num_samples;
+
+ int pc_regnum = nds32->register_map(nds32, PC);
+ aice->port->api->profiling(10, iteration, pc_regnum, samples, num_samples);
+
+ register_cache_invalidate(nds32->core_cache);
+
+ return ERROR_OK;
+}
+
int nds32_gdb_fileio_write_memory(struct nds32 *nds32, uint32_t address,
uint32_t size, const uint8_t *buffer)
{
diff --git a/src/target/nds32.h b/src/target/nds32.h
index 8acd915..304fc35 100644
--- a/src/target/nds32.h
+++ b/src/target/nds32.h
@@ -422,6 +422,8 @@ extern int nds32_gdb_fileio_write_memory(struct nds32 *nds32, uint32_t address,
extern int nds32_gdb_fileio_end(struct target *target, int retcode, int fileio_errno, bool ctrl_c);
extern int nds32_reset_halt(struct nds32 *nds32);
extern int nds32_login(struct nds32 *nds32);
+extern int nds32_profiling(struct target *target, uint32_t *samples,
+ uint32_t max_num_samples, uint32_t *num_samples, uint32_t seconds);
/** Convert target handle to generic Andes target state handle. */
static inline struct nds32 *target_to_nds32(struct target *target)
diff --git a/src/target/nds32_v3.c b/src/target/nds32_v3.c
index 766e5cc..5996a90 100644
--- a/src/target/nds32_v3.c
+++ b/src/target/nds32_v3.c
@@ -523,4 +523,6 @@ struct target_type nds32_v3_target = {
.get_gdb_fileio_info = nds32_get_gdb_fileio_info,
.gdb_fileio_end = nds32_gdb_fileio_end,
+
+ .profiling = nds32_profiling,
};