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