> On 07.08.20 10:33, Rick Chen wrote: > >> 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> > > Do you want CONFIG_CMD_EXCEPTION to be enabled in one of the QEMU > configs to make it testable on Gitlab CI?
No. Let's keep as it is. > > As QEMU does not create exceptions for unaligned access only a test for > the "exception undefined" command makes sense to me. > > Patch "riscv: additional crash information" influences the output we > see. So that patch should be merged before we add any test. OK. Thanks, Rick > > Best regards > > Heinrich > > > > >> 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 >