> From: Heinrich Schuchardt [mailto:xypron.g...@gmx.de] > Sent: Thursday, August 06, 2020 6:35 PM > To: Rick Jian-Zhi Chen(陳建志) > Cc: u-boot@lists.denx.de; Leo Yu-Chi Liang(梁育齊); Heinrich Schuchardt > Subject: [PATCH v2] cmd: exception: unaligned data access on RISC-V > > 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.g...@gmx.de> > --- > v2: > If unaligned access is support, print success message. > --- > cmd/riscv/exception.c | 17 ++++++++++++++++- > 1 file changed, 16 insertions(+), 1 deletion(-) >
WARNING: Possible new command - make sure you add a test #142: FILE: cmd/riscv/exception.c:11: Other than that, Reviewed-by: Rick Chen <r...@andestech.com> > diff --git a/cmd/riscv/exception.c b/cmd/riscv/exception.c index > 3c8dbbec0e..9687cec812 100644 > --- a/cmd/riscv/exception.c > +++ b/cmd/riscv/exception.c > @@ -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> > -- > 2.27.0