MdeModulePkg/NvmExpressDxe: enable 64-bit PCI DMA

PCI controller drivers must set the EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE
attribute if the controller supports 64-bit DMA addressing.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Feng Tian <feng.tian@Intel.com>
diff --git a/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressHci.c b/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressHci.c
index a173504..51cff3c 100644
--- a/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressHci.c
+++ b/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressHci.c
@@ -863,6 +863,19 @@
   }

 

   //

+  // Enable 64-bit DMA support in the PCI layer.

+  //

+  Status = PciIo->Attributes (

+                    PciIo,

+                    EfiPciIoAttributeOperationEnable,

+                    EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE,

+                    NULL

+                    );

+  if (EFI_ERROR (Status)) {

+    DEBUG ((EFI_D_WARN, "NvmeControllerInit: failed to enable 64-bit DMA (%r)\n", Status));

+  }

+

+  //

   // Read the Controller Capabilities register and verify that the NVM command set is supported

   //

   Status = ReadNvmeControllerCapabilities (Private, &Private->Cap);