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