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