blob: ade898bd978e452100d111a59655900973c24071 [file] [log] [blame] [edit]
/*
* Copyright (c) 2024-2025, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <arch.h>
#include <asm_macros.S>
#include <c1_premium.h>
#include <common/bl_common.h>
#include <cpu_macros.S>
#include <plat_macros.S>
/* Hardware handled coherency */
#if HW_ASSISTED_COHERENCY == 0
#error "Arm C1-Premium must be compiled with HW_ASSISTED_COHERENCY enabled"
#endif
/* 64-bit only core */
#if CTX_INCLUDE_AARCH32_REGS == 1
#error "Arm C1-Premium supports only AArch64. Compile with CTX_INCLUDE_AARCH32_REGS=0"
#endif
#if ERRATA_SME_POWER_DOWN == 0
#error "Arm C1-Premium needs ERRATA_SME_POWER_DOWN=1 to powerdown correctly"
#endif
cpu_reset_prologue c1_premium
cpu_reset_func_start c1_premium
/* Disable speculative loads */
msr SSBS, xzr
enable_mpmm
cpu_reset_func_end c1_premium
func c1_premium_core_pwr_dwn
/* ---------------------------------------------------
* Flip CPU power down bit in power control register.
* It will be set on powerdown and cleared on wakeup.
* ---------------------------------------------------
*/
sysreg_bit_toggle C1_PREMIUM_IMP_CPUPWRCTLR_EL1, \
C1_PREMIUM_IMP_CPUPWRCTLR_EL1_CORE_PWRDN_EN_BIT
isb
signal_pabandon_handled
ret
endfunc c1_premium_core_pwr_dwn
.section .rodata.c1_premium_regs, "aS"
c1_premium_regs: /* The ASCII list of register names to be reported */
.asciz "cpuectlr_el1", ""
func c1_premium_cpu_reg_dump
adr x6, c1_premium_regs
mrs x8, C1_PREMIUM_IMP_CPUECTLR_EL1
ret
endfunc c1_premium_cpu_reg_dump
declare_cpu_ops c1_premium, C1_PREMIUM_MIDR, \
c1_premium_reset_func, \
c1_premium_core_pwr_dwn