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