]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuPeiLibConstructor.c
ArmPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / ArmPkg / Library / ArmMmuLib / AArch64 / ArmMmuPeiLibConstructor.c
CommitLineData
87bcfe13
AB
1#/* @file\r
2#\r
3# Copyright (c) 2016, Linaro Limited. All rights reserved.\r
4#\r
4059386c 5# SPDX-License-Identifier: BSD-2-Clause-Patent\r
87bcfe13
AB
6#\r
7#*/\r
8\r
9#include <Base.h>\r
10\r
11#include <Library/ArmLib.h>\r
12#include <Library/ArmMmuLib.h>\r
13#include <Library/CacheMaintenanceLib.h>\r
14#include <Library/DebugLib.h>\r
15\r
16EFI_STATUS\r
17EFIAPI\r
18ArmMmuPeiLibConstructor (\r
19 IN EFI_PEI_FILE_HANDLE FileHandle,\r
20 IN CONST EFI_PEI_SERVICES **PeiServices\r
21 )\r
22{\r
23 extern UINT32 ArmReplaceLiveTranslationEntrySize;\r
24\r
25 EFI_FV_FILE_INFO FileInfo;\r
26 EFI_STATUS Status;\r
27\r
28 ASSERT (FileHandle != NULL);\r
29\r
30 Status = (*PeiServices)->FfsGetFileInfo (FileHandle, &FileInfo);\r
31 ASSERT_EFI_ERROR (Status);\r
32\r
33 //\r
34 // Some platforms do not cope very well with cache maintenance being\r
35 // performed on regions backed by NOR flash. Since the firmware image\r
36 // can be assumed to be clean to the PoC when running XIP, even when PEI\r
37 // is executing from DRAM, we only need to perform the cache maintenance\r
38 // when not executing in place.\r
39 //\r
40 if ((UINTN)FileInfo.Buffer <= (UINTN)ArmReplaceLiveTranslationEntry &&\r
41 ((UINTN)FileInfo.Buffer + FileInfo.BufferSize >=\r
42 (UINTN)ArmReplaceLiveTranslationEntry + ArmReplaceLiveTranslationEntrySize)) {\r
43 DEBUG ((EFI_D_INFO, "ArmMmuLib: skipping cache maintenance on XIP PEIM\n"));\r
44 } else {\r
45 DEBUG ((EFI_D_INFO, "ArmMmuLib: performing cache maintenance on shadowed PEIM\n"));\r
46 //\r
47 // The ArmReplaceLiveTranslationEntry () helper function may be invoked\r
48 // with the MMU off so we have to ensure that it gets cleaned to the PoC\r
49 //\r
50 WriteBackDataCacheRange (ArmReplaceLiveTranslationEntry,\r
51 ArmReplaceLiveTranslationEntrySize);\r
52 }\r
53\r
54 return RETURN_SUCCESS;\r
55}\r