[PATCH qemu v2 07/10] ast2400: use contents of first SPI flash as a rom

Cédric Le Goater clg at kaod.org
Tue Jun 14 03:16:33 AEST 2016


This provides support for U-Boot images which are loaded at 0x0.

A Palmetto BMC guest can now be simply booted with :

  $ qemu-system-arm -m 256 -M palmetto-bmc -nographic -nodefaults  \
	-mtdblock ./flash-palmetto-20160512040959  \
	-mtdblock ./palmetto.pnor

The first block device uses the file './flash-palmetto-20160512040959'
which will act as a SPI flash module for the BMC, handled by the
SMC/FMC controller. The second block device uses the file
'./palmetto.pnor' which is an OpenPower firmware image for a palmetto
OpenPower system. This one will be handled by the SMC/SPI controller.

The flash images can be grabbed here :

    https://openpower.xyz/job/openbmc-build/distro=ubuntu,target=palmetto/lastSuccessfulBuild/artifact/images/palmetto/flash-palmetto
    https://openpower.xyz/job/openpower-op-build/distro=ubuntu,target=palmetto/lastSuccessfulBuild/artifact/images/palmetto.pnor

We could add a second BMC SPI flash by changing the 'num-cs' property
of the controller and emulate a golden image flash module.

Signed-off-by: Cédric Le Goater <clg at kaod.org>
---
 hw/arm/palmetto-bmc.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/hw/arm/palmetto-bmc.c b/hw/arm/palmetto-bmc.c
index 0aed97a7d9cf..75ad1c396659 100644
--- a/hw/arm/palmetto-bmc.c
+++ b/hw/arm/palmetto-bmc.c
@@ -50,6 +50,23 @@ static void palmetto_bmc_init(MachineState *machine)
     aspeed_smc_init_flashes(&bmc->soc.smc, "n25q256a", &error_abort);
     aspeed_smc_init_flashes(&bmc->soc.spi, "mx25l25635e", &error_abort);
 
+    /*
+     * Install first SMC/FMC flash content as a rom.
+     */
+    if (bmc->soc.smc.flashes[0]) {
+        MemoryRegion *flash0;
+        MemoryRegion *flash0alias = g_new(MemoryRegion, 1);
+
+        flash0 = sysbus_mmio_get_region(SYS_BUS_DEVICE(bmc->soc.smc.flashes[0]),
+                                        0);
+        memory_region_init_alias(flash0alias, OBJECT(bmc->soc.smc.flashes[0]),
+                                 "flash0alias",
+                                 flash0, 0, bmc->soc.smc.flashes[0]->size);
+
+        memory_region_add_subregion(get_system_memory(), 0, flash0alias);
+        palmetto_bmc_binfo.firmware_loaded = true;
+    }
+
     palmetto_bmc_binfo.kernel_filename = machine->kernel_filename;
     palmetto_bmc_binfo.initrd_filename = machine->initrd_filename;
     palmetto_bmc_binfo.kernel_cmdline = machine->kernel_cmdline;
-- 
2.1.4



More information about the openbmc mailing list