]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/NvmExpress: Clean Phase/CqHdbl/SqTdbl fields to restart HC
authorTian Feng <feng.tian@intel.com>
Tue, 24 Nov 2015 08:45:44 +0000 (16:45 +0800)
committerFeng Tian <feng.tian@intel.com>
Tue, 26 Apr 2016 07:44:55 +0000 (15:44 +0800)
Phase Tag, SqTdbl/CqHdbl and SqBuffer/CqBuffer should be cleared in
NvmeControllerInit() to make HC functionality work when user invokes
NvmeBlockIoReset().

Cc: Simon (Xiang) Lian-SSI <simon.lian@ssi.samsung.com>
Cc: Star Zeng <star.zeng@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Feng Tian <feng.tian@intel.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Simon (Xiang) Lian-SSI <simon.lian@ssi.samsung.com>
MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpress.c
MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressHci.c

index 49a73c4f9178041f480fb41fae51474b4aa49c1b..321dbdef9756d641e8f16c87f1dd0efe47109e17 100644 (file)
@@ -770,7 +770,6 @@ NvmExpressDriverBindingStart (
     }\r
 \r
     Private->BufferPciAddr = (UINT8 *)(UINTN)MappedAddr;\r
-    ZeroMem (Private->Buffer, EFI_PAGES_TO_SIZE (4));\r
 \r
     Private->Signature = NVME_CONTROLLER_PRIVATE_DATA_SIGNATURE;\r
     Private->ControllerHandle          = Controller;\r
index 009ad7c43dcfdff29415e9ba779f271047e31256..e2201b9cef3b08fe4a5aff69704769f6af9c8bf4 100644 (file)
@@ -844,6 +844,12 @@ NvmeControllerInit (
 \r
   Private->Cid[0] = 0;\r
   Private->Cid[1] = 0;\r
+  Private->Pt[0]  = 0;\r
+  Private->Pt[1]  = 0;\r
+  Private->SqTdbl[0].Sqt = 0;\r
+  Private->SqTdbl[1].Sqt = 0;\r
+  Private->CqHdbl[0].Cqh = 0;\r
+  Private->CqHdbl[1].Cqh = 0;\r
 \r
   Status = NvmeDisableController (Private);\r
 \r
@@ -872,6 +878,7 @@ NvmeControllerInit (
   //\r
   // Address of I/O submission & completion queue.\r
   //\r
+  ZeroMem (Private->Buffer, EFI_PAGES_TO_SIZE (4));\r
   Private->SqBuffer[0]        = (NVME_SQ *)(UINTN)(Private->Buffer);\r
   Private->SqBufferPciAddr[0] = (NVME_SQ *)(UINTN)(Private->BufferPciAddr);\r
   Private->CqBuffer[0]        = (NVME_CQ *)(UINTN)(Private->Buffer + 1 * EFI_PAGE_SIZE);\r
@@ -924,10 +931,12 @@ NvmeControllerInit (
   //\r
   // Allocate buffer for Identify Controller data\r
   //\r
-  Private->ControllerData = (NVME_ADMIN_CONTROLLER_DATA *)AllocateZeroPool (sizeof(NVME_ADMIN_CONTROLLER_DATA));\r
-\r
   if (Private->ControllerData == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
+    Private->ControllerData = (NVME_ADMIN_CONTROLLER_DATA *)AllocateZeroPool (sizeof(NVME_ADMIN_CONTROLLER_DATA));\r
+    \r
+    if (Private->ControllerData == NULL) {\r
+      return EFI_OUT_OF_RESOURCES;\r
+    }\r
   }\r
 \r
   //\r