[PATCH v5 00/26] fdt: Make OF_BOARD a boolean option

François Ozog francois.ozog at linaro.org
Wed Nov 3 18:13:02 CET 2021


Hi Simon

I don't know if this is correct etiquette but at this moment it feels just
right to do this:
The problem is not confusion it is that the patch set goes in a direction
that makes no sense.

On Tue, 26 Oct 2021 at 02:24, Simon Glass <sjg at chromium.org> wrote:

> With Ilias' efforts we have dropped OF_PRIOR_STAGE and OF_HOSTFILE so
> there are only three ways to obtain a devicetree:
>
>    - OF_SEPARATE - the normal way, where the devicetree is built and
>       appended to U-Boot
>    - OF_EMBED - for development purposes, the devicetree is embedded in
>       the ELF file (also used for EFI)
>    - OF_BOARD - the board figures it out on its own
>
> YES! perfect!
Default config for boards like RPI4, Qemu and SystemReady ones should be
OF_BOARD.
There may be an override for the advanced developer that need a playground
for those boards; with a warning:
"for debug purposes, turning on this option for this platform assumes you
know exactly what you are doing."

The last one is currently set up so that no devicetree is needed at all
> in the U-Boot tree.

Rightfully as you write below "it comes from an entity that "have a better
idea about the hardware".

> Most boards do provide one, but some don't. Some
> don't even provide instructions on how to boot on the board.
>
> That is a documentation problem.

> The problems with this approach are documented in another patch in this
> series: "doc: Add documentation about devicetree usage"
>
> In practice, OF_BOARD is not really distinct from OF_SEPARATE. Any board
> can obtain its devicetree at runtime, even it is has a devicetree built
> in U-Boot.

That statement is I think the start of problems.

> This is because U-Boot may be a second-stage bootloader and its
> caller may have a better idea about the hardware available in the machine.
> This is the case with a few QEMU boards, for example.
>
> YES! exactly. Why would you ever embed a DT in U-Boot if it comes from an
entity that "have a better idea about the hardware"?
For advanced debugging yes. Otherwise no reasons.

> So it makes no sense to have OF_BOARD as a 'choice'. It should be an
> option, available with either OF_SEPARATE or OF_EMBED.
>
> Problem starts to grow.

> This series makes this change, adding various missing devicetree files
> (and placeholders) to make the build work.
>
> Note: If board maintainers are able to add their own patch to add the
> files, some patches in this series can be dropped.
>
> It also provides a few qemu clean-ups discovered along the way.
>
> Note: This breaks the qemu-riscv64_spl test, which still needs
> investigation.
>
> [1]
> https://patchwork.ozlabs.org/project/uboot/patch/20210919215111.3830278-3-sjg@chromium.org/
>
> Changes in v5:
> - Bring into the OF_BOARD series
> - Rebase to master and drop mention of OF_PRIOR_STAGE, since removed
> - Refer to the 'control' DTB in the first paragraph
> - Use QEMU instead of qemu
> - Merge RISC-V and ARM patches since they are similar
> - Add new patches to clean up fdtdec_setup() and surrounds
>
> Changes in v3:
> - Clarify the 'bug' refered to at the top
> - Reword 'This means that there' paragraph to explain U-Boot-specific
> things
> - Move to doc/develop/devicetree now that OF_CONTROL is in the docs
>
> Changes in v2:
> - Fix typos per Sean (thank you!) and a few others
> - Add a 'Use of U-Boot /config node' section
> - Drop mention of dm-verity since that actually uses the kernel cmdline
> - Explain that OF_BOARD will still work after these changes (in
>   'Once this bug is fixed...' paragraph)
> - Expand a bit on the reason why the 'Current situation' is bad
> - Clarify in a second place that Linux and U-Boot use the same devicetree
>   in 'To be clear, while U-Boot...'
> - Expand on why we should have rules for other projects in
>   'Devicetree in another project'
> - Add a comment as to why devicetree in U-Boot is not 'bad design'
> - Reword 'in-tree U-Boot devicetree' to 'devicetree source in U-Boot'
> - Rewrite 'Devicetree generated on-the-fly in another project' to cover
>   points raised on v1
> - Add 'Why does U-Boot have its nodes and properties?'
> - Add 'Why not have two devicetrees?'
>
> Ilias Apalodimas (1):
>   sandbox: Remove OF_HOSTFILE
>
> Simon Glass (25):
>   doc: Add documentation about devicetree usage
>   arm: qemu: Mention -nographic in the docs
>   arm: riscv: qemu: Explain how to extract the generated dt
>   arm: qemu: Add a devicetree file for qemu_arm
>   arm: qemu: Add a devicetree file for qemu_arm64
>   riscv: qemu: Add devicetree files for qemu_riscv32/64
>   arm: rpi: Add a devicetree file for rpi_4
>   arm: vexpress: Add a devicetree file for juno
>   arm: xenguest_arm64: Add a fake devicetree file
>   arm: octeontx: Add a fake devicetree file
>   arm: xilinx_versal_virt: Add a devicetree file
>   arm: bcm7xxx: Add a devicetree file
>   arm: qemu-ppce500: Add a devicetree file
>   arm: highbank: Add a fake devicetree file
>   fdt: Make OF_BOARD a bool option
>   Drop CONFIG_BINMAN_STANDALONE_FDT
>   doc: Update info on devicetree update
>   fdt: Move MULTI_DTB_FIT handling out of fdtdec_setup()
>   fdt: Drop #ifdefs with MULTI_DTB_FIT
>   fdt: Drop CONFIG_SPL_BUILD check in fdtdec_setup()
>   fdt: Drop #ifdef around board_fdt_blob_setup()
>   fdt: Use if() for fdtcontroladdr check
>   fdt: Drop OF_CONTROL check in fdtdec_setup()
>   fdt: Drop remaining preprocessor macros in fdtdec_setup()
>   fdt: Don't call board_fdt_blob_setup() without OF_BOARD
>
>  Makefile                                  |    7 +-
>  arch/arm/dts/Makefile                     |   20 +-
>  arch/arm/dts/bcm2711-rpi-4-b.dts          | 1958 +++++++++++++++++++++
>  arch/arm/dts/bcm7xxx.dts                  |   15 +
>  arch/arm/dts/highbank.dts                 |   14 +
>  arch/arm/dts/juno-r2.dts                  | 1038 +++++++++++
>  arch/arm/dts/octeontx.dts                 |   14 +
>  arch/arm/dts/qemu-arm.dts                 |  402 +++++
>  arch/arm/dts/qemu-arm64.dts               |  381 ++++
>  arch/arm/dts/xenguest-arm64.dts           |   15 +
>  arch/arm/dts/xilinx-versal-virt.dts       |  307 ++++
>  arch/powerpc/dts/Makefile                 |    1 +
>  arch/powerpc/dts/qemu-ppce500.dts         |  264 +++
>  arch/riscv/dts/Makefile                   |    2 +-
>  arch/riscv/dts/qemu-virt.dts              |    8 -
>  arch/riscv/dts/qemu-virt32.dts            |  217 +++
>  arch/riscv/dts/qemu-virt64.dts            |  217 +++
>  arch/sandbox/cpu/cpu.c                    |   21 +-
>  arch/sandbox/include/asm/u-boot-sandbox.h |    8 -
>  configs/bcm7260_defconfig                 |    1 +
>  configs/bcm7445_defconfig                 |    1 +
>  configs/highbank_defconfig                |    2 +-
>  configs/octeontx2_95xx_defconfig          |    1 +
>  configs/octeontx2_96xx_defconfig          |    1 +
>  configs/octeontx_81xx_defconfig           |    1 +
>  configs/octeontx_83xx_defconfig           |    1 +
>  configs/qemu-ppce500_defconfig            |    2 +
>  configs/qemu-riscv32_defconfig            |    1 +
>  configs/qemu-riscv32_smode_defconfig      |    1 +
>  configs/qemu-riscv32_spl_defconfig        |    4 +-
>  configs/qemu-riscv64_defconfig            |    1 +
>  configs/qemu-riscv64_smode_defconfig      |    1 +
>  configs/qemu-riscv64_spl_defconfig        |    3 +-
>  configs/qemu_arm64_defconfig              |    1 +
>  configs/qemu_arm_defconfig                |    1 +
>  configs/rpi_4_32b_defconfig               |    1 +
>  configs/rpi_4_defconfig                   |    1 +
>  configs/rpi_arm64_defconfig               |    1 +
>  configs/sandbox64_defconfig               |    2 +-
>  configs/sandbox_defconfig                 |    2 +-
>  configs/sandbox_flattree_defconfig        |    2 +-
>  configs/sandbox_noinst_defconfig          |    2 +-
>  configs/sandbox_spl_defconfig             |    2 +-
>  configs/tools-only_defconfig              |    2 +-
>  configs/vexpress_aemv8a_juno_defconfig    |    1 +
>  configs/xenguest_arm64_defconfig          |    1 +
>  configs/xilinx_versal_virt_defconfig      |    1 +
>  doc/board/emulation/qemu-arm.rst          |   10 +-
>  doc/board/emulation/qemu-riscv.rst        |    3 +
>  doc/develop/devicetree/control.rst        |    7 +-
>  doc/develop/devicetree/dt_qemu.rst        |   48 +
>  doc/develop/devicetree/dt_update.rst      |  498 ++++++
>  doc/develop/devicetree/index.rst          |    2 +
>  dts/Kconfig                               |   37 +-
>  include/asm-generic/global_data.h         |    8 +
>  include/fdtdec.h                          |   21 +-
>  lib/fdtdec.c                              |  116 +-
>  scripts/Makefile.spl                      |    4 +-
>  tools/binman/binman.rst                   |   20 -
>  59 files changed, 5560 insertions(+), 164 deletions(-)
>  create mode 100644 arch/arm/dts/bcm2711-rpi-4-b.dts
>  create mode 100644 arch/arm/dts/bcm7xxx.dts
>  create mode 100644 arch/arm/dts/highbank.dts
>  create mode 100644 arch/arm/dts/juno-r2.dts
>  create mode 100644 arch/arm/dts/octeontx.dts
>  create mode 100644 arch/arm/dts/qemu-arm.dts
>  create mode 100644 arch/arm/dts/qemu-arm64.dts
>  create mode 100644 arch/arm/dts/xenguest-arm64.dts
>  create mode 100644 arch/arm/dts/xilinx-versal-virt.dts
>  create mode 100644 arch/powerpc/dts/qemu-ppce500.dts
>  delete mode 100644 arch/riscv/dts/qemu-virt.dts
>  create mode 100644 arch/riscv/dts/qemu-virt32.dts
>  create mode 100644 arch/riscv/dts/qemu-virt64.dts
>  create mode 100644 doc/develop/devicetree/dt_qemu.rst
>  create mode 100644 doc/develop/devicetree/dt_update.rst
>
> --
> 2.33.0.1079.g6e70778dc9-goog
>
>

-- 
François-Frédéric Ozog | *Director Business Development*
T: +33.67221.6485
francois.ozog at linaro.org | Skype: ffozog


More information about the U-Boot mailing list