diff options
author | Hsiangkai Wang <hsiangkai@gmail.com> | 2013-08-27 16:10:16 +0800 |
---|---|---|
committer | Spencer Oliver <spen@spen-soft.co.uk> | 2013-09-13 19:37:23 +0000 |
commit | 9288a59aa1bad76c8ae91c00b876fe24508476fd (patch) | |
tree | c8374152da6f3d91f470d8ec2c474b1c50e69b69 /src/target | |
parent | 6d86ded4dbc7fb44cc659c6c39d6507752133c6b (diff) | |
download | riscv-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.c | 19 | ||||
-rw-r--r-- | src/target/nds32.h | 2 | ||||
-rw-r--r-- | src/target/nds32_v3.c | 2 |
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, }; |