summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThru.c
diff options
context:
space:
mode:
Diffstat (limited to 'MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThru.c')
-rw-r--r--MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThru.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThru.c b/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThru.c
index 761dc8ee1..8c9aad903 100644
--- a/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThru.c
+++ b/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThru.c
@@ -778,11 +778,14 @@ UfsPassThruDriverBindingStart (
UINTN UfsHcBase;
UINT32 Index;
UFS_CONFIG_DESC Config;
+ UFS_DEV_DESC Dev;
+ UINT32 DevQuirks;
Status = EFI_SUCCESS;
UfsHc = NULL;
Private = NULL;
UfsHcBase = 0;
+ DevQuirks = 0;
DEBUG ((EFI_D_INFO, "==UfsPassThru Start== Controller = %x\n", Controller));
@@ -855,6 +858,22 @@ UfsPassThruDriverBindingStart (
MicroSecondDelay (100000);
+ Status = UfsRwDeviceDesc (Private, TRUE, UfsDeviceDesc, 0, 0, &Dev, sizeof (UFS_DEV_DESC));
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_ERROR, "Ufs Get Dev Descriptor Error, Status = %r\n", Status));
+ goto Error;
+ }
+
+ if (SwapBytes16(Dev.ManufacturerId) == UFS_VENDOR_SKHYNIX) {
+ DevQuirks |= UFS_DEVICE_QUIRK_HOST_VS_DEBUGSAVECONFIGTIME;
+ }
+
+ Status = UfsHc->PhySetPowerMode (UfsHc, DevQuirks);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_ERROR, "Phy Set Power Mode Fails, Status = %r\n", Status));
+ goto Error;
+ }
+
//
// Get Ufs Device's Lun Info by reading Configuration Descriptor.
//