MdeModulePkg/PciBus: Revert "disable all BME when entering RT"

This reverts commit 050763db07.
  "MdeModulePkg/PciBus: Disable BME of all devices when entering RT"

We met some compatibility issues when doing Windows S4 resume.
Reverting the BME disabling patches to fix the S4 resume issue.

Signed-off-by: Ruiyu Ni <Ruiyu.ni@intel.com>
Signed-off-by: Michael Turner <michael.turner@microsoft.com>
Cc: Michael D Kinney <Michael.d.kinney@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
This commit is contained in:
Ruiyu Ni 2017-11-20 11:01:43 +08:00
parent a0a03415d6
commit 8315563285
3 changed files with 0 additions and 91 deletions

View File

@ -18,8 +18,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include <PiDxe.h>
#include <Guid/EventGroup.h>
#include <Protocol/LoadedImage.h>
#include <Protocol/PciHostBridgeResourceAllocation.h>
#include <Protocol/PciIo.h>

View File

@ -80,9 +80,6 @@
DebugLib
PeCoffLib
[Guids]
gEfiEventExitBootServicesGuid ## SOMETIMES_CONSUMES ## Event
[Protocols]
gEfiPciHotPlugRequestProtocolGuid ## SOMETIMES_PRODUCES
gEfiPciIoProtocolGuid ## BY_START

View File

@ -20,72 +20,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
LIST_ENTRY mPciDevicePool;
/**
Disable Bus Master Enable bit in all devices in the list.
@param Devices A device list.
**/
VOID
DisableBmeOnTree (
IN LIST_ENTRY *Devices
)
{
LIST_ENTRY *Link;
PCI_IO_DEVICE *PciIoDevice;
UINT16 Command;
for ( Link = GetFirstNode (Devices)
; !IsNull (Devices, Link)
; Link = GetNextNode (Devices, Link)
) {
PciIoDevice = PCI_IO_DEVICE_FROM_LINK (Link);
//
// Turn off all children's Bus Master, if any
//
DisableBmeOnTree (&PciIoDevice->ChildList);
//
// If this is a device that supports BME, disable BME on this device.
//
if ((PciIoDevice->Supports & EFI_PCI_IO_ATTRIBUTE_BUS_MASTER) != 0) {
PCI_READ_COMMAND_REGISTER(PciIoDevice, &Command);
if ((Command & EFI_PCI_COMMAND_BUS_MASTER) != 0) {
Command &= ~EFI_PCI_COMMAND_BUS_MASTER;
PCI_SET_COMMAND_REGISTER (PciIoDevice, Command);
DEBUG ((
DEBUG_INFO," %02x %02x %02x %04x\n",
PciIoDevice->BusNumber, PciIoDevice->DeviceNumber, PciIoDevice->FunctionNumber,
Command
));
}
}
}
}
/**
Exit Boot Services Event notification handler.
Disable Bus Master on any that were enabled during BDS.
@param[in] Event Event whose notification function is being invoked.
@param[in] Context Pointer to the notification function's context.
**/
VOID
EFIAPI
OnExitBootServices (
IN EFI_EVENT Event,
IN VOID *Context
)
{
DEBUG ((
DEBUG_INFO,
"PciBus: Disable Bus Master of all devices...\n"
" Bus# Device# Function# NewCommand\n"
));
DisableBmeOnTree(&mPciDevicePool);
}
/**
Initialize the PCI devices pool.
@ -95,27 +29,7 @@ InitializePciDevicePool (
VOID
)
{
EFI_EVENT ExitBootServicesEvent;
EFI_STATUS Status;
InitializeListHead (&mPciDevicePool);
//
// DisableBME on ExitBootServices should be synchonized with any IOMMU ExitBootServices routine.
// DisableBME should be run before the IOMMU protections are disabled.
// One way to do this is to ensure that the IOMMU ExitBootServices callback runs at TPL_CALLBACK.
//
Status = gBS->CreateEventEx (
EVT_NOTIFY_SIGNAL,
TPL_NOTIFY,
OnExitBootServices,
NULL,
&gEfiEventExitBootServicesGuid,
&ExitBootServicesEvent
);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "PciBus: Unable to hook ExitBootServices event - %r\n", Status));
}
}
/**