mbox series

[00/21] Qualcomm generic board support

Message ID 20231121-b4-qcom-common-target-v1-0-9492198e0c15@linaro.org
Headers show
Series Qualcomm generic board support | expand

Message

Caleb Connolly Nov. 21, 2023, 5:09 p.m. UTC
Historically, Qualcomm boards in U-Boot have all had their own
board/qualcomm/xyz directory, their own CONFIG_TARGET_XYZ option, their
own hardcoded sysmap-xyz.c file, and their own U-Boot specific
devicetree with little/no compatibility with upstream DT.

This series makes a few final prepatory changes, and then replaces
almost all of the board specific code with generic alternatives. The end
result is that all Qualcomm boards both current and future (with the
exception of the db410c and db820c) can be supported by a single U-Boot
binary by just providing the correct DT. New boards can be added without
introducing any addition mach/ or board/ code or config options.

Due to the nature of this change, the patch ("mach-snapdragon:
generalise board support") has become pretty big, I tried a few
different ways to represent this in git history, but the other methods
(e.g. adding a stub "generic" target and removing it again) were more
confusing and made for much messier git history. The current patch is
mostly atomic, but requires regenerating the config.

The QCS404 EVB board had some code to enable the USB VBUS regulator,
this is dropped in favour of a adding a new vbus-supply property to the
dwc3-generic driver. This will also be used by the dragonboard845c in a
future patch. This handles the common case of a board requiring some
regulator be enabled for USB host mode.

A more detailed description of the changes is below.

== Memory map ==

The memory map was historically hardcoded into U-Boot, this meant that
U-Boot had to be built for a specific variant of a device. This is
changed to instead read the memory map from the DT /memory node.

Additionally, most boards mapped addresss 0x0 as valid, as a result if a
null pointer access happens then it will cause a bus stall (and board
hang). This is fixed so that null pointer accesses will now correctly
throw an exception.

== DT loading ==

Previously, boards used the FDT blob embedded into U-Boot (via
OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
bootloader, so we can instead rely on the first-stage bootloader to
populate some useful FDT properties for us (notably the /memory node and
KASLR seed) and fetch the DTB that it provides. Combined with the memory
map changes above, this let's us entirely avoid configuring the memory
map explicitly.

== defconfig ==

Most of the board defconfigs and config headers were quite similar, to
simplify maintenance going forward, all the fully generic boards (sdm845
and qcs404-evb so far) are adapted to use the new qcom_defconfig. Going
forward, all new Qualcomm boards should be supported by this defconfig.
A notable exception is for specific usecases (like U-Boot as the primary
bootloader).

== The older dragonboards ==

The db410c and db820c both have some custom board init code, as a result
they aren't yet binary compatible. mach-snapdragon is adjusted so
that all the necessary config options (e.g. CONFIG_SYS_BOARD) can be set
from their defconfigs, this makes it possible to enable support for new
boards without introducing additional config options.

The db410c can run U-Boot either chainloaded like the other boards, or
as a first-stage bootloader replacing aboot. However it was hardcoded to
only build for the latter option. This series introduces a new
"chainloaded" defconfig to enable easier testing via fastboot.

== dynamic environment variables ==

This series also introduces runtime-allocated load addresses via the lmb
allocator. This allows for booting on boards with vastly different
memory layouts without any pre-calculation or macro magic in the config
header. This feature is based on similar code in mach-apple.

The soc, board, and fdtfile environment variables are also generated
automatically. Many Qualcomm boards follow a similar scheme for DTB
naming such that the name can often be derived from the root compatible
properties. This is intended to cover the most common cases and be a
simple solution for booting generic distro images without having to
explicitly choose the right DTB. The U-Boot DTS can be tweaked if
necessary to produce the correct name, the variable can be overwritten,
or a bootloader like GRUB can load the devicetree instead.

== Upstream DT ==

All Qualcomm boards have had their devicetree files rewritten to be
based on the upstream SoC/PMIC DTSI files. Previous patch series made
the necessary driver adjustments to fully support the upstream DT
format. All future Qualcomm boards should use upstream DTS by default.

---
I have tested this series on the Dragonboard410c, Dragonboard820c, and
Dragonboard845c. I unfortunately don't have access to a QCS404 EVB board
to test.

This series is based on the qcom-next branch [1] and depends on my PMIC
fixes series [2], an integration branch for testing can be found at [3].
The non-qualcomm-specific changes (patches 1, 2, and 3) don't have any
dependencies.

[1]: https://source.denx.de/u-boot/custodians/u-boot-snapdragon
[2]: https://lore.kernel.org/u-boot/20231114-b4-qcom-dt-compat-v3-0-88a92f8f00ba@linaro.org/
[3]: https://source.denx.de/u-boot/custodians/u-boot-snapdragon/-/tree/b4/qcom-common-target

To: Neil Armstrong <neil.armstrong@linaro.org>
To: Sumit Garg <sumit.garg@linaro.org>
To: Ramon Fried <rfried.dev@gmail.com>
Cc: Marek Vasut <marex@denx.de>
To: Dzmitry Sankouski <dsankouski@gmail.com>
To: Caleb Connolly <caleb.connolly@linaro.org>
To: Peng Fan <peng.fan@nxp.com>
To: Jaehoon Chung <jh80.chung@samsung.com>
To: Rayagonda Kokatanur <rayagonda.kokatanur@broadcom.com>
To: Lukasz Majewski <lukma@denx.de>
To: Sean Anderson <seanga2@gmail.com>
To: Jorge Ramirez-Ortiz <jorge.ramirez.ortiz@gmail.com>
To: Stephan Gerhold <stephan@gerhold.net>
Cc:  <u-boot@lists.denx.de>

---
Caleb Connolly (21):
      arm: init: export prev_bl_fdt_addr
      arm: allow CONFIG_LINUX_KERNEL_IMAGE_HEADER to be set in defconfig
      usb: dwc3-generic: support external vbus regulator
      mmc: msm_sdhci: use modern clock handling
      dt-bindings: drop msm_sdhci binding
      clk/qcom: use upstream compatible properties
      serial: msm: add debug UART
      serial: msm: fix clock handling
      configs: add dragonboard410c_chainloaded_defconfig
      dts: dragonboard410c: fix compatible and clocks
      board: dragonboard410c: import board code from mach-snapdragon
      board: dragonboard820c: use LINUX_KERNEL_IMAGE_HEADER
      mach-snapdragon: generalise board support
      mach-snapdragon: dynamic load addresses
      mach-snapdragon: generate fdtfile automatically
      doc: board/qualcomm: document generic targets
      dts: sdm845: import DT from Linux
      dts: msm8916: import DT from Linux
      dts: msm8996: import DT from Linux
      dts: qcs404-evb: import DT from Linux
      MAINTAINERS: Qualcomm: add some missing paths

 MAINTAINERS                                        |   16 +-
 arch/arm/Kconfig                                   |    6 +-
 arch/arm/dts/Makefile                              |    9 +-
 arch/arm/dts/dragonboard410c-uboot.dtsi            |   44 -
 arch/arm/dts/dragonboard410c.dts                   |  198 +-
 arch/arm/dts/dragonboard820c-uboot.dtsi            |   32 -
 arch/arm/dts/dragonboard820c.dts                   |  129 +-
 arch/arm/dts/dragonboard845c-uboot.dtsi            |   26 -
 arch/arm/dts/dragonboard845c.dts                   |   23 +-
 arch/arm/dts/msm8916-pins.dtsi                     |  582 ++
 arch/arm/dts/msm8916-pm8916.dtsi                   |   76 +
 arch/arm/dts/msm8916.dtsi                          | 2194 ++++++++
 arch/arm/dts/msm8996.dtsi                          | 3959 +++++++++++++
 arch/arm/dts/pm8916.dtsi                           |  183 +
 arch/arm/dts/pm8994.dtsi                           |  152 +
 arch/arm/dts/pm8998.dtsi                           |  130 +
 arch/arm/dts/pms405.dtsi                           |  149 +
 arch/arm/dts/qcs404-evb-uboot.dtsi                 |   30 -
 arch/arm/dts/qcs404-evb.dts                        |  441 +-
 arch/arm/dts/qcs404.dtsi                           | 1830 ++++++
 arch/arm/dts/sdm845.dtsi                           | 5850 +++++++++++++++++++-
 arch/arm/dts/starqltechn-uboot.dtsi                |   27 -
 arch/arm/dts/starqltechn.dts                       |   34 +-
 arch/arm/lib/save_prev_bl_data.c                   |    5 +
 arch/arm/mach-snapdragon/Kconfig                   |   95 +-
 arch/arm/mach-snapdragon/Makefile                  |    8 +-
 arch/arm/mach-snapdragon/board.c                   |  303 +
 arch/arm/mach-snapdragon/include/mach/dram.h       |   12 -
 arch/arm/mach-snapdragon/init_sdm845.c             |   73 -
 arch/arm/mach-snapdragon/misc.c                    |   55 -
 arch/arm/mach-snapdragon/sysmap-apq8016.c          |   31 -
 arch/arm/mach-snapdragon/sysmap-apq8096.c          |   31 -
 arch/arm/mach-snapdragon/sysmap-qcs404.c           |   43 -
 arch/arm/mach-snapdragon/sysmap-sdm845.c           |   31 -
 board/qualcomm/dragonboard410c/Kconfig             |   15 -
 board/qualcomm/dragonboard410c/MAINTAINERS         |    1 +
 board/qualcomm/dragonboard410c/Makefile            |    3 +-
 board/qualcomm/dragonboard410c/dragonboard410c.c   |   31 +-
 .../qualcomm/dragonboard410c/misc.c                |   51 +-
 .../mach => board/qualcomm/dragonboard410c}/misc.h |    1 +
 board/qualcomm/dragonboard820c/Kconfig             |   15 -
 board/qualcomm/dragonboard820c/Makefile            |    1 -
 board/qualcomm/dragonboard820c/dragonboard820c.c   |   39 +-
 board/qualcomm/dragonboard820c/head.S              |   33 -
 board/qualcomm/dragonboard820c/u-boot.lds          |  111 -
 board/qualcomm/dragonboard845c/Kconfig             |   12 -
 board/qualcomm/qcs404-evb/Kconfig                  |   15 -
 board/qualcomm/qcs404-evb/qcs404-evb.c             |   21 +-
 configs/dragonboard410c_chainloaded_defconfig      |   72 +
 configs/dragonboard410c_defconfig                  |    6 +-
 configs/dragonboard820c_defconfig                  |    6 +-
 configs/dragonboard845c_defconfig                  |   29 -
 configs/qcom_defconfig                             |   71 +
 configs/qcs404evb_defconfig                        |   55 -
 configs/starqltechn_defconfig                      |   41 -
 doc/board/qualcomm/board.rst                       |  119 +
 doc/board/qualcomm/debugging.rst                   |   61 +
 doc/board/qualcomm/index.rst                       |    4 +-
 doc/board/qualcomm/qcs404.rst                      |   79 -
 doc/board/qualcomm/sdm845.rst                      |  162 -
 doc/device-tree-bindings/mmc/msm_sdhci.txt         |   25 -
 doc/device-tree-bindings/usb/ehci-msm.txt          |   10 -
 drivers/clk/qcom/clock-apq8016.c                   |    9 +-
 drivers/clk/qcom/clock-apq8096.c                   |    7 +-
 drivers/mmc/msm_sdhci.c                            |   69 +-
 drivers/phy/qcom/msm8916-usbh-phy.c                |    2 +-
 drivers/pinctrl/qcom/pinctrl-apq8016.c             |    2 +-
 drivers/serial/Kconfig                             |    8 +
 drivers/serial/serial_msm.c                        |   61 +-
 drivers/usb/dwc3/dwc3-generic.c                    |   12 +
 drivers/usb/host/ehci-msm.c                        |    2 +-
 include/configs/dragonboard845c.h                  |   20 -
 include/configs/qcom.h                             |   21 +
 include/configs/qcs404-evb.h                       |   20 -
 include/dt-bindings/arm/coresight-cti-dt.h         |   37 +
 include/dt-bindings/clock/qcom,camcc-sdm845.h      |  116 +
 include/dt-bindings/clock/qcom,dispcc-sdm845.h     |   56 +
 include/dt-bindings/clock/qcom,gcc-msm8916.h       |  179 +
 include/dt-bindings/clock/qcom,gcc-msm8996.h       |  360 ++
 include/dt-bindings/clock/qcom,gcc-qcs404.h        |    4 +
 include/dt-bindings/clock/qcom,gpucc-sdm845.h      |   24 +
 include/dt-bindings/clock/qcom,lpass-sdm845.h      |   15 +
 include/dt-bindings/clock/qcom,mmcc-msm8996.h      |  295 +
 include/dt-bindings/clock/qcom,rpmcc.h             |  174 +
 include/dt-bindings/clock/qcom,rpmh.h              |   37 +
 include/dt-bindings/clock/qcom,turingcc-qcs404.h   |   15 +
 include/dt-bindings/clock/qcom,videocc-sdm845.h    |   35 +
 include/dt-bindings/dma/qcom-gpi.h                 |   11 +
 include/dt-bindings/firmware/qcom,scm.h            |   18 +
 include/dt-bindings/iio/qcom,spmi-vadc.h           |  300 +
 include/dt-bindings/interconnect/qcom,msm8916.h    |  100 +
 .../dt-bindings/interconnect/qcom,msm8996-cbf.h    |   12 +
 include/dt-bindings/interconnect/qcom,msm8996.h    |  163 +
 include/dt-bindings/interconnect/qcom,osm-l3.h     |   15 +
 include/dt-bindings/interconnect/qcom,sdm845.h     |  150 +
 include/dt-bindings/phy/phy-qcom-qusb2.h           |   37 +
 include/dt-bindings/pinctrl/qcom,pmic-gpio.h       |  164 +
 include/dt-bindings/power/qcom-rpmpd.h             |  412 ++
 include/dt-bindings/reset/qcom,gcc-msm8916.h       |  100 +
 include/dt-bindings/reset/qcom,sdm845-aoss.h       |   17 +
 include/dt-bindings/reset/qcom,sdm845-pdc.h        |   22 +
 include/dt-bindings/soc/qcom,apr.h                 |   28 +
 include/dt-bindings/soc/qcom,rpmh-rsc.h            |   14 +
 include/init.h                                     |   11 +
 104 files changed, 18987 insertions(+), 2063 deletions(-)
---
base-commit: 516584b4d50880cb5e2361e55f8c5b4fc6c35901

// Caleb (they/them)

Comments

Sumit Garg Nov. 22, 2023, 6:21 a.m. UTC | #1
Hi Caleb,

On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
>
> Historically, Qualcomm boards in U-Boot have all had their own
> board/qualcomm/xyz directory, their own CONFIG_TARGET_XYZ option, their
> own hardcoded sysmap-xyz.c file, and their own U-Boot specific
> devicetree with little/no compatibility with upstream DT.
>
> This series makes a few final prepatory changes, and then replaces
> almost all of the board specific code with generic alternatives. The end
> result is that all Qualcomm boards both current and future (with the
> exception of the db410c and db820c) can be supported by a single U-Boot
> binary by just providing the correct DT. New boards can be added without
> introducing any addition mach/ or board/ code or config options.
>
> Due to the nature of this change, the patch ("mach-snapdragon:
> generalise board support") has become pretty big, I tried a few
> different ways to represent this in git history, but the other methods
> (e.g. adding a stub "generic" target and removing it again) were more
> confusing and made for much messier git history. The current patch is
> mostly atomic, but requires regenerating the config.
>
> The QCS404 EVB board had some code to enable the USB VBUS regulator,
> this is dropped in favour of a adding a new vbus-supply property to the
> dwc3-generic driver. This will also be used by the dragonboard845c in a
> future patch. This handles the common case of a board requiring some
> regulator be enabled for USB host mode.
>

Thanks for your work. It is a good step towards a generalized u-boot
on Qcom platforms. Although I would like to give it an in-depth
review, I have a common discussion point about DT, see below.

> A more detailed description of the changes is below.
>
> == Memory map ==
>
> The memory map was historically hardcoded into U-Boot, this meant that
> U-Boot had to be built for a specific variant of a device. This is
> changed to instead read the memory map from the DT /memory node.
>
> Additionally, most boards mapped addresss 0x0 as valid, as a result if a
> null pointer access happens then it will cause a bus stall (and board
> hang). This is fixed so that null pointer accesses will now correctly
> throw an exception.
>
> == DT loading ==
>
> Previously, boards used the FDT blob embedded into U-Boot (via
> OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> bootloader, so we can instead rely on the first-stage bootloader to
> populate some useful FDT properties for us (notably the /memory node and
> KASLR seed) and fetch the DTB that it provides. Combined with the memory
> map changes above, this let's us entirely avoid configuring the memory
> map explicitly.

Since with this change, we don't need to embed FDT blob in the u-boot
binary, so I was thinking if we really need to import DTs from Linux
for different platforms and then play a catchup game?

IMO, the build command would look like following if we import
pre-built FDT blob from Linux:

- Build u-boot::

       $ export CROSS_COMPILE=<aarch64 toolchain prefix>
       $ make qcom_defconfig
       $ make

- gzip u-boot::

       gzip u-boot-nodtb.bin

- Append dtb to gzipped u-boot::

        cat u-boot-nodtb.bin.gz
<linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
u-boot-nodtb.bin.gz-dtb

This would avoid the maintenance burden to keep DT in sync with that
of Linux. And since DT bindings in Linux are backwards compatible, we
can say u-boot should work with DTB picked up from any Linux kernel
stable release.

-Sumit

>
> == defconfig ==
>
> Most of the board defconfigs and config headers were quite similar, to
> simplify maintenance going forward, all the fully generic boards (sdm845
> and qcs404-evb so far) are adapted to use the new qcom_defconfig. Going
> forward, all new Qualcomm boards should be supported by this defconfig.
> A notable exception is for specific usecases (like U-Boot as the primary
> bootloader).
>
> == The older dragonboards ==
>
> The db410c and db820c both have some custom board init code, as a result
> they aren't yet binary compatible. mach-snapdragon is adjusted so
> that all the necessary config options (e.g. CONFIG_SYS_BOARD) can be set
> from their defconfigs, this makes it possible to enable support for new
> boards without introducing additional config options.
>
> The db410c can run U-Boot either chainloaded like the other boards, or
> as a first-stage bootloader replacing aboot. However it was hardcoded to
> only build for the latter option. This series introduces a new
> "chainloaded" defconfig to enable easier testing via fastboot.
>
> == dynamic environment variables ==
>
> This series also introduces runtime-allocated load addresses via the lmb
> allocator. This allows for booting on boards with vastly different
> memory layouts without any pre-calculation or macro magic in the config
> header. This feature is based on similar code in mach-apple.
>
> The soc, board, and fdtfile environment variables are also generated
> automatically. Many Qualcomm boards follow a similar scheme for DTB
> naming such that the name can often be derived from the root compatible
> properties. This is intended to cover the most common cases and be a
> simple solution for booting generic distro images without having to
> explicitly choose the right DTB. The U-Boot DTS can be tweaked if
> necessary to produce the correct name, the variable can be overwritten,
> or a bootloader like GRUB can load the devicetree instead.
>
> == Upstream DT ==
>
> All Qualcomm boards have had their devicetree files rewritten to be
> based on the upstream SoC/PMIC DTSI files. Previous patch series made
> the necessary driver adjustments to fully support the upstream DT
> format. All future Qualcomm boards should use upstream DTS by default.
>
> ---
> I have tested this series on the Dragonboard410c, Dragonboard820c, and
> Dragonboard845c. I unfortunately don't have access to a QCS404 EVB board
> to test.
>
> This series is based on the qcom-next branch [1] and depends on my PMIC
> fixes series [2], an integration branch for testing can be found at [3].
> The non-qualcomm-specific changes (patches 1, 2, and 3) don't have any
> dependencies.
>
> [1]: https://source.denx.de/u-boot/custodians/u-boot-snapdragon
> [2]: https://lore.kernel.org/u-boot/20231114-b4-qcom-dt-compat-v3-0-88a92f8f00ba@linaro.org/
> [3]: https://source.denx.de/u-boot/custodians/u-boot-snapdragon/-/tree/b4/qcom-common-target
>
> To: Neil Armstrong <neil.armstrong@linaro.org>
> To: Sumit Garg <sumit.garg@linaro.org>
> To: Ramon Fried <rfried.dev@gmail.com>
> Cc: Marek Vasut <marex@denx.de>
> To: Dzmitry Sankouski <dsankouski@gmail.com>
> To: Caleb Connolly <caleb.connolly@linaro.org>
> To: Peng Fan <peng.fan@nxp.com>
> To: Jaehoon Chung <jh80.chung@samsung.com>
> To: Rayagonda Kokatanur <rayagonda.kokatanur@broadcom.com>
> To: Lukasz Majewski <lukma@denx.de>
> To: Sean Anderson <seanga2@gmail.com>
> To: Jorge Ramirez-Ortiz <jorge.ramirez.ortiz@gmail.com>
> To: Stephan Gerhold <stephan@gerhold.net>
> Cc:  <u-boot@lists.denx.de>
>
> ---
> Caleb Connolly (21):
>       arm: init: export prev_bl_fdt_addr
>       arm: allow CONFIG_LINUX_KERNEL_IMAGE_HEADER to be set in defconfig
>       usb: dwc3-generic: support external vbus regulator
>       mmc: msm_sdhci: use modern clock handling
>       dt-bindings: drop msm_sdhci binding
>       clk/qcom: use upstream compatible properties
>       serial: msm: add debug UART
>       serial: msm: fix clock handling
>       configs: add dragonboard410c_chainloaded_defconfig
>       dts: dragonboard410c: fix compatible and clocks
>       board: dragonboard410c: import board code from mach-snapdragon
>       board: dragonboard820c: use LINUX_KERNEL_IMAGE_HEADER
>       mach-snapdragon: generalise board support
>       mach-snapdragon: dynamic load addresses
>       mach-snapdragon: generate fdtfile automatically
>       doc: board/qualcomm: document generic targets
>       dts: sdm845: import DT from Linux
>       dts: msm8916: import DT from Linux
>       dts: msm8996: import DT from Linux
>       dts: qcs404-evb: import DT from Linux
>       MAINTAINERS: Qualcomm: add some missing paths
>
>  MAINTAINERS                                        |   16 +-
>  arch/arm/Kconfig                                   |    6 +-
>  arch/arm/dts/Makefile                              |    9 +-
>  arch/arm/dts/dragonboard410c-uboot.dtsi            |   44 -
>  arch/arm/dts/dragonboard410c.dts                   |  198 +-
>  arch/arm/dts/dragonboard820c-uboot.dtsi            |   32 -
>  arch/arm/dts/dragonboard820c.dts                   |  129 +-
>  arch/arm/dts/dragonboard845c-uboot.dtsi            |   26 -
>  arch/arm/dts/dragonboard845c.dts                   |   23 +-
>  arch/arm/dts/msm8916-pins.dtsi                     |  582 ++
>  arch/arm/dts/msm8916-pm8916.dtsi                   |   76 +
>  arch/arm/dts/msm8916.dtsi                          | 2194 ++++++++
>  arch/arm/dts/msm8996.dtsi                          | 3959 +++++++++++++
>  arch/arm/dts/pm8916.dtsi                           |  183 +
>  arch/arm/dts/pm8994.dtsi                           |  152 +
>  arch/arm/dts/pm8998.dtsi                           |  130 +
>  arch/arm/dts/pms405.dtsi                           |  149 +
>  arch/arm/dts/qcs404-evb-uboot.dtsi                 |   30 -
>  arch/arm/dts/qcs404-evb.dts                        |  441 +-
>  arch/arm/dts/qcs404.dtsi                           | 1830 ++++++
>  arch/arm/dts/sdm845.dtsi                           | 5850 +++++++++++++++++++-
>  arch/arm/dts/starqltechn-uboot.dtsi                |   27 -
>  arch/arm/dts/starqltechn.dts                       |   34 +-
>  arch/arm/lib/save_prev_bl_data.c                   |    5 +
>  arch/arm/mach-snapdragon/Kconfig                   |   95 +-
>  arch/arm/mach-snapdragon/Makefile                  |    8 +-
>  arch/arm/mach-snapdragon/board.c                   |  303 +
>  arch/arm/mach-snapdragon/include/mach/dram.h       |   12 -
>  arch/arm/mach-snapdragon/init_sdm845.c             |   73 -
>  arch/arm/mach-snapdragon/misc.c                    |   55 -
>  arch/arm/mach-snapdragon/sysmap-apq8016.c          |   31 -
>  arch/arm/mach-snapdragon/sysmap-apq8096.c          |   31 -
>  arch/arm/mach-snapdragon/sysmap-qcs404.c           |   43 -
>  arch/arm/mach-snapdragon/sysmap-sdm845.c           |   31 -
>  board/qualcomm/dragonboard410c/Kconfig             |   15 -
>  board/qualcomm/dragonboard410c/MAINTAINERS         |    1 +
>  board/qualcomm/dragonboard410c/Makefile            |    3 +-
>  board/qualcomm/dragonboard410c/dragonboard410c.c   |   31 +-
>  .../qualcomm/dragonboard410c/misc.c                |   51 +-
>  .../mach => board/qualcomm/dragonboard410c}/misc.h |    1 +
>  board/qualcomm/dragonboard820c/Kconfig             |   15 -
>  board/qualcomm/dragonboard820c/Makefile            |    1 -
>  board/qualcomm/dragonboard820c/dragonboard820c.c   |   39 +-
>  board/qualcomm/dragonboard820c/head.S              |   33 -
>  board/qualcomm/dragonboard820c/u-boot.lds          |  111 -
>  board/qualcomm/dragonboard845c/Kconfig             |   12 -
>  board/qualcomm/qcs404-evb/Kconfig                  |   15 -
>  board/qualcomm/qcs404-evb/qcs404-evb.c             |   21 +-
>  configs/dragonboard410c_chainloaded_defconfig      |   72 +
>  configs/dragonboard410c_defconfig                  |    6 +-
>  configs/dragonboard820c_defconfig                  |    6 +-
>  configs/dragonboard845c_defconfig                  |   29 -
>  configs/qcom_defconfig                             |   71 +
>  configs/qcs404evb_defconfig                        |   55 -
>  configs/starqltechn_defconfig                      |   41 -
>  doc/board/qualcomm/board.rst                       |  119 +
>  doc/board/qualcomm/debugging.rst                   |   61 +
>  doc/board/qualcomm/index.rst                       |    4 +-
>  doc/board/qualcomm/qcs404.rst                      |   79 -
>  doc/board/qualcomm/sdm845.rst                      |  162 -
>  doc/device-tree-bindings/mmc/msm_sdhci.txt         |   25 -
>  doc/device-tree-bindings/usb/ehci-msm.txt          |   10 -
>  drivers/clk/qcom/clock-apq8016.c                   |    9 +-
>  drivers/clk/qcom/clock-apq8096.c                   |    7 +-
>  drivers/mmc/msm_sdhci.c                            |   69 +-
>  drivers/phy/qcom/msm8916-usbh-phy.c                |    2 +-
>  drivers/pinctrl/qcom/pinctrl-apq8016.c             |    2 +-
>  drivers/serial/Kconfig                             |    8 +
>  drivers/serial/serial_msm.c                        |   61 +-
>  drivers/usb/dwc3/dwc3-generic.c                    |   12 +
>  drivers/usb/host/ehci-msm.c                        |    2 +-
>  include/configs/dragonboard845c.h                  |   20 -
>  include/configs/qcom.h                             |   21 +
>  include/configs/qcs404-evb.h                       |   20 -
>  include/dt-bindings/arm/coresight-cti-dt.h         |   37 +
>  include/dt-bindings/clock/qcom,camcc-sdm845.h      |  116 +
>  include/dt-bindings/clock/qcom,dispcc-sdm845.h     |   56 +
>  include/dt-bindings/clock/qcom,gcc-msm8916.h       |  179 +
>  include/dt-bindings/clock/qcom,gcc-msm8996.h       |  360 ++
>  include/dt-bindings/clock/qcom,gcc-qcs404.h        |    4 +
>  include/dt-bindings/clock/qcom,gpucc-sdm845.h      |   24 +
>  include/dt-bindings/clock/qcom,lpass-sdm845.h      |   15 +
>  include/dt-bindings/clock/qcom,mmcc-msm8996.h      |  295 +
>  include/dt-bindings/clock/qcom,rpmcc.h             |  174 +
>  include/dt-bindings/clock/qcom,rpmh.h              |   37 +
>  include/dt-bindings/clock/qcom,turingcc-qcs404.h   |   15 +
>  include/dt-bindings/clock/qcom,videocc-sdm845.h    |   35 +
>  include/dt-bindings/dma/qcom-gpi.h                 |   11 +
>  include/dt-bindings/firmware/qcom,scm.h            |   18 +
>  include/dt-bindings/iio/qcom,spmi-vadc.h           |  300 +
>  include/dt-bindings/interconnect/qcom,msm8916.h    |  100 +
>  .../dt-bindings/interconnect/qcom,msm8996-cbf.h    |   12 +
>  include/dt-bindings/interconnect/qcom,msm8996.h    |  163 +
>  include/dt-bindings/interconnect/qcom,osm-l3.h     |   15 +
>  include/dt-bindings/interconnect/qcom,sdm845.h     |  150 +
>  include/dt-bindings/phy/phy-qcom-qusb2.h           |   37 +
>  include/dt-bindings/pinctrl/qcom,pmic-gpio.h       |  164 +
>  include/dt-bindings/power/qcom-rpmpd.h             |  412 ++
>  include/dt-bindings/reset/qcom,gcc-msm8916.h       |  100 +
>  include/dt-bindings/reset/qcom,sdm845-aoss.h       |   17 +
>  include/dt-bindings/reset/qcom,sdm845-pdc.h        |   22 +
>  include/dt-bindings/soc/qcom,apr.h                 |   28 +
>  include/dt-bindings/soc/qcom,rpmh-rsc.h            |   14 +
>  include/init.h                                     |   11 +
>  104 files changed, 18987 insertions(+), 2063 deletions(-)
> ---
> base-commit: 516584b4d50880cb5e2361e55f8c5b4fc6c35901
>
> // Caleb (they/them)
>
Sumit Garg Nov. 22, 2023, 7:26 a.m. UTC | #2
On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
>
> Historically, Qualcomm boards in U-Boot have all had their own
> board/qualcomm/xyz directory, their own CONFIG_TARGET_XYZ option, their
> own hardcoded sysmap-xyz.c file, and their own U-Boot specific
> devicetree with little/no compatibility with upstream DT.
>
> This series makes a few final prepatory changes, and then replaces
> almost all of the board specific code with generic alternatives. The end
> result is that all Qualcomm boards both current and future (with the
> exception of the db410c and db820c) can be supported by a single U-Boot
> binary by just providing the correct DT. New boards can be added without
> introducing any addition mach/ or board/ code or config options.
>
> Due to the nature of this change, the patch ("mach-snapdragon:
> generalise board support") has become pretty big, I tried a few
> different ways to represent this in git history, but the other methods
> (e.g. adding a stub "generic" target and removing it again) were more
> confusing and made for much messier git history. The current patch is
> mostly atomic, but requires regenerating the config.
>
> The QCS404 EVB board had some code to enable the USB VBUS regulator,
> this is dropped in favour of a adding a new vbus-supply property to the
> dwc3-generic driver. This will also be used by the dragonboard845c in a
> future patch. This handles the common case of a board requiring some
> regulator be enabled for USB host mode.
>
> A more detailed description of the changes is below.
>
> == Memory map ==
>
> The memory map was historically hardcoded into U-Boot, this meant that
> U-Boot had to be built for a specific variant of a device. This is
> changed to instead read the memory map from the DT /memory node.
>
> Additionally, most boards mapped addresss 0x0 as valid, as a result if a
> null pointer access happens then it will cause a bus stall (and board
> hang). This is fixed so that null pointer accesses will now correctly
> throw an exception.
>
> == DT loading ==
>
> Previously, boards used the FDT blob embedded into U-Boot (via
> OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> bootloader, so we can instead rely on the first-stage bootloader to
> populate some useful FDT properties for us (notably the /memory node and
> KASLR seed) and fetch the DTB that it provides. Combined with the memory
> map changes above, this let's us entirely avoid configuring the memory
> map explicitly.
>
> == defconfig ==
>
> Most of the board defconfigs and config headers were quite similar, to
> simplify maintenance going forward, all the fully generic boards (sdm845
> and qcs404-evb so far) are adapted to use the new qcom_defconfig. Going
> forward, all new Qualcomm boards should be supported by this defconfig.
> A notable exception is for specific usecases (like U-Boot as the primary
> bootloader).
>
> == The older dragonboards ==
>
> The db410c and db820c both have some custom board init code, as a result
> they aren't yet binary compatible. mach-snapdragon is adjusted so
> that all the necessary config options (e.g. CONFIG_SYS_BOARD) can be set
> from their defconfigs, this makes it possible to enable support for new
> boards without introducing additional config options.
>
> The db410c can run U-Boot either chainloaded like the other boards, or
> as a first-stage bootloader replacing aboot. However it was hardcoded to
> only build for the latter option. This series introduces a new
> "chainloaded" defconfig to enable easier testing via fastboot.
>
> == dynamic environment variables ==
>
> This series also introduces runtime-allocated load addresses via the lmb
> allocator. This allows for booting on boards with vastly different
> memory layouts without any pre-calculation or macro magic in the config
> header. This feature is based on similar code in mach-apple.
>
> The soc, board, and fdtfile environment variables are also generated
> automatically. Many Qualcomm boards follow a similar scheme for DTB
> naming such that the name can often be derived from the root compatible
> properties. This is intended to cover the most common cases and be a
> simple solution for booting generic distro images without having to
> explicitly choose the right DTB. The U-Boot DTS can be tweaked if
> necessary to produce the correct name, the variable can be overwritten,
> or a bootloader like GRUB can load the devicetree instead.
>
> == Upstream DT ==
>
> All Qualcomm boards have had their devicetree files rewritten to be
> based on the upstream SoC/PMIC DTSI files. Previous patch series made
> the necessary driver adjustments to fully support the upstream DT
> format. All future Qualcomm boards should use upstream DTS by default.
>
> ---
> I have tested this series on the Dragonboard410c, Dragonboard820c, and
> Dragonboard845c. I unfortunately don't have access to a QCS404 EVB board
> to test.

I would be happy to test it on QCS404 but your PMIC fixes series is
already broken on QCS404 [1]. Let's get that fixed and applied first.

[1] https://lore.kernel.org/u-boot/CAFA6WYP=y+u6si8zo-atTcrFA4SrPXeYBYL3N8RaQW=Dn7AN5Q@mail.gmail.com/

-Sumit

>
> This series is based on the qcom-next branch [1] and depends on my PMIC
> fixes series [2], an integration branch for testing can be found at [3].
> The non-qualcomm-specific changes (patches 1, 2, and 3) don't have any
> dependencies.
>
> [1]: https://source.denx.de/u-boot/custodians/u-boot-snapdragon
> [2]: https://lore.kernel.org/u-boot/20231114-b4-qcom-dt-compat-v3-0-88a92f8f00ba@linaro.org/
> [3]: https://source.denx.de/u-boot/custodians/u-boot-snapdragon/-/tree/b4/qcom-common-target
>
> To: Neil Armstrong <neil.armstrong@linaro.org>
> To: Sumit Garg <sumit.garg@linaro.org>
> To: Ramon Fried <rfried.dev@gmail.com>
> Cc: Marek Vasut <marex@denx.de>
> To: Dzmitry Sankouski <dsankouski@gmail.com>
> To: Caleb Connolly <caleb.connolly@linaro.org>
> To: Peng Fan <peng.fan@nxp.com>
> To: Jaehoon Chung <jh80.chung@samsung.com>
> To: Rayagonda Kokatanur <rayagonda.kokatanur@broadcom.com>
> To: Lukasz Majewski <lukma@denx.de>
> To: Sean Anderson <seanga2@gmail.com>
> To: Jorge Ramirez-Ortiz <jorge.ramirez.ortiz@gmail.com>
> To: Stephan Gerhold <stephan@gerhold.net>
> Cc:  <u-boot@lists.denx.de>
>
> ---
> Caleb Connolly (21):
>       arm: init: export prev_bl_fdt_addr
>       arm: allow CONFIG_LINUX_KERNEL_IMAGE_HEADER to be set in defconfig
>       usb: dwc3-generic: support external vbus regulator
>       mmc: msm_sdhci: use modern clock handling
>       dt-bindings: drop msm_sdhci binding
>       clk/qcom: use upstream compatible properties
>       serial: msm: add debug UART
>       serial: msm: fix clock handling
>       configs: add dragonboard410c_chainloaded_defconfig
>       dts: dragonboard410c: fix compatible and clocks
>       board: dragonboard410c: import board code from mach-snapdragon
>       board: dragonboard820c: use LINUX_KERNEL_IMAGE_HEADER
>       mach-snapdragon: generalise board support
>       mach-snapdragon: dynamic load addresses
>       mach-snapdragon: generate fdtfile automatically
>       doc: board/qualcomm: document generic targets
>       dts: sdm845: import DT from Linux
>       dts: msm8916: import DT from Linux
>       dts: msm8996: import DT from Linux
>       dts: qcs404-evb: import DT from Linux
>       MAINTAINERS: Qualcomm: add some missing paths
>
>  MAINTAINERS                                        |   16 +-
>  arch/arm/Kconfig                                   |    6 +-
>  arch/arm/dts/Makefile                              |    9 +-
>  arch/arm/dts/dragonboard410c-uboot.dtsi            |   44 -
>  arch/arm/dts/dragonboard410c.dts                   |  198 +-
>  arch/arm/dts/dragonboard820c-uboot.dtsi            |   32 -
>  arch/arm/dts/dragonboard820c.dts                   |  129 +-
>  arch/arm/dts/dragonboard845c-uboot.dtsi            |   26 -
>  arch/arm/dts/dragonboard845c.dts                   |   23 +-
>  arch/arm/dts/msm8916-pins.dtsi                     |  582 ++
>  arch/arm/dts/msm8916-pm8916.dtsi                   |   76 +
>  arch/arm/dts/msm8916.dtsi                          | 2194 ++++++++
>  arch/arm/dts/msm8996.dtsi                          | 3959 +++++++++++++
>  arch/arm/dts/pm8916.dtsi                           |  183 +
>  arch/arm/dts/pm8994.dtsi                           |  152 +
>  arch/arm/dts/pm8998.dtsi                           |  130 +
>  arch/arm/dts/pms405.dtsi                           |  149 +
>  arch/arm/dts/qcs404-evb-uboot.dtsi                 |   30 -
>  arch/arm/dts/qcs404-evb.dts                        |  441 +-
>  arch/arm/dts/qcs404.dtsi                           | 1830 ++++++
>  arch/arm/dts/sdm845.dtsi                           | 5850 +++++++++++++++++++-
>  arch/arm/dts/starqltechn-uboot.dtsi                |   27 -
>  arch/arm/dts/starqltechn.dts                       |   34 +-
>  arch/arm/lib/save_prev_bl_data.c                   |    5 +
>  arch/arm/mach-snapdragon/Kconfig                   |   95 +-
>  arch/arm/mach-snapdragon/Makefile                  |    8 +-
>  arch/arm/mach-snapdragon/board.c                   |  303 +
>  arch/arm/mach-snapdragon/include/mach/dram.h       |   12 -
>  arch/arm/mach-snapdragon/init_sdm845.c             |   73 -
>  arch/arm/mach-snapdragon/misc.c                    |   55 -
>  arch/arm/mach-snapdragon/sysmap-apq8016.c          |   31 -
>  arch/arm/mach-snapdragon/sysmap-apq8096.c          |   31 -
>  arch/arm/mach-snapdragon/sysmap-qcs404.c           |   43 -
>  arch/arm/mach-snapdragon/sysmap-sdm845.c           |   31 -
>  board/qualcomm/dragonboard410c/Kconfig             |   15 -
>  board/qualcomm/dragonboard410c/MAINTAINERS         |    1 +
>  board/qualcomm/dragonboard410c/Makefile            |    3 +-
>  board/qualcomm/dragonboard410c/dragonboard410c.c   |   31 +-
>  .../qualcomm/dragonboard410c/misc.c                |   51 +-
>  .../mach => board/qualcomm/dragonboard410c}/misc.h |    1 +
>  board/qualcomm/dragonboard820c/Kconfig             |   15 -
>  board/qualcomm/dragonboard820c/Makefile            |    1 -
>  board/qualcomm/dragonboard820c/dragonboard820c.c   |   39 +-
>  board/qualcomm/dragonboard820c/head.S              |   33 -
>  board/qualcomm/dragonboard820c/u-boot.lds          |  111 -
>  board/qualcomm/dragonboard845c/Kconfig             |   12 -
>  board/qualcomm/qcs404-evb/Kconfig                  |   15 -
>  board/qualcomm/qcs404-evb/qcs404-evb.c             |   21 +-
>  configs/dragonboard410c_chainloaded_defconfig      |   72 +
>  configs/dragonboard410c_defconfig                  |    6 +-
>  configs/dragonboard820c_defconfig                  |    6 +-
>  configs/dragonboard845c_defconfig                  |   29 -
>  configs/qcom_defconfig                             |   71 +
>  configs/qcs404evb_defconfig                        |   55 -
>  configs/starqltechn_defconfig                      |   41 -
>  doc/board/qualcomm/board.rst                       |  119 +
>  doc/board/qualcomm/debugging.rst                   |   61 +
>  doc/board/qualcomm/index.rst                       |    4 +-
>  doc/board/qualcomm/qcs404.rst                      |   79 -
>  doc/board/qualcomm/sdm845.rst                      |  162 -
>  doc/device-tree-bindings/mmc/msm_sdhci.txt         |   25 -
>  doc/device-tree-bindings/usb/ehci-msm.txt          |   10 -
>  drivers/clk/qcom/clock-apq8016.c                   |    9 +-
>  drivers/clk/qcom/clock-apq8096.c                   |    7 +-
>  drivers/mmc/msm_sdhci.c                            |   69 +-
>  drivers/phy/qcom/msm8916-usbh-phy.c                |    2 +-
>  drivers/pinctrl/qcom/pinctrl-apq8016.c             |    2 +-
>  drivers/serial/Kconfig                             |    8 +
>  drivers/serial/serial_msm.c                        |   61 +-
>  drivers/usb/dwc3/dwc3-generic.c                    |   12 +
>  drivers/usb/host/ehci-msm.c                        |    2 +-
>  include/configs/dragonboard845c.h                  |   20 -
>  include/configs/qcom.h                             |   21 +
>  include/configs/qcs404-evb.h                       |   20 -
>  include/dt-bindings/arm/coresight-cti-dt.h         |   37 +
>  include/dt-bindings/clock/qcom,camcc-sdm845.h      |  116 +
>  include/dt-bindings/clock/qcom,dispcc-sdm845.h     |   56 +
>  include/dt-bindings/clock/qcom,gcc-msm8916.h       |  179 +
>  include/dt-bindings/clock/qcom,gcc-msm8996.h       |  360 ++
>  include/dt-bindings/clock/qcom,gcc-qcs404.h        |    4 +
>  include/dt-bindings/clock/qcom,gpucc-sdm845.h      |   24 +
>  include/dt-bindings/clock/qcom,lpass-sdm845.h      |   15 +
>  include/dt-bindings/clock/qcom,mmcc-msm8996.h      |  295 +
>  include/dt-bindings/clock/qcom,rpmcc.h             |  174 +
>  include/dt-bindings/clock/qcom,rpmh.h              |   37 +
>  include/dt-bindings/clock/qcom,turingcc-qcs404.h   |   15 +
>  include/dt-bindings/clock/qcom,videocc-sdm845.h    |   35 +
>  include/dt-bindings/dma/qcom-gpi.h                 |   11 +
>  include/dt-bindings/firmware/qcom,scm.h            |   18 +
>  include/dt-bindings/iio/qcom,spmi-vadc.h           |  300 +
>  include/dt-bindings/interconnect/qcom,msm8916.h    |  100 +
>  .../dt-bindings/interconnect/qcom,msm8996-cbf.h    |   12 +
>  include/dt-bindings/interconnect/qcom,msm8996.h    |  163 +
>  include/dt-bindings/interconnect/qcom,osm-l3.h     |   15 +
>  include/dt-bindings/interconnect/qcom,sdm845.h     |  150 +
>  include/dt-bindings/phy/phy-qcom-qusb2.h           |   37 +
>  include/dt-bindings/pinctrl/qcom,pmic-gpio.h       |  164 +
>  include/dt-bindings/power/qcom-rpmpd.h             |  412 ++
>  include/dt-bindings/reset/qcom,gcc-msm8916.h       |  100 +
>  include/dt-bindings/reset/qcom,sdm845-aoss.h       |   17 +
>  include/dt-bindings/reset/qcom,sdm845-pdc.h        |   22 +
>  include/dt-bindings/soc/qcom,apr.h                 |   28 +
>  include/dt-bindings/soc/qcom,rpmh-rsc.h            |   14 +
>  include/init.h                                     |   11 +
>  104 files changed, 18987 insertions(+), 2063 deletions(-)
> ---
> base-commit: 516584b4d50880cb5e2361e55f8c5b4fc6c35901
>
> // Caleb (they/them)
>
Tom Rini Nov. 22, 2023, 2:01 p.m. UTC | #3
On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
> Hi Caleb,
> 
> On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
[snip]
> > == DT loading ==
> >
> > Previously, boards used the FDT blob embedded into U-Boot (via
> > OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> > bootloader, so we can instead rely on the first-stage bootloader to
> > populate some useful FDT properties for us (notably the /memory node and
> > KASLR seed) and fetch the DTB that it provides. Combined with the memory
> > map changes above, this let's us entirely avoid configuring the memory
> > map explicitly.
> 
> Since with this change, we don't need to embed FDT blob in the u-boot
> binary, so I was thinking if we really need to import DTs from Linux
> for different platforms and then play a catchup game?
> 
> IMO, the build command would look like following if we import
> pre-built FDT blob from Linux:
> 
> - Build u-boot::
> 
>        $ export CROSS_COMPILE=<aarch64 toolchain prefix>
>        $ make qcom_defconfig
>        $ make
> 
> - gzip u-boot::
> 
>        gzip u-boot-nodtb.bin
> 
> - Append dtb to gzipped u-boot::
> 
>         cat u-boot-nodtb.bin.gz
> <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
> u-boot-nodtb.bin.gz-dtb
> 
> This would avoid the maintenance burden to keep DT in sync with that
> of Linux. And since DT bindings in Linux are backwards compatible, we
> can say u-boot should work with DTB picked up from any Linux kernel
> stable release.

I guess one question I have is, are we being passed the device tree
(since we're acting like the Linux Kernel) or knowing that we have the
dtb attached to the end of us and making use of the old kernel appended
dtb option? We're fine in for example the rpi_arm64 case of just being
given a device tree from the previous stage and not needing one in-tree.
Sumit Garg Nov. 22, 2023, 2:14 p.m. UTC | #4
On Wed, 22 Nov 2023 at 19:31, Tom Rini <trini@konsulko.com> wrote:
>
> On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
> > Hi Caleb,
> >
> > On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> [snip]
> > > == DT loading ==
> > >
> > > Previously, boards used the FDT blob embedded into U-Boot (via
> > > OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> > > bootloader, so we can instead rely on the first-stage bootloader to
> > > populate some useful FDT properties for us (notably the /memory node and
> > > KASLR seed) and fetch the DTB that it provides. Combined with the memory
> > > map changes above, this let's us entirely avoid configuring the memory
> > > map explicitly.
> >
> > Since with this change, we don't need to embed FDT blob in the u-boot
> > binary, so I was thinking if we really need to import DTs from Linux
> > for different platforms and then play a catchup game?
> >
> > IMO, the build command would look like following if we import
> > pre-built FDT blob from Linux:
> >
> > - Build u-boot::
> >
> >        $ export CROSS_COMPILE=<aarch64 toolchain prefix>
> >        $ make qcom_defconfig
> >        $ make
> >
> > - gzip u-boot::
> >
> >        gzip u-boot-nodtb.bin
> >
> > - Append dtb to gzipped u-boot::
> >
> >         cat u-boot-nodtb.bin.gz
> > <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
> > u-boot-nodtb.bin.gz-dtb
> >
> > This would avoid the maintenance burden to keep DT in sync with that
> > of Linux. And since DT bindings in Linux are backwards compatible, we
> > can say u-boot should work with DTB picked up from any Linux kernel
> > stable release.
>
> I guess one question I have is, are we being passed the device tree
> (since we're acting like the Linux Kernel)

Yeah that is the case here, see patch #1 in this series regarding how
FDT address is being retrieved from previous stage bootloader (ABL on
sdm845 and qcs404 SoCs).

> or knowing that we have the
> dtb attached to the end of us and making use of the old kernel appended
> dtb option? We're fine in for example the rpi_arm64 case of just being
> given a device tree from the previous stage and not needing one in-tree.
>

That's good to know and we can replicate that for Qcom platforms which
are chainloaded and don't need an embedded DT.

-Sumit

> --
> Tom
Tom Rini Nov. 22, 2023, 2:27 p.m. UTC | #5
On Wed, Nov 22, 2023 at 07:44:09PM +0530, Sumit Garg wrote:
> On Wed, 22 Nov 2023 at 19:31, Tom Rini <trini@konsulko.com> wrote:
> >
> > On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
> > > Hi Caleb,
> > >
> > > On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> > [snip]
> > > > == DT loading ==
> > > >
> > > > Previously, boards used the FDT blob embedded into U-Boot (via
> > > > OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> > > > bootloader, so we can instead rely on the first-stage bootloader to
> > > > populate some useful FDT properties for us (notably the /memory node and
> > > > KASLR seed) and fetch the DTB that it provides. Combined with the memory
> > > > map changes above, this let's us entirely avoid configuring the memory
> > > > map explicitly.
> > >
> > > Since with this change, we don't need to embed FDT blob in the u-boot
> > > binary, so I was thinking if we really need to import DTs from Linux
> > > for different platforms and then play a catchup game?
> > >
> > > IMO, the build command would look like following if we import
> > > pre-built FDT blob from Linux:
> > >
> > > - Build u-boot::
> > >
> > >        $ export CROSS_COMPILE=<aarch64 toolchain prefix>
> > >        $ make qcom_defconfig
> > >        $ make
> > >
> > > - gzip u-boot::
> > >
> > >        gzip u-boot-nodtb.bin
> > >
> > > - Append dtb to gzipped u-boot::
> > >
> > >         cat u-boot-nodtb.bin.gz
> > > <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
> > > u-boot-nodtb.bin.gz-dtb
> > >
> > > This would avoid the maintenance burden to keep DT in sync with that
> > > of Linux. And since DT bindings in Linux are backwards compatible, we
> > > can say u-boot should work with DTB picked up from any Linux kernel
> > > stable release.
> >
> > I guess one question I have is, are we being passed the device tree
> > (since we're acting like the Linux Kernel)
> 
> Yeah that is the case here, see patch #1 in this series regarding how
> FDT address is being retrieved from previous stage bootloader (ABL on
> sdm845 and qcs404 SoCs).

That's what I thought.

> > or knowing that we have the
> > dtb attached to the end of us and making use of the old kernel appended
> > dtb option? We're fine in for example the rpi_arm64 case of just being
> > given a device tree from the previous stage and not needing one in-tree.
> 
> That's good to know and we can replicate that for Qcom platforms which
> are chainloaded and don't need an embedded DT.

So yes, moving these towards the direction of rpi_arm64 and specifically
using imply OF_HAS_PRIOR_STAGE or select OF_HAS_PRIOR_STAGE (force that
the dtb must be provided to us) sounds like the right direction to take
these platforms.
Caleb Connolly Nov. 22, 2023, 4:04 p.m. UTC | #6
On 22/11/2023 14:27, Tom Rini wrote:
> On Wed, Nov 22, 2023 at 07:44:09PM +0530, Sumit Garg wrote:
>> On Wed, 22 Nov 2023 at 19:31, Tom Rini <trini@konsulko.com> wrote:
>>>
>>> On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
>>>> Hi Caleb,
>>>>
>>>> On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
>>> [snip]
>>>>> == DT loading ==
>>>>>
>>>>> Previously, boards used the FDT blob embedded into U-Boot (via
>>>>> OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
>>>>> bootloader, so we can instead rely on the first-stage bootloader to
>>>>> populate some useful FDT properties for us (notably the /memory node and
>>>>> KASLR seed) and fetch the DTB that it provides. Combined with the memory
>>>>> map changes above, this let's us entirely avoid configuring the memory
>>>>> map explicitly.
>>>>
>>>> Since with this change, we don't need to embed FDT blob in the u-boot
>>>> binary, so I was thinking if we really need to import DTs from Linux
>>>> for different platforms and then play a catchup game?

For now, yes. There are quite a few features which aren't handled by
U-Boot that it shouldn't need to handle (rpm/h resources for example).
Also the fixed-regulator / regulator-gpio binding differences.

I would definitely like to move towards supporting Linux DT directly,
but this approach gives us a nice middleground of minimising the U-Boot
specific DT parts.
>>>>
>>>> IMO, the build command would look like following if we import
>>>> pre-built FDT blob from Linux:
>>>>
>>>> - Build u-boot::
>>>>
>>>>        $ export CROSS_COMPILE=<aarch64 toolchain prefix>
>>>>        $ make qcom_defconfig
>>>>        $ make
>>>>
>>>> - gzip u-boot::
>>>>
>>>>        gzip u-boot-nodtb.bin
>>>>
>>>> - Append dtb to gzipped u-boot::
>>>>
>>>>         cat u-boot-nodtb.bin.gz
>>>> <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
>>>> u-boot-nodtb.bin.gz-dtb
>>>>
>>>> This would avoid the maintenance burden to keep DT in sync with that
>>>> of Linux. And since DT bindings in Linux are backwards compatible, we
>>>> can say u-boot should work with DTB picked up from any Linux kernel
>>>> stable release.
>>>
>>> I guess one question I have is, are we being passed the device tree
>>> (since we're acting like the Linux Kernel)
>>
>> Yeah that is the case here, see patch #1 in this series regarding how
>> FDT address is being retrieved from previous stage bootloader (ABL on
>> sdm845 and qcs404 SoCs).
> 
> That's what I thought.
> 
>>> or knowing that we have the
>>> dtb attached to the end of us and making use of the old kernel appended
>>> dtb option? We're fine in for example the rpi_arm64 case of just being
>>> given a device tree from the previous stage and not needing one in-tree.
>>
>> That's good to know and we can replicate that for Qcom platforms which
>> are chainloaded and don't need an embedded DT.
> 
> So yes, moving these towards the direction of rpi_arm64 and specifically
> using imply OF_HAS_PRIOR_STAGE or select OF_HAS_PRIOR_STAGE (force that
> the dtb must be provided to us) sounds like the right direction to take
> these platforms.
>
Sumit Garg Nov. 23, 2023, 7:04 a.m. UTC | #7
On Wed, 22 Nov 2023 at 21:34, Caleb Connolly <caleb.connolly@linaro.org> wrote:
>
>
>
> On 22/11/2023 14:27, Tom Rini wrote:
> > On Wed, Nov 22, 2023 at 07:44:09PM +0530, Sumit Garg wrote:
> >> On Wed, 22 Nov 2023 at 19:31, Tom Rini <trini@konsulko.com> wrote:
> >>>
> >>> On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
> >>>> Hi Caleb,
> >>>>
> >>>> On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> >>> [snip]
> >>>>> == DT loading ==
> >>>>>
> >>>>> Previously, boards used the FDT blob embedded into U-Boot (via
> >>>>> OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> >>>>> bootloader, so we can instead rely on the first-stage bootloader to
> >>>>> populate some useful FDT properties for us (notably the /memory node and
> >>>>> KASLR seed) and fetch the DTB that it provides. Combined with the memory
> >>>>> map changes above, this let's us entirely avoid configuring the memory
> >>>>> map explicitly.
> >>>>
> >>>> Since with this change, we don't need to embed FDT blob in the u-boot
> >>>> binary, so I was thinking if we really need to import DTs from Linux
> >>>> for different platforms and then play a catchup game?
>
> For now, yes.

But why? Is there any value added by larger u-boot specific DT (most
of the nodes being unused by u-boot) than what currently u-boot
supports? The more important part is to get alignment with Linux DT
bindings. If you need to have memory/reserved-memory nodes in u-boot
DT for generalization purposes then you should import those particular
nodes only.

> There are quite a few features which aren't handled by
> U-Boot that it shouldn't need to handle (rpm/h resources for example).
> Also the fixed-regulator / regulator-gpio binding differences.

IMO, we should fix them first and then use Linux DT as it is.

>
> I would definitely like to move towards supporting Linux DT directly,
> but this approach gives us a nice middleground of minimising the U-Boot
> specific DT parts.

I don't see any real benefits here apart from the maintenance burden.
If it had been an actual Linux DT then that can be passed to Linux as
it is. However, the current modified import you are trying to do
doesn't solve that purpose as well.

-Sumit

> >>>>
> >>>> IMO, the build command would look like following if we import
> >>>> pre-built FDT blob from Linux:
> >>>>
> >>>> - Build u-boot::
> >>>>
> >>>>        $ export CROSS_COMPILE=<aarch64 toolchain prefix>
> >>>>        $ make qcom_defconfig
> >>>>        $ make
> >>>>
> >>>> - gzip u-boot::
> >>>>
> >>>>        gzip u-boot-nodtb.bin
> >>>>
> >>>> - Append dtb to gzipped u-boot::
> >>>>
> >>>>         cat u-boot-nodtb.bin.gz
> >>>> <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
> >>>> u-boot-nodtb.bin.gz-dtb
> >>>>
> >>>> This would avoid the maintenance burden to keep DT in sync with that
> >>>> of Linux. And since DT bindings in Linux are backwards compatible, we
> >>>> can say u-boot should work with DTB picked up from any Linux kernel
> >>>> stable release.
> >>>
> >>> I guess one question I have is, are we being passed the device tree
> >>> (since we're acting like the Linux Kernel)
> >>
> >> Yeah that is the case here, see patch #1 in this series regarding how
> >> FDT address is being retrieved from previous stage bootloader (ABL on
> >> sdm845 and qcs404 SoCs).
> >
> > That's what I thought.
> >
> >>> or knowing that we have the
> >>> dtb attached to the end of us and making use of the old kernel appended
> >>> dtb option? We're fine in for example the rpi_arm64 case of just being
> >>> given a device tree from the previous stage and not needing one in-tree.
> >>
> >> That's good to know and we can replicate that for Qcom platforms which
> >> are chainloaded and don't need an embedded DT.
> >
> > So yes, moving these towards the direction of rpi_arm64 and specifically
> > using imply OF_HAS_PRIOR_STAGE or select OF_HAS_PRIOR_STAGE (force that
> > the dtb must be provided to us) sounds like the right direction to take
> > these platforms.
> >
>
> --
> // Caleb (they/them)
Caleb Connolly Nov. 29, 2023, 3:34 p.m. UTC | #8
On 23/11/2023 07:04, Sumit Garg wrote:
> On Wed, 22 Nov 2023 at 21:34, Caleb Connolly <caleb.connolly@linaro.org> wrote:
>>
>>
>>
>> On 22/11/2023 14:27, Tom Rini wrote:
>>> On Wed, Nov 22, 2023 at 07:44:09PM +0530, Sumit Garg wrote:
>>>> On Wed, 22 Nov 2023 at 19:31, Tom Rini <trini@konsulko.com> wrote:
>>>>>
>>>>> On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
>>>>>> Hi Caleb,
>>>>>>
>>>>>> On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
>>>>> [snip]
>>>>>>> == DT loading ==
>>>>>>>
>>>>>>> Previously, boards used the FDT blob embedded into U-Boot (via
>>>>>>> OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
>>>>>>> bootloader, so we can instead rely on the first-stage bootloader to
>>>>>>> populate some useful FDT properties for us (notably the /memory node and
>>>>>>> KASLR seed) and fetch the DTB that it provides. Combined with the memory
>>>>>>> map changes above, this let's us entirely avoid configuring the memory
>>>>>>> map explicitly.
>>>>>>
>>>>>> Since with this change, we don't need to embed FDT blob in the u-boot
>>>>>> binary, so I was thinking if we really need to import DTs from Linux
>>>>>> for different platforms and then play a catchup game?
>>
>> For now, yes.
> 
> But why? Is there any value added by larger u-boot specific DT (most
> of the nodes being unused by u-boot) than what currently u-boot
> supports? The more important part is to get alignment with Linux DT
> bindings. If you need to have memory/reserved-memory nodes in u-boot
> DT for generalization purposes then you should import those particular
> nodes only.

I've been thinking about and hacking on this for the last week or so,
sorry for the delayed reply here.

The value is in preventing any of the existing bindings from regressing,
and simplifying the bringup process for new platforms (just copy
SoC/PMIC DTSI and write a minimal board DTS to enable the needed hardware).
> 
>> There are quite a few features which aren't handled by
>> U-Boot that it shouldn't need to handle (rpm/h resources for example).
>> Also the fixed-regulator / regulator-gpio binding differences.
> 
> IMO, we should fix them first and then use Linux DT as it is.

The biggest blocker here is USB, on sdm845 and the 4 new platforms I
have working, I only support USB high speed, this requires removing the
superspeed phy and adding a DTS property.

I tried using OF_BOARD_SETUP to make this changes during boot but this
approach really isn't scalable (and I couldn't find a way to make it
work anyway).

> 
>>
>> I would definitely like to move towards supporting Linux DT directly,
>> but this approach gives us a nice middleground of minimising the U-Boot
>> specific DT parts.
> 
> I don't see any real benefits here apart from the maintenance burden.
> If it had been an actual Linux DT then that can be passed to Linux as
> it is. However, the current modified import you are trying to do
> doesn't solve that purpose as well.

Ensuring that we don't introduce non-standard bindings (by using Linux
DTSI) is one benefit, simplifying new platform bringup is another.

The amount of work required to switch to upstream DT is too much to
block this series on. We can work on improving the situation there once
we have these Qualcomm improvements upstream and new boards added. I do
admit that this is quite an awkward middle-ground, and I would not like
it to last for too long.

> 
> -Sumit
> 
>>>>>>
>>>>>> IMO, the build command would look like following if we import
>>>>>> pre-built FDT blob from Linux:
>>>>>>
>>>>>> - Build u-boot::
>>>>>>
>>>>>>         $ export CROSS_COMPILE=<aarch64 toolchain prefix>
>>>>>>         $ make qcom_defconfig
>>>>>>         $ make
>>>>>>
>>>>>> - gzip u-boot::
>>>>>>
>>>>>>         gzip u-boot-nodtb.bin
>>>>>>
>>>>>> - Append dtb to gzipped u-boot::
>>>>>>
>>>>>>          cat u-boot-nodtb.bin.gz
>>>>>> <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
>>>>>> u-boot-nodtb.bin.gz-dtb
>>>>>>
>>>>>> This would avoid the maintenance burden to keep DT in sync with that
>>>>>> of Linux. And since DT bindings in Linux are backwards compatible, we
>>>>>> can say u-boot should work with DTB picked up from any Linux kernel
>>>>>> stable release.
>>>>>
>>>>> I guess one question I have is, are we being passed the device tree
>>>>> (since we're acting like the Linux Kernel)
>>>>
>>>> Yeah that is the case here, see patch #1 in this series regarding how
>>>> FDT address is being retrieved from previous stage bootloader (ABL on
>>>> sdm845 and qcs404 SoCs).
>>>
>>> That's what I thought.
>>>
>>>>> or knowing that we have the
>>>>> dtb attached to the end of us and making use of the old kernel appended
>>>>> dtb option? We're fine in for example the rpi_arm64 case of just being
>>>>> given a device tree from the previous stage and not needing one in-tree.
>>>>
>>>> That's good to know and we can replicate that for Qcom platforms which
>>>> are chainloaded and don't need an embedded DT.
>>>
>>> So yes, moving these towards the direction of rpi_arm64 and specifically
>>> using imply OF_HAS_PRIOR_STAGE or select OF_HAS_PRIOR_STAGE (force that
>>> the dtb must be provided to us) sounds like the right direction to take
>>> these platforms.
>>>
>>
>> --
>> // Caleb (they/them)
Neil Armstrong Nov. 29, 2023, 4:36 p.m. UTC | #9
On 29/11/2023 16:34, Caleb Connolly wrote:
> 
> 
> On 23/11/2023 07:04, Sumit Garg wrote:
>> On Wed, 22 Nov 2023 at 21:34, Caleb Connolly <caleb.connolly@linaro.org> wrote:
>>>
>>>
>>>
>>> On 22/11/2023 14:27, Tom Rini wrote:
>>>> On Wed, Nov 22, 2023 at 07:44:09PM +0530, Sumit Garg wrote:
>>>>> On Wed, 22 Nov 2023 at 19:31, Tom Rini <trini@konsulko.com> wrote:
>>>>>>
>>>>>> On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
>>>>>>> Hi Caleb,
>>>>>>>
>>>>>>> On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
>>>>>> [snip]
>>>>>>>> == DT loading ==
>>>>>>>>
>>>>>>>> Previously, boards used the FDT blob embedded into U-Boot (via
>>>>>>>> OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
>>>>>>>> bootloader, so we can instead rely on the first-stage bootloader to
>>>>>>>> populate some useful FDT properties for us (notably the /memory node and
>>>>>>>> KASLR seed) and fetch the DTB that it provides. Combined with the memory
>>>>>>>> map changes above, this let's us entirely avoid configuring the memory
>>>>>>>> map explicitly.
>>>>>>>
>>>>>>> Since with this change, we don't need to embed FDT blob in the u-boot
>>>>>>> binary, so I was thinking if we really need to import DTs from Linux
>>>>>>> for different platforms and then play a catchup game?
>>>
>>> For now, yes.
>>
>> But why? Is there any value added by larger u-boot specific DT (most
>> of the nodes being unused by u-boot) than what currently u-boot
>> supports? The more important part is to get alignment with Linux DT
>> bindings. If you need to have memory/reserved-memory nodes in u-boot
>> DT for generalization purposes then you should import those particular
>> nodes only.
> 
> I've been thinking about and hacking on this for the last week or so,
> sorry for the delayed reply here.
> 
> The value is in preventing any of the existing bindings from regressing,
> and simplifying the bringup process for new platforms (just copy
> SoC/PMIC DTSI and write a minimal board DTS to enable the needed hardware).
>>
>>> There are quite a few features which aren't handled by
>>> U-Boot that it shouldn't need to handle (rpm/h resources for example).
>>> Also the fixed-regulator / regulator-gpio binding differences.
>>
>> IMO, we should fix them first and then use Linux DT as it is.
> 
> The biggest blocker here is USB, on sdm845 and the 4 new platforms I
> have working, I only support USB high speed, this requires removing the
> superspeed phy and adding a DTS property.
> 
> I tried using OF_BOARD_SETUP to make this changes during boot but this
> approach really isn't scalable (and I couldn't find a way to make it
> work anyway).
> 
>>
>>>
>>> I would definitely like to move towards supporting Linux DT directly,
>>> but this approach gives us a nice middleground of minimising the U-Boot
>>> specific DT parts.
>>
>> I don't see any real benefits here apart from the maintenance burden.
>> If it had been an actual Linux DT then that can be passed to Linux as
>> it is. However, the current modified import you are trying to do
>> doesn't solve that purpose as well.
> 
> Ensuring that we don't introduce non-standard bindings (by using Linux
> DTSI) is one benefit, simplifying new platform bringup is another.
> 
> The amount of work required to switch to upstream DT is too much to
> block this series on. We can work on improving the situation there once
> we have these Qualcomm improvements upstream and new boards added. I do
> admit that this is quite an awkward middle-ground, and I would not like
> it to last for too long.

I'm a real supporter of targeting support of unmodified (or very slighly)
Linux DT, having a reduced version of the Linux DT will be a pain at each
sync, and you'll need to do this manually.

Simply having to copy the Linux DT without any changes will make sure you
are in sync with Linux's bindings, and will help making sure you'll boot
unchanged Linux DTBs you get from previous loaders.

And in bonus, you'll be able to chain it to the next loader like EFI.

So I don't see why any work toward this goal is useless, and if an
intermediate step is needed, let's do it.

Neil

> 
>>
>> -Sumit
>>
>>>>>>>
>>>>>>> IMO, the build command would look like following if we import
>>>>>>> pre-built FDT blob from Linux:
>>>>>>>
>>>>>>> - Build u-boot::
>>>>>>>
>>>>>>>          $ export CROSS_COMPILE=<aarch64 toolchain prefix>
>>>>>>>          $ make qcom_defconfig
>>>>>>>          $ make
>>>>>>>
>>>>>>> - gzip u-boot::
>>>>>>>
>>>>>>>          gzip u-boot-nodtb.bin
>>>>>>>
>>>>>>> - Append dtb to gzipped u-boot::
>>>>>>>
>>>>>>>           cat u-boot-nodtb.bin.gz
>>>>>>> <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
>>>>>>> u-boot-nodtb.bin.gz-dtb
>>>>>>>
>>>>>>> This would avoid the maintenance burden to keep DT in sync with that
>>>>>>> of Linux. And since DT bindings in Linux are backwards compatible, we
>>>>>>> can say u-boot should work with DTB picked up from any Linux kernel
>>>>>>> stable release.
>>>>>>
>>>>>> I guess one question I have is, are we being passed the device tree
>>>>>> (since we're acting like the Linux Kernel)
>>>>>
>>>>> Yeah that is the case here, see patch #1 in this series regarding how
>>>>> FDT address is being retrieved from previous stage bootloader (ABL on
>>>>> sdm845 and qcs404 SoCs).
>>>>
>>>> That's what I thought.
>>>>
>>>>>> or knowing that we have the
>>>>>> dtb attached to the end of us and making use of the old kernel appended
>>>>>> dtb option? We're fine in for example the rpi_arm64 case of just being
>>>>>> given a device tree from the previous stage and not needing one in-tree.
>>>>>
>>>>> That's good to know and we can replicate that for Qcom platforms which
>>>>> are chainloaded and don't need an embedded DT.
>>>>
>>>> So yes, moving these towards the direction of rpi_arm64 and specifically
>>>> using imply OF_HAS_PRIOR_STAGE or select OF_HAS_PRIOR_STAGE (force that
>>>> the dtb must be provided to us) sounds like the right direction to take
>>>> these platforms
>>>>
>>>
>>> --
>>> // Caleb (they/them)
>
Dennis Gilmore Nov. 29, 2023, 5:01 p.m. UTC | #10
A big benefit of using the full dtb in u-boot means it can be used to
boot the system without the need to load a replacement file from disk
or elsewhere, which, AFAIK is required for the System Ready standards
and it definitely helps in cases like EFI booting.

Dennis

On Wed, Nov 29, 2023 at 10:37 AM Neil Armstrong
<neil.armstrong@linaro.org> wrote:
>
> On 29/11/2023 16:34, Caleb Connolly wrote:
> >
> >
> > On 23/11/2023 07:04, Sumit Garg wrote:
> >> On Wed, 22 Nov 2023 at 21:34, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> >>>
> >>>
> >>>
> >>> On 22/11/2023 14:27, Tom Rini wrote:
> >>>> On Wed, Nov 22, 2023 at 07:44:09PM +0530, Sumit Garg wrote:
> >>>>> On Wed, 22 Nov 2023 at 19:31, Tom Rini <trini@konsulko.com> wrote:
> >>>>>>
> >>>>>> On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
> >>>>>>> Hi Caleb,
> >>>>>>>
> >>>>>>> On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> >>>>>> [snip]
> >>>>>>>> == DT loading ==
> >>>>>>>>
> >>>>>>>> Previously, boards used the FDT blob embedded into U-Boot (via
> >>>>>>>> OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> >>>>>>>> bootloader, so we can instead rely on the first-stage bootloader to
> >>>>>>>> populate some useful FDT properties for us (notably the /memory node and
> >>>>>>>> KASLR seed) and fetch the DTB that it provides. Combined with the memory
> >>>>>>>> map changes above, this let's us entirely avoid configuring the memory
> >>>>>>>> map explicitly.
> >>>>>>>
> >>>>>>> Since with this change, we don't need to embed FDT blob in the u-boot
> >>>>>>> binary, so I was thinking if we really need to import DTs from Linux
> >>>>>>> for different platforms and then play a catchup game?
> >>>
> >>> For now, yes.
> >>
> >> But why? Is there any value added by larger u-boot specific DT (most
> >> of the nodes being unused by u-boot) than what currently u-boot
> >> supports? The more important part is to get alignment with Linux DT
> >> bindings. If you need to have memory/reserved-memory nodes in u-boot
> >> DT for generalization purposes then you should import those particular
> >> nodes only.
> >
> > I've been thinking about and hacking on this for the last week or so,
> > sorry for the delayed reply here.
> >
> > The value is in preventing any of the existing bindings from regressing,
> > and simplifying the bringup process for new platforms (just copy
> > SoC/PMIC DTSI and write a minimal board DTS to enable the needed hardware).
> >>
> >>> There are quite a few features which aren't handled by
> >>> U-Boot that it shouldn't need to handle (rpm/h resources for example).
> >>> Also the fixed-regulator / regulator-gpio binding differences.
> >>
> >> IMO, we should fix them first and then use Linux DT as it is.
> >
> > The biggest blocker here is USB, on sdm845 and the 4 new platforms I
> > have working, I only support USB high speed, this requires removing the
> > superspeed phy and adding a DTS property.
> >
> > I tried using OF_BOARD_SETUP to make this changes during boot but this
> > approach really isn't scalable (and I couldn't find a way to make it
> > work anyway).
> >
> >>
> >>>
> >>> I would definitely like to move towards supporting Linux DT directly,
> >>> but this approach gives us a nice middleground of minimising the U-Boot
> >>> specific DT parts.
> >>
> >> I don't see any real benefits here apart from the maintenance burden.
> >> If it had been an actual Linux DT then that can be passed to Linux as
> >> it is. However, the current modified import you are trying to do
> >> doesn't solve that purpose as well.
> >
> > Ensuring that we don't introduce non-standard bindings (by using Linux
> > DTSI) is one benefit, simplifying new platform bringup is another.
> >
> > The amount of work required to switch to upstream DT is too much to
> > block this series on. We can work on improving the situation there once
> > we have these Qualcomm improvements upstream and new boards added. I do
> > admit that this is quite an awkward middle-ground, and I would not like
> > it to last for too long.
>
> I'm a real supporter of targeting support of unmodified (or very slighly)
> Linux DT, having a reduced version of the Linux DT will be a pain at each
> sync, and you'll need to do this manually.
>
> Simply having to copy the Linux DT without any changes will make sure you
> are in sync with Linux's bindings, and will help making sure you'll boot
> unchanged Linux DTBs you get from previous loaders.
>
> And in bonus, you'll be able to chain it to the next loader like EFI.
>
> So I don't see why any work toward this goal is useless, and if an
> intermediate step is needed, let's do it.
>
> Neil
>
> >
> >>
> >> -Sumit
> >>
> >>>>>>>
> >>>>>>> IMO, the build command would look like following if we import
> >>>>>>> pre-built FDT blob from Linux:
> >>>>>>>
> >>>>>>> - Build u-boot::
> >>>>>>>
> >>>>>>>          $ export CROSS_COMPILE=<aarch64 toolchain prefix>
> >>>>>>>          $ make qcom_defconfig
> >>>>>>>          $ make
> >>>>>>>
> >>>>>>> - gzip u-boot::
> >>>>>>>
> >>>>>>>          gzip u-boot-nodtb.bin
> >>>>>>>
> >>>>>>> - Append dtb to gzipped u-boot::
> >>>>>>>
> >>>>>>>           cat u-boot-nodtb.bin.gz
> >>>>>>> <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
> >>>>>>> u-boot-nodtb.bin.gz-dtb
> >>>>>>>
> >>>>>>> This would avoid the maintenance burden to keep DT in sync with that
> >>>>>>> of Linux. And since DT bindings in Linux are backwards compatible, we
> >>>>>>> can say u-boot should work with DTB picked up from any Linux kernel
> >>>>>>> stable release.
> >>>>>>
> >>>>>> I guess one question I have is, are we being passed the device tree
> >>>>>> (since we're acting like the Linux Kernel)
> >>>>>
> >>>>> Yeah that is the case here, see patch #1 in this series regarding how
> >>>>> FDT address is being retrieved from previous stage bootloader (ABL on
> >>>>> sdm845 and qcs404 SoCs).
> >>>>
> >>>> That's what I thought.
> >>>>
> >>>>>> or knowing that we have the
> >>>>>> dtb attached to the end of us and making use of the old kernel appended
> >>>>>> dtb option? We're fine in for example the rpi_arm64 case of just being
> >>>>>> given a device tree from the previous stage and not needing one in-tree.
> >>>>>
> >>>>> That's good to know and we can replicate that for Qcom platforms which
> >>>>> are chainloaded and don't need an embedded DT.
> >>>>
> >>>> So yes, moving these towards the direction of rpi_arm64 and specifically
> >>>> using imply OF_HAS_PRIOR_STAGE or select OF_HAS_PRIOR_STAGE (force that
> >>>> the dtb must be provided to us) sounds like the right direction to take
> >>>> these platforms
> >>>>
> >>>
> >>> --
> >>> // Caleb (they/them)
> >
>
Sumit Garg Nov. 30, 2023, 7:32 a.m. UTC | #11
On Wed, 29 Nov 2023 at 22:06, Neil Armstrong <neil.armstrong@linaro.org> wrote:
>
> On 29/11/2023 16:34, Caleb Connolly wrote:
> >
> >
> > On 23/11/2023 07:04, Sumit Garg wrote:
> >> On Wed, 22 Nov 2023 at 21:34, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> >>>
> >>>
> >>>
> >>> On 22/11/2023 14:27, Tom Rini wrote:
> >>>> On Wed, Nov 22, 2023 at 07:44:09PM +0530, Sumit Garg wrote:
> >>>>> On Wed, 22 Nov 2023 at 19:31, Tom Rini <trini@konsulko.com> wrote:
> >>>>>>
> >>>>>> On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
> >>>>>>> Hi Caleb,
> >>>>>>>
> >>>>>>> On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> >>>>>> [snip]
> >>>>>>>> == DT loading ==
> >>>>>>>>
> >>>>>>>> Previously, boards used the FDT blob embedded into U-Boot (via
> >>>>>>>> OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> >>>>>>>> bootloader, so we can instead rely on the first-stage bootloader to
> >>>>>>>> populate some useful FDT properties for us (notably the /memory node and
> >>>>>>>> KASLR seed) and fetch the DTB that it provides. Combined with the memory
> >>>>>>>> map changes above, this let's us entirely avoid configuring the memory
> >>>>>>>> map explicitly.
> >>>>>>>
> >>>>>>> Since with this change, we don't need to embed FDT blob in the u-boot
> >>>>>>> binary, so I was thinking if we really need to import DTs from Linux
> >>>>>>> for different platforms and then play a catchup game?
> >>>
> >>> For now, yes.
> >>
> >> But why? Is there any value added by larger u-boot specific DT (most
> >> of the nodes being unused by u-boot) than what currently u-boot
> >> supports? The more important part is to get alignment with Linux DT
> >> bindings. If you need to have memory/reserved-memory nodes in u-boot
> >> DT for generalization purposes then you should import those particular
> >> nodes only.
> >
> > I've been thinking about and hacking on this for the last week or so,
> > sorry for the delayed reply here.
> >
> > The value is in preventing any of the existing bindings from regressing,

That is actually best addressed in Linux by checking the DTS against
yaml DT bindings. We don't have that testing available in u-boot and
only depend on careful reviews.

> > and simplifying the bringup process for new platforms (just copy
> > SoC/PMIC DTSI and write a minimal board DTS to enable the needed hardware).
> >>
> >>> There are quite a few features which aren't handled by
> >>> U-Boot that it shouldn't need to handle (rpm/h resources for example).
> >>> Also the fixed-regulator / regulator-gpio binding differences.
> >>
> >> IMO, we should fix them first and then use Linux DT as it is.
> >
> > The biggest blocker here is USB, on sdm845 and the 4 new platforms I
> > have working, I only support USB high speed, this requires removing the
> > superspeed phy and adding a DTS property.
> >
> > I tried using OF_BOARD_SETUP to make this changes during boot but this
> > approach really isn't scalable (and I couldn't find a way to make it
> > work anyway).

Okay so let's try an alternative intermediate step then. We import the
Linux DT files *as it is* and then keep the u-boot specific custom
changes in <soc>-u-boot.dtsi file which is included by the board DTS
file. This has been the approach that other u-boot platforms follow
and allow us to easily sync them with Linux while reducing custom
u-boot specific bits. Eventually we should target at dropping u-boot
specific custom bits and then directly pick up DTB from Linux and boot
it.

> >
> >>
> >>>
> >>> I would definitely like to move towards supporting Linux DT directly,
> >>> but this approach gives us a nice middleground of minimising the U-Boot
> >>> specific DT parts.
> >>
> >> I don't see any real benefits here apart from the maintenance burden.
> >> If it had been an actual Linux DT then that can be passed to Linux as
> >> it is. However, the current modified import you are trying to do
> >> doesn't solve that purpose as well.
> >
> > Ensuring that we don't introduce non-standard bindings (by using Linux
> > DTSI) is one benefit, simplifying new platform bringup is another.
> >
> > The amount of work required to switch to upstream DT is too much to
> > block this series on. We can work on improving the situation there once
> > we have these Qualcomm improvements upstream and new boards added. I do
> > admit that this is quite an awkward middle-ground, and I would not like
> > it to last for too long.
>
> I'm a real supporter of targeting support of unmodified (or very slighly)
> Linux DT, having a reduced version of the Linux DT will be a pain at each
> sync, and you'll need to do this manually.

We have to choose the middle-ground carefully here. It shouldn't give
the impression that it is an actual Linux DT that you can pass
directly to Linux via EFI. As otherwise users will hit problems due to
the partially modified DTs in u-boot.

>
> Simply having to copy the Linux DT without any changes will make sure you
> are in sync with Linux's bindings, and will help making sure you'll boot
> unchanged Linux DTBs you get from previous loaders.

Once we have the previous loaders (ABL or LK) providing u-boot fully
fledged DTB then we don't need to maintain Linux DT copy in u-boot
which is always a pain to keep in sync.

>
> And in bonus, you'll be able to chain it to the next loader like EFI.
>
> So I don't see why any work toward this goal is useless, and if an
> intermediate step is needed, let's do it.

See the side effects of an intermediate step mentioned above. Having
<soc>-u-boot.dtsi clearly separates the changes we have to make for
u-boot.

-Sumit

>
> Neil
>
> >
> >>
> >> -Sumit
> >>
> >>>>>>>
> >>>>>>> IMO, the build command would look like following if we import
> >>>>>>> pre-built FDT blob from Linux:
> >>>>>>>
> >>>>>>> - Build u-boot::
> >>>>>>>
> >>>>>>>          $ export CROSS_COMPILE=<aarch64 toolchain prefix>
> >>>>>>>          $ make qcom_defconfig
> >>>>>>>          $ make
> >>>>>>>
> >>>>>>> - gzip u-boot::
> >>>>>>>
> >>>>>>>          gzip u-boot-nodtb.bin
> >>>>>>>
> >>>>>>> - Append dtb to gzipped u-boot::
> >>>>>>>
> >>>>>>>           cat u-boot-nodtb.bin.gz
> >>>>>>> <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
> >>>>>>> u-boot-nodtb.bin.gz-dtb
> >>>>>>>
> >>>>>>> This would avoid the maintenance burden to keep DT in sync with that
> >>>>>>> of Linux. And since DT bindings in Linux are backwards compatible, we
> >>>>>>> can say u-boot should work with DTB picked up from any Linux kernel
> >>>>>>> stable release.
> >>>>>>
> >>>>>> I guess one question I have is, are we being passed the device tree
> >>>>>> (since we're acting like the Linux Kernel)
> >>>>>
> >>>>> Yeah that is the case here, see patch #1 in this series regarding how
> >>>>> FDT address is being retrieved from previous stage bootloader (ABL on
> >>>>> sdm845 and qcs404 SoCs).
> >>>>
> >>>> That's what I thought.
> >>>>
> >>>>>> or knowing that we have the
> >>>>>> dtb attached to the end of us and making use of the old kernel appended
> >>>>>> dtb option? We're fine in for example the rpi_arm64 case of just being
> >>>>>> given a device tree from the previous stage and not needing one in-tree.
> >>>>>
> >>>>> That's good to know and we can replicate that for Qcom platforms which
> >>>>> are chainloaded and don't need an embedded DT.
> >>>>
> >>>> So yes, moving these towards the direction of rpi_arm64 and specifically
> >>>> using imply OF_HAS_PRIOR_STAGE or select OF_HAS_PRIOR_STAGE (force that
> >>>> the dtb must be provided to us) sounds like the right direction to take
> >>>> these platforms
> >>>>
> >>>
> >>> --
> >>> // Caleb (they/them)
> >
>
Sumit Garg Nov. 30, 2023, 7:40 a.m. UTC | #12
Hi Dennis,

On Wed, 29 Nov 2023 at 22:32, Dennis Gilmore <dgilmore@fedoraproject.org> wrote:
>
> A big benefit of using the full dtb in u-boot means it can be used to
> boot the system without the need to load a replacement file from disk
> or elsewhere, which, AFAIK is required for the System Ready standards
> and it definitely helps in cases like EFI booting.

The discussion here is all focussed on how to reach a point where
u-boot uses unmodified DTB. This would allow the system to be
compliant with System Ready standards with DT being directly passed
from u-boot via EFI config table to Linux.

-Sumit

>
> Dennis
>
> On Wed, Nov 29, 2023 at 10:37 AM Neil Armstrong
> <neil.armstrong@linaro.org> wrote:
> >
> > On 29/11/2023 16:34, Caleb Connolly wrote:
> > >
> > >
> > > On 23/11/2023 07:04, Sumit Garg wrote:
> > >> On Wed, 22 Nov 2023 at 21:34, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> > >>>
> > >>>
> > >>>
> > >>> On 22/11/2023 14:27, Tom Rini wrote:
> > >>>> On Wed, Nov 22, 2023 at 07:44:09PM +0530, Sumit Garg wrote:
> > >>>>> On Wed, 22 Nov 2023 at 19:31, Tom Rini <trini@konsulko.com> wrote:
> > >>>>>>
> > >>>>>> On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
> > >>>>>>> Hi Caleb,
> > >>>>>>>
> > >>>>>>> On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> > >>>>>> [snip]
> > >>>>>>>> == DT loading ==
> > >>>>>>>>
> > >>>>>>>> Previously, boards used the FDT blob embedded into U-Boot (via
> > >>>>>>>> OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> > >>>>>>>> bootloader, so we can instead rely on the first-stage bootloader to
> > >>>>>>>> populate some useful FDT properties for us (notably the /memory node and
> > >>>>>>>> KASLR seed) and fetch the DTB that it provides. Combined with the memory
> > >>>>>>>> map changes above, this let's us entirely avoid configuring the memory
> > >>>>>>>> map explicitly.
> > >>>>>>>
> > >>>>>>> Since with this change, we don't need to embed FDT blob in the u-boot
> > >>>>>>> binary, so I was thinking if we really need to import DTs from Linux
> > >>>>>>> for different platforms and then play a catchup game?
> > >>>
> > >>> For now, yes.
> > >>
> > >> But why? Is there any value added by larger u-boot specific DT (most
> > >> of the nodes being unused by u-boot) than what currently u-boot
> > >> supports? The more important part is to get alignment with Linux DT
> > >> bindings. If you need to have memory/reserved-memory nodes in u-boot
> > >> DT for generalization purposes then you should import those particular
> > >> nodes only.
> > >
> > > I've been thinking about and hacking on this for the last week or so,
> > > sorry for the delayed reply here.
> > >
> > > The value is in preventing any of the existing bindings from regressing,
> > > and simplifying the bringup process for new platforms (just copy
> > > SoC/PMIC DTSI and write a minimal board DTS to enable the needed hardware).
> > >>
> > >>> There are quite a few features which aren't handled by
> > >>> U-Boot that it shouldn't need to handle (rpm/h resources for example).
> > >>> Also the fixed-regulator / regulator-gpio binding differences.
> > >>
> > >> IMO, we should fix them first and then use Linux DT as it is.
> > >
> > > The biggest blocker here is USB, on sdm845 and the 4 new platforms I
> > > have working, I only support USB high speed, this requires removing the
> > > superspeed phy and adding a DTS property.
> > >
> > > I tried using OF_BOARD_SETUP to make this changes during boot but this
> > > approach really isn't scalable (and I couldn't find a way to make it
> > > work anyway).
> > >
> > >>
> > >>>
> > >>> I would definitely like to move towards supporting Linux DT directly,
> > >>> but this approach gives us a nice middleground of minimising the U-Boot
> > >>> specific DT parts.
> > >>
> > >> I don't see any real benefits here apart from the maintenance burden.
> > >> If it had been an actual Linux DT then that can be passed to Linux as
> > >> it is. However, the current modified import you are trying to do
> > >> doesn't solve that purpose as well.
> > >
> > > Ensuring that we don't introduce non-standard bindings (by using Linux
> > > DTSI) is one benefit, simplifying new platform bringup is another.
> > >
> > > The amount of work required to switch to upstream DT is too much to
> > > block this series on. We can work on improving the situation there once
> > > we have these Qualcomm improvements upstream and new boards added. I do
> > > admit that this is quite an awkward middle-ground, and I would not like
> > > it to last for too long.
> >
> > I'm a real supporter of targeting support of unmodified (or very slighly)
> > Linux DT, having a reduced version of the Linux DT will be a pain at each
> > sync, and you'll need to do this manually.
> >
> > Simply having to copy the Linux DT without any changes will make sure you
> > are in sync with Linux's bindings, and will help making sure you'll boot
> > unchanged Linux DTBs you get from previous loaders.
> >
> > And in bonus, you'll be able to chain it to the next loader like EFI.
> >
> > So I don't see why any work toward this goal is useless, and if an
> > intermediate step is needed, let's do it.
> >
> > Neil
> >
> > >
> > >>
> > >> -Sumit
> > >>
> > >>>>>>>
> > >>>>>>> IMO, the build command would look like following if we import
> > >>>>>>> pre-built FDT blob from Linux:
> > >>>>>>>
> > >>>>>>> - Build u-boot::
> > >>>>>>>
> > >>>>>>>          $ export CROSS_COMPILE=<aarch64 toolchain prefix>
> > >>>>>>>          $ make qcom_defconfig
> > >>>>>>>          $ make
> > >>>>>>>
> > >>>>>>> - gzip u-boot::
> > >>>>>>>
> > >>>>>>>          gzip u-boot-nodtb.bin
> > >>>>>>>
> > >>>>>>> - Append dtb to gzipped u-boot::
> > >>>>>>>
> > >>>>>>>           cat u-boot-nodtb.bin.gz
> > >>>>>>> <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
> > >>>>>>> u-boot-nodtb.bin.gz-dtb
> > >>>>>>>
> > >>>>>>> This would avoid the maintenance burden to keep DT in sync with that
> > >>>>>>> of Linux. And since DT bindings in Linux are backwards compatible, we
> > >>>>>>> can say u-boot should work with DTB picked up from any Linux kernel
> > >>>>>>> stable release.
> > >>>>>>
> > >>>>>> I guess one question I have is, are we being passed the device tree
> > >>>>>> (since we're acting like the Linux Kernel)
> > >>>>>
> > >>>>> Yeah that is the case here, see patch #1 in this series regarding how
> > >>>>> FDT address is being retrieved from previous stage bootloader (ABL on
> > >>>>> sdm845 and qcs404 SoCs).
> > >>>>
> > >>>> That's what I thought.
> > >>>>
> > >>>>>> or knowing that we have the
> > >>>>>> dtb attached to the end of us and making use of the old kernel appended
> > >>>>>> dtb option? We're fine in for example the rpi_arm64 case of just being
> > >>>>>> given a device tree from the previous stage and not needing one in-tree.
> > >>>>>
> > >>>>> That's good to know and we can replicate that for Qcom platforms which
> > >>>>> are chainloaded and don't need an embedded DT.
> > >>>>
> > >>>> So yes, moving these towards the direction of rpi_arm64 and specifically
> > >>>> using imply OF_HAS_PRIOR_STAGE or select OF_HAS_PRIOR_STAGE (force that
> > >>>> the dtb must be provided to us) sounds like the right direction to take
> > >>>> these platforms
> > >>>>
> > >>>
> > >>> --
> > >>> // Caleb (they/them)
> > >
> >
Caleb Connolly Nov. 30, 2023, 2:24 p.m. UTC | #13
>>>>>>>>> Since with this change, we don't need to embed FDT blob in the u-boot
>>>>>>>>> binary, so I was thinking if we really need to import DTs from Linux
>>>>>>>>> for different platforms and then play a catchup game?
>>>>>
>>>>> For now, yes.
>>>>
>>>> But why? Is there any value added by larger u-boot specific DT (most
>>>> of the nodes being unused by u-boot) than what currently u-boot
>>>> supports? The more important part is to get alignment with Linux DT
>>>> bindings. If you need to have memory/reserved-memory nodes in u-boot
>>>> DT for generalization purposes then you should import those particular
>>>> nodes only.
>>>
>>> I've been thinking about and hacking on this for the last week or so,
>>> sorry for the delayed reply here.
>>>
>>> The value is in preventing any of the existing bindings from regressing,
> 
> That is actually best addressed in Linux by checking the DTS against
> yaml DT bindings. We don't have that testing available in u-boot and
> only depend on careful reviews.

Sorry, I didn't explain myself very well here. By having .dtsi files be
identical to Linux, we ensure that U-Boot drivers will remain compatible
with them. Just as an argument not to use custom SoC dts in U-Boot
(which is what we do currently).
> 
>>> and simplifying the bringup process for new platforms (just copy
>>> SoC/PMIC DTSI and write a minimal board DTS to enable the needed hardware).
>>>>
>>>>> There are quite a few features which aren't handled by
>>>>> U-Boot that it shouldn't need to handle (rpm/h resources for example).
>>>>> Also the fixed-regulator / regulator-gpio binding differences.
>>>>
>>>> IMO, we should fix them first and then use Linux DT as it is.
>>>
>>> The biggest blocker here is USB, on sdm845 and the 4 new platforms I
>>> have working, I only support USB high speed, this requires removing the
>>> superspeed phy and adding a DTS property.
>>>
>>> I tried using OF_BOARD_SETUP to make this changes during boot but this
>>> approach really isn't scalable (and I couldn't find a way to make it
>>> work anyway).
> 
> Okay so let's try an alternative intermediate step then. We import the
> Linux DT files *as it is* and then keep the u-boot specific custom
> changes in <soc>-u-boot.dtsi file which is included by the board DTS
> file. This has been the approach that other u-boot platforms follow
> and allow us to easily sync them with Linux while reducing custom
> u-boot specific bits. Eventually we should target at dropping u-boot
> specific custom bits and then directly pick up DTB from Linux and boot
> it.

Ok, I think this is a reasonable approach. Will do that for the next
revision
> 
>>>
>>>>
>>>>>
>>>>> I would definitely like to move towards supporting Linux DT directly,
>>>>> but this approach gives us a nice middleground of minimising the U-Boot
>>>>> specific DT parts.
>>>>
>>>> I don't see any real benefits here apart from the maintenance burden.
>>>> If it had been an actual Linux DT then that can be passed to Linux as
>>>> it is. However, the current modified import you are trying to do
>>>> doesn't solve that purpose as well.
>>>
>>> Ensuring that we don't introduce non-standard bindings (by using Linux
>>> DTSI) is one benefit, simplifying new platform bringup is another.
>>>
>>> The amount of work required to switch to upstream DT is too much to
>>> block this series on. We can work on improving the situation there once
>>> we have these Qualcomm improvements upstream and new boards added. I do
>>> admit that this is quite an awkward middle-ground, and I would not like
>>> it to last for too long.
>>
>> I'm a real supporter of targeting support of unmodified (or very slighly)
>> Linux DT, having a reduced version of the Linux DT will be a pain at each
>> sync, and you'll need to do this manually.
> 
> We have to choose the middle-ground carefully here. It shouldn't give
> the impression that it is an actual Linux DT that you can pass
> directly to Linux via EFI. As otherwise users will hit problems due to
> the partially modified DTs in u-boot.
> 
>>
>> Simply having to copy the Linux DT without any changes will make sure you
>> are in sync with Linux's bindings, and will help making sure you'll boot
>> unchanged Linux DTBs you get from previous loaders.
> 
> Once we have the previous loaders (ABL or LK) providing u-boot fully
> fledged DTB then we don't need to maintain Linux DT copy in u-boot
> which is always a pain to keep in sync.

Yes
> 
>>
>> And in bonus, you'll be able to chain it to the next loader like EFI.
>>
>> So I don't see why any work toward this goal is useless, and if an
>> intermediate step is needed, let's do it.
> 
> See the side effects of an intermediate step mentioned above. Having
> <soc>-u-boot.dtsi clearly separates the changes we have to make for
> u-boot.

Sounds good.

Thanks,
> 
> -Sumit
> 
>>
>> Neil
>>
>>>
>>>>
>>>> -Sumit
>>>>
>>>>>>>>>
>>>>>>>>> IMO, the build command would look like following if we import
>>>>>>>>> pre-built FDT blob from Linux:
>>>>>>>>>
>>>>>>>>> - Build u-boot::
>>>>>>>>>
>>>>>>>>>          $ export CROSS_COMPILE=<aarch64 toolchain prefix>
>>>>>>>>>          $ make qcom_defconfig
>>>>>>>>>          $ make
>>>>>>>>>
>>>>>>>>> - gzip u-boot::
>>>>>>>>>
>>>>>>>>>          gzip u-boot-nodtb.bin
>>>>>>>>>
>>>>>>>>> - Append dtb to gzipped u-boot::
>>>>>>>>>
>>>>>>>>>           cat u-boot-nodtb.bin.gz
>>>>>>>>> <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
>>>>>>>>> u-boot-nodtb.bin.gz-dtb
>>>>>>>>>
>>>>>>>>> This would avoid the maintenance burden to keep DT in sync with that
>>>>>>>>> of Linux. And since DT bindings in Linux are backwards compatible, we
>>>>>>>>> can say u-boot should work with DTB picked up from any Linux kernel
>>>>>>>>> stable release.
>>>>>>>>
>>>>>>>> I guess one question I have is, are we being passed the device tree
>>>>>>>> (since we're acting like the Linux Kernel)
>>>>>>>
>>>>>>> Yeah that is the case here, see patch #1 in this series regarding how
>>>>>>> FDT address is being retrieved from previous stage bootloader (ABL on
>>>>>>> sdm845 and qcs404 SoCs).
>>>>>>
>>>>>> That's what I thought.
>>>>>>
>>>>>>>> or knowing that we have the
>>>>>>>> dtb attached to the end of us and making use of the old kernel appended
>>>>>>>> dtb option? We're fine in for example the rpi_arm64 case of just being
>>>>>>>> given a device tree from the previous stage and not needing one in-tree.
>>>>>>>
>>>>>>> That's good to know and we can replicate that for Qcom platforms which
>>>>>>> are chainloaded and don't need an embedded DT.
>>>>>>
>>>>>> So yes, moving these towards the direction of rpi_arm64 and specifically
>>>>>> using imply OF_HAS_PRIOR_STAGE or select OF_HAS_PRIOR_STAGE (force that
>>>>>> the dtb must be provided to us) sounds like the right direction to take
>>>>>> these platforms
>>>>>>
>>>>>
>>>>> --
>>>>> // Caleb (they/them)
>>>
>>
Tom Rini Nov. 30, 2023, 2:35 p.m. UTC | #14
On Thu, Nov 30, 2023 at 01:02:25PM +0530, Sumit Garg wrote:
> On Wed, 29 Nov 2023 at 22:06, Neil Armstrong <neil.armstrong@linaro.org> wrote:
> >
> > On 29/11/2023 16:34, Caleb Connolly wrote:
> > >
> > >
> > > On 23/11/2023 07:04, Sumit Garg wrote:
> > >> On Wed, 22 Nov 2023 at 21:34, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> > >>>
> > >>>
> > >>>
> > >>> On 22/11/2023 14:27, Tom Rini wrote:
> > >>>> On Wed, Nov 22, 2023 at 07:44:09PM +0530, Sumit Garg wrote:
> > >>>>> On Wed, 22 Nov 2023 at 19:31, Tom Rini <trini@konsulko.com> wrote:
> > >>>>>>
> > >>>>>> On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
> > >>>>>>> Hi Caleb,
> > >>>>>>>
> > >>>>>>> On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> > >>>>>> [snip]
> > >>>>>>>> == DT loading ==
> > >>>>>>>>
> > >>>>>>>> Previously, boards used the FDT blob embedded into U-Boot (via
> > >>>>>>>> OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> > >>>>>>>> bootloader, so we can instead rely on the first-stage bootloader to
> > >>>>>>>> populate some useful FDT properties for us (notably the /memory node and
> > >>>>>>>> KASLR seed) and fetch the DTB that it provides. Combined with the memory
> > >>>>>>>> map changes above, this let's us entirely avoid configuring the memory
> > >>>>>>>> map explicitly.
> > >>>>>>>
> > >>>>>>> Since with this change, we don't need to embed FDT blob in the u-boot
> > >>>>>>> binary, so I was thinking if we really need to import DTs from Linux
> > >>>>>>> for different platforms and then play a catchup game?
> > >>>
> > >>> For now, yes.
> > >>
> > >> But why? Is there any value added by larger u-boot specific DT (most
> > >> of the nodes being unused by u-boot) than what currently u-boot
> > >> supports? The more important part is to get alignment with Linux DT
> > >> bindings. If you need to have memory/reserved-memory nodes in u-boot
> > >> DT for generalization purposes then you should import those particular
> > >> nodes only.
> > >
> > > I've been thinking about and hacking on this for the last week or so,
> > > sorry for the delayed reply here.
> > >
> > > The value is in preventing any of the existing bindings from regressing,
> 
> That is actually best addressed in Linux by checking the DTS against
> yaml DT bindings. We don't have that testing available in u-boot and
> only depend on careful reviews.

I would absolutely love for someone to make another attempt at updating
our kbuild infrastucture so that we can run the validation targets.
Sumit Garg Dec. 4, 2023, 5:32 a.m. UTC | #15
+ Linux kernel DT bindings maintainers, EBBR ML

On Thu, 30 Nov 2023 at 20:05, Tom Rini <trini@konsulko.com> wrote:
>
> On Thu, Nov 30, 2023 at 01:02:25PM +0530, Sumit Garg wrote:
> > On Wed, 29 Nov 2023 at 22:06, Neil Armstrong <neil.armstrong@linaro.org> wrote:
> > >
> > > On 29/11/2023 16:34, Caleb Connolly wrote:
> > > >
> > > >
> > > > On 23/11/2023 07:04, Sumit Garg wrote:
> > > >> On Wed, 22 Nov 2023 at 21:34, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> > > >>>
> > > >>>
> > > >>>
> > > >>> On 22/11/2023 14:27, Tom Rini wrote:
> > > >>>> On Wed, Nov 22, 2023 at 07:44:09PM +0530, Sumit Garg wrote:
> > > >>>>> On Wed, 22 Nov 2023 at 19:31, Tom Rini <trini@konsulko.com> wrote:
> > > >>>>>>
> > > >>>>>> On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
> > > >>>>>>> Hi Caleb,
> > > >>>>>>>
> > > >>>>>>> On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> > > >>>>>> [snip]
> > > >>>>>>>> == DT loading ==
> > > >>>>>>>>
> > > >>>>>>>> Previously, boards used the FDT blob embedded into U-Boot (via
> > > >>>>>>>> OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> > > >>>>>>>> bootloader, so we can instead rely on the first-stage bootloader to
> > > >>>>>>>> populate some useful FDT properties for us (notably the /memory node and
> > > >>>>>>>> KASLR seed) and fetch the DTB that it provides. Combined with the memory
> > > >>>>>>>> map changes above, this let's us entirely avoid configuring the memory
> > > >>>>>>>> map explicitly.
> > > >>>>>>>
> > > >>>>>>> Since with this change, we don't need to embed FDT blob in the u-boot
> > > >>>>>>> binary, so I was thinking if we really need to import DTs from Linux
> > > >>>>>>> for different platforms and then play a catchup game?
> > > >>>
> > > >>> For now, yes.
> > > >>
> > > >> But why? Is there any value added by larger u-boot specific DT (most
> > > >> of the nodes being unused by u-boot) than what currently u-boot
> > > >> supports? The more important part is to get alignment with Linux DT
> > > >> bindings. If you need to have memory/reserved-memory nodes in u-boot
> > > >> DT for generalization purposes then you should import those particular
> > > >> nodes only.
> > > >
> > > > I've been thinking about and hacking on this for the last week or so,
> > > > sorry for the delayed reply here.
> > > >
> > > > The value is in preventing any of the existing bindings from regressing,
> >
> > That is actually best addressed in Linux by checking the DTS against
> > yaml DT bindings. We don't have that testing available in u-boot and
> > only depend on careful reviews.
>
> I would absolutely love for someone to make another attempt at updating
> our kbuild infrastucture so that we can run the validation targets.
>

Given that EBBR requires [1] the platform (firmware/bootloader) and
not OS to supply the devicetree, it becomes evident that
firmware/bootloaders import DTS from Linux kernel (where it is
maintained).

But currently u-boot doesn't have a proper way to validate those DTS
against DT bindings (maintained in Linux kernel). Although there are
Devicetree schema tools available here [2], there isn't a versioned
release package of DT bindings which one should use to validate DTS
files.

@DT bindings maintainers,

Given the ease of maintenance of DT bindings within Linux kernel
source tree, I don't have a specific objection there. But can we ease
DTS testing for firmware/bootloader projects by providing a versioned
release package for DT bindings? Or if someone else has a better idea
here please feel free to chime in.

[1] https://arm-software.github.io/ebbr/#guiding-principles
[2] https://github.com/devicetree-org/dt-schema

-Sumit

> --
> Tom
ff Dec. 4, 2023, 10:06 a.m. UTC | #16
Hi Summit,

Here are additional elements that you may want to consider.

This topic should be thought of with « who provides what » question in mind.

For quite a long time, one single entity was providing secure firmware, firmware, boot loader (I think of Grub when I use this overloaded term), and OS.
This explains why the Linux kernel community has been maintaining DT (not justifying it is now still a good model).

For Software Defined Vehicle and many other scenarios this supply chain is not working.
In the context of this separation, OS/Hypervisor supplying any DTB is a non-sense.
(Translated in real life: as a French driver, my DTB description of a car is that the steering wheel is on the left hand side. If I get on a UK car, I will complain that my hardware description does not match reality. Conclusion: better use DTB given from the platform!).
If I am not mistaken Fedora IOT 39 does not come with any DTBs: that was a theme hinted by Peter Robinson a while ago (Peter you may want to comment on this).

My understanding is that SystemReady was proposed and developed to address such a different supply chain where:
- the OS may be supplied by a party not controlling the underlying layers
- have standard contract between OS and previous entities
- The entity controlling the hardware is not an OS but a type-1 hypervisor

In all this context, the DT should be consumed by OSes (Linux, Zephyr, Eclipse ThreadX (donated by Microsoft), commercial ones…) and hypervisors.
The "DT » passed to a Linux (be it equivalent to Dom0) may not be the definitive vision of the whole platform. You may want to talk with the System Device Tree folks.
So there is no such a thing as « THE » device tree of the platform.
There can be a DT for BL33 firmware, a DT for OS/Hypervisor, a DT for TrustZone (highly decorated with clocks and power nodes that are often irrelevant to BL33 and OS/Hypervisor).

The BL33 and OS/Hypervisor DTs location is not defined by EBBR but my view is that the OS/Hypervisor DT can be located in the HW_CONFIG section of a FIP (this section is made for holding the OS DT).
The FIP can come from the SoC vendor, later updated by the Board vendor:

fiptool --hw-config <OS-DTB>

With a separate signing key.

So, you should take into account which markets are targeted by the SoC for which you posted your message.
If it is traditional embedded, one-entity provides all. You can surely choose any scheme you want.
If it is automotive and other markets where there will be separation in the firmware/OS/Hypervisor supply chain, then you should clearly attach the DT to Secure Firmware.


Cheers

FF

PS1: I see an analogy with Google project Trebble which set clear responsibilities in who can provide/modify what. Before it, it was the jungle and pushing a security fix required months of delays. Now a Google security fix can make its way to smartphones in matter of days. Constraining a little bit the Linux driver developers to what should they focus on (nice drivers and not hardware description) will just make things better. Failure to do so will just push for ACPI and its horrible complex, fragile virtual machine to push out DT from those markets...
PS2: By « nice" drivers I mean, for instance,  drivers that do not assume they are alone in the world and can do whatever they want with clocks that feed the device: they should use proper clock control such as SCMI (trouble for device assignment to a VM for instance).


Le 4 déc. 2023 à 06:32, Sumit Garg <sumit.garg@linaro.org> a écrit :

+ Linux kernel DT bindings maintainers, EBBR ML

On Thu, 30 Nov 2023 at 20:05, Tom Rini <trini@konsulko.com> wrote:

On Thu, Nov 30, 2023 at 01:02:25PM +0530, Sumit Garg wrote:
On Wed, 29 Nov 2023 at 22:06, Neil Armstrong <neil.armstrong@linaro.org> wrote:

On 29/11/2023 16:34, Caleb Connolly wrote:


On 23/11/2023 07:04, Sumit Garg wrote:
On Wed, 22 Nov 2023 at 21:34, Caleb Connolly <caleb.connolly@linaro.org> wrote:



On 22/11/2023 14:27, Tom Rini wrote:
On Wed, Nov 22, 2023 at 07:44:09PM +0530, Sumit Garg wrote:
On Wed, 22 Nov 2023 at 19:31, Tom Rini <trini@konsulko.com> wrote:

On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
Hi Caleb,

On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
[snip]
== DT loading ==

Previously, boards used the FDT blob embedded into U-Boot (via
OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
bootloader, so we can instead rely on the first-stage bootloader to
populate some useful FDT properties for us (notably the /memory node and
KASLR seed) and fetch the DTB that it provides. Combined with the memory
map changes above, this let's us entirely avoid configuring the memory
map explicitly.

Since with this change, we don't need to embed FDT blob in the u-boot
binary, so I was thinking if we really need to import DTs from Linux
for different platforms and then play a catchup game?

For now, yes.

But why? Is there any value added by larger u-boot specific DT (most
of the nodes being unused by u-boot) than what currently u-boot
supports? The more important part is to get alignment with Linux DT
bindings. If you need to have memory/reserved-memory nodes in u-boot
DT for generalization purposes then you should import those particular
nodes only.

I've been thinking about and hacking on this for the last week or so,
sorry for the delayed reply here.

The value is in preventing any of the existing bindings from regressing,

That is actually best addressed in Linux by checking the DTS against
yaml DT bindings. We don't have that testing available in u-boot and
only depend on careful reviews.

I would absolutely love for someone to make another attempt at updating
our kbuild infrastucture so that we can run the validation targets.


Given that EBBR requires [1] the platform (firmware/bootloader) and
not OS to supply the devicetree, it becomes evident that
firmware/bootloaders import DTS from Linux kernel (where it is
maintained).

But currently u-boot doesn't have a proper way to validate those DTS
against DT bindings (maintained in Linux kernel). Although there are
Devicetree schema tools available here [2], there isn't a versioned
release package of DT bindings which one should use to validate DTS
files.

@DT bindings maintainers,

Given the ease of maintenance of DT bindings within Linux kernel
source tree, I don't have a specific objection there. But can we ease
DTS testing for firmware/bootloader projects by providing a versioned
release package for DT bindings? Or if someone else has a better idea
here please feel free to chime in.

[1] https://arm-software.github.io/ebbr/#guiding-principles
[2] https://github.com/devicetree-org/dt-schema

-Sumit

--
Tom
Daniel Thompson Dec. 4, 2023, 11 a.m. UTC | #17
On Mon, Dec 04, 2023 at 11:02:57AM +0530, Sumit Garg wrote:
> + Linux kernel DT bindings maintainers, EBBR ML
>
> On Thu, 30 Nov 2023 at 20:05, Tom Rini <trini@konsulko.com> wrote:
> > On Thu, Nov 30, 2023 at 01:02:25PM +0530, Sumit Garg wrote:
> > > On Wed, 29 Nov 2023 at 22:06, Neil Armstrong <neil.armstrong@linaro.org> wrote:
> > > > > I've been thinking about and hacking on this for the last week or so,
> > > > > sorry for the delayed reply here.
> > > > >
> > > > > The value is in preventing any of the existing bindings from regressing,
> > >
> > > That is actually best addressed in Linux by checking the DTS against
> > > yaml DT bindings. We don't have that testing available in u-boot and
> > > only depend on careful reviews.
> >
> > I would absolutely love for someone to make another attempt at updating
> > our kbuild infrastucture so that we can run the validation targets.
> >
>
> Given that EBBR requires [1] the platform (firmware/bootloader) and
> not OS to supply the devicetree, it becomes evident that
> firmware/bootloaders import DTS from Linux kernel (where it is
> maintained).
>
> But currently u-boot doesn't have a proper way to validate those DTS
> against DT bindings (maintained in Linux kernel). Although there are
> Devicetree schema tools available here [2], there isn't a versioned
> release package of DT bindings which one should use to validate DTS
> files.

The kernel is regularly released in multiple forms (including git
tags and tarball). Why isn't the kernel itself sufficient to be a
versioned release of the DT bindings directory?


Daniel.
Sumit Garg Dec. 4, 2023, 1:24 p.m. UTC | #18
On Mon, 4 Dec 2023 at 16:30, Daniel Thompson <daniel.thompson@linaro.org> wrote:
>
> On Mon, Dec 04, 2023 at 11:02:57AM +0530, Sumit Garg wrote:
> > + Linux kernel DT bindings maintainers, EBBR ML
> >
> > On Thu, 30 Nov 2023 at 20:05, Tom Rini <trini@konsulko.com> wrote:
> > > On Thu, Nov 30, 2023 at 01:02:25PM +0530, Sumit Garg wrote:
> > > > On Wed, 29 Nov 2023 at 22:06, Neil Armstrong <neil.armstrong@linaro.org> wrote:
> > > > > > I've been thinking about and hacking on this for the last week or so,
> > > > > > sorry for the delayed reply here.
> > > > > >
> > > > > > The value is in preventing any of the existing bindings from regressing,
> > > >
> > > > That is actually best addressed in Linux by checking the DTS against
> > > > yaml DT bindings. We don't have that testing available in u-boot and
> > > > only depend on careful reviews.
> > >
> > > I would absolutely love for someone to make another attempt at updating
> > > our kbuild infrastucture so that we can run the validation targets.
> > >
> >
> > Given that EBBR requires [1] the platform (firmware/bootloader) and
> > not OS to supply the devicetree, it becomes evident that
> > firmware/bootloaders import DTS from Linux kernel (where it is
> > maintained).
> >
> > But currently u-boot doesn't have a proper way to validate those DTS
> > against DT bindings (maintained in Linux kernel). Although there are
> > Devicetree schema tools available here [2], there isn't a versioned
> > release package of DT bindings which one should use to validate DTS
> > files.
>
> The kernel is regularly released in multiple forms (including git
> tags and tarball). Why isn't the kernel itself sufficient to be a
> versioned release of the DT bindings directory?
>

The Linux kernel may come in various forms (upstream vs stable vs
vendor). It's difficult to decide from where the DT bindings should
come from. Should they come from upstream or should they come from the
kernel which is actually booted onto a particular device?

IOW, as of now which kernel version should u-boot pick up for DT
validation checks?

If we can have a separate release cadence for DT bindings then the
platform (firmware/bootloader) can attest the DTB against that. Later
one should be able to boot any kernel with the DTB provided by
platform.

-Sumit

>
> Daniel.
Krzysztof Kozlowski Dec. 4, 2023, 1:33 p.m. UTC | #19
On 04/12/2023 14:24, Sumit Garg wrote:
> On Mon, 4 Dec 2023 at 16:30, Daniel Thompson <daniel.thompson@linaro.org> wrote:
>>
>> On Mon, Dec 04, 2023 at 11:02:57AM +0530, Sumit Garg wrote:
>>> + Linux kernel DT bindings maintainers, EBBR ML
>>>
>>> On Thu, 30 Nov 2023 at 20:05, Tom Rini <trini@konsulko.com> wrote:
>>>> On Thu, Nov 30, 2023 at 01:02:25PM +0530, Sumit Garg wrote:
>>>>> On Wed, 29 Nov 2023 at 22:06, Neil Armstrong <neil.armstrong@linaro.org> wrote:
>>>>>>> I've been thinking about and hacking on this for the last week or so,
>>>>>>> sorry for the delayed reply here.
>>>>>>>
>>>>>>> The value is in preventing any of the existing bindings from regressing,
>>>>>
>>>>> That is actually best addressed in Linux by checking the DTS against
>>>>> yaml DT bindings. We don't have that testing available in u-boot and
>>>>> only depend on careful reviews.
>>>>
>>>> I would absolutely love for someone to make another attempt at updating
>>>> our kbuild infrastucture so that we can run the validation targets.
>>>>
>>>
>>> Given that EBBR requires [1] the platform (firmware/bootloader) and
>>> not OS to supply the devicetree, it becomes evident that
>>> firmware/bootloaders import DTS from Linux kernel (where it is
>>> maintained).
>>>
>>> But currently u-boot doesn't have a proper way to validate those DTS
>>> against DT bindings (maintained in Linux kernel). Although there are
>>> Devicetree schema tools available here [2], there isn't a versioned
>>> release package of DT bindings which one should use to validate DTS
>>> files.
>>
>> The kernel is regularly released in multiple forms (including git
>> tags and tarball). Why isn't the kernel itself sufficient to be a
>> versioned release of the DT bindings directory?
>>
> 
> The Linux kernel may come in various forms (upstream vs stable vs
> vendor). It's difficult to decide from where the DT bindings should
> come from. Should they come from upstream or should they come from the
> kernel which is actually booted onto a particular device?
> 
> IOW, as of now which kernel version should u-boot pick up for DT
> validation checks?

The same version as in case of release from separate DT bindings repo.

> 
> If we can have a separate release cadence for DT bindings then the
> platform (firmware/bootloader) can attest the DTB against that. Later
> one should be able to boot any kernel with the DTB provided by
> platform.

Separate releases of DT bindings change nothing here - you are going to
ask the same question: "which release shall I take"?

So the answer could be the same for both: take latest mainline kernel
release.

You really don't need separate repo just to know which release to take.

Best regards,
Krzysztof
ff Dec. 4, 2023, 2:38 p.m. UTC | #20
> Le 4 déc. 2023 à 12:00, Daniel Thompson <daniel.thompson@linaro.org> a écrit :
> 
> On Mon, Dec 04, 2023 at 11:02:57AM +0530, Sumit Garg wrote:
>> + Linux kernel DT bindings maintainers, EBBR ML
>> 
>>> On Thu, 30 Nov 2023 at 20:05, Tom Rini <trini@konsulko.com> wrote:
>>> On Thu, Nov 30, 2023 at 01:02:25PM +0530, Sumit Garg wrote:
>>>> On Wed, 29 Nov 2023 at 22:06, Neil Armstrong <neil.armstrong@linaro.org> wrote:
>>>>>> I've been thinking about and hacking on this for the last week or so,
>>>>>> sorry for the delayed reply here.
>>>>>> 
>>>>>> The value is in preventing any of the existing bindings from regressing,
>>>> 
>>>> That is actually best addressed in Linux by checking the DTS against
>>>> yaml DT bindings. We don't have that testing available in u-boot and
>>>> only depend on careful reviews.
>>> 
>>> I would absolutely love for someone to make another attempt at updating
>>> our kbuild infrastucture so that we can run the validation targets.
>>> 
>> 
>> Given that EBBR requires [1] the platform (firmware/bootloader) and
>> not OS to supply the devicetree, it becomes evident that
>> firmware/bootloaders import DTS from Linux kernel (where it is
>> maintained).
>> 
>> But currently u-boot doesn't have a proper way to validate those DTS
>> against DT bindings (maintained in Linux kernel). Although there are
>> Devicetree schema tools available here [2], there isn't a versioned
>> release package of DT bindings which one should use to validate DTS
>> files.
> 
> The kernel is regularly released in multiple forms (including git
> tags and tarball). Why isn't the kernel itself sufficient to be a
> versioned release of the DT bindings directory?
> 
The Linux kernel may not see all devices. For instance it could see a PCI port while the firmware sees a SERDES that is configured to match the board implementation and touting. The firmware shall be responsible to, statically or dynamically make those things available to the kernel. 
An OS distribution  (not necessarily Linux) should not embedded all possible combinations and know all derived boards. 


> 
> Daniel.
> _______________________________________________
> boot-architecture mailing list -- boot-architecture@lists.linaro.org
> To unsubscribe send an email to boot-architecture-leave@lists.linaro.org
Krzysztof Kozlowski Dec. 4, 2023, 2:45 p.m. UTC | #21
On 04/12/2023 15:38, ff wrote:
> 
> 
>> Le 4 déc. 2023 à 12:00, Daniel Thompson <daniel.thompson@linaro.org> a écrit :
>>
>> On Mon, Dec 04, 2023 at 11:02:57AM +0530, Sumit Garg wrote:
>>> + Linux kernel DT bindings maintainers, EBBR ML
>>>
>>>> On Thu, 30 Nov 2023 at 20:05, Tom Rini <trini@konsulko.com> wrote:
>>>> On Thu, Nov 30, 2023 at 01:02:25PM +0530, Sumit Garg wrote:
>>>>> On Wed, 29 Nov 2023 at 22:06, Neil Armstrong <neil.armstrong@linaro.org> wrote:
>>>>>>> I've been thinking about and hacking on this for the last week or so,
>>>>>>> sorry for the delayed reply here.
>>>>>>>
>>>>>>> The value is in preventing any of the existing bindings from regressing,
>>>>>
>>>>> That is actually best addressed in Linux by checking the DTS against
>>>>> yaml DT bindings. We don't have that testing available in u-boot and
>>>>> only depend on careful reviews.
>>>>
>>>> I would absolutely love for someone to make another attempt at updating
>>>> our kbuild infrastucture so that we can run the validation targets.
>>>>
>>>
>>> Given that EBBR requires [1] the platform (firmware/bootloader) and
>>> not OS to supply the devicetree, it becomes evident that
>>> firmware/bootloaders import DTS from Linux kernel (where it is
>>> maintained).
>>>
>>> But currently u-boot doesn't have a proper way to validate those DTS
>>> against DT bindings (maintained in Linux kernel). Although there are
>>> Devicetree schema tools available here [2], there isn't a versioned
>>> release package of DT bindings which one should use to validate DTS
>>> files.
>>
>> The kernel is regularly released in multiple forms (including git
>> tags and tarball). Why isn't the kernel itself sufficient to be a
>> versioned release of the DT bindings directory?
>>
> The Linux kernel may not see all devices. For instance it could see a PCI port while the firmware sees a SERDES that is configured to match the board implementation and touting. The firmware shall be responsible to, statically or dynamically make those things available to the kernel. 
> An OS distribution  (not necessarily Linux) should not embedded all possible combinations and know all derived boards. 

Which is nothing related to the discussion here: bindings. The bindings
*MUST* cover PCI port and serdes.

P.S. Please wrap your replies to match mailing list style / netiquette.

Best regards,
Krzysztof
ff Dec. 4, 2023, 3:01 p.m. UTC | #22
> Le 4 déc. 2023 à 14:25, Sumit Garg <sumit.garg@linaro.org> a écrit :
> 
> On Mon, 4 Dec 2023 at 16:30, Daniel Thompson <daniel.thompson@linaro.org> wrote:
>> 
>>> On Mon, Dec 04, 2023 at 11:02:57AM +0530, Sumit Garg wrote:
>>> + Linux kernel DT bindings maintainers, EBBR ML
>>> 
>>> On Thu, 30 Nov 2023 at 20:05, Tom Rini <trini@konsulko.com> wrote:
>>>> On Thu, Nov 30, 2023 at 01:02:25PM +0530, Sumit Garg wrote:
>>>>> On Wed, 29 Nov 2023 at 22:06, Neil Armstrong <neil.armstrong@linaro.org> wrote:
>>>>>>> I've been thinking about and hacking on this for the last week or so,
>>>>>>> sorry for the delayed reply here.
>>>>>>> 
>>>>>>> The value is in preventing any of the existing bindings from regressing,
>>>>> 
>>>>> That is actually best addressed in Linux by checking the DTS against
>>>>> yaml DT bindings. We don't have that testing available in u-boot and
>>>>> only depend on careful reviews.
>>>> 
>>>> I would absolutely love for someone to make another attempt at updating
>>>> our kbuild infrastucture so that we can run the validation targets.
>>>> 
>>> 
>>> Given that EBBR requires [1] the platform (firmware/bootloader) and
>>> not OS to supply the devicetree, it becomes evident that
>>> firmware/bootloaders import DTS from Linux kernel (where it is
>>> maintained).
>>> 
>>> But currently u-boot doesn't have a proper way to validate those DTS
>>> against DT bindings (maintained in Linux kernel). Although there are
>>> Devicetree schema tools available here [2], there isn't a versioned
>>> release package of DT bindings which one should use to validate DTS
>>> files.
>> 
>> The kernel is regularly released in multiple forms (including git
>> tags and tarball). Why isn't the kernel itself sufficient to be a
>> versioned release of the DT bindings directory?
>> 
> 
> The Linux kernel may come in various forms (upstream vs stable vs
> vendor). It's difficult to decide from where the DT bindings should
> come from. Should they come from upstream or should they come from the
> kernel which is actually booted onto a particular device?
> 
Looks bad from organizing forward portability standpoint .

> IOW, as of now which kernel version should u-boot pick up for DT
> validation checks?
> 
> If we can have a separate release cadence for DT bindings then the
> platform (firmware/bootloader) can attest the DTB against that. Later
> one should be able to boot any kernel with the DTB provided by
> platform.
> 
That seems a very good step!
> -Sumit
> 
>> 
>> Daniel.
> _______________________________________________
> boot-architecture mailing list -- boot-architecture@lists.linaro.org
> To unsubscribe send an email to boot-architecture-leave@lists.linaro.org
Rob Herring Dec. 4, 2023, 5:01 p.m. UTC | #23
On Sun, Dec 3, 2023 at 11:33 PM Sumit Garg <sumit.garg@linaro.org> wrote:
>
> + Linux kernel DT bindings maintainers, EBBR ML
>
> On Thu, 30 Nov 2023 at 20:05, Tom Rini <trini@konsulko.com> wrote:
> >
> > On Thu, Nov 30, 2023 at 01:02:25PM +0530, Sumit Garg wrote:
> > > On Wed, 29 Nov 2023 at 22:06, Neil Armstrong <neil.armstrong@linaro.org> wrote:
> > > >
> > > > On 29/11/2023 16:34, Caleb Connolly wrote:
> > > > >
> > > > >
> > > > > On 23/11/2023 07:04, Sumit Garg wrote:
> > > > >> On Wed, 22 Nov 2023 at 21:34, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> > > > >>>
> > > > >>>
> > > > >>>
> > > > >>> On 22/11/2023 14:27, Tom Rini wrote:
> > > > >>>> On Wed, Nov 22, 2023 at 07:44:09PM +0530, Sumit Garg wrote:
> > > > >>>>> On Wed, 22 Nov 2023 at 19:31, Tom Rini <trini@konsulko.com> wrote:
> > > > >>>>>>
> > > > >>>>>> On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
> > > > >>>>>>> Hi Caleb,
> > > > >>>>>>>
> > > > >>>>>>> On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> > > > >>>>>> [snip]
> > > > >>>>>>>> == DT loading ==
> > > > >>>>>>>>
> > > > >>>>>>>> Previously, boards used the FDT blob embedded into U-Boot (via
> > > > >>>>>>>> OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> > > > >>>>>>>> bootloader, so we can instead rely on the first-stage bootloader to
> > > > >>>>>>>> populate some useful FDT properties for us (notably the /memory node and
> > > > >>>>>>>> KASLR seed) and fetch the DTB that it provides. Combined with the memory
> > > > >>>>>>>> map changes above, this let's us entirely avoid configuring the memory
> > > > >>>>>>>> map explicitly.
> > > > >>>>>>>
> > > > >>>>>>> Since with this change, we don't need to embed FDT blob in the u-boot
> > > > >>>>>>> binary, so I was thinking if we really need to import DTs from Linux
> > > > >>>>>>> for different platforms and then play a catchup game?
> > > > >>>
> > > > >>> For now, yes.
> > > > >>
> > > > >> But why? Is there any value added by larger u-boot specific DT (most
> > > > >> of the nodes being unused by u-boot) than what currently u-boot
> > > > >> supports? The more important part is to get alignment with Linux DT
> > > > >> bindings. If you need to have memory/reserved-memory nodes in u-boot
> > > > >> DT for generalization purposes then you should import those particular
> > > > >> nodes only.
> > > > >
> > > > > I've been thinking about and hacking on this for the last week or so,
> > > > > sorry for the delayed reply here.
> > > > >
> > > > > The value is in preventing any of the existing bindings from regressing,
> > >
> > > That is actually best addressed in Linux by checking the DTS against
> > > yaml DT bindings. We don't have that testing available in u-boot and
> > > only depend on careful reviews.
> >
> > I would absolutely love for someone to make another attempt at updating
> > our kbuild infrastucture so that we can run the validation targets.
> >
>
> Given that EBBR requires [1] the platform (firmware/bootloader) and
> not OS to supply the devicetree, it becomes evident that
> firmware/bootloaders import DTS from Linux kernel (where it is
> maintained).
>
> But currently u-boot doesn't have a proper way to validate those DTS
> against DT bindings (maintained in Linux kernel). Although there are
> Devicetree schema tools available here [2], there isn't a versioned
> release package of DT bindings which one should use to validate DTS
> files.
>
> @DT bindings maintainers,
>
> Given the ease of maintenance of DT bindings within Linux kernel
> source tree, I don't have a specific objection there. But can we ease
> DTS testing for firmware/bootloader projects by providing a versioned
> release package for DT bindings? Or if someone else has a better idea
> here please feel free to chime in.

This doesn't work for you?:

https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/

Note that I would like to revamp this repo to use some modern CI job,
use git_filter_repo python module rather than git-filter-branch, and
move to devicetree.org GH, but if projects aren't relying on this
repo, I'm not motivated to do that work.

Rob
Simon Glass Dec. 5, 2023, 12:52 a.m. UTC | #24
Hi Sumit,

On Tue, 21 Nov 2023 at 23:21, Sumit Garg <sumit.garg@linaro.org> wrote:
>
> Hi Caleb,
>
> On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> >
> > Historically, Qualcomm boards in U-Boot have all had their own
> > board/qualcomm/xyz directory, their own CONFIG_TARGET_XYZ option, their
> > own hardcoded sysmap-xyz.c file, and their own U-Boot specific
> > devicetree with little/no compatibility with upstream DT.
> >
> > This series makes a few final prepatory changes, and then replaces
> > almost all of the board specific code with generic alternatives. The end
> > result is that all Qualcomm boards both current and future (with the
> > exception of the db410c and db820c) can be supported by a single U-Boot
> > binary by just providing the correct DT. New boards can be added without
> > introducing any addition mach/ or board/ code or config options.
> >
> > Due to the nature of this change, the patch ("mach-snapdragon:
> > generalise board support") has become pretty big, I tried a few
> > different ways to represent this in git history, but the other methods
> > (e.g. adding a stub "generic" target and removing it again) were more
> > confusing and made for much messier git history. The current patch is
> > mostly atomic, but requires regenerating the config.
> >
> > The QCS404 EVB board had some code to enable the USB VBUS regulator,
> > this is dropped in favour of a adding a new vbus-supply property to the
> > dwc3-generic driver. This will also be used by the dragonboard845c in a
> > future patch. This handles the common case of a board requiring some
> > regulator be enabled for USB host mode.
> >
>
> Thanks for your work. It is a good step towards a generalized u-boot
> on Qcom platforms. Although I would like to give it an in-depth
> review, I have a common discussion point about DT, see below.
>
> > A more detailed description of the changes is below.
> >
> > == Memory map ==
> >
> > The memory map was historically hardcoded into U-Boot, this meant that
> > U-Boot had to be built for a specific variant of a device. This is
> > changed to instead read the memory map from the DT /memory node.
> >
> > Additionally, most boards mapped addresss 0x0 as valid, as a result if a
> > null pointer access happens then it will cause a bus stall (and board
> > hang). This is fixed so that null pointer accesses will now correctly
> > throw an exception.
> >
> > == DT loading ==
> >
> > Previously, boards used the FDT blob embedded into U-Boot (via
> > OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> > bootloader, so we can instead rely on the first-stage bootloader to
> > populate some useful FDT properties for us (notably the /memory node and
> > KASLR seed) and fetch the DTB that it provides. Combined with the memory
> > map changes above, this let's us entirely avoid configuring the memory
> > map explicitly.
>
> Since with this change, we don't need to embed FDT blob in the u-boot
> binary, so I was thinking if we really need to import DTs from Linux
> for different platforms and then play a catchup game?
>
> IMO, the build command would look like following if we import
> pre-built FDT blob from Linux:
>
> - Build u-boot::
>
>        $ export CROSS_COMPILE=<aarch64 toolchain prefix>
>        $ make qcom_defconfig
>        $ make
>
> - gzip u-boot::
>
>        gzip u-boot-nodtb.bin
>
> - Append dtb to gzipped u-boot::
>
>         cat u-boot-nodtb.bin.gz
> <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
> u-boot-nodtb.bin.gz-dtb

What is this?? Who or what uses a gzipped image with a single DT attached?

>
> This would avoid the maintenance burden to keep DT in sync with that
> of Linux. And since DT bindings in Linux are backwards compatible, we
> can say u-boot should work with DTB picked up from any Linux kernel
> stable release.

That is not the current situation, unfortunately.

U-Boot is moving to using Binman to package the firmware. There needs
to be a description of the firmware image for each U-Boot boot. To my
way of thinking, rpi is a degenerate form, not something to be copied,
due to the closed-source nature of the firmware and its inability to
be changed. We do have (in the works) a way to pass a DT using a
standard firmware handoff. Perhaps that can be adopted by these
closed-source projects?

BTW I am very pleased to see this series and I hope that Qualcomm (via
Linaro) can continue to improve its U-Boot support.

[..]

Regards,
Simon
Sumit Garg Dec. 5, 2023, 7:13 a.m. UTC | #25
On Mon, 4 Dec 2023 at 22:31, Rob Herring <robh+dt@kernel.org> wrote:
>
> On Sun, Dec 3, 2023 at 11:33 PM Sumit Garg <sumit.garg@linaro.org> wrote:
> >
> > + Linux kernel DT bindings maintainers, EBBR ML
> >
> > On Thu, 30 Nov 2023 at 20:05, Tom Rini <trini@konsulko.com> wrote:
> > >
> > > On Thu, Nov 30, 2023 at 01:02:25PM +0530, Sumit Garg wrote:
> > > > On Wed, 29 Nov 2023 at 22:06, Neil Armstrong <neil.armstrong@linaro.org> wrote:
> > > > >
> > > > > On 29/11/2023 16:34, Caleb Connolly wrote:
> > > > > >
> > > > > >
> > > > > > On 23/11/2023 07:04, Sumit Garg wrote:
> > > > > >> On Wed, 22 Nov 2023 at 21:34, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> > > > > >>>
> > > > > >>>
> > > > > >>>
> > > > > >>> On 22/11/2023 14:27, Tom Rini wrote:
> > > > > >>>> On Wed, Nov 22, 2023 at 07:44:09PM +0530, Sumit Garg wrote:
> > > > > >>>>> On Wed, 22 Nov 2023 at 19:31, Tom Rini <trini@konsulko.com> wrote:
> > > > > >>>>>>
> > > > > >>>>>> On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
> > > > > >>>>>>> Hi Caleb,
> > > > > >>>>>>>
> > > > > >>>>>>> On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> > > > > >>>>>> [snip]
> > > > > >>>>>>>> == DT loading ==
> > > > > >>>>>>>>
> > > > > >>>>>>>> Previously, boards used the FDT blob embedded into U-Boot (via
> > > > > >>>>>>>> OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> > > > > >>>>>>>> bootloader, so we can instead rely on the first-stage bootloader to
> > > > > >>>>>>>> populate some useful FDT properties for us (notably the /memory node and
> > > > > >>>>>>>> KASLR seed) and fetch the DTB that it provides. Combined with the memory
> > > > > >>>>>>>> map changes above, this let's us entirely avoid configuring the memory
> > > > > >>>>>>>> map explicitly.
> > > > > >>>>>>>
> > > > > >>>>>>> Since with this change, we don't need to embed FDT blob in the u-boot
> > > > > >>>>>>> binary, so I was thinking if we really need to import DTs from Linux
> > > > > >>>>>>> for different platforms and then play a catchup game?
> > > > > >>>
> > > > > >>> For now, yes.
> > > > > >>
> > > > > >> But why? Is there any value added by larger u-boot specific DT (most
> > > > > >> of the nodes being unused by u-boot) than what currently u-boot
> > > > > >> supports? The more important part is to get alignment with Linux DT
> > > > > >> bindings. If you need to have memory/reserved-memory nodes in u-boot
> > > > > >> DT for generalization purposes then you should import those particular
> > > > > >> nodes only.
> > > > > >
> > > > > > I've been thinking about and hacking on this for the last week or so,
> > > > > > sorry for the delayed reply here.
> > > > > >
> > > > > > The value is in preventing any of the existing bindings from regressing,
> > > >
> > > > That is actually best addressed in Linux by checking the DTS against
> > > > yaml DT bindings. We don't have that testing available in u-boot and
> > > > only depend on careful reviews.
> > >
> > > I would absolutely love for someone to make another attempt at updating
> > > our kbuild infrastucture so that we can run the validation targets.
> > >
> >
> > Given that EBBR requires [1] the platform (firmware/bootloader) and
> > not OS to supply the devicetree, it becomes evident that
> > firmware/bootloaders import DTS from Linux kernel (where it is
> > maintained).
> >
> > But currently u-boot doesn't have a proper way to validate those DTS
> > against DT bindings (maintained in Linux kernel). Although there are
> > Devicetree schema tools available here [2], there isn't a versioned
> > release package of DT bindings which one should use to validate DTS
> > files.
> >
> > @DT bindings maintainers,
> >
> > Given the ease of maintenance of DT bindings within Linux kernel
> > source tree, I don't have a specific objection there. But can we ease
> > DTS testing for firmware/bootloader projects by providing a versioned
> > release package for DT bindings? Or if someone else has a better idea
> > here please feel free to chime in.
>
> This doesn't work for you?:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/

Thanks, this is certainly a good step which I wasn't aware of. Further
simplification can be done to decouple devicetree source files from DT
bindings. AFAIK, DT bindings should be forwards and backwards
compatible. So if you pick up DTS or DTB from any project tree
(upstream kernel or stable kernel or u-boot) then DT schema validation
would ensure that corresponding DTS or DTB doesn't regress the DT
bindings.

Ideally, it should be more user/CI friendly if DT bindings can be
easily installed alongside devicetree schema tools [1].

[1] https://github.com/devicetree-org/dt-schema

>
> Note that I would like to revamp this repo to use some modern CI job,
> use git_filter_repo python module rather than git-filter-branch, and
> move to devicetree.org GH, but if projects aren't relying on this
> repo, I'm not motivated to do that work.

As Tom has shown interest in this, I think we should be able to add
the DT validation checks during normal u-boot builds hidden behind a
Makefile option (dtbs_check).

-Sumit

>
> Rob
Krzysztof Kozlowski Dec. 5, 2023, 7:28 a.m. UTC | #26
On 05/12/2023 08:13, Sumit Garg wrote:
>>> @DT bindings maintainers,
>>>
>>> Given the ease of maintenance of DT bindings within Linux kernel
>>> source tree, I don't have a specific objection there. But can we ease
>>> DTS testing for firmware/bootloader projects by providing a versioned
>>> release package for DT bindings? Or if someone else has a better idea
>>> here please feel free to chime in.
>>
>> This doesn't work for you?:
>>
>> https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/
> 
> Thanks, this is certainly a good step which I wasn't aware of. Further
> simplification can be done to decouple devicetree source files from DT
> bindings. 

Why?

> AFAIK, DT bindings should be forwards and backwards
> compatible. 

The same with DTS.

> So if you pick up DTS or DTB from any project tree
> (upstream kernel or stable kernel or u-boot) then DT schema validation
> would ensure that corresponding DTS or DTB doesn't regress the DT
> bindings.

And why is this argument to decouple DTS from bindings?

> 
> Ideally, it should be more user/CI friendly if DT bindings can be
> easily installed alongside devicetree schema tools [1].
> 
> [1] https://github.com/devicetree-org/dt-schema

Does it mean you will work on this?

Best regards,
Krzysztof
Sumit Garg Dec. 5, 2023, 7:44 a.m. UTC | #27
Hi Simon,

On Tue, 5 Dec 2023 at 06:22, Simon Glass <sjg@chromium.org> wrote:
>
> Hi Sumit,
>
> On Tue, 21 Nov 2023 at 23:21, Sumit Garg <sumit.garg@linaro.org> wrote:
> >
> > Hi Caleb,
> >
> > On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> > >
> > > Historically, Qualcomm boards in U-Boot have all had their own
> > > board/qualcomm/xyz directory, their own CONFIG_TARGET_XYZ option, their
> > > own hardcoded sysmap-xyz.c file, and their own U-Boot specific
> > > devicetree with little/no compatibility with upstream DT.
> > >
> > > This series makes a few final prepatory changes, and then replaces
> > > almost all of the board specific code with generic alternatives. The end
> > > result is that all Qualcomm boards both current and future (with the
> > > exception of the db410c and db820c) can be supported by a single U-Boot
> > > binary by just providing the correct DT. New boards can be added without
> > > introducing any addition mach/ or board/ code or config options.
> > >
> > > Due to the nature of this change, the patch ("mach-snapdragon:
> > > generalise board support") has become pretty big, I tried a few
> > > different ways to represent this in git history, but the other methods
> > > (e.g. adding a stub "generic" target and removing it again) were more
> > > confusing and made for much messier git history. The current patch is
> > > mostly atomic, but requires regenerating the config.
> > >
> > > The QCS404 EVB board had some code to enable the USB VBUS regulator,
> > > this is dropped in favour of a adding a new vbus-supply property to the
> > > dwc3-generic driver. This will also be used by the dragonboard845c in a
> > > future patch. This handles the common case of a board requiring some
> > > regulator be enabled for USB host mode.
> > >
> >
> > Thanks for your work. It is a good step towards a generalized u-boot
> > on Qcom platforms. Although I would like to give it an in-depth
> > review, I have a common discussion point about DT, see below.
> >
> > > A more detailed description of the changes is below.
> > >
> > > == Memory map ==
> > >
> > > The memory map was historically hardcoded into U-Boot, this meant that
> > > U-Boot had to be built for a specific variant of a device. This is
> > > changed to instead read the memory map from the DT /memory node.
> > >
> > > Additionally, most boards mapped addresss 0x0 as valid, as a result if a
> > > null pointer access happens then it will cause a bus stall (and board
> > > hang). This is fixed so that null pointer accesses will now correctly
> > > throw an exception.
> > >
> > > == DT loading ==
> > >
> > > Previously, boards used the FDT blob embedded into U-Boot (via
> > > OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> > > bootloader, so we can instead rely on the first-stage bootloader to
> > > populate some useful FDT properties for us (notably the /memory node and
> > > KASLR seed) and fetch the DTB that it provides. Combined with the memory
> > > map changes above, this let's us entirely avoid configuring the memory
> > > map explicitly.
> >
> > Since with this change, we don't need to embed FDT blob in the u-boot
> > binary, so I was thinking if we really need to import DTs from Linux
> > for different platforms and then play a catchup game?
> >
> > IMO, the build command would look like following if we import
> > pre-built FDT blob from Linux:
> >
> > - Build u-boot::
> >
> >        $ export CROSS_COMPILE=<aarch64 toolchain prefix>
> >        $ make qcom_defconfig
> >        $ make
> >
> > - gzip u-boot::
> >
> >        gzip u-boot-nodtb.bin
> >
> > - Append dtb to gzipped u-boot::
> >
> >         cat u-boot-nodtb.bin.gz
> > <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
> > u-boot-nodtb.bin.gz-dtb
>
> What is this?? Who or what uses a gzipped image with a single DT attached?

The gzipped image is loaded by Qcom proprietary bootloaders (ABL or
LK). It is the usual way Linux is booted on these platforms. U-boot is
being brought into this chain to leverage standardized EFI boot
processes.

>
> >
> > This would avoid the maintenance burden to keep DT in sync with that
> > of Linux. And since DT bindings in Linux are backwards compatible, we
> > can say u-boot should work with DTB picked up from any Linux kernel
> > stable release.
>
> That is not the current situation, unfortunately.
>

Hopefully with efforts from Caleb and team we can reach that point soon.

> U-Boot is moving to using Binman to package the firmware. There needs
> to be a description of the firmware image for each U-Boot boot. To my
> way of thinking, rpi is a degenerate form, not something to be copied,
> due to the closed-source nature of the firmware and its inability to
> be changed. We do have (in the works) a way to pass a DT using a
> standard firmware handoff. Perhaps that can be adopted by these
> closed-source projects?

Why should we really need firmware handoff if the DT can be passed in
one of the u-boot boot arguments? Linux kernel does support this
method to retrieve DT as well.

>
> BTW I am very pleased to see this series and I hope that Qualcomm (via
> Linaro) can continue to improve its U-Boot support.

It's good to know, thanks.

-Sumit

>
> [..]
>
> Regards,
> Simon
Sumit Garg Dec. 5, 2023, 9:45 a.m. UTC | #28
+ U-boot custodians list

On Tue, 5 Dec 2023 at 12:58, Krzysztof Kozlowski
<krzysztof.kozlowski@linaro.org> wrote:
>
> On 05/12/2023 08:13, Sumit Garg wrote:
> >>> @DT bindings maintainers,
> >>>
> >>> Given the ease of maintenance of DT bindings within Linux kernel
> >>> source tree, I don't have a specific objection there. But can we ease
> >>> DTS testing for firmware/bootloader projects by providing a versioned
> >>> release package for DT bindings? Or if someone else has a better idea
> >>> here please feel free to chime in.
> >>
> >> This doesn't work for you?:
> >>
> >> https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/
> >
> > Thanks, this is certainly a good step which I wasn't aware of. Further
> > simplification can be done to decouple devicetree source files from DT
> > bindings.
>
> Why?

I suppose you are already aware that Linux DTS files are a subset of
what could be supported by devicetree schemas. There can be
firmware/bootloader specific properties (one example being [1]) which
Linux kernel can simply ignore. Will you be willing to add all of
those DT properties to Linux DTS files and maintain them?

However, DT bindings are something which should be common, the
hardware description of a device should be universal. IMO, splitting
DT bindings alone would ease the compliance process for u-boot drivers
in quite similar manner to Linux drivers.

[1] https://github.com/devicetree-org/dt-schema/blob/main/dtschema/schemas/bootph.yaml

>
> > AFAIK, DT bindings should be forwards and backwards
> > compatible.
>
> The same with DTS.
>
> > So if you pick up DTS or DTB from any project tree
> > (upstream kernel or stable kernel or u-boot) then DT schema validation
> > would ensure that corresponding DTS or DTB doesn't regress the DT
> > bindings.
>
> And why is this argument to decouple DTS from bindings?
>

See above.

> >
> > Ideally, it should be more user/CI friendly if DT bindings can be
> > easily installed alongside devicetree schema tools [1].
> >
> > [1] https://github.com/devicetree-org/dt-schema
>
> Does it mean you will work on this?

I am happy to collaboratively work with DT bindings maintainers and
the u-boot community once we can reach a consensus on the above.
Basically the main motive here is to validate DTS files present in the
u-boot tree and be able to reliably pass them to whichever Linux
kernel version you are trying to boot. IOW, make Linux distros to
reliably boot with devicetree supplied by u-boot.

-Sumit

>
> Best regards,
> Krzysztof
>
Krzysztof Kozlowski Dec. 5, 2023, 10:09 a.m. UTC | #29
On 05/12/2023 10:45, Sumit Garg wrote:
> + U-boot custodians list
> 
> On Tue, 5 Dec 2023 at 12:58, Krzysztof Kozlowski
> <krzysztof.kozlowski@linaro.org> wrote:
>>
>> On 05/12/2023 08:13, Sumit Garg wrote:
>>>>> @DT bindings maintainers,
>>>>>
>>>>> Given the ease of maintenance of DT bindings within Linux kernel
>>>>> source tree, I don't have a specific objection there. But can we ease
>>>>> DTS testing for firmware/bootloader projects by providing a versioned
>>>>> release package for DT bindings? Or if someone else has a better idea
>>>>> here please feel free to chime in.
>>>>
>>>> This doesn't work for you?:
>>>>
>>>> https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/
>>>
>>> Thanks, this is certainly a good step which I wasn't aware of. Further
>>> simplification can be done to decouple devicetree source files from DT
>>> bindings.
>>
>> Why?
> 
> I suppose you are already aware that Linux DTS files are a subset of
> what could be supported by devicetree schemas. There can be
> firmware/bootloader specific properties (one example being [1]) which
> Linux kernel can simply ignore. Will you be willing to add all of
> those DT properties to Linux DTS files and maintain them?

We already added them and we already maintain them. DTS describes the
hardware, not the OS-subset of the hardware.

> 
> However, DT bindings are something which should be common, the
> hardware description of a device should be universal. IMO, splitting

Both DT bindings and DTS should be common. I don't see the difference.

> DT bindings alone would ease the compliance process for u-boot drivers
> in quite similar manner to Linux drivers.
> 
> [1] https://github.com/devicetree-org/dt-schema/blob/main/dtschema/schemas/bootph.yaml
> 
>>
>>> AFAIK, DT bindings should be forwards and backwards
>>> compatible.
>>
>> The same with DTS.
>>
>>> So if you pick up DTS or DTB from any project tree
>>> (upstream kernel or stable kernel or u-boot) then DT schema validation
>>> would ensure that corresponding DTS or DTB doesn't regress the DT
>>> bindings.
>>
>> And why is this argument to decouple DTS from bindings?
>>
> 
> See above.

It's not really explained there. You can pick up DTS from any project
and validate it against the repo Rob mentioned or against kernel.
Whether DTS is in that repo or not, does not matter for your validation.

> 
>>>
>>> Ideally, it should be more user/CI friendly if DT bindings can be
>>> easily installed alongside devicetree schema tools [1].
>>>
>>> [1] https://github.com/devicetree-org/dt-schema
>>
>> Does it mean you will work on this?
> 
> I am happy to collaboratively work with DT bindings maintainers and
> the u-boot community once we can reach a consensus on the above.
> Basically the main motive here is to validate DTS files present in the
> u-boot tree and be able to reliably pass them to whichever Linux
> kernel version you are trying to boot. IOW, make Linux distros to
> reliably boot with devicetree supplied by u-boot.

So the answer is "no" on the proposal you mentioned before. Sure, maybe
someone will pick it up.

Best regards,
Krzysztof
ff Dec. 5, 2023, 10:36 a.m. UTC | #30
> Le 5 déc. 2023 à 10:46, Sumit Garg <sumit.garg@linaro.org> a écrit :
> 
> + U-boot custodians list
> 
>> On Tue, 5 Dec 2023 at 12:58, Krzysztof Kozlowski
>> <krzysztof.kozlowski@linaro.org> wrote:
>> 
>> On 05/12/2023 08:13, Sumit Garg wrote:
>>>>> @DT bindings maintainers,
>>>>> 
>>>>> Given the ease of maintenance of DT bindings within Linux kernel
>>>>> source tree, I don't have a specific objection there. But can we ease
>>>>> DTS testing for firmware/bootloader projects by providing a versioned
>>>>> release package for DT bindings? Or if someone else has a better idea
>>>>> here please feel free to chime in.
>>>> 
>>>> This doesn't work for you?:
>>>> 
>>>> https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/
>>> 
>>> Thanks, this is certainly a good step which I wasn't aware of. Further
>>> simplification can be done to decouple devicetree source files from DT
>>> bindings.
>> 
>> Why?
> 
> I suppose you are already aware that Linux DTS files are a subset of
> what could be supported by devicetree schemas. There can be
> firmware/bootloader specific properties (one example being [1]) which
> Linux kernel can simply ignore. Will you be willing to add all of
> those DT properties to Linux DTS files and maintain them?
> 
A pre-existing effort to solve the same problem as [1] is System Device Tree, discussed in the context of Linaro supported OpenAMP project. It is not just about cherry picking devices that have bindings in Linux but also information about clock and power domains or devices that are not seen by Linux.
It is obvious that the resulting bindings should be maintained upstream in the DT repo regardless of the communities adopted solution.

> However, DT bindings are something which should be common, the
> hardware description of a device should be universal. IMO, splitting
> DT bindings alone would ease the compliance process for u-boot drivers
> in quite similar manner to Linux drivers.
> 
I remember a discussion with ST on that topic related to Framebuffer. U-Boot can need a very different representation of the same device to use it while Linux need an in-depth description of all shaders and « stuff » (another reason why [1] is addressing only a portion of the problem)
So even if there is a single frame buffer binding, there should be two (at least) conformance tests.

> [1] https://github.com/devicetree-org/dt-schema/blob/main/dtschema/schemas/bootph.yaml
> 
>> 
>>> AFAIK, DT bindings should be forwards and backwards
>>> compatible.
>> 
>> The same with DTS.
>> 
>>> So if you pick up DTS or DTB from any project tree
>>> (upstream kernel or stable kernel or u-boot) then DT schema validation
>>> would ensure that corresponding DTS or DTB doesn't regress the DT
>>> bindings.
>> 
>> And why is this argument to decouple DTS from bindings?
>> 
> 
> See above.
> 
>>> 
>>> Ideally, it should be more user/CI friendly if DT bindings can be
>>> easily installed alongside devicetree schema tools [1].
>>> 
>>> [1] https://github.com/devicetree-org/dt-schema
>> 
>> Does it mean you will work on this?
> 
> I am happy to collaboratively work with DT bindings maintainers and
> the u-boot community once we can reach a consensus on the above.
> Basically the main motive here is to validate DTS files present in the
> u-boot tree and be able to reliably pass them to whichever Linux
> kernel version you are trying to boot. IOW, make Linux distros to
> reliably boot with devicetree supplied by u-boot.
> 
> -Sumit
> 
>> 
>> Best regards,
>> Krzysztof
>> 
> _______________________________________________
> boot-architecture mailing list -- boot-architecture@lists.linaro.org
> To unsubscribe send an email to boot-architecture-leave@lists.linaro.org
Caleb Connolly Dec. 5, 2023, 10:55 a.m. UTC | #31
On 05/12/2023 07:44, Sumit Garg wrote:
> Hi Simon,
> 
> On Tue, 5 Dec 2023 at 06:22, Simon Glass <sjg@chromium.org> wrote:
>>
>> Hi Sumit,
>>
>> On Tue, 21 Nov 2023 at 23:21, Sumit Garg <sumit.garg@linaro.org> wrote:
>>>
>>> Hi Caleb,
>>>
>>> On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
[...]
>>>> == DT loading ==
>>>>
>>>> Previously, boards used the FDT blob embedded into U-Boot (via
>>>> OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
>>>> bootloader, so we can instead rely on the first-stage bootloader to
>>>> populate some useful FDT properties for us (notably the /memory node and
>>>> KASLR seed) and fetch the DTB that it provides. Combined with the memory
>>>> map changes above, this let's us entirely avoid configuring the memory
>>>> map explicitly.
>>>
>>> Since with this change, we don't need to embed FDT blob in the u-boot
>>> binary, so I was thinking if we really need to import DTs from Linux
>>> for different platforms and then play a catchup game?
>>>
>>> IMO, the build command would look like following if we import
>>> pre-built FDT blob from Linux:
>>>
>>> - Build u-boot::
>>>
>>>        $ export CROSS_COMPILE=<aarch64 toolchain prefix>
>>>        $ make qcom_defconfig
>>>        $ make
>>>
>>> - gzip u-boot::
>>>
>>>        gzip u-boot-nodtb.bin
>>>
>>> - Append dtb to gzipped u-boot::
>>>
>>>         cat u-boot-nodtb.bin.gz
>>> <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
>>> u-boot-nodtb.bin.gz-dtb
>>
>> What is this?? Who or what uses a gzipped image with a single DT attached?
> 
> The gzipped image is loaded by Qcom proprietary bootloaders (ABL or
> LK). It is the usual way Linux is booted on these platforms. U-boot is
> being brought into this chain to leverage standardized EFI boot
> processes.

Yes, just to clarify, this is the state that _all_ non-WoA Qualcomm
boards/devices are in right now (with the exception of db410c), with
production devices we can't modify the bootloader without vendors
releasing their signing keys.

For devices that haven't been locked with vendor keys ("Secureboot off"
in Qualcomm terminology, note that this has nothing to do with UEFI
secureboot) we can work towards replacing the bootloader entirely with
U-Boot, I have done a PoC of this on SDM845. In that case, we have to
embed the DTB into U-Boot.
> 
>>
>>>
>>> This would avoid the maintenance burden to keep DT in sync with that
>>> of Linux. And since DT bindings in Linux are backwards compatible, we
>>> can say u-boot should work with DTB picked up from any Linux kernel
>>> stable release.
>>
>> That is not the current situation, unfortunately.
>>
> 
> Hopefully with efforts from Caleb and team we can reach that point soon.
> 
>> U-Boot is moving to using Binman to package the firmware. There needs
>> to be a description of the firmware image for each U-Boot boot. To my
>> way of thinking, rpi is a degenerate form, not something to be copied,
>> due to the closed-source nature of the firmware and its inability to
>> be changed. We do have (in the works) a way to pass a DT using a
>> standard firmware handoff. Perhaps that can be adopted by these
>> closed-source projects?
> 
> Why should we really need firmware handoff if the DT can be passed in
> one of the u-boot boot arguments? Linux kernel does support this
> method to retrieve DT as well.

Unfortunately the chances of Qualcomm releasing bootloader updates to
adopt a standard for chainloading U-Boot on their wholely deprecated
platforms of 5/6/7 years ago, and then having OEMs/ODMs (who have no
reason to care, and may not even be around anymore) apply these patches
to their own hacked up fork of the bootloader and ship it to end-users
is honestly even less likely than OEMs releasing the signing keys for
devices they don't support anymore.
> 
>>
>> BTW I am very pleased to see this series and I hope that Qualcomm (via
>> Linaro) can continue to improve its U-Boot support.
> 
> It's good to know, thanks.
> 
> -Sumit
> 
>>
>> [..]
>>
>> Regards,
>> Simon
Daniel Thompson Dec. 5, 2023, 12:48 p.m. UTC | #32
On Tue, Dec 05, 2023 at 10:36:28AM +0000, ff wrote:
> > Le 5 déc. 2023 à 10:46, Sumit Garg <sumit.garg@linaro.org> a écrit :
> >
> > + U-boot custodians list
> >
> >> On Tue, 5 Dec 2023 at 12:58, Krzysztof Kozlowski
> >> <krzysztof.kozlowski@linaro.org> wrote:
> >>
> >> On 05/12/2023 08:13, Sumit Garg wrote:
> >>>>> @DT bindings maintainers,
> >>>>>
> >>>>> Given the ease of maintenance of DT bindings within Linux kernel
> >>>>> source tree, I don't have a specific objection there. But can we
> >>>>> ease DTS testing for firmware/bootloader projects by providing a
> >>>>> versioned release package for DT bindings? Or if someone else
> >>>>> has a better idea here please feel free to chime in.
> >>>>
> >>>> This doesn't work for you?:
> >>>>
> >>>> https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/
> >>>
> >>> Thanks, this is certainly a good step which I wasn't aware of.
> >>> Further simplification can be done to decouple devicetree source
> >>> files from DT bindings.
> >>
> >> Why?
> >
> > I suppose you are already aware that Linux DTS files are a subset of
> > what could be supported by devicetree schemas. There can be
> > firmware/bootloader specific properties (one example being [1])
> > which Linux kernel can simply ignore. Will you be willing to add all
> > of those DT properties to Linux DTS files and maintain them?
>
> A pre-existing effort to solve the same problem as [1] is System
> Device Tree, discussed in the context of Linaro supported OpenAMP
> project. It is not just about cherry picking devices that have
> bindings in Linux but also information about clock and power domains
> or devices that are not seen by Linux.  It is obvious that the
> resulting bindings should be maintained upstream in the DT repo
> regardless of the communities adopted solution.

This seems to be artificially linking two topics: system DT and DT
schema validation within u-boot. They are somewhat related but one of
not a precondition of the other.


> > However, DT bindings are something which should be common, the
> > hardware description of a device should be universal. IMO, splitting
> > DT bindings alone would ease the compliance process for u-boot
> > drivers in quite similar manner to Linux drivers.
>
> I remember a discussion with ST on that topic related to Framebuffer.
> U-Boot can need a very different representation of the same device to
> use it while Linux need an in-depth description of all shaders and «
> stuff » (another reason why [1] is addressing only a portion of the
> problem) So even if there is a single frame buffer binding, there
> should be two (at least) conformance tests.

I don't follow this, for two reasons.

1. DT describes the hardware, not how it is driven. Having a relationship
   between u-boot and linux DTs with different representation would
   imply that the hardware changes between u-boot and the kernel.

2. Even if we were to accept that there must be two device tree instances
   (beyond transient workarounds for missing features), why would there
   need to be two conformance tests rather than one conformance test run
   on the two DTs?


Daniel.
ff Dec. 5, 2023, 3:29 p.m. UTC | #33
Le 5 déc. 2023 à 13:48, Daniel Thompson <daniel.thompson@linaro.org> a écrit :

On Tue, Dec 05, 2023 at 10:36:28AM +0000, ff wrote:
Le 5 déc. 2023 à 10:46, Sumit Garg <sumit.garg@linaro.org> a écrit :

+ U-boot custodians list

On Tue, 5 Dec 2023 at 12:58, Krzysztof Kozlowski
<krzysztof.kozlowski@linaro.org> wrote:

On 05/12/2023 08:13, Sumit Garg wrote:
@DT bindings maintainers,

Given the ease of maintenance of DT bindings within Linux kernel
source tree, I don't have a specific objection there. But can we
ease DTS testing for firmware/bootloader projects by providing a
versioned release package for DT bindings? Or if someone else
has a better idea here please feel free to chime in.

This doesn't work for you?:

https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/

Thanks, this is certainly a good step which I wasn't aware of.
Further simplification can be done to decouple devicetree source
files from DT bindings.

Why?

I suppose you are already aware that Linux DTS files are a subset of
what could be supported by devicetree schemas. There can be
firmware/bootloader specific properties (one example being [1])
which Linux kernel can simply ignore. Will you be willing to add all
of those DT properties to Linux DTS files and maintain them?

A pre-existing effort to solve the same problem as [1] is System
Device Tree, discussed in the context of Linaro supported OpenAMP
project. It is not just about cherry picking devices that have
bindings in Linux but also information about clock and power domains
or devices that are not seen by Linux.  It is obvious that the
resulting bindings should be maintained upstream in the DT repo
regardless of the communities adopted solution.

This seems to be artificially linking two topics: system DT and DT
schema validation within u-boot. They are somewhat related but one of
not a precondition of the other.

Agreed. I am mentioning this because it relates to binding
and conformance testing:   DT consumers such as OP-TEE , OSes and
hypervisors should be considered equally as U-Boot and Linux.
Hence it makes sense that all those are decoupled from any
consumer and live « standalone ».


However, DT bindings are something which should be common, the
hardware description of a device should be universal. IMO, splitting
DT bindings alone would ease the compliance process for u-boot
drivers in quite similar manner to Linux drivers.

I remember a discussion with ST on that topic related to Framebuffer.
U-Boot can need a very different representation of the same device to
use it while Linux need an in-depth description of all shaders and «
stuff » (another reason why [1] is addressing only a portion of the
problem) So even if there is a single frame buffer binding, there
should be two (at least) conformance tests.

I don't follow this, for two reasons.

1. DT describes the hardware, not how it is driven. Having a relationship
  between u-boot and linux DTs with different representation would
  imply that the hardware changes between u-boot and the kernel.

2. Even if we were to accept that there must be two device tree instances
  (beyond transient workarounds for missing features), why would there
  need to be two conformance tests rather than one conformance test run
  on the two DTs?

Let’s say U-Boot only cares and use legacy SGVA frame buffer, while Linux
 community only cares and use the full fledged GPU. You end-up with two
communities maintaining the conformance test part it cares/need.
Isn’t splitting the tests responsibilities a way to get people feel
more « empowered » and thus more active?


Daniel.
Simon Glass Dec. 6, 2023, 3:53 a.m. UTC | #34
Hi Caleb,

On Tue, 5 Dec 2023 at 03:55, Caleb Connolly <caleb.connolly@linaro.org> wrote:
>
>
>
> On 05/12/2023 07:44, Sumit Garg wrote:
> > Hi Simon,
> >
> > On Tue, 5 Dec 2023 at 06:22, Simon Glass <sjg@chromium.org> wrote:
> >>
> >> Hi Sumit,
> >>
> >> On Tue, 21 Nov 2023 at 23:21, Sumit Garg <sumit.garg@linaro.org> wrote:
> >>>
> >>> Hi Caleb,
> >>>
> >>> On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> [...]
> >>>> == DT loading ==
> >>>>
> >>>> Previously, boards used the FDT blob embedded into U-Boot (via
> >>>> OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> >>>> bootloader, so we can instead rely on the first-stage bootloader to
> >>>> populate some useful FDT properties for us (notably the /memory node and
> >>>> KASLR seed) and fetch the DTB that it provides. Combined with the memory
> >>>> map changes above, this let's us entirely avoid configuring the memory
> >>>> map explicitly.
> >>>
> >>> Since with this change, we don't need to embed FDT blob in the u-boot
> >>> binary, so I was thinking if we really need to import DTs from Linux
> >>> for different platforms and then play a catchup game?
> >>>
> >>> IMO, the build command would look like following if we import
> >>> pre-built FDT blob from Linux:
> >>>
> >>> - Build u-boot::
> >>>
> >>>        $ export CROSS_COMPILE=<aarch64 toolchain prefix>
> >>>        $ make qcom_defconfig
> >>>        $ make
> >>>
> >>> - gzip u-boot::
> >>>
> >>>        gzip u-boot-nodtb.bin
> >>>
> >>> - Append dtb to gzipped u-boot::
> >>>
> >>>         cat u-boot-nodtb.bin.gz
> >>> <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
> >>> u-boot-nodtb.bin.gz-dtb
> >>
> >> What is this?? Who or what uses a gzipped image with a single DT attached?
> >
> > The gzipped image is loaded by Qcom proprietary bootloaders (ABL or
> > LK). It is the usual way Linux is booted on these platforms. U-boot is
> > being brought into this chain to leverage standardized EFI boot
> > processes.
>
> Yes, just to clarify, this is the state that _all_ non-WoA Qualcomm
> boards/devices are in right now (with the exception of db410c), with
> production devices we can't modify the bootloader without vendors
> releasing their signing keys.

Or perhaps a shim? It would be good if vendors could provide an unlock
mechanism eventually, but I understand it is challenging.

>
> For devices that haven't been locked with vendor keys ("Secureboot off"
> in Qualcomm terminology, note that this has nothing to do with UEFI
> secureboot) we can work towards replacing the bootloader entirely with
> U-Boot, I have done a PoC of this on SDM845. In that case, we have to
> embed the DTB into U-Boot.

OK, I see, that sounds good. My concern is that the open source
approach is preserved and made the easiest option. Decisions which
accommodate private binaries while making open source harder should
generally be rejected.

> >
> >>
> >>>
> >>> This would avoid the maintenance burden to keep DT in sync with that
> >>> of Linux. And since DT bindings in Linux are backwards compatible, we
> >>> can say u-boot should work with DTB picked up from any Linux kernel
> >>> stable release.
> >>
> >> That is not the current situation, unfortunately.
> >>
> >
> > Hopefully with efforts from Caleb and team we can reach that point soon.
> >
> >> U-Boot is moving to using Binman to package the firmware. There needs
> >> to be a description of the firmware image for each U-Boot boot. To my
> >> way of thinking, rpi is a degenerate form, not something to be copied,
> >> due to the closed-source nature of the firmware and its inability to
> >> be changed. We do have (in the works) a way to pass a DT using a
> >> standard firmware handoff. Perhaps that can be adopted by these
> >> closed-source projects?
> >
> > Why should we really need firmware handoff if the DT can be passed in
> > one of the u-boot boot arguments? Linux kernel does support this
> > method to retrieve DT as well.
>
> Unfortunately the chances of Qualcomm releasing bootloader updates to
> adopt a standard for chainloading U-Boot on their wholely deprecated
> platforms of 5/6/7 years ago, and then having OEMs/ODMs (who have no
> reason to care, and may not even be around anymore) apply these patches
> to their own hacked up fork of the bootloader and ship it to end-users
> is honestly even less likely than OEMs releasing the signing keys for
> devices they don't support anymore.

Yes, I understand it is challenging. Somehow it works better with
Linux, despite hacked up kernels, etc. so perhaps Linaro can help
here?

Regards,
Simon
Simon Glass Dec. 6, 2023, 3:53 a.m. UTC | #35
Hi Sumit,

On Tue, 5 Dec 2023 at 00:44, Sumit Garg <sumit.garg@linaro.org> wrote:
>
> Hi Simon,
>
> On Tue, 5 Dec 2023 at 06:22, Simon Glass <sjg@chromium.org> wrote:
> >
> > Hi Sumit,
> >
> > On Tue, 21 Nov 2023 at 23:21, Sumit Garg <sumit.garg@linaro.org> wrote:
> > >
> > > Hi Caleb,
> > >
> > > On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> > > >
> > > > Historically, Qualcomm boards in U-Boot have all had their own
> > > > board/qualcomm/xyz directory, their own CONFIG_TARGET_XYZ option, their
> > > > own hardcoded sysmap-xyz.c file, and their own U-Boot specific
> > > > devicetree with little/no compatibility with upstream DT.
> > > >
> > > > This series makes a few final prepatory changes, and then replaces
> > > > almost all of the board specific code with generic alternatives. The end
> > > > result is that all Qualcomm boards both current and future (with the
> > > > exception of the db410c and db820c) can be supported by a single U-Boot
> > > > binary by just providing the correct DT. New boards can be added without
> > > > introducing any addition mach/ or board/ code or config options.
> > > >
> > > > Due to the nature of this change, the patch ("mach-snapdragon:
> > > > generalise board support") has become pretty big, I tried a few
> > > > different ways to represent this in git history, but the other methods
> > > > (e.g. adding a stub "generic" target and removing it again) were more
> > > > confusing and made for much messier git history. The current patch is
> > > > mostly atomic, but requires regenerating the config.
> > > >
> > > > The QCS404 EVB board had some code to enable the USB VBUS regulator,
> > > > this is dropped in favour of a adding a new vbus-supply property to the
> > > > dwc3-generic driver. This will also be used by the dragonboard845c in a
> > > > future patch. This handles the common case of a board requiring some
> > > > regulator be enabled for USB host mode.
> > > >
> > >
> > > Thanks for your work. It is a good step towards a generalized u-boot
> > > on Qcom platforms. Although I would like to give it an in-depth
> > > review, I have a common discussion point about DT, see below.
> > >
> > > > A more detailed description of the changes is below.
> > > >
> > > > == Memory map ==
> > > >
> > > > The memory map was historically hardcoded into U-Boot, this meant that
> > > > U-Boot had to be built for a specific variant of a device. This is
> > > > changed to instead read the memory map from the DT /memory node.
> > > >
> > > > Additionally, most boards mapped addresss 0x0 as valid, as a result if a
> > > > null pointer access happens then it will cause a bus stall (and board
> > > > hang). This is fixed so that null pointer accesses will now correctly
> > > > throw an exception.
> > > >
> > > > == DT loading ==
> > > >
> > > > Previously, boards used the FDT blob embedded into U-Boot (via
> > > > OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> > > > bootloader, so we can instead rely on the first-stage bootloader to
> > > > populate some useful FDT properties for us (notably the /memory node and
> > > > KASLR seed) and fetch the DTB that it provides. Combined with the memory
> > > > map changes above, this let's us entirely avoid configuring the memory
> > > > map explicitly.
> > >
> > > Since with this change, we don't need to embed FDT blob in the u-boot
> > > binary, so I was thinking if we really need to import DTs from Linux
> > > for different platforms and then play a catchup game?
> > >
> > > IMO, the build command would look like following if we import
> > > pre-built FDT blob from Linux:
> > >
> > > - Build u-boot::
> > >
> > >        $ export CROSS_COMPILE=<aarch64 toolchain prefix>
> > >        $ make qcom_defconfig
> > >        $ make
> > >
> > > - gzip u-boot::
> > >
> > >        gzip u-boot-nodtb.bin
> > >
> > > - Append dtb to gzipped u-boot::
> > >
> > >         cat u-boot-nodtb.bin.gz
> > > <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
> > > u-boot-nodtb.bin.gz-dtb
> >
> > What is this?? Who or what uses a gzipped image with a single DT attached?
>
> The gzipped image is loaded by Qcom proprietary bootloaders (ABL or
> LK). It is the usual way Linux is booted on these platforms. U-boot is
> being brought into this chain to leverage standardized EFI boot
> processes.

LK is Little kernel, I believe. That is an open source project, right?
But I suppose it is BSD licensed so in fact the code is not available?
Is ABL obsolete?

I'm not sure that it matters in any case. We should be able to
standardise the U-Boot part and let the private projects implement
that, for a seamless boot.

What you have written above is not a good way for U-Boot to be
packaged or invoked.

>
> >
> > >
> > > This would avoid the maintenance burden to keep DT in sync with that
> > > of Linux. And since DT bindings in Linux are backwards compatible, we
> > > can say u-boot should work with DTB picked up from any Linux kernel
> > > stable release.
> >
> > That is not the current situation, unfortunately.
> >
>
> Hopefully with efforts from Caleb and team we can reach that point soon.
>
> > U-Boot is moving to using Binman to package the firmware. There needs
> > to be a description of the firmware image for each U-Boot boot. To my
> > way of thinking, rpi is a degenerate form, not something to be copied,
> > due to the closed-source nature of the firmware and its inability to
> > be changed. We do have (in the works) a way to pass a DT using a
> > standard firmware handoff. Perhaps that can be adopted by these
> > closed-source projects?
>
> Why should we really need firmware handoff if the DT can be passed in
> one of the u-boot boot arguments? Linux kernel does support this
> method to retrieve DT as well.

Here I am not referring to Linux, but to the firmware stages. We need
firmware handoff so all these nutty binaries around the place can
communicate with the open source (firmware) projects in a sensible
fashion.

For Linux we can pass the DT using existing mechanisms.

>
> >
> > BTW I am very pleased to see this series and I hope that Qualcomm (via
> > Linaro) can continue to improve its U-Boot support.
>
> It's good to know, thanks.

It is the hiding of the DT that I object to. I would like to see these
files in U-Boot, so we can build U-Boot for the platform and boot it
with its local DT. Otherwise many of the innovations U-Boot provides,
such as firmware packaging, become impossible. My feeling on this
might change if the bindings process were easier.

Regards,
Simon
Sumit Garg Dec. 6, 2023, 5:05 a.m. UTC | #36
On Tue, 5 Dec 2023 at 15:39, Krzysztof Kozlowski
<krzysztof.kozlowski@linaro.org> wrote:
>
> On 05/12/2023 10:45, Sumit Garg wrote:
> > + U-boot custodians list
> >
> > On Tue, 5 Dec 2023 at 12:58, Krzysztof Kozlowski
> > <krzysztof.kozlowski@linaro.org> wrote:
> >>
> >> On 05/12/2023 08:13, Sumit Garg wrote:
> >>>>> @DT bindings maintainers,
> >>>>>
> >>>>> Given the ease of maintenance of DT bindings within Linux kernel
> >>>>> source tree, I don't have a specific objection there. But can we ease
> >>>>> DTS testing for firmware/bootloader projects by providing a versioned
> >>>>> release package for DT bindings? Or if someone else has a better idea
> >>>>> here please feel free to chime in.
> >>>>
> >>>> This doesn't work for you?:
> >>>>
> >>>> https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/
> >>>
> >>> Thanks, this is certainly a good step which I wasn't aware of. Further
> >>> simplification can be done to decouple devicetree source files from DT
> >>> bindings.
> >>
> >> Why?
> >
> > I suppose you are already aware that Linux DTS files are a subset of
> > what could be supported by devicetree schemas. There can be
> > firmware/bootloader specific properties (one example being [1]) which
> > Linux kernel can simply ignore. Will you be willing to add all of
> > those DT properties to Linux DTS files and maintain them?
>
> We already added them and we already maintain them. DTS describes the
> hardware, not the OS-subset of the hardware.

Let look at some numbers if your statement is justified or not for the
example I gave:

u-boot$ git grep -nr bootph-* arch/arm* | wc -l
4079

linux$ git grep -nr bootph-* arch/arm* | wc -l
267

It looks like there is always going to be a catch up game regarding DT
properties which either Linux kernel or u-boot or any other
firmware/bootloader project don't care about.

>
> >
> > However, DT bindings are something which should be common, the
> > hardware description of a device should be universal. IMO, splitting
>
> Both DT bindings and DTS should be common. I don't see the difference.

If we really care about DTS to be common then the contribution model
has to change where there is a single repo hosting DT bindings and
DTS. All other projects whether it is Linux kernel or u-boot or any
other OS/firmware/bootloader are just consuming DTS files from that
single repo. I suppose this is something that Linux DT maintainers
have objected to in the past for ease of maintenance. I am not sure if
you folks are willing to change that stance.

>
> > DT bindings alone would ease the compliance process for u-boot drivers
> > in quite similar manner to Linux drivers.
> >
> > [1] https://github.com/devicetree-org/dt-schema/blob/main/dtschema/schemas/bootph.yaml
> >
> >>
> >>> AFAIK, DT bindings should be forwards and backwards
> >>> compatible.
> >>
> >> The same with DTS.
> >>
> >>> So if you pick up DTS or DTB from any project tree
> >>> (upstream kernel or stable kernel or u-boot) then DT schema validation
> >>> would ensure that corresponding DTS or DTB doesn't regress the DT
> >>> bindings.
> >>
> >> And why is this argument to decouple DTS from bindings?
> >>
> >
> > See above.
>
> It's not really explained there. You can pick up DTS from any project
> and validate it against the repo Rob mentioned or against kernel.
> Whether DTS is in that repo or not, does not matter for your validation.
>

It is similar to your earlier argument to use the whole mainline
kernel repo. What is the real benefit to keep DT bindings and DTS
together when every project has to maintain a copy of DTS in its own
source tree? It will be just a source of confusion for developers:
- One DTS coming from devicetree-rebasing repo
- One DTS coming from local project

-Sumit
Sumit Garg Dec. 6, 2023, 7:05 a.m. UTC | #37
On Wed, 6 Dec 2023 at 09:24, Simon Glass <sjg@chromium.org> wrote:
>
> Hi Sumit,
>
> On Tue, 5 Dec 2023 at 00:44, Sumit Garg <sumit.garg@linaro.org> wrote:
> >
> > Hi Simon,
> >
> > On Tue, 5 Dec 2023 at 06:22, Simon Glass <sjg@chromium.org> wrote:
> > >
> > > Hi Sumit,
> > >
> > > On Tue, 21 Nov 2023 at 23:21, Sumit Garg <sumit.garg@linaro.org> wrote:
> > > >
> > > > Hi Caleb,
> > > >
> > > > On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> > > > >
> > > > > Historically, Qualcomm boards in U-Boot have all had their own
> > > > > board/qualcomm/xyz directory, their own CONFIG_TARGET_XYZ option, their
> > > > > own hardcoded sysmap-xyz.c file, and their own U-Boot specific
> > > > > devicetree with little/no compatibility with upstream DT.
> > > > >
> > > > > This series makes a few final prepatory changes, and then replaces
> > > > > almost all of the board specific code with generic alternatives. The end
> > > > > result is that all Qualcomm boards both current and future (with the
> > > > > exception of the db410c and db820c) can be supported by a single U-Boot
> > > > > binary by just providing the correct DT. New boards can be added without
> > > > > introducing any addition mach/ or board/ code or config options.
> > > > >
> > > > > Due to the nature of this change, the patch ("mach-snapdragon:
> > > > > generalise board support") has become pretty big, I tried a few
> > > > > different ways to represent this in git history, but the other methods
> > > > > (e.g. adding a stub "generic" target and removing it again) were more
> > > > > confusing and made for much messier git history. The current patch is
> > > > > mostly atomic, but requires regenerating the config.
> > > > >
> > > > > The QCS404 EVB board had some code to enable the USB VBUS regulator,
> > > > > this is dropped in favour of a adding a new vbus-supply property to the
> > > > > dwc3-generic driver. This will also be used by the dragonboard845c in a
> > > > > future patch. This handles the common case of a board requiring some
> > > > > regulator be enabled for USB host mode.
> > > > >
> > > >
> > > > Thanks for your work. It is a good step towards a generalized u-boot
> > > > on Qcom platforms. Although I would like to give it an in-depth
> > > > review, I have a common discussion point about DT, see below.
> > > >
> > > > > A more detailed description of the changes is below.
> > > > >
> > > > > == Memory map ==
> > > > >
> > > > > The memory map was historically hardcoded into U-Boot, this meant that
> > > > > U-Boot had to be built for a specific variant of a device. This is
> > > > > changed to instead read the memory map from the DT /memory node.
> > > > >
> > > > > Additionally, most boards mapped addresss 0x0 as valid, as a result if a
> > > > > null pointer access happens then it will cause a bus stall (and board
> > > > > hang). This is fixed so that null pointer accesses will now correctly
> > > > > throw an exception.
> > > > >
> > > > > == DT loading ==
> > > > >
> > > > > Previously, boards used the FDT blob embedded into U-Boot (via
> > > > > OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> > > > > bootloader, so we can instead rely on the first-stage bootloader to
> > > > > populate some useful FDT properties for us (notably the /memory node and
> > > > > KASLR seed) and fetch the DTB that it provides. Combined with the memory
> > > > > map changes above, this let's us entirely avoid configuring the memory
> > > > > map explicitly.
> > > >
> > > > Since with this change, we don't need to embed FDT blob in the u-boot
> > > > binary, so I was thinking if we really need to import DTs from Linux
> > > > for different platforms and then play a catchup game?
> > > >
> > > > IMO, the build command would look like following if we import
> > > > pre-built FDT blob from Linux:
> > > >
> > > > - Build u-boot::
> > > >
> > > >        $ export CROSS_COMPILE=<aarch64 toolchain prefix>
> > > >        $ make qcom_defconfig
> > > >        $ make
> > > >
> > > > - gzip u-boot::
> > > >
> > > >        gzip u-boot-nodtb.bin
> > > >
> > > > - Append dtb to gzipped u-boot::
> > > >
> > > >         cat u-boot-nodtb.bin.gz
> > > > <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
> > > > u-boot-nodtb.bin.gz-dtb
> > >
> > > What is this?? Who or what uses a gzipped image with a single DT attached?
> >
> > The gzipped image is loaded by Qcom proprietary bootloaders (ABL or
> > LK). It is the usual way Linux is booted on these platforms. U-boot is
> > being brought into this chain to leverage standardized EFI boot
> > processes.
>
> LK is Little kernel, I believe. That is an open source project, right?
> But I suppose it is BSD licensed so in fact the code is not available?
> Is ABL obsolete?

ABL: Android Boot Loader. I suppose it is somewhat derived from edk2
ABL EFI application. It's not obsolete but rather the one widely used
proprietary bootloader on recent SoCs (qcs404, sdm845 and all later
SoCs). Infact LK is somewhat obsolete which supports db410c, db820c
etc.

>
> I'm not sure that it matters in any case. We should be able to
> standardise the U-Boot part and let the private projects implement
> that, for a seamless boot.
>
> What you have written above is not a good way for U-Boot to be
> packaged or invoked.

I agree but we have to live with that given the challenges Caleb
mentioned in the other thread.

>
> >
> > >
> > > >
> > > > This would avoid the maintenance burden to keep DT in sync with that
> > > > of Linux. And since DT bindings in Linux are backwards compatible, we
> > > > can say u-boot should work with DTB picked up from any Linux kernel
> > > > stable release.
> > >
> > > That is not the current situation, unfortunately.
> > >
> >
> > Hopefully with efforts from Caleb and team we can reach that point soon.
> >
> > > U-Boot is moving to using Binman to package the firmware. There needs
> > > to be a description of the firmware image for each U-Boot boot. To my
> > > way of thinking, rpi is a degenerate form, not something to be copied,
> > > due to the closed-source nature of the firmware and its inability to
> > > be changed. We do have (in the works) a way to pass a DT using a
> > > standard firmware handoff. Perhaps that can be adopted by these
> > > closed-source projects?
> >
> > Why should we really need firmware handoff if the DT can be passed in
> > one of the u-boot boot arguments? Linux kernel does support this
> > method to retrieve DT as well.
>
> Here I am not referring to Linux, but to the firmware stages. We need
> firmware handoff so all these nutty binaries around the place can
> communicate with the open source (firmware) projects in a sensible
> fashion.

AFAIK, firmware handoff is an alternative way alongside DT to
communicate among firmware images if each firmware image can't support
a DT parser. Qcom proprietary bootloaders support DT parser and hence
they can communicate information (memory/reserved memory nodes etc)
via DT. Don't you consider DT as a sensible way to pass information to
u-boot?

>
> For Linux we can pass the DT using existing mechanisms.
>
> >
> > >
> > > BTW I am very pleased to see this series and I hope that Qualcomm (via
> > > Linaro) can continue to improve its U-Boot support.
> >
> > It's good to know, thanks.
>
> It is the hiding of the DT that I object to. I would like to see these
> files in U-Boot, so we can build U-Boot for the platform and boot it
> with its local DT. Otherwise many of the innovations U-Boot provides,
> such as firmware packaging, become impossible. My feeling on this
> might change if the bindings process were easier.

I agree with your current perspective about DT bindings. As you can
see from my conversations with DT bindings maintainers, it is
difficult to maintain local u-boot DT copy unless you can easily
validate them.

-Sumit

>
> Regards,
> Simon
Ilias Apalodimas Dec. 6, 2023, 10:31 a.m. UTC | #38
Hi Caleb,

Late to the party, but I'll respond to as much as I can

On Tue, 21 Nov 2023 at 19:09, Caleb Connolly <caleb.connolly@linaro.org> wrote:
>
> Historically, Qualcomm boards in U-Boot have all had their own
> board/qualcomm/xyz directory, their own CONFIG_TARGET_XYZ option, their
> own hardcoded sysmap-xyz.c file, and their own U-Boot specific
> devicetree with little/no compatibility with upstream DT.
>
> This series makes a few final prepatory changes, and then replaces
> almost all of the board specific code with generic alternatives. The end
> result is that all Qualcomm boards both current and future (with the
> exception of the db410c and db820c) can be supported by a single U-Boot
> binary by just providing the correct DT. New boards can be added without
> introducing any addition mach/ or board/ code or config options.
>
> Due to the nature of this change, the patch ("mach-snapdragon:
> generalise board support") has become pretty big, I tried a few
> different ways to represent this in git history, but the other methods
> (e.g. adding a stub "generic" target and removing it again) were more
> confusing and made for much messier git history. The current patch is
> mostly atomic, but requires regenerating the config.
>
> The QCS404 EVB board had some code to enable the USB VBUS regulator,
> this is dropped in favour of a adding a new vbus-supply property to the
> dwc3-generic driver. This will also be used by the dragonboard845c in a
> future patch. This handles the common case of a board requiring some
> regulator be enabled for USB host mode.
>
> A more detailed description of the changes is below.
>
> == Memory map ==
>
> The memory map was historically hardcoded into U-Boot, this meant that
> U-Boot had to be built for a specific variant of a device. This is
> changed to instead read the memory map from the DT /memory node.
>
> Additionally, most boards mapped addresss 0x0 as valid, as a result if a
> null pointer access happens then it will cause a bus stall (and board
> hang). This is fixed so that null pointer accesses will now correctly
> throw an exception.
>
> == DT loading ==
>
> Previously, boards used the FDT blob embedded into U-Boot (via
> OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> bootloader, so we can instead rely on the first-stage bootloader to
> populate some useful FDT properties for us (notably the /memory node and
> KASLR seed)

Note that the kaslr-seed is not so useful when booting with EFI.  The
kernel's EFI-stub ignores that and instead tries to randomize the
physical placement of the kernel if it finds an EFI_RNG protocol.

>  and fetch the DTB that it provides. Combined with the memory
> map changes above, this let's us entirely avoid configuring the memory
> map explicitly.

[...]

Cheers
/Ilias
Ilias Apalodimas Dec. 6, 2023, 10:44 a.m. UTC | #39
Hi Tom,

On Wed, 22 Nov 2023 at 16:28, Tom Rini <trini@konsulko.com> wrote:
>
> On Wed, Nov 22, 2023 at 07:44:09PM +0530, Sumit Garg wrote:
> > On Wed, 22 Nov 2023 at 19:31, Tom Rini <trini@konsulko.com> wrote:
> > >
> > > On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
> > > > Hi Caleb,
> > > >
> > > > On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> > > [snip]
> > > > > == DT loading ==
> > > > >
> > > > > Previously, boards used the FDT blob embedded into U-Boot (via
> > > > > OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> > > > > bootloader, so we can instead rely on the first-stage bootloader to
> > > > > populate some useful FDT properties for us (notably the /memory node and
> > > > > KASLR seed) and fetch the DTB that it provides. Combined with the memory
> > > > > map changes above, this let's us entirely avoid configuring the memory
> > > > > map explicitly.
> > > >
> > > > Since with this change, we don't need to embed FDT blob in the u-boot
> > > > binary, so I was thinking if we really need to import DTs from Linux
> > > > for different platforms and then play a catchup game?
> > > >
> > > > IMO, the build command would look like following if we import
> > > > pre-built FDT blob from Linux:
> > > >
> > > > - Build u-boot::
> > > >
> > > >        $ export CROSS_COMPILE=<aarch64 toolchain prefix>
> > > >        $ make qcom_defconfig
> > > >        $ make
> > > >
> > > > - gzip u-boot::
> > > >
> > > >        gzip u-boot-nodtb.bin
> > > >
> > > > - Append dtb to gzipped u-boot::
> > > >
> > > >         cat u-boot-nodtb.bin.gz
> > > > <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
> > > > u-boot-nodtb.bin.gz-dtb
> > > >
> > > > This would avoid the maintenance burden to keep DT in sync with that
> > > > of Linux. And since DT bindings in Linux are backwards compatible, we
> > > > can say u-boot should work with DTB picked up from any Linux kernel
> > > > stable release.
> > >
> > > I guess one question I have is, are we being passed the device tree
> > > (since we're acting like the Linux Kernel)
> >
> > Yeah that is the case here, see patch #1 in this series regarding how
> > FDT address is being retrieved from previous stage bootloader (ABL on
> > sdm845 and qcs404 SoCs).
>
> That's what I thought.
>
> > > or knowing that we have the
> > > dtb attached to the end of us and making use of the old kernel appended
> > > dtb option? We're fine in for example the rpi_arm64 case of just being
> > > given a device tree from the previous stage and not needing one in-tree.
> >
> > That's good to know and we can replicate that for Qcom platforms which
> > are chainloaded and don't need an embedded DT.
>
> So yes, moving these towards the direction of rpi_arm64 and specifically
> using imply OF_HAS_PRIOR_STAGE or select OF_HAS_PRIOR_STAGE (force that
> the dtb must be provided to us) sounds like the right direction to take
> these platforms.
>

IMHO that option isn't that useful.  Grepping for OF_HAS_PRIOR_STAGE
shows that we use it to print where the DT came from unless I am
missing something...
On top of that having implies in the Kconfig to control those prints
makes little sense to me and it's a half-baked solution anyway,
because may boards don't fill this properly.  This thing was cleaned
up in 2e8d2f88439d, 2ea63271e522f, and d6f8ab30a2af46 but then got
reintroduced in 275b4832f6bf91 without anyone acking or reviewing. I
am fine with Caleb suggests here, but I think we can do way better.

Instead of having that imply we can get rid of it and only have
OF_BOARD(and perhaps rename it). So a general cleanup I have in mind
is

CONFIG_OF_SEPARATE -> rename it to CONFIG_OF_APPEND because it is
actually appended at the end of the binary.
CONFIG_OF_EMBED -> Leave it as is, it's there for debugging mostly.
CONFIG_OF_BOARD perhaps rename it to something more useful, but the
semantics are 'The DT comes from an *external* source. A bloblist,
some EEPROM location, CPU registers etc'
CONFIG_OF_HAS_PRIOR_STAGE -> Get rid of it again. gd already has
gd->fdt_src, just add a FDTSRC_UNKNOWN as default and delegate the
responsibility of filling this properly at fdtdec_setup(). The boards
that use OF_BOARD can fill this in properly, instead of relying on
Kconfig imply options and we can even be more explicit on where the DT
came from.

I can send an RFC if anyone thinks this is a cleaner approach

Thanks
/Ilias



> --
> Tom
Mark Kettenis Dec. 6, 2023, 11 a.m. UTC | #40
> From: Ilias Apalodimas <ilias.apalodimas@linaro.org>
> Date: Wed, 6 Dec 2023 12:31:15 +0200
> 
> Hi Caleb,
> 
> Late to the party, but I'll respond to as much as I can
> 
> On Tue, 21 Nov 2023 at 19:09, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> >
> > Historically, Qualcomm boards in U-Boot have all had their own
> > board/qualcomm/xyz directory, their own CONFIG_TARGET_XYZ option, their
> > own hardcoded sysmap-xyz.c file, and their own U-Boot specific
> > devicetree with little/no compatibility with upstream DT.
> >
> > This series makes a few final prepatory changes, and then replaces
> > almost all of the board specific code with generic alternatives. The end
> > result is that all Qualcomm boards both current and future (with the
> > exception of the db410c and db820c) can be supported by a single U-Boot
> > binary by just providing the correct DT. New boards can be added without
> > introducing any addition mach/ or board/ code or config options.
> >
> > Due to the nature of this change, the patch ("mach-snapdragon:
> > generalise board support") has become pretty big, I tried a few
> > different ways to represent this in git history, but the other methods
> > (e.g. adding a stub "generic" target and removing it again) were more
> > confusing and made for much messier git history. The current patch is
> > mostly atomic, but requires regenerating the config.
> >
> > The QCS404 EVB board had some code to enable the USB VBUS regulator,
> > this is dropped in favour of a adding a new vbus-supply property to the
> > dwc3-generic driver. This will also be used by the dragonboard845c in a
> > future patch. This handles the common case of a board requiring some
> > regulator be enabled for USB host mode.
> >
> > A more detailed description of the changes is below.
> >
> > == Memory map ==
> >
> > The memory map was historically hardcoded into U-Boot, this meant that
> > U-Boot had to be built for a specific variant of a device. This is
> > changed to instead read the memory map from the DT /memory node.
> >
> > Additionally, most boards mapped addresss 0x0 as valid, as a result if a
> > null pointer access happens then it will cause a bus stall (and board
> > hang). This is fixed so that null pointer accesses will now correctly
> > throw an exception.
> >
> > == DT loading ==
> >
> > Previously, boards used the FDT blob embedded into U-Boot (via
> > OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> > bootloader, so we can instead rely on the first-stage bootloader to
> > populate some useful FDT properties for us (notably the /memory node and
> > KASLR seed)
> 
> Note that the kaslr-seed is not so useful when booting with EFI.  The
> kernel's EFI-stub ignores that and instead tries to randomize the
> physical placement of the kernel if it finds an EFI_RNG protocol.

OpenBSD will use it though.  And other OSes might as well.

> >  and fetch the DTB that it provides. Combined with the memory
> > map changes above, this let's us entirely avoid configuring the memory
> > map explicitly.
Ilias Apalodimas Dec. 6, 2023, 11:38 a.m. UTC | #41
Hi Mark,

On Wed, 6 Dec 2023 at 13:00, Mark Kettenis <mark.kettenis@xs4all.nl> wrote:
>
> > From: Ilias Apalodimas <ilias.apalodimas@linaro.org>
> > Date: Wed, 6 Dec 2023 12:31:15 +0200
> >
> > Hi Caleb,
> >
> > Late to the party, but I'll respond to as much as I can
> >
> > On Tue, 21 Nov 2023 at 19:09, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> > >
> > > Historically, Qualcomm boards in U-Boot have all had their own
> > > board/qualcomm/xyz directory, their own CONFIG_TARGET_XYZ option, their
> > > own hardcoded sysmap-xyz.c file, and their own U-Boot specific
> > > devicetree with little/no compatibility with upstream DT.
> > >
> > > This series makes a few final prepatory changes, and then replaces
> > > almost all of the board specific code with generic alternatives. The end
> > > result is that all Qualcomm boards both current and future (with the
> > > exception of the db410c and db820c) can be supported by a single U-Boot
> > > binary by just providing the correct DT. New boards can be added without
> > > introducing any addition mach/ or board/ code or config options.
> > >
> > > Due to the nature of this change, the patch ("mach-snapdragon:
> > > generalise board support") has become pretty big, I tried a few
> > > different ways to represent this in git history, but the other methods
> > > (e.g. adding a stub "generic" target and removing it again) were more
> > > confusing and made for much messier git history. The current patch is
> > > mostly atomic, but requires regenerating the config.
> > >
> > > The QCS404 EVB board had some code to enable the USB VBUS regulator,
> > > this is dropped in favour of a adding a new vbus-supply property to the
> > > dwc3-generic driver. This will also be used by the dragonboard845c in a
> > > future patch. This handles the common case of a board requiring some
> > > regulator be enabled for USB host mode.
> > >
> > > A more detailed description of the changes is below.
> > >
> > > == Memory map ==
> > >
> > > The memory map was historically hardcoded into U-Boot, this meant that
> > > U-Boot had to be built for a specific variant of a device. This is
> > > changed to instead read the memory map from the DT /memory node.
> > >
> > > Additionally, most boards mapped addresss 0x0 as valid, as a result if a
> > > null pointer access happens then it will cause a bus stall (and board
> > > hang). This is fixed so that null pointer accesses will now correctly
> > > throw an exception.
> > >
> > > == DT loading ==
> > >
> > > Previously, boards used the FDT blob embedded into U-Boot (via
> > > OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> > > bootloader, so we can instead rely on the first-stage bootloader to
> > > populate some useful FDT properties for us (notably the /memory node and
> > > KASLR seed)
> >
> > Note that the kaslr-seed is not so useful when booting with EFI.  The
> > kernel's EFI-stub ignores that and instead tries to randomize the
> > physical placement of the kernel if it finds an EFI_RNG protocol.
>
> OpenBSD will use it though.  And other OSes might as well.

Yea, I remember that, but efi_try_purge_kaslr_seed() purges it anyway
if there's an EFI_RNG protocol installed.
U-Boot also has other ways of injecting it. Perhaps we could keep it
and combine rng-seeds in the future I guess.

Thanks
/Ilias
>
> > >  and fetch the DTB that it provides. Combined with the memory
> > > map changes above, this let's us entirely avoid configuring the memory
> > > map explicitly.
Caleb Connolly Dec. 6, 2023, 11:50 a.m. UTC | #42
On 06/12/2023 10:44, Ilias Apalodimas wrote:
> Hi Tom,
> 
> On Wed, 22 Nov 2023 at 16:28, Tom Rini <trini@konsulko.com> wrote:
>>
>> On Wed, Nov 22, 2023 at 07:44:09PM +0530, Sumit Garg wrote:
>>> On Wed, 22 Nov 2023 at 19:31, Tom Rini <trini@konsulko.com> wrote:
>>>>
>>>> On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
>>>>> Hi Caleb,
>>>>>
>>>>> On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
>>>> [snip]
>>>>>> == DT loading ==
>>>>>>
>>>>>> Previously, boards used the FDT blob embedded into U-Boot (via
>>>>>> OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
>>>>>> bootloader, so we can instead rely on the first-stage bootloader to
>>>>>> populate some useful FDT properties for us (notably the /memory node and
>>>>>> KASLR seed) and fetch the DTB that it provides. Combined with the memory
>>>>>> map changes above, this let's us entirely avoid configuring the memory
>>>>>> map explicitly.
>>>>>
>>>>> Since with this change, we don't need to embed FDT blob in the u-boot
>>>>> binary, so I was thinking if we really need to import DTs from Linux
>>>>> for different platforms and then play a catchup game?
>>>>>
>>>>> IMO, the build command would look like following if we import
>>>>> pre-built FDT blob from Linux:
>>>>>
>>>>> - Build u-boot::
>>>>>
>>>>>        $ export CROSS_COMPILE=<aarch64 toolchain prefix>
>>>>>        $ make qcom_defconfig
>>>>>        $ make
>>>>>
>>>>> - gzip u-boot::
>>>>>
>>>>>        gzip u-boot-nodtb.bin
>>>>>
>>>>> - Append dtb to gzipped u-boot::
>>>>>
>>>>>         cat u-boot-nodtb.bin.gz
>>>>> <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
>>>>> u-boot-nodtb.bin.gz-dtb
>>>>>
>>>>> This would avoid the maintenance burden to keep DT in sync with that
>>>>> of Linux. And since DT bindings in Linux are backwards compatible, we
>>>>> can say u-boot should work with DTB picked up from any Linux kernel
>>>>> stable release.
>>>>
>>>> I guess one question I have is, are we being passed the device tree
>>>> (since we're acting like the Linux Kernel)
>>>
>>> Yeah that is the case here, see patch #1 in this series regarding how
>>> FDT address is being retrieved from previous stage bootloader (ABL on
>>> sdm845 and qcs404 SoCs).
>>
>> That's what I thought.
>>
>>>> or knowing that we have the
>>>> dtb attached to the end of us and making use of the old kernel appended
>>>> dtb option? We're fine in for example the rpi_arm64 case of just being
>>>> given a device tree from the previous stage and not needing one in-tree.
>>>
>>> That's good to know and we can replicate that for Qcom platforms which
>>> are chainloaded and don't need an embedded DT.
>>
>> So yes, moving these towards the direction of rpi_arm64 and specifically
>> using imply OF_HAS_PRIOR_STAGE or select OF_HAS_PRIOR_STAGE (force that
>> the dtb must be provided to us) sounds like the right direction to take
>> these platforms.

This is implicitly enforced by the bootloader on Qualcomm platforms. It
will only even boot U-Boot if we gzip u-boot-nodtb.bin, then append some
valid DTB to it, and then shove it in an Android boot image. If there is
no DTB then the bootloader won't run U-Boot. If we somehow did run
U-Boot without a valid DTB then we wouldn't be able to print anything
anyway (unless debug UART is enabled).


>>
> 
> IMHO that option isn't that useful.  Grepping for OF_HAS_PRIOR_STAGE
> shows that we use it to print where the DT came from unless I am
> missing something...
> On top of that having implies in the Kconfig to control those prints
> makes little sense to me and it's a half-baked solution anyway,
> because may boards don't fill this properly.  This thing was cleaned
> up in 2e8d2f88439d, 2ea63271e522f, and d6f8ab30a2af46 but then got
> reintroduced in 275b4832f6bf91 without anyone acking or reviewing. I
> am fine with Caleb suggests here, but I think we can do way better.
> 
> Instead of having that imply we can get rid of it and only have
> OF_BOARD(and perhaps rename it). So a general cleanup I have in mind
> is
> 
> CONFIG_OF_SEPARATE -> rename it to CONFIG_OF_APPEND because it is
> actually appended at the end of the binary.
> CONFIG_OF_EMBED -> Leave it as is, it's there for debugging mostly.
> CONFIG_OF_BOARD perhaps rename it to something more useful, but the
> semantics are 'The DT comes from an *external* source. A bloblist,
> some EEPROM location, CPU registers etc'
> CONFIG_OF_HAS_PRIOR_STAGE -> Get rid of it again. gd already has
> gd->fdt_src, just add a FDTSRC_UNKNOWN as default and delegate the
> responsibility of filling this properly at fdtdec_setup(). The boards
> that use OF_BOARD can fill this in properly, instead of relying on
> Kconfig imply options and we can even be more explicit on where the DT
> came from.

This sounds good to me, although I guess I'm mostly unaffected anyways.
> 
> I can send an RFC if anyone thinks this is a cleaner approach>
> Thanks
> /Ilias
> 
> 
> 
>> --
>> Tom
Caleb Connolly Dec. 6, 2023, 1 p.m. UTC | #43
Hi Simon,

>>>> - gzip u-boot::
>>>>
>>>>        gzip u-boot-nodtb.bin
>>>>
>>>> - Append dtb to gzipped u-boot::
>>>>
>>>>         cat u-boot-nodtb.bin.gz
>>>> <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
>>>> u-boot-nodtb.bin.gz-dtb
>>>
>>> What is this?? Who or what uses a gzipped image with a single DT attached?
>>
>> The gzipped image is loaded by Qcom proprietary bootloaders (ABL or
>> LK). It is the usual way Linux is booted on these platforms. U-boot is
>> being brought into this chain to leverage standardized EFI boot
>> processes.
> 
> LK is Little kernel, I believe. That is an open source project, right?
> But I suppose it is BSD licensed so in fact the code is not available?
> Is ABL obsolete?
> 
> I'm not sure that it matters in any case. We should be able to
> standardise the U-Boot part and let the private projects implement
> that, for a seamless boot.

Realistically we aren't in a position to change the bootflow on Qualcomm
boards. This may well change in the future, but for now this is the best
we can do.

On a personal note, I work on a project called postmarketOS, we try to
run upstream Linux and a fully FOSS userspace on phones. I support a few
Qualcomm devices there, and currently the biggest annoyance has been the
bootloader. We can't change it, most OEMs don't care, we're stuck with it.

Below is the MR prototyping UEFI booting postmarketOS with systemd-boot
and U-Boot. This will let us do kernel rollbacks, multi-boot with other
distros, and all the fun things that UEFI gets us. Only because of the
bringup work done here, and (until someone finds an exploit) this is
possible only using the boot mechanism explained by Sumit above.

https://gitlab.com/postmarketOS/pmaports/-/merge_requests/4599

> 
> What you have written above is not a good way for U-Boot to be
> packaged or invoked.

I agree, of course it would be great to have U-Boot be a first-class
citizen on Qualcomm devices, but supporting this (admittedly very wonky)
bootflow doesn't exclude that possibility. I very much hope we'll see
some better options for devices going forwards.
>
Rob Herring Dec. 6, 2023, 8:42 p.m. UTC | #44
On Tue, Dec 5, 2023 at 11:05 PM Sumit Garg <sumit.garg@linaro.org> wrote:
>
> On Tue, 5 Dec 2023 at 15:39, Krzysztof Kozlowski
> <krzysztof.kozlowski@linaro.org> wrote:
> >
> > On 05/12/2023 10:45, Sumit Garg wrote:
> > > + U-boot custodians list
> > >
> > > On Tue, 5 Dec 2023 at 12:58, Krzysztof Kozlowski
> > > <krzysztof.kozlowski@linaro.org> wrote:
> > >>
> > >> On 05/12/2023 08:13, Sumit Garg wrote:
> > >>>>> @DT bindings maintainers,
> > >>>>>
> > >>>>> Given the ease of maintenance of DT bindings within Linux kernel
> > >>>>> source tree, I don't have a specific objection there. But can we ease
> > >>>>> DTS testing for firmware/bootloader projects by providing a versioned
> > >>>>> release package for DT bindings? Or if someone else has a better idea
> > >>>>> here please feel free to chime in.
> > >>>>
> > >>>> This doesn't work for you?:
> > >>>>
> > >>>> https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/
> > >>>
> > >>> Thanks, this is certainly a good step which I wasn't aware of. Further
> > >>> simplification can be done to decouple devicetree source files from DT
> > >>> bindings.
> > >>
> > >> Why?
> > >
> > > I suppose you are already aware that Linux DTS files are a subset of
> > > what could be supported by devicetree schemas. There can be
> > > firmware/bootloader specific properties (one example being [1]) which
> > > Linux kernel can simply ignore. Will you be willing to add all of
> > > those DT properties to Linux DTS files and maintain them?
> >
> > We already added them and we already maintain them. DTS describes the
> > hardware, not the OS-subset of the hardware.
>
> Let look at some numbers if your statement is justified or not for the
> example I gave:
>
> u-boot$ git grep -nr bootph-* arch/arm* | wc -l
> 4079
>
> linux$ git grep -nr bootph-* arch/arm* | wc -l
> 267

I have no control over whether anyone has submitted the other 3812 instances.

> It looks like there is always going to be a catch up game regarding DT
> properties which either Linux kernel or u-boot or any other
> firmware/bootloader project don't care about.

As long as dts files in u-boot are manually sync'ed, yes. That is the
problem and it doesn't matter if we have a standalone repository or
not.

If you want to move in that direction, start automating what u-boot
imports. You need to do that for bindings if you want to run
validation, so why not dts files too?

> > > However, DT bindings are something which should be common, the
> > > hardware description of a device should be universal. IMO, splitting
> >
> > Both DT bindings and DTS should be common. I don't see the difference.
>
> If we really care about DTS to be common then the contribution model
> has to change where there is a single repo hosting DT bindings and
> DTS. All other projects whether it is Linux kernel or u-boot or any
> other OS/firmware/bootloader are just consuming DTS files from that
> single repo.

Really, only the kernel and u-boot matter. No, I don't mean I don't
care about other projects, but those are the 2 with the widest h/w
support by far and which have a major effort to sync copies of dts
files in both projects. The rest are just noise in terms of this
problem.

> I suppose this is something that Linux DT maintainers
> have objected to in the past for ease of maintenance. I am not sure if
> you folks are willing to change that stance.

The issue is no one steps up to help maintain such a repository while
there is lots of review and maintainer work on what goes into the
kernel tree. I'm happy to direct my binding review attention to
wherever the majority of the bindings go. But the work on the DTS side
is mostly SoC tree maintainers and sub-maintainers.

Assume for a minute we have this standalone repo. What happens next?
We start with an empty repo and then merge and move platforms 1 by 1?
How many years will that take? What do we do with platforms no one is
interested in moving? Or do we start with devicetree-rebasing instead
(That was the plan at one time) and sync u-boot back to that?

All the work needed to get u-boot and kernel dts files in sync has
virtually no dependency on a standalone repo. If the dts files aren't
already kept in sync, someone has to figure the differences and
eliminate them. Maybe some platforms are in good shape, but it is
still a manual process. Fix that part, because a standalone repo does
nothing for you until you do.

> > > DT bindings alone would ease the compliance process for u-boot drivers
> > > in quite similar manner to Linux drivers.

There's no compliance of drivers really beyond checking if compatible
strings used by drivers have a schema.

Why is extracting the bindings out a problem? SystemReady has no issue
doing just that for its compliance test.

Rob
ff Dec. 7, 2023, 8:08 a.m. UTC | #45
> Le 6 déc. 2023 à 21:42, Rob Herring <robh+dt@kernel.org> a écrit :
> 
> On Tue, Dec 5, 2023 at 11:05 PM Sumit Garg <sumit.garg@linaro.org> wrote:
>> 
>>> On Tue, 5 Dec 2023 at 15:39, Krzysztof Kozlowski
>>> <krzysztof.kozlowski@linaro.org> wrote:
>>> 
>>> On 05/12/2023 10:45, Sumit Garg wrote:
>>>> + U-boot custodians list
>>>> 
>>>> On Tue, 5 Dec 2023 at 12:58, Krzysztof Kozlowski
>>>> <krzysztof.kozlowski@linaro.org> wrote:
>>>>> 
>>>>> On 05/12/2023 08:13, Sumit Garg wrote:
>>>>>>>> @DT bindings maintainers,
>>>>>>>> 
>>>>>>>> Given the ease of maintenance of DT bindings within Linux kernel
>>>>>>>> source tree, I don't have a specific objection there. But can we ease
>>>>>>>> DTS testing for firmware/bootloader projects by providing a versioned
>>>>>>>> release package for DT bindings? Or if someone else has a better idea
>>>>>>>> here please feel free to chime in.
>>>>>>> 
>>>>>>> This doesn't work for you?:
>>>>>>> 
>>>>>>> https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/
>>>>>> 
>>>>>> Thanks, this is certainly a good step which I wasn't aware of. Further
>>>>>> simplification can be done to decouple devicetree source files from DT
>>>>>> bindings.
>>>>> 
>>>>> Why?
>>>> 
>>>> I suppose you are already aware that Linux DTS files are a subset of
>>>> what could be supported by devicetree schemas. There can be
>>>> firmware/bootloader specific properties (one example being [1]) which
>>>> Linux kernel can simply ignore. Will you be willing to add all of
>>>> those DT properties to Linux DTS files and maintain them?
>>> 
>>> We already added them and we already maintain them. DTS describes the
>>> hardware, not the OS-subset of the hardware.
>> 
>> Let look at some numbers if your statement is justified or not for the
>> example I gave:
>> 
>> u-boot$ git grep -nr bootph-* arch/arm* | wc -l
>> 4079
>> 
>> linux$ git grep -nr bootph-* arch/arm* | wc -l
>> 267
> 
> I have no control over whether anyone has submitted the other 3812 instances.
> 
>> It looks like there is always going to be a catch up game regarding DT
>> properties which either Linux kernel or u-boot or any other
>> firmware/bootloader project don't care about.
> 
> As long as dts files in u-boot are manually sync'ed, yes. That is the
> problem and it doesn't matter if we have a standalone repository or
> not.
> 
> If you want to move in that direction, start automating what u-boot
> imports. You need to do that for bindings if you want to run
> validation, so why not dts files too?
> 
>>>> However, DT bindings are something which should be common, the
>>>> hardware description of a device should be universal. IMO, splitting
>>> 
>>> Both DT bindings and DTS should be common. I don't see the difference.
>> 
>> If we really care about DTS to be common then the contribution model
>> has to change where there is a single repo hosting DT bindings and
>> DTS. All other projects whether it is Linux kernel or u-boot or any
>> other OS/firmware/bootloader are just consuming DTS files from that
>> single repo.
> 
> Really, only the kernel and u-boot matter. No, I don't mean I don't
> care about other projects, but those are the 2 with the widest h/w
> support by far and which have a major effort to sync copies of dts
> files in both projects. The rest are just noise in terms of this
> problem.
> 
>> I suppose this is something that Linux DT maintainers
>> have objected to in the past for ease of maintenance. I am not sure if
>> you folks are willing to change that stance.
> 
> The issue is no one steps up to help maintain such a repository while
> there is lots of review and maintainer work on what goes into the
> kernel tree. I'm happy to direct my binding review attention to
> wherever the majority of the bindings go. But the work on the DTS side
> is mostly SoC tree maintainers and sub-maintainers.
> 
> Assume for a minute we have this standalone repo. What happens next?
> We start with an empty repo and then merge and move platforms 1 by 1?

What about leveraging SystemReady-IR compliant board maintainers and start with a core of motivated people ?

> How many years will that take?

Should all platforms following that organization be a goal? 

> What do we do with platforms no one is
> interested in moving? Or do we start with devicetree-rebasing instead
> (That was the plan at one time) and sync u-boot back to that?
> All the work needed to get u-boot and kernel dts files in sync has
> virtually no dependency on a standalone repo. If the dts files aren't
> already kept in sync, someone has to figure the differences and
> eliminate them. Maybe some platforms are in good shape, but it is
> still a manual process. Fix that part, because a standalone repo does
> nothing for you until you do.
> 
>>>> DT bindings alone would ease the compliance process for u-boot drivers
>>>> in quite similar manner to Linux drivers.
> 
> There's no compliance of drivers really beyond checking if compatible
> strings used by drivers have a schema.
> 
> Why is extracting the bindings out a problem? SystemReady has no issue
> doing just that for its compliance test.
> 
> Rob
> _______________________________________________
> boot-architecture mailing list -- boot-architecture@lists.linaro.org
> To unsubscribe send an email to boot-architecture-leave@lists.linaro.org
Sumit Garg Dec. 7, 2023, 1:37 p.m. UTC | #46
On Thu, 7 Dec 2023 at 02:12, Rob Herring <robh+dt@kernel.org> wrote:
>
> On Tue, Dec 5, 2023 at 11:05 PM Sumit Garg <sumit.garg@linaro.org> wrote:
> >
> > On Tue, 5 Dec 2023 at 15:39, Krzysztof Kozlowski
> > <krzysztof.kozlowski@linaro.org> wrote:
> > >
> > > On 05/12/2023 10:45, Sumit Garg wrote:
> > > > + U-boot custodians list
> > > >
> > > > On Tue, 5 Dec 2023 at 12:58, Krzysztof Kozlowski
> > > > <krzysztof.kozlowski@linaro.org> wrote:
> > > >>
> > > >> On 05/12/2023 08:13, Sumit Garg wrote:
> > > >>>>> @DT bindings maintainers,
> > > >>>>>
> > > >>>>> Given the ease of maintenance of DT bindings within Linux kernel
> > > >>>>> source tree, I don't have a specific objection there. But can we ease
> > > >>>>> DTS testing for firmware/bootloader projects by providing a versioned
> > > >>>>> release package for DT bindings? Or if someone else has a better idea
> > > >>>>> here please feel free to chime in.
> > > >>>>
> > > >>>> This doesn't work for you?:
> > > >>>>
> > > >>>> https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/
> > > >>>
> > > >>> Thanks, this is certainly a good step which I wasn't aware of. Further
> > > >>> simplification can be done to decouple devicetree source files from DT
> > > >>> bindings.
> > > >>
> > > >> Why?
> > > >
> > > > I suppose you are already aware that Linux DTS files are a subset of
> > > > what could be supported by devicetree schemas. There can be
> > > > firmware/bootloader specific properties (one example being [1]) which
> > > > Linux kernel can simply ignore. Will you be willing to add all of
> > > > those DT properties to Linux DTS files and maintain them?
> > >
> > > We already added them and we already maintain them. DTS describes the
> > > hardware, not the OS-subset of the hardware.
> >
> > Let look at some numbers if your statement is justified or not for the
> > example I gave:
> >
> > u-boot$ git grep -nr bootph-* arch/arm* | wc -l
> > 4079
> >
> > linux$ git grep -nr bootph-* arch/arm* | wc -l
> > 267
>
> I have no control over whether anyone has submitted the other 3812 instances.
>
> > It looks like there is always going to be a catch up game regarding DT
> > properties which either Linux kernel or u-boot or any other
> > firmware/bootloader project don't care about.
>
> As long as dts files in u-boot are manually sync'ed, yes. That is the
> problem and it doesn't matter if we have a standalone repository or
> not.
>
> If you want to move in that direction, start automating what u-boot
> imports. You need to do that for bindings if you want to run
> validation, so why not dts files too?
>
> > > > However, DT bindings are something which should be common, the
> > > > hardware description of a device should be universal. IMO, splitting
> > >
> > > Both DT bindings and DTS should be common. I don't see the difference.
> >
> > If we really care about DTS to be common then the contribution model
> > has to change where there is a single repo hosting DT bindings and
> > DTS. All other projects whether it is Linux kernel or u-boot or any
> > other OS/firmware/bootloader are just consuming DTS files from that
> > single repo.
>
> Really, only the kernel and u-boot matter. No, I don't mean I don't
> care about other projects, but those are the 2 with the widest h/w
> support by far and which have a major effort to sync copies of dts
> files in both projects. The rest are just noise in terms of this
> problem.
>
> > I suppose this is something that Linux DT maintainers
> > have objected to in the past for ease of maintenance. I am not sure if
> > you folks are willing to change that stance.
>
> The issue is no one steps up to help maintain such a repository while
> there is lots of review and maintainer work on what goes into the
> kernel tree. I'm happy to direct my binding review attention to
> wherever the majority of the bindings go. But the work on the DTS side
> is mostly SoC tree maintainers and sub-maintainers.
>
> Assume for a minute we have this standalone repo. What happens next?
> We start with an empty repo and then merge and move platforms 1 by 1?
> How many years will that take? What do we do with platforms no one is
> interested in moving? Or do we start with devicetree-rebasing instead
> (That was the plan at one time) and sync u-boot back to that?

Thanks Rob for sharing further insights. So I have given this approach
a try here [1]. Lets see how it can serve u-boot community needs and
thereby bring DT bindings compliance in u-boot.

U-boot community, maintainers, custodians,

Feel free to play out with this DT bindings compliance idea here [1]
and let us know if this approach helps to reduce DT maintainence
burden alongside increasing compliance.

[1] https://github.com/u-boot/u-boot/pull/451

-Sumit

>
> All the work needed to get u-boot and kernel dts files in sync has
> virtually no dependency on a standalone repo. If the dts files aren't
> already kept in sync, someone has to figure the differences and
> eliminate them. Maybe some platforms are in good shape, but it is
> still a manual process. Fix that part, because a standalone repo does
> nothing for you until you do.
>
> > > > DT bindings alone would ease the compliance process for u-boot drivers
> > > > in quite similar manner to Linux drivers.
>
> There's no compliance of drivers really beyond checking if compatible
> strings used by drivers have a schema.
>
> Why is extracting the bindings out a problem? SystemReady has no issue
> doing just that for its compliance test.
>
> Rob
Rob Herring Dec. 7, 2023, 6:51 p.m. UTC | #47
On Thu, Dec 7, 2023 at 2:08 AM ff <ff@shokubai.tech> wrote:
>
>
>
> > Le 6 déc. 2023 à 21:42, Rob Herring <robh+dt@kernel.org> a écrit :
> >
> > On Tue, Dec 5, 2023 at 11:05 PM Sumit Garg <sumit.garg@linaro.org> wrote:
> >>
> >>> On Tue, 5 Dec 2023 at 15:39, Krzysztof Kozlowski
> >>> <krzysztof.kozlowski@linaro.org> wrote:
> >>>
> >>> On 05/12/2023 10:45, Sumit Garg wrote:
> >>>> + U-boot custodians list
> >>>>
> >>>> On Tue, 5 Dec 2023 at 12:58, Krzysztof Kozlowski
> >>>> <krzysztof.kozlowski@linaro.org> wrote:
> >>>>>
> >>>>> On 05/12/2023 08:13, Sumit Garg wrote:
> >>>>>>>> @DT bindings maintainers,
> >>>>>>>>
> >>>>>>>> Given the ease of maintenance of DT bindings within Linux kernel
> >>>>>>>> source tree, I don't have a specific objection there. But can we ease
> >>>>>>>> DTS testing for firmware/bootloader projects by providing a versioned
> >>>>>>>> release package for DT bindings? Or if someone else has a better idea
> >>>>>>>> here please feel free to chime in.
> >>>>>>>
> >>>>>>> This doesn't work for you?:
> >>>>>>>
> >>>>>>> https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/
> >>>>>>
> >>>>>> Thanks, this is certainly a good step which I wasn't aware of. Further
> >>>>>> simplification can be done to decouple devicetree source files from DT
> >>>>>> bindings.
> >>>>>
> >>>>> Why?
> >>>>
> >>>> I suppose you are already aware that Linux DTS files are a subset of
> >>>> what could be supported by devicetree schemas. There can be
> >>>> firmware/bootloader specific properties (one example being [1]) which
> >>>> Linux kernel can simply ignore. Will you be willing to add all of
> >>>> those DT properties to Linux DTS files and maintain them?
> >>>
> >>> We already added them and we already maintain them. DTS describes the
> >>> hardware, not the OS-subset of the hardware.
> >>
> >> Let look at some numbers if your statement is justified or not for the
> >> example I gave:
> >>
> >> u-boot$ git grep -nr bootph-* arch/arm* | wc -l
> >> 4079
> >>
> >> linux$ git grep -nr bootph-* arch/arm* | wc -l
> >> 267
> >
> > I have no control over whether anyone has submitted the other 3812 instances.
> >
> >> It looks like there is always going to be a catch up game regarding DT
> >> properties which either Linux kernel or u-boot or any other
> >> firmware/bootloader project don't care about.
> >
> > As long as dts files in u-boot are manually sync'ed, yes. That is the
> > problem and it doesn't matter if we have a standalone repository or
> > not.
> >
> > If you want to move in that direction, start automating what u-boot
> > imports. You need to do that for bindings if you want to run
> > validation, so why not dts files too?
> >
> >>>> However, DT bindings are something which should be common, the
> >>>> hardware description of a device should be universal. IMO, splitting
> >>>
> >>> Both DT bindings and DTS should be common. I don't see the difference.
> >>
> >> If we really care about DTS to be common then the contribution model
> >> has to change where there is a single repo hosting DT bindings and
> >> DTS. All other projects whether it is Linux kernel or u-boot or any
> >> other OS/firmware/bootloader are just consuming DTS files from that
> >> single repo.
> >
> > Really, only the kernel and u-boot matter. No, I don't mean I don't
> > care about other projects, but those are the 2 with the widest h/w
> > support by far and which have a major effort to sync copies of dts
> > files in both projects. The rest are just noise in terms of this
> > problem.
> >
> >> I suppose this is something that Linux DT maintainers
> >> have objected to in the past for ease of maintenance. I am not sure if
> >> you folks are willing to change that stance.
> >
> > The issue is no one steps up to help maintain such a repository while
> > there is lots of review and maintainer work on what goes into the
> > kernel tree. I'm happy to direct my binding review attention to
> > wherever the majority of the bindings go. But the work on the DTS side
> > is mostly SoC tree maintainers and sub-maintainers.
> >
> > Assume for a minute we have this standalone repo. What happens next?
> > We start with an empty repo and then merge and move platforms 1 by 1?
>
> What about leveraging SystemReady-IR compliant board maintainers and start with a core of motivated people ?

I think there are 2 ATM. Synquacer and i.MX8 variants. Synquacer only
has a DT in u-boot, so not really anything to do there. I'm pretty
sure the certified DTBs for i.MX8 don't match what's in u-boot or the
kernel tree. Hopefully, it's just a subset, but still, there's a gap.
I don't know that there is motivation there either.

Note that SystemReady currently only requires every node with
'compatible' have a schema. It does not yet require no schema
warnings. If we went with a 1 by 1 approach, I would push that
platforms have to be free of warnings.

> > How many years will that take?
>
> Should all platforms following that organization be a goal?

You mean should all platforms be moved? Absolutely. I don't think we
want to solve the problem of having DTS files in 2 places by creating
a 3rd place.

I don't really think 1 by 1 is the right approach. I was just
enumerating how this could work. It's not that useful to say we need a
standalone repo without working thru the logistics of how exactly that
will work.

Rob
ff Dec. 7, 2023, 8:24 p.m. UTC | #48
Le 7 déc. 2023 à 19:51, Rob Herring <robh+dt@kernel.org> a écrit :

On Thu, Dec 7, 2023 at 2:08 AM ff <ff@shokubai.tech> wrote:



Le 6 déc. 2023 à 21:42, Rob Herring <robh+dt@kernel.org> a écrit :

On Tue, Dec 5, 2023 at 11:05 PM Sumit Garg <sumit.garg@linaro.org> wrote:

On Tue, 5 Dec 2023 at 15:39, Krzysztof Kozlowski
<krzysztof.kozlowski@linaro.org> wrote:

On 05/12/2023 10:45, Sumit Garg wrote:
+ U-boot custodians list

On Tue, 5 Dec 2023 at 12:58, Krzysztof Kozlowski
<krzysztof.kozlowski@linaro.org> wrote:

On 05/12/2023 08:13, Sumit Garg wrote:
@DT bindings maintainers,

Given the ease of maintenance of DT bindings within Linux kernel
source tree, I don't have a specific objection there. But can we ease
DTS testing for firmware/bootloader projects by providing a versioned
release package for DT bindings? Or if someone else has a better idea
here please feel free to chime in.

This doesn't work for you?:

https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/

Thanks, this is certainly a good step which I wasn't aware of. Further
simplification can be done to decouple devicetree source files from DT
bindings.

Why?

I suppose you are already aware that Linux DTS files are a subset of
what could be supported by devicetree schemas. There can be
firmware/bootloader specific properties (one example being [1]) which
Linux kernel can simply ignore. Will you be willing to add all of
those DT properties to Linux DTS files and maintain them?

We already added them and we already maintain them. DTS describes the
hardware, not the OS-subset of the hardware.

Let look at some numbers if your statement is justified or not for the
example I gave:

u-boot$ git grep -nr bootph-* arch/arm* | wc -l
4079

linux$ git grep -nr bootph-* arch/arm* | wc -l
267

I have no control over whether anyone has submitted the other 3812 instances.

It looks like there is always going to be a catch up game regarding DT
properties which either Linux kernel or u-boot or any other
firmware/bootloader project don't care about.

As long as dts files in u-boot are manually sync'ed, yes. That is the
problem and it doesn't matter if we have a standalone repository or
not.

If you want to move in that direction, start automating what u-boot
imports. You need to do that for bindings if you want to run
validation, so why not dts files too?

However, DT bindings are something which should be common, the
hardware description of a device should be universal. IMO, splitting

Both DT bindings and DTS should be common. I don't see the difference.

If we really care about DTS to be common then the contribution model
has to change where there is a single repo hosting DT bindings and
DTS. All other projects whether it is Linux kernel or u-boot or any
other OS/firmware/bootloader are just consuming DTS files from that
single repo.

Really, only the kernel and u-boot matter. No, I don't mean I don't
care about other projects, but those are the 2 with the widest h/w
support by far and which have a major effort to sync copies of dts
files in both projects. The rest are just noise in terms of this
problem.

I suppose this is something that Linux DT maintainers
have objected to in the past for ease of maintenance. I am not sure if
you folks are willing to change that stance.

The issue is no one steps up to help maintain such a repository while
there is lots of review and maintainer work on what goes into the
kernel tree. I'm happy to direct my binding review attention to
wherever the majority of the bindings go. But the work on the DTS side
is mostly SoC tree maintainers and sub-maintainers.

Assume for a minute we have this standalone repo. What happens next?
We start with an empty repo and then merge and move platforms 1 by 1?

What about leveraging SystemReady-IR compliant board maintainers and start with a core of motivated people ?

I think there are 2 ATM. Synquacer and i.MX8 variants.

Based on  https://www.arm.com/architecture/system-architectures/systemready-certification-program/ir
 roughly 30 boards.

Synquacer only
has a DT in u-boot, so not really anything to do there.
I'm pretty
sure the certified DTBs for i.MX8 don't match what's in u-boot or the
kernel tree. Hopefully, it's just a subset, but still, there's a gap.
I don't know that there is motivation there either.
Note that SystemReady currently only requires every node with
'compatible' have a schema. It does not yet require no schema
warnings. If we went with a 1 by 1 approach, I would push that
platforms have to be free of warnings.

How many years will that take?

Should all platforms following that organization be a goal?

You mean should all platforms be moved? Absolutely. I don't think we
want to solve the problem of having DTS files in 2 places by creating
a 3rd place.
Actually, if we limit he DTS in the third place for SystemReady-IR, there should be no DTB in the Linux distribution. It would be the equivalent as ACPI boards . So is it still an issue ? A reference to the the third repo may be hinted in a text file.

I don't really think 1 by 1 is the right approach. I was just
enumerating how this could work. It's not that useful to say we need a
standalone repo without working thru the logistics of how exactly that
will work.

Rob
Conor Dooley Dec. 7, 2023, 8:31 p.m. UTC | #49
What on earth has happened here with quoting? Please fix your mail
client man, this mail is a mess to read.

On Thu, Dec 07, 2023 at 08:24:01PM +0000, ff wrote:
> 
> 
> Le 7 déc. 2023 à 19:51, Rob Herring <robh+dt@kernel.org> a écrit :
> 
> On Thu, Dec 7, 2023 at 2:08 AM ff <ff@shokubai.tech> wrote:
> 
> 
> 
> Le 6 déc. 2023 à 21:42, Rob Herring <robh+dt@kernel.org> a écrit :
> 
> On Tue, Dec 5, 2023 at 11:05 PM Sumit Garg <sumit.garg@linaro.org> wrote:
> 
> On Tue, 5 Dec 2023 at 15:39, Krzysztof Kozlowski
> <krzysztof.kozlowski@linaro.org> wrote:
> 
> On 05/12/2023 10:45, Sumit Garg wrote:
> + U-boot custodians list
> 
> On Tue, 5 Dec 2023 at 12:58, Krzysztof Kozlowski
> <krzysztof.kozlowski@linaro.org> wrote:
> 
> On 05/12/2023 08:13, Sumit Garg wrote:
> @DT bindings maintainers,
> 
> Given the ease of maintenance of DT bindings within Linux kernel
> source tree, I don't have a specific objection there. But can we ease
> DTS testing for firmware/bootloader projects by providing a versioned
> release package for DT bindings? Or if someone else has a better idea
> here please feel free to chime in.
> 
> This doesn't work for you?:
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/
> 
> Thanks, this is certainly a good step which I wasn't aware of. Further
> simplification can be done to decouple devicetree source files from DT
> bindings.
> 
> Why?
> 
> I suppose you are already aware that Linux DTS files are a subset of
> what could be supported by devicetree schemas. There can be
> firmware/bootloader specific properties (one example being [1]) which
> Linux kernel can simply ignore. Will you be willing to add all of
> those DT properties to Linux DTS files and maintain them?
> 
> We already added them and we already maintain them. DTS describes the
> hardware, not the OS-subset of the hardware.
> 
> Let look at some numbers if your statement is justified or not for the
> example I gave:
> 
> u-boot$ git grep -nr bootph-* arch/arm* | wc -l
> 4079
> 
> linux$ git grep -nr bootph-* arch/arm* | wc -l
> 267
> 
> I have no control over whether anyone has submitted the other 3812 instances.
> 
> It looks like there is always going to be a catch up game regarding DT
> properties which either Linux kernel or u-boot or any other
> firmware/bootloader project don't care about.
> 
> As long as dts files in u-boot are manually sync'ed, yes. That is the
> problem and it doesn't matter if we have a standalone repository or
> not.
> 
> If you want to move in that direction, start automating what u-boot
> imports. You need to do that for bindings if you want to run
> validation, so why not dts files too?
> 
> However, DT bindings are something which should be common, the
> hardware description of a device should be universal. IMO, splitting
> 
> Both DT bindings and DTS should be common. I don't see the difference.
> 
> If we really care about DTS to be common then the contribution model
> has to change where there is a single repo hosting DT bindings and
> DTS. All other projects whether it is Linux kernel or u-boot or any
> other OS/firmware/bootloader are just consuming DTS files from that
> single repo.
> 
> Really, only the kernel and u-boot matter. No, I don't mean I don't
> care about other projects, but those are the 2 with the widest h/w
> support by far and which have a major effort to sync copies of dts
> files in both projects. The rest are just noise in terms of this
> problem.
> 
> I suppose this is something that Linux DT maintainers
> have objected to in the past for ease of maintenance. I am not sure if
> you folks are willing to change that stance.
> 
> The issue is no one steps up to help maintain such a repository while
> there is lots of review and maintainer work on what goes into the
> kernel tree. I'm happy to direct my binding review attention to
> wherever the majority of the bindings go. But the work on the DTS side
> is mostly SoC tree maintainers and sub-maintainers.
> 
> Assume for a minute we have this standalone repo. What happens next?
> We start with an empty repo and then merge and move platforms 1 by 1?
> 
> What about leveraging SystemReady-IR compliant board maintainers and start with a core of motivated people ?
> 
> I think there are 2 ATM. Synquacer and i.MX8 variants.
> 
> Based on  https://www.arm.com/architecture/system-architectures/systemready-certification-program/ir
>  roughly 30 boards.
> 
> Synquacer only
> has a DT in u-boot, so not really anything to do there.
> I'm pretty
> sure the certified DTBs for i.MX8 don't match what's in u-boot or the
> kernel tree. Hopefully, it's just a subset, but still, there's a gap.
> I don't know that there is motivation there either.
> Note that SystemReady currently only requires every node with
> 'compatible' have a schema. It does not yet require no schema
> warnings. If we went with a 1 by 1 approach, I would push that
> platforms have to be free of warnings.
> 
> How many years will that take?
> 
> Should all platforms following that organization be a goal?
> 
> You mean should all platforms be moved? Absolutely. I don't think we
> want to solve the problem of having DTS files in 2 places by creating
> a 3rd place.

I think this bit here is the only thing you actually wrote:

> Actually, if we limit he DTS in the third place for SystemReady-IR,
> there should be no DTB in the Linux distribution.
> It would be the equivalent as ACPI boards . So is it still an issue ?
> A reference to the the third repo may be hinted in a text file.

SystemReady is only for one architecture, why would using it as the
centralised point for devicetree files make sense?

> 
> I don't really think 1 by 1 is the right approach. I was just
> enumerating how this could work. It's not that useful to say we need a
> standalone repo without working thru the logistics of how exactly that
> will work.
> 
> Rob
ff Dec. 8, 2023, 9:39 a.m. UTC | #50
Le 7 déc. 2023 à 21:31, Conor Dooley <conor@kernel.org> a écrit :

What on earth has happened here with quoting? Please fix your mail
client man, this mail is a mess to read.

Conor: Hopefully I have now fixed MacOS Mail configuration…
For all: please accept my apologies on past inconveniences.

On Thu, Dec 07, 2023 at 08:24:01PM +0000, ff wrote:


Le 7 déc. 2023 à 19:51, Rob Herring <robh+dt@kernel.org> a écrit :

On Thu, Dec 7, 2023 at 2:08 AM ff <ff@shokubai.tech> wrote:



Le 6 déc. 2023 à 21:42, Rob Herring <robh+dt@kernel.org> a écrit :

On Tue, Dec 5, 2023 at 11:05 PM Sumit Garg <sumit.garg@linaro.org> wrote:

On Tue, 5 Dec 2023 at 15:39, Krzysztof Kozlowski
<krzysztof.kozlowski@linaro.org> wrote:

On 05/12/2023 10:45, Sumit Garg wrote:
+ U-boot custodians list

On Tue, 5 Dec 2023 at 12:58, Krzysztof Kozlowski
<krzysztof.kozlowski@linaro.org> wrote:

On 05/12/2023 08:13, Sumit Garg wrote:
@DT bindings maintainers,

Given the ease of maintenance of DT bindings within Linux kernel
source tree, I don't have a specific objection there. But can we ease
DTS testing for firmware/bootloader projects by providing a versioned
release package for DT bindings? Or if someone else has a better idea
here please feel free to chime in.

This doesn't work for you?:

https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/

Thanks, this is certainly a good step which I wasn't aware of. Further
simplification can be done to decouple devicetree source files from DT
bindings.

Why?

I suppose you are already aware that Linux DTS files are a subset of
what could be supported by devicetree schemas. There can be
firmware/bootloader specific properties (one example being [1]) which
Linux kernel can simply ignore. Will you be willing to add all of
those DT properties to Linux DTS files and maintain them?

We already added them and we already maintain them. DTS describes the
hardware, not the OS-subset of the hardware.

Let look at some numbers if your statement is justified or not for the
example I gave:

u-boot$ git grep -nr bootph-* arch/arm* | wc -l
4079

linux$ git grep -nr bootph-* arch/arm* | wc -l
267

I have no control over whether anyone has submitted the other 3812 instances.

It looks like there is always going to be a catch up game regarding DT
properties which either Linux kernel or u-boot or any other
firmware/bootloader project don't care about.

As long as dts files in u-boot are manually sync'ed, yes. That is the
problem and it doesn't matter if we have a standalone repository or
not.

If you want to move in that direction, start automating what u-boot
imports. You need to do that for bindings if you want to run
validation, so why not dts files too?

However, DT bindings are something which should be common, the
hardware description of a device should be universal. IMO, splitting

Both DT bindings and DTS should be common. I don't see the difference.

If we really care about DTS to be common then the contribution model
has to change where there is a single repo hosting DT bindings and
DTS. All other projects whether it is Linux kernel or u-boot or any
other OS/firmware/bootloader are just consuming DTS files from that
single repo.

Really, only the kernel and u-boot matter. No, I don't mean I don't
care about other projects, but those are the 2 with the widest h/w
support by far and which have a major effort to sync copies of dts
files in both projects. The rest are just noise in terms of this
problem.

I suppose this is something that Linux DT maintainers
have objected to in the past for ease of maintenance. I am not sure if
you folks are willing to change that stance.

The issue is no one steps up to help maintain such a repository while
there is lots of review and maintainer work on what goes into the
kernel tree. I'm happy to direct my binding review attention to
wherever the majority of the bindings go. But the work on the DTS side
is mostly SoC tree maintainers and sub-maintainers.

Assume for a minute we have this standalone repo. What happens next?
We start with an empty repo and then merge and move platforms 1 by 1?

What about leveraging SystemReady-IR compliant board maintainers and start with a core of motivated people ?

I think there are 2 ATM. Synquacer and i.MX8 variants.

Based on  https://www.arm.com/architecture/system-architectures/systemready-certification-program/ir
roughly 30 boards.

Synquacer only
has a DT in u-boot, so not really anything to do there.
I'm pretty
sure the certified DTBs for i.MX8 don't match what's in u-boot or the
kernel tree. Hopefully, it's just a subset, but still, there's a gap.
I don't know that there is motivation there either.
Note that SystemReady currently only requires every node with
'compatible' have a schema. It does not yet require no schema
warnings. If we went with a 1 by 1 approach, I would push that
platforms have to be free of warnings.

How many years will that take?

Should all platforms following that organization be a goal?

You mean should all platforms be moved? Absolutely. I don't think we
want to solve the problem of having DTS files in 2 places by creating
a 3rd place.

I think this bit here is the only thing you actually wrote:

Actually, if we limit he DTS in the third place for SystemReady-IR,
there should be no DTB in the Linux distribution.
It would be the equivalent as ACPI boards . So is it still an issue ?
A reference to the the third repo may be hinted in a text file.

SystemReady is only for one architecture, why would using it as the
centralised point for devicetree files make sense?

SystemReady is an Arm certification but built on EBBR which is
the important part and also adopted by RISC-V.
So when I said SystemReady, one should read EBBR.
EBBR is promoting a DT life cycle that is in line with
having an out of OS/Firmware repos definitions.

I don't really think 1 by 1 is the right approach. I was just
enumerating how this could work. It's not that useful to say we need a
standalone repo without working thru the logistics of how exactly that
will work.

Rob
Conor Dooley Dec. 8, 2023, 3:12 p.m. UTC | #51
On Fri, Dec 08, 2023 at 09:39:27AM +0000, ff wrote:
> 
> 
> Le 7 déc. 2023 à 21:31, Conor Dooley <conor@kernel.org> a écrit :
> 
> What on earth has happened here with quoting? Please fix your mail
> client man, this mail is a mess to read.
> 
> Conor: Hopefully I have now fixed MacOS Mail configuration…
> For all: please accept my apologies on past inconveniences.

Judging by this mail looking like it does, nothing has changed?
You can check it on lore too:
https://lore.kernel.org/u-boot/CAC_iWjKKwjpD1VAbXJaB=UDQPWMS+k65tv-qL=JnewzSEhGEow@mail.gmail.com/T/#ma8c4fc1268c68aab0b05b96b2cea5c90cc2525b8

I'm not going to fix the quoting by hand, I have better things to do :)

Cheers,
Conor.

> 
> On Thu, Dec 07, 2023 at 08:24:01PM +0000, ff wrote:
> 
> 
> Le 7 déc. 2023 à 19:51, Rob Herring <robh+dt@kernel.org> a écrit :
> 
> On Thu, Dec 7, 2023 at 2:08 AM ff <ff@shokubai.tech> wrote:
> 
> 
> 
> Le 6 déc. 2023 à 21:42, Rob Herring <robh+dt@kernel.org> a écrit :
> 
> On Tue, Dec 5, 2023 at 11:05 PM Sumit Garg <sumit.garg@linaro.org> wrote:
> 
> On Tue, 5 Dec 2023 at 15:39, Krzysztof Kozlowski
> <krzysztof.kozlowski@linaro.org> wrote:
> 
> On 05/12/2023 10:45, Sumit Garg wrote:
> + U-boot custodians list
> 
> On Tue, 5 Dec 2023 at 12:58, Krzysztof Kozlowski
> <krzysztof.kozlowski@linaro.org> wrote:
> 
> On 05/12/2023 08:13, Sumit Garg wrote:
> @DT bindings maintainers,
> 
> Given the ease of maintenance of DT bindings within Linux kernel
> source tree, I don't have a specific objection there. But can we ease
> DTS testing for firmware/bootloader projects by providing a versioned
> release package for DT bindings? Or if someone else has a better idea
> here please feel free to chime in.
> 
> This doesn't work for you?:
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/
> 
> Thanks, this is certainly a good step which I wasn't aware of. Further
> simplification can be done to decouple devicetree source files from DT
> bindings.
> 
> Why?
> 
> I suppose you are already aware that Linux DTS files are a subset of
> what could be supported by devicetree schemas. There can be
> firmware/bootloader specific properties (one example being [1]) which
> Linux kernel can simply ignore. Will you be willing to add all of
> those DT properties to Linux DTS files and maintain them?
> 
> We already added them and we already maintain them. DTS describes the
> hardware, not the OS-subset of the hardware.
> 
> Let look at some numbers if your statement is justified or not for the
> example I gave:
> 
> u-boot$ git grep -nr bootph-* arch/arm* | wc -l
> 4079
> 
> linux$ git grep -nr bootph-* arch/arm* | wc -l
> 267
> 
> I have no control over whether anyone has submitted the other 3812 instances.
> 
> It looks like there is always going to be a catch up game regarding DT
> properties which either Linux kernel or u-boot or any other
> firmware/bootloader project don't care about.
> 
> As long as dts files in u-boot are manually sync'ed, yes. That is the
> problem and it doesn't matter if we have a standalone repository or
> not.
> 
> If you want to move in that direction, start automating what u-boot
> imports. You need to do that for bindings if you want to run
> validation, so why not dts files too?
> 
> However, DT bindings are something which should be common, the
> hardware description of a device should be universal. IMO, splitting
> 
> Both DT bindings and DTS should be common. I don't see the difference.
> 
> If we really care about DTS to be common then the contribution model
> has to change where there is a single repo hosting DT bindings and
> DTS. All other projects whether it is Linux kernel or u-boot or any
> other OS/firmware/bootloader are just consuming DTS files from that
> single repo.
> 
> Really, only the kernel and u-boot matter. No, I don't mean I don't
> care about other projects, but those are the 2 with the widest h/w
> support by far and which have a major effort to sync copies of dts
> files in both projects. The rest are just noise in terms of this
> problem.
> 
> I suppose this is something that Linux DT maintainers
> have objected to in the past for ease of maintenance. I am not sure if
> you folks are willing to change that stance.
> 
> The issue is no one steps up to help maintain such a repository while
> there is lots of review and maintainer work on what goes into the
> kernel tree. I'm happy to direct my binding review attention to
> wherever the majority of the bindings go. But the work on the DTS side
> is mostly SoC tree maintainers and sub-maintainers.
> 
> Assume for a minute we have this standalone repo. What happens next?
> We start with an empty repo and then merge and move platforms 1 by 1?
> 
> What about leveraging SystemReady-IR compliant board maintainers and start with a core of motivated people ?
> 
> I think there are 2 ATM. Synquacer and i.MX8 variants.
> 
> Based on  https://www.arm.com/architecture/system-architectures/systemready-certification-program/ir
> roughly 30 boards.
> 
> Synquacer only
> has a DT in u-boot, so not really anything to do there.
> I'm pretty
> sure the certified DTBs for i.MX8 don't match what's in u-boot or the
> kernel tree. Hopefully, it's just a subset, but still, there's a gap.
> I don't know that there is motivation there either.
> Note that SystemReady currently only requires every node with
> 'compatible' have a schema. It does not yet require no schema
> warnings. If we went with a 1 by 1 approach, I would push that
> platforms have to be free of warnings.
> 
> How many years will that take?
> 
> Should all platforms following that organization be a goal?
> 
> You mean should all platforms be moved? Absolutely. I don't think we
> want to solve the problem of having DTS files in 2 places by creating
> a 3rd place.
> 
> I think this bit here is the only thing you actually wrote:
> 
> Actually, if we limit he DTS in the third place for SystemReady-IR,
> there should be no DTB in the Linux distribution.
> It would be the equivalent as ACPI boards . So is it still an issue ?
> A reference to the the third repo may be hinted in a text file.
> 
> SystemReady is only for one architecture, why would using it as the
> centralised point for devicetree files make sense?
> 
> SystemReady is an Arm certification but built on EBBR which is
> the important part and also adopted by RISC-V.
> So when I said SystemReady, one should read EBBR.
> EBBR is promoting a DT life cycle that is in line with
> having an out of OS/Firmware repos definitions.
> 
> I don't really think 1 by 1 is the right approach. I was just
> enumerating how this could work. It's not that useful to say we need a
> standalone repo without working thru the logistics of how exactly that
> will work.
> 
> Rob
>
Tom Rini Dec. 9, 2023, 10:03 p.m. UTC | #52
On Mon, Dec 04, 2023 at 11:02:57AM +0530, Sumit Garg wrote:

[snip]
> But currently u-boot doesn't have a proper way to validate those DTS
> against DT bindings (maintained in Linux kernel). Although there are
> Devicetree schema tools available here [2], there isn't a versioned
> release package of DT bindings which one should use to validate DTS
> files.

I will have more / other things to say but I want to chime in here. That
U-Boot cannot validate the DTS files is a bug, not a feature. I would
very much appreciate if someone(s) with time and skills to do so would
re-sync us with the kernel Kbuild again so that we can both stay in sync
again and have the validation targets / functionality available here
too.
Tom Rini Dec. 10, 2023, 4:05 p.m. UTC | #53
On Wed, Dec 06, 2023 at 12:44:47PM +0200, Ilias Apalodimas wrote:
> Hi Tom,
> 
> On Wed, 22 Nov 2023 at 16:28, Tom Rini <trini@konsulko.com> wrote:
> >
> > On Wed, Nov 22, 2023 at 07:44:09PM +0530, Sumit Garg wrote:
> > > On Wed, 22 Nov 2023 at 19:31, Tom Rini <trini@konsulko.com> wrote:
> > > >
> > > > On Wed, Nov 22, 2023 at 11:51:29AM +0530, Sumit Garg wrote:
> > > > > Hi Caleb,
> > > > >
> > > > > On Tue, 21 Nov 2023 at 22:39, Caleb Connolly <caleb.connolly@linaro.org> wrote:
> > > > [snip]
> > > > > > == DT loading ==
> > > > > >
> > > > > > Previously, boards used the FDT blob embedded into U-Boot (via
> > > > > > OF_SEPARATE). However, most Qualcomm boards run U-Boot as a secondary
> > > > > > bootloader, so we can instead rely on the first-stage bootloader to
> > > > > > populate some useful FDT properties for us (notably the /memory node and
> > > > > > KASLR seed) and fetch the DTB that it provides. Combined with the memory
> > > > > > map changes above, this let's us entirely avoid configuring the memory
> > > > > > map explicitly.
> > > > >
> > > > > Since with this change, we don't need to embed FDT blob in the u-boot
> > > > > binary, so I was thinking if we really need to import DTs from Linux
> > > > > for different platforms and then play a catchup game?
> > > > >
> > > > > IMO, the build command would look like following if we import
> > > > > pre-built FDT blob from Linux:
> > > > >
> > > > > - Build u-boot::
> > > > >
> > > > >        $ export CROSS_COMPILE=<aarch64 toolchain prefix>
> > > > >        $ make qcom_defconfig
> > > > >        $ make
> > > > >
> > > > > - gzip u-boot::
> > > > >
> > > > >        gzip u-boot-nodtb.bin
> > > > >
> > > > > - Append dtb to gzipped u-boot::
> > > > >
> > > > >         cat u-boot-nodtb.bin.gz
> > > > > <linux-tree>/arch/arm64/boot/dts/qcom/your-board.dtb >
> > > > > u-boot-nodtb.bin.gz-dtb
> > > > >
> > > > > This would avoid the maintenance burden to keep DT in sync with that
> > > > > of Linux. And since DT bindings in Linux are backwards compatible, we
> > > > > can say u-boot should work with DTB picked up from any Linux kernel
> > > > > stable release.
> > > >
> > > > I guess one question I have is, are we being passed the device tree
> > > > (since we're acting like the Linux Kernel)
> > >
> > > Yeah that is the case here, see patch #1 in this series regarding how
> > > FDT address is being retrieved from previous stage bootloader (ABL on
> > > sdm845 and qcs404 SoCs).
> >
> > That's what I thought.
> >
> > > > or knowing that we have the
> > > > dtb attached to the end of us and making use of the old kernel appended
> > > > dtb option? We're fine in for example the rpi_arm64 case of just being
> > > > given a device tree from the previous stage and not needing one in-tree.
> > >
> > > That's good to know and we can replicate that for Qcom platforms which
> > > are chainloaded and don't need an embedded DT.
> >
> > So yes, moving these towards the direction of rpi_arm64 and specifically
> > using imply OF_HAS_PRIOR_STAGE or select OF_HAS_PRIOR_STAGE (force that
> > the dtb must be provided to us) sounds like the right direction to take
> > these platforms.
> >
> 
> IMHO that option isn't that useful.  Grepping for OF_HAS_PRIOR_STAGE
> shows that we use it to print where the DT came from unless I am
> missing something...

So first, all of "imply OF_HAS_PRIOR_STAGE" is wrong and should be
"select OF_HAS_PRIOR_STAGE". And then yes, it's OF_HAS_PRIOR_STAGE +
OF_BOARD (which is default y if OF_HAS_PRIOR_STAGE). That is the set of
symbols for lib/fdtdec.c::fdtdec_setup() to know to call
board_fdt_blob_setup() and it's up to the board to know where to find
the device tree we were given at run time. Generally the case here is
that we're being a fake Linux Kernel and our dtb is in memory address $X
and that in turn is set in the appropriate register.

> On top of that having implies in the Kconfig to control those prints
> makes little sense to me and it's a half-baked solution anyway,
> because may boards don't fill this properly.  This thing was cleaned
> up in 2e8d2f88439d, 2ea63271e522f, and d6f8ab30a2af46 but then got
> reintroduced in 275b4832f6bf91 without anyone acking or reviewing. I
> am fine with Caleb suggests here, but I think we can do way better.

I think the tags just got missed in 275b4832f6bf91 because that's close
enough to what I wanted at the time.

> Instead of having that imply we can get rid of it and only have
> OF_BOARD(and perhaps rename it). So a general cleanup I have in mind
> is

I _think_ the problem is that we wanted to be able to allow developers
to still be able to override the device tree. So we imply (should be
select) OF_HAS_PRIOR_STAGE so that OF_BOARD=y unless told otherwise.

> CONFIG_OF_SEPARATE -> rename it to CONFIG_OF_APPEND because it is
> actually appended at the end of the binary.

I'm indifferent on this part. Reading lib/fdtdec.c::fdt_find_separate()
I can see why it's "separate" and not "append", but one could reword
things to read "append" and not "separate".

> CONFIG_OF_EMBED -> Leave it as is, it's there for debugging mostly.

Agreed.

> CONFIG_OF_BOARD perhaps rename it to something more useful, but the
> semantics are 'The DT comes from an *external* source. A bloblist,
> some EEPROM location, CPU registers etc'
> CONFIG_OF_HAS_PRIOR_STAGE -> Get rid of it again. gd already has
> gd->fdt_src, just add a FDTSRC_UNKNOWN as default and delegate the
> responsibility of filling this properly at fdtdec_setup(). The boards
> that use OF_BOARD can fill this in properly, instead of relying on
> Kconfig imply options and we can even be more explicit on where the DT
> came from.

I don't know.  All of the things you mention for what CONFIG_OF_BOARD
comes down to "the board defines where it comes from", and so OF_BOARD
is what we came up with. And maybe that whole "imply" rather than
"select" thing is so that a developer can more clearly change to
OF_SEPARATE instead.
Tom Rini Dec. 10, 2023, 6:55 p.m. UTC | #54
On Wed, Dec 06, 2023 at 10:35:02AM +0530, Sumit Garg wrote:
> On Tue, 5 Dec 2023 at 15:39, Krzysztof Kozlowski
> <krzysztof.kozlowski@linaro.org> wrote:
> >
> > On 05/12/2023 10:45, Sumit Garg wrote:
> > > + U-boot custodians list
> > >
> > > On Tue, 5 Dec 2023 at 12:58, Krzysztof Kozlowski
> > > <krzysztof.kozlowski@linaro.org> wrote:
> > >>
> > >> On 05/12/2023 08:13, Sumit Garg wrote:
> > >>>>> @DT bindings maintainers,
> > >>>>>
> > >>>>> Given the ease of maintenance of DT bindings within Linux kernel
> > >>>>> source tree, I don't have a specific objection there. But can we ease
> > >>>>> DTS testing for firmware/bootloader projects by providing a versioned
> > >>>>> release package for DT bindings? Or if someone else has a better idea
> > >>>>> here please feel free to chime in.
> > >>>>
> > >>>> This doesn't work for you?:
> > >>>>
> > >>>> https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/
> > >>>
> > >>> Thanks, this is certainly a good step which I wasn't aware of. Further
> > >>> simplification can be done to decouple devicetree source files from DT
> > >>> bindings.
> > >>
> > >> Why?
> > >
> > > I suppose you are already aware that Linux DTS files are a subset of
> > > what could be supported by devicetree schemas. There can be
> > > firmware/bootloader specific properties (one example being [1]) which
> > > Linux kernel can simply ignore. Will you be willing to add all of
> > > those DT properties to Linux DTS files and maintain them?
> >
> > We already added them and we already maintain them. DTS describes the
> > hardware, not the OS-subset of the hardware.
> 
> Let look at some numbers if your statement is justified or not for the
> example I gave:
> 
> u-boot$ git grep -nr bootph-* arch/arm* | wc -l
> 4079
> 
> linux$ git grep -nr bootph-* arch/arm* | wc -l
> 267
> 
> It looks like there is always going to be a catch up game regarding DT
> properties which either Linux kernel or u-boot or any other
> firmware/bootloader project don't care about.

I want to chime in here just because that specific binding is both
relatively new (and so platforms are working on upstreaming it now) and
board-maintainers have gotten some feedback which has lead to:
https://source.denx.de/u-boot/custodians/u-boot-dm/-/issues/12
that someone needs to have time to work on and that will in turn reduce
the number of instances both in U-Boot and then upstream. It's also one
of the first examples of properties not used directly in Linux but that
is valid and so there was some initial back-and-forth on getting the
dts(i) changes accepted to the kernel tree.
Sumit Garg Dec. 12, 2023, 5:47 a.m. UTC | #55
Hi Tom,

On Sun, 10 Dec 2023 at 03:33, Tom Rini <trini@konsulko.com> wrote:
>
> On Mon, Dec 04, 2023 at 11:02:57AM +0530, Sumit Garg wrote:
>
> [snip]
> > But currently u-boot doesn't have a proper way to validate those DTS
> > against DT bindings (maintained in Linux kernel). Although there are
> > Devicetree schema tools available here [2], there isn't a versioned
> > release package of DT bindings which one should use to validate DTS
> > files.
>
> I will have more / other things to say but I want to chime in here. That
> U-Boot cannot validate the DTS files is a bug, not a feature. I would
> very much appreciate if someone(s) with time and skills to do so would
> re-sync us with the kernel Kbuild again so that we can both stay in sync
> again and have the validation targets / functionality available here
> too.
>

Agree, the Kbuild changes to add dtbs_check was the first thing I
implemented after importing devicetree-rebasing repo in u-boot (see
commit [1] for details). Usage with PR [2] included:

While building any u-boot target, just add make target: "dtbs_check"
and you will see the DT schema checks being performed. Steps:

$ make <target>_defconfig
$ make -j`nproc` dtbs_check

Currently there are a lot of incompatibility warnings I have seen for
the platforms I built. This shows how much difficult it has been to
keep DT in sync with upstream DT bindings.

TBH, this was the only motivation for me to get into discussion with
DT bindings maintainers for a separate repo. But since with
devicetree-rebasing, we get devictree files bundled along and then I
got into reusing them for building DTBs in u-boot. This has the other
benefit of reducing maintainer's pain to keep DT in sync with Linux
kernel major releases (see amlogic platforms to be the first migrator
[3]).

[1] https://github.com/u-boot/u-boot/pull/451/commits/7ea2dc2477992a603fa881d0da563246ee2f02d9
[2] https://github.com/u-boot/u-boot/pull/451
[3] https://github.com/u-boot/u-boot/pull/451/commits/38c2ac62e9134604d1a56179d57baa1877712b3e

-Sumit

> --
> Tom
Rob Herring Dec. 12, 2023, 8:21 p.m. UTC | #56
On Mon, Dec 11, 2023 at 11:47 PM Sumit Garg <sumit.garg@linaro.org> wrote:
>
> Hi Tom,
>
> On Sun, 10 Dec 2023 at 03:33, Tom Rini <trini@konsulko.com> wrote:
> >
> > On Mon, Dec 04, 2023 at 11:02:57AM +0530, Sumit Garg wrote:
> >
> > [snip]
> > > But currently u-boot doesn't have a proper way to validate those DTS
> > > against DT bindings (maintained in Linux kernel). Although there are
> > > Devicetree schema tools available here [2], there isn't a versioned
> > > release package of DT bindings which one should use to validate DTS
> > > files.
> >
> > I will have more / other things to say but I want to chime in here. That
> > U-Boot cannot validate the DTS files is a bug, not a feature. I would
> > very much appreciate if someone(s) with time and skills to do so would
> > re-sync us with the kernel Kbuild again so that we can both stay in sync
> > again and have the validation targets / functionality available here
> > too.
> >
>
> Agree, the Kbuild changes to add dtbs_check was the first thing I
> implemented after importing devicetree-rebasing repo in u-boot (see
> commit [1] for details). Usage with PR [2] included:
>
> While building any u-boot target, just add make target: "dtbs_check"
> and you will see the DT schema checks being performed. Steps:
>
> $ make <target>_defconfig
> $ make -j`nproc` dtbs_check
>
> Currently there are a lot of incompatibility warnings I have seen for
> the platforms I built. This shows how much difficult it has been to
> keep DT in sync with upstream DT bindings.

The versions in the Linux tree generally still have lots of warnings
too. It's a mountain of warnings. The warnings get amplified when
there are N boards for 1 SoC. Some platforms are more active than
others to get rid of them. Newer platforms like Apple are warning free
(or nearly so). If you want an overview of the state of platforms, I
have a CI job[1] doing just that. Look at platform-warnings.log in the
artifacts. It does some deduplicating of the warnings. Linux-next and
Linus' master are built daily.

Fixing the warnings alone will not solve potential incompatibility
issues. The schemas can and do change (and in turn the dts files). We
try to catch that in review, but the rule is that the platform must be
okay with the ABI change (recent mistake, early stages, limited users,
etc.) and the commit message must spell out 'this is an ABI change'.
That's all manual and not easily identifiable. I'm working on a
tool[2] to compare versions of the schema to identify some ABI
changes.  Though it is limited by thinking of what schema changes are
ABI changes and my ability to write python code to parse those cases.
Right now it looks for new required properties, removed properties,
and changed number of entries. I'm interested in any ideas for other
checks.

Rob

[1] https://gitlab.com/robherring/linux-dt/-/jobs
[2] https://github.com/robherring/dt-schema/tree/abi-check