mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 21:57:43 +00:00
1f42faf1d2
To be consistent with other functions with similar names and functionality in cacheflush.h, cache.S, and cachetlb.rst, change to specify the range in terms of start and end, as opposed to start and size. Because the code is shared with __dma_clean_area, it changes the parameters for that as well. However, __dma_clean_area is local to cache.S, so no other users are affected. No functional change intended. Reported-by: Will Deacon <will@kernel.org> Acked-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Fuad Tabba <tabba@google.com> Reviewed-by: Ard Biesheuvel <ardb@kernel.org> Link: https://lore.kernel.org/r/20210524083001.2586635-14-tabba@google.com Signed-off-by: Will Deacon <will@kernel.org>
69 lines
1.5 KiB
ArmAsm
69 lines
1.5 KiB
ArmAsm
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* EFI entry point.
|
|
*
|
|
* Copyright (C) 2013, 2014 Red Hat, Inc.
|
|
* Author: Mark Salter <msalter@redhat.com>
|
|
*/
|
|
#include <linux/linkage.h>
|
|
#include <linux/init.h>
|
|
|
|
#include <asm/assembler.h>
|
|
|
|
__INIT
|
|
|
|
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 x20, x1 // DTB address
|
|
|
|
/*
|
|
* Clean the copied Image to the PoC, and ensure it is not shadowed by
|
|
* stale icache entries from before relocation.
|
|
*/
|
|
ldr w1, =kernel_size
|
|
add x1, x0, x1
|
|
bl __clean_dcache_area_poc
|
|
ic ialluis
|
|
|
|
/*
|
|
* Clean the remainder of this routine to the PoC
|
|
* so that we can safely disable the MMU and caches.
|
|
*/
|
|
adr x0, 0f
|
|
adr x1, 3f
|
|
bl __clean_dcache_area_poc
|
|
0:
|
|
/* Turn off Dcache and MMU */
|
|
mrs x0, CurrentEL
|
|
cmp x0, #CurrentEL_EL2
|
|
b.ne 1f
|
|
mrs x0, sctlr_el2
|
|
bic x0, x0, #1 << 0 // clear SCTLR.M
|
|
bic x0, x0, #1 << 2 // clear SCTLR.C
|
|
pre_disable_mmu_workaround
|
|
msr sctlr_el2, x0
|
|
isb
|
|
b 2f
|
|
1:
|
|
mrs x0, sctlr_el1
|
|
bic x0, x0, #1 << 0 // clear SCTLR.M
|
|
bic x0, x0, #1 << 2 // clear SCTLR.C
|
|
pre_disable_mmu_workaround
|
|
msr sctlr_el1, x0
|
|
isb
|
|
2:
|
|
/* Jump to kernel entry point */
|
|
mov x0, x20
|
|
mov x1, xzr
|
|
mov x2, xzr
|
|
mov x3, xzr
|
|
br x19
|
|
3:
|
|
SYM_CODE_END(efi_enter_kernel)
|