board: qualcomm: Add support for dragonboard845c

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@linaro.org>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
This commit is contained in:
Sumit Garg 2022-07-12 12:42:08 +05:30 committed by Tom Rini
parent f5ed6c9ccf
commit d35b211374
11 changed files with 332 additions and 14 deletions

View file

@ -0,0 +1,37 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* U-Boot addition to handle Qualcomm Robotics RB3 Development Platform
* (dragonboard845c) pins
*
* (C) Copyright 2022 Sumit Garg <sumit.garg@linaro.org>
*/
/
{
soc {
u-boot,dm-pre-reloc;
serial@a84000 {
u-boot,dm-pre-reloc;
};
clock-controller@100000 {
u-boot,dm-pre-reloc;
};
pinctrl_north@3900000 {
u-boot,dm-pre-reloc;
};
};
};
&pm8998_pon {
key_vol_down {
gpios = <&pm8998_pon 1 0>;
label = "key_vol_down";
};
key_power {
gpios = <&pm8998_pon 0 0>;
label = "key_power";
};
};

View file

@ -0,0 +1,44 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Qualcomm Robotics RB3 Development (dragonboard845c) board device
* tree source
*
* (C) Copyright 2022 Sumit Garg <sumit.garg@linaro.org>
*/
/dts-v1/;
#include "sdm845.dtsi"
/ {
model = "Thundercomm Dragonboard 845c";
compatible = "thundercomm,db845c", "qcom,sdm845";
#address-cells = <2>;
#size-cells = <2>;
chosen {
stdout-path = "serial0:115200n8";
};
aliases {
serial0 = &debug_uart;
};
memory {
device_type = "memory";
reg = <0 0x80000000 0 0xfdfa0000>;
};
psci {
compatible = "arm,psci-1.0";
method = "smc";
};
soc: soc {
serial@a84000 {
status = "okay";
};
};
};
#include "dragonboard845c-uboot.dtsi"

View file

@ -44,6 +44,19 @@ config TARGET_DRAGONBOARD820C
- 3GiB RAM
- 32GiB UFS drive
config TARGET_DRAGONBOARD845C
bool "96Boards Dragonboard 845C"
help
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
select MISC_INIT_R
select SDM845
select DM_ETH if NET
config TARGET_STARQLTECHN
bool "Samsung S9 SM-G9600(starqltechn)"
help
@ -60,6 +73,7 @@ endchoice
source "board/qualcomm/dragonboard410c/Kconfig"
source "board/qualcomm/dragonboard820c/Kconfig"
source "board/qualcomm/dragonboard845c/Kconfig"
source "board/samsung/starqltechn/Kconfig"
endif

View file

@ -0,0 +1,12 @@
if TARGET_DRAGONBOARD845C
config SYS_BOARD
default "dragonboard845c"
config SYS_CONFIG_NAME
default "dragonboard845c"
config SYS_VENDOR
default "qualcomm"
endif

View file

@ -0,0 +1,6 @@
Qualcomm Robotics RB3 Development Platform (dragonboard845c)
M: Sumit Garg <sumit.garg@linaro.org>
S: Maintained
F: board/qualcomm/dragonboard845c/
F: include/configs/dragonboard845c.h
F: configs/dragonboard845c_defconfig

View file

@ -0,0 +1,9 @@
# SPDX-License-Identifier: GPL-2.0+
#
# (C) Copyright 2022 Sumit Garg <sumit.garg@linaro.org>
#
# This empty file prevents make error.
# Board logic defined in board/qualcomm/common/sdm845.c, no custom logic for dragonboard845c so far.
#
obj-y += dragonboard845c.o

View file

@ -0,0 +1,63 @@
/*
* U-Boot uImage source file with multiple kernels, ramdisks and FDT blobs
*/
/dts-v1/;
/ {
description = "Various kernels, ramdisks and FDT blobs";
#address-cells = <1>;
images {
kernel-1 {
description = "5.15.0-qcomlt-arm64";
data = /incbin/("./db845c_imgs/Image.gz--5.15-r0-dragonboard-845c-20211218193034-511.bin");
type = "kernel";
arch = "arm64";
os = "linux";
compression = "gzip";
load = <0x80000000>;
entry = <0x80000000>;
hash-1 {
algo = "sha1";
};
};
ramdisk-1 {
description = "initramfs-test-full-image-dragonboard-845c";
data = /incbin/("./db845c_imgs/initramfs-test-full-image-dragonboard-845c-20211218193034-511.rootfs.cpio.gz");
type = "ramdisk";
arch = "arm64";
os = "linux";
compression = "gzip";
load = <00000000>;
entry = <00000000>;
hash-1 {
algo = "sha1";
};
};
fdt-1 {
description = "sdm845-db845c-fdt";
data = /incbin/("./db845c_imgs/sdm845-db845c--5.15-r0-dragonboard-845c-20211218193034.dtb");
type = "flat_dt";
arch = "arm64";
compression = "none";
hash-1 {
algo = "sha1";
};
};
};
configurations {
default = "config-1";
config-1 {
description = "db845c kernel-5.15.0 configuration";
kernel = "kernel-1";
ramdisk = "ramdisk-1";
fdt = "fdt-1";
};
};
};

View file

@ -0,0 +1,9 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* This empty file prevents make linking error.
* No custom logic for dragonboard845c so far.
*
* (C) Copyright 2022 Sumit Garg <sumit.garg@linaro.org>
*/
void noop(void) {}

View file

@ -0,0 +1,29 @@
CONFIG_ARM=y
CONFIG_SKIP_LOWLEVEL_INIT=y
CONFIG_COUNTER_FREQUENCY=19000000
CONFIG_POSITION_INDEPENDENT=y
CONFIG_ARCH_SNAPDRAGON=y
CONFIG_DEFAULT_DEVICE_TREE="dragonboard845c"
CONFIG_TARGET_DRAGONBOARD845C=y
CONFIG_IDENT_STRING="\nQualcomm-DragonBoard 845C"
CONFIG_SYS_LOAD_ADDR=0x80000000
CONFIG_FIT=y
CONFIG_FIT_VERBOSE=y
CONFIG_BOOTDELAY=5
CONFIG_SAVE_PREV_BL_FDT_ADDR=y
CONFIG_SAVE_PREV_BL_INITRAMFS_START_ADDR=y
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_HUSH_PARSER=y
CONFIG_SYS_MAXARGS=64
CONFIG_SYS_CBSIZE=512
CONFIG_CMD_GPIO=y
# CONFIG_NET is not set
CONFIG_CLK=y
CONFIG_MSM_GPIO=y
CONFIG_PM8916_GPIO=y
CONFIG_PINCTRL=y
CONFIG_DM_PMIC=y
CONFIG_PMIC_PM8916=y
CONFIG_MSM_GENI_SERIAL=y
CONFIG_SPMI_MSM=y
CONFIG_LMB_MAX_REGIONS=64

View file

@ -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.
- create dump dtb::
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=<aarch64 toolchain prefix>
$ make starqltechn_defconfig
$ make
- Create dump dtb::
workdir=/tmp/prepare_payload
mkdir -p "$workdir"
@ -56,10 +72,15 @@ with appended dtb, so let's mimic linux to satisfy stock bootloader:
};
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``
- gzip u-boot::
Now we've got everything to build android boot image:::
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 \
@ -68,16 +89,69 @@ Now we've got everything to build android boot image:::
--kernel u-boot.bin.gz-dtb \
-o boot.img
Flash image with your phone's flashing method.
Boards
------------
starqlte
^^^^^^^^^^^^
The starqltechn is a production board for Samsung S9 (SM-G9600) phone,
based on the Qualcomm SDM845 SoC.
- 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=<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@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/

View file

@ -0,0 +1,21 @@
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* Configuration file for Dragonboard 845c, based on Qualcomm SDA845 chip
*
* (C) Copyright 2022 Sumit Garg <sumit.garg@linaro.org>
*/
#ifndef __CONFIGS_SDM845_H
#define __CONFIGS_SDM845_H
#include <linux/sizes.h>
#include <asm/arch/sysmap-sdm845.h>
#define CONFIG_SYS_BAUDRATE_TABLE { 115200, 230400, 460800, 921600 }
#define CONFIG_EXTRA_ENV_SETTINGS \
"bootm_size=0x5000000\0" \
"bootm_low=0x80000000\0" \
"bootcmd=bootm $prevbl_initrd_start_addr\0"
#endif