mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-28 16:14:04 +02:00
MdeModulePkg/UfsPassThruDxe: Refactor private data to use UfsHcInfo
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>
This commit is contained in:
parent
90952ad733
commit
a71272ed7a
@ -1,6 +1,6 @@
|
|||||||
/** @file
|
/** @file
|
||||||
|
|
||||||
Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2014 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
**/
|
**/
|
||||||
@ -35,7 +35,7 @@ UFS_PASS_THRU_PRIVATE_DATA gUfsPassThruTemplate = {
|
|||||||
},
|
},
|
||||||
0, // UfsHostController
|
0, // UfsHostController
|
||||||
0, // UfsHcBase
|
0, // UfsHcBase
|
||||||
0, // Capabilities
|
{0, 0}, // UfsHcInfo
|
||||||
0, // TaskTag
|
0, // TaskTag
|
||||||
0, // UtpTrlBase
|
0, // UtpTrlBase
|
||||||
0, // Nutrs
|
0, // Nutrs
|
||||||
@ -865,6 +865,11 @@ UfsPassThruDriverBindingStart (
|
|||||||
Private->UfsHostController = UfsHc;
|
Private->UfsHostController = UfsHc;
|
||||||
Private->UfsHcBase = UfsHcBase;
|
Private->UfsHcBase = UfsHcBase;
|
||||||
InitializeListHead (&Private->Queue);
|
InitializeListHead (&Private->Queue);
|
||||||
|
Status = GetUfsHcInfo (Private);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
DEBUG ((DEBUG_ERROR, "Failed to initialize UfsHcInfo\n"));
|
||||||
|
goto Error;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Initialize UFS Host Controller H/W.
|
// Initialize UFS Host Controller H/W.
|
||||||
|
@ -62,7 +62,7 @@ typedef struct _UFS_PASS_THRU_PRIVATE_DATA {
|
|||||||
EFI_UFS_DEVICE_CONFIG_PROTOCOL UfsDevConfig;
|
EFI_UFS_DEVICE_CONFIG_PROTOCOL UfsDevConfig;
|
||||||
EDKII_UFS_HOST_CONTROLLER_PROTOCOL *UfsHostController;
|
EDKII_UFS_HOST_CONTROLLER_PROTOCOL *UfsHostController;
|
||||||
UINTN UfsHcBase;
|
UINTN UfsHcBase;
|
||||||
UINT32 Capabilities;
|
EDKII_UFS_HC_INFO UfsHcInfo;
|
||||||
|
|
||||||
UINT8 TaskTag;
|
UINT8 TaskTag;
|
||||||
|
|
||||||
@ -959,6 +959,19 @@ UfsRwUfsAttribute (
|
|||||||
IN OUT UINT32 *AttrSize
|
IN OUT UINT32 *AttrSize
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Initializes UfsHcInfo field in private data.
|
||||||
|
|
||||||
|
@param[in] Private Pointer to host controller private data.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS UfsHcInfo initialized successfully.
|
||||||
|
@retval Others Failed to initalize UfsHcInfo.
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
GetUfsHcInfo (
|
||||||
|
IN UFS_PASS_THRU_PRIVATE_DATA *Private
|
||||||
|
);
|
||||||
|
|
||||||
extern EFI_COMPONENT_NAME_PROTOCOL gUfsPassThruComponentName;
|
extern EFI_COMPONENT_NAME_PROTOCOL gUfsPassThruComponentName;
|
||||||
extern EFI_COMPONENT_NAME2_PROTOCOL gUfsPassThruComponentName2;
|
extern EFI_COMPONENT_NAME2_PROTOCOL gUfsPassThruComponentName2;
|
||||||
extern EFI_DRIVER_BINDING_PROTOCOL gUfsPassThruDriverBinding;
|
extern EFI_DRIVER_BINDING_PROTOCOL gUfsPassThruDriverBinding;
|
||||||
|
@ -731,7 +731,7 @@ UfsFindAvailableSlotInTrl (
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Nutrs = (UINT8)((Private->Capabilities & UFS_HC_CAP_NUTRS) + 1);
|
Nutrs = (UINT8)((Private->UfsHcInfo.Capabilities & UFS_HC_CAP_NUTRS) + 1);
|
||||||
|
|
||||||
for (Index = 0; Index < Nutrs; Index++) {
|
for (Index = 0; Index < Nutrs; Index++) {
|
||||||
if ((Data & (BIT0 << Index)) == 0) {
|
if ((Data & (BIT0 << Index)) == 0) {
|
||||||
@ -1754,7 +1754,7 @@ UfsAllocateAlignCommonBuffer (
|
|||||||
BOOLEAN Is32BitAddr;
|
BOOLEAN Is32BitAddr;
|
||||||
EDKII_UFS_HOST_CONTROLLER_PROTOCOL *UfsHc;
|
EDKII_UFS_HOST_CONTROLLER_PROTOCOL *UfsHc;
|
||||||
|
|
||||||
if ((Private->Capabilities & UFS_HC_CAP_64ADDR) == UFS_HC_CAP_64ADDR) {
|
if ((Private->UfsHcInfo.Capabilities & UFS_HC_CAP_64ADDR) == UFS_HC_CAP_64ADDR) {
|
||||||
Is32BitAddr = FALSE;
|
Is32BitAddr = FALSE;
|
||||||
} else {
|
} else {
|
||||||
Is32BitAddr = TRUE;
|
Is32BitAddr = TRUE;
|
||||||
@ -1947,7 +1947,6 @@ UfsInitTaskManagementRequestList (
|
|||||||
IN UFS_PASS_THRU_PRIVATE_DATA *Private
|
IN UFS_PASS_THRU_PRIVATE_DATA *Private
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Data;
|
|
||||||
UINT8 Nutmrs;
|
UINT8 Nutmrs;
|
||||||
VOID *CmdDescHost;
|
VOID *CmdDescHost;
|
||||||
EFI_PHYSICAL_ADDRESS CmdDescPhyAddr;
|
EFI_PHYSICAL_ADDRESS CmdDescPhyAddr;
|
||||||
@ -1961,17 +1960,10 @@ UfsInitTaskManagementRequestList (
|
|||||||
CmdDescMapping = NULL;
|
CmdDescMapping = NULL;
|
||||||
CmdDescPhyAddr = 0;
|
CmdDescPhyAddr = 0;
|
||||||
|
|
||||||
Status = UfsMmioRead32 (Private, UFS_HC_CAP_OFFSET, &Data);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
Private->Capabilities = Data;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Allocate and initialize UTP Task Management Request List.
|
// Allocate and initialize UTP Task Management Request List.
|
||||||
//
|
//
|
||||||
Nutmrs = (UINT8) (RShiftU64 ((Private->Capabilities & UFS_HC_CAP_NUTMRS), 16) + 1);
|
Nutmrs = (UINT8) (RShiftU64 ((Private->UfsHcInfo.Capabilities & UFS_HC_CAP_NUTMRS), 16) + 1);
|
||||||
Status = UfsAllocateAlignCommonBuffer (Private, Nutmrs * sizeof (UTP_TMRD), &CmdDescHost, &CmdDescPhyAddr, &CmdDescMapping);
|
Status = UfsAllocateAlignCommonBuffer (Private, Nutmrs * sizeof (UTP_TMRD), &CmdDescHost, &CmdDescPhyAddr, &CmdDescMapping);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return Status;
|
return Status;
|
||||||
@ -2020,7 +2012,6 @@ UfsInitTransferRequestList (
|
|||||||
IN UFS_PASS_THRU_PRIVATE_DATA *Private
|
IN UFS_PASS_THRU_PRIVATE_DATA *Private
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Data;
|
|
||||||
UINT8 Nutrs;
|
UINT8 Nutrs;
|
||||||
VOID *CmdDescHost;
|
VOID *CmdDescHost;
|
||||||
EFI_PHYSICAL_ADDRESS CmdDescPhyAddr;
|
EFI_PHYSICAL_ADDRESS CmdDescPhyAddr;
|
||||||
@ -2034,17 +2025,10 @@ UfsInitTransferRequestList (
|
|||||||
CmdDescMapping = NULL;
|
CmdDescMapping = NULL;
|
||||||
CmdDescPhyAddr = 0;
|
CmdDescPhyAddr = 0;
|
||||||
|
|
||||||
Status = UfsMmioRead32 (Private, UFS_HC_CAP_OFFSET, &Data);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
Private->Capabilities = Data;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Allocate and initialize UTP Transfer Request List.
|
// Allocate and initialize UTP Transfer Request List.
|
||||||
//
|
//
|
||||||
Nutrs = (UINT8)((Private->Capabilities & UFS_HC_CAP_NUTRS) + 1);
|
Nutrs = (UINT8)((Private->UfsHcInfo.Capabilities & UFS_HC_CAP_NUTRS) + 1);
|
||||||
Status = UfsAllocateAlignCommonBuffer (Private, Nutrs * sizeof (UTP_TRD), &CmdDescHost, &CmdDescPhyAddr, &CmdDescMapping);
|
Status = UfsAllocateAlignCommonBuffer (Private, Nutrs * sizeof (UTP_TRD), &CmdDescHost, &CmdDescPhyAddr, &CmdDescMapping);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return Status;
|
return Status;
|
||||||
@ -2366,3 +2350,36 @@ ProcessAsyncTaskList (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Initializes UfsHcInfo field in private data.
|
||||||
|
|
||||||
|
@param[in] Private Pointer to host controller private data.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS UfsHcInfo initialized successfully.
|
||||||
|
@retval Others Failed to initalize UfsHcInfo.
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
GetUfsHcInfo (
|
||||||
|
IN UFS_PASS_THRU_PRIVATE_DATA *Private
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT32 Data;
|
||||||
|
EFI_STATUS Status;
|
||||||
|
|
||||||
|
Status = UfsMmioRead32 (Private, UFS_HC_VER_OFFSET, &Data);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
Private->UfsHcInfo.Version = Data;
|
||||||
|
|
||||||
|
Status = UfsMmioRead32 (Private, UFS_HC_CAP_OFFSET, &Data);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
Private->UfsHcInfo.Capabilities = Data;
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user