xref: /rk3399_ARM-atf/lib/cpus/aarch64/venom.S (revision 998003610dadce185159087ff6b5c3abe8399848)
1*d4c50e77SGovindraj Raja/*
2*d4c50e77SGovindraj Raja * Copyright (c) 2025, Arm Limited. All rights reserved.
3*d4c50e77SGovindraj Raja *
4*d4c50e77SGovindraj Raja * SPDX-License-Identifier: BSD-3-Clause
5*d4c50e77SGovindraj Raja */
6*d4c50e77SGovindraj Raja
7*d4c50e77SGovindraj Raja#include <arch.h>
8*d4c50e77SGovindraj Raja#include <asm_macros.S>
9*d4c50e77SGovindraj Raja#include <common/bl_common.h>
10*d4c50e77SGovindraj Raja#include <venom.h>
11*d4c50e77SGovindraj Raja#include <cpu_macros.S>
12*d4c50e77SGovindraj Raja#include <plat_macros.S>
13*d4c50e77SGovindraj Raja
14*d4c50e77SGovindraj Raja/* Hardware handled coherency */
15*d4c50e77SGovindraj Raja#if HW_ASSISTED_COHERENCY == 0
16*d4c50e77SGovindraj Raja#error "Venom must be compiled with HW_ASSISTED_COHERENCY enabled"
17*d4c50e77SGovindraj Raja#endif
18*d4c50e77SGovindraj Raja
19*d4c50e77SGovindraj Raja/* 64-bit only core */
20*d4c50e77SGovindraj Raja#if CTX_INCLUDE_AARCH32_REGS == 1
21*d4c50e77SGovindraj Raja#error "Venom supports only AArch64. Compile with CTX_INCLUDE_AARCH32_REGS=0"
22*d4c50e77SGovindraj Raja#endif
23*d4c50e77SGovindraj Raja
24*d4c50e77SGovindraj Rajacpu_reset_prologue venom
25*d4c50e77SGovindraj Raja
26*d4c50e77SGovindraj Rajacpu_reset_func_start venom
27*d4c50e77SGovindraj Raja	/* ----------------------------------------------------
28*d4c50e77SGovindraj Raja	 * Disable speculative loads
29*d4c50e77SGovindraj Raja	 * ----------------------------------------------------
30*d4c50e77SGovindraj Raja	 */
31*d4c50e77SGovindraj Raja	msr	SSBS, xzr
32*d4c50e77SGovindraj Raja	enable_mpmm
33*d4c50e77SGovindraj Rajacpu_reset_func_end venom
34*d4c50e77SGovindraj Raja
35*d4c50e77SGovindraj Rajafunc venom_core_pwr_dwn
36*d4c50e77SGovindraj Raja	/* ---------------------------------------------------
37*d4c50e77SGovindraj Raja	 * Flip CPU power down bit in power control register.
38*d4c50e77SGovindraj Raja	 * It will be set on powerdown and cleared on wakeup
39*d4c50e77SGovindraj Raja	 * ---------------------------------------------------
40*d4c50e77SGovindraj Raja	 */
41*d4c50e77SGovindraj Raja	sysreg_bit_toggle VENOM_IMP_CPUPWRCTLR_EL1, \
42*d4c50e77SGovindraj Raja		VENOM_IMP_CPUPWRCTLR_EL1_CORE_PWRDN_EN_BIT
43*d4c50e77SGovindraj Raja	isb
44*d4c50e77SGovindraj Raja	signal_pabandon_handled
45*d4c50e77SGovindraj Raja	ret
46*d4c50e77SGovindraj Rajaendfunc venom_core_pwr_dwn
47*d4c50e77SGovindraj Raja
48*d4c50e77SGovindraj Raja.section .rodata.venom_regs, "aS"
49*d4c50e77SGovindraj Rajavenom_regs: /* The ASCII list of register names to be reported */
50*d4c50e77SGovindraj Raja	.asciz	"cpuectlr_el1", ""
51*d4c50e77SGovindraj Raja
52*d4c50e77SGovindraj Rajafunc venom_cpu_reg_dump
53*d4c50e77SGovindraj Raja	adr 	x6, venom_regs
54*d4c50e77SGovindraj Raja	mrs	x8, VENOM_IMP_CPUECTLR_EL1
55*d4c50e77SGovindraj Raja	ret
56*d4c50e77SGovindraj Rajaendfunc venom_cpu_reg_dump
57*d4c50e77SGovindraj Raja
58*d4c50e77SGovindraj Rajadeclare_cpu_ops venom, VENOM_MIDR, \
59*d4c50e77SGovindraj Raja	venom_reset_func, \
60*d4c50e77SGovindraj Raja	venom_core_pwr_dwn
61