]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/UfsPassThruDxe: Refactor private data to use UfsHcInfo
authorAlbecki, Mateusz <mateusz.albecki@intel.com>
Fri, 9 Aug 2019 14:36:19 +0000 (22:36 +0800)
committerHao A Wu <hao.a.wu@intel.com>
Tue, 13 Aug 2019 02:54:35 +0000 (10:54 +0800)
https://bugzilla.tianocore.org/show_bug.cgi?id=1343

Private data has been refactored to use EDKII_UFS_HC_INFO structure
to store host controller capabilities and version
information. Getting host controller data has been moved
into single place and is done before host controller enable.

Signed-off-by: Mateusz Albecki <mateusz.albecki@intel.com>
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThru.c
MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThru.h
MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThruHci.c

index 1518b251d88a903ded02bf4d7fad1cfb313b2c46..7dce217d49773441fe337d407b6f7b9f7c3a224b 100644 (file)
@@ -1,6 +1,6 @@
 /** @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
@@ -35,7 +35,7 @@ UFS_PASS_THRU_PRIVATE_DATA gUfsPassThruTemplate = {
   },\r
   0,                              // UfsHostController\r
   0,                              // UfsHcBase\r
-  0,                              // Capabilities\r
+  {0, 0},                         // UfsHcInfo\r
   0,                              // TaskTag\r
   0,                              // UtpTrlBase\r
   0,                              // Nutrs\r
@@ -865,6 +865,11 @@ UfsPassThruDriverBindingStart (
   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
index b79be77709b8279d133b2938000cfaded75b1b9a..c511aa8c7a6a09e0d97e5cd14aff5e1982df40a3 100644 (file)
@@ -62,7 +62,7 @@ typedef struct _UFS_PASS_THRU_PRIVATE_DATA {
   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
@@ -959,6 +959,19 @@ UfsRwUfsAttribute (
   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
index 6ea27e473cc72386c23fbeb971bade177ff93b62..74be3efc411b05b28133a0f970be94b64f2ae7dd 100644 (file)
@@ -731,7 +731,7 @@ UfsFindAvailableSlotInTrl (
     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
@@ -1754,7 +1754,7 @@ UfsAllocateAlignCommonBuffer (
   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
@@ -1947,7 +1947,6 @@ UfsInitTaskManagementRequestList (
   IN  UFS_PASS_THRU_PRIVATE_DATA     *Private\r
   )\r
 {\r
-  UINT32                 Data;\r
   UINT8                  Nutmrs;\r
   VOID                   *CmdDescHost;\r
   EFI_PHYSICAL_ADDRESS   CmdDescPhyAddr;\r
@@ -1961,17 +1960,10 @@ UfsInitTaskManagementRequestList (
   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
@@ -2020,7 +2012,6 @@ UfsInitTransferRequestList (
   IN  UFS_PASS_THRU_PRIVATE_DATA     *Private\r
   )\r
 {\r
-  UINT32                 Data;\r
   UINT8                  Nutrs;\r
   VOID                   *CmdDescHost;\r
   EFI_PHYSICAL_ADDRESS   CmdDescPhyAddr;\r
@@ -2034,17 +2025,10 @@ UfsInitTransferRequestList (
   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
@@ -2366,3 +2350,36 @@ ProcessAsyncTaskList (
   }\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