Reviewed-by: Liming Gao <gaolim...@byosoft.com.cn> > -----邮件原件----- > 发件人: Chang, Abner <abner.ch...@amd.com> > 发送时间: 2024年5月6日 19:08 > 收件人: Chesley, Brit <brit.ches...@amd.com>; devel@edk2.groups.io > 抄送: Liming Gao <gaolim...@byosoft.com.cn>; Ray Ni <ray...@intel.com>; Attar, > AbdulLateef (Abdul Lateef) <abdullateef.at...@amd.com> > 主题: RE: [PATCH v1 4/6] MdeModulePkg:BaseSpiHcPlatformLib: Adding NULL lib > instance > > [AMD Official Use Only - General] > > Hi MdeModulePkg maintainers, > Please review this patch as we would like to merge it before the upcoming hard > freeze. > Thanks > Abner > > > -----Original Message----- > > From: Chesley, Brit <brit.ches...@amd.com> > > Sent: Thursday, May 2, 2024 3:05 AM > > To: devel@edk2.groups.io > > Cc: Liming Gao <gaolim...@byosoft.com.cn>; Ray Ni <ray...@intel.com>; > > Chang, Abner <abner.ch...@amd.com>; Attar, AbdulLateef (Abdul Lateef) > > <abdullateef.at...@amd.com> > > Subject: [PATCH v1 4/6] MdeModulePkg:BaseSpiHcPlatformLib: Adding NULL > > lib instance > > > > From: Brit Chesley <brit.ches...@amd.com> > > > > Adding NULL SpiHcPlatformLib instance. This library is responsible for > > handling the low level details of the SPI host controller. Since this is > > platform specific this library will be dependent on OEM SPI > > implementation. The SPI host controller layer will utilize this library > > for SPI bus transactions. > > > > Bugzilla #4753 > > > > Cc: Liming Gao <gaolim...@byosoft.com.cn> > > Cc: Ray Ni <ray...@intel.com> > > Cc: Abner Chang <abner.ch...@amd.com> > > Cc: Abdul Lateef Attar <abdullateef.at...@amd.com> > > Signed-off-by: Brit Chesley <brit.ches...@amd.com> > > --- > > MdeModulePkg/MdeModulePkg.dec | 5 + > > MdeModulePkg/MdeModulePkg.dsc | 2 + > > .../BaseSpiHcPlatformLibNull.inf | 33 ++++ > > .../Include/Library/SpiHcPlatformLib.h | 148 ++++++++++++++++++ > > .../BaseSpiHcPlatformLibNull.c | 145 > +++++++++++++++++ > > .../BaseSpiHcPlatformLibNull.uni | 11 ++ > > 6 files changed, 344 insertions(+) > > create mode 100644 > > MdeModulePkg/Library/BaseSpiHcPlatformLibNull/BaseSpiHcPlatformLibNull. > > inf > > create mode 100644 MdeModulePkg/Include/Library/SpiHcPlatformLib.h > > create mode 100644 > > MdeModulePkg/Library/BaseSpiHcPlatformLibNull/BaseSpiHcPlatformLibNull. > > c > > create mode 100644 > > MdeModulePkg/Library/BaseSpiHcPlatformLibNull/BaseSpiHcPlatformLibNull. > > uni > > > > diff --git a/MdeModulePkg/MdeModulePkg.dec > > b/MdeModulePkg/MdeModulePkg.dec > > index 085370eae41a..8a3bcb9aded1 100644 > > --- a/MdeModulePkg/MdeModulePkg.dec > > +++ b/MdeModulePkg/MdeModulePkg.dec > > @@ -169,6 +169,11 @@ [LibraryClasses] > > # > > ImagePropertiesRecordLib|Include/Library/ImagePropertiesRecordLib.h > > > > + ## @libraryclass Platform SPI Host Controller library which provides > low- > > level > > + # control over the SPI hardware > > + # > > + SpiHcPlatformLib|Include/Library/SpiHcPlatformLib.h > > + > > [Guids] > > ## MdeModule package token space guid > > # Include/Guid/MdeModulePkgTokenSpace.h > > diff --git a/MdeModulePkg/MdeModulePkg.dsc > > b/MdeModulePkg/MdeModulePkg.dsc > > index 33d6f4a1f6a6..177128bdfd3e 100644 > > --- a/MdeModulePkg/MdeModulePkg.dsc > > +++ b/MdeModulePkg/MdeModulePkg.dsc > > @@ -107,6 +107,7 @@ [LibraryClasses] > > > > MmUnblockMemoryLib|MdePkg/Library/MmUnblockMemoryLib/MmUnblo > > ckMemoryLibNull.inf > > > > VariableFlashInfoLib|MdeModulePkg/Library/BaseVariableFlashInfoLib/BaseV > > ariableFlashInfoLib.inf > > > > IpmiCommandLib|MdeModulePkg/Library/BaseIpmiCommandLibNull/BaseIp > > miCommandLibNull.inf > > + > > SpiHcPlatformLib|MdeModulePkg/Library/BaseSpiHcPlatformLibNull/BaseSpi > > HcPlatformLibNull.inf > > > > [LibraryClasses.EBC.PEIM] > > IoLib|MdePkg/Library/PeiIoLibCpuIo/PeiIoLibCpuIo.inf > > @@ -528,6 +529,7 @@ [Components.IA32, Components.X64] > > > > MdeModulePkg/Library/TraceHubDebugSysTLib/BaseTraceHubDebugSysTLib.i > > nf > > > > MdeModulePkg/Library/TraceHubDebugSysTLib/PeiTraceHubDebugSysTLib.in > > f > > > > MdeModulePkg/Library/TraceHubDebugSysTLib/DxeSmmTraceHubDebugSys > > TLib.inf > > + > > MdeModulePkg/Library/BaseSpiHcPlatformLibNull/BaseSpiHcPlatformLibNull. > > inf > > > > [Components.X64] > > MdeModulePkg/Universal/CapsulePei/CapsuleX64.inf > > diff --git > > a/MdeModulePkg/Library/BaseSpiHcPlatformLibNull/BaseSpiHcPlatformLibN > > ull.inf > > b/MdeModulePkg/Library/BaseSpiHcPlatformLibNull/BaseSpiHcPlatformLibN > > ull.inf > > new file mode 100644 > > index 000000000000..805f50b89565 > > --- /dev/null > > +++ > > b/MdeModulePkg/Library/BaseSpiHcPlatformLibNull/BaseSpiHcPlatformLibN > > ull.inf > > @@ -0,0 +1,33 @@ > > +## @file > > +# NULL library for platform SPI Host controller, which should be provided > > +# by the OEM. > > +# > > +# Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved. <BR> > > +# > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +## > > +[Defines] > > + INF_VERSION = 1.27 > > + BASE_NAME = BaseSpiHcPlatformLibNull > > + FILE_GUID = > 3C230948-6DF5-4802-8177-967A190579CF > > + MODULE_TYPE = BASE > > + VERSION_STRING = 0.1 > > + PI_SPECIFICATION_VERSION = 0x0001000A > > + LIBRARY_CLASS = SpiHcPlatformLib > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + MdeModulePkg/MdeModulePkg.dec > > + > > +[LibraryClasses] > > + DevicePathLib > > + UefiLib > > + > > +[Sources] > > + BaseSpiHcPlatformLibNull.c > > + > > +[Depex] > > + TRUE > > + > > +[UserExtensions.TianoCore."ExtraFiles"] > > + BaseSpiHcPlatformLibNull.uni > > diff --git a/MdeModulePkg/Include/Library/SpiHcPlatformLib.h > > b/MdeModulePkg/Include/Library/SpiHcPlatformLib.h > > new file mode 100644 > > index 000000000000..c68f7455372c > > --- /dev/null > > +++ b/MdeModulePkg/Include/Library/SpiHcPlatformLib.h > > @@ -0,0 +1,148 @@ > > +/** @file > > + > > + Function declarations for SpiHcPlatformLib > > + > > + Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR> > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > +**/ > > + > > +#ifndef PLATFORM_SPI_HC_H_ > > +#define PLATFORM_SPI_HC_H_ > > + > > +#include <Uefi/UefiBaseType.h> > > +#include <Protocol/SpiHc.h> > > +#include <Protocol/SpiConfiguration.h> > > +#include <Protocol/DevicePath.h> > > +#include <Library/DevicePathLib.h> > > + > > +/** > > + This function reports the details of the SPI Host Controller to the SpiHc > > driver. > > + > > + @param[out] Attributes The suported attributes of > the SPI host > > controller > > + @param[out] FrameSizeSupportMask The suported > > FrameSizeSupportMask of the SPI host controller > > + @param[out] MaximumTransferBytes The suported > > MaximumTransferBytes of the SPI host controller > > + > > + @retval EFI_SUCCESS SPI_HOST_CONTROLLER_INSTANCE > was > > allocated properly > > + @retval EFI_OUT_OF_RESOURCES The > SPI_HOST_CONTROLLER_INSTANCE > > could not be allocated > > +*/ > > +EFI_STATUS > > +EFIAPI > > +GetPlatformSpiHcDetails ( > > + OUT UINT32 *Attributes, > > + OUT UINT32 *FrameSizeSupportMask, > > + OUT UINT32 *MaximumTransferBytes > > + ); > > + > > +/** > > + This function reports the device path of SPI host controller. This is needed in > > order for the SpiBus > > + to match the correct SPI_BUS to the SPI host controller > > + > > + @param[out] DevicePath The device path for this SPI HC is returned in this > > variable > > + > > + @retval EFI_SUCCESS > > +*/ > > +EFI_STATUS > > +EFIAPI > > +GetSpiHcDevicePath ( > > + OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath > > + ); > > + > > +/** > > + This is the platform specific Spi Chip select function. > > + Assert or deassert the SPI chip select. > > + > > + This routine is called at TPL_NOTIFY. > > + Update the value of the chip select line for a SPI peripheral. The SPI bus > > + layer calls this routine either in the board layer or in the SPI controller > > + to manipulate the chip select pin at the start and end of a SPI transaction. > > + > > + @param[in] This Pointer to an EFI_SPI_HC_PROTOCOL > structure. > > + @param[in] SpiPeripheral The address of an EFI_SPI_PERIPHERAL data > > structure > > + describing the SPI peripheral whose chip > select pin > > + is to be manipulated. The routine may access > the > > + ChipSelectParameter field to gain sufficient > > + context to complete the operati on. > > + @param[in] PinValue The value to be applied to the chip select line > of > > + the SPI peripheral. > > + > > + @retval EFI_SUCCESS The chip select was set as requested > > + @retval EFI_NOT_READY Support for the chip select is not > properly > > + initialized > > + @retval EFI_INVALID_PARAMETER The ChipSeLect value or its contents are > > + invalid > > + > > +**/ > > +EFI_STATUS > > +EFIAPI > > +PlatformSpiHcChipSelect ( > > + IN CONST EFI_SPI_HC_PROTOCOL *This, > > + IN CONST EFI_SPI_PERIPHERAL *SpiPeripheral, > > + IN BOOLEAN PinValue > > + ); > > + > > +/** > > + This function is the platform specific SPI clock function. > > + Set up the clock generator to produce the correct clock frequency, phase > > and > > + polarity for a SPI chip. > > + > > + This routine is called at TPL_NOTIFY. > > + This routine updates the clock generator to generate the correct frequency > > + and polarity for the SPI clock. > > + > > + @param[in] This Pointer to an EFI_SPI_HC_PROTOCOL > structure. > > + @param[in] SpiPeripheral Pointer to a EFI_SPI_PERIPHERAL data structure > > from > > + which the routine can access the > ClockParameter, > > + ClockPhase and ClockPolarity fields. The > routine > > + also has access to the names for the SPI bus > and > > + chip which can be used during debugging. > > + @param[in] ClockHz Pointer to the requested clock frequency. The > SPI > > + host controller will choose a supported clock > > + frequency which is less then or equal to this > > + value. Specify zero to turn the clock > generator > > + off. The actual clock frequency supported by > the > > + SPI host controller will be returned. > > + > > + @retval EFI_SUCCESS The clock was set up successfully > > + @retval EFI_UNSUPPORTED The SPI controller was not able to support the > > + frequency requested by ClockHz > > + > > +**/ > > +EFI_STATUS > > +EFIAPI > > +PlatformSpiHcClock ( > > + IN CONST EFI_SPI_HC_PROTOCOL *This, > > + IN CONST EFI_SPI_PERIPHERAL *SpiPeripheral, > > + IN UINT32 *ClockHz > > + ); > > + > > +/** > > + This function is the platform specific SPI transaction function > > + Perform the SPI transaction on the SPI peripheral using the SPI host > > + controller. > > + > > + This routine is called at TPL_NOTIFY. > > + This routine synchronously returns EFI_SUCCESS indicating that the > > + asynchronous SPI transaction was started. The routine then waits for > > + completion of the SPI transaction prior to returning the final transaction > > + status. > > + > > + @param[in] This Pointer to an EFI_SPI_HC_PROTOCOL > structure. > > + @param[in] BusTransaction Pointer to a EFI_SPI_BUS_ TRANSACTION > > containing > > + the description of the SPI transaction to > perform. > > + > > + @retval EFI_SUCCESS The transaction completed successfully > > + @retval EFI_BAD_BUFFER_SIZE The BusTransaction->WriteBytes value is > > invalid, > > + or the BusTransaction->ReadinBytes value > is > > + invalid > > + @retval EFI_UNSUPPORTED The BusTransaction-> Transaction Type is > > + unsupported > > + > > +**/ > > +EFI_STATUS > > +EFIAPI > > +PlatformSpiHcTransaction ( > > + IN CONST EFI_SPI_HC_PROTOCOL *This, > > + IN EFI_SPI_BUS_TRANSACTION *BusTransaction > > + ); > > + > > +#endif // PLATFORM_SPI_HC_SMM_PROTOCOL_H_ > > diff --git > > a/MdeModulePkg/Library/BaseSpiHcPlatformLibNull/BaseSpiHcPlatformLibN > > ull.c > > b/MdeModulePkg/Library/BaseSpiHcPlatformLibNull/BaseSpiHcPlatformLibN > > ull.c > > new file mode 100644 > > index 000000000000..2926e9e248eb > > --- /dev/null > > +++ > > b/MdeModulePkg/Library/BaseSpiHcPlatformLibNull/BaseSpiHcPlatformLibN > > ull.c > > @@ -0,0 +1,145 @@ > > +/** @file > > + > > + Null implementation of SpiHcPlatformLib > > + > > + Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR> > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > +#include <PiDxe.h> > > +#include <Protocol/DevicePath.h> > > +#include <Protocol/SpiHc.h> > > +#include <Library/SpiHcPlatformLib.h> > > + > > +/** > > + This function reports the details of the SPI Host Controller to the SpiHc > > driver. > > + > > + @param[out] Attributes The suported attributes of > the SPI host > > controller > > + @param[out] FrameSizeSupportMask The suported > > FrameSizeSupportMask of the SPI host controller > > + @param[out] MaximumTransferBytes The suported > > MaximumTransferBytes of the SPI host controller > > + > > + @retval EFI_UNSUPPORTED > > +**/ > > +EFI_STATUS > > +EFIAPI > > +GetPlatformSpiHcDetails ( > > + OUT UINT32 *Attributes, > > + OUT UINT32 *FrameSizeSupportMask, > > + OUT UINT32 *MaximumTransferBytes > > + ) > > +{ > > + return EFI_UNSUPPORTED; > > +} > > + > > +/** > > + This function reports the device path of SPI host controller. This is needed in > > order for the SpiBus > > + to match the correct SPI_BUS to the SPI host controller > > + > > + @param[out] DevicePath The device path for this SPI HC is returned in this > > variable > > + > > + @retval EFI_UNSUPPORTED > > +**/ > > +EFI_STATUS > > +EFIAPI > > +GetSpiHcDevicePath ( > > + OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath > > + ) > > +{ > > + return EFI_UNSUPPORTED; > > +} > > + > > +/** > > + This is the platform specific Spi Chip select function. > > + Assert or deassert the SPI chip select. > > + > > + This routine is called at TPL_NOTIFY. > > + Update the value of the chip select line for a SPI peripheral. The SPI bus > > + layer calls this routine either in the board layer or in the SPI controller > > + to manipulate the chip select pin at the start and end of a SPI transaction. > > + > > + @param[in] This Pointer to an EFI_SPI_HC_PROTOCOL > structure. > > + @param[in] SpiPeripheral The address of an EFI_SPI_PERIPHERAL data > > structure > > + describing the SPI peripheral whose chip > select pin > > + is to be manipulated. The routine may access > the > > + ChipSelectParameter field to gain sufficient > > + context to complete the operati on. > > + @param[in] PinValue The value to be applied to the chip select line > of > > + the SPI peripheral. > > + > > + @retval EFI_UNSUPPORTED > > + > > +**/ > > +EFI_STATUS > > +EFIAPI > > +PlatformSpiHcChipSelect ( > > + IN CONST EFI_SPI_HC_PROTOCOL *This, > > + IN CONST EFI_SPI_PERIPHERAL *SpiPeripheral, > > + IN BOOLEAN PinValue > > + ) > > +{ > > + return EFI_UNSUPPORTED; > > +} > > + > > +/** > > + This function is the platform specific SPI clock function. > > + Set up the clock generator to produce the correct clock frequency, phase > > and > > + polarity for a SPI chip. > > + > > + This routine is called at TPL_NOTIFY. > > + This routine updates the clock generator to generate the correct frequency > > + and polarity for the SPI clock. > > + > > + @param[in] This Pointer to an EFI_SPI_HC_PROTOCOL > structure. > > + @param[in] SpiPeripheral Pointer to a EFI_SPI_PERIPHERAL data structure > > from > > + which the routine can access the > ClockParameter, > > + ClockPhase and ClockPolarity fields. The > routine > > + also has access to the names for the SPI bus > and > > + chip which can be used during debugging. > > + @param[in] ClockHz Pointer to the requested clock frequency. The > SPI > > + host controller will choose a supported clock > > + frequency which is less then or equal to this > > + value. Specify zero to turn the clock > generator > > + off. The actual clock frequency supported by > the > > + SPI host controller will be returned. > > + > > + @retval EFI_UNSUPPORTED > > + > > +**/ > > +EFI_STATUS > > +EFIAPI > > +PlatformSpiHcClock ( > > + IN CONST EFI_SPI_HC_PROTOCOL *This, > > + IN CONST EFI_SPI_PERIPHERAL *SpiPeripheral, > > + IN UINT32 *ClockHz > > + ) > > +{ > > + return EFI_UNSUPPORTED; > > +} > > + > > +/** > > + This function is the platform specific SPI transaction function > > + Perform the SPI transaction on the SPI peripheral using the SPI host > > + controller. > > + > > + This routine is called at TPL_NOTIFY. > > + This routine synchronously returns EFI_SUCCESS indicating that the > > + asynchronous SPI transaction was started. The routine then waits for > > + completion of the SPI transaction prior to returning the final transaction > > + status. > > + > > + @param[in] This Pointer to an EFI_SPI_HC_PROTOCOL > structure. > > + @param[in] BusTransaction Pointer to a EFI_SPI_BUS_ TRANSACTION > > containing > > + the description of the SPI transaction to > perform. > > + > > + @retval EFI_UNSUPPORTED > > + > > +**/ > > +EFI_STATUS > > +EFIAPI > > +PlatformSpiHcTransaction ( > > + IN CONST EFI_SPI_HC_PROTOCOL *This, > > + IN EFI_SPI_BUS_TRANSACTION *BusTransaction > > + ) > > +{ > > + return EFI_UNSUPPORTED; > > +} > > diff --git > > a/MdeModulePkg/Library/BaseSpiHcPlatformLibNull/BaseSpiHcPlatformLibN > > ull.uni > > b/MdeModulePkg/Library/BaseSpiHcPlatformLibNull/BaseSpiHcPlatformLibN > > ull.uni > > new file mode 100644 > > index 000000000000..82fa02c31d58 > > --- /dev/null > > +++ > > b/MdeModulePkg/Library/BaseSpiHcPlatformLibNull/BaseSpiHcPlatformLibN > > ull.uni > > @@ -0,0 +1,11 @@ > > + > > +// /** @file > > +// > > +// Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved. <BR> > > +// > > +// SPDX-License-Identifier: BSD-2-Clause-Patent > > +// > > +// **/ > > + > > +#string STR_PROPERTIES_MODULE_NAME > > +#language en-US "Null SPI Host controller library" > > -- > > 2.42.1
-=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#118627): https://edk2.groups.io/g/devel/message/118627 Mute This Topic: https://groups.io/mt/105953677/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-