All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leo Liang <ycliang@andestech.com>
To: u-boot@lists.denx.de
Subject: [PATCH 1/1] cmd: exception: unaligned data access on RISC-V
Date: Thu, 6 Aug 2020 10:56:48 +0800	[thread overview]
Message-ID: <20200806025648.GA18142@andestech.com> (raw)
In-Reply-To: <CAN5B=e+Zs_KEWuMBpvmQpLQrB3_zYn6Lsy5=ncJCqKgHHqXAHg@mail.gmail.com>

Hi Heinrich,

On Thu, Aug 06, 2020 at 10:15:28AM +0800, Rick Chen wrote:
> Hi Heinrich
> 
> > >> From: Heinrich Schuchardt [mailto:xypron.glpk at gmx.de]
> > >> Sent: Tuesday, August 04, 2020 7:10 PM
> > >> To: Rick Jian-Zhi Chen(???)
> > >> Cc: u-boot at lists.denx.de; Heinrich Schuchardt
> > >> Subject: [PATCH 1/1] 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>
> > >> ---
> > >>  cmd/riscv/exception.c | 16 +++++++++++++++-
> > >>  1 file changed, 15 insertions(+), 1 deletion(-)
> > >>
> > >> diff --git a/cmd/riscv/exception.c b/cmd/riscv/exception.c index 3c8dbbec0e..53159531d9 100644
> > >> --- a/cmd/riscv/exception.c
> > >> +++ b/cmd/riscv/exception.c
> > >> @@ -8,6 +8,17 @@
> > >>  #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"
> > >> +       );
> > >> +       return CMD_RET_FAILURE;
> > >
> > > I suggest that we can modify it as below to print the unaligned
> > > address and data for more debug information.
> > >
> > > int ret = 0;
> > > int addr = 0;
> > >
> > > asm volatile (
> > > "auipc a1, 0\n"
> > > "ori   %0, a1, 3\n"
> > > "lw    %1, (0)(a1)\n"
> > > : "=r" (addr), "=r" (ret)
> > > :
> > > : "memory"
> > > );
> > > printf("unaligned addr 0x%x , ret 0x%x\n",addr,ret);
> >
> > Thanks for reviewing.
> >
> > The printf statement will never be reached if the system does not
> > support unaligned access. Why should anybody care about the actual
> > addresses?
> >
> > A reasonable message here might be:
> >
> > printf("The system supports unaligned access.\n");
> 
> Yes, this print message without printing the address and data is good for me.
> My intention is that print something better than print nothing.
> For some junior users they maybe expect that the shell will echo
> something when input some commands.
> 
> >
> > >
> > > return CMD_RET_SUCCESS;
> > > ====================================
> > > So if run in S-Mode, it will work as below:
> > >
> > > RISC-V # exception unaligned
> >
> > Do we ever run the U-Boot shell in S-mode? Shouldn't we always drop to
> > M-mode before reaching the shell?
> >

In addition to Rick's reponse, I'd like to add that to my knowledge, 
U-Boot-SPL will bring up U-Boot-proper in S-mode, so you will get a shell in S-mode.

> > If I am in the U-Boot shell, why does S-mode not print out the registers
> > like M-Mode does? What is missing?
> 
> In S-mode, Opensbi will take care this unaligned exception.
> Even in M-mode if the HW support this unaligned access, it will not
> trigger this exception. So it shall return CMD_RET_SUCCESS here.

And as explained, this S-mode exception will be taken care of by M-mode runtime (OpenSBI),
so the info of the registers will not be printed out.
Concluded that I think nothing is missing here.

Best regards,
Leo

> 
> Thanks,
> Rick
> 
> >
> > Best regards
> >
> > Heinrich
> >
> > > unaligned addr 0x3ff92fd7 , ret 0x35e59300
> > > RISC-V #
> > >
> > >
> > > (gdb) x/4x 0x3ff92fd0
> > > 0x3ff92fd0:     0x7ac362ef      0x00000597      0x0035e593      0xc5174190
> > > (gdb)
> > >
> > > ====================================
> > > If run in M-Mode, it will work as below:
> > >
> > > RISC-V # exception unaligned
> > > Unhandled exception: Load address misaligned
> > > EPC: 000000003ff92fdc RA: 000000003ff93032 TVAL: 000000003ff92fd7
> > > EPC: 0000000000009fdc RA: 000000000000a032 reloc adjusted
> > >
> > > ### ERROR ### Please RESET the board ###
> > >
> > > Thanks,
> > > Rick
> > >
> > >> +}
> > >> +
> > >>  static int do_undefined(struct cmd_tbl *cmdtp, int flag, int argc,
> > >>                         char *const argv[])
> > >>  {
> > >> @@ -16,6 +27,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 +36,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
> >

      reply	other threads:[~2020-08-06  2:56 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-04 11:09 [PATCH 1/1] cmd: exception: unaligned data access on RISC-V Heinrich Schuchardt
     [not found] ` <752D002CFF5D0F4FA35C0100F1D73F3FA47309C8@ATCPCS16.andestech.com>
2020-08-05  8:47   ` Rick Chen
2020-08-05 10:26     ` Heinrich Schuchardt
2020-08-06  2:15       ` Rick Chen
2020-08-06  2:56         ` Leo Liang [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200806025648.GA18142@andestech.com \
    --to=ycliang@andestech.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.