.. SPDX-License-Identifier: GPL-2.0+ .. sectionauthor:: Dzmitry Sankouski Snapdragon 845 ================ About this ---------- This document describes the information about Qualcomm Snapdragon 845 supported boards and it's usage steps. SDM845 - hi-end qualcomm chip, introduced in late 2017. Mostly used in flagship phones and tablets of 2018. The current boot flow support loading u-boot as an Android boot image via Qualcomm's UEFI-based ABL (Android) Bootloader. Installation ------------ Build ^^^^^ Setup ``CROSS_COMPILE`` for aarch64 and build U-Boot for your board:: $ export CROSS_COMPILE= $ make _defconfig $ make This will build ``u-boot.bin`` in the configured output directory. Generate FIT image ^^^^^^^^^^^^^^^^^^ See doc/uImage.FIT for more details 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. Boards ------------ starqlte ^^^^^^^^^^^^ The starqltechn is a production board for Samsung S9 (SM-G9600) phone, based on the Qualcomm SDM845 SoC. Steps: - Build u-boot:: $ export CROSS_COMPILE= $ make starqltechn_defconfig $ make - Create dump dtb:: workdir=/tmp/prepare_payload mkdir -p "$workdir" cd "$workdir" mock_dtb="$workdir"/payload_mock.dtb dtc -I dts -O dtb -o "$mock_dtb" << EOF /dts-v1/; / { memory { /* We expect the bootloader to fill in the size */ reg = <0 0 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 - Now we've got everything to build android boot image:: mkbootimg --base 0x0 --kernel_offset 0x00008000 \ --ramdisk_offset 0x02000000 --tags_offset 0x01e00000 \ --pagesize 4096 --second_offset 0x00f00000 \ --ramdisk "$fit_image" \ --kernel u-boot.bin.gz-dtb \ -o boot.img - Flash image with your phone's flashing method. More information can be found on the `Samsung S9 page`_. dragonboard845c ^^^^^^^^^^^^^^^ The dragonboard845c is a Qualcomm Robotics RB3 Development Platform, based on the Qualcomm SDM845 SoC. Steps: - Build u-boot:: $ export CROSS_COMPILE= $ 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@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. More information can be found on the `DragonBoard 845c page`_. .. _Samsung S9 page: https://en.wikipedia.org/wiki/Samsung_Galaxy_S9 .. _DragonBoard 845c page: https://www.96boards.org/product/rb3-platform/