xref: /rk3399_ARM-atf/lib/cpus/aarch64/cortex_x925.S (revision f1c3b96ce2d7b4476c4d10bd3b5802cbdbd7c27c)
1bbe94cddSGovindraj Raja/*
2520c2207SArvind Ram Prakash * Copyright (c) 2023-2025, Arm Limited. All rights reserved.
3bbe94cddSGovindraj Raja *
4bbe94cddSGovindraj Raja * SPDX-License-Identifier: BSD-3-Clause
5bbe94cddSGovindraj Raja */
6bbe94cddSGovindraj Raja
7bbe94cddSGovindraj Raja#include <arch.h>
8bbe94cddSGovindraj Raja#include <asm_macros.S>
9bbe94cddSGovindraj Raja#include <common/bl_common.h>
10bbe94cddSGovindraj Raja#include <cortex_x925.h>
11bbe94cddSGovindraj Raja#include <cpu_macros.S>
12efc945f1SArvind Ram Prakash#include <dsu_macros.S>
13bbe94cddSGovindraj Raja#include <plat_macros.S>
14bbe94cddSGovindraj Raja
15bbe94cddSGovindraj Raja/* Hardware handled coherency */
16bbe94cddSGovindraj Raja#if HW_ASSISTED_COHERENCY == 0
17bbe94cddSGovindraj Raja#error "Cortex-X925 must be compiled with HW_ASSISTED_COHERENCY enabled"
18bbe94cddSGovindraj Raja#endif
19bbe94cddSGovindraj Raja
20bbe94cddSGovindraj Raja/* 64-bit only core */
21bbe94cddSGovindraj Raja#if CTX_INCLUDE_AARCH32_REGS == 1
22bbe94cddSGovindraj Raja#error "Cortex-X925 supports only AArch64. Compile with CTX_INCLUDE_AARCH32_REGS=0"
23bbe94cddSGovindraj Raja#endif
24bbe94cddSGovindraj Raja
2589dba82dSBoyan Karatotevcpu_reset_prologue cortex_x925
26511148efSGovindraj Raja
27efc945f1SArvind Ram Prakashworkaround_reset_start cortex_x925, ERRATUM(2900952), ERRATA_DSU_2900952
28efc945f1SArvind Ram Prakash	errata_dsu_2900952_wa_apply
29efc945f1SArvind Ram Prakashworkaround_reset_end cortex_x925, ERRATUM(2900952)
30efc945f1SArvind Ram Prakash
31efc945f1SArvind Ram Prakashcheck_erratum_custom_start cortex_x925, ERRATUM(2900952)
32efc945f1SArvind Ram Prakash	check_errata_dsu_2900952_applies
33efc945f1SArvind Ram Prakash	ret
34efc945f1SArvind Ram Prakashcheck_erratum_custom_end cortex_x925, ERRATUM(2900952)
35efc945f1SArvind Ram Prakash
3689dba82dSBoyan Karatotevadd_erratum_entry cortex_x925, ERRATUM(3701747), ERRATA_X925_3701747
37511148efSGovindraj Raja
38*28a0b5a1SBoyan Karatotev.global check_erratum_cortex_x925_3701747
39511148efSGovindraj Rajacheck_erratum_ls cortex_x925, ERRATUM(3701747), CPU_REV(0, 1)
40511148efSGovindraj Raja
4129bda258SGovindraj Rajaworkaround_reset_start cortex_x925, ERRATUM(2963999), ERRATA_X925_2963999
4229bda258SGovindraj Raja	/* Add ISB before MRS reads of MPIDR_EL1/MIDR_EL1 */
4329bda258SGovindraj Raja	ldr x0, =0x0
4429bda258SGovindraj Raja	msr S3_6_c15_c8_0, x0 	/* msr CPUPSELR_EL3, X0 */
4529bda258SGovindraj Raja	ldr x0, =0xd5380000
4629bda258SGovindraj Raja	msr S3_6_c15_c8_2, x0 	/* msr CPUPOR_EL3, X0 */
4729bda258SGovindraj Raja	ldr x0, =0xFFFFFF40
4829bda258SGovindraj Raja	msr S3_6_c15_c8_3,x0 	/* msr CPUPMR_EL3, X0 */
4929bda258SGovindraj Raja	ldr x0, =0x000080010033f
5029bda258SGovindraj Raja	msr S3_6_c15_c8_1, x0	/* msr CPUPCR_EL3, X0 */
5129bda258SGovindraj Raja	isb
5229bda258SGovindraj Rajaworkaround_reset_end cortex_x925, ERRATUM(2963999)
5329bda258SGovindraj Raja
5429bda258SGovindraj Rajacheck_erratum_ls cortex_x925, ERRATUM(2963999), CPU_REV(0, 0)
5529bda258SGovindraj Raja
56ebc090fbSSona Mathew/* Disable hardware page aggregation. Enables mitigation for `CVE-2024-5660` */
57ebc090fbSSona Mathewworkaround_reset_start cortex_x925, CVE(2024, 5660), WORKAROUND_CVE_2024_5660
58ebc090fbSSona Mathew	sysreg_bit_set CORTEX_X925_CPUECTLR_EL1, BIT(46)
59ebc090fbSSona Mathewworkaround_reset_end cortex_x925, CVE(2024, 5660)
60ebc090fbSSona Mathew
61ebc090fbSSona Mathewcheck_erratum_ls cortex_x925, CVE(2024, 5660), CPU_REV(0, 1)
62ebc090fbSSona Mathew
63520c2207SArvind Ram Prakashworkaround_reset_start cortex_x925, CVE(2024, 7881), WORKAROUND_CVE_2024_7881
64520c2207SArvind Ram Prakash	/* ---------------------------------
65520c2207SArvind Ram Prakash         * Sets BIT41 of CPUACTLR6_EL1 which
66520c2207SArvind Ram Prakash         * disables L1 Data cache prefetcher
67520c2207SArvind Ram Prakash         * ---------------------------------
68520c2207SArvind Ram Prakash         */
69520c2207SArvind Ram Prakash	sysreg_bit_set CORTEX_X925_CPUACTLR6_EL1, BIT(41)
70520c2207SArvind Ram Prakashworkaround_reset_end cortex_x925, CVE(2024, 7881)
71520c2207SArvind Ram Prakash
72520c2207SArvind Ram Prakashcheck_erratum_chosen cortex_x925, CVE(2024, 7881), WORKAROUND_CVE_2024_7881
73520c2207SArvind Ram Prakash
74bbe94cddSGovindraj Rajacpu_reset_func_start cortex_x925
75bbe94cddSGovindraj Raja	/* Disable speculative loads */
76bbe94cddSGovindraj Raja	msr	SSBS, xzr
772590e819SBoyan Karatotev	enable_mpmm
78bbe94cddSGovindraj Rajacpu_reset_func_end cortex_x925
79bbe94cddSGovindraj Raja
80bbe94cddSGovindraj Raja	/* ----------------------------------------------------
81bbe94cddSGovindraj Raja	 * HW will do the cache maintenance while powering down
82bbe94cddSGovindraj Raja	 * ----------------------------------------------------
83bbe94cddSGovindraj Raja	 */
84bbe94cddSGovindraj Rajafunc cortex_x925_core_pwr_dwn
85bbe94cddSGovindraj Raja	/* ---------------------------------------------------
86bbe94cddSGovindraj Raja	 * Enable CPU power down bit in power control register
87bbe94cddSGovindraj Raja	 * ---------------------------------------------------
88bbe94cddSGovindraj Raja	 */
89bbe94cddSGovindraj Raja	sysreg_bit_set CORTEX_X925_CPUPWRCTLR_EL1, CORTEX_X925_CPUPWRCTLR_EL1_CORE_PWRDN_BIT
90bbe94cddSGovindraj Raja	isb
91bbe94cddSGovindraj Raja	ret
92bbe94cddSGovindraj Rajaendfunc cortex_x925_core_pwr_dwn
93bbe94cddSGovindraj Raja
94bbe94cddSGovindraj Raja	/* ---------------------------------------------
95bbe94cddSGovindraj Raja	 * This function provides Cortex-X925 specific
96bbe94cddSGovindraj Raja	 * register information for crash reporting.
97bbe94cddSGovindraj Raja	 * It needs to return with x6 pointing to
98bbe94cddSGovindraj Raja	 * a list of register names in ascii and
99bbe94cddSGovindraj Raja	 * x8 - x15 having values of registers to be
100bbe94cddSGovindraj Raja	 * reported.
101bbe94cddSGovindraj Raja	 * ---------------------------------------------
102bbe94cddSGovindraj Raja	 */
103bbe94cddSGovindraj Raja.section .rodata.cortex_x925_regs, "aS"
104bbe94cddSGovindraj Rajacortex_x925_regs:  /* The ascii list of register names to be reported */
105bbe94cddSGovindraj Raja	.asciz	"cpuectlr_el1", ""
106bbe94cddSGovindraj Raja
107bbe94cddSGovindraj Rajafunc cortex_x925_cpu_reg_dump
108bbe94cddSGovindraj Raja	adr	x6, cortex_x925_regs
109bbe94cddSGovindraj Raja	mrs	x8, CORTEX_X925_CPUECTLR_EL1
110bbe94cddSGovindraj Raja	ret
111bbe94cddSGovindraj Rajaendfunc cortex_x925_cpu_reg_dump
112bbe94cddSGovindraj Raja
113fd04156eSArvind Ram Prakashdeclare_cpu_ops cortex_x925, CORTEX_X925_MIDR, \
114bbe94cddSGovindraj Raja	cortex_x925_reset_func, \
115bbe94cddSGovindraj Raja	cortex_x925_core_pwr_dwn
116