mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/NvmExpressPei: Fix Opal S3 unlock issue
https://bugzilla.tianocore.org/show_bug.cgi?id=2312 This patch is for fixing unexpected system hang during S3 unlock process. FatPei driver maintained and updated internal BlockIo devices list when there is new BlockIo PPI has installed, and it relied on BlockIo PPI service to get data from devices. Because BlockIo Ppi leverage NvmExpressPei Ppi to transit Nvm command to device, we should make sure NvmePassThruPpi installed before BlockIo PPI. Signed-off-by: Maggie Chu <maggie.chu@intel.com> Reviewed-by: Hao A Wu <hao.a.wu@intel.com> Cc: Jian J Wang <jian.j.wang@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Eric Dong <eric.dong@intel.com>
This commit is contained in:
parent
6f3ac73cd3
commit
dc254af6a4
|
@ -376,6 +376,29 @@ NvmExpressPeimEntry (
|
|||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
// Nvm Express Pass Thru PPI
|
||||
//
|
||||
Private->PassThruMode.Attributes = EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_PHYSICAL |
|
||||
EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_LOGICAL |
|
||||
EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_CMD_SET_NVM;
|
||||
Private->PassThruMode.IoAlign = sizeof (UINTN);
|
||||
Private->PassThruMode.NvmeVersion = EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI_REVISION;
|
||||
Private->NvmePassThruPpi.Mode = &Private->PassThruMode;
|
||||
Private->NvmePassThruPpi.GetDevicePath = NvmePassThruGetDevicePath;
|
||||
Private->NvmePassThruPpi.GetNextNameSpace = NvmePassThruGetNextNameSpace;
|
||||
Private->NvmePassThruPpi.PassThru = NvmePassThru;
|
||||
CopyMem (
|
||||
&Private->NvmePassThruPpiList,
|
||||
&mNvmePassThruPpiListTemplate,
|
||||
sizeof (EFI_PEI_PPI_DESCRIPTOR)
|
||||
);
|
||||
Private->NvmePassThruPpiList.Ppi = &Private->NvmePassThruPpi;
|
||||
PeiServicesInstallPpi (&Private->NvmePassThruPpiList);
|
||||
|
||||
//
|
||||
// Block Io PPI
|
||||
//
|
||||
Private->BlkIoPpi.GetNumberOfBlockDevices = NvmeBlockIoPeimGetDeviceNo;
|
||||
Private->BlkIoPpi.GetBlockDeviceMediaInfo = NvmeBlockIoPeimGetMediaInfo;
|
||||
Private->BlkIoPpi.ReadBlocks = NvmeBlockIoPeimReadBlocks;
|
||||
|
@ -398,26 +421,6 @@ NvmExpressPeimEntry (
|
|||
Private->BlkIo2PpiList.Ppi = &Private->BlkIo2Ppi;
|
||||
PeiServicesInstallPpi (&Private->BlkIoPpiList);
|
||||
|
||||
//
|
||||
// Nvm Express Pass Thru PPI
|
||||
//
|
||||
Private->PassThruMode.Attributes = EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_PHYSICAL |
|
||||
EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_LOGICAL |
|
||||
EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_CMD_SET_NVM;
|
||||
Private->PassThruMode.IoAlign = sizeof (UINTN);
|
||||
Private->PassThruMode.NvmeVersion = EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI_REVISION;
|
||||
Private->NvmePassThruPpi.Mode = &Private->PassThruMode;
|
||||
Private->NvmePassThruPpi.GetDevicePath = NvmePassThruGetDevicePath;
|
||||
Private->NvmePassThruPpi.GetNextNameSpace = NvmePassThruGetNextNameSpace;
|
||||
Private->NvmePassThruPpi.PassThru = NvmePassThru;
|
||||
CopyMem (
|
||||
&Private->NvmePassThruPpiList,
|
||||
&mNvmePassThruPpiListTemplate,
|
||||
sizeof (EFI_PEI_PPI_DESCRIPTOR)
|
||||
);
|
||||
Private->NvmePassThruPpiList.Ppi = &Private->NvmePassThruPpi;
|
||||
PeiServicesInstallPpi (&Private->NvmePassThruPpiList);
|
||||
|
||||
//
|
||||
// Check if the NVME controller supports the Security Receive/Send commands
|
||||
//
|
||||
|
|
Loading…
Reference in New Issue