[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC PATCH v2 14/16] docs/system: add doc about the initialized machine
From: |
Damien Hedde |
Subject: |
[RFC PATCH v2 14/16] docs/system: add doc about the initialized machine phase and an example |
Date: |
Wed, 22 Sep 2021 18:14:03 +0200 |
Signed-off-by: Damien Hedde <damien.hedde@greensocs.com>
---
docs/system/managed-startup.rst | 77 +++++++++++++++++++++++++++++++++
1 file changed, 77 insertions(+)
diff --git a/docs/system/managed-startup.rst b/docs/system/managed-startup.rst
index 9bcf98ea79..af12a10d27 100644
--- a/docs/system/managed-startup.rst
+++ b/docs/system/managed-startup.rst
@@ -32,4 +32,81 @@ machine, including but not limited to:
- ``query-qmp-schema``
- ``query-commands``
- ``query-status``
+- ``x-machine-init``
- ``x-exit-preconfig``
+
+In particular these commands allow to advance and stop qemu at different
+phases of the VM creation and finally to leave the "preconfig" state. The
+accessible phases are:
+
+- ``accel-created``
+- ``initialized``
+- ``ready``
+
+The order of the phases is enforced. It is not possible to go backwards.
+Note that other early phases exist, but they are not attainable with
+``--preconfig``. Depending on the phase, QMP commands can be issued to modify
+some part of the VM creation.
+
+accel-created phase
+-------------------
+
+Initial phase entered with ``--preconfig``.
+
+initialized phase
+-----------------
+
+``x-machine-init`` advances to ``initialized`` phase. During this phase, the
+machine is initialized and populated with buses and devices. The following QMP
+commands are available to manually populate or modify the machine:
+
+- ``device_add``
+- ``x-sysbus-mmio-map``
+- ``qom-set``
+
+ready phase
+-----------
+
+``x-exit-preconfig`` advances to the final phase. When entering this phase,
+the VM creation finishes. "preconfig" state is then done and QEMU goes to
+normal execution.
+
+Machine creation example
+------------------------
+
+The following is an example that shows how to add some devices with qmp
+commands, memory map them, and add interrupts::
+
+ x-machine-init
+
+ device_add driver=sysbus-memory id=rom size=0x4000 readonly=true
+ x-sysbus-mmio-map device=rom addr=32768
+
+ device_add driver=sysbus-memory id=flash size=0x80000 readonly=true
+ x-sysbus-mmio-map device=flash addr=536870912
+
+ device_add driver=sysbus-memory id=ram size=0x10000
+ x-sysbus-mmio-map device=ram addr=268435456
+
+ device_add driver=ibex-plic id=plic
+ x-sysbus-mmio-map device=plic addr=1090584576
+
+ device_add driver=ibex-uart id=uart chardev=serial0
+ x-sysbus-mmio-map device=uart addr=1073741824
+ qom-set path=uart property=sysbus-irq[0] value=plic/unnamed-gpio-in[1]
+ qom-set path=uart property=sysbus-irq[1] value=plic/unnamed-gpio-in[2]
+ qom-set path=uart property=sysbus-irq[2] value=plic/unnamed-gpio-in[3]
+ qom-set path=uart property=sysbus-irq[3] value=plic/unnamed-gpio-in[4]
+
+ x-exit-preconfig
+
+These commands reproduce a subset of the riscv32 opentitan (hw/riscv/opentitan)
+machine. We can start qemu using::
+
+ qemu-sytem-riscv32 -preconfig -qmp unix:./qmp-sock,server \
+ -machine none -cpu lowriscv-ibex -serial mon:stdio ...
+
+Then we just have to issue the commands, for example using `qmp-shell`. If the
+previous commands were in a file named `machine.qmp`, we could do::
+
+ qmp-shell ./qmp-sock < machine.qmp
--
2.33.0
- Re: [RFC PATCH v2 07/16] hw/core/machine: add machine_class_is_dynamic_sysbus_dev_allowed, (continued)
- [RFC PATCH v2 03/16] qapi: Implement x-machine-init QMP command, Damien Hedde, 2021/09/22
- [RFC PATCH v2 09/16] hw/core/machine: Remove the dynamic sysbus devices type check, Damien Hedde, 2021/09/22
- [RFC PATCH v2 04/16] softmmu/qdev-monitor: add error handling in qdev_set_id, Damien Hedde, 2021/09/22
- [RFC PATCH v2 06/16] qapi: Allow device_add to execute in machine initialized phase, Damien Hedde, 2021/09/22
- [RFC PATCH v2 05/16] qdev-monitor: prevent conflicts between qmp/device_add and cli/-device, Damien Hedde, 2021/09/22
- [RFC PATCH v2 08/16] qdev-monitor: Check sysbus device type before creating it, Damien Hedde, 2021/09/22
- [RFC PATCH v2 11/16] softmmu/memory: add memory_region_try_add_subregion function, Damien Hedde, 2021/09/22
- [RFC PATCH v2 14/16] docs/system: add doc about the initialized machine phase and an example,
Damien Hedde <=
- [RFC PATCH v2 12/16] add x-sysbus-mmio-map qmp command, Damien Hedde, 2021/09/22
- [RFC PATCH v2 10/16] qdev-monitor: allow adding any sysbus device before machine is ready, Damien Hedde, 2021/09/22
- [RFC PATCH v2 16/16] hw/intc/ibex_plic: set user_creatable, Damien Hedde, 2021/09/22
- [RFC PATCH v2 13/16] hw/mem/system-memory: add a memory sysbus device, Damien Hedde, 2021/09/22
- [RFC PATCH v2 15/16] hw/char/ibex_uart: set user_creatable, Damien Hedde, 2021/09/22
- Re: [RFC PATCH v2 00/16] Initial support for machine creation via QMP, Philippe Mathieu-Daudé, 2021/09/22