hc
2024-03-26 e0728245c89800c2038c23308f2d88969d5b41c8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/** @file
  Library for Phytium platform.
 
  Copyright (C) 2020, Phytium Technology Co Ltd. All rights reserved.<BR>
 
  SPDX-License-Identifier: BSD-2-Clause-Patent
 
**/
 
#include <Library/ArmPlatformLib.h>
#include <Library/DebugLib.h>
#include <Library/IoLib.h>
#include <Library/PcdLib.h>
#include <Ppi/ArmMpCoreInfo.h>
 
ARM_CORE_INFO mPhytiumMpCoreInfoTable[] = {
  {
    0x0, 0x0,              // Cluster 0, Core 0
 
    // MP Core MailBox Set/Get/Clear Addresses and Clear Value
    (EFI_PHYSICAL_ADDRESS)0,
    (EFI_PHYSICAL_ADDRESS)0,
    (EFI_PHYSICAL_ADDRESS)0,
    (UINT64)0xFFFFFFFF
  }
};
 
/*
  This function geted the current Boot Mode.
 
  This function returns the boot reason on the platform.
 
  @return   Return the current Boot Mode of the platform.
 
*/
EFI_BOOT_MODE
ArmPlatformGetBootMode (
  VOID
  )
{
  return BOOT_WITH_FULL_CONFIGURATION;
}
 
 
/**
  Initialize controllers that must setup in the normal world.
 
  This function is called by the ArmPlatformPkg/Pei or ArmPlatformPkg/Pei/PlatformPeim
  in the PEI phase.
 
  @retval      EFI_SUCCESS    ArmPlatformInitialize() is executed successfully.
 
**/
RETURN_STATUS
ArmPlatformInitialize (
  IN  UINTN                     MpId
  )
{
  return RETURN_SUCCESS;
}
 
 
/**
  This function Inited the system (or sometimes called permanent) memory.
 
  This memory is generally represented by the DRAM.
 
  @param[in]   None.
 
  @retval      None.
 
**/
VOID
ArmPlatformInitializeSystemMemory (
  VOID
  )
{
  // Nothing to do here
}
 
 
/**
  This function geted the information of core.
 
  @param[out]  CoreCount      The count of CoreInfoTable.
  @param[out]  ArmCoreTable   The pointer of CoreInfoTable.
 
  @retval      EFI_SUCCESS    PrePeiCoreGetMpCoreInfo() is executed successfully.
 
**/
EFI_STATUS
PrePeiCoreGetMpCoreInfo (
  OUT UINTN                   *CoreCount,
  OUT ARM_CORE_INFO           **ArmCoreTable
  )
{
  *CoreCount    = PcdGet32 (PcdCoreCount);
  *ArmCoreTable = mPhytiumMpCoreInfoTable;
 
  return EFI_SUCCESS;
}
 
//
// Needs to be declared in the file. Otherwise gArmMpCoreInfoPpiGuid is
// undefined in the contect of PrePeiCore
//
EFI_GUID mArmMpCoreInfoPpiGuid = ARM_MP_CORE_INFO_PPI_GUID;
ARM_MP_CORE_INFO_PPI mMpCoreInfoPpi = { PrePeiCoreGetMpCoreInfo };
 
EFI_PEI_PPI_DESCRIPTOR gPlatformPpiTable[] =
{
  {
    EFI_PEI_PPI_DESCRIPTOR_PPI,
    &mArmMpCoreInfoPpiGuid,
    &mMpCoreInfoPpi
  }
};
 
 
/**
  This function geted the information of Ppitable.
 
  @param[out]  PpiListSize      The size of Ppitable.
  @param[out]  PpiList          The pointer of Ppitable.
 
  @retval      None.
 
**/
VOID
ArmPlatformGetPlatformPpiList (
  OUT UINTN                   *PpiListSize,
  OUT EFI_PEI_PPI_DESCRIPTOR  **PpiList
  )
{
  *PpiListSize = sizeof (gPlatformPpiTable);
  *PpiList = gPlatformPpiTable;
}