mirror of
https://github.com/acidanthera/audk.git
synced 2025-04-07 19:45:07 +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
MdeModulePkg/Bus/Ufs/UfsPassThruDxe
@ -1,6 +1,6 @@
|
||||
/** @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
|
||||
|
||||
**/
|
||||
@ -35,7 +35,7 @@ UFS_PASS_THRU_PRIVATE_DATA gUfsPassThruTemplate = {
|
||||
},
|
||||
0, // UfsHostController
|
||||
0, // UfsHcBase
|
||||
0, // Capabilities
|
||||
{0, 0}, // UfsHcInfo
|
||||
0, // TaskTag
|
||||
0, // UtpTrlBase
|
||||
0, // Nutrs
|
||||
@ -865,6 +865,11 @@ UfsPassThruDriverBindingStart (
|
||||
Private->UfsHostController = UfsHc;
|
||||
Private->UfsHcBase = UfsHcBase;
|
||||
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.
|
||||
|
@ -62,7 +62,7 @@ typedef struct _UFS_PASS_THRU_PRIVATE_DATA {
|
||||
EFI_UFS_DEVICE_CONFIG_PROTOCOL UfsDevConfig;
|
||||
EDKII_UFS_HOST_CONTROLLER_PROTOCOL *UfsHostController;
|
||||
UINTN UfsHcBase;
|
||||
UINT32 Capabilities;
|
||||
EDKII_UFS_HC_INFO UfsHcInfo;
|
||||
|
||||
UINT8 TaskTag;
|
||||
|
||||
@ -959,6 +959,19 @@ UfsRwUfsAttribute (
|
||||
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_NAME2_PROTOCOL gUfsPassThruComponentName2;
|
||||
extern EFI_DRIVER_BINDING_PROTOCOL gUfsPassThruDriverBinding;
|
||||
|
@ -731,7 +731,7 @@ UfsFindAvailableSlotInTrl (
|
||||
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++) {
|
||||
if ((Data & (BIT0 << Index)) == 0) {
|
||||
@ -1754,7 +1754,7 @@ UfsAllocateAlignCommonBuffer (
|
||||
BOOLEAN Is32BitAddr;
|
||||
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;
|
||||
} else {
|
||||
Is32BitAddr = TRUE;
|
||||
@ -1947,7 +1947,6 @@ UfsInitTaskManagementRequestList (
|
||||
IN UFS_PASS_THRU_PRIVATE_DATA *Private
|
||||
)
|
||||
{
|
||||
UINT32 Data;
|
||||
UINT8 Nutmrs;
|
||||
VOID *CmdDescHost;
|
||||
EFI_PHYSICAL_ADDRESS CmdDescPhyAddr;
|
||||
@ -1961,17 +1960,10 @@ UfsInitTaskManagementRequestList (
|
||||
CmdDescMapping = NULL;
|
||||
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.
|
||||
//
|
||||
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);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
@ -2020,7 +2012,6 @@ UfsInitTransferRequestList (
|
||||
IN UFS_PASS_THRU_PRIVATE_DATA *Private
|
||||
)
|
||||
{
|
||||
UINT32 Data;
|
||||
UINT8 Nutrs;
|
||||
VOID *CmdDescHost;
|
||||
EFI_PHYSICAL_ADDRESS CmdDescPhyAddr;
|
||||
@ -2034,17 +2025,10 @@ UfsInitTransferRequestList (
|
||||
CmdDescMapping = NULL;
|
||||
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.
|
||||
//
|
||||
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);
|
||||
if (EFI_ERROR (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