diff options
author | Heinrich Schuchardt <heinrich.schuchardt@canonical.com> | 2024-08-11 16:41:23 +0200 |
---|---|---|
committer | Leo Yu-Chi Liang <ycliang@andestech.com> | 2024-09-10 10:10:43 +0800 |
commit | 1806fed0ce6b56365ecf6b84ce6d17aafd3af979 (patch) | |
tree | 90341ef7d622f94ead77cfa57c05d6b32ba2298c | |
parent | 4a36d217bb131ec82cdb9a010221d6ae420aaf1b (diff) | |
download | u-boot-1806fed0ce6b56365ecf6b84ce6d17aafd3af979.tar.gz u-boot-1806fed0ce6b56365ecf6b84ce6d17aafd3af979.tar.bz2 u-boot-1806fed0ce6b56365ecf6b84ce6d17aafd3af979.zip |
cmd: add rdcycle test to RISC-V exception command
Some versions of KVM don't allow access to the cycle CSR.
Provide a command 'exception rdcycle' for testing.
If the cycle CSR is accessible, we get an output like:
=> exception rdcycle
cycle = 0x41f7563de
If the cycle CSR is not accessible, we get an output like:
=> exception rdcycle
Unhandled exception: Illegal instruction
Put subcommands into alphabetical order in long help.
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
-rw-r--r-- | cmd/riscv/exception.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/cmd/riscv/exception.c b/cmd/riscv/exception.c index 2b58b1c449..16e335327f 100644 --- a/cmd/riscv/exception.c +++ b/cmd/riscv/exception.c @@ -36,6 +36,14 @@ static int do_ialign16(struct cmd_tbl *cmdtp, int flag, int argc, return CMD_RET_SUCCESS; } +static int do_rdcycle(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + printf("cycle = 0x%lx\n", csr_read(CSR_CYCLE)); + + return CMD_RET_SUCCESS; +} + static int do_unaligned(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) { @@ -62,6 +70,8 @@ static struct cmd_tbl cmd_sub[] = { "", ""), U_BOOT_CMD_MKENT(ialign16, CONFIG_SYS_MAXARGS, 1, do_ialign16, "", ""), + U_BOOT_CMD_MKENT(rdcycle, CONFIG_SYS_MAXARGS, 1, do_rdcycle, + "", ""), U_BOOT_CMD_MKENT(unaligned, CONFIG_SYS_MAXARGS, 1, do_unaligned, "", ""), U_BOOT_CMD_MKENT(undefined, CONFIG_SYS_MAXARGS, 1, do_undefined, @@ -74,7 +84,8 @@ U_BOOT_LONGHELP(exception, " compressed - compressed instruction\n" " ebreak - breakpoint\n" " ialign16 - 16 bit aligned instruction\n" - " undefined - illegal instruction\n" - " unaligned - load address misaligned\n"); + " rdcycle - read cycle CSR\n" + " unaligned - load address misaligned\n" + " undefined - illegal instruction\n"); #include <exception.h> |