mirror of https://github.com/acidanthera/audk.git
ArmPkg/ArmLib: Improved ArmConfigureMmu Performance
Data & Instruction Caches can be kept enabled while the new translation table is filled. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Eugene Cohen <eugene@hp.com> Reviewed-By: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15647 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
28087ef09f
commit
ffb91edfd5
|
@ -238,18 +238,6 @@ ArmConfigureMmu (
|
||||||
|
|
||||||
ZeroMem (TranslationTable, TRANSLATION_TABLE_SECTION_SIZE);
|
ZeroMem (TranslationTable, TRANSLATION_TABLE_SECTION_SIZE);
|
||||||
|
|
||||||
ArmCleanInvalidateDataCache ();
|
|
||||||
ArmInvalidateInstructionCache ();
|
|
||||||
|
|
||||||
ArmDisableDataCache ();
|
|
||||||
ArmDisableInstructionCache();
|
|
||||||
// TLBs are also invalidated when calling ArmDisableMmu()
|
|
||||||
ArmDisableMmu ();
|
|
||||||
|
|
||||||
// Make sure nothing sneaked into the cache
|
|
||||||
ArmCleanInvalidateDataCache ();
|
|
||||||
ArmInvalidateInstructionCache ();
|
|
||||||
|
|
||||||
// By default, mark the translation table as belonging to a uncached region
|
// By default, mark the translation table as belonging to a uncached region
|
||||||
TranslationTableAttribute = ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED;
|
TranslationTableAttribute = ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED;
|
||||||
while (MemoryTable->Length != 0) {
|
while (MemoryTable->Length != 0) {
|
||||||
|
@ -277,6 +265,18 @@ ArmConfigureMmu (
|
||||||
return RETURN_UNSUPPORTED;
|
return RETURN_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ArmCleanInvalidateDataCache ();
|
||||||
|
ArmInvalidateInstructionCache ();
|
||||||
|
|
||||||
|
ArmDisableDataCache ();
|
||||||
|
ArmDisableInstructionCache();
|
||||||
|
// TLBs are also invalidated when calling ArmDisableMmu()
|
||||||
|
ArmDisableMmu ();
|
||||||
|
|
||||||
|
// Make sure nothing sneaked into the cache
|
||||||
|
ArmCleanInvalidateDataCache ();
|
||||||
|
ArmInvalidateInstructionCache ();
|
||||||
|
|
||||||
ArmSetTTBR0 ((VOID *)(UINTN)(((UINTN)TranslationTable & ~TRANSLATION_TABLE_SECTION_ALIGNMENT_MASK) | (TTBRAttributes & 0x7F)));
|
ArmSetTTBR0 ((VOID *)(UINTN)(((UINTN)TranslationTable & ~TRANSLATION_TABLE_SECTION_ALIGNMENT_MASK) | (TTBRAttributes & 0x7F)));
|
||||||
|
|
||||||
ArmSetDomainAccessControl (DOMAIN_ACCESS_CONTROL_NONE(15) |
|
ArmSetDomainAccessControl (DOMAIN_ACCESS_CONTROL_NONE(15) |
|
||||||
|
|
Loading…
Reference in New Issue