/* SPDX-License-Identifier: GPL-2.0-only */ /* * EFI entry point. * * Copyright (C) 2013, 2014 Red Hat, Inc. * Author: Mark Salter */ #include #include SYM_CODE_START(efi_enter_kernel) /* * efi_pe_entry() will have copied the kernel image if necessary and we * end up here with device tree address in x1 and the kernel entry * point stored in x0. Save those values in registers which are * callee preserved. */ ldr w2, =primary_entry_offset add x19, x0, x2 // relocated Image entrypoint mov x0, x1 // DTB address mov x1, xzr mov x2, xzr mov x3, xzr /* * Clean the remainder of this routine to the PoC * so that we can safely disable the MMU and caches. */ adr x4, 1f dc civac, x4 dsb sy /* Turn off Dcache and MMU */ mrs x4, CurrentEL cmp x4, #CurrentEL_EL2 mrs x4, sctlr_el1 b.ne 0f mrs x4, sctlr_el2 0: bic x4, x4, #SCTLR_ELx_M bic x4, x4, #SCTLR_ELx_C b.eq 1f b 2f .balign 32 1: pre_disable_mmu_workaround msr sctlr_el2, x4 isb br x19 // jump to kernel entrypoint 2: pre_disable_mmu_workaround msr sctlr_el1, x4 isb br x19 // jump to kernel entrypoint .org 1b + 32 SYM_CODE_END(efi_enter_kernel)