/** @file\r
\r
- Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2014 - 2019, Intel Corporation. All rights reserved.<BR>\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
},\r
0, // UfsHostController\r
0, // UfsHcBase\r
- 0, // Capabilities\r
+ {0, 0}, // UfsHcInfo\r
0, // TaskTag\r
0, // UtpTrlBase\r
0, // Nutrs\r
Private->UfsHostController = UfsHc;\r
Private->UfsHcBase = UfsHcBase;\r
InitializeListHead (&Private->Queue);\r
+ Status = GetUfsHcInfo (Private);\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((DEBUG_ERROR, "Failed to initialize UfsHcInfo\n"));\r
+ goto Error;\r
+ }\r
\r
//\r
// Initialize UFS Host Controller H/W.\r
EFI_UFS_DEVICE_CONFIG_PROTOCOL UfsDevConfig;\r
EDKII_UFS_HOST_CONTROLLER_PROTOCOL *UfsHostController;\r
UINTN UfsHcBase;\r
- UINT32 Capabilities;\r
+ EDKII_UFS_HC_INFO UfsHcInfo;\r
\r
UINT8 TaskTag;\r
\r
IN OUT UINT32 *AttrSize\r
);\r
\r
+/**\r
+ Initializes UfsHcInfo field in private data.\r
+\r
+ @param[in] Private Pointer to host controller private data.\r
+\r
+ @retval EFI_SUCCESS UfsHcInfo initialized successfully.\r
+ @retval Others Failed to initalize UfsHcInfo.\r
+**/\r
+EFI_STATUS\r
+GetUfsHcInfo (\r
+ IN UFS_PASS_THRU_PRIVATE_DATA *Private\r
+ );\r
+\r
extern EFI_COMPONENT_NAME_PROTOCOL gUfsPassThruComponentName;\r
extern EFI_COMPONENT_NAME2_PROTOCOL gUfsPassThruComponentName2;\r
extern EFI_DRIVER_BINDING_PROTOCOL gUfsPassThruDriverBinding;\r
return Status;\r
}\r
\r
- Nutrs = (UINT8)((Private->Capabilities & UFS_HC_CAP_NUTRS) + 1);\r
+ Nutrs = (UINT8)((Private->UfsHcInfo.Capabilities & UFS_HC_CAP_NUTRS) + 1);\r
\r
for (Index = 0; Index < Nutrs; Index++) {\r
if ((Data & (BIT0 << Index)) == 0) {\r
BOOLEAN Is32BitAddr;\r
EDKII_UFS_HOST_CONTROLLER_PROTOCOL *UfsHc;\r
\r
- if ((Private->Capabilities & UFS_HC_CAP_64ADDR) == UFS_HC_CAP_64ADDR) {\r
+ if ((Private->UfsHcInfo.Capabilities & UFS_HC_CAP_64ADDR) == UFS_HC_CAP_64ADDR) {\r
Is32BitAddr = FALSE;\r
} else {\r
Is32BitAddr = TRUE;\r
IN UFS_PASS_THRU_PRIVATE_DATA *Private\r
)\r
{\r
- UINT32 Data;\r
UINT8 Nutmrs;\r
VOID *CmdDescHost;\r
EFI_PHYSICAL_ADDRESS CmdDescPhyAddr;\r
CmdDescMapping = NULL;\r
CmdDescPhyAddr = 0;\r
\r
- Status = UfsMmioRead32 (Private, UFS_HC_CAP_OFFSET, &Data);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- Private->Capabilities = Data;\r
-\r
//\r
// Allocate and initialize UTP Task Management Request List.\r
//\r
- Nutmrs = (UINT8) (RShiftU64 ((Private->Capabilities & UFS_HC_CAP_NUTMRS), 16) + 1);\r
+ Nutmrs = (UINT8) (RShiftU64 ((Private->UfsHcInfo.Capabilities & UFS_HC_CAP_NUTMRS), 16) + 1);\r
Status = UfsAllocateAlignCommonBuffer (Private, Nutmrs * sizeof (UTP_TMRD), &CmdDescHost, &CmdDescPhyAddr, &CmdDescMapping);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
IN UFS_PASS_THRU_PRIVATE_DATA *Private\r
)\r
{\r
- UINT32 Data;\r
UINT8 Nutrs;\r
VOID *CmdDescHost;\r
EFI_PHYSICAL_ADDRESS CmdDescPhyAddr;\r
CmdDescMapping = NULL;\r
CmdDescPhyAddr = 0;\r
\r
- Status = UfsMmioRead32 (Private, UFS_HC_CAP_OFFSET, &Data);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- Private->Capabilities = Data;\r
-\r
//\r
// Allocate and initialize UTP Transfer Request List.\r
//\r
- Nutrs = (UINT8)((Private->Capabilities & UFS_HC_CAP_NUTRS) + 1);\r
+ Nutrs = (UINT8)((Private->UfsHcInfo.Capabilities & UFS_HC_CAP_NUTRS) + 1);\r
Status = UfsAllocateAlignCommonBuffer (Private, Nutrs * sizeof (UTP_TRD), &CmdDescHost, &CmdDescPhyAddr, &CmdDescMapping);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
}\r
\r
+/**\r
+ Initializes UfsHcInfo field in private data.\r
+\r
+ @param[in] Private Pointer to host controller private data.\r
+\r
+ @retval EFI_SUCCESS UfsHcInfo initialized successfully.\r
+ @retval Others Failed to initalize UfsHcInfo.\r
+**/\r
+EFI_STATUS\r
+GetUfsHcInfo (\r
+ IN UFS_PASS_THRU_PRIVATE_DATA *Private\r
+ )\r
+{\r
+ UINT32 Data;\r
+ EFI_STATUS Status;\r
+\r
+ Status = UfsMmioRead32 (Private, UFS_HC_VER_OFFSET, &Data);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ Private->UfsHcInfo.Version = Data;\r
+\r
+ Status = UfsMmioRead32 (Private, UFS_HC_CAP_OFFSET, &Data);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ Private->UfsHcInfo.Capabilities = Data;\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r