# Aspeed family boards (`*-bmc`, `ast2500-evb`, `ast2600-evb`)

The QEMU Aspeed machines model BMCs of various OpenPOWER systems and Aspeed evaluation boards. They are based on different releases of the Aspeed SoC : the AST2400 integrating an ARM926EJ-S CPU (400MHz), the AST2500 with an ARM1176JZS CPU (800MHz) and more recently the AST2600 with dual cores ARM Cortex-A7 CPUs (1.2GHz).

The SoC comes with RAM, Gigabit ethernet, USB, SD/MMC, USB, SPI, I2C, etc.

AST2400 SoC based machines :

- `palmetto-bmc` OpenPOWER Palmetto POWER8 BMC

- `quanta-q71l-bmc` OpenBMC Quanta BMC

AST2500 SoC based machines :

- `ast2500-evb` Aspeed AST2500 Evaluation board

- `romulus-bmc` OpenPOWER Romulus POWER9 BMC

- `witherspoon-bmc` OpenPOWER Witherspoon POWER9 BMC

- `sonorapass-bmc` OCP SonoraPass BMC

- `swift-bmc` OpenPOWER Swift BMC POWER9

AST2600 SoC based machines :

- `ast2600-evb` Aspeed AST2600 Evaluation board (Cortex-A7)

- `tacoma-bmc` OpenPOWER Witherspoon POWER9 AST2600 BMC

## Supported devices

> - SMP (for the AST2600 Cortex-A7)

> - Interrupt Controller (VIC)

> - Timer Controller

> - RTC Controller

> - I2C Controller

> - System Control Unit (SCU)

> - SRAM mapping

> - X-DMA Controller (basic interface)

> - Static Memory Controller (SMC or FMC) - Only SPI Flash support

> - SPI Memory Controller

> - USB 2.0 Controller

> - SD/MMC storage controllers

> - SDRAM controller (dummy interface for basic settings and training)

> - Watchdog Controller

> - GPIO Controller (Master only)

> - UART

> - Ethernet controllers

> - Front LEDs (PCA9552 on I2C bus)

> - LPC Peripheral Controller (a subset of subdevices are supported)

> - Hash/Crypto Engine (HACE) - Hash support only. TODO: HMAC and RSA

## Missing devices

> - Coprocessor support

> - ADC (out of tree implementation)

> - PWM and Fan Controller

> - Slave GPIO Controller

> - Super I/O Controller

> - PCI-Express 1 Controller

> - Graphic Display Controller

> - PECI Controller

> - MCTP Controller

> - Mailbox Controller

> - Virtual UART

> - eSPI Controller

> - I3C Controller

## Boot options

The Aspeed machines can be started using the `-kernel` option to load a Linux kernel or from a firmware. Images can be downloaded from the OpenBMC jenkins :

> https://jenkins.openbmc.org/job/ci-openbmc/lastSuccessfulBuild/distro=ubuntu,label=docker-builder

or directly from the OpenBMC GitHub release repository :

> https://github.com/openbmc/openbmc/releases

The image should be attached as an MTD drive. Run :

    $ qemu-system-arm -M romulus-bmc -nic user \
          -drive file=obmc-phosphor-image-romulus.static.mtd,format=raw,if=mtd -nographic

Options specific to Aspeed machines are :

> - `execute-in-place` which emulates the boot from the CE0 flash device by using the FMC controller to load the instructions, and not simply from RAM. This takes a little longer.

> - `fmc-model` to change the FMC Flash model. FW needs support for the chip model to boot.

> - `spi-model` to change the SPI Flash model.

For instance, to start the `ast2500-evb` machine with a different FMC chip and a bigger (64M) SPI chip, use :

    -M ast2500-evb,fmc-model=mx25l25635e,spi-model=mx66u51235f