[PATCH v3 5/9] board: qualcomm: Add support for dragonboard845c
Simon Glass
sjg at chromium.org
Mon Sep 11 01:14:57 CEST 2023
Hi Sumit,
On Tue, 29 Aug 2023 at 04:24, Sumit Garg <sumit.garg at linaro.org> wrote:
>
> Hi Simon,
>
> On Tue, 29 Aug 2023 at 03:39, Simon Glass <sjg at chromium.org> wrote:
> >
> > Hi Peter,
> >
> > On Mon, 28 Aug 2023 at 14:24, Peter Robinson <pbrobinson at gmail.com> wrote:
> > >
> > > On Mon, Aug 28, 2023 at 6:55 PM Simon Glass <sjg at chromium.org> wrote:
> > > >
> > > > Hi Sumit,
> > > >
> > > > On Thu, 24 Aug 2023 at 04:44, Sumit Garg <sumit.garg at linaro.org> wrote:
> > > > >
> > > > > Hi Simon,
> > > > >
> > > > > On Thu, 24 Aug 2023 at 05:29, Simon Glass <sjg at chromium.org> wrote:
> > > > > >
> > > > > > Hi Sumit,
> > > > > >
> > > > > > On Tue, 12 Jul 2022 at 01:12, Sumit Garg <sumit.garg at linaro.org> wrote:
> > > > > > >
> > > > > > > Add support for 96Boards Dragonboard 845C aka Robotics RB3 development
> > > > > > > platform. This board complies with 96Boards Open Platform Specifications.
> > > > > > >
> > > > > > > Features:
> > > > > > > - Qualcomm Snapdragon SDA845 SoC
> > > > > > > - 4GiB RAM
> > > > > > > - 64GiB UFS drive
> > > > > > >
> > > > > > > U-boot is chain loaded by ABL in 64-bit mode as part of boot.img.
> > > > > > > For detailed build and boot instructions, refer to
> > > > > > > doc/board/qualcomm/sdm845.rst, board: dragonboard845c.
> > > > > > >
> > > > > > > Signed-off-by: Sumit Garg <sumit.garg at linaro.org>
> > > > > > > Reviewed-by: Ramon Fried <rfried.dev at gmail.com>
> > > > > > > ---
> > > > > > > arch/arm/dts/dragonboard845c-uboot.dtsi | 37 +++++++
> > > > > > > arch/arm/dts/dragonboard845c.dts | 44 ++++++++
> > > > > > > arch/arm/mach-snapdragon/Kconfig | 14 +++
> > > > > > > board/qualcomm/dragonboard845c/Kconfig | 12 +++
> > > > > > > board/qualcomm/dragonboard845c/MAINTAINERS | 6 ++
> > > > > > > board/qualcomm/dragonboard845c/Makefile | 9 ++
> > > > > > > board/qualcomm/dragonboard845c/db845c.its | 63 +++++++++++
> > > > > > > .../dragonboard845c/dragonboard845c.c | 9 ++
> > > > > > > configs/dragonboard845c_defconfig | 28 +++++
> > > > > > > doc/board/qualcomm/sdm845.rst | 100 +++++++++++++++---
> > > > > > > include/configs/dragonboard845c.h | 28 +++++
> > > > > > > 11 files changed, 337 insertions(+), 13 deletions(-)
> > > > > > > create mode 100644 arch/arm/dts/dragonboard845c-uboot.dtsi
> > > > > > > create mode 100644 arch/arm/dts/dragonboard845c.dts
> > > > > > > create mode 100644 board/qualcomm/dragonboard845c/Kconfig
> > > > > > > create mode 100644 board/qualcomm/dragonboard845c/MAINTAINERS
> > > > > > > create mode 100644 board/qualcomm/dragonboard845c/Makefile
> > > > > > > create mode 100644 board/qualcomm/dragonboard845c/db845c.its
> > > > > > > create mode 100644 board/qualcomm/dragonboard845c/dragonboard845c.c
> > > > > > > create mode 100644 configs/dragonboard845c_defconfig
> > > > > > > create mode 100644 include/configs/dragonboard845c.h
> > > > > > >
> > > > > > [..]
> > > > > >
> > > > > > > diff --git a/doc/board/qualcomm/sdm845.rst b/doc/board/qualcomm/sdm845.rst
> > > > > > > index b6642c9579..8ef4749287 100644
> > > > > > > --- a/doc/board/qualcomm/sdm845.rst
> > > > > > > +++ b/doc/board/qualcomm/sdm845.rst
> > > > > > > @@ -35,9 +35,25 @@ Pack android boot image
> > > > > > > ^^^^^^^^^^^^^^^^^^^^^^^
> > > > > > > We'll assemble android boot image with ``u-boot.bin`` instead of linux kernel,
> > > > > > > and FIT image instead of ``initramfs``. Android bootloader expect gzipped kernel
> > > > > > > -with appended dtb, so let's mimic linux to satisfy stock bootloader:
> > > > > > > +with appended dtb, so let's mimic linux to satisfy stock bootloader.
> > > > > > >
> > > > > >
> > > > > > [..]
> > > > > >
> > > > > > > +The dragonboard845c is a Qualcomm Robotics RB3 Development Platform, based on
> > > > > > > +the Qualcomm SDM845 SoC.
> > > > > > > +
> > > > > > > +Steps:
> > > > > > > +
> > > > > > > +- Build u-boot::
> > > > > > > +
> > > > > > > + $ export CROSS_COMPILE=<aarch64 toolchain prefix>
> > > > > > > + $ make dragonboard845c_defconfig
> > > > > > > + $ make
> > > > > > > +
> > > > > > > +- Create dummy dtb::
> > > > > > > +
> > > > > > > + workdir=/tmp/prepare_payload
> > > > > > > + mkdir -p "$workdir"
> > > > > > > + mock_dtb="$workdir"/payload_mock.dtb
> > > > > > > +
> > > > > > > + dtc -I dts -O dtb -o "$mock_dtb" << EOF
> > > > > > > + /dts-v1/;
> > > > > > > + / {
> > > > > > > + #address-cells = <2>;
> > > > > > > + #size-cells = <2>;
> > > > > > > +
> > > > > > > + memory at 80000000 {
> > > > > > > + device_type = "memory";
> > > > > > > + /* We expect the bootloader to fill in the size */
> > > > > > > + reg = <0 0x80000000 0 0>;
> > > > > > > + };
> > > > > > > +
> > > > > > > + chosen { };
> > > > > > > + };
> > > > > > > + EOF
> > > > > > > +
> > > > > > > +- gzip u-boot::
> > > > > > > +
> > > > > > > + gzip u-boot.bin
> > > > > > > +
> > > > > > > +- Append dtb to gzipped u-boot::
> > > > > > > +
> > > > > > > + cat u-boot.bin.gz "$mock_dtb" > u-boot.bin.gz-dtb
> > > > > > > +
> > > > > > > +- A ``db845c.its`` file can be found in ``board/qualcomm/dragonboard845c/``
> > > > > > > + directory. It expects a folder as ``db845c_imgs/`` in the main directory
> > > > > > > + containing pre-built kernel, dts and ramdisk images. See ``db845c.its``
> > > > > > > + for full path to images::
> > > > > > > +
> > > > > > > + mkimage -f db845c.its db845c.itb
> > > > > > > +
> > > > > > > +- Now we've got everything to build android boot image::
> > > > > > > +
> > > > > > > + mkbootimg --kernel u-boot.bin.gz-dtb --ramdisk db845c.itb \
> > > > > > > + --output boot.img --pagesize 4096 --base 0x80000000
> > > > > > > +
> > > > > > > +- Flash boot.img using db845c fastboot method.
> > > > > >
> > > > > > What command should be used here? I can run 'fastboot devices' but am
> > > > > > not sure what command to use to flash U-Boot.
> > > > > >
> > > > >
> > > > > At the time of writing this doc, I thought it was understood how to
> > > > > flash boot.img on db845c. But I will make that more explicit. Since
> > > > > u-boot has to be chain loaded by ABL, the command to flash boot.img
> > > > > (containing u-boot) is as follows:
> > > > >
> > > > > sudo fastboot flash boot boot.img
> > > > >
> > > > > > Also, is it possible to flash U-Boot as a first-stage bootloader?
> > > > > >
> > > > >
> > > > > That's not possible currently due to Qcom proprietary bootloader being
> > > > > used. But there were plans to replace atleast ABL with u-boot (See
> > > > > slide 9 from this Linaro connect Qcom keynote [1]). I hope that will
> > > > > materialize soon.
> > > > >
> > > > > [1] https://resources.linaro.org/en/resource/necH5bQcfrhCCkjSGHXJyA
> > > > >
> > > >
> > > > Thank you for the link. I am pleased to hear it and hope it plays out
> > > > as that slide seems to indicate.
> > > >
> > > > I would like to suggest that 96 boards should use open-source firmware
> > > > when they launch. Once they launch there is little incentive to clean
> > > > things up.
> > >
> > > It's something that has been suggested from the outset but the fact is
> > > there is no way to enforce it.
> >
> > Er, the board is listed on Linaros web site and has presumably been
> > blessed by Linaro. So don't bless it until the patches are send and/or
> > landed?
>
> I see the reasoning behind your thoughts but I would suggest you read
> through [1]. It should provide you with enough background thinking.
>
> [1] https://www.96boards.org/compliance/
"It is recommended that all documentation required under the 96Boards
program for the board and SoC be freely available from the 96Boards
website. Any documentation that cannot be provided from the 96Boards
website shall be available from a vendor or other public website that
can be linked to from the 96Boards website."
So are the SoC docs available for this board?
"It is strongly recommended one open source bootloader to be provided
for the board that executes immediately after the internal SoC startup
code. The source for this bootloader should be available from a
publicly accessible site or integrated into the bootloader trees
onhttps://github.com/96boards"
My reading of this is that an open source bootloader is optional.
Would it not make sense to make it mandatory?
"It is strongly recommended that vendors of an ARMv8 board provide a
port of the ARM Trusted Firmware (ATF) and PSCI reference
implementations, and a port of the Tianocore EDK2 UEFI reference
implementation."
Why suggest a UEFI port? Wouldn't suggesting U-Boot be a lot more
useful in terms of building the open source community?
Regards,
Simon
More information about the U-Boot
mailing list