blob: b0f89d4f9db9145bbe60bb3f6825aef55c6e2cd2 [file] [log] [blame]
/*
* Copyright (c) 2017-2021, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <arch.h>
#include <asm_macros.S>
#include <cactus_def.h>
#include <platform_def.h>
.globl cactus_entrypoint
.section .bss.stacks
.balign CACHE_WRITEBACK_GRANULE
.fill CACTUS_STACKS_SIZE
stacks_end:
func cactus_entrypoint
/* Setup the stack pointer. */
adr x0, stacks_end
mov sp, x0
/* Enable I-Cache */
mrs x0, sctlr_el1
orr x0, x0, #SCTLR_I_BIT
msr sctlr_el1, x0
isb
/*
* Set CPACR_EL1.FPEN=11 no EL1/0 trapping of
* SVE/Adv. SIMD/FP instructions.
*/
mov x1, CPACR_EL1_FPEN(CPACR_EL1_FP_TRAP_NONE)
mrs x0, cpacr_el1
orr x0, x0, x1
msr cpacr_el1, x0
isb
/* Relocate symbols */
pie_fixup:
ldr x0, =pie_fixup
and x0, x0, #~(0x1000 - 1)
mov x1, #CACTUS_IMAGE_SIZE
add x1, x1, x0
bl fixup_gdt_reloc
/* Set up exceptions vector table */
adrp x0, tftf_vector
add x0, x0, :lo12:tftf_vector
msr vbar_el1, x0
isb
/* And jump to the C entrypoint. */
b cactus_main
endfunc cactus_entrypoint