From 50cdd5d8be3b91f1c00a80aef2f06187c4bfdb4b Mon Sep 17 00:00:00 2001 From: "michele.rosato" Date: Thu, 7 Mar 2024 14:19:31 +0000 Subject: [PATCH] fix:[Common] Fix HS switch routine for DDR mode Switch to High Speed clock frequency before switching bus width for HS DDR mode Signed-off-by: Michele Rosato --- .../MmcAccessLib/MmcAccessLibGeneric.c | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/BootloaderCommonPkg/Library/MmcAccessLib/MmcAccessLibGeneric.c b/BootloaderCommonPkg/Library/MmcAccessLib/MmcAccessLibGeneric.c index 1b49cfd6..6c079596 100644 --- a/BootloaderCommonPkg/Library/MmcAccessLib/MmcAccessLibGeneric.c +++ b/BootloaderCommonPkg/Library/MmcAccessLib/MmcAccessLibGeneric.c @@ -970,9 +970,27 @@ MmcSwitchToHighSpeed ( UINT8 HostCtrl1; UINT8 HostCtrl2; - Status = MmcSwitchBusWidth (Private, Rca, IsDdr, BusWidth); - if (EFI_ERROR (Status)) { - return Status; + HsTiming = 1; + if (IsDdr) { + Status = MmcSwitchClockFreq (Private, Rca, HsTiming, ClockFreq); + if (EFI_ERROR (Status)) { + return Status; + } + + Status = MmcSwitchBusWidth (Private, Rca, IsDdr, BusWidth); + if (EFI_ERROR (Status)) { + return Status; + } + } else { + Status = MmcSwitchBusWidth (Private, Rca, IsDdr, BusWidth); + if (EFI_ERROR (Status)) { + return Status; + } + + Status = MmcSwitchClockFreq (Private, Rca, HsTiming, ClockFreq); + if (EFI_ERROR (Status)) { + return Status; + } } // @@ -1003,12 +1021,6 @@ MmcSwitchToHighSpeed ( HostCtrl2 = 0; } Status = SdMmcHcOrMmio (Private->SdMmcHcBase, SD_MMC_HC_HOST_CTRL2, sizeof (HostCtrl2), &HostCtrl2); - if (EFI_ERROR (Status)) { - return Status; - } - - HsTiming = 1; - Status = MmcSwitchClockFreq (Private, Rca, HsTiming, ClockFreq); return Status; }