The stride used by the cache maintenance by MVA instructions should be retrieved from CTR_EL0.DminLine and CTR_EL0.IminLine, whose values reflect the actual geometry of the caches. Using CCSIDR for this purpose violates the architecture. Also, move the line length accessors to common code, since there is no need to keep them separate between ARMv7 and AArch64. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Mark Rutland <mark.rutland@arm.com> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18754 6f19259b-4bc3-4df7-8a09-765794883524
91 lines
1.6 KiB
C
91 lines
1.6 KiB
C
/** @file
|
|
|
|
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
|
|
Copyright (c) 2011 - 2014, ARM Ltd. All rights reserved.<BR>
|
|
|
|
This program and the accompanying materials
|
|
are licensed and made available under the terms and conditions of the BSD License
|
|
which accompanies this distribution. The full text of the license may be found at
|
|
http://opensource.org/licenses/bsd-license.php
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
|
|
**/
|
|
|
|
#include <Base.h>
|
|
|
|
#include <Library/ArmLib.h>
|
|
#include <Library/DebugLib.h>
|
|
#include <Library/PcdLib.h>
|
|
|
|
#include "ArmLibPrivate.h"
|
|
|
|
VOID
|
|
EFIAPI
|
|
ArmSetAuxCrBit (
|
|
IN UINT32 Bits
|
|
)
|
|
{
|
|
UINT32 val = ArmReadAuxCr();
|
|
val |= Bits;
|
|
ArmWriteAuxCr(val);
|
|
}
|
|
|
|
VOID
|
|
EFIAPI
|
|
ArmUnsetAuxCrBit (
|
|
IN UINT32 Bits
|
|
)
|
|
{
|
|
UINT32 val = ArmReadAuxCr();
|
|
val &= ~Bits;
|
|
ArmWriteAuxCr(val);
|
|
}
|
|
|
|
//
|
|
// Helper functions for accessing CPUACTLR
|
|
//
|
|
|
|
VOID
|
|
EFIAPI
|
|
ArmSetCpuActlrBit (
|
|
IN UINTN Bits
|
|
)
|
|
{
|
|
UINTN Value;
|
|
Value = ArmReadCpuActlr ();
|
|
Value |= Bits;
|
|
ArmWriteCpuActlr (Value);
|
|
}
|
|
|
|
VOID
|
|
EFIAPI
|
|
ArmUnsetCpuActlrBit (
|
|
IN UINTN Bits
|
|
)
|
|
{
|
|
UINTN Value;
|
|
Value = ArmReadCpuActlr ();
|
|
Value &= ~Bits;
|
|
ArmWriteCpuActlr (Value);
|
|
}
|
|
|
|
UINTN
|
|
EFIAPI
|
|
ArmDataCacheLineLength (
|
|
VOID
|
|
)
|
|
{
|
|
return 4 << ((ArmCacheInfo () >> 16) & 0xf); // CTR_EL0.DminLine
|
|
}
|
|
|
|
UINTN
|
|
EFIAPI
|
|
ArmInstructionCacheLineLength (
|
|
VOID
|
|
)
|
|
{
|
|
return 4 << (ArmCacheInfo () & 0xf); // CTR_EL0.IminLine
|
|
}
|