xref: /openbmc/qemu/docs/system/arm/aspeed.rst (revision be93fd53)
1Aspeed family boards (``ast2500-evb``, ``ast2600-evb``, ``ast2700-evb``, ``bletchley-bmc``, ``fuji-bmc``, ``fby35-bmc``, ``fp5280g2-bmc``, ``g220a-bmc``, ``palmetto-bmc``, ``qcom-dc-scm-v1-bmc``, ``qcom-firework-bmc``, ``quanta-q71l-bmc``, ``rainier-bmc``, ``romulus-bmc``, ``sonorapass-bmc``, ``supermicrox11-bmc``, ``tiogapass-bmc``, ``tacoma-bmc``, ``witherspoon-bmc``, ``yosemitev2-bmc``)
2========================================================================================================================================================================================================================================================================================================================================================================================================
3
4The QEMU Aspeed machines model BMCs of various OpenPOWER systems and
5Aspeed evaluation boards. They are based on different releases of the
6Aspeed SoC : the AST2400 integrating an ARM926EJ-S CPU (400MHz), the
7AST2500 with an ARM1176JZS CPU (800MHz), the AST2600
8with dual cores ARM Cortex-A7 CPUs (1.2GHz) and more recently the AST2700
9with quad cores ARM Cortex-A35 64 bits CPUs (1.6GHz)
10
11The SoC comes with RAM, Gigabit ethernet, USB, SD/MMC, USB, SPI, I2C,
12etc.
13
14AST2400 SoC based machines :
15
16- ``palmetto-bmc``         OpenPOWER Palmetto POWER8 BMC
17- ``quanta-q71l-bmc``      OpenBMC Quanta BMC
18- ``supermicrox11-bmc``    Supermicro X11 BMC
19
20AST2500 SoC based machines :
21
22- ``ast2500-evb``          Aspeed AST2500 Evaluation board
23- ``romulus-bmc``          OpenPOWER Romulus POWER9 BMC
24- ``witherspoon-bmc``      OpenPOWER Witherspoon POWER9 BMC
25- ``sonorapass-bmc``       OCP SonoraPass BMC
26- ``fp5280g2-bmc``         Inspur FP5280G2 BMC
27- ``g220a-bmc``            Bytedance G220A BMC
28- ``yosemitev2-bmc``       Facebook YosemiteV2 BMC
29- ``tiogapass-bmc``        Facebook Tiogapass BMC
30
31AST2600 SoC based machines :
32
33- ``ast2600-evb``          Aspeed AST2600 Evaluation board (Cortex-A7)
34- ``tacoma-bmc``           OpenPOWER Witherspoon POWER9 AST2600 BMC
35- ``rainier-bmc``          IBM Rainier POWER10 BMC
36- ``fuji-bmc``             Facebook Fuji BMC
37- ``bletchley-bmc``        Facebook Bletchley BMC
38- ``fby35-bmc``            Facebook fby35 BMC
39- ``qcom-dc-scm-v1-bmc``   Qualcomm DC-SCM V1 BMC
40- ``qcom-firework-bmc``    Qualcomm Firework BMC
41
42AST2700 SoC based machines :
43
44- ``ast2700-evb``          Aspeed AST2700 Evaluation board (Cortex-A35)
45
46Supported devices
47-----------------
48
49 * SMP (for the AST2600 Cortex-A7)
50 * Interrupt Controller (VIC)
51 * Timer Controller
52 * RTC Controller
53 * I2C Controller, including the new register interface of the AST2600
54 * System Control Unit (SCU)
55 * SRAM mapping
56 * X-DMA Controller (basic interface)
57 * Static Memory Controller (SMC or FMC) - Only SPI Flash support
58 * SPI Memory Controller
59 * USB 2.0 Controller
60 * SD/MMC storage controllers
61 * SDRAM controller (dummy interface for basic settings and training)
62 * Watchdog Controller
63 * GPIO Controller (Master only)
64 * UART
65 * Ethernet controllers
66 * Front LEDs (PCA9552 on I2C bus)
67 * LPC Peripheral Controller (a subset of subdevices are supported)
68 * Hash/Crypto Engine (HACE) - Hash support only. TODO: HMAC and RSA
69 * ADC
70 * Secure Boot Controller (AST2600)
71 * eMMC Boot Controller (dummy)
72 * PECI Controller (minimal)
73 * I3C Controller
74 * Internal Bridge Controller (SLI dummy)
75
76
77Missing devices
78---------------
79
80 * Coprocessor support
81 * PWM and Fan Controller
82 * Slave GPIO Controller
83 * Super I/O Controller
84 * PCI-Express 1 Controller
85 * Graphic Display Controller
86 * MCTP Controller
87 * Mailbox Controller
88 * Virtual UART
89 * eSPI Controller
90
91Boot options
92------------
93
94The Aspeed machines can be started using the ``-kernel`` and ``-dtb`` options
95to load a Linux kernel or from a firmware. Images can be downloaded from the
96OpenBMC jenkins :
97
98   https://jenkins.openbmc.org/job/ci-openbmc/lastSuccessfulBuild/
99
100or directly from the OpenBMC GitHub release repository :
101
102   https://github.com/openbmc/openbmc/releases
103
104or directly from the ASPEED Forked OpenBMC GitHub release repository :
105
106   https://github.com/AspeedTech-BMC/openbmc/releases
107
108Booting from a kernel image
109^^^^^^^^^^^^^^^^^^^^^^^^^^^
110
111To boot a kernel directly from a Linux build tree:
112
113.. code-block:: bash
114
115  $ qemu-system-arm -M ast2600-evb -nographic \
116        -kernel arch/arm/boot/zImage \
117        -dtb arch/arm/boot/dts/aspeed-ast2600-evb.dtb \
118        -initrd rootfs.cpio
119
120Booting from a flash image
121^^^^^^^^^^^^^^^^^^^^^^^^^^^
122
123The machine options specific to Aspeed to boot from a flash image are :
124
125 * ``execute-in-place`` which emulates the boot from the CE0 flash
126   device by using the FMC controller to load the instructions, and
127   not simply from RAM. This takes a little longer.
128
129 * ``fmc-model`` to change the default FMC Flash model. FW needs
130   support for the chip model to boot.
131
132 * ``spi-model`` to change the default SPI Flash model.
133
134To boot the machine from the flash image, use an MTD drive :
135
136.. code-block:: bash
137
138  $ qemu-system-arm -M romulus-bmc -nic user \
139	-drive file=obmc-phosphor-image-romulus.static.mtd,format=raw,if=mtd -nographic
140
141To use other flash models, for instance a different FMC chip and a
142bigger (64M) SPI for the ``ast2500-evb`` machine, run :
143
144.. code-block:: bash
145
146  -M ast2500-evb,fmc-model=mx25l25635e,spi-model=mx66u51235f
147
148When more flexibility is needed to define the flash devices, to use
149different flash models or define all flash devices (up to 8), the
150``-nodefaults`` QEMU option can be used to avoid creating the default
151flash devices.
152
153Flash devices should then be created from the command line and attached
154to a block device :
155
156.. code-block:: bash
157
158  $ qemu-system-arm -M ast2600-evb \
159        -blockdev node-name=fmc0,driver=file,filename=/path/to/fmc0.img \
160	-device mx66u51235f,bus=ssi.0,cs=0x0,drive=fmc0 \
161	-blockdev node-name=fmc1,driver=file,filename=/path/to/fmc1.img \
162	-device mx66u51235f,bus=ssi.0,cs=0x1,drive=fmc1 \
163	-blockdev node-name=spi1,driver=file,filename=/path/to/spi1.img \
164	-device mx66u51235f,cs=0x0,bus=ssi.1,drive=spi1 \
165	-nographic -nodefaults
166
167In that case, the machine boots fetching instructions from the FMC0
168device. It is slower to start but closer to what HW does. Using the
169machine option ``execute-in-place`` has a similar effect.
170
171Booting from an eMMC image
172^^^^^^^^^^^^^^^^^^^^^^^^^^
173
174The machine options specific to Aspeed machines to boot from an eMMC
175image are :
176
177 * ``boot-emmc`` to set or unset boot from eMMC (AST2600).
178
179Only the ``ast2600-evb`` and ``rainier-emmc`` machines have support to
180boot from an eMMC device. In this case, the machine assumes that the
181eMMC image includes special boot partitions. Such an image can be
182built this way :
183
184.. code-block:: bash
185
186   $ dd if=/dev/zero of=mmc-bootarea.img count=2 bs=1M
187   $ dd if=u-boot-spl.bin of=mmc-bootarea.img conv=notrunc
188   $ dd if=u-boot.bin of=mmc-bootarea.img conv=notrunc count=64 bs=1K
189   $ cat mmc-bootarea.img obmc-phosphor-image.wic > mmc.img
190   $ truncate --size 16GB mmc.img
191
192Boot the machine ``rainier-emmc`` with :
193
194.. code-block:: bash
195
196   $ qemu-system-arm -M rainier-bmc \
197         -drive file=mmc.img,format=raw,if=sd,index=2 \
198         -nographic
199
200The ``boot-emmc`` option can be set or unset, to change the default
201boot mode of machine: SPI or eMMC. This can be useful to boot the
202``ast2600-evb`` machine from an eMMC device (default being SPI) or to
203boot the ``rainier-bmc`` machine from a flash device (default being
204eMMC).
205
206As an example, here is how to to boot the ``rainier-bmc`` machine from
207the flash device with ``boot-emmc=false`` and let the machine use an
208eMMC image :
209
210.. code-block:: bash
211
212   $ qemu-system-arm -M rainier-bmc,boot-emmc=false \
213        -drive file=flash.img,format=raw,if=mtd \
214        -drive file=mmc.img,format=raw,if=sd,index=2 \
215        -nographic
216
217It should be noted that in this case the eMMC device must not have
218boot partitions, otherwise the contents will not be accessible to the
219machine.  This limitation is due to the use of the ``-drive``
220interface.
221
222Ideally, one should be able to define the eMMC device and the
223associated backend directly on the command line, such as :
224
225.. code-block:: bash
226
227   -blockdev node-name=emmc0,driver=file,filename=mmc.img \
228   -device emmc,bus=sdhci-bus.2,drive=emmc0,boot-partition-size=1048576,boot-config=8
229
230This is not yet supported (as of QEMU-10.0). Work is needed to
231refactor the sdhci bus model.
232
233Other booting options
234^^^^^^^^^^^^^^^^^^^^^
235
236Other machine options specific to Aspeed machines are :
237
238 * ``bmc-console`` to change the default console device. Most of the
239   machines use the ``UART5`` device for a boot console, which is
240   mapped on ``/dev/ttyS4`` under Linux, but it is not always the
241   case.
242
243To change the boot console and use device ``UART3`` (``/dev/ttyS2``
244under Linux), use :
245
246.. code-block:: bash
247
248  -M ast2500-evb,bmc-console=uart3
249
250Booting the ast2700-evb machine
251^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
252
253Boot the AST2700 machine from the flash image, use an MTD drive :
254
255.. code-block:: bash
256
257  IMGDIR=ast2700-default
258  UBOOT_SIZE=$(stat --format=%s -L ${IMGDIR}/u-boot-nodtb.bin)
259
260  $ qemu-system-aarch64 -M ast2700-evb \
261       -device loader,force-raw=on,addr=0x400000000,file=${IMGDIR}/u-boot-nodtb.bin \
262       -device loader,force-raw=on,addr=$((0x400000000 + ${UBOOT_SIZE})),file=${IMGDIR}/u-boot.dtb \
263       -device loader,force-raw=on,addr=0x430000000,file=${IMGDIR}/bl31.bin \
264       -device loader,force-raw=on,addr=0x430080000,file=${IMGDIR}/optee/tee-raw.bin \
265       -device loader,cpu-num=0,addr=0x430000000 \
266       -device loader,cpu-num=1,addr=0x430000000 \
267       -device loader,cpu-num=2,addr=0x430000000 \
268       -device loader,cpu-num=3,addr=0x430000000 \
269       -smp 4 \
270       -drive file=${IMGDIR}/image-bmc,format=raw,if=mtd \
271       -nographic
272
273Aspeed minibmc family boards (``ast1030-evb``)
274==================================================================
275
276The QEMU Aspeed machines model mini BMCs of various Aspeed evaluation
277boards. They are based on different releases of the
278Aspeed SoC : the AST1030 integrating an ARM Cortex M4F CPU (200MHz).
279
280The SoC comes with SRAM, SPI, I2C, etc.
281
282AST1030 SoC based machines :
283
284- ``ast1030-evb``          Aspeed AST1030 Evaluation board (Cortex-M4F)
285
286Supported devices
287-----------------
288
289 * SMP (for the AST1030 Cortex-M4F)
290 * Interrupt Controller (VIC)
291 * Timer Controller
292 * I2C Controller
293 * System Control Unit (SCU)
294 * SRAM mapping
295 * Static Memory Controller (SMC or FMC) - Only SPI Flash support
296 * SPI Memory Controller
297 * USB 2.0 Controller
298 * Watchdog Controller
299 * GPIO Controller (Master only)
300 * UART
301 * LPC Peripheral Controller (a subset of subdevices are supported)
302 * Hash/Crypto Engine (HACE) - Hash support only. TODO: HMAC and RSA
303 * ADC
304 * Secure Boot Controller
305 * PECI Controller (minimal)
306
307
308Missing devices
309---------------
310
311 * PWM and Fan Controller
312 * Slave GPIO Controller
313 * Mailbox Controller
314 * Virtual UART
315 * eSPI Controller
316 * I3C Controller
317
318Boot options
319------------
320
321The Aspeed machines can be started using the ``-kernel`` to load a
322Zephyr OS or from a firmware. Images can be downloaded from the
323ASPEED GitHub release repository :
324
325   https://github.com/AspeedTech-BMC/zephyr/releases
326
327To boot a kernel directly from a Zephyr build tree:
328
329.. code-block:: bash
330
331  $ qemu-system-arm -M ast1030-evb -nographic \
332        -kernel zephyr.elf
333