[U-Boot] [PATCH 1/1] cmd: add exception command
Simon Glass
sjg at chromium.org
Thu Dec 20 21:17:24 UTC 2018
Hi Heinrich,
On Thu, 20 Dec 2018 at 05:23, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>
> On 11/27/18 1:08 AM, Simon Glass wrote:
> > Hi Heinrich,
> >
> > On Sat, 17 Nov 2018 at 07:29, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
> >>
> >> The 'exception' command allows to test exception handling.
> >>
> >> This implementation supports ARM, x86, RISC-V and the following exceptions:
> >> * 'breakpoint' - prefetch abort exception (ARM 32bit only)
> >> * 'unaligned' - data abort exception (ARM only)
> >> * 'undefined' - undefined instruction exception
> >>
> >> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> >> ---
> >> Currently RISC-V 64bit gets into an endless loop when hitting the
> >> undefined instruction.
> >>
> >> So it makes sense to have a testing capability.
> >> ---
> >> cmd/Kconfig | 6 ++
> >> cmd/Makefile | 1 +
> >> cmd/exception.c | 161 ++++++++++++++++++++++++++++++++++++++++++++++++
> >> 3 files changed, 168 insertions(+)
> >> create mode 100644 cmd/exception.c
> >>
> >> diff --git a/cmd/Kconfig b/cmd/Kconfig
> >> index e2973b3c51..9d2b8199b8 100644
> >> --- a/cmd/Kconfig
> >> +++ b/cmd/Kconfig
> >> @@ -1388,6 +1388,12 @@ config CMD_DISPLAY
> >> displayed on a simple board-specific display. Implement
> >> display_putc() to use it.
> >>
> >> +config CMD_EXCEPTION
> >> + bool "exception - raise exception"
> >> + depends on ARM || RISCV || X86
> >> + help
> >> + Enable the 'exception' command which allows to raise an exception.
> >> +
> >> config CMD_LED
> >> bool "led"
> >> default y if LED
> >> diff --git a/cmd/Makefile b/cmd/Makefile
> >> index 0534ddc679..cd67a79170 100644
> >> --- a/cmd/Makefile
> >> +++ b/cmd/Makefile
> >> @@ -46,6 +46,7 @@ endif
> >> obj-$(CONFIG_CMD_DISPLAY) += display.o
> >> obj-$(CONFIG_CMD_DTIMG) += dtimg.o
> >> obj-$(CONFIG_CMD_ECHO) += echo.o
> >> +obj-$(CONFIG_CMD_EXCEPTION) += exception.o
> >> obj-$(CONFIG_ENV_IS_IN_EEPROM) += eeprom.o
> >> obj-$(CONFIG_CMD_EEPROM) += eeprom.o
> >> obj-$(CONFIG_EFI_STUB) += efi.o
> >> diff --git a/cmd/exception.c b/cmd/exception.c
> >> new file mode 100644
> >> index 0000000000..fb6a15573e
> >> --- /dev/null
> >> +++ b/cmd/exception.c
> >> @@ -0,0 +1,161 @@
> >> +// SPDX-License-Identifier: GPL-2.0+
> >> +/*
> >> + * The 'exception' command can be used for testing exception handling.
> >> + *
> >> + * Copyright (c) 2018, Heinrich Schuchardt <xypron.glpk at gmx.de>
> >> + */
> >> +#include <common.h>
> >> +#include <command.h>
> >> +
> >> +enum exception {
> >> + UNDEFINED_INSTRUCTION = 1,
> >> + DATA_ABORT,
> >> + BREAKPOINT,
> >> +};
> >> +
> >> +struct exception_str {
> >> + enum exception id;
> >> + char *text;
> >> + void (*func)(void);
> >> +};
> >
> > Can you use the normal subcommand approach for this, as with other commands?
>
> Could you give an example, please. I looked at cmd/scsi. and cmd/mmc.c
> And the only difference I spot is that the names of subcommand functions
> start with "do_".
Yes, see for example:
static cmd_tbl_t cmd_mmc[] = {
It defines the subcommands in a standard way.
>
> >
> >> +
> >> +#if defined(CONFIG_ARM)
> >
> > How about creating a uclass for this? It isn't nice to have a
> > arch-specific #ifdefs in commands. Something like we did with
> > sysreset.
>
> If you want separate files per architecture, why would we need a uclass?
>
> We could simply put the architecture specific U_BOOT_CMD into the
> implementation file, e.g arch/arm/cpu/exception.c and
> arch/arm/cpu/exception_64.c
That that is one option although perhaps you might end up with
multiple ARM implementation (e.g. for ARMv47, ARMv7 and ARMv8)?
>
> With a uclass I would not know how to implement an architecture specific
> help output.
One option is something like sysreset_walk(). It allows us to have a
common function for ARM undefined instruction, for example, but finer
granularity for breakpoint.
Regards,
Simon
More information about the U-Boot
mailing list