AmpereAltraPkg: Add configuration screen for PCIe

This menu screen allows the user to:
- Enable/Disable each Root Complex
- Enable/Disable SMMU support
- Enable/Disable Strong Ordering
- Set Bifurcation mode for each Root Complex

Cc: Thang Nguyen <thang@os.amperecomputing.com>
Cc: Chuong Tran <chuong@os.amperecomputing.com>
Cc: Phong Vo <phong@os.amperecomputing.com>
Cc: Leif Lindholm <leif@nuviainc.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>

Signed-off-by: Nhi Pham <nhi@os.amperecomputing.com>
Acked-by: Leif Lindholm <leif@nuviainc.com>
This commit is contained in:
Vu Nguyen
2021-05-04 16:33:02 +07:00
committed by Leif Lindholm
parent 9ee4118c06
commit bf73dd1e63
10 changed files with 1859 additions and 0 deletions

View File

@@ -181,3 +181,8 @@
Platform/Ampere/JadePkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf
ArmPkg/Universal/Smbios/ProcessorSubClassDxe/ProcessorSubClassDxe.inf
Platform/Ampere/JadePkg/Drivers/SmbiosMemInfoDxe/SmbiosMemInfoDxe.inf
#
# HII
#
Silicon/Ampere/AmpereAltraPkg/Drivers/RootComplexConfigDxe/RootComplexConfigDxe.inf

View File

@@ -348,4 +348,9 @@ APRIORI DXE {
INF ArmPkg/Universal/Smbios/ProcessorSubClassDxe/ProcessorSubClassDxe.inf
INF Platform/Ampere/JadePkg/Drivers/SmbiosMemInfoDxe/SmbiosMemInfoDxe.inf
#
# HII
#
INF Silicon/Ampere/AmpereAltraPkg/Drivers/RootComplexConfigDxe/RootComplexConfigDxe.inf
!include Silicon/Ampere/AmpereSiliconPkg/FvRules.fdf.inc

View File

@@ -61,3 +61,6 @@
## Include/Guid/RootComplexInfoHob.h
gRootComplexInfoHobGuid = { 0x568a258a, 0xcaa1, 0x47e9, { 0xbb, 0x89, 0x65, 0xa3, 0x73, 0x9b, 0x58, 0x75 } }
## Include/Guid/RootComplexConfigHii.h
gRootComplexConfigFormSetGuid = { 0xE84E70D6, 0xE4B2, 0x4C6E, { 0x98, 0x51, 0xCB, 0x2B, 0xAC, 0x77, 0x7D, 0xBB } }

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,114 @@
/** @file
Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef BOARD_PCIE_SCREEN_H_
#define BOARD_PCIE_SCREEN_H_
#include "RootComplexConfigNVDataStruct.h"
//
// This is the generated IFR binary data for each formset defined in VFR.
// This data array is ready to be used as input of HiiAddPackages() to
// create a packagelist (which contains Form packages, String packages, etc).
//
extern UINT8 RootComplexConfigVfrBin[];
//
// This is the generated String package data for all .UNI files.
// This data array is ready to be used as input of HiiAddPackages() to
// create a packagelist (which contains Form packages, String packages, etc).
//
extern UINT8 RootComplexConfigDxeStrings[];
#define MAX_EDITABLE_ELEMENTS 3
#define RC0_STATUS_OFFSET \
OFFSET_OF (ROOT_COMPLEX_CONFIG_VARSTORE_DATA, RCStatus[0])
#define RC0_BIFUR_LO_OFFSET \
OFFSET_OF (ROOT_COMPLEX_CONFIG_VARSTORE_DATA, RCBifurcationLow[0])
#define RC0_BIFUR_HI_OFFSET \
OFFSET_OF (ROOT_COMPLEX_CONFIG_VARSTORE_DATA, RCBifurcationHigh[0])
#define SMMU_PMU_OFFSET \
OFFSET_OF (ROOT_COMPLEX_CONFIG_VARSTORE_DATA, SmmuPmu)
#define STRONG_ORDERING_OFFSET \
OFFSET_OF (NVPARAM_ROOT_COMPLEX_CONFIG_VARSTORE_DATA, PcieStrongOrdering)
//
// Signature: Ampere Computing PCIe Screen
//
#define SCREEN_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('A', 'C', 'P', 'S')
#define MAX_STRING_SIZE 32
#define STRONG_ORDERING_DEFAULT_OPTION_VALUE 1
#define STRONG_ORDERING_DEFAULT_NVPARAM_VALUE 0xFFFFFFFF
typedef struct {
UINTN Signature;
EFI_HANDLE DriverHandle;
EFI_HII_HANDLE HiiHandle;
ROOT_COMPLEX_CONFIG_VARSTORE_DATA VarStoreConfig;
NVPARAM_ROOT_COMPLEX_CONFIG_VARSTORE_DATA NVParamVarStoreConfig;
//
// Consumed protocol
//
EFI_HII_DATABASE_PROTOCOL *HiiDatabase;
EFI_HII_STRING_PROTOCOL *HiiString;
EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting;
EFI_CONFIG_KEYWORD_HANDLER_PROTOCOL *HiiKeywordHandler;
//
// Produced protocol
//
EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;
} SCREEN_PRIVATE_DATA;
typedef struct {
UINTN PciDevIdx;
EFI_STRING_ID GotoStringId;
EFI_STRING_ID GotoHelpStringId;
UINT16 GotoKey;
BOOLEAN ShowItem;
} SETUP_GOTO_DATA;
#define SCREEN_PRIVATE_FROM_THIS(a) \
CR (a, SCREEN_PRIVATE_DATA, ConfigAccess, SCREEN_PRIVATE_DATA_SIGNATURE)
#pragma pack(1)
///
/// HII specific Vendor Device Path definition.
///
typedef struct {
VENDOR_DEVICE_PATH VendorDevicePath;
EFI_DEVICE_PATH_PROTOCOL End;
} HII_VENDOR_DEVICE_PATH;
#pragma pack()
UINT8
PcieRCDevMapLowDefaultSetting (
IN UINTN RCIndex,
IN SCREEN_PRIVATE_DATA *PrivateData
);
UINT8
PcieRCDevMapHighDefaultSetting (
IN UINTN RCIndex,
IN SCREEN_PRIVATE_DATA *PrivateData
);
BOOLEAN
PcieRCActiveDefaultSetting (
IN UINTN RCIndex,
IN SCREEN_PRIVATE_DATA *PrivateData
);
#endif /* BOARD_PCIE_SCREEN_H_ */

View File

@@ -0,0 +1,61 @@
## @file
#
# Copyright (c) 2021, Ampere Computing LLC. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
[Defines]
INF_VERSION = 0x0001001B
BASE_NAME = RootComplexConfigDxe
FILE_GUID = 9820A15A-ECFE-404B-97C8-A2B76F0AB103
MODULE_TYPE = DXE_DRIVER
VERSION_STRING = 1.0
ENTRY_POINT = RootComplexDriverEntry
[Sources.common]
RootComplexConfigDxe.c
RootComplexConfigDxe.h
RootComplexConfigDxe.uni
RootComplexConfigNVDataStruct.h
RootComplexConfigVfr.vfr
[Packages]
MdeModulePkg/MdeModulePkg.dec
MdePkg/MdePkg.dec
Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dec
Silicon/Ampere/AmpereSiliconPkg/AmpereSiliconPkg.dec
[LibraryClasses]
AmpereCpuLib
BaseLib
BaseMemoryLib
DebugLib
DevicePathLib
HiiLib
HobLib
MemoryAllocationLib
NVParamLib
PrintLib
UefiBootServicesTableLib
UefiDriverEntryPoint
UefiRuntimeServicesTableLib
[Protocols]
gEfiDevicePathProtocolGuid
gEfiHiiStringProtocolGuid ## CONSUMES
gEfiHiiConfigRoutingProtocolGuid ## CONSUMES
gEfiHiiConfigAccessProtocolGuid ## PRODUCES
gEfiHiiDatabaseProtocolGuid ## CONSUMES
gEfiConfigKeywordHandlerProtocolGuid ## CONSUMES
[Guids]
gEfiIfrTianoGuid ## CONSUMES
gPlatformInfoHobGuid ## CONSUMES
gPlatformManagerFormsetGuid ## CONSUMES
gRootComplexConfigFormSetGuid ## CONSUMES
gRootComplexInfoHobGuid ## CONSUMES
[Depex]
TRUE

View File

@@ -0,0 +1,102 @@
//
// Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved.<BR>
//
// SPDX-License-Identifier: BSD-2-Clause-Patent
//
#langdef en-US "English"
#string STR_PCIE_FORM #language en-US "PCIe Root Complex Configuration"
#string STR_PCIE_FORM_HELP #language en-US "Configure Root Complex"
#string STR_PCIE_FORM_SEPERATE_LINE #language en-US ""
/////
#string STR_PCIE_GOTO #language en-US ""
#string STR_PCIE_GOTO_HELP #language en-US "Change On Board Root Complex Settings."
#string STR_PCIE_RC_STATUS #language en-US ""
#string STR_PCIE_RC_STATUS_HELP #language en-US "Enable / Disable Root Complex"
#string STR_PCIE_RCA_BIFUR #language en-US "Bifurcation x16"
#string STR_PCIE_RCA_BIFUR_HELP #language en-US "Set bifurcation mode for x16 Root Complex Type-A"
#string STR_PCIE_RCB_LO_BIFUR #language en-US "Bifurcation 1st x8"
#string STR_PCIE_RCB_LO_BIFUR_HELP #language en-US "Set bifurcation mode for 1st x8 Root Complex Type-B"
#string STR_PCIE_RCB_HI_BIFUR #language en-US "Bifurcation 2nd x8"
#string STR_PCIE_RCB_HI_BIFUR_HELP #language en-US "Set bifurcation mode for 2nd x8 Root Complex Type-B"
/////
#string STR_PCIE_RC0_FORM #language en-US "Root Complex 0 Configuration"
#string STR_PCIE_RC0_FORM_HELP #language en-US "Root Complex 0 Configuration"
#string STR_PCIE_RC1_FORM #language en-US "Root Complex 1 Configuration"
#string STR_PCIE_RC1_FORM_HELP #language en-US "Root Complex 1 Configuration"
#string STR_PCIE_RC2_FORM #language en-US "Root Complex 2 Configuration"
#string STR_PCIE_RC2_FORM_HELP #language en-US "Root Complex 2 Configuration"
#string STR_PCIE_RC3_FORM #language en-US "Root Complex 3 Configuration"
#string STR_PCIE_RC3_FORM_HELP #language en-US "Root Complex 3 Configuration"
#string STR_PCIE_RC4_FORM #language en-US "Root Complex 4 Configuration"
#string STR_PCIE_RC4_FORM_HELP #language en-US "Root Complex 4 Configuration"
#string STR_PCIE_RC5_FORM #language en-US "Root Complex 5 Configuration"
#string STR_PCIE_RC5_FORM_HELP #language en-US "Root Complex 5 Configuration"
#string STR_PCIE_RC6_FORM #language en-US "Root Complex 6 Configuration"
#string STR_PCIE_RC6_FORM_HELP #language en-US "Root Complex 6 Configuration"
#string STR_PCIE_RC7_FORM #language en-US "Root Complex 7 Configuration"
#string STR_PCIE_RC7_FORM_HELP #language en-US "Root Complex 7 Configuration"
#string STR_PCIE_RC8_FORM #language en-US "Root Complex 8 Configuration"
#string STR_PCIE_RC8_FORM_HELP #language en-US "Root Complex 8 Configuration"
#string STR_PCIE_RC9_FORM #language en-US "Root Complex 9 Configuration"
#string STR_PCIE_RC9_FORM_HELP #language en-US "Root Complex 9 Configuration"
#string STR_PCIE_RC10_FORM #language en-US "Root Complex 10 Configuration"
#string STR_PCIE_RC10_FORM_HELP #language en-US "Root Complex 10 Configuration"
#string STR_PCIE_RC11_FORM #language en-US "Root Complex 11 Configuration"
#string STR_PCIE_RC11_FORM_HELP #language en-US "Root Complex 11 Configuration"
#string STR_PCIE_RC12_FORM #language en-US "Root Complex 12 Configuration"
#string STR_PCIE_RC12_FORM_HELP #language en-US "Root Complex 12 Configuration"
#string STR_PCIE_RC13_FORM #language en-US "Root Complex 13 Configuration"
#string STR_PCIE_RC13_FORM_HELP #language en-US "Root Complex 13 Configuration"
#string STR_PCIE_RC14_FORM #language en-US "Root Complex 14 Configuration"
#string STR_PCIE_RC14_FORM_HELP #language en-US "Root Complex 14 Configuration"
#string STR_PCIE_RC15_FORM #language en-US "Root Complex 15 Configuration"
#string STR_PCIE_RC15_FORM_HELP #language en-US "Root Complex 15 Configuration"
#string STR_PCIE_BIFUR_SELECT_VALUE0 #language en-US "x16"
#string STR_PCIE_BIFUR_SELECT_VALUE1 #language en-US "x8+x8"
#string STR_PCIE_BIFUR_SELECT_VALUE2 #language en-US "x8+x4+x4"
#string STR_PCIE_BIFUR_SELECT_VALUE3 #language en-US "x4+x4+x4+x4"
#string STR_PCIE_BIFUR_SELECT_VALUE4 #language en-US "x8"
#string STR_PCIE_BIFUR_SELECT_VALUE5 #language en-US "x4+x4"
#string STR_PCIE_BIFUR_SELECT_VALUE6 #language en-US "x4+x2+x2"
#string STR_PCIE_BIFUR_SELECT_VALUE7 #language en-US "x2+x2+x2+x2"
#string STR_PCIE_SOCKET #language en-US "Socket"
#string STR_PCIE_SOCKET_HELP #language en-US "Socket 0 - Master; Socket 1 - Slave"
#string STR_PCIE_SOCKET_VALUE #language en-US ""
#string STR_PCIE_RC_TYPE #language en-US "Type"
#string STR_PCIE_RC_TYPE_HELP #language en-US "Type-A: x16 lanes bifurcated down to x4; Type-B: 2 of x8 lanes, each bifurcated down to x2"
#string STR_PCIE_RC_TYPE_VALUE #language en-US ""
#string STR_PCIE_SMMU_PMU_PROMPT #language en-US "SMMU Pmu"
#string STR_PCIE_SMMU_PMU_HELP #language en-US "Enable/Disable PMU feature for SMMU"
#string STR_PCIE_STRONG_ORDERING_PROMPT #language en-US "PCIe Strong Ordering"
#string STR_PCIE_STRONG_ORDERING_HELP #language en-US "Enable/disable PCIe Strong Ordering with internal bus"

View File

@@ -0,0 +1,91 @@
/** @file
Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef BOARD_PCIE_VFR_H_
#define BOARD_PCIE_VFR_H_
#include <Platform/Ac01.h>
#define VARSTORE_ID 0x1234
#define FORM_ID 0x1235
#define RC0_FORM_ID 0x1236
#define RC1_FORM_ID 0x1237
#define RC2_FORM_ID 0x1238
#define RC3_FORM_ID 0x1239
#define RC4_FORM_ID 0x123A
#define RC5_FORM_ID 0x123B
#define RC6_FORM_ID 0x123C
#define RC7_FORM_ID 0x123D
#define RC8_FORM_ID 0x123E
#define RC9_FORM_ID 0x123F
#define RC10_FORM_ID 0x1240
#define RC11_FORM_ID 0x1241
#define RC12_FORM_ID 0x1242
#define RC13_FORM_ID 0x1243
#define RC14_FORM_ID 0x1244
#define RC15_FORM_ID 0x1245
#define QUESTION_ID_BASE 0x8002
#define GOTO_ID_BASE 0x8040
#define SMMU_PMU_ID 0x9000
#define STRONG_ORDERING_ID 0x9001
#define NVPARAM_VARSTORE_NAME L"PcieIfrNVParamData"
#define NVPARAM_VARSTORE_ID 0x1233
#pragma pack(1)
//
// NVParam data structure definition
//
typedef struct {
BOOLEAN PcieStrongOrdering;
} NVPARAM_ROOT_COMPLEX_CONFIG_VARSTORE_DATA;
#pragma pack()
//
// Labels definition
//
#define LABEL_UPDATE 0x2223
#define LABEL_END 0x2224
#define LABEL_RC0_UPDATE 0x2225
#define LABEL_RC0_END 0x2226
#define LABEL_RC1_UPDATE 0x2227
#define LABEL_RC1_END 0x2228
#define LABEL_RC2_UPDATE 0x2229
#define LABEL_RC2_END 0x222A
#define LABEL_RC3_UPDATE 0x222B
#define LABEL_RC3_END 0x222C
#define LABEL_RC4_UPDATE 0x222D
#define LABEL_RC4_END 0x222E
#define LABEL_RC5_UPDATE 0x222F
#define LABEL_RC5_END 0x2230
#define LABEL_RC6_UPDATE 0x2231
#define LABEL_RC6_END 0x2232
#define LABEL_RC7_UPDATE 0x2233
#define LABEL_RC7_END 0x2234
#define LABEL_RC8_UPDATE 0x2235
#define LABEL_RC8_END 0x2236
#define LABEL_RC9_UPDATE 0x2237
#define LABEL_RC9_END 0x2238
#define LABEL_RC10_UPDATE 0x2239
#define LABEL_RC10_END 0x223A
#define LABEL_RC11_UPDATE 0x223B
#define LABEL_RC11_END 0x223C
#define LABEL_RC12_UPDATE 0x223D
#define LABEL_RC12_END 0x223E
#define LABEL_RC13_UPDATE 0x223F
#define LABEL_RC13_END 0x2240
#define LABEL_RC14_UPDATE 0x2241
#define LABEL_RC14_END 0x2242
#define LABEL_RC15_UPDATE 0x2243
#define LABEL_RC15_END 0x2244
#endif /* BOARD_PCIE_VFR_H_ */

View File

@@ -0,0 +1,219 @@
/** @file
Copyright (c) 2020 - 2021, Ampere Computing LLC. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <Guid/RootComplexConfigHii.h>
#include <Guid/PlatformManagerHii.h>
#include "RootComplexConfigNVDataStruct.h"
formset
guid = ROOT_COMPLEX_CONFIG_FORMSET_GUID,
title = STRING_TOKEN(STR_PCIE_FORM),
help = STRING_TOKEN(STR_PCIE_FORM_HELP),
classguid = gPlatformManagerFormsetGuid,
//
// Define a variable Storage
//
varstore ROOT_COMPLEX_CONFIG_VARSTORE_DATA,
varid = VARSTORE_ID,
name = PcieIfrNVData,
guid = ROOT_COMPLEX_CONFIG_FORMSET_GUID;
varstore NVPARAM_ROOT_COMPLEX_CONFIG_VARSTORE_DATA,
varid = NVPARAM_VARSTORE_ID,
name = PcieIfrNVParamData,
guid = ROOT_COMPLEX_CONFIG_FORMSET_GUID;
form
formid = FORM_ID,
title = STRING_TOKEN(STR_PCIE_FORM);
subtitle text = STRING_TOKEN(STR_PCIE_FORM);
label LABEL_UPDATE;
// dynamic content here
label LABEL_END;
endform;
form
formid = RC0_FORM_ID,
title = STRING_TOKEN(STR_PCIE_RC0_FORM);
subtitle text = STRING_TOKEN(STR_PCIE_RC0_FORM);
label LABEL_RC0_UPDATE;
// dynamic content here
label LABEL_RC0_END;
endform;
form
formid = RC1_FORM_ID,
title = STRING_TOKEN(STR_PCIE_RC1_FORM);
subtitle text = STRING_TOKEN(STR_PCIE_RC1_FORM);
label LABEL_RC1_UPDATE;
// dynamic content here
label LABEL_RC1_END;
endform;
form
formid = RC2_FORM_ID,
title = STRING_TOKEN(STR_PCIE_RC2_FORM);
subtitle text = STRING_TOKEN(STR_PCIE_RC2_FORM);
label LABEL_RC2_UPDATE;
// dynamic content here
label LABEL_RC2_END;
endform;
form
formid = RC3_FORM_ID,
title = STRING_TOKEN(STR_PCIE_RC3_FORM);
subtitle text = STRING_TOKEN(STR_PCIE_RC3_FORM);
label LABEL_RC3_UPDATE;
// dynamic content here
label LABEL_RC3_END;
endform;
form
formid = RC4_FORM_ID,
title = STRING_TOKEN(STR_PCIE_RC4_FORM);
subtitle text = STRING_TOKEN(STR_PCIE_RC4_FORM);
label LABEL_RC4_UPDATE;
// dynamic content here
label LABEL_RC4_END;
endform;
form
formid = RC5_FORM_ID,
title = STRING_TOKEN(STR_PCIE_RC5_FORM);
subtitle text = STRING_TOKEN(STR_PCIE_RC5_FORM);
label LABEL_RC5_UPDATE;
// dynamic content here
label LABEL_RC5_END;
endform;
form
formid = RC6_FORM_ID,
title = STRING_TOKEN(STR_PCIE_RC6_FORM);
subtitle text = STRING_TOKEN(STR_PCIE_RC6_FORM);
label LABEL_RC6_UPDATE;
// dynamic content here
label LABEL_RC6_END;
endform;
form
formid = RC7_FORM_ID,
title = STRING_TOKEN(STR_PCIE_RC7_FORM);
subtitle text = STRING_TOKEN(STR_PCIE_RC7_FORM);
label LABEL_RC7_UPDATE;
// dynamic content here
label LABEL_RC7_END;
endform;
form
formid = RC8_FORM_ID,
title = STRING_TOKEN(STR_PCIE_RC8_FORM);
subtitle text = STRING_TOKEN(STR_PCIE_RC8_FORM);
label LABEL_RC8_UPDATE;
// dynamic content here
label LABEL_RC8_END;
endform;
form
formid = RC9_FORM_ID,
title = STRING_TOKEN(STR_PCIE_RC9_FORM);
subtitle text = STRING_TOKEN(STR_PCIE_RC9_FORM);
label LABEL_RC9_UPDATE;
// dynamic content here
label LABEL_RC9_END;
endform;
form
formid = RC10_FORM_ID,
title = STRING_TOKEN(STR_PCIE_RC10_FORM);
subtitle text = STRING_TOKEN(STR_PCIE_RC10_FORM);
label LABEL_RC10_UPDATE;
// dynamic content here
label LABEL_RC10_END;
endform;
form
formid = RC11_FORM_ID,
title = STRING_TOKEN(STR_PCIE_RC11_FORM);
subtitle text = STRING_TOKEN(STR_PCIE_RC11_FORM);
label LABEL_RC11_UPDATE;
// dynamic content here
label LABEL_RC11_END;
endform;
form
formid = RC12_FORM_ID,
title = STRING_TOKEN(STR_PCIE_RC12_FORM);
subtitle text = STRING_TOKEN(STR_PCIE_RC12_FORM);
label LABEL_RC12_UPDATE;
// dynamic content here
label LABEL_RC12_END;
endform;
form
formid = RC13_FORM_ID,
title = STRING_TOKEN(STR_PCIE_RC13_FORM);
subtitle text = STRING_TOKEN(STR_PCIE_RC13_FORM);
label LABEL_RC13_UPDATE;
// dynamic content here
label LABEL_RC13_END;
endform;
form
formid = RC14_FORM_ID,
title = STRING_TOKEN(STR_PCIE_RC14_FORM);
subtitle text = STRING_TOKEN(STR_PCIE_RC14_FORM);
label LABEL_RC14_UPDATE;
// dynamic content here
label LABEL_RC14_END;
endform;
form
formid = RC15_FORM_ID,
title = STRING_TOKEN(STR_PCIE_RC15_FORM);
subtitle text = STRING_TOKEN(STR_PCIE_RC15_FORM);
label LABEL_RC15_UPDATE;
// dynamic content here
label LABEL_RC15_END;
endform;
endformset;

View File

@@ -0,0 +1,33 @@
/** @file
Copyright (c) 2021, Ampere Computing LLC. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef ROOT_COMPLEX_CONFIG_HII_H_
#define ROOT_COMPLEX_CONFIG_HII_H_
#include <Platform/Ac01.h>
#define ROOT_COMPLEX_CONFIG_FORMSET_GUID \
{ \
0xE84E70D6, 0xE4B2, 0x4C6E, { 0x98, 0x51, 0xCB, 0x2B, 0xAC, 0x77, 0x7D, 0xBB } \
}
extern EFI_GUID gRootComplexConfigFormSetGuid;
//
// NV data structure definition
//
typedef struct {
BOOLEAN RCStatus[AC01_PCIE_MAX_ROOT_COMPLEX];
UINT8 RCBifurcationLow[AC01_PCIE_MAX_ROOT_COMPLEX];
UINT8 RCBifurcationHigh[AC01_PCIE_MAX_ROOT_COMPLEX];
UINT32 SmmuPmu;
} ROOT_COMPLEX_CONFIG_VARSTORE_DATA;
#define ROOT_COMPLEX_CONFIG_VARSTORE_NAME L"PcieIfrNVData"
#endif /* ROOT_COMPLEX_CONFIG_HII_H_ */