1/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * Configuration settings for the Allwinner A64 (sun50i) CPU
4 */
5
6#include <asm/arch/cpu.h>
7
8#if defined(CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER) && !defined(CONFIG_SPL_BUILD)
9/* reserve space for BOOT0 header information */
10	b	reset
11	.space	1532
12#elif defined(CONFIG_ARM_BOOT_HOOK_RMR)
13/*
14 * Switch into AArch64 if needed.
15 * Refer to arch/arm/mach-sunxi/rmr_switch.S for the original source.
16 */
17	tst     x0, x0                  // this is "b #0x84" in ARM
18	b       reset
19	.space  0x7c
20
21	.word	0xe28f0070	// add     r0, pc, #112	 // @(fel_stash - .)
22	.word	0xe59f106c	// ldr     r1, [pc, #108] // fel_stash - .
23	.word	0xe0800001	// add     r0, r0, r1
24	.word	0xe580d000	// str     sp, [r0]
25	.word	0xe580e004	// str     lr, [r0, #4]
26	.word	0xe10fe000	// mrs     lr, CPSR
27	.word	0xe580e008	// str     lr, [r0, #8]
28	.word	0xee11ef10	// mrc     15, 0, lr, cr1, cr0, {0}
29	.word	0xe580e00c	// str     lr, [r0, #12]
30	.word	0xee1cef10	// mrc     15, 0, lr, cr12, cr0, {0}
31	.word	0xe580e010	// str     lr, [r0, #16]
32
33	.word	0xe59f1034	// ldr     r1, [pc, #52] ; RVBAR_ADDRESS
34	.word	0xe59f0034	// ldr     r0, [pc, #52] ; SUNXI_SRAMC_BASE
35	.word	0xe5900024	// ldr     r0, [r0, #36] ; SRAM_VER_REG
36	.word	0xe21000ff	// ands    r0, r0, #255    ; 0xff
37	.word	0x159f102c	// ldrne   r1, [pc, #44] ; RVBAR_ALTERNATIVE
38	.word	0xe59f002c	// ldr     r0, [pc, #44] ; CONFIG_*TEXT_BASE
39	.word	0xe5810000	// str     r0, [r1]
40	.word	0xf57ff04f	// dsb     sy
41	.word	0xf57ff06f	// isb     sy
42	.word	0xee1c0f50	// mrc     15, 0, r0, cr12, cr0, {2} ; RMR
43	.word	0xe3800003	// orr     r0, r0, #3
44	.word	0xee0c0f50	// mcr     15, 0, r0, cr12, cr0, {2} ; RMR
45	.word	0xf57ff06f	// isb     sy
46	.word	0xe320f003	// wfi
47	.word	0xeafffffd	// b       @wfi
48
49	.word	CONFIG_SUNXI_RVBAR_ADDRESS	// writable RVBAR mapping addr
50	.word	SUNXI_SRAMC_BASE
51	.word	CONFIG_SUNXI_RVBAR_ALTERNATIVE	// address for die variant
52#ifdef CONFIG_SPL_BUILD
53	.word	CONFIG_SPL_TEXT_BASE
54#else
55	.word   CONFIG_TEXT_BASE
56#endif
57	.word	fel_stash - .
58#else
59/* normal execution */
60	b	reset
61#endif
62