Thanks for the review. I will push after the IPMI SSIF support is merged. Regards, Nhi ________________________________ From: Chuong Tran OS Sent: Thursday, August 22, 2024 5:49 PM To: Nhi Pham OS ; devel@edk2.groups.io Cc: quic_llindhol@quicinc.com ; Chuong Tran OS ; Rebecca Cran OS Subject: Re: [edk2-platforms][PATCH v2 1/1] JadePkg: Add ACPI SPMI table Reviewed-by: Chuong Tran Thanks, Chuong On 8/15/2024 1:55 PM, Nhi Pham wrote: > This implements ACPI SPMI table as defined in the IPMI specification. > > Signed-off-by: Nhi Pham > --- > v2: > + Remove EFIAPI > + Make the function UpdateIpmiSpecRevision() static > + Change 0x0F to 0xF to be more readable. > > Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf | 4 + > Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiPlatform.h | 12 +++ > Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.c | 5 + > Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiSpmi.c | 113 ++++++++++++++++++++ > 4 files changed, 134 insertions(+) > > diff --git a/Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf b/Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf > index 8ab6a790ce07..6c26b6e7141c 100644 > --- a/Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf > +++ b/Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf > @@ -27,12 +27,14 @@ [Sources.common] > AcpiPlatformDxe.c > AcpiPptt.c > AcpiSlit.c > + AcpiSpmi.c > AcpiSrat.c > > [Packages] > ArmPkg/ArmPkg.dec > ArmPlatformPkg/ArmPlatformPkg.dec > EmbeddedPkg/EmbeddedPkg.dec > + Features/ManageabilityPkg/ManageabilityPkg.dec > MdeModulePkg/MdeModulePkg.dec > MdePkg/MdePkg.dec > Silicon/Ampere/AmpereAltraPkg/AmpereAltraPkg.dec > @@ -46,6 +48,7 @@ [LibraryClasses] > DebugLib > FlashLib > HobLib > + IpmiCommandLib > MailboxInterfaceLib > SystemFirmwareInterfaceLib > TimerLib > @@ -64,6 +67,7 @@ [Pcd] > gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision > gAmpereTokenSpaceGuid.PcdPmproDbBaseReg > gAmpereTokenSpaceGuid.PcdSmproDbBaseReg > + gEfiMdePkgTokenSpaceGuid.PcdIpmiSsifSmbusSlaveAddr > > [Guids] > gArmMpCoreInfoGuid > diff --git a/Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiPlatform.h b/Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiPlatform.h > index 170aeff24d59..5fac393bb9e8 100644 > --- a/Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiPlatform.h > +++ b/Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiPlatform.h > @@ -83,4 +83,16 @@ AcpiInstallIort ( > VOID > ); > > +/** > + Install SPMI (Service Processor Management Interface table) table. > + > + @retval EFI_SUCCESS The table was installed successfully. > + @retval Others Failed to install the table. > + > +**/ > +EFI_STATUS > +AcpiInstallSpmiTable ( > + VOID > + ); > + > #endif /* ACPI_PLATFORM_H_ */ > diff --git a/Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.c b/Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.c > index 28c422dff166..a82a93d23fa2 100644 > --- a/Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.c > +++ b/Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.c > @@ -114,6 +114,11 @@ InstallAcpiOnReadyToBoot ( > DEBUG ((DEBUG_INFO, "Populate BERT record\n")); > } > > + Status = AcpiInstallSpmiTable (); > + if (!EFI_ERROR (Status)) { > + DEBUG ((DEBUG_INFO, "Installed SPMI table\n")); > + } > + > // > // Close the event, so it will not be signalled again. > // > diff --git a/Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiSpmi.c b/Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiSpmi.c > new file mode 100644 > index 000000000000..937f02093185 > --- /dev/null > +++ b/Platform/Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiSpmi.c > @@ -0,0 +1,113 @@ > +/** @file > + > + Copyright (c) 2024, Ampere Computing LLC. All rights reserved.
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include > +#include > +#include > +#include "AcpiPlatform.h" > + > +// > +// SPMI Revision (as defined in IPMI v2.0 spec.) > +// > +#define EFI_ACPI_SERVICE_PROCESSOR_MANAGEMENT_INTERFACE_TABLE_REVISION 0x05 > + > +STATIC EFI_ACPI_SERVICE_PROCESSOR_MANAGEMENT_INTERFACE_TABLE mSpmiTable = { > + __ACPI_HEADER ( > + EFI_ACPI_6_3_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE, > + EFI_ACPI_SERVICE_PROCESSOR_MANAGEMENT_INTERFACE_TABLE, > + EFI_ACPI_SERVICE_PROCESSOR_MANAGEMENT_INTERFACE_TABLE_REVISION > + ), > + 0x04, // SMBUS System Interface (SSIF) > + 0x01, // Reserved - Must be 0x01 for backward compatiblity > + 0, // Specification Revision > + 0, // Interrupt Type > + 0, // GPE > + EFI_ACPI_RESERVED_BYTE, // Reserved > + 0, // PCI Device Flag > + 0, // Global System Interrupt > + { > + 0x04, // Address Space ID: 4 (SMBUS) > + 0, // Register Bit Width > + 0, // Register Bit Offset > + 0x01, // Address Size: 1 (Byte Access) > + FixedPcdGet8 (PcdIpmiSsifSmbusSlaveAddr), // Address (7-bit SMBUS Address of BMC SSIF) > + }, > + { > + { > + 0, // UID Byte 1 > + 0, // UID Byte 2 > + 0, // UID Byte 3 > + 0 // UID Byte 4 > + } > + }, > + EFI_ACPI_RESERVED_BYTE // Reserved for backward compatiblity > +}; > + > +static > +EFI_STATUS > +UpdateIpmiSpecRevision ( > + EFI_ACPI_SERVICE_PROCESSOR_MANAGEMENT_INTERFACE_TABLE *SpmiTable > + ) > +{ > + EFI_STATUS Status; > + IPMI_GET_DEVICE_ID_RESPONSE DeviceId; > + > + Status = IpmiGetDeviceId (&DeviceId); > + if (!EFI_ERROR (Status) && (DeviceId.CompletionCode == IPMI_COMP_CODE_NORMAL)) { > + // BCD Format > + SpmiTable->SpecificationRevision = DeviceId.SpecificationVersion & 0xF0; > + SpmiTable->SpecificationRevision |= (DeviceId.SpecificationVersion & 0xF) << 8; > + } > + > + return Status; > +} > + > +/** > + Install SPMI (Service Processor Management Interface table) table. > + > + @retval EFI_SUCCESS The table was installed successfully. > + @retval Others Failed to install the table. > + > +**/ > +EFI_STATUS > +AcpiInstallSpmiTable ( > + VOID > + ) > +{ > + EFI_STATUS Status; > + EFI_ACPI_TABLE_PROTOCOL *AcpiTableProtocol; > + UINTN SpmiTableKey; > + > + Status = gBS->LocateProtocol ( > + &gEfiAcpiTableProtocolGuid, > + NULL, > + (VOID **)&AcpiTableProtocol > + ); > + if (EFI_ERROR (Status)) { > + return Status; > + } > + > + Status = UpdateIpmiSpecRevision (&mSpmiTable); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a: Failed to update IPMI Specification Revision - %r\n", __func__, Status)); > + return Status; > + } > + > + Status = AcpiTableProtocol->InstallAcpiTable ( > + AcpiTableProtocol, > + (VOID *)&mSpmiTable, > + mSpmiTable.Header.Length, > + &SpmiTableKey > + ); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "%a: Failed to install SPMI table - %r\n", __func__, Status)); > + return Status; > + } > + > + return EFI_SUCCESS; > +} -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#120399): https://edk2.groups.io/g/devel/message/120399 Mute This Topic: https://groups.io/mt/107909806/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-