xref: /rk3399_ARM-atf/lib/cpus/errata_common.c (revision 721249b0c0cce9fbe60175af6ee895e2bb7a6d10)
1*721249b0SArvind Ram Prakash /*
2*721249b0SArvind Ram Prakash  * Copyright (c) 2024, Arm Limited and Contributors. All rights reserved.
3*721249b0SArvind Ram Prakash  *
4*721249b0SArvind Ram Prakash  * SPDX-License-Identifier: BSD-3-Clause
5*721249b0SArvind Ram Prakash  */
6*721249b0SArvind Ram Prakash 
7*721249b0SArvind Ram Prakash /* Runtime C routines for errata workarounds and common routines */
8*721249b0SArvind Ram Prakash 
9*721249b0SArvind Ram Prakash #include <arch.h>
10*721249b0SArvind Ram Prakash #include <arch_helpers.h>
11*721249b0SArvind Ram Prakash #include <cortex_a520.h>
12*721249b0SArvind Ram Prakash #include <cortex_x4.h>
13*721249b0SArvind Ram Prakash #include <lib/cpus/cpu_ops.h>
14*721249b0SArvind Ram Prakash #include <lib/cpus/errata.h>
15*721249b0SArvind Ram Prakash 
16*721249b0SArvind Ram Prakash #if ERRATA_A520_2938996 || ERRATA_X4_2726228
17*721249b0SArvind Ram Prakash unsigned int check_if_affected_core(void)
18*721249b0SArvind Ram Prakash {
19*721249b0SArvind Ram Prakash 	uint32_t midr_val = read_midr();
20*721249b0SArvind Ram Prakash 	long rev_var  = cpu_get_rev_var();
21*721249b0SArvind Ram Prakash 
22*721249b0SArvind Ram Prakash 	if (EXTRACT_PARTNUM(midr_val) == EXTRACT_PARTNUM(CORTEX_A520_MIDR)) {
23*721249b0SArvind Ram Prakash 		return check_erratum_cortex_a520_2938996(rev_var);
24*721249b0SArvind Ram Prakash 	} else if (EXTRACT_PARTNUM(midr_val) == EXTRACT_PARTNUM(CORTEX_X4_MIDR)) {
25*721249b0SArvind Ram Prakash 		return check_erratum_cortex_x4_2726228(rev_var);
26*721249b0SArvind Ram Prakash 	}
27*721249b0SArvind Ram Prakash 
28*721249b0SArvind Ram Prakash 	return ERRATA_NOT_APPLIES;
29*721249b0SArvind Ram Prakash }
30*721249b0SArvind Ram Prakash #endif
31