mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-11 03:24:58 -06:00
aspeed: Create flash devices only when defaults are enabled
When the -nodefaults option is set, flash devices should be created with : -blockdev node-name=fmc0,driver=file,filename=./flash.img \ -device mx66u51235f,cs=0x0,bus=ssi.0,drive=fmc0 \ To be noted that in this case, the ROM will not be installed and the initial boot sequence (U-Boot loading) will fetch instructions using SPI transactions which is significantly slower. That's exactly how HW operates though. Reviewed-by: Joel Stanley <joel@jms.id.au> Signed-off-by: Cédric Le Goater <clg@kaod.org>
This commit is contained in:
parent
a617e65f43
commit
c7e313ae51
2 changed files with 33 additions and 8 deletions
|
@ -104,7 +104,7 @@ To boot a kernel directly from a Linux build tree:
|
||||||
-dtb arch/arm/boot/dts/aspeed-ast2600-evb.dtb \
|
-dtb arch/arm/boot/dts/aspeed-ast2600-evb.dtb \
|
||||||
-initrd rootfs.cpio
|
-initrd rootfs.cpio
|
||||||
|
|
||||||
The image should be attached as an MTD drive. Run :
|
To boot the machine from the flash image, use an MTD drive :
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
|
@ -117,23 +117,46 @@ Options specific to Aspeed machines are :
|
||||||
device by using the FMC controller to load the instructions, and
|
device by using the FMC controller to load the instructions, and
|
||||||
not simply from RAM. This takes a little longer.
|
not simply from RAM. This takes a little longer.
|
||||||
|
|
||||||
* ``fmc-model`` to change the FMC Flash model. FW needs support for
|
* ``fmc-model`` to change the default FMC Flash model. FW needs
|
||||||
the chip model to boot.
|
support for the chip model to boot.
|
||||||
|
|
||||||
* ``spi-model`` to change the SPI Flash model.
|
* ``spi-model`` to change the default SPI Flash model.
|
||||||
|
|
||||||
* ``bmc-console`` to change the default console device. Most of the
|
* ``bmc-console`` to change the default console device. Most of the
|
||||||
machines use the ``UART5`` device for a boot console, which is
|
machines use the ``UART5`` device for a boot console, which is
|
||||||
mapped on ``/dev/ttyS4`` under Linux, but it is not always the
|
mapped on ``/dev/ttyS4`` under Linux, but it is not always the
|
||||||
case.
|
case.
|
||||||
|
|
||||||
For instance, to start the ``ast2500-evb`` machine with a different
|
To use other flash models, for instance a different FMC chip and a
|
||||||
FMC chip and a bigger (64M) SPI chip, use :
|
bigger (64M) SPI for the ``ast2500-evb`` machine, run :
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
-M ast2500-evb,fmc-model=mx25l25635e,spi-model=mx66u51235f
|
-M ast2500-evb,fmc-model=mx25l25635e,spi-model=mx66u51235f
|
||||||
|
|
||||||
|
When more flexibility is needed to define the flash devices, to use
|
||||||
|
different flash models or define all flash devices (up to 8), the
|
||||||
|
``-nodefaults`` QEMU option can be used to avoid creating the default
|
||||||
|
flash devices.
|
||||||
|
|
||||||
|
Flash devices should then be created from the command line and attached
|
||||||
|
to a block device :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ qemu-system-arm -M ast2600-evb \
|
||||||
|
-blockdev node-name=fmc0,driver=file,filename=/path/to/fmc0.img \
|
||||||
|
-device mx66u51235f,bus=ssi.0,cs=0x0,drive=fmc0 \
|
||||||
|
-blockdev node-name=fmc1,driver=file,filename=/path/to/fmc1.img \
|
||||||
|
-device mx66u51235f,bus=ssi.0,cs=0x1,drive=fmc1 \
|
||||||
|
-blockdev node-name=spi1,driver=file,filename=/path/to/spi1.img \
|
||||||
|
-device mx66u51235f,cs=0x0,bus=ssi.1,drive=spi1 \
|
||||||
|
-nographic -nodefaults
|
||||||
|
|
||||||
|
In that case, the machine boots fetching instructions from the FMC0
|
||||||
|
device. It is slower to start but closer to what HW does. Using the
|
||||||
|
machine option ``execute-in-place`` has a similar effect.
|
||||||
|
|
||||||
To change the boot console and use device ``UART3`` (``/dev/ttyS2``
|
To change the boot console and use device ``UART3`` (``/dev/ttyS2``
|
||||||
under Linux), use :
|
under Linux), use :
|
||||||
|
|
||||||
|
|
|
@ -396,12 +396,14 @@ static void aspeed_machine_init(MachineState *machine)
|
||||||
connect_serial_hds_to_uarts(bmc);
|
connect_serial_hds_to_uarts(bmc);
|
||||||
qdev_realize(DEVICE(&bmc->soc), NULL, &error_abort);
|
qdev_realize(DEVICE(&bmc->soc), NULL, &error_abort);
|
||||||
|
|
||||||
aspeed_board_init_flashes(&bmc->soc.fmc,
|
if (defaults_enabled()) {
|
||||||
|
aspeed_board_init_flashes(&bmc->soc.fmc,
|
||||||
bmc->fmc_model ? bmc->fmc_model : amc->fmc_model,
|
bmc->fmc_model ? bmc->fmc_model : amc->fmc_model,
|
||||||
amc->num_cs, 0);
|
amc->num_cs, 0);
|
||||||
aspeed_board_init_flashes(&bmc->soc.spi[0],
|
aspeed_board_init_flashes(&bmc->soc.spi[0],
|
||||||
bmc->spi_model ? bmc->spi_model : amc->spi_model,
|
bmc->spi_model ? bmc->spi_model : amc->spi_model,
|
||||||
1, amc->num_cs);
|
1, amc->num_cs);
|
||||||
|
}
|
||||||
|
|
||||||
if (machine->kernel_filename && sc->num_cpus > 1) {
|
if (machine->kernel_filename && sc->num_cpus > 1) {
|
||||||
/* With no u-boot we must set up a boot stub for the secondary CPU */
|
/* With no u-boot we must set up a boot stub for the secondary CPU */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue