diff options
author | Stephen Warren <swarren@wwwdotorg.org> | 2016-04-02 03:14:15 (GMT) |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2016-04-11 16:44:38 (GMT) |
commit | d22a765755ba318ce162a976f51d44000a201394 (patch) | |
tree | d259579e9edc7c8ff8f90c73dc44658c3c8a41d6 /include/configs | |
parent | 7439b4399b14242e6c41b86734baa3fe31c4517f (diff) | |
download | u-boot-d22a765755ba318ce162a976f51d44000a201394.tar.xz |
ARM: add Raspberry Pi 3 64-bit config
On all Pis so far, the VC FW provides a short stub to set up the ARM CPU
before entering the kernel (a/k/a U-Boot for us). This feature is not
currently supported by the VC FW when booting in 64-bit mode. However,
this feature will likely appear in the near future, and this U-Boot port
assumes that such a feature is in place. Without that feature, or a
temporary workaround described below, U-Boot will not boot.
Once the VC FW does provide the ARM stub, u-boot.bin built for rpi_3 can
be used drectly as kernel7.img, in the same way as any other RPi port. The
following config.txt is required:
# Fix mini UART input frequency, and setup/enable up the UART.
# Without this option, U-Boot will not boot, even if you don't care
# about the serial console. This option will always be required for
# all RPi3 use-cases, unless the PL011 UART is used, which is not
# yet supported by rpi_3* builds of U-Boot.
enable_uart=1
# Boot in AArch64 (64-bit) mode.
# It is possible that a future VC FW will remove the need for this
# option, instead auto-setting 32-/64-bit mode based on the "kernel"
# filename present on the SD card.
arm_control=0x200
Prior to the VC FW providing the ARM boot stub, you can use the following
steps to build an equivalent stub into the U-Boot binary:
git clone https://github.com/swarren/rpi-3-aarch64-demo.git \
../rpi-3-aarch64-demo
(cd ../rpi-3-aarch64-demo && ./build.sh)
Build U-Boot for rpi_3 in the usual way
cat ../rpi-3-aarch64-demo/armstub64.bin u-boot.bin > u-boot.bin.stubbed
Use u-boot.bin.stubbed as kernel7.img on the Pi SD card.
In this case, the following additional entries are required in config.txt:
# Tell the FW to load the kernel image at address 0, the reset vector.
kernel_old=1
Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
Reviewed-by: Tom Rini <trini@konsulko.com>
Diffstat (limited to 'include/configs')
-rw-r--r-- | include/configs/rpi-common.h | 3 | ||||
-rw-r--r-- | include/configs/rpi_3.h | 14 |
2 files changed, 17 insertions, 0 deletions
diff --git a/include/configs/rpi-common.h b/include/configs/rpi-common.h index 5904a32..645c361 100644 --- a/include/configs/rpi-common.h +++ b/include/configs/rpi-common.h @@ -13,9 +13,12 @@ /* Architecture, CPU, etc.*/ #define CONFIG_ARCH_CPU_INIT +/* Use SoC timer for AArch32, but architected timer for AArch64 */ +#ifndef CONFIG_ARM64 #define CONFIG_SYS_TIMER_RATE 1000000 #define CONFIG_SYS_TIMER_COUNTER \ (&((struct bcm2835_timer_regs *)BCM2835_TIMER_PHYSADDR)->clo) +#endif /* * 2835 is a SKU in a series for which the 2708 is the first or primary SoC, diff --git a/include/configs/rpi_3.h b/include/configs/rpi_3.h new file mode 100644 index 0000000..0dd9e7e --- /dev/null +++ b/include/configs/rpi_3.h @@ -0,0 +1,14 @@ +/* + * (C) Copyright 2012-2016 Stephen Warren <swarren@wwwdotorg.org> + * + * SPDX-License-Identifier: GPL-2.0 + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +#define CONFIG_SYS_CACHELINE_SIZE 64 + +#include "rpi-common.h" + +#endif |