According to the Universal Flash Storage (UFS) Version 2.1 (JESD220C) spec Section 10.7.8.5, the DATA SEGMENT LENGTH field of the UPIU shall also be set to number of descriptor bytes to write.
The origin codes miss the above operation. Cc: Star Zeng <[email protected]> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <[email protected]> --- MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsHci.c | 3 +++ MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThruHci.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsHci.c b/MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsHci.c index 1ef6c8878b..9c72c1dede 100644 --- a/MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsHci.c +++ b/MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsHci.c @@ -407,6 +407,9 @@ UfsInitQueryRequestUpiu ( if (Opcode == UtpQueryFuncOpcodeWrDesc) { CopyMem (QueryReq + 1, Data, DataSize); + + SwapLittleEndianToBigEndian ((UINT8*)&DataSize, sizeof (UINT16)); + QueryReq->DataSegLen = (UINT16)DataSize; } return EFI_SUCCESS; diff --git a/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThruHci.c b/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThruHci.c index 5fa635523a..4b7df74501 100644 --- a/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThruHci.c +++ b/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThruHci.c @@ -478,6 +478,9 @@ UfsInitQueryRequestUpiu ( if (Opcode == UtpQueryFuncOpcodeWrDesc) { CopyMem (QueryReq + 1, Data, DataSize); + + SwapLittleEndianToBigEndian ((UINT8*)&DataSize, sizeof (UINT16)); + QueryReq->DataSegLen = (UINT16)DataSize; } return EFI_SUCCESS; -- 2.12.0.windows.1 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

