MdeModulePkg/SdMmcPciHcDxe: Allow overriding base clock frequency
Some SdMmc host controllers are run by clocks with different frequency than it is reflected in Capabilities Register 1. It is allowed by SDHCI specification ver. 4.2 - if BaseClkFreq field value of the Capability Register 1 is zero, the clock frequency must be obtained via another method. Because the bitfield is only 8 bits wide, a maximum value that could be obtained from hardware is 255MHz. In case the actual frequency exceeds 255MHz, the 8-bit BaseClkFreq member of SD_MMC_HC_SLOT_CAP structure occurs to be not sufficient to be used for setting the clock speed in SdMmcHcClockSupply function. This patch adds new UINT32 array ('BaseClkFreq[]') to SD_MMC_HC_PRIVATE_DATA structure for specifying the input clock speed for each slot of the host controller. All routines that are used for clock configuration are updated accordingly. This patch also adds new IN OUT BaseClockFreq field in the Capability callback of the SdMmcOverride, protocol which allows to update BaseClkFreq value. The patch reuses original commit from edk2-platforms: 20f6f144d3a8 ("Marvell/Drivers: XenonDxe: Allow overriding base clock frequency") Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Marcin Wojtas <mw@semihalf.com> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Hao Wu <hao.a.wu@intel.com>
This commit is contained in:
@@ -423,7 +423,7 @@ SdMmcHcStopClock (
|
||||
@param[in] PciIo The PCI IO protocol instance.
|
||||
@param[in] Slot The slot number of the SD card to send the command to.
|
||||
@param[in] ClockFreq The max clock frequency to be set. The unit is KHz.
|
||||
@param[in] Capability The capability of the slot.
|
||||
@param[in] BaseClkFreq The base clock frequency of host controller in MHz.
|
||||
|
||||
@retval EFI_SUCCESS The clock is supplied successfully.
|
||||
@retval Others The clock isn't supplied successfully.
|
||||
@@ -434,7 +434,7 @@ SdMmcHcClockSupply (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot,
|
||||
IN UINT64 ClockFreq,
|
||||
IN SD_MMC_HC_SLOT_CAP Capability
|
||||
IN UINT32 BaseClkFreq
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -482,7 +482,7 @@ SdMmcHcSetBusWidth (
|
||||
|
||||
@param[in] PciIo The PCI IO protocol instance.
|
||||
@param[in] Slot The slot number of the SD card to send the command to.
|
||||
@param[in] Capability The capability of the slot.
|
||||
@param[in] BaseClkFreq The base clock frequency of host controller in MHz.
|
||||
|
||||
@retval EFI_SUCCESS The clock is supplied successfully.
|
||||
@retval Others The clock isn't supplied successfully.
|
||||
@@ -492,7 +492,7 @@ EFI_STATUS
|
||||
SdMmcHcInitClockFreq (
|
||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||
IN UINT8 Slot,
|
||||
IN SD_MMC_HC_SLOT_CAP Capability
|
||||
IN UINT32 BaseClkFreq
|
||||
);
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user