blob: 80498f6f6b8e4fe8e9b71ce73df2a9f54c4930b9 [file] [log] [blame]
Bin Meng76e4b3b2019-07-18 00:34:27 -07001.. SPDX-License-Identifier: GPL-2.0+
2
3ARM64
4=====
David Feng0ae76532013-12-14 11:47:35 +08005
6Summary
Bin Meng76e4b3b2019-07-18 00:34:27 -07007-------
Andre Przywara8add6792016-11-03 01:01:50 +00008The initial arm64 U-Boot port was developed before hardware was available,
9so the first supported platforms were the Foundation and Fast Model for ARMv8.
10These days U-Boot runs on a variety of 64-bit capable ARM hardware, from
11embedded development boards to servers.
David Feng0ae76532013-12-14 11:47:35 +080012
13Notes
Bin Meng76e4b3b2019-07-18 00:34:27 -070014-----
David Feng0ae76532013-12-14 11:47:35 +080015
Andre Przywara8add6792016-11-03 01:01:50 +0000161. U-Boot can run at any exception level it is entered in, it is
17 recommened to enter it in EL3 if U-Boot takes some responsibilities of a
18 classical firmware (like initial hardware setup, CPU errata workarounds
19 or SMP bringup). U-Boot can be entered in EL2 when its main purpose is
20 that of a boot loader. It can drop to lower exception levels before
21 entering the OS.
David Feng0ae76532013-12-14 11:47:35 +080022
Bin Menga1875592016-02-05 19:30:11 -0800232. U-Boot for arm64 is compiled with AArch64-gcc. AArch64-gcc
David Feng0ae76532013-12-14 11:47:35 +080024 use rela relocation format, a tool(tools/relocate-rela) by Scott Wood
25 is used to encode the initial addend of rela to u-boot.bin. After running,
Bin Menga1875592016-02-05 19:30:11 -080026 the U-Boot will be relocated to destination again.
David Feng0ae76532013-12-14 11:47:35 +080027
Andre Przywara8add6792016-11-03 01:01:50 +0000283. Earlier Linux kernel versions required the FDT to be placed at a
29 2 MB boundary and within the same 512 MB section as the kernel image,
30 resulting in fdt_high to be defined specially.
31 Since kernel version 4.2 Linux is more relaxed about the DT location, so it
32 can be placed anywhere in memory.
David Feng0ae76532013-12-14 11:47:35 +080033 Please reference linux/Documentation/arm64/booting.txt for detail.
34
354. Spin-table is used to wake up secondary processors. One location
36 (or per processor location) is defined to hold the kernel entry point
37 for secondary processors. It must be ensured that the location is
38 accessible and zero immediately after secondary processor
39 enter slave_cpu branch execution in start.S. The location address
40 is encoded in cpu node of DTS. Linux kernel store the entry point
41 of secondary processors to it and send event to wakeup secondary
42 processors.
43 Please reference linux/Documentation/arm64/booting.txt for detail.
44
455. Generic board is supported.
46
476. CONFIG_ARM64 instead of CONFIG_ARMV8 is used to distinguish aarch64 and
48 aarch32 specific codes.
49
Sergey Temerkhanov94f7ff32015-10-14 09:55:45 -070050
Andre Przywara8add6792016-11-03 01:01:50 +000051Contributors
Bin Meng76e4b3b2019-07-18 00:34:27 -070052------------
53 * Tom Rini <trini@ti.com>
54 * Scott Wood <scottwood@freescale.com>
55 * York Sun <yorksun@freescale.com>
56 * Simon Glass <sjg@chromium.org>
57 * Sharma Bhupesh <bhupesh.sharma@freescale.com>
58 * Rob Herring <robherring2@gmail.com>
59 * Sergey Temerkhanov <s.temerkhanov@gmail.com>