summaryrefslogtreecommitdiff
path: root/doc/board/qualcomm/sdm845.rst
blob: d3f218e835e0ee29a8855dbad4664bfae1bc0d1e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
.. SPDX-License-Identifier: GPL-2.0+
.. sectionauthor:: Dzmitry Sankouski <dsankouski@gmail.com>

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=<aarch64 toolchain prefix>
	$ make <your board name here, see Boards section>_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=<aarch64 toolchain prefix>
	$ 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=<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:

  .. code-block:: bash

      sudo fastboot flash boot boot.img

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/