| /* 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 |