]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/Ufs: Fix UFS flag read from Query Resp UPIU
authorAgrawal, Sachin <sachin.agrawal@intel.com>
Mon, 23 Sep 2019 11:48:17 +0000 (19:48 +0800)
committerHao A Wu <hao.a.wu@intel.com>
Tue, 15 Oct 2019 01:54:37 +0000 (09:54 +0800)
As per UFS spec, flag value is stored in the 'last byte' of value
field. Existing code is attempting to read first byte.

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2208

Test: Verified the Fix by sending command to set fPowerOnWPEn flag
and then reading it to verify the set value.

Cc: Ray Ni <ray.ni@intel.com>
Signed-off-by: Sachin Agrawal <sachin.agrawal@intel.com>
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsHci.c
MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThruHci.c

index e8ef0c2a7aa367049a2c1ab39689addf15ab7e2e..e450f6f49d7c50f464f3283f96c38f9d239287bc 100644 (file)
@@ -977,7 +977,10 @@ UfsRwFlags (
   }\r
 \r
   if (Trd->Ocs == 0) {\r
-    *Value = (UINT8)QueryResp->Tsf.Value;\r
+    //\r
+    // The 'FLAG VALUE' field is at byte offset 3 of QueryResp->Tsf.Value\r
+    //\r
+    *Value = *((UINT8*)&(QueryResp->Tsf.Value) + 3);\r
   } else {\r
     Status = EFI_DEVICE_ERROR;\r
   }\r
index 0b95e7dddddeb169bf6a0f08e010b2492d0e5252..93ac958f658fb5e75c6a9f6b6d382ed3e33c4bd6 100644 (file)
@@ -863,7 +863,10 @@ UfsGetReturnDataFromQueryResponse (
     case UtpQueryFuncOpcodeSetFlag:\r
     case UtpQueryFuncOpcodeClrFlag:\r
     case UtpQueryFuncOpcodeTogFlag:\r
-      CopyMem (Packet->DataBuffer, &QueryResp->Tsf.Value, sizeof (UINT8));\r
+      //\r
+      // The 'FLAG VALUE' field is at byte offset 3 of QueryResp->Tsf.Value\r
+      //\r
+      *((UINT8*)(Packet->DataBuffer)) = *((UINT8*)&(QueryResp->Tsf.Value) + 3);\r
       break;\r
     case UtpQueryFuncOpcodeRdAttr:\r
     case UtpQueryFuncOpcodeWrAttr:\r