On Fri, Sep 11, 2020 at 5:46 AM Philippe Mathieu-Daudé <
f4bug@amsat.org> wrote:
On 9/11/20 7:20 AM, Havard Skinnemoen via wrote:
> This allows these NPCM7xx-based boards to boot from a flash image, e.g.
> one built with OpenBMC. For example like this:
>
> IMAGE=${OPENBMC}/build/tmp/deploy/images/gsj/image-bmc
> qemu-system-arm -machine quanta-gsj -nographic \
> -drive file=${IMAGE},if=mtd,bus=0,unit=0,format=raw,snapshot=on
>
> Reviewed-by: Tyrone Ting <kfting@nuvoton.com>
> Reviewed-by: Cédric Le Goater <clg@kaod.org>
> Tested-by: Cédric Le Goater <clg@kaod.org>
> Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> Signed-off-by: Havard Skinnemoen <hskinnemoen@google.com>
> ---
> hw/arm/npcm7xx_boards.c | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/hw/arm/npcm7xx_boards.c b/hw/arm/npcm7xx_boards.c
> index b4c772d6b5..79e2e2744c 100644
> --- a/hw/arm/npcm7xx_boards.c
> +++ b/hw/arm/npcm7xx_boards.c
> @@ -20,6 +20,7 @@
> #include "hw/arm/npcm7xx.h"
> #include "hw/core/cpu.h"
> #include "hw/loader.h"
> +#include "hw/qdev-properties.h"
> #include "qapi/error.h"
> #include "qemu-common.h"
> #include "qemu/units.h"
> @@ -55,6 +56,22 @@ static void npcm7xx_load_bootrom(MachineState *machine, NPCM7xxState *soc)
> }
> }
>
> +static void npcm7xx_connect_flash(NPCM7xxFIUState *fiu, int cs_no,
> + const char *flash_type, DriveInfo *dinfo)
> +{
> + DeviceState *flash;
> + qemu_irq flash_cs;
> +
> + flash = qdev_new(flash_type);
> + if (dinfo) {
> + qdev_prop_set_drive(flash, "drive", blk_by_legacy_dinfo(dinfo));
> + }
> + qdev_realize_and_unref(flash, BUS(fiu->spi), &error_fatal);
> +
> + flash_cs = qdev_get_gpio_in_named(flash, SSI_GPIO_CS, 0);
> + qdev_connect_gpio_out_named(DEVICE(fiu), "cs", cs_no, flash_cs);
> +}
> +
> static void npcm7xx_connect_dram(NPCM7xxState *soc, MemoryRegion *dram)
> {
> memory_region_add_subregion(get_system_memory(), NPCM7XX_DRAM_BA, dram);
> @@ -92,6 +109,7 @@ static void npcm750_evb_init(MachineState *machine)
> qdev_realize(DEVICE(soc), NULL, &error_fatal);
>
> npcm7xx_load_bootrom(machine, soc);
> + npcm7xx_connect_flash(&soc->fiu[0], 0, "w25q256", drive_get(IF_MTD, 0, 0));
Nitpicking: add definition for '0' magic number
(consider as future cleanup).
Thanks. I've made the change, but won't send it out until this series is merged, or I'll fold it in if I need to do another iteration for other reasons.
> npcm7xx_load_kernel(machine, soc);
> }
>
> @@ -104,6 +122,8 @@ static void quanta_gsj_init(MachineState *machine)
> qdev_realize(DEVICE(soc), NULL, &error_fatal);
>
> npcm7xx_load_bootrom(machine, soc);
> + npcm7xx_connect_flash(&soc->fiu[0], 0, "mx25l25635e",
> + drive_get(IF_MTD, 0, 0));
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> npcm7xx_load_kernel(machine, soc);
> }
>
>