xref: /rk3399_ARM-atf/lib/cpus/aarch64/c1_ultra.S (revision cd30f9f8cc13f18724d6bae3989d811330cdc697)
1/*
2 * Copyright (c) 2023-2025, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <arch.h>
8#include <asm_macros.S>
9#include <c1_ultra.h>
10#include <common/bl_common.h>
11#include <cpu_macros.S>
12
13#include <plat_macros.S>
14
15/* Hardware handled coherency */
16#if HW_ASSISTED_COHERENCY == 0
17#error "Arm C1-Ultra must be compiled with HW_ASSISTED_COHERENCY enabled"
18#endif
19
20/* 64-bit only core */
21#if CTX_INCLUDE_AARCH32_REGS == 1
22#error "Arm C1-Ultra supports only AArch64. Compile with CTX_INCLUDE_AARCH32_REGS=0"
23#endif
24
25#if ERRATA_SME_POWER_DOWN == 0
26#error "Arm C1-Ultra needs ERRATA_SME_POWER_DOWN=1 to powerdown correctly"
27#endif
28
29cpu_reset_prologue c1_ultra
30
31cpu_reset_func_start c1_ultra
32	/* ----------------------------------------------------
33	 * Disable speculative loads
34	 * ----------------------------------------------------
35	 */
36	msr	SSBS, xzr
37	/* model bug: not cleared on reset */
38	sysreg_bit_clear C1_ULTRA_IMP_CPUPWRCTLR_EL1, \
39		C1_ULTRA_IMP_CPUPWRCTLR_EL1_CORE_PWRDN_EN_BIT
40	enable_mpmm
41cpu_reset_func_end c1_ultra
42
43func c1_ultra_core_pwr_dwn
44	/* ---------------------------------------------------
45	 * Flip CPU power down bit in power control register.
46	 * It will be set on powerdown and cleared on wakeup
47	 * ---------------------------------------------------
48	 */
49	sysreg_bit_toggle C1_ULTRA_IMP_CPUPWRCTLR_EL1, \
50		C1_ULTRA_IMP_CPUPWRCTLR_EL1_CORE_PWRDN_EN_BIT
51	isb
52	signal_pabandon_handled
53	ret
54endfunc c1_ultra_core_pwr_dwn
55
56.section .rodata.c1_ultra_regs, "aS"
57c1_ultra_regs: /* The ASCII list of register names to be reported */
58	.asciz	"cpuectlr_el1", ""
59
60func c1_ultra_cpu_reg_dump
61	adr 	x6, c1_ultra_regs
62	mrs	x8, C1_ULTRA_IMP_CPUECTLR_EL1
63	ret
64endfunc c1_ultra_cpu_reg_dump
65
66declare_cpu_ops c1_ultra, C1_ULTRA_MIDR, \
67	c1_ultra_reset_func, \
68	c1_ultra_core_pwr_dwn
69