qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Havard Skinnemoen <hskinnemoen@google.com>
To: "Philippe Mathieu-Daudé" <f4bug@amsat.org>
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
	qemu-arm <qemu-arm@nongnu.org>,
	"QEMU Developers" <qemu-devel@nongnu.org>,
	"IS20 Avi Fishman" <Avi.Fishman@nuvoton.com>,
	"CS20 KFTing" <kfting@nuvoton.com>,
	"Cédric Le Goater" <clg@kaod.org>
Subject: Re: [PATCH v8 07/14] hw/arm: Load -bios image as a boot ROM for npcm7xx
Date: Thu, 10 Sep 2020 16:52:10 -0700	[thread overview]
Message-ID: <CAFQmdRY00+izZSRfV_pbO3xvFrQqrgaCMaSHdmmSapJM6fv-fQ@mail.gmail.com> (raw)
In-Reply-To: <af0b3d23-41d8-4c46-1156-973d653d8064@amsat.org>

[-- Attachment #1: Type: text/plain, Size: 4991 bytes --]

On Thu, Sep 3, 2020 at 11:59 AM Philippe Mathieu-Daudé <f4bug@amsat.org>
wrote:

> On 8/25/20 2:17 AM, Havard Skinnemoen via wrote:
> > If a -bios option is specified on the command line, load the image into
> > the internal ROM memory region, which contains the first instructions
> > run by the CPU after reset.
> >
> > If -bios is not specified, the vbootrom included with qemu is loaded by
> > default.
> >
> > Reviewed-by: Tyrone Ting <kfting@nuvoton.com>
> > Reviewed-by: Cédric Le Goater <clg@kaod.org>
> > Signed-off-by: Havard Skinnemoen <hskinnemoen@google.com>
> > ---
> >  hw/arm/npcm7xx_boards.c | 33 +++++++++++++++++++++++++++++++++
> >  1 file changed, 33 insertions(+)
> >
> > diff --git a/hw/arm/npcm7xx_boards.c b/hw/arm/npcm7xx_boards.c
> > index 0b9dce2b35..b67e45e913 100644
> > --- a/hw/arm/npcm7xx_boards.c
> > +++ b/hw/arm/npcm7xx_boards.c
> > @@ -18,12 +18,43 @@
> >
> >  #include "hw/arm/npcm7xx.h"
> >  #include "hw/core/cpu.h"
> > +#include "hw/loader.h"
> >  #include "qapi/error.h"
> > +#include "qemu-common.h"
> >  #include "qemu/units.h"
> > +#include "sysemu/sysemu.h"
> >
> >  #define NPCM750_EVB_POWER_ON_STRAPS 0x00001ff7
> >  #define QUANTA_GSJ_POWER_ON_STRAPS 0x00001fff
> >
> > +static const char npcm7xx_default_bootrom[] = "npcm7xx_bootrom.bin";
> > +
> > +static void npcm7xx_load_bootrom(MachineState *machine, NPCM7xxState
> *soc)
> > +{
> > +    g_autofree char *filename = NULL;
> > +    int ret;
> > +
> > +    if (machine->kernel_filename) {
> > +        /* Don't load the bootrom if user requested direct kernel boot.
> */
> > +        return;
>
> Wondering why not load it always if available, and what would
> happen if booting from a kernel (without bootrom) and running
> "reboot" (via SysRq) in the guest I got:
>
> # echo b > /proc/sysrq-trigger
> sysrq: Resetting
> CPU0: stopping
> CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.4.32-7dc9442-dirty-8978043 #1
> Hardware name: NPCM7XX Chip family
> Backtrace:
> [<b0107c4c>] (dump_backtrace) from [<b010823c>] (show_stack+0x20/0x24)
>  r7:00000000 r6:600f0193 r5:00000000 r4:b0b5b1b8
> [<b010821c>] (show_stack) from [<b077b230>] (dump_stack+0x94/0xa8)
> [<b077b19c>] (dump_stack) from [<b010a20c>] (handle_IPI+0x1f0/0x38c)
>  r7:00000000 r6:00000004 r5:b0b5eb64 r4:b0b729e0
> [<b010a01c>] (handle_IPI) from [<b0102264>] (gic_handle_irq+0x9c/0xa0)
>  r10:10c5387d r9:b0b01ef8 r8:d0803100 r7:d0802100 r6:d080210c r5:b0b37db4
>  r4:b0b04504
> [<b01021c8>] (gic_handle_irq) from [<b0101a8c>] (__irq_svc+0x6c/0x90)
> Exception stack(0xb0b01ef8 to 0xb0b01f40)
> 1ee0:                                                       00000000
> 00012f74
> 1f00: cfbc1774 b01112e0 b0b00000 00000000 b0b03e28 b0b03e6c b0b5e72c
> b08e5ea8
> 1f20: 10c5387d b0b01f54 b0b01f58 b0b01f48 b0104114 b0104118 600f0013
> ffffffff
>  r9:b0b00000 r8:b0b5e72c r7:b0b01f2c r6:ffffffff r5:600f0013 r4:b0104118
> [<b01040d4>] (arch_cpu_idle) from [<b014b240>] (do_idle+0xec/0x140)
> [<b014b154>] (do_idle) from [<b014b56c>] (cpu_startup_entry+0x28/0x2c)
>  r9:410fc090 r8:0810c000 r7:00000000 r6:b0a53a40 r5:00000001 r4:000000ce
> [<b014b544>] (cpu_startup_entry) from [<b0794f6c>] (rest_init+0xb4/0xbc)
> [<b0794eb8>] (rest_init) from [<b0a00c50>] (arch_call_rest_init+0x18/0x1c)
>  r5:00000001 r4:b0b72754
> [<b0a00c38>] (arch_call_rest_init) from [<b0a010f4>]
> (start_kernel+0x428/0x458)
> [<b0a00ccc>] (start_kernel) from [<00000000>] (0x0)
> Reboot failed -- System halted
>
> So not a problem so far...
> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>
> But still I'd keep loading the bootrom regardless -kernel.
>

So you mean something like this?

@@ -35,11 +35,6 @@ static void npcm7xx_load_bootrom(MachineState *machine,
NPCM7xxState *soc)
     g_autofree char *filename = NULL;
     int ret;

-    if (machine->kernel_filename) {
-        /* Don't load the bootrom if user requested direct kernel boot. */
-        return;
-    }
-
     if (!bios_name) {
         bios_name = npcm7xx_default_bootrom;
     }
@@ -47,7 +42,11 @@ static void npcm7xx_load_bootrom(MachineState *machine,
NPCM7xxState *soc)
     filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
     if (!filename) {
         error_report("Could not find ROM image '%s'", bios_name);
-        exit(1);
+        if (!machine->kernel_filename) {
+            /* We can't boot without a bootrom or a kernel image. */
+            exit(1);
+        }
+        return;
     }
     ret = load_image_mr(filename, &soc->irom);
     if (ret < 0) {

I'm not sure if it will make much of a difference, as (IIUC)
arm_load_kernel installs a reset hook to jump directly into the kernel,
bypassing the bootrom entirely. I'm assuming a watchdog or SW reset would
trigger the same reset hook and jump right back into the kernel, though I
could be wrong.

Anyway, I can make the above change in any case.

Havard

[-- Attachment #2: Type: text/html, Size: 6432 bytes --]

  reply	other threads:[~2020-09-10 23:53 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-25  0:16 [PATCH v8 00/14] Add Nuvoton NPCM730/NPCM750 SoCs and two BMC machines Havard Skinnemoen via
2020-08-25  0:16 ` [PATCH v8 01/14] hw/misc: Add NPCM7xx System Global Control Registers device model Havard Skinnemoen via
2020-08-25  0:16 ` [PATCH v8 02/14] hw/misc: Add NPCM7xx Clock Controller " Havard Skinnemoen via
2020-09-04  9:32   ` Philippe Mathieu-Daudé
2020-09-04 22:02     ` Havard Skinnemoen
2020-09-04 22:38       ` Havard Skinnemoen
2020-09-07 13:40         ` Philippe Mathieu-Daudé
2020-09-07 17:58           ` Havard Skinnemoen
2020-08-25  0:17 ` [PATCH v8 03/14] hw/timer: Add NPCM7xx Timer " Havard Skinnemoen via
2020-08-25  0:17 ` [PATCH v8 04/14] hw/arm: Add NPCM730 and NPCM750 SoC models Havard Skinnemoen via
2020-08-25  0:17 ` [PATCH v8 05/14] hw/arm: Add two NPCM7xx-based machines Havard Skinnemoen via
2020-08-25  0:17 ` [PATCH v8 06/14] roms: Add virtual Boot ROM for NPCM7xx SoCs Havard Skinnemoen via
2020-09-04  9:24   ` Philippe Mathieu-Daudé
2020-08-25  0:17 ` [PATCH v8 07/14] hw/arm: Load -bios image as a boot ROM for npcm7xx Havard Skinnemoen via
2020-09-03 18:59   ` Philippe Mathieu-Daudé
2020-09-10 23:52     ` Havard Skinnemoen [this message]
2020-08-25  0:17 ` [PATCH v8 08/14] hw/nvram: NPCM7xx OTP device model Havard Skinnemoen via
2020-09-07 19:47   ` Alexander Bulekov
2020-09-07 19:57     ` Alexander Bulekov
2020-09-07 21:52       ` Havard Skinnemoen
2020-08-25  0:17 ` [PATCH v8 09/14] hw/mem: Stubbed out NPCM7xx Memory Controller model Havard Skinnemoen via
2020-08-25  0:17 ` [PATCH v8 10/14] hw/ssi: NPCM7xx Flash Interface Unit device model Havard Skinnemoen via
2020-08-25  0:17 ` [PATCH v8 11/14] hw/arm: Wire up BMC boot flash for npcm750-evb and quanta-gsj Havard Skinnemoen via
2020-08-25  0:17 ` [PATCH v8 12/14] hw/arm/npcm7xx: add board setup stub for CPU and UART clocks Havard Skinnemoen via
2020-09-04  9:34   ` Philippe Mathieu-Daudé
2020-08-25  0:17 ` [PATCH v8 13/14] docs/system: Add Nuvoton machine documentation Havard Skinnemoen via
2020-09-03 19:11   ` Philippe Mathieu-Daudé
2020-08-25  0:17 ` [PATCH v8 14/14] tests/acceptance: console boot tests for quanta-gsj Havard Skinnemoen via
2020-09-03 18:20 ` [PATCH v8 00/14] Add Nuvoton NPCM730/NPCM750 SoCs and two BMC machines Philippe Mathieu-Daudé
2020-09-08 15:02 ` Alexander Bulekov
2020-09-08 15:52   ` Philippe Mathieu-Daudé
2020-09-08 16:58     ` Philippe Mathieu-Daudé
2020-09-08 19:52       ` Havard Skinnemoen
2020-09-09  1:32         ` Havard Skinnemoen
2020-09-11  0:03           ` Havard Skinnemoen

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=CAFQmdRY00+izZSRfV_pbO3xvFrQqrgaCMaSHdmmSapJM6fv-fQ@mail.gmail.com \
    --to=hskinnemoen@google.com \
    --cc=Avi.Fishman@nuvoton.com \
    --cc=clg@kaod.org \
    --cc=f4bug@amsat.org \
    --cc=kfting@nuvoton.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).