summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>2024-08-11 16:41:23 +0200
committerLeo Yu-Chi Liang <ycliang@andestech.com>2024-09-10 10:10:43 +0800
commit1806fed0ce6b56365ecf6b84ce6d17aafd3af979 (patch)
tree90341ef7d622f94ead77cfa57c05d6b32ba2298c
parent4a36d217bb131ec82cdb9a010221d6ae420aaf1b (diff)
downloadu-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.c15
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>