cmd: exception: unaligned data access on RISC-V
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Thu, 6 Aug 2020 10:34:59 +0000 (12:34 +0200)
committerAndes <uboot@andestech.com>
Fri, 14 Aug 2020 06:39:34 +0000 (14:39 +0800)
The command 'exception' can be used to test the handling of exceptions.

Currently the exception command only allows to create an illegal
instruction exception on RISC-V.

Provide a sub-command 'exception unaligned' to cause a misaligned load
address exception.

Adjust the online help for 'exception undefined'.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Rick Chen <rick@andestech.com>
cmd/riscv/exception.c

index 3c8dbbe..9687cec 100644 (file)
@@ -8,6 +8,18 @@
 #include <common.h>
 #include <command.h>
 
+static int do_unaligned(struct cmd_tbl *cmdtp, int flag, int argc,
+                       char *const argv[])
+{
+       asm volatile (
+               "auipc a1, 0\n"
+               "ori   a1, a1, 3\n"
+               "lw    a2, (0)(a1)\n"
+       );
+       printf("The system supports unaligned access.\n");
+       return CMD_RET_SUCCESS;
+}
+
 static int do_undefined(struct cmd_tbl *cmdtp, int flag, int argc,
                        char *const argv[])
 {
@@ -16,6 +28,8 @@ static int do_undefined(struct cmd_tbl *cmdtp, int flag, int argc,
 }
 
 static struct cmd_tbl cmd_sub[] = {
+       U_BOOT_CMD_MKENT(unaligned, CONFIG_SYS_MAXARGS, 1, do_unaligned,
+                        "", ""),
        U_BOOT_CMD_MKENT(undefined, CONFIG_SYS_MAXARGS, 1, do_undefined,
                         "", ""),
 };
@@ -23,7 +37,8 @@ static struct cmd_tbl cmd_sub[] = {
 static char exception_help_text[] =
        "<ex>\n"
        "  The following exceptions are available:\n"
-       "  undefined  - undefined instruction\n"
+       "  undefined - illegal instruction\n"
+       "  unaligned - load address misaligned\n"
        ;
 
 #include <exception.h>