Added DebugAgentTimerLib. Cleaned up .h files and other code.
[mirror_edk2.git] / Omap35xxPkg / Library / BeagleBoardSystemLib / BeagleBoardSystemLib.c
CommitLineData
a3f98646 1/** @file
2
3 Copyright (c) 2008-2009, Apple Inc. All rights reserved.
4
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13**/
14
15#include <Uefi.h>
16
17#include <Library/ArmLib.h>
18#include <Library/CacheMaintenanceLib.h>
19#include <Library/MemoryAllocationLib.h>
20#include <Library/IoLib.h>
21#include <Library/PcdLib.h>
22#include <Library/DebugLib.h>
23#include <Library/UefiBootServicesTableLib.h>
24#include <Library/BeagleBoardSystemLib.h>
25
26#include <Omap3530/Omap3530.h>
27
28VOID
29ResetSystem (
30 IN EFI_RESET_TYPE ResetType
31 )
32{
33 switch (ResetType) {
34 case EfiResetWarm:
35 //Perform warm reset of the system.
36 GoLittleEndian(PcdGet32(PcdFlashFvMainBase));
37 break;
38 case EfiResetCold:
39 case EfiResetShutdown:
40 default:
41 //Perform cold reset of the system.
43263288 42 MmioOr32 (PRM_RSTCTRL, RST_DPLL3);
43 while ((MmioRead32 (PRM_RSTST) & GLOBAL_COLD_RST) != 0x1);
a3f98646 44 break;
45 }
46
47 //Should never come here.
48 ASSERT(FALSE);
49}
50
51VOID
52ShutdownEfi (
53 VOID
54 )
55{
56 EFI_STATUS Status;
57 UINTN MemoryMapSize;
58 EFI_MEMORY_DESCRIPTOR *MemoryMap;
59 UINTN MapKey;
60 UINTN DescriptorSize;
61 UINTN DescriptorVersion;
62 UINTN Pages;
63
64 MemoryMap = NULL;
65 MemoryMapSize = 0;
66 do {
67 Status = gBS->GetMemoryMap (
68 &MemoryMapSize,
69 MemoryMap,
70 &MapKey,
71 &DescriptorSize,
72 &DescriptorVersion
73 );
74 if (Status == EFI_BUFFER_TOO_SMALL) {
75
76 Pages = EFI_SIZE_TO_PAGES (MemoryMapSize) + 1;
77 MemoryMap = AllocatePages (Pages);
78
79 //
80 // Get System MemoryMap
81 //
82 Status = gBS->GetMemoryMap (
83 &MemoryMapSize,
84 MemoryMap,
85 &MapKey,
86 &DescriptorSize,
87 &DescriptorVersion
88 );
89 // Don't do anything between the GetMemoryMap() and ExitBootServices()
90 if (!EFI_ERROR (Status)) {
91 Status = gBS->ExitBootServices (gImageHandle, MapKey);
92 if (EFI_ERROR (Status)) {
93 FreePages (MemoryMap, Pages);
94 MemoryMap = NULL;
95 MemoryMapSize = 0;
96 }
97 }
98 }
99 } while (EFI_ERROR (Status));
100
101 //Clean and invalidate caches.
102 WriteBackInvalidateDataCache();
103 InvalidateInstructionCache();
104
105 //Turning off Caches and MMU
106 ArmDisableDataCache();
107 ArmDisableInstructionCache();
108 ArmDisableMmu();
109}
110