[PATCH v3 02/22] emulation: fdt: Allow using U-Boot's device tree with QEMU
Simon Glass
sjg at chromium.org
Thu Apr 17 20:15:44 CEST 2025
At present it is impossible to change the qemu_arm64 defconfig to
obtain a devicetree from the U-Boot build.
This is necessary for FIT validation, for example, where the signature
node must be compiled into U-Boot.
A proposed change to QEMU to allow device tree additions has been
blocked for several years. The only known workaround is to use QEMU's
dumpdtb option, merge in the signature node manually, disable
OF_HAS_PRIOR_STAGE and then start QEMU with special arguments. This is
complicated enough that it is documented in U-Boot[1].
Unfortunately the only way to disable OF_HAS_PRIOR_STAGE at present is
to hack the Kconfig.
Add a new QEMU_MANUAL_DTB Kconfig option which makes OF_HAS_PRIOR_STAGE
optional, thus avoiding needing to patch U-Boot to get this working.
This seems a clearer solution than just making OF_HAS_PRIOR_STAGE
visible, since that symbol is intended to be set automatically by each
platform.
[1] https://docs.u-boot.org/en/latest/develop/devicetree/dt_qemu.html
Link: https://patchwork.kernel.org/project/qemu-devel/patch/20210926183410.256484-1-sjg@chromium.org/#24481799
Signed-off-by: Simon Glass <sjg at chromium.org>
Suggested-by: Tom Rini <trini at konsulko.com>
---
Changes in v3:
- Add mention of QEMU_MANUAL_DTB in doc/
- Fix 'usiing' typo
Changes in v2:
- Add a new QEMU-specific Kconfig instead
- Move patch into the standard-passage series
arch/arm/Kconfig | 2 +-
board/emulation/common/Kconfig | 12 ++++++++++++
doc/develop/devicetree/dt_qemu.rst | 8 ++++++++
dts/Kconfig | 9 +++++++--
4 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index d8c99d3ab19..e4fc16e0e9c 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1080,7 +1080,7 @@ config ARCH_QEMU
imply DM_RNG
imply DM_RTC
imply RTC_PL031
- imply OF_HAS_PRIOR_STAGE if !TARGET_QEMU_ARM_SBSA
+ imply OF_HAS_PRIOR_STAGE if !TARGET_QEMU_ARM_SBSA && !QEMU_MANUAL_DTB
imply VIDEO
imply VIDEO_BOCHS
imply SYS_WHITE_ON_BLACK
diff --git a/board/emulation/common/Kconfig b/board/emulation/common/Kconfig
index 4c15c8bcb89..3f9a6ea578f 100644
--- a/board/emulation/common/Kconfig
+++ b/board/emulation/common/Kconfig
@@ -13,3 +13,15 @@ config MTDPARTS_NOR1
help
This define the partition of nor1 used to build mtparts dynamically
for the u-boot env stored on nor1.
+
+config QEMU_MANUAL_DTB
+ bool "Manually provide a device tree to QEMU"
+ help
+ For some use cases, such as FIT validation where a public key must be
+ placed in U-Boot's device tree, we need to override the device tree
+ that QEMU would normally provide to us.
+
+ Note: this work-around is necessary since Linaro has blocked
+ addition of a feature to support additions to the QEMU devicetree:
+
+ Link: https://patchwork.kernel.org/project/qemu-devel/patch/20210926183410.256484-1-sjg@chromium.org/#24481799
diff --git a/doc/develop/devicetree/dt_qemu.rst b/doc/develop/devicetree/dt_qemu.rst
index 8ba2b225590..79e71de9812 100644
--- a/doc/develop/devicetree/dt_qemu.rst
+++ b/doc/develop/devicetree/dt_qemu.rst
@@ -46,3 +46,11 @@ You can then run qemu with the merged devicetree, e.g.::
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.
+
+It is also possible to enable CONFIG_QEMU_MANUAL_DTB so that U-Boot's devicetree
+is built as part of u-boot.bin and can potentially be supplied to QEMU.
+
+See also the
+`rejected QEMU patch <https://patchwork.kernel.org/project/qemu-devel/patch/20231117021840.117874-1-sjg@chromium.org>`_
+and
+`discussion <https://patchwork.kernel.org/project/qemu-devel/patch/20210926183410.256484-1-sjg@chromium.org>`_.
diff --git a/dts/Kconfig b/dts/Kconfig
index 6a5141b56e9..c544f948a15 100644
--- a/dts/Kconfig
+++ b/dts/Kconfig
@@ -197,8 +197,13 @@ config OF_HAS_PRIOR_STAGE
development purposes, but it is not recommended, and likely will not
even work, for production systems.
- Note: This option must be set in Kconfig and cannot be enabled or
- disabled in the board's defconfig file.
+ Note: This option can be disabled for QEMU using QEMU_MANUAL_DTB thus
+ allowing QEMU to support FIT validation, where the devicetree must
+ include a public key.
+
+ See also this for context:
+
+ https://patchwork.kernel.org/project/qemu-devel/patch/20210926183410.256484-1-sjg@chromium.org/#24481799
config OF_OMIT_DTB
bool "Omit the device tree output when building"
--
2.43.0
More information about the U-Boot
mailing list