blob: 950c5615bda292b474b38c7e8b95582625dbc41c [file] [log] [blame]
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2019, HiSilicon Technologies Co., Ltd.
*/
/*
* Entry points for the Hi3519AV100 a53 aarch32 mode init.
* It is assumed no stack is available when these routines are called.
* It is assumed each routine is called with return address in LR
* and with ARM registers R0, R1, R2, R3 being scratched.
*/
#include <arm.h>
#include <arm32_macros.S>
#include <asm.S>
#include <kernel/unwind.h>
#include <platform_config.h>
#define CCI_BASE 0x04528000
#define CPUECTLR_A53_SMPEN BIT(6)
#define ACTRL_CPUECTLR BIT(1)
#define HACTRL_CPUECTLR BIT(1)
.section .text
.balign 4
.code 32
/*
* Hi3519AV100 a53 aarch32 configuration early configuration
*
* Use scratch registers R0-R3.
* No stack usage.
* LR store return address.
* Trap CPU in case of error.
*/
FUNC plat_cpu_reset_early , :
UNWIND( .fnstart)
/*
* Write the CPU Extended Control Register
* Set the SMPEN bit, this Cortex-A53 core's register
*/
mrrc p15, 1, r0, r1, c15
orr r0, r0, #CPUECTLR_A53_SMPEN
mcrr p15, 1, r0, r1, c15
/*
* Enable Non-Secure EL1 write access to CPUECTLR
*/
mrs r1, cpsr
cps #CPSR_MODE_MON
read_scr r0
orr r0, r0, #SCR_NS /* Set NS bit in SCR */
write_scr r0
isb
/* Write HACTLR register */
mrc p15, 4, r2, c1, c0, 1
orr r2, r2, #HACTRL_CPUECTLR
mcr p15, 4, r2, c1, c0, 1
bic r0, r0, #SCR_NS /* Clr NS bit in SCR */
write_scr r0
isb
/* Write ACTLR register */
mrc p15, 0, r2, c1, c0, 1
orr r2, r2, #ACTRL_CPUECTLR
mcr p15, 0, r2, c1, c0, 1
msr cpsr, r1
/*
* Enable cci for secondary core
*/
mov r3, lr
bl __get_core_pos
mov lr, r3
cmp r0, #0
beq out
ldr r0, =CCI_BASE
ldr r1, [r0]
orr r1, r1, #BIT(9) /* bit 9 set to 1 */
str r1, [r0]
out:
bx lr
UNWIND( .fnend)
END_FUNC plat_cpu_reset_early