From 4d580428a38be8ea6cb38d860f9093d98cf23583 Mon Sep 17 00:00:00 2001 From: Haojian Zhuang Date: Mon, 16 Jan 2017 20:22:58 +0800 Subject: [PATCH] MdeModulePkg/UfsBlockIoPei: fix initialize OCS value to 0x0F The OCS value should be initiliazed as 0x0F according to UFS spec. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Haojian Zhuang Reviewed-by: Feng Tian --- MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsHci.c | 4 +++- MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsHci.h | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsHci.c b/MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsHci.c index cccacce334..332ce7e967 100644 --- a/MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsHci.c +++ b/MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsHci.c @@ -480,6 +480,7 @@ UfsCreateScsiCommandDesc ( Trd->Int = UFS_INTERRUPT_COMMAND; Trd->Dd = DataDirection; Trd->Ct = UFS_STORAGE_COMMAND_TYPE; + Trd->Ocs = UFS_HC_TRD_OCS_INIT_VALUE; Trd->UcdBa = (UINT32)RShiftU64 ((UINT64)(UINTN)CommandUpiu, 7); Trd->UcdBaU = (UINT32)RShiftU64 ((UINT64)(UINTN)CommandUpiu, 32); Trd->RuL = (UINT16)DivU64x32 ((UINT64)ROUNDUP8 (sizeof (UTP_RESPONSE_UPIU)), sizeof (UINT32)); @@ -583,7 +584,7 @@ UfsCreateDMCommandDesc ( Trd->Int = UFS_INTERRUPT_COMMAND; Trd->Dd = DataDirection; Trd->Ct = UFS_STORAGE_COMMAND_TYPE; - Trd->Ocs = 0x0F; + Trd->Ocs = UFS_HC_TRD_OCS_INIT_VALUE; Trd->UcdBa = (UINT32)RShiftU64 ((UINT64)(UINTN)QueryReqUpiu, 7); Trd->UcdBaU = (UINT32)RShiftU64 ((UINT64)(UINTN)QueryReqUpiu, 32); if (Opcode == UtpQueryFuncOpcodeWrDesc) { @@ -637,6 +638,7 @@ UfsCreateNopCommandDesc ( Trd->Int = UFS_INTERRUPT_COMMAND; Trd->Dd = 0x00; Trd->Ct = UFS_STORAGE_COMMAND_TYPE; + Trd->Ocs = UFS_HC_TRD_OCS_INIT_VALUE; Trd->UcdBa = (UINT32)RShiftU64 ((UINT64)(UINTN)NopOutUpiu, 7); Trd->UcdBaU = (UINT32)RShiftU64 ((UINT64)(UINTN)NopOutUpiu, 32); Trd->RuL = (UINT16)DivU64x32 ((UINT64)ROUNDUP8 (sizeof (UTP_NOP_IN_UPIU)), sizeof (UINT32)); diff --git a/MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsHci.h b/MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsHci.h index a423a921de..0a0cf71894 100644 --- a/MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsHci.h +++ b/MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsHci.h @@ -76,6 +76,12 @@ #define UFS_HC_UTMRLRSR BIT0 #define UFS_HC_UTRLRSR BIT0 +// +// The initial value of the OCS field of UTP TRD or TMRD descriptor +// defined in JEDEC JESD223 specification +// +#define UFS_HC_TRD_OCS_INIT_VALUE 0x0F + // // A maximum of length of 256KB is supported by PRDT entry // -- 2.39.2