mirror of
https://github.com/acidanthera/audk.git
synced 2025-04-08 17:05:09 +02:00
MdeModulePkg/SdMmcPciHcDxe: Use 16/32-bit IO widths
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1537 Use 16-bit and 32-bit IO widths for SDMMC MMIO to prevent all register accesses from being split up into 8-bit accesses. The SDHCI specification states that the registers shall be accessible in byte, word, and double word accesses. (SD Host Controller Simplified Specification 4.20 Section 1.2) Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Jeff Brasen <jbrasen@nvidia.com> Reviewed-by: Hao Wu <hao.a.wu@intel.com>
This commit is contained in:
parent
195f673f62
commit
f168816c49
@ -154,19 +154,36 @@ SdMmcHcRwMmio (
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_PCI_IO_PROTOCOL_WIDTH Width;
|
||||
|
||||
if ((PciIo == NULL) || (Data == NULL)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if ((Count != 1) && (Count != 2) && (Count != 4) && (Count != 8)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
switch (Count) {
|
||||
case 1:
|
||||
Width = EfiPciIoWidthUint8;
|
||||
break;
|
||||
case 2:
|
||||
Width = EfiPciIoWidthUint16;
|
||||
Count = 1;
|
||||
break;
|
||||
case 4:
|
||||
Width = EfiPciIoWidthUint32;
|
||||
Count = 1;
|
||||
break;
|
||||
case 8:
|
||||
Width = EfiPciIoWidthUint32;
|
||||
Count = 2;
|
||||
break;
|
||||
default:
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if (Read) {
|
||||
Status = PciIo->Mem.Read (
|
||||
PciIo,
|
||||
EfiPciIoWidthUint8,
|
||||
Width,
|
||||
BarIndex,
|
||||
(UINT64) Offset,
|
||||
Count,
|
||||
@ -175,7 +192,7 @@ SdMmcHcRwMmio (
|
||||
} else {
|
||||
Status = PciIo->Mem.Write (
|
||||
PciIo,
|
||||
EfiPciIoWidthUint8,
|
||||
Width,
|
||||
BarIndex,
|
||||
(UINT64) Offset,
|
||||
Count,
|
||||
|
Loading…
x
Reference in New Issue
Block a user