From c653fc2a91a946ea249e5d6161bca84f6c824f09 Mon Sep 17 00:00:00 2001 From: Ard Biesheuvel Date: Mon, 9 Nov 2015 13:28:17 +0000 Subject: [PATCH] ArmPkg/ArmLib: add accessor function for Cache Writeback Granule Add a function to ArmLib that provides access to the Cache Writeback Granule (CWG) field in CTR_EL0. This information is required when performing non-coherent DMA. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel Reviewed-by: Mark Rutland Reviewed-by: Leif Lindholm git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18758 6f19259b-4bc3-4df7-8a09-765794883524 --- ArmPkg/Include/Library/ArmLib.h | 6 ++++++ ArmPkg/Library/ArmLib/Common/ArmLib.c | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/ArmPkg/Include/Library/ArmLib.h b/ArmPkg/Include/Library/ArmLib.h index 2059a67bbf..a328146b69 100644 --- a/ArmPkg/Include/Library/ArmLib.h +++ b/ArmPkg/Include/Library/ArmLib.h @@ -114,6 +114,12 @@ ArmInstructionCacheLineLength ( VOID ); +UINTN +EFIAPI +ArmCacheWritebackGranule ( + VOID + ); + UINTN EFIAPI ArmIsArchTimerImplemented ( diff --git a/ArmPkg/Library/ArmLib/Common/ArmLib.c b/ArmPkg/Library/ArmLib/Common/ArmLib.c index ad0a265e9f..7e227936fa 100644 --- a/ArmPkg/Library/ArmLib/Common/ArmLib.c +++ b/ArmPkg/Library/ArmLib/Common/ArmLib.c @@ -88,3 +88,20 @@ ArmInstructionCacheLineLength ( { return 4 << (ArmCacheInfo () & 0xf); // CTR_EL0.IminLine } + +UINTN +EFIAPI +ArmCacheWritebackGranule ( + VOID + ) +{ + UINTN CWG; + + CWG = (ArmCacheInfo () >> 24) & 0xf; // CTR_EL0.CWG + + if (CWG == 0) { + return SIZE_2KB; + } + + return 4 << CWG; +}