Message ID | 20200806103459.9263-1-xypron.glpk@gmx.de |
---|---|
State | Accepted, archived |
Commit | db3585d181221dd025fcdece9d56b02da63cfe96 |
Headers | show |
Series | [v2] cmd: exception: unaligned data access on RISC-V | expand |
> From: Heinrich Schuchardt [mailto:xypron.glpk@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.glpk@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 <rick@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
On 07.08.20 10:33, Rick Chen wrote: >> From: Heinrich Schuchardt [mailto:xypron.glpk@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.glpk@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 <rick@andestech.com> Do you want CONFIG_CMD_EXCEPTION to be enabled in one of the QEMU configs to make it testable on Gitlab CI? 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. 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
> On 07.08.20 10:33, Rick Chen wrote: > >> From: Heinrich Schuchardt [mailto:xypron.glpk@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.glpk@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 <rick@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 >
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>
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> --- v2: If unaligned access is support, print success message. --- cmd/riscv/exception.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) -- 2.27.0