mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-29 16:44:10 +02:00
MdeModulePkg PciBusDxe and DuetPkg PciBusNoEnumerationDxe: Update ResetPowerManagementFeature() to clear 4 related R/W bits in the PMCSR register, leaving other bits preserved.
Signed-off-by: Sun Rui <rui.sun@intel.com> Reviewed-by: Fan Jeff <jeff.fan@intel.com> Reviewed-by: Michael Kinney <michael.d.kinney@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13189 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
afa9cd2541
commit
7e242786b7
@ -1,6 +1,6 @@
|
|||||||
/*++
|
/*++
|
||||||
|
|
||||||
Copyright (c) 2005 - 2006, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2005 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -46,7 +46,7 @@ Returns:
|
|||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINT8 PowerManagementRegBlock;
|
UINT8 PowerManagementRegBlock;
|
||||||
UINT16 PMCSR;
|
UINT16 PowerManagementCSR;
|
||||||
|
|
||||||
PowerManagementRegBlock = 0;
|
PowerManagementRegBlock = 0;
|
||||||
|
|
||||||
@ -64,18 +64,37 @@ Returns:
|
|||||||
//
|
//
|
||||||
// Turn off the PWE assertion and put the device into D0 State
|
// Turn off the PWE assertion and put the device into D0 State
|
||||||
//
|
//
|
||||||
PMCSR = 0x8000;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Write PMCSR
|
// Read PMCSR
|
||||||
//
|
//
|
||||||
PciIoDevice->PciIo.Pci.Write (
|
Status = PciIoDevice->PciIo.Pci.Read (
|
||||||
&PciIoDevice->PciIo,
|
&PciIoDevice->PciIo,
|
||||||
EfiPciIoWidthUint16,
|
EfiPciIoWidthUint16,
|
||||||
PowerManagementRegBlock + 4,
|
PowerManagementRegBlock + 4,
|
||||||
1,
|
1,
|
||||||
&PMCSR
|
&PowerManagementCSR
|
||||||
);
|
);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
|
//
|
||||||
|
// Clear PME_Status bit
|
||||||
|
//
|
||||||
|
PowerManagementCSR |= BIT15;
|
||||||
|
//
|
||||||
|
// Clear PME_En bit. PowerState = D0.
|
||||||
|
//
|
||||||
|
PowerManagementCSR &= ~(BIT8 | BIT1 | BIT0);
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
//
|
||||||
|
// Write PMCSR
|
||||||
|
//
|
||||||
|
Status = PciIoDevice->PciIo.Pci.Write (
|
||||||
|
&PciIoDevice->PciIo,
|
||||||
|
EfiPciIoWidthUint16,
|
||||||
|
PowerManagementRegBlock + 4,
|
||||||
|
1,
|
||||||
|
&PowerManagementCSR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Power management support fucntions implementation for PCI Bus module.
|
Power management support fucntions implementation for PCI Bus module.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -50,19 +50,39 @@ ResetPowerManagementFeature (
|
|||||||
//
|
//
|
||||||
// Turn off the PWE assertion and put the device into D0 State
|
// Turn off the PWE assertion and put the device into D0 State
|
||||||
//
|
//
|
||||||
PowerManagementCSR = 0x8000;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Write PMCSR
|
// Read PMCSR
|
||||||
//
|
//
|
||||||
PciIoDevice->PciIo.Pci.Write (
|
Status = PciIoDevice->PciIo.Pci.Read (
|
||||||
&PciIoDevice->PciIo,
|
&PciIoDevice->PciIo,
|
||||||
EfiPciIoWidthUint16,
|
EfiPciIoWidthUint16,
|
||||||
PowerManagementRegBlock + 4,
|
PowerManagementRegBlock + 4,
|
||||||
1,
|
1,
|
||||||
&PowerManagementCSR
|
&PowerManagementCSR
|
||||||
);
|
);
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
if (!EFI_ERROR (Status)) {
|
||||||
|
//
|
||||||
|
// Clear PME_Status bit
|
||||||
|
//
|
||||||
|
PowerManagementCSR |= BIT15;
|
||||||
|
//
|
||||||
|
// Clear PME_En bit. PowerState = D0.
|
||||||
|
//
|
||||||
|
PowerManagementCSR &= ~(BIT8 | BIT1 | BIT0);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Write PMCSR
|
||||||
|
//
|
||||||
|
Status = PciIoDevice->PciIo.Pci.Write (
|
||||||
|
&PciIoDevice->PciIo,
|
||||||
|
EfiPciIoWidthUint16,
|
||||||
|
PowerManagementRegBlock + 4,
|
||||||
|
1,
|
||||||
|
&PowerManagementCSR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user