u-boot.lists.denx.de archive mirror
 help / color / mirror / Atom feed
From: Simon Glass <sjg@chromium.org>
To: U-Boot Mailing List <u-boot@lists.denx.de>
Cc: "Ilias Apalodimas" <ilias.apalodimas@linaro.org>,
	"Sean Anderson" <seanga2@gmail.com>,
	"Heinrich Schuchardt" <xypron.glpk@gmx.de>,
	"Tom Rini" <trini@konsulko.com>,
	"Mark Kettenis" <mark.kettenis@xs4all.nl>,
	"François Ozog" <francois.ozog@linaro.org>,
	"Simon Glass" <sjg@chromium.org>,
	"Albert Aribaud" <albert.u.boot@aribaud.net>
Subject: [PATCH v8 02/32] arm: riscv: qemu: Explain how to extract the generated dt
Date: Thu, 16 Dec 2021 20:59:09 -0700	[thread overview]
Message-ID: <20211217035939.670884-3-sjg@chromium.org> (raw)
In-Reply-To: <20211217035939.670884-1-sjg@chromium.org>

QEMU currently generates a devicetree for use with U-Boot. Explain how to
obtain it.

Also explain how to merge it to produce a devicetree with the U-Boot
features included.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v8:
- Rebase patch

Changes in v5:
- Merge RISC-V and ARM patches since they are similar

 doc/board/emulation/qemu-arm.rst   |  3 ++
 doc/board/emulation/qemu-riscv.rst |  3 ++
 doc/develop/devicetree/dt_qemu.rst | 48 ++++++++++++++++++++++++++++++
 doc/develop/devicetree/index.rst   |  1 +
 4 files changed, 55 insertions(+)
 create mode 100644 doc/develop/devicetree/dt_qemu.rst

diff --git a/doc/board/emulation/qemu-arm.rst b/doc/board/emulation/qemu-arm.rst
index 8bd7b60cdb4..ff64ec08c3e 100644
--- a/doc/board/emulation/qemu-arm.rst
+++ b/doc/board/emulation/qemu-arm.rst
@@ -21,6 +21,9 @@ The 'virt' platform provides the following as the basic functionality:
 
 Additionally, a number of optional peripherals can be added to the PCI bus.
 
+See :doc:`../../develop/devicetree/dt_qemu` for information on how to see
+the devicetree actually generated by QEMU.
+
 Building U-Boot
 ---------------
 Set the CROSS_COMPILE environment variable as usual, and run:
diff --git a/doc/board/emulation/qemu-riscv.rst b/doc/board/emulation/qemu-riscv.rst
index 4b8e104a215..3409fff8117 100644
--- a/doc/board/emulation/qemu-riscv.rst
+++ b/doc/board/emulation/qemu-riscv.rst
@@ -13,6 +13,9 @@ The QEMU virt machine models a generic RISC-V virtual machine with support for
 the VirtIO standard networking and block storage devices. It has CLINT, PLIC,
 16550A UART devices in addition to VirtIO and it also uses device-tree to pass
 configuration information to guest software. It implements RISC-V privileged
+
+See :doc:`../../develop/devicetree/dt_qemu` for information on how to see
+the devicetree actually generated by QEMU.
 architecture spec v1.10.
 
 Building U-Boot
diff --git a/doc/develop/devicetree/dt_qemu.rst b/doc/develop/devicetree/dt_qemu.rst
new file mode 100644
index 00000000000..c25c4fb053d
--- /dev/null
+++ b/doc/develop/devicetree/dt_qemu.rst
@@ -0,0 +1,48 @@
+.. SPDX-License-Identifier: GPL-2.0+
+
+Devicetree in QEMU
+==================
+
+For QEMU on ARM, RISC-V and one PPC target, the devicetree is created on-the-fly
+by QEMU. It is intended for use in Linux but can be used by U-Boot also, so long
+as any nodes/properties needed by U-Boot are merged in.
+
+When `CONFIG_OF_BOARD` is enabled
+
+
+Obtaining the QEMU devicetree
+-----------------------------
+
+Where QEMU generates its own devicetree to pass to U-Boot tou can use
+`-dtb u-boot.dtb` to force QEMU to use U-Boot's in-tree version.
+
+To obtain the devicetree that qemu generates, add `-machine dumpdtb=qemu.dtb`,
+e.g.::
+
+    qemu-system-arm -machine virt -machine dumpdtb=qemu.dtb
+
+    qemu-system-aarch64 -machine virt -machine dumpdtb=qemu.dtb
+
+    qemu-system-riscv64 -machine virt -machine dumpdtb=qemu.dtb
+
+
+Merging in U-Boot nodes/properties
+----------------------------------
+
+Various U-Boot features require nodes and properties in the U-Boot devicetree
+and at present QEMU is unaware of these. To use these you must manually merge
+in the appropriate pieces.
+
+One way to do this is with dtc. This command runs dtc on each .dtb file in turn,
+to produce a text file. It drops the duplicate header on the qemu one. Then it
+joins them up and runs them through dtc to compile the output::
+
+    qemu-system-arm -machine virt -machine dumpdtb=qemu.dtb
+    cat  <(dtc -I dtb qemu.dtb) <(dtc -I dtb  u-boot.dtb |grep -v /dts-v1/) |dtc - -o merged.dtb
+
+You can then run qemu with the merged devicetree, e.g.::
+
+    qemu-system-arm -machine virt -nographic -bios u-boot.bin -dtb merged.dtb
+
+Note that there seems to be a bug in some versions of qemu where the output of
+dumpdtb does not quite match what is provided to U-Boot.
diff --git a/doc/develop/devicetree/index.rst b/doc/develop/devicetree/index.rst
index fa5db3eb76e..2edb69572dd 100644
--- a/doc/develop/devicetree/index.rst
+++ b/doc/develop/devicetree/index.rst
@@ -11,3 +11,4 @@ build-time and runtime configuration.
 
    intro
    control
+   dt_qemu
-- 
2.34.1.173.g76aa8bc2d0-goog


  parent reply	other threads:[~2021-12-17  4:00 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-17  3:59 [PATCH v8 00/32] fdt: Make OF_BOARD a boolean option Simon Glass
2021-12-17  3:59 ` [PATCH v8 01/32] arm: qemu: Mention -nographic in the docs Simon Glass
2021-12-24 14:34   ` Tom Rini
2021-12-17  3:59 ` Simon Glass [this message]
2021-12-17  3:59 ` [PATCH v8 03/32] arm: qemu: Add a devicetree file for qemu_arm Simon Glass
2021-12-17  3:59 ` [PATCH v8 04/32] arm: qemu: Add a devicetree file for qemu_arm64 virt Simon Glass
2021-12-17  3:59 ` [PATCH v8 05/32] riscv: qemu: Split devicetree files for qemu_riscv32/64 Simon Glass
2021-12-17  3:59 ` [PATCH v8 06/32] arm: rpi: Sync rpi dts files from Linux Simon Glass
2021-12-17  3:59 ` [PATCH v8 07/32] arm: vexpress: Add a devicetree files for juno Simon Glass
2021-12-18  3:30   ` Linus Walleij
2021-12-17  3:59 ` [PATCH v8 08/32] arm: xenguest_arm64: Add a empty devicetree file Simon Glass
2021-12-17  3:59 ` [PATCH v8 09/32] arm: octeontx: Add an " Simon Glass
2021-12-17  3:59 ` [PATCH v8 10/32] arm: xilinx_versal_virt: Add a " Simon Glass
2021-12-17  3:59 ` [PATCH v8 11/32] arm: bcm7xxx: " Simon Glass
2021-12-17  3:59 ` [PATCH v8 12/32] arm: qemu-ppce500: " Simon Glass
2021-12-17  3:59 ` [PATCH v8 13/32] arm: highbank: Add devicetree files Simon Glass
2021-12-17  3:59 ` [PATCH v8 14/32] fdt: Make OF_BOARD a bool option Simon Glass
2021-12-17  3:59 ` [PATCH v8 15/32] fdt: Drop CONFIG_BINMAN_STANDALONE_FDT Simon Glass
2021-12-17  3:59 ` [PATCH v8 16/32] fdt: Make it easier to debug u-boot.dtsi files Simon Glass
2021-12-17  3:59 ` [PATCH v8 17/32] fdt: Move MULTI_DTB_FIT handling out of fdtdec_setup() Simon Glass
2021-12-17  3:59 ` [PATCH v8 18/32] fdt: Drop #ifdefs with MULTI_DTB_FIT Simon Glass
2021-12-17  3:59 ` [PATCH v8 19/32] fdt: Drop CONFIG_SPL_BUILD check in fdtdec_setup() Simon Glass
2021-12-17  3:59 ` [PATCH v8 20/32] fdt: Drop #ifdef around board_fdt_blob_setup() Simon Glass
2021-12-17  3:59 ` [PATCH v8 21/32] fdt: Use if() for fdtcontroladdr check Simon Glass
2021-12-17  3:59 ` [PATCH v8 22/32] fdt: Drop OF_CONTROL check in fdtdec_setup() Simon Glass
2021-12-17  3:59 ` [PATCH v8 23/32] fdt: Drop remaining preprocessor macros " Simon Glass
2021-12-17  3:59 ` [PATCH v8 24/32] fdt: Don't call board_fdt_blob_setup() without OF_BOARD Simon Glass
2021-12-17  3:59 ` [PATCH v8 25/32] dm: core: Allow getting some basic stats Simon Glass
2021-12-17  3:59 ` [PATCH v8 26/32] fdt: Record where the devicetree came from Simon Glass
2021-12-17  3:59 ` [PATCH v8 27/32] fdt: Report the devicetree source Simon Glass
2021-12-17  3:59 ` [PATCH v8 28/32] fdt: Add a Kconfig for boards with a prior stage Simon Glass
2021-12-17  3:59 ` [PATCH v8 29/32] fdt: Enable OF_HAS_PRIOR_STAGE for most boards with OF_BOARD Simon Glass
2021-12-17  3:59 ` [PATCH v8 30/32] fdt: Makefile: Ensure that OF_BOARD is used when needed Simon Glass
2021-12-24 14:34   ` Tom Rini
2021-12-17  3:59 ` [PATCH v8 31/32] fdt: Avoid emitting an device tree when not needed Simon Glass
2021-12-17  3:59 ` [PATCH v8 32/32] fdt: Show a runtime warning based on devicetree source Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211217035939.670884-3-sjg@chromium.org \
    --to=sjg@chromium.org \
    --cc=albert.u.boot@aribaud.net \
    --cc=francois.ozog@linaro.org \
    --cc=ilias.apalodimas@linaro.org \
    --cc=mark.kettenis@xs4all.nl \
    --cc=seanga2@gmail.com \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    --cc=xypron.glpk@gmx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).