Browse Source
This patch allows the system to fallback to a default CPU library in case the MPID does not match with any of the supported ones. This feature can be enabled by setting SUPPORT_UNKNOWN_MPID build option to 1 (enabled by default only on arm_fpga platform). This feature can be very dangerous on a production image and therefore it MUST be disabled for Release images. Signed-off-by: Javier Almansa Sobrino <javier.almansasobrino@arm.com> Change-Id: I0df7ef2b012d7d60a4fd5de44dea1fbbb46881bapull/1979/head
Javier Almansa Sobrino
4 years ago
6 changed files with 178 additions and 12 deletions
@ -0,0 +1,18 @@ |
|||||
|
/*
|
||||
|
* Copyright (c) 2020, Arm Limited. All rights reserverd. |
||||
|
* |
||||
|
* SPDX-License-Identifier: BSD-3-Clause |
||||
|
*/ |
||||
|
|
||||
|
#ifndef AARCH64_GENERIC_H |
||||
|
#define AARCH64_GENERIC_H |
||||
|
|
||||
|
#include <lib/utils_def.h> |
||||
|
|
||||
|
/*
|
||||
|
* 0x0 value on the MIDR implementer value is reserved for software use, |
||||
|
* so use an MIDR value of 0 for a default CPU library. |
||||
|
*/ |
||||
|
#define AARCH64_GENERIC_MIDR U(0) |
||||
|
|
||||
|
#endif /* AARCH64_GENERIC_H */ |
@ -0,0 +1,89 @@ |
|||||
|
/* |
||||
|
* Copyright (c) 2020, Arm Limited. All rights reserved. |
||||
|
* |
||||
|
* SPDX-License-Identifier: BSD-3-Clause |
||||
|
*/ |
||||
|
|
||||
|
#include <arch.h> |
||||
|
#include <asm_macros.S> |
||||
|
#include <common/bl_common.h> |
||||
|
#include <generic.h> |
||||
|
#include <cpu_macros.S> |
||||
|
#include <plat_macros.S> |
||||
|
|
||||
|
/* --------------------------------------------- |
||||
|
* Disable L1 data cache and unified L2 cache |
||||
|
* --------------------------------------------- |
||||
|
*/ |
||||
|
func generic_disable_dcache |
||||
|
mrs x1, sctlr_el3 |
||||
|
bic x1, x1, #SCTLR_C_BIT |
||||
|
msr sctlr_el3, x1 |
||||
|
isb |
||||
|
ret |
||||
|
endfunc generic_disable_dcache |
||||
|
|
||||
|
func generic_core_pwr_dwn |
||||
|
mov x18, x30 |
||||
|
|
||||
|
/* --------------------------------------------- |
||||
|
* Turn off caches. |
||||
|
* --------------------------------------------- |
||||
|
*/ |
||||
|
bl generic_disable_dcache |
||||
|
|
||||
|
/* --------------------------------------------- |
||||
|
* Flush L1 caches. |
||||
|
* --------------------------------------------- |
||||
|
*/ |
||||
|
mov x0, #DCCISW |
||||
|
bl dcsw_op_level1 |
||||
|
|
||||
|
ret x18 |
||||
|
endfunc generic_core_pwr_dwn |
||||
|
|
||||
|
func generic_cluster_pwr_dwn |
||||
|
mov x18, x30 |
||||
|
|
||||
|
/* --------------------------------------------- |
||||
|
* Turn off caches. |
||||
|
* --------------------------------------------- |
||||
|
*/ |
||||
|
bl generic_disable_dcache |
||||
|
|
||||
|
/* --------------------------------------------- |
||||
|
* Flush L1 caches. |
||||
|
* --------------------------------------------- |
||||
|
*/ |
||||
|
mov x0, #DCCISW |
||||
|
bl dcsw_op_level1 |
||||
|
|
||||
|
/* --------------------------------------------- |
||||
|
* Disable the optional ACP. |
||||
|
* --------------------------------------------- |
||||
|
*/ |
||||
|
bl plat_disable_acp |
||||
|
|
||||
|
/* --------------------------------------------- |
||||
|
* Flush L2 caches. |
||||
|
* --------------------------------------------- |
||||
|
*/ |
||||
|
mov x0, #DCCISW |
||||
|
bl dcsw_op_level2 |
||||
|
|
||||
|
ret x18 |
||||
|
|
||||
|
endfunc generic_cluster_pwr_dwn |
||||
|
|
||||
|
/* --------------------------------------------- |
||||
|
* Unimplemented functions. |
||||
|
* --------------------------------------------- |
||||
|
*/ |
||||
|
.equ generic_errata_report, 0 |
||||
|
.equ generic_cpu_reg_dump, 0 |
||||
|
.equ generic_reset_func, 0 |
||||
|
|
||||
|
declare_cpu_ops generic, AARCH64_GENERIC_MIDR, \ |
||||
|
generic_reset_func, \ |
||||
|
generic_core_pwr_dwn, \ |
||||
|
generic_cluster_pwr_dwn |
Loading…
Reference in new issue