The original code has a bug to calculate which clock freq should be
used when the target clock freq is larger than the BaseClock Freq
provided by the system.

Cc: Wu, Hao A <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Feng Tian <[email protected]>
---
 MdeModulePkg/Bus/Pci/SdMmcPciHcDxe/SdMmcPciHci.c | 7 ++++++-
 MdeModulePkg/Bus/Sd/EmmcBlockIoPei/EmmcHci.c     | 8 +++++++-
 MdeModulePkg/Bus/Sd/SdBlockIoPei/SdHci.c         | 8 +++++++-
 3 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/MdeModulePkg/Bus/Pci/SdMmcPciHcDxe/SdMmcPciHci.c 
b/MdeModulePkg/Bus/Pci/SdMmcPciHcDxe/SdMmcPciHci.c
index baa12f4..72af1e7 100644
--- a/MdeModulePkg/Bus/Pci/SdMmcPciHcDxe/SdMmcPciHci.c
+++ b/MdeModulePkg/Bus/Pci/SdMmcPciHcDxe/SdMmcPciHci.c
@@ -706,9 +706,14 @@ SdMmcHcClockSupply (
   ASSERT (Capability.BaseClkFreq != 0);
 
   BaseClkFreq = Capability.BaseClkFreq;
-  if ((ClockFreq > (BaseClkFreq * 1000)) || (ClockFreq == 0)) {
+  if (ClockFreq == 0) {
     return EFI_INVALID_PARAMETER;
   }
+
+  if (ClockFreq > (BaseClkFreq * 1000)) {
+    ClockFreq = BaseClkFreq * 1000;
+  }
+
   //
   // Calculate the divisor of base frequency.
   //
diff --git a/MdeModulePkg/Bus/Sd/EmmcBlockIoPei/EmmcHci.c 
b/MdeModulePkg/Bus/Sd/EmmcBlockIoPei/EmmcHci.c
index 050d843..569a86a 100644
--- a/MdeModulePkg/Bus/Sd/EmmcBlockIoPei/EmmcHci.c
+++ b/MdeModulePkg/Bus/Sd/EmmcBlockIoPei/EmmcHci.c
@@ -535,9 +535,15 @@ EmmcPeimHcClockSupply (
   ASSERT (Capability.BaseClkFreq != 0);
 
   BaseClkFreq = Capability.BaseClkFreq;
-  if ((ClockFreq > (BaseClkFreq * 1000)) || (ClockFreq == 0)) {
+
+  if (ClockFreq == 0) {
     return EFI_INVALID_PARAMETER;
   }
+
+  if (ClockFreq > (BaseClkFreq * 1000)) {
+    ClockFreq = BaseClkFreq * 1000;
+  }
+
   //
   // Calculate the divisor of base frequency.
   //
diff --git a/MdeModulePkg/Bus/Sd/SdBlockIoPei/SdHci.c 
b/MdeModulePkg/Bus/Sd/SdBlockIoPei/SdHci.c
index cbee947..48e4ae6 100644
--- a/MdeModulePkg/Bus/Sd/SdBlockIoPei/SdHci.c
+++ b/MdeModulePkg/Bus/Sd/SdBlockIoPei/SdHci.c
@@ -535,9 +535,15 @@ SdPeimHcClockSupply (
   ASSERT (Capability.BaseClkFreq != 0);
 
   BaseClkFreq = Capability.BaseClkFreq;
-  if ((ClockFreq > (BaseClkFreq * 1000)) || (ClockFreq == 0)) {
+
+  if (ClockFreq == 0) {
     return EFI_INVALID_PARAMETER;
   }
+
+  if (ClockFreq > (BaseClkFreq * 1000)) {
+    ClockFreq = BaseClkFreq * 1000;
+  }
+
   //
   // Calculate the divisor of base frequency.
   //
-- 
2.7.1.windows.2

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to