X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdeModulePkg%2FBus%2FPci%2FSdMmcPciHcDxe%2FSdDevice.c;h=b4e2c5843053ae1ab7c9a435f2ccbfc995675519;hp=b2a08572fec51f13ff5d58eddaccb0d46a826b73;hb=8c983d3e06da799e623a9f46fcaa207455482091;hpb=e7e89b0861fa561c2c13eee3271655c100b3abb9 diff --git a/MdeModulePkg/Bus/Pci/SdMmcPciHcDxe/SdDevice.c b/MdeModulePkg/Bus/Pci/SdMmcPciHcDxe/SdDevice.c index b2a08572fe..b4e2c58430 100644 --- a/MdeModulePkg/Bus/Pci/SdMmcPciHcDxe/SdDevice.c +++ b/MdeModulePkg/Bus/Pci/SdMmcPciHcDxe/SdDevice.c @@ -787,17 +787,24 @@ SdCardTuningClock ( return Status; } - if ((HostCtrl2 & (BIT6 | BIT7)) == BIT7) { + if ((HostCtrl2 & (BIT6 | BIT7)) == 0) { break; } + if ((HostCtrl2 & (BIT6 | BIT7)) == BIT7) { + return EFI_SUCCESS; + } } while (++Retry < 40); - if (Retry == 40) { - Status = EFI_TIMEOUT; - DEBUG ((EFI_D_ERROR, "SdCardTuningClock: Send tuning block exceeds 40 times\n")); + DEBUG ((EFI_D_ERROR, "SdCardTuningClock: Send tuning block fails at %d times with HostCtrl2 %02x\n", Retry, HostCtrl2)); + // + // Abort the tuning procedure and reset the tuning circuit. + // + HostCtrl2 = (UINT8)~(BIT6 | BIT7); + Status = SdMmcHcAndMmio (PciIo, Slot, SD_MMC_HC_HOST_CTRL2, sizeof (HostCtrl2), &HostCtrl2); + if (EFI_ERROR (Status)) { + return Status; } - - return Status; + return EFI_DEVICE_ERROR; } /**