sunxi: A64: do an RMR switch if started in AArch32 mode
[oweals/u-boot.git] / board / sunxi / Kconfig
index 79f644a935b84128569af5fa59842445f53c8bcd..f02057386558aa90e2facb551cc0929d5a6795ac 100644 (file)
@@ -1,5 +1,11 @@
 if ARCH_SUNXI
 
+config IDENT_STRING
+       default " Allwinner Technology"
+
+config PRE_CONSOLE_BUFFER
+       default y
+
 config SPL_GPIO_SUPPORT
        default y
 
@@ -113,6 +119,7 @@ config MACH_SUN9I
        bool "sun9i (Allwinner A80)"
        select CPU_V7
        select SUNXI_GEN_SUN6I
+       select SUPPORT_SPL
 
 config MACH_SUN50I
        bool "sun50i (Allwinner A64)"
@@ -126,6 +133,29 @@ config MACH_SUN8I
        bool
        default y if MACH_SUN8I_A23 || MACH_SUN8I_A33 || MACH_SUN8I_H3 || MACH_SUN8I_A83T
 
+config RESERVE_ALLWINNER_BOOT0_HEADER
+       bool "reserve space for Allwinner boot0 header"
+       select ENABLE_ARM_SOC_BOOT0_HOOK
+       ---help---
+       Prepend a 1536 byte (empty) header to the U-Boot image file, to be
+       filled with magic values post build. The Allwinner provided boot0
+       blob relies on this information to load and execute U-Boot.
+       Only needed on 64-bit Allwinner boards so far when using boot0.
+
+config ARM_BOOT_HOOK_RMR
+       bool
+       depends on ARM64
+       default y
+       select ENABLE_ARM_SOC_BOOT0_HOOK
+       ---help---
+       Insert some ARM32 code at the very beginning of the U-Boot binary
+       which uses an RMR register write to bring the core into AArch64 mode.
+       The very first instruction acts as a switch, since it's carefully
+       chosen to be a NOP in one mode and a branch in the other, so the
+       code would only be executed if not already in AArch64.
+       This allows both the SPL and the U-Boot proper to be entered in
+       either mode and switch to AArch64 if needed.
+
 config DRAM_TYPE
        int "sunxi dram type"
        depends on MACH_SUN8I_A83T
@@ -135,11 +165,13 @@ config DRAM_TYPE
 
 config DRAM_CLK
        int "sunxi dram clock speed"
+       default 792 if MACH_SUN9I
        default 312 if MACH_SUN6I || MACH_SUN8I
        default 360 if MACH_SUN4I || MACH_SUN5I || MACH_SUN7I
        ---help---
-       Set the dram clock speed, valid range 240 - 480, must be a multiple
-       of 24.
+       Set the dram clock speed, valid range 240 - 480 (prior to sun9i),
+       must be a multiple of 24. For the sun9i (A80), the tested values
+       (for DDR3-1600) are 312 to 792.
 
 if MACH_SUN5I || MACH_SUN7I
 config DRAM_MBUS_CLK
@@ -154,6 +186,7 @@ config DRAM_ZQ
        int "sunxi dram zq value"
        default 123 if MACH_SUN4I || MACH_SUN5I || MACH_SUN6I || MACH_SUN8I
        default 127 if MACH_SUN7I
+       default 4145117 if MACH_SUN9I
        ---help---
        Set the dram zq value.
 
@@ -246,7 +279,7 @@ endif
 config SYS_CLK_FREQ
        default 816000000 if MACH_SUN50I
        default 912000000 if MACH_SUN7I
-       default 1008000000 if MACH_SUN4I || MACH_SUN5I || MACH_SUN6I || MACH_SUN8I
+       default 1008000000 if MACH_SUN4I || MACH_SUN5I || MACH_SUN6I || MACH_SUN8I || MACH_SUN9I
 
 config SYS_CONFIG_NAME
        default "sun4i" if MACH_SUN4I