xref: /OK3568_Linux_fs/u-boot/arch/arm/cpu/armv7/sunxi/fel_utils.S (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun/*
2*4882a593Smuzhiyun * Utility functions for FEL mode.
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * Copyright (c) 2015 Google, Inc
5*4882a593Smuzhiyun *
6*4882a593Smuzhiyun * SPDX-License-Identifier:	GPL-2.0+
7*4882a593Smuzhiyun */
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun#include <asm-offsets.h>
10*4882a593Smuzhiyun#include <config.h>
11*4882a593Smuzhiyun#include <asm/system.h>
12*4882a593Smuzhiyun#include <linux/linkage.h>
13*4882a593Smuzhiyun
14*4882a593SmuzhiyunENTRY(save_boot_params)
15*4882a593Smuzhiyun	ldr	r0, =fel_stash
16*4882a593Smuzhiyun	str	sp, [r0, #0]
17*4882a593Smuzhiyun	str	lr, [r0, #4]
18*4882a593Smuzhiyun	mrs	lr, cpsr		@ Read CPSR
19*4882a593Smuzhiyun	str	lr, [r0, #8]
20*4882a593Smuzhiyun	mrc	p15, 0, lr, c1, c0, 0	@ Read CP15 SCTLR Register
21*4882a593Smuzhiyun	str	lr, [r0, #12]
22*4882a593Smuzhiyun	mrc	p15, 0, lr, c12, c0, 0	@ Read VBAR
23*4882a593Smuzhiyun	str	lr, [r0, #16]
24*4882a593Smuzhiyun	mrc	p15, 0, lr, c1, c0, 0	@ Read CP15 Control Register
25*4882a593Smuzhiyun	str	lr, [r0, #20]
26*4882a593Smuzhiyun	b	save_boot_params_ret
27*4882a593SmuzhiyunENDPROC(save_boot_params)
28*4882a593Smuzhiyun
29*4882a593SmuzhiyunENTRY(return_to_fel)
30*4882a593Smuzhiyun	mov	sp, r0
31*4882a593Smuzhiyun	mov	lr, r1
32*4882a593Smuzhiyun	ldr	r0, =fel_stash
33*4882a593Smuzhiyun	ldr	r1, [r0, #20]
34*4882a593Smuzhiyun	mcr	p15, 0, r1, c1, c0, 0	@ Write CP15 Control Register
35*4882a593Smuzhiyun	ldr	r1, [r0, #16]
36*4882a593Smuzhiyun	mcr	p15, 0, r1, c12, c0, 0	@ Write VBAR
37*4882a593Smuzhiyun	ldr	r1, [r0, #12]
38*4882a593Smuzhiyun	mcr	p15, 0, r1, c1, c0, 0	@ Write CP15 SCTLR Register
39*4882a593Smuzhiyun	ldr	r1, [r0, #8]
40*4882a593Smuzhiyun	msr	cpsr, r1		@ Write CPSR
41*4882a593Smuzhiyun	bx	lr
42*4882a593SmuzhiyunENDPROC(return_to_fel)
43