75 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
/* SPDX-License-Identifier: GPL-2.0+ */
 | 
						|
/*
 | 
						|
 * Copyright 2017 NXP
 | 
						|
 */
 | 
						|
 | 
						|
#include <config.h>
 | 
						|
 | 
						|
.align 4
 | 
						|
.global rom_pointer
 | 
						|
rom_pointer:
 | 
						|
	.space 256
 | 
						|
 | 
						|
/*
 | 
						|
 * Routine: save_boot_params (called after reset from start.S)
 | 
						|
 */
 | 
						|
 | 
						|
.global save_boot_params
 | 
						|
save_boot_params:
 | 
						|
	/* The firmware provided ATAG/FDT address can be found in r2/x0 */
 | 
						|
	adr	x0, rom_pointer
 | 
						|
	stp	x1, x2, [x0], #16
 | 
						|
	stp	x3, x4, [x0], #16
 | 
						|
	stp	x5, x6, [x0], #16
 | 
						|
	stp	x7, x8, [x0], #16
 | 
						|
	stp	x9, x10, [x0], #16
 | 
						|
	stp	x11, x12, [x0], #16
 | 
						|
	stp	x13, x14, [x0], #16
 | 
						|
	stp	x15, x16, [x0], #16
 | 
						|
	stp	x17, x18, [x0], #16
 | 
						|
	stp	x19, x20, [x0], #16
 | 
						|
	stp	x21, x22, [x0], #16
 | 
						|
	stp	x23, x24, [x0], #16
 | 
						|
	stp	x25, x26, [x0], #16
 | 
						|
	stp	x27, x28, [x0], #16
 | 
						|
	stp	x29, x30, [x0], #16
 | 
						|
	mov	x30, sp
 | 
						|
	str	x30, [x0], #8
 | 
						|
 | 
						|
	/* Returns */
 | 
						|
	b	save_boot_params_ret
 | 
						|
 | 
						|
.global restore_boot_params
 | 
						|
restore_boot_params:
 | 
						|
	adr	x0, rom_pointer
 | 
						|
	ldp	x1, x2, [x0], #16
 | 
						|
	ldp	x3, x4, [x0], #16
 | 
						|
	ldp	x5, x6, [x0], #16
 | 
						|
	ldp	x7, x8, [x0], #16
 | 
						|
	ldp	x9, x10, [x0], #16
 | 
						|
	ldp	x11, x12, [x0], #16
 | 
						|
	ldp	x13, x14, [x0], #16
 | 
						|
	ldp	x15, x16, [x0], #16
 | 
						|
	ldp	x17, x18, [x0], #16
 | 
						|
	ldp	x19, x20, [x0], #16
 | 
						|
	ldp	x21, x22, [x0], #16
 | 
						|
	ldp	x23, x24, [x0], #16
 | 
						|
	ldp	x25, x26, [x0], #16
 | 
						|
	ldp	x27, x28, [x0], #16
 | 
						|
	ldp	x29, x30, [x0], #16
 | 
						|
	ldr	x0, [x0]
 | 
						|
	mov	sp, x0
 | 
						|
	ret
 | 
						|
 | 
						|
.global armv8_el2_to_aarch32
 | 
						|
armv8_el2_to_aarch32:
 | 
						|
	cmp     x0, #0
 | 
						|
	bne     0f
 | 
						|
	mov     x3, x2
 | 
						|
	mov     x2, x1
 | 
						|
	mov     x1, x4
 | 
						|
	ldr x0, =0xc20000fd
 | 
						|
0:
 | 
						|
	smc #0
 | 
						|
	ret
 |