]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.c
MdeModulePkg/AtaAtapiPassThru: Ensure GHC.AE bit is always set in Ahci
[mirror_edk2.git] / MdeModulePkg / Bus / Ata / AtaAtapiPassThru / AhciMode.c
index 533d2013894fdb850cd00046513978c243c6f6ae..4d01c1dd7fca2c70d97250e9bace7840135e4d09 100644 (file)
@@ -1451,17 +1451,13 @@ AhciReset (
 {\r
   UINT64                 Delay;\r
   UINT32                 Value;\r
-  UINT32                 Capability;\r
 \r
   //\r
-  // Collect AHCI controller information\r
-  //\r
-  Capability = AhciReadReg (PciIo, EFI_AHCI_CAPABILITY_OFFSET);\r
-  \r
-  //\r
-  // Enable AE before accessing any AHCI registers if Supports AHCI Mode Only is not set\r
+  // Make sure that GHC.AE bit is set before accessing any AHCI registers.\r
   //\r
-  if ((Capability & EFI_AHCI_CAP_SAM) == 0) {\r
+  Value = AhciReadReg(PciIo, EFI_AHCI_GHC_OFFSET);\r
+\r
+  if ((Value & EFI_AHCI_GHC_ENABLE) == 0) {\r
     AhciOrReg (PciIo, EFI_AHCI_GHC_OFFSET, EFI_AHCI_GHC_ENABLE);\r
   }\r
 \r
@@ -2252,6 +2248,7 @@ AhciModeInitialization (
   EFI_ATA_COLLECTIVE_MODE          *SupportedModes;\r
   EFI_ATA_TRANSFER_MODE            TransferMode;\r
   UINT32                           PhyDetectDelay;\r
+  UINT32                           Value;\r
 \r
   if (Instance == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -2270,11 +2267,13 @@ AhciModeInitialization (
   // Collect AHCI controller information\r
   //\r
   Capability = AhciReadReg (PciIo, EFI_AHCI_CAPABILITY_OFFSET);\r
-  \r
+\r
   //\r
-  // Enable AE before accessing any AHCI registers if Supports AHCI Mode Only is not set\r
+  // Make sure that GHC.AE bit is set before accessing any AHCI registers.\r
   //\r
-  if ((Capability & EFI_AHCI_CAP_SAM) == 0) {\r
+  Value = AhciReadReg(PciIo, EFI_AHCI_GHC_OFFSET);\r
+\r
+  if ((Value & EFI_AHCI_GHC_ENABLE) == 0) {\r
     AhciOrReg (PciIo, EFI_AHCI_GHC_OFFSET, EFI_AHCI_GHC_ENABLE);\r
   }\r
 \r