* [edk2-platforms][PATCH 1/2] ManageabilityPkg/IpmiFrb: IPMI BMC ACPI Driver
@ 2023-05-13 15:49 Chang, Abner
2023-05-13 15:49 ` [edk2-platforms][PATCH 2/2] ManageabilityPkg/IpmiBmcAcpi: Add to ManageabilityPkg Chang, Abner
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Chang, Abner @ 2023-05-13 15:49 UTC (permalink / raw)
To: devel; +Cc: Isaac Oram, Abdul Lateef Attar, Nickle Wang, Tinh Nguyen
From: Abner Chang <abner.chang@amd.com>
IpmiBmcAcpi is cloned from
edk2-platforms/Features/Intel/OutOfBandManagement/
IpmiFeaturePkg/BmcAcpi in order to consolidate
edk2 system manageability support in one place.
Uncustify is applied to C files and no functionalities
are changed in this patch.
We will still keep the one under IpmiFeaturePkg/BmcAcpi
until the reference to this instance are removed from
platforms.
Signed-off-by: Abner Chang <abner.chang@amd.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Abdul Lateef Attar <abdattar@amd.com>
Cc: Nickle Wang <nicklew@nvidia.com>
Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com>
---
.../Universal/IpmiBmcAcpi/BmcAcpi.inf | 47 ++++
.../Universal/IpmiBmcAcpi/BmcAcpi.c | 264 ++++++++++++++++++
.../Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.asl | 28 ++
.../IpmiBmcAcpi/BmcSsdt/IpmiOprRegions.asi | 58 ++++
4 files changed, 397 insertions(+)
create mode 100644 Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf
create mode 100644 Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.c
create mode 100644 Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.asl
create mode 100644 Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/IpmiOprRegions.asi
diff --git a/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf
new file mode 100644
index 0000000000..a21c5b9b35
--- /dev/null
+++ b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf
@@ -0,0 +1,47 @@
+### @file
+# Component description file for BMC ACPI.
+#
+# Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+###
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = BmcAcpi
+ FILE_GUID = 09E3B4BE-F731-4903-AAE6-BD5D573B6140
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = BmcAcpiEntryPoint
+
+[Sources]
+ BmcAcpi.c
+ BmcSsdt/BmcSsdt.asl
+
+[Packages]
+ ManageabilityPkg/ManageabilityPkg.dec
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+
+[LibraryClasses]
+ BaseMemoryLib
+ DebugLib
+ UefiBootServicesTableLib
+ UefiDriverEntryPoint
+ UefiLib
+
+[Protocols]
+ gEfiFirmwareVolume2ProtocolGuid
+ gEfiAcpiTableProtocolGuid
+
+[Pcd]
+ gEfiMdePkgTokenSpaceGuid.PcdIpmiKcsIoBaseAddress
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemId
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemTableId
+
+[Depex]
+ gEfiAcpiTableProtocolGuid
+
+[BuildOptions]
+ *_*_*_ASL_FLAGS = -oi
diff --git a/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.c b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.c
new file mode 100644
index 0000000000..cf066dd095
--- /dev/null
+++ b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.c
@@ -0,0 +1,264 @@
+/** @file
+ IPMI BMC ACPI.
+
+ Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+//
+// Statements that include other header files
+//
+#include <PiDxe.h>
+
+#include <IndustryStandard/Acpi.h>
+#include <Protocol/AcpiSystemDescriptionTable.h>
+#include <Protocol/FirmwareVolume2.h>
+#include <Protocol/AcpiTable.h>
+
+#include <Library/BaseLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/DebugLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/UefiLib.h>
+
+#ifndef EFI_ACPI_CREATOR_ID
+#define EFI_ACPI_CREATOR_ID SIGNATURE_32 ('M', 'S', 'F', 'T')
+#endif
+#ifndef EFI_ACPI_CREATOR_REVISION
+#define EFI_ACPI_CREATOR_REVISION 0x0100000D
+#endif
+
+/**
+
+ Locate the first instance of a protocol. If the protocol requested is an
+ FV protocol, then it will return the first FV that contains the ACPI table
+ storage file.
+
+ @param [in] Protocol The protocol to find.
+ @param [in] Instance Return pointer to the first instance of the protocol.
+ @param [in] Type The type of protocol to locate.
+
+ @retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND The protocol could not be located.
+ @retval EFI_OUT_OF_RESOURCES There are not enough resources to find the protocol.
+
+**/
+EFI_STATUS
+LocateSupportProtocol (
+ IN EFI_GUID *Protocol,
+ OUT VOID **Instance,
+ IN UINT32 Type
+ )
+{
+ EFI_STATUS Status;
+ EFI_HANDLE *HandleBuffer;
+ UINTN NumberOfHandles;
+ EFI_FV_FILETYPE FileType;
+ UINT32 FvStatus = 0;
+ EFI_FV_FILE_ATTRIBUTES Attributes;
+ UINTN Size;
+ UINTN Index;
+
+ Status = gBS->LocateHandleBuffer (ByProtocol, Protocol, NULL, &NumberOfHandles, &HandleBuffer);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ //
+ // Looking for FV with ACPI storage file
+ //
+ for (Index = 0; Index < NumberOfHandles; Index++) {
+ Status = gBS->HandleProtocol (HandleBuffer[Index], Protocol, Instance);
+ ASSERT (!EFI_ERROR (Status));
+
+ if (!Type) {
+ //
+ // Not looking for the FV protocol, so find the first instance of the
+ // protocol. There should not be any errors because our handle buffer
+ // should always contain at least one or LocateHandleBuffer would have
+ // returned not found.
+ //
+ break;
+ }
+
+ //
+ // See if it has the ACPI storage file
+ //
+ Status = ((EFI_FIRMWARE_VOLUME2_PROTOCOL *)(*Instance))->ReadFile (
+ *Instance,
+ &gEfiCallerIdGuid,
+ NULL,
+ &Size,
+ &FileType,
+ &Attributes,
+ &FvStatus
+ );
+
+ //
+ // If we found it, then we are done
+ //
+ if (!EFI_ERROR (Status)) {
+ break;
+ }
+ }
+
+ gBS->FreePool (HandleBuffer);
+ return Status;
+}
+
+/**
+ Update ACPI SSDT for BMC IPMI KCS device
+
+ @param [in] Table Pointer to ACPI SSDT
+
+ @retval EFI_SUCCESS SSDT is updated according to PCD settings
+**/
+EFI_STATUS
+UpdateDeviceSsdtTable (
+ IN OUT EFI_ACPI_COMMON_HEADER *Table
+ )
+{
+ EFI_ACPI_DESCRIPTION_HEADER *TableHeader = NULL;
+ UINT64 TempOemTableId;
+ UINT8 *DataPtr;
+ EFI_ACPI_IO_PORT_DESCRIPTOR *IoRsc;
+
+ TableHeader = (EFI_ACPI_DESCRIPTION_HEADER *)Table;
+
+ //
+ // Update the OEMID and OEM Table ID.
+ //
+ CopyMem (&TableHeader->OemId, PcdGetPtr (PcdAcpiDefaultOemId), sizeof (TableHeader->OemId));
+ TempOemTableId = PcdGet64 (PcdAcpiDefaultOemTableId);
+ CopyMem (&TableHeader->OemTableId, &TempOemTableId, sizeof (UINT64));
+ TableHeader->CreatorId = EFI_ACPI_CREATOR_ID;
+ TableHeader->CreatorRevision = EFI_ACPI_CREATOR_REVISION;
+
+ //
+ // Update IO(Decode16, 0xCA2, 0xCA2, 0, 2)
+ //
+ DEBUG ((DEBUG_INFO, "UpdateDeviceSsdtTable - IPMI\n"));
+ for (DataPtr = (UINT8 *)(Table + 1);
+ DataPtr < (UINT8 *)((UINT8 *)Table + Table->Length - 4);
+ DataPtr++)
+ {
+ if (CompareMem (DataPtr, "_CRS", 4) == 0) {
+ DataPtr += 4; // Skip _CRS
+ ASSERT (*DataPtr == AML_BUFFER_OP);
+ DataPtr++; // Skip AML_BUFFER_OP
+ ASSERT ((*DataPtr & (BIT7|BIT6)) == 0);
+ DataPtr++; // Skip PkgLength - 0xD
+ ASSERT ((*DataPtr) == AML_BYTE_PREFIX);
+ DataPtr++; // Skip BufferSize OpCode
+ DataPtr++; // Skip BufferSize - 0xA
+ IoRsc = (VOID *)DataPtr;
+ ASSERT (IoRsc->Header.Bits.Type == ACPI_SMALL_ITEM_FLAG);
+ ASSERT (IoRsc->Header.Bits.Name == ACPI_SMALL_IO_PORT_DESCRIPTOR_NAME);
+ ASSERT (IoRsc->Header.Bits.Length == sizeof (EFI_ACPI_IO_PORT_DESCRIPTOR) - sizeof (ACPI_SMALL_RESOURCE_HEADER));
+ DEBUG ((DEBUG_INFO, "IPMI IO Base in ASL update - 0x%04x <= 0x%04x\n", IoRsc->BaseAddressMin, PcdGet16 (PcdIpmiKcsIoBaseAddress)));
+ IoRsc->BaseAddressMin = PcdGet16 (PcdIpmiKcsIoBaseAddress);
+ IoRsc->BaseAddressMax = PcdGet16 (PcdIpmiKcsIoBaseAddress);
+ }
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+
+ Entry point for Acpi platform driver.
+
+ @param [in] ImageHandle A handle for the image that is initializing this driver.
+ @param [in] SystemTable A pointer to the EFI system table.
+
+ @retval EFI_SUCCESS Driver initialized successfully.
+ @retval EFI_LOAD_ERROR Failed to Initialize or has been loaded.
+ @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources.
+
+**/
+EFI_STATUS
+EFIAPI
+BmcAcpiEntryPoint (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_STATUS Status;
+ EFI_STATUS AcpiStatus;
+
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *FwVol;
+ INTN Instance = 0;
+ EFI_ACPI_COMMON_HEADER *CurrentTable = NULL;
+ UINTN TableHandle = 0;
+ UINT32 FvStatus;
+ UINT32 Size;
+
+ EFI_ACPI_TABLE_PROTOCOL *AcpiTable;
+ UINTN TableSize;
+
+ //
+ // Find the AcpiTable protocol
+ //
+ Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID **)&AcpiTable);
+ if (EFI_ERROR (Status)) {
+ return EFI_ABORTED;
+ }
+
+ //
+ // Locate the firmware volume protocol
+ //
+ Status = LocateSupportProtocol (&gEfiFirmwareVolume2ProtocolGuid, (VOID **)&FwVol, 1);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = EFI_SUCCESS;
+ Instance = 0;
+
+ //
+ // Read tables from the storage file.
+ //
+ while (!EFI_ERROR (Status)) {
+ CurrentTable = NULL;
+
+ Status = FwVol->ReadSection (
+ FwVol,
+ &gEfiCallerIdGuid,
+ EFI_SECTION_RAW,
+ Instance,
+ (VOID **)&CurrentTable,
+ (UINTN *)&Size,
+ &FvStatus
+ );
+ if (!EFI_ERROR (Status)) {
+ //
+ // Perform any table specific updates.
+ //
+ AcpiStatus = UpdateDeviceSsdtTable (CurrentTable);
+ if (!EFI_ERROR (AcpiStatus)) {
+ TableHandle = 0;
+ TableSize = ((EFI_ACPI_DESCRIPTION_HEADER *)CurrentTable)->Length;
+ ASSERT (Size >= TableSize);
+
+ Status = AcpiTable->InstallAcpiTable (
+ AcpiTable,
+ CurrentTable,
+ TableSize,
+ &TableHandle
+ );
+
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ //
+ // Increment the instance
+ //
+ Instance++;
+ }
+ }
+
+ return EFI_SUCCESS;
+}
diff --git a/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.asl b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.asl
new file mode 100644
index 0000000000..8157d744c8
--- /dev/null
+++ b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.asl
@@ -0,0 +1,28 @@
+/** @file
+ BMC ACPI SSDT.
+
+Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+DefinitionBlock (
+ "BmcSsdt.aml",
+ "SSDT",
+ 0x02, // SSDT revision.
+ // A Revision field value greater than or equal to 2 signifies that integers
+ // declared within the Definition Block are to be evaluated as 64-bit values
+ "INTEL", // OEM ID (6 byte string), same as PcdAcpiDefaultOemId defined in MdeModulePkg.dec
+ "BMCACPI", // OEM table ID (8 byte string)
+ 0x0 // OEM version of DSDT table (4 byte Integer)
+ )
+{
+
+ External(\_SB.PC00.LPC0, DeviceObj)
+
+ Scope (\_SB.PC00.LPC0)
+ {
+ #include "IpmiOprRegions.asi"
+ }
+
+}
diff --git a/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/IpmiOprRegions.asi b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/IpmiOprRegions.asi
new file mode 100644
index 0000000000..ffd6af3944
--- /dev/null
+++ b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/IpmiOprRegions.asi
@@ -0,0 +1,58 @@
+/** @file
+ IPMI ACPI SSDT.
+
+Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+Device(IPMC)
+{
+ // Config DWord, modified during POST
+ // Bit definitions are the same as PPMFlags:
+ // [00] = Plug and Play BMC Detection enabled in setup
+ // [31:01] = Reserved = 0
+
+ Name(ECFL, 0x80000000)
+
+ // Return the interface specification revision
+ Method(_SRV)
+ {
+ // IPMI Specification Revision v2.0
+ Return(0x0200)
+ }
+
+ Method(_STA, 0)
+ {
+ //
+ // Assume OK
+ //
+ Store (0xF, Local0)
+
+ Return(Local0)
+
+ // Bit 0 - Set if the device is present.
+ // Bit 1 - Set if the device is enabled and decoding its resources.
+ // Bit 2 - Set if the device should be shown in the UI.
+ // Bit 3 - Set if the device is functioning properly (cleared if the device failed its diagnostics).
+ // Bit 4 - Set if the battery is present.
+ // Bit 5 - Reserved (must be cleared).
+ } // end of _STA
+
+ // Return the x86 resources consumed by BMC
+ Name(_CRS, ResourceTemplate()
+ {
+ // Uses 8-bit ports 0xCA2-0xCA5
+ IO(Decode16, 0xCA2, 0xCA2, 0, 2)
+ })
+
+ Name(_HID, "IPI0001") // IPMI device
+ Name(_IFT, 0x1) // KCS system interface type
+ Name(_STR, Unicode("IPMI_KCS"))
+
+ Name(_UID, 0) // First interface.
+
+
+} // end of Device(IPMC)
+
+
--
2.37.1.windows.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [edk2-platforms][PATCH 2/2] ManageabilityPkg/IpmiBmcAcpi: Add to ManageabilityPkg
2023-05-13 15:49 [edk2-platforms][PATCH 1/2] ManageabilityPkg/IpmiFrb: IPMI BMC ACPI Driver Chang, Abner
@ 2023-05-13 15:49 ` Chang, Abner
2023-05-19 3:27 ` Isaac Oram
[not found] ` <175EBEB128F4E63F.30531@groups.io>
2023-05-19 3:27 ` [edk2-devel] [edk2-platforms][PATCH 1/2] ManageabilityPkg/IpmiFrb: IPMI BMC ACPI Driver Isaac Oram
2 siblings, 1 reply; 6+ messages in thread
From: Chang, Abner @ 2023-05-13 15:49 UTC (permalink / raw)
To: devel; +Cc: Isaac Oram, Abdul Lateef Attar, Nickle Wang
From: Abner Chang <abner.chang@amd.com>
Add IpmiBmcAcpi to ManageabilityPkg.
Signed-off-by: Abner Chang <abner.chang@amd.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Abdul Lateef Attar <abdattar@amd.com>
Cc: Nickle Wang <nicklew@nvidia.com>
---
Features/ManageabilityPkg/ManageabilityPkg.dec | 1 +
Features/ManageabilityPkg/Include/Manageability.dsc | 4 ++++
Features/ManageabilityPkg/ManageabilityPkg.dsc | 3 ++-
Features/ManageabilityPkg/Include/PostMemory.fdf | 4 ++++
4 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dec b/Features/ManageabilityPkg/ManageabilityPkg.dec
index 38813c5f48..ac3504cb41 100644
--- a/Features/ManageabilityPkg/ManageabilityPkg.dec
+++ b/Features/ManageabilityPkg/ManageabilityPkg.dec
@@ -79,4 +79,5 @@
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmEnable|FALSE|BOOLEAN|0x10000004
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable|FALSE|BOOLEAN|0x10000005
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmSmbiosTransferEnable|FALSE|BOOLEAN|0x10000006
+ gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiBmcAcpi|FALSE|BOOLEAN|0x1000000D
diff --git a/Features/ManageabilityPkg/Include/Manageability.dsc b/Features/ManageabilityPkg/Include/Manageability.dsc
index a432b0ff26..1a4f719dd3 100644
--- a/Features/ManageabilityPkg/Include/Manageability.dsc
+++ b/Features/ManageabilityPkg/Include/Manageability.dsc
@@ -51,3 +51,7 @@
!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable == TRUE
ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocolDxe.inf
!endif
+
+!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiBmcAcpi == TRUE
+ ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf
+!endif
diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dsc b/Features/ManageabilityPkg/ManageabilityPkg.dsc
index e3baf27f2a..712483faeb 100644
--- a/Features/ManageabilityPkg/ManageabilityPkg.dsc
+++ b/Features/ManageabilityPkg/ManageabilityPkg.dsc
@@ -37,7 +37,7 @@
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmEnable |TRUE
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable |TRUE
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmSmbiosTransferEnable|TRUE
-
+ gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiBmcAcpi |TRUE
#
# Include common libraries
#
@@ -53,5 +53,6 @@
[LibraryClasses]
ManageabilityTransportLib|ManageabilityPkg/Library/BaseManageabilityTransportNullLib/BaseManageabilityTransportNull.inf
+ IpmiLib|MdeModulePkg/Library/BaseIpmiLibNull/BaseIpmiLibNull.inf
!include Include/Manageability.dsc
diff --git a/Features/ManageabilityPkg/Include/PostMemory.fdf b/Features/ManageabilityPkg/Include/PostMemory.fdf
index 9100cb2646..a23144d5aa 100644
--- a/Features/ManageabilityPkg/Include/PostMemory.fdf
+++ b/Features/ManageabilityPkg/Include/PostMemory.fdf
@@ -26,3 +26,7 @@
!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable == TRUE
INF ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocolDxe.inf
!endif
+
+!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiBmcAcpi == TRUE
+ INF ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf
+!endif
--
2.37.1.windows.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [edk2-devel] [edk2-platforms][PATCH 2/2] ManageabilityPkg/IpmiBmcAcpi: Add to ManageabilityPkg
[not found] ` <175EBEB128F4E63F.30531@groups.io>
@ 2023-05-18 2:51 ` Nickle Wang
0 siblings, 0 replies; 6+ messages in thread
From: Nickle Wang @ 2023-05-18 2:51 UTC (permalink / raw)
To: devel@edk2.groups.io, Chang, Abner
Cc: Isaac Oram, Attar, AbdulLateef (Abdul Lateef)
Reviewed-by: Nickle Wang <nicklew@nvidia.com>
Regards,
Nickle
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Chang, Abner
> via groups.io
> Sent: Saturday, May 13, 2023 11:49 PM
> To: devel@edk2.groups.io
> Cc: Isaac Oram <isaac.w.oram@intel.com>; Attar, AbdulLateef (Abdul Lateef)
> <AbdulLateef.Attar@amd.com>; Nickle Wang <nicklew@nvidia.com>
> Subject: [edk2-devel] [edk2-platforms][PATCH 2/2]
> ManageabilityPkg/IpmiBmcAcpi: Add to ManageabilityPkg
>
> Caution: This message originated from an External Source. Use proper caution
> when opening attachments, clicking links, or responding.
>
>
> From: Abner Chang <abner.chang@amd.com>
>
> Add IpmiBmcAcpi to ManageabilityPkg.
>
> Signed-off-by: Abner Chang <abner.chang@amd.com>
> Cc: Isaac Oram <isaac.w.oram@intel.com>
> Cc: Abdul Lateef Attar <abdattar@amd.com>
> Cc: Nickle Wang <nicklew@nvidia.com>
> ---
> Features/ManageabilityPkg/ManageabilityPkg.dec | 1 +
> Features/ManageabilityPkg/Include/Manageability.dsc | 4 ++++
> Features/ManageabilityPkg/ManageabilityPkg.dsc | 3 ++-
> Features/ManageabilityPkg/Include/PostMemory.fdf | 4 ++++
> 4 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dec
> b/Features/ManageabilityPkg/ManageabilityPkg.dec
> index 38813c5f48..ac3504cb41 100644
> --- a/Features/ManageabilityPkg/ManageabilityPkg.dec
> +++ b/Features/ManageabilityPkg/ManageabilityPkg.dec
> @@ -79,4 +79,5 @@
>
> gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmEnable|FALSE|BO
> OLEAN|0x10000004
>
> gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable|FALSE|BO
> OLEAN|0x10000005
>
> gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmSmbiosTransferEna
> ble|FALSE|BOOLEAN|0x10000006
> +
> gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiBmcAcpi|FALSE|B
> OOLEAN|0x1000000D
>
> diff --git a/Features/ManageabilityPkg/Include/Manageability.dsc
> b/Features/ManageabilityPkg/Include/Manageability.dsc
> index a432b0ff26..1a4f719dd3 100644
> --- a/Features/ManageabilityPkg/Include/Manageability.dsc
> +++ b/Features/ManageabilityPkg/Include/Manageability.dsc
> @@ -51,3 +51,7 @@
> !if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable ==
> TRUE
> ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocolDxe.inf
> !endif
> +
> +!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiBmcAcpi ==
> TRUE
> + ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf
> +!endif
> diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dsc
> b/Features/ManageabilityPkg/ManageabilityPkg.dsc
> index e3baf27f2a..712483faeb 100644
> --- a/Features/ManageabilityPkg/ManageabilityPkg.dsc
> +++ b/Features/ManageabilityPkg/ManageabilityPkg.dsc
> @@ -37,7 +37,7 @@
> gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmEnable
> |TRUE
> gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable
> |TRUE
>
> gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmSmbiosTransferEna
> ble|TRUE
> -
> + gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiBmcAcpi
> |TRUE
> #
> # Include common libraries
> #
> @@ -53,5 +53,6 @@
>
> [LibraryClasses]
>
> ManageabilityTransportLib|ManageabilityPkg/Library/BaseManageabilityTransp
> ortNullLib/BaseManageabilityTransportNull.inf
> + IpmiLib|MdeModulePkg/Library/BaseIpmiLibNull/BaseIpmiLibNull.inf
>
> !include Include/Manageability.dsc
> diff --git a/Features/ManageabilityPkg/Include/PostMemory.fdf
> b/Features/ManageabilityPkg/Include/PostMemory.fdf
> index 9100cb2646..a23144d5aa 100644
> --- a/Features/ManageabilityPkg/Include/PostMemory.fdf
> +++ b/Features/ManageabilityPkg/Include/PostMemory.fdf
> @@ -26,3 +26,7 @@
> !if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable ==
> TRUE
> INF ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocolDxe.inf
> !endif
> +
> +!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiBmcAcpi ==
> TRUE
> + INF ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf
> +!endif
> --
> 2.37.1.windows.1
>
>
>
>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [edk2-devel] [edk2-platforms][PATCH 1/2] ManageabilityPkg/IpmiFrb: IPMI BMC ACPI Driver
2023-05-13 15:49 [edk2-platforms][PATCH 1/2] ManageabilityPkg/IpmiFrb: IPMI BMC ACPI Driver Chang, Abner
2023-05-13 15:49 ` [edk2-platforms][PATCH 2/2] ManageabilityPkg/IpmiBmcAcpi: Add to ManageabilityPkg Chang, Abner
[not found] ` <175EBEB128F4E63F.30531@groups.io>
@ 2023-05-19 3:27 ` Isaac Oram
2023-05-19 6:44 ` Chang, Abner
2 siblings, 1 reply; 6+ messages in thread
From: Isaac Oram @ 2023-05-19 3:27 UTC (permalink / raw)
To: devel@edk2.groups.io, abner.chang@amd.com
Cc: Abdul Lateef Attar, Nickle Wang, Tinh Nguyen
Reviewed-by: Isaac Oram <isaac.w.oram@intel.com>
You could consider changing "INTEL" and ('M', 'S', 'F', 'T') to more generic placeholders. But that is also something that could be looked at separately and more widely.
-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Chang, Abner via groups.io
Sent: Saturday, May 13, 2023 8:49 AM
To: devel@edk2.groups.io
Cc: Oram, Isaac W <isaac.w.oram@intel.com>; Abdul Lateef Attar <abdattar@amd.com>; Nickle Wang <nicklew@nvidia.com>; Tinh Nguyen <tinhnguyen@os.amperecomputing.com>
Subject: [edk2-devel] [edk2-platforms][PATCH 1/2] ManageabilityPkg/IpmiFrb: IPMI BMC ACPI Driver
From: Abner Chang <abner.chang@amd.com>
IpmiBmcAcpi is cloned from
edk2-platforms/Features/Intel/OutOfBandManagement/
IpmiFeaturePkg/BmcAcpi in order to consolidate
edk2 system manageability support in one place.
Uncustify is applied to C files and no functionalities are changed in this patch.
We will still keep the one under IpmiFeaturePkg/BmcAcpi until the reference to this instance are removed from platforms.
Signed-off-by: Abner Chang <abner.chang@amd.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Abdul Lateef Attar <abdattar@amd.com>
Cc: Nickle Wang <nicklew@nvidia.com>
Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com>
---
.../Universal/IpmiBmcAcpi/BmcAcpi.inf | 47 ++++
.../Universal/IpmiBmcAcpi/BmcAcpi.c | 264 ++++++++++++++++++
.../Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.asl | 28 ++
.../IpmiBmcAcpi/BmcSsdt/IpmiOprRegions.asi | 58 ++++
4 files changed, 397 insertions(+)
create mode 100644 Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf
create mode 100644 Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.c
create mode 100644 Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.asl
create mode 100644 Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/IpmiOprRegions.asi
diff --git a/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf
new file mode 100644
index 0000000000..a21c5b9b35
--- /dev/null
+++ b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf
@@ -0,0 +1,47 @@
+### @file
+# Component description file for BMC ACPI.
+#
+# Copyright (c) 2018 - 2019, Intel Corporation. All rights
+reserved.<BR> # # SPDX-License-Identifier: BSD-2-Clause-Patent # ###
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = BmcAcpi
+ FILE_GUID = 09E3B4BE-F731-4903-AAE6-BD5D573B6140
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = BmcAcpiEntryPoint
+
+[Sources]
+ BmcAcpi.c
+ BmcSsdt/BmcSsdt.asl
+
+[Packages]
+ ManageabilityPkg/ManageabilityPkg.dec
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+
+[LibraryClasses]
+ BaseMemoryLib
+ DebugLib
+ UefiBootServicesTableLib
+ UefiDriverEntryPoint
+ UefiLib
+
+[Protocols]
+ gEfiFirmwareVolume2ProtocolGuid
+ gEfiAcpiTableProtocolGuid
+
+[Pcd]
+ gEfiMdePkgTokenSpaceGuid.PcdIpmiKcsIoBaseAddress
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemId
+ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemTableId
+
+[Depex]
+ gEfiAcpiTableProtocolGuid
+
+[BuildOptions]
+ *_*_*_ASL_FLAGS = -oi
diff --git a/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.c b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.c
new file mode 100644
index 0000000000..cf066dd095
--- /dev/null
+++ b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.c
@@ -0,0 +1,264 @@
+/** @file
+ IPMI BMC ACPI.
+
+ Copyright (c) 2018 - 2019, Intel Corporation. All rights
+ reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+//
+// Statements that include other header files // #include <PiDxe.h>
+
+#include <IndustryStandard/Acpi.h>
+#include <Protocol/AcpiSystemDescriptionTable.h>
+#include <Protocol/FirmwareVolume2.h>
+#include <Protocol/AcpiTable.h>
+
+#include <Library/BaseLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/DebugLib.h>
+#include <Library/MemoryAllocationLib.h> #include
+<Library/BaseMemoryLib.h> #include <Library/UefiLib.h>
+
+#ifndef EFI_ACPI_CREATOR_ID
+#define EFI_ACPI_CREATOR_ID SIGNATURE_32 ('M', 'S', 'F', 'T') #endif
+#ifndef EFI_ACPI_CREATOR_REVISION #define EFI_ACPI_CREATOR_REVISION
+0x0100000D #endif
+
+/**
+
+ Locate the first instance of a protocol. If the protocol requested
+ is an FV protocol, then it will return the first FV that contains the
+ ACPI table storage file.
+
+ @param [in] Protocol The protocol to find.
+ @param [in] Instance Return pointer to the first instance of the protocol.
+ @param [in] Type The type of protocol to locate.
+
+ @retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND The protocol could not be located.
+ @retval EFI_OUT_OF_RESOURCES There are not enough resources to find the protocol.
+
+**/
+EFI_STATUS
+LocateSupportProtocol (
+ IN EFI_GUID *Protocol,
+ OUT VOID **Instance,
+ IN UINT32 Type
+ )
+{
+ EFI_STATUS Status;
+ EFI_HANDLE *HandleBuffer;
+ UINTN NumberOfHandles;
+ EFI_FV_FILETYPE FileType;
+ UINT32 FvStatus = 0;
+ EFI_FV_FILE_ATTRIBUTES Attributes;
+ UINTN Size;
+ UINTN Index;
+
+ Status = gBS->LocateHandleBuffer (ByProtocol, Protocol, NULL,
+ &NumberOfHandles, &HandleBuffer); if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ //
+ // Looking for FV with ACPI storage file // for (Index = 0; Index <
+ NumberOfHandles; Index++) {
+ Status = gBS->HandleProtocol (HandleBuffer[Index], Protocol, Instance);
+ ASSERT (!EFI_ERROR (Status));
+
+ if (!Type) {
+ //
+ // Not looking for the FV protocol, so find the first instance of the
+ // protocol. There should not be any errors because our handle buffer
+ // should always contain at least one or LocateHandleBuffer would have
+ // returned not found.
+ //
+ break;
+ }
+
+ //
+ // See if it has the ACPI storage file
+ //
+ Status = ((EFI_FIRMWARE_VOLUME2_PROTOCOL *)(*Instance))->ReadFile (
+ *Instance,
+ &gEfiCallerIdGuid,
+ NULL,
+ &Size,
+ &FileType,
+ &Attributes,
+ &FvStatus
+ );
+
+ //
+ // If we found it, then we are done
+ //
+ if (!EFI_ERROR (Status)) {
+ break;
+ }
+ }
+
+ gBS->FreePool (HandleBuffer);
+ return Status;
+}
+
+/**
+ Update ACPI SSDT for BMC IPMI KCS device
+
+ @param [in] Table Pointer to ACPI SSDT
+
+ @retval EFI_SUCCESS SSDT is updated according to PCD settings **/
+EFI_STATUS UpdateDeviceSsdtTable (
+ IN OUT EFI_ACPI_COMMON_HEADER *Table
+ )
+{
+ EFI_ACPI_DESCRIPTION_HEADER *TableHeader = NULL;
+ UINT64 TempOemTableId;
+ UINT8 *DataPtr;
+ EFI_ACPI_IO_PORT_DESCRIPTOR *IoRsc;
+
+ TableHeader = (EFI_ACPI_DESCRIPTION_HEADER *)Table;
+
+ //
+ // Update the OEMID and OEM Table ID.
+ //
+ CopyMem (&TableHeader->OemId, PcdGetPtr (PcdAcpiDefaultOemId), sizeof
+ (TableHeader->OemId)); TempOemTableId = PcdGet64
+ (PcdAcpiDefaultOemTableId); CopyMem (&TableHeader->OemTableId, &TempOemTableId, sizeof (UINT64));
+ TableHeader->CreatorId = EFI_ACPI_CREATOR_ID;
+ TableHeader->CreatorRevision = EFI_ACPI_CREATOR_REVISION;
+
+ //
+ // Update IO(Decode16, 0xCA2, 0xCA2, 0, 2) // DEBUG ((DEBUG_INFO,
+ "UpdateDeviceSsdtTable - IPMI\n")); for (DataPtr = (UINT8 *)(Table +
+ 1);
+ DataPtr < (UINT8 *)((UINT8 *)Table + Table->Length - 4);
+ DataPtr++)
+ {
+ if (CompareMem (DataPtr, "_CRS", 4) == 0) {
+ DataPtr += 4; // Skip _CRS
+ ASSERT (*DataPtr == AML_BUFFER_OP);
+ DataPtr++; // Skip AML_BUFFER_OP
+ ASSERT ((*DataPtr & (BIT7|BIT6)) == 0);
+ DataPtr++; // Skip PkgLength - 0xD
+ ASSERT ((*DataPtr) == AML_BYTE_PREFIX);
+ DataPtr++; // Skip BufferSize OpCode
+ DataPtr++; // Skip BufferSize - 0xA
+ IoRsc = (VOID *)DataPtr;
+ ASSERT (IoRsc->Header.Bits.Type == ACPI_SMALL_ITEM_FLAG);
+ ASSERT (IoRsc->Header.Bits.Name == ACPI_SMALL_IO_PORT_DESCRIPTOR_NAME);
+ ASSERT (IoRsc->Header.Bits.Length == sizeof (EFI_ACPI_IO_PORT_DESCRIPTOR) - sizeof (ACPI_SMALL_RESOURCE_HEADER));
+ DEBUG ((DEBUG_INFO, "IPMI IO Base in ASL update - 0x%04x <= 0x%04x\n", IoRsc->BaseAddressMin, PcdGet16 (PcdIpmiKcsIoBaseAddress)));
+ IoRsc->BaseAddressMin = PcdGet16 (PcdIpmiKcsIoBaseAddress);
+ IoRsc->BaseAddressMax = PcdGet16 (PcdIpmiKcsIoBaseAddress);
+ }
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+
+ Entry point for Acpi platform driver.
+
+ @param [in] ImageHandle A handle for the image that is initializing this driver.
+ @param [in] SystemTable A pointer to the EFI system table.
+
+ @retval EFI_SUCCESS Driver initialized successfully.
+ @retval EFI_LOAD_ERROR Failed to Initialize or has been loaded.
+ @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources.
+
+**/
+EFI_STATUS
+EFIAPI
+BmcAcpiEntryPoint (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_STATUS Status;
+ EFI_STATUS AcpiStatus;
+
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *FwVol;
+ INTN Instance = 0;
+ EFI_ACPI_COMMON_HEADER *CurrentTable = NULL;
+ UINTN TableHandle = 0;
+ UINT32 FvStatus;
+ UINT32 Size;
+
+ EFI_ACPI_TABLE_PROTOCOL *AcpiTable;
+ UINTN TableSize;
+
+ //
+ // Find the AcpiTable protocol
+ //
+ Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID
+ **)&AcpiTable); if (EFI_ERROR (Status)) {
+ return EFI_ABORTED;
+ }
+
+ //
+ // Locate the firmware volume protocol // Status =
+ LocateSupportProtocol (&gEfiFirmwareVolume2ProtocolGuid, (VOID
+ **)&FwVol, 1); if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = EFI_SUCCESS;
+ Instance = 0;
+
+ //
+ // Read tables from the storage file.
+ //
+ while (!EFI_ERROR (Status)) {
+ CurrentTable = NULL;
+
+ Status = FwVol->ReadSection (
+ FwVol,
+ &gEfiCallerIdGuid,
+ EFI_SECTION_RAW,
+ Instance,
+ (VOID **)&CurrentTable,
+ (UINTN *)&Size,
+ &FvStatus
+ );
+ if (!EFI_ERROR (Status)) {
+ //
+ // Perform any table specific updates.
+ //
+ AcpiStatus = UpdateDeviceSsdtTable (CurrentTable);
+ if (!EFI_ERROR (AcpiStatus)) {
+ TableHandle = 0;
+ TableSize = ((EFI_ACPI_DESCRIPTION_HEADER *)CurrentTable)->Length;
+ ASSERT (Size >= TableSize);
+
+ Status = AcpiTable->InstallAcpiTable (
+ AcpiTable,
+ CurrentTable,
+ TableSize,
+ &TableHandle
+ );
+
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ //
+ // Increment the instance
+ //
+ Instance++;
+ }
+ }
+
+ return EFI_SUCCESS;
+}
diff --git a/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.asl b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.asl
new file mode 100644
index 0000000000..8157d744c8
--- /dev/null
+++ b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.as
+++ l
@@ -0,0 +1,28 @@
+/** @file
+ BMC ACPI SSDT.
+
+Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+DefinitionBlock (
+ "BmcSsdt.aml",
+ "SSDT",
+ 0x02, // SSDT revision.
+ // A Revision field value greater than or equal to 2 signifies that integers
+ // declared within the Definition Block are to be evaluated as 64-bit values
+ "INTEL", // OEM ID (6 byte string), same as PcdAcpiDefaultOemId defined in MdeModulePkg.dec
+ "BMCACPI", // OEM table ID (8 byte string)
+ 0x0 // OEM version of DSDT table (4 byte Integer)
+ )
+{
+
+ External(\_SB.PC00.LPC0, DeviceObj)
+
+ Scope (\_SB.PC00.LPC0)
+ {
+ #include "IpmiOprRegions.asi"
+ }
+
+}
diff --git a/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/IpmiOprRegions.asi b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/IpmiOprRegions.asi
new file mode 100644
index 0000000000..ffd6af3944
--- /dev/null
+++ b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/IpmiOprReg
+++ ions.asi
@@ -0,0 +1,58 @@
+/** @file
+ IPMI ACPI SSDT.
+
+Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+Device(IPMC)
+{
+ // Config DWord, modified during POST
+ // Bit definitions are the same as PPMFlags:
+ // [00] = Plug and Play BMC Detection enabled in setup
+ // [31:01] = Reserved = 0
+
+ Name(ECFL, 0x80000000)
+
+ // Return the interface specification revision
+ Method(_SRV)
+ {
+ // IPMI Specification Revision v2.0
+ Return(0x0200)
+ }
+
+ Method(_STA, 0)
+ {
+ //
+ // Assume OK
+ //
+ Store (0xF, Local0)
+
+ Return(Local0)
+
+ // Bit 0 - Set if the device is present.
+ // Bit 1 - Set if the device is enabled and decoding its resources.
+ // Bit 2 - Set if the device should be shown in the UI.
+ // Bit 3 - Set if the device is functioning properly (cleared if the device failed its diagnostics).
+ // Bit 4 - Set if the battery is present.
+ // Bit 5 - Reserved (must be cleared).
+ } // end of _STA
+
+ // Return the x86 resources consumed by BMC
+ Name(_CRS, ResourceTemplate()
+ {
+ // Uses 8-bit ports 0xCA2-0xCA5
+ IO(Decode16, 0xCA2, 0xCA2, 0, 2)
+ })
+
+ Name(_HID, "IPI0001") // IPMI device
+ Name(_IFT, 0x1) // KCS system interface type
+ Name(_STR, Unicode("IPMI_KCS"))
+
+ Name(_UID, 0) // First interface.
+
+
+} // end of Device(IPMC)
+
+
--
2.37.1.windows.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [edk2-platforms][PATCH 2/2] ManageabilityPkg/IpmiBmcAcpi: Add to ManageabilityPkg
2023-05-13 15:49 ` [edk2-platforms][PATCH 2/2] ManageabilityPkg/IpmiBmcAcpi: Add to ManageabilityPkg Chang, Abner
@ 2023-05-19 3:27 ` Isaac Oram
0 siblings, 0 replies; 6+ messages in thread
From: Isaac Oram @ 2023-05-19 3:27 UTC (permalink / raw)
To: abner.chang@amd.com, devel@edk2.groups.io; +Cc: Abdul Lateef Attar, Nickle Wang
Reviewed-by: Isaac Oram <isaac.w.oram@intel.com>
-----Original Message-----
From: abner.chang@amd.com <abner.chang@amd.com>
Sent: Saturday, May 13, 2023 8:49 AM
To: devel@edk2.groups.io
Cc: Oram, Isaac W <isaac.w.oram@intel.com>; Abdul Lateef Attar <abdattar@amd.com>; Nickle Wang <nicklew@nvidia.com>
Subject: [edk2-platforms][PATCH 2/2] ManageabilityPkg/IpmiBmcAcpi: Add to ManageabilityPkg
From: Abner Chang <abner.chang@amd.com>
Add IpmiBmcAcpi to ManageabilityPkg.
Signed-off-by: Abner Chang <abner.chang@amd.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Abdul Lateef Attar <abdattar@amd.com>
Cc: Nickle Wang <nicklew@nvidia.com>
---
Features/ManageabilityPkg/ManageabilityPkg.dec | 1 +
Features/ManageabilityPkg/Include/Manageability.dsc | 4 ++++
Features/ManageabilityPkg/ManageabilityPkg.dsc | 3 ++-
Features/ManageabilityPkg/Include/PostMemory.fdf | 4 ++++
4 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dec b/Features/ManageabilityPkg/ManageabilityPkg.dec
index 38813c5f48..ac3504cb41 100644
--- a/Features/ManageabilityPkg/ManageabilityPkg.dec
+++ b/Features/ManageabilityPkg/ManageabilityPkg.dec
@@ -79,4 +79,5 @@
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmEnable|FALSE|BOOLEAN|0x10000004
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable|FALSE|BOOLEAN|0x10000005
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmSmbiosTransferEnable|FALSE|BOOLEAN|0x10000006
+ gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiBmcAcpi|FALSE|BOOLEAN|0x1000000D
diff --git a/Features/ManageabilityPkg/Include/Manageability.dsc b/Features/ManageabilityPkg/Include/Manageability.dsc
index a432b0ff26..1a4f719dd3 100644
--- a/Features/ManageabilityPkg/Include/Manageability.dsc
+++ b/Features/ManageabilityPkg/Include/Manageability.dsc
@@ -51,3 +51,7 @@
!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable == TRUE
ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocolDxe.inf
!endif
+
+!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiBmcAcpi == TRUE
+ ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf
+!endif
diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dsc b/Features/ManageabilityPkg/ManageabilityPkg.dsc
index e3baf27f2a..712483faeb 100644
--- a/Features/ManageabilityPkg/ManageabilityPkg.dsc
+++ b/Features/ManageabilityPkg/ManageabilityPkg.dsc
@@ -37,7 +37,7 @@
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmEnable |TRUE
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable |TRUE
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmSmbiosTransferEnable|TRUE
-
+ gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiBmcAcpi |TRUE
#
# Include common libraries
#
@@ -53,5 +53,6 @@
[LibraryClasses]
ManageabilityTransportLib|ManageabilityPkg/Library/BaseManageabilityTransportNullLib/BaseManageabilityTransportNull.inf
+ IpmiLib|MdeModulePkg/Library/BaseIpmiLibNull/BaseIpmiLibNull.inf
!include Include/Manageability.dsc
diff --git a/Features/ManageabilityPkg/Include/PostMemory.fdf b/Features/ManageabilityPkg/Include/PostMemory.fdf
index 9100cb2646..a23144d5aa 100644
--- a/Features/ManageabilityPkg/Include/PostMemory.fdf
+++ b/Features/ManageabilityPkg/Include/PostMemory.fdf
@@ -26,3 +26,7 @@
!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable == TRUE
INF ManageabilityPkg/Universal/MctpProtocol/Dxe/MctpProtocolDxe.inf
!endif
+
+!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiBmcAcpi == TRUE
+ INF ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf
+!endif
--
2.37.1.windows.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [edk2-devel] [edk2-platforms][PATCH 1/2] ManageabilityPkg/IpmiFrb: IPMI BMC ACPI Driver
2023-05-19 3:27 ` [edk2-devel] [edk2-platforms][PATCH 1/2] ManageabilityPkg/IpmiFrb: IPMI BMC ACPI Driver Isaac Oram
@ 2023-05-19 6:44 ` Chang, Abner
0 siblings, 0 replies; 6+ messages in thread
From: Chang, Abner @ 2023-05-19 6:44 UTC (permalink / raw)
To: Oram, Isaac W, devel@edk2.groups.io
Cc: Attar, AbdulLateef (Abdul Lateef), Nickle Wang, Tinh Nguyen
[AMD Official Use Only - General]
Hi Isaac,
For "INTEL", we can change it to all whitespace as the string would be patched in runtime using PcdAcpiDefaultOemId (which is also Intel 😊)
For "MSFT", I prefer to keep it as that value is hardcoded in the source code. We can create a PCD for this as well but this would be not in the migration scope that claims the same functionality with the one under Intel folder.
Thanks
Abner
> -----Original Message-----
> From: Oram, Isaac W <isaac.w.oram@intel.com>
> Sent: Friday, May 19, 2023 11:28 AM
> To: devel@edk2.groups.io; Chang, Abner <Abner.Chang@amd.com>
> Cc: Attar, AbdulLateef (Abdul Lateef) <AbdulLateef.Attar@amd.com>; Nickle
> Wang <nicklew@nvidia.com>; Tinh Nguyen
> <tinhnguyen@os.amperecomputing.com>
> Subject: RE: [edk2-devel] [edk2-platforms][PATCH 1/2]
> ManageabilityPkg/IpmiFrb: IPMI BMC ACPI Driver
>
> Caution: This message originated from an External Source. Use proper caution
> when opening attachments, clicking links, or responding.
>
>
> Reviewed-by: Isaac Oram <isaac.w.oram@intel.com>
>
> You could consider changing "INTEL" and ('M', 'S', 'F', 'T') to more generic
> placeholders. But that is also something that could be looked at separately
> and more widely.
>
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Chang,
> Abner via groups.io
> Sent: Saturday, May 13, 2023 8:49 AM
> To: devel@edk2.groups.io
> Cc: Oram, Isaac W <isaac.w.oram@intel.com>; Abdul Lateef Attar
> <abdattar@amd.com>; Nickle Wang <nicklew@nvidia.com>; Tinh Nguyen
> <tinhnguyen@os.amperecomputing.com>
> Subject: [edk2-devel] [edk2-platforms][PATCH 1/2]
> ManageabilityPkg/IpmiFrb: IPMI BMC ACPI Driver
>
> From: Abner Chang <abner.chang@amd.com>
>
> IpmiBmcAcpi is cloned from
> edk2-platforms/Features/Intel/OutOfBandManagement/
> IpmiFeaturePkg/BmcAcpi in order to consolidate
> edk2 system manageability support in one place.
> Uncustify is applied to C files and no functionalities are changed in this patch.
>
> We will still keep the one under IpmiFeaturePkg/BmcAcpi until the reference to
> this instance are removed from platforms.
>
> Signed-off-by: Abner Chang <abner.chang@amd.com>
> Cc: Isaac Oram <isaac.w.oram@intel.com>
> Cc: Abdul Lateef Attar <abdattar@amd.com>
> Cc: Nickle Wang <nicklew@nvidia.com>
> Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com>
> ---
> .../Universal/IpmiBmcAcpi/BmcAcpi.inf | 47 ++++
> .../Universal/IpmiBmcAcpi/BmcAcpi.c | 264 ++++++++++++++++++
> .../Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.asl | 28 ++
> .../IpmiBmcAcpi/BmcSsdt/IpmiOprRegions.asi | 58 ++++
> 4 files changed, 397 insertions(+)
> create mode 100644
> Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf
> create mode 100644
> Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.c
> create mode 100644
> Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.asl
> create mode 100644
> Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/IpmiOprRegion
> s.asi
>
> diff --git a/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf
> b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf
> new file mode 100644
> index 0000000000..a21c5b9b35
> --- /dev/null
> +++ b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf
> @@ -0,0 +1,47 @@
> +### @file
> +# Component description file for BMC ACPI.
> +#
> +# Copyright (c) 2018 - 2019, Intel Corporation. All rights
> +reserved.<BR> # # SPDX-License-Identifier: BSD-2-Clause-Patent # ###
> +
> +[Defines]
> + INF_VERSION = 0x00010005
> + BASE_NAME = BmcAcpi
> + FILE_GUID = 09E3B4BE-F731-4903-AAE6-BD5D573B6140
> + MODULE_TYPE = DXE_DRIVER
> + VERSION_STRING = 1.0
> + ENTRY_POINT = BmcAcpiEntryPoint
> +
> +[Sources]
> + BmcAcpi.c
> + BmcSsdt/BmcSsdt.asl
> +
> +[Packages]
> + ManageabilityPkg/ManageabilityPkg.dec
> + MdePkg/MdePkg.dec
> + MdeModulePkg/MdeModulePkg.dec
> +
> +[LibraryClasses]
> + BaseMemoryLib
> + DebugLib
> + UefiBootServicesTableLib
> + UefiDriverEntryPoint
> + UefiLib
> +
> +[Protocols]
> + gEfiFirmwareVolume2ProtocolGuid
> + gEfiAcpiTableProtocolGuid
> +
> +[Pcd]
> + gEfiMdePkgTokenSpaceGuid.PcdIpmiKcsIoBaseAddress
> + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemId
> + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemTableId
> +
> +[Depex]
> + gEfiAcpiTableProtocolGuid
> +
> +[BuildOptions]
> + *_*_*_ASL_FLAGS = -oi
> diff --git a/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.c
> b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.c
> new file mode 100644
> index 0000000000..cf066dd095
> --- /dev/null
> +++ b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.c
> @@ -0,0 +1,264 @@
> +/** @file
> + IPMI BMC ACPI.
> +
> + Copyright (c) 2018 - 2019, Intel Corporation. All rights
> + reserved.<BR>
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +//
> +// Statements that include other header files // #include <PiDxe.h>
> +
> +#include <IndustryStandard/Acpi.h>
> +#include <Protocol/AcpiSystemDescriptionTable.h>
> +#include <Protocol/FirmwareVolume2.h>
> +#include <Protocol/AcpiTable.h>
> +
> +#include <Library/BaseLib.h>
> +#include <Library/UefiBootServicesTableLib.h>
> +#include <Library/UefiRuntimeServicesTableLib.h>
> +#include <Library/DebugLib.h>
> +#include <Library/MemoryAllocationLib.h> #include
> +<Library/BaseMemoryLib.h> #include <Library/UefiLib.h>
> +
> +#ifndef EFI_ACPI_CREATOR_ID
> +#define EFI_ACPI_CREATOR_ID SIGNATURE_32 ('M', 'S', 'F', 'T') #endif
> +#ifndef EFI_ACPI_CREATOR_REVISION #define EFI_ACPI_CREATOR_REVISION
> +0x0100000D #endif
> +
> +/**
> +
> + Locate the first instance of a protocol. If the protocol requested
> + is an FV protocol, then it will return the first FV that contains the
> + ACPI table storage file.
> +
> + @param [in] Protocol The protocol to find.
> + @param [in] Instance Return pointer to the first instance of the protocol.
> + @param [in] Type The type of protocol to locate.
> +
> + @retval EFI_SUCCESS The function completed successfully.
> + @retval EFI_NOT_FOUND The protocol could not be located.
> + @retval EFI_OUT_OF_RESOURCES There are not enough resources to find
> the protocol.
> +
> +**/
> +EFI_STATUS
> +LocateSupportProtocol (
> + IN EFI_GUID *Protocol,
> + OUT VOID **Instance,
> + IN UINT32 Type
> + )
> +{
> + EFI_STATUS Status;
> + EFI_HANDLE *HandleBuffer;
> + UINTN NumberOfHandles;
> + EFI_FV_FILETYPE FileType;
> + UINT32 FvStatus = 0;
> + EFI_FV_FILE_ATTRIBUTES Attributes;
> + UINTN Size;
> + UINTN Index;
> +
> + Status = gBS->LocateHandleBuffer (ByProtocol, Protocol, NULL,
> + &NumberOfHandles, &HandleBuffer); if (EFI_ERROR (Status)) {
> + return Status;
> + }
> +
> + //
> + // Looking for FV with ACPI storage file // for (Index = 0; Index <
> + NumberOfHandles; Index++) {
> + Status = gBS->HandleProtocol (HandleBuffer[Index], Protocol, Instance);
> + ASSERT (!EFI_ERROR (Status));
> +
> + if (!Type) {
> + //
> + // Not looking for the FV protocol, so find the first instance of the
> + // protocol. There should not be any errors because our handle buffer
> + // should always contain at least one or LocateHandleBuffer would have
> + // returned not found.
> + //
> + break;
> + }
> +
> + //
> + // See if it has the ACPI storage file
> + //
> + Status = ((EFI_FIRMWARE_VOLUME2_PROTOCOL *)(*Instance))->ReadFile
> (
> + *Instance,
> + &gEfiCallerIdGuid,
> + NULL,
> + &Size,
> + &FileType,
> + &Attributes,
> + &FvStatus
> + );
> +
> + //
> + // If we found it, then we are done
> + //
> + if (!EFI_ERROR (Status)) {
> + break;
> + }
> + }
> +
> + gBS->FreePool (HandleBuffer);
> + return Status;
> +}
> +
> +/**
> + Update ACPI SSDT for BMC IPMI KCS device
> +
> + @param [in] Table Pointer to ACPI SSDT
> +
> + @retval EFI_SUCCESS SSDT is updated according to PCD settings **/
> +EFI_STATUS UpdateDeviceSsdtTable (
> + IN OUT EFI_ACPI_COMMON_HEADER *Table
> + )
> +{
> + EFI_ACPI_DESCRIPTION_HEADER *TableHeader = NULL;
> + UINT64 TempOemTableId;
> + UINT8 *DataPtr;
> + EFI_ACPI_IO_PORT_DESCRIPTOR *IoRsc;
> +
> + TableHeader = (EFI_ACPI_DESCRIPTION_HEADER *)Table;
> +
> + //
> + // Update the OEMID and OEM Table ID.
> + //
> + CopyMem (&TableHeader->OemId, PcdGetPtr (PcdAcpiDefaultOemId),
> sizeof
> + (TableHeader->OemId)); TempOemTableId = PcdGet64
> + (PcdAcpiDefaultOemTableId); CopyMem (&TableHeader->OemTableId,
> &TempOemTableId, sizeof (UINT64));
> + TableHeader->CreatorId = EFI_ACPI_CREATOR_ID;
> + TableHeader->CreatorRevision = EFI_ACPI_CREATOR_REVISION;
> +
> + //
> + // Update IO(Decode16, 0xCA2, 0xCA2, 0, 2) // DEBUG ((DEBUG_INFO,
> + "UpdateDeviceSsdtTable - IPMI\n")); for (DataPtr = (UINT8 *)(Table +
> + 1);
> + DataPtr < (UINT8 *)((UINT8 *)Table + Table->Length - 4);
> + DataPtr++)
> + {
> + if (CompareMem (DataPtr, "_CRS", 4) == 0) {
> + DataPtr += 4; // Skip _CRS
> + ASSERT (*DataPtr == AML_BUFFER_OP);
> + DataPtr++; // Skip AML_BUFFER_OP
> + ASSERT ((*DataPtr & (BIT7|BIT6)) == 0);
> + DataPtr++; // Skip PkgLength - 0xD
> + ASSERT ((*DataPtr) == AML_BYTE_PREFIX);
> + DataPtr++; // Skip BufferSize OpCode
> + DataPtr++; // Skip BufferSize - 0xA
> + IoRsc = (VOID *)DataPtr;
> + ASSERT (IoRsc->Header.Bits.Type == ACPI_SMALL_ITEM_FLAG);
> + ASSERT (IoRsc->Header.Bits.Name ==
> ACPI_SMALL_IO_PORT_DESCRIPTOR_NAME);
> + ASSERT (IoRsc->Header.Bits.Length == sizeof
> (EFI_ACPI_IO_PORT_DESCRIPTOR) - sizeof
> (ACPI_SMALL_RESOURCE_HEADER));
> + DEBUG ((DEBUG_INFO, "IPMI IO Base in ASL update - 0x%04x <=
> 0x%04x\n", IoRsc->BaseAddressMin, PcdGet16 (PcdIpmiKcsIoBaseAddress)));
> + IoRsc->BaseAddressMin = PcdGet16 (PcdIpmiKcsIoBaseAddress);
> + IoRsc->BaseAddressMax = PcdGet16 (PcdIpmiKcsIoBaseAddress);
> + }
> + }
> +
> + return EFI_SUCCESS;
> +}
> +
> +/**
> +
> + Entry point for Acpi platform driver.
> +
> + @param [in] ImageHandle A handle for the image that is initializing this
> driver.
> + @param [in] SystemTable A pointer to the EFI system table.
> +
> + @retval EFI_SUCCESS Driver initialized successfully.
> + @retval EFI_LOAD_ERROR Failed to Initialize or has been loaded.
> + @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +BmcAcpiEntryPoint (
> + IN EFI_HANDLE ImageHandle,
> + IN EFI_SYSTEM_TABLE *SystemTable
> + )
> +{
> + EFI_STATUS Status;
> + EFI_STATUS AcpiStatus;
> +
> + EFI_FIRMWARE_VOLUME2_PROTOCOL *FwVol;
> + INTN Instance = 0;
> + EFI_ACPI_COMMON_HEADER *CurrentTable = NULL;
> + UINTN TableHandle = 0;
> + UINT32 FvStatus;
> + UINT32 Size;
> +
> + EFI_ACPI_TABLE_PROTOCOL *AcpiTable;
> + UINTN TableSize;
> +
> + //
> + // Find the AcpiTable protocol
> + //
> + Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID
> + **)&AcpiTable); if (EFI_ERROR (Status)) {
> + return EFI_ABORTED;
> + }
> +
> + //
> + // Locate the firmware volume protocol // Status =
> + LocateSupportProtocol (&gEfiFirmwareVolume2ProtocolGuid, (VOID
> + **)&FwVol, 1); if (EFI_ERROR (Status)) {
> + return Status;
> + }
> +
> + Status = EFI_SUCCESS;
> + Instance = 0;
> +
> + //
> + // Read tables from the storage file.
> + //
> + while (!EFI_ERROR (Status)) {
> + CurrentTable = NULL;
> +
> + Status = FwVol->ReadSection (
> + FwVol,
> + &gEfiCallerIdGuid,
> + EFI_SECTION_RAW,
> + Instance,
> + (VOID **)&CurrentTable,
> + (UINTN *)&Size,
> + &FvStatus
> + );
> + if (!EFI_ERROR (Status)) {
> + //
> + // Perform any table specific updates.
> + //
> + AcpiStatus = UpdateDeviceSsdtTable (CurrentTable);
> + if (!EFI_ERROR (AcpiStatus)) {
> + TableHandle = 0;
> + TableSize = ((EFI_ACPI_DESCRIPTION_HEADER *)CurrentTable)->Length;
> + ASSERT (Size >= TableSize);
> +
> + Status = AcpiTable->InstallAcpiTable (
> + AcpiTable,
> + CurrentTable,
> + TableSize,
> + &TableHandle
> + );
> +
> + ASSERT_EFI_ERROR (Status);
> + }
> +
> + //
> + // Increment the instance
> + //
> + Instance++;
> + }
> + }
> +
> + return EFI_SUCCESS;
> +}
> diff --git
> a/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.asl
> b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.asl
> new file mode 100644
> index 0000000000..8157d744c8
> --- /dev/null
> +++
> b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.as
> +++ l
> @@ -0,0 +1,28 @@
> +/** @file
> + BMC ACPI SSDT.
> +
> +Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +DefinitionBlock (
> + "BmcSsdt.aml",
> + "SSDT",
> + 0x02, // SSDT revision.
> + // A Revision field value greater than or equal to 2 signifies that
> integers
> + // declared within the Definition Block are to be evaluated as 64-bit
> values
> + "INTEL", // OEM ID (6 byte string), same as PcdAcpiDefaultOemId
> defined in MdeModulePkg.dec
> + "BMCACPI", // OEM table ID (8 byte string)
> + 0x0 // OEM version of DSDT table (4 byte Integer)
> + )
> +{
> +
> + External(\_SB.PC00.LPC0, DeviceObj)
> +
> + Scope (\_SB.PC00.LPC0)
> + {
> + #include "IpmiOprRegions.asi"
> + }
> +
> +}
> diff --git
> a/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/IpmiOprRegi
> ons.asi
> b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/IpmiOprRegi
> ons.asi
> new file mode 100644
> index 0000000000..ffd6af3944
> --- /dev/null
> +++
> b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/IpmiOprReg
> +++ ions.asi
> @@ -0,0 +1,58 @@
> +/** @file
> + IPMI ACPI SSDT.
> +
> +Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +Device(IPMC)
> +{
> + // Config DWord, modified during POST
> + // Bit definitions are the same as PPMFlags:
> + // [00] = Plug and Play BMC Detection enabled in setup
> + // [31:01] = Reserved = 0
> +
> + Name(ECFL, 0x80000000)
> +
> + // Return the interface specification revision
> + Method(_SRV)
> + {
> + // IPMI Specification Revision v2.0
> + Return(0x0200)
> + }
> +
> + Method(_STA, 0)
> + {
> + //
> + // Assume OK
> + //
> + Store (0xF, Local0)
> +
> + Return(Local0)
> +
> + // Bit 0 - Set if the device is present.
> + // Bit 1 - Set if the device is enabled and decoding its resources.
> + // Bit 2 - Set if the device should be shown in the UI.
> + // Bit 3 - Set if the device is functioning properly (cleared if the device
> failed its diagnostics).
> + // Bit 4 - Set if the battery is present.
> + // Bit 5 - Reserved (must be cleared).
> + } // end of _STA
> +
> + // Return the x86 resources consumed by BMC
> + Name(_CRS, ResourceTemplate()
> + {
> + // Uses 8-bit ports 0xCA2-0xCA5
> + IO(Decode16, 0xCA2, 0xCA2, 0, 2)
> + })
> +
> + Name(_HID, "IPI0001") // IPMI device
> + Name(_IFT, 0x1) // KCS system interface type
> + Name(_STR, Unicode("IPMI_KCS"))
> +
> + Name(_UID, 0) // First interface.
> +
> +
> +} // end of Device(IPMC)
> +
> +
> --
> 2.37.1.windows.1
>
>
>
>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-05-19 6:44 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-13 15:49 [edk2-platforms][PATCH 1/2] ManageabilityPkg/IpmiFrb: IPMI BMC ACPI Driver Chang, Abner
2023-05-13 15:49 ` [edk2-platforms][PATCH 2/2] ManageabilityPkg/IpmiBmcAcpi: Add to ManageabilityPkg Chang, Abner
2023-05-19 3:27 ` Isaac Oram
[not found] ` <175EBEB128F4E63F.30531@groups.io>
2023-05-18 2:51 ` [edk2-devel] " Nickle Wang
2023-05-19 3:27 ` [edk2-devel] [edk2-platforms][PATCH 1/2] ManageabilityPkg/IpmiFrb: IPMI BMC ACPI Driver Isaac Oram
2023-05-19 6:44 ` Chang, Abner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox