mirror of
https://github.com/tianocore/edk2
synced 2026-08-27 00:23:19 -04:00
Sync patch r13189 from mail trunk.
Update ResetPowerManagementFeature() to clear 4 related R/W bits in the PMCSR register, leaving other bits preserved. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/branches/UDK2010.SR1@13281 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
f0a2e3492d
commit
3d897fde2b
2 changed files with 62 additions and 23 deletions
|
|
@ -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
|
||||
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
|
||||
|
|
@ -46,7 +46,7 @@ Returns:
|
|||
{
|
||||
EFI_STATUS Status;
|
||||
UINT8 PowerManagementRegBlock;
|
||||
UINT16 PMCSR;
|
||||
UINT16 PowerManagementCSR;
|
||||
|
||||
PowerManagementRegBlock = 0;
|
||||
|
||||
|
|
@ -64,18 +64,37 @@ Returns:
|
|||
//
|
||||
// Turn off the PWE assertion and put the device into D0 State
|
||||
//
|
||||
PMCSR = 0x8000;
|
||||
|
||||
//
|
||||
// Write PMCSR
|
||||
// Read PMCSR
|
||||
//
|
||||
PciIoDevice->PciIo.Pci.Write (
|
||||
&PciIoDevice->PciIo,
|
||||
EfiPciIoWidthUint16,
|
||||
PowerManagementRegBlock + 4,
|
||||
1,
|
||||
&PMCSR
|
||||
);
|
||||
Status = PciIoDevice->PciIo.Pci.Read (
|
||||
&PciIoDevice->PciIo,
|
||||
EfiPciIoWidthUint16,
|
||||
PowerManagementRegBlock + 4,
|
||||
1,
|
||||
&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
|
||||
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
|
||||
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
|
||||
|
|
@ -50,19 +50,39 @@ ResetPowerManagementFeature (
|
|||
//
|
||||
// Turn off the PWE assertion and put the device into D0 State
|
||||
//
|
||||
PowerManagementCSR = 0x8000;
|
||||
|
||||
//
|
||||
// Write PMCSR
|
||||
// Read PMCSR
|
||||
//
|
||||
PciIoDevice->PciIo.Pci.Write (
|
||||
&PciIoDevice->PciIo,
|
||||
EfiPciIoWidthUint16,
|
||||
PowerManagementRegBlock + 4,
|
||||
1,
|
||||
&PowerManagementCSR
|
||||
);
|
||||
Status = PciIoDevice->PciIo.Pci.Read (
|
||||
&PciIoDevice->PciIo,
|
||||
EfiPciIoWidthUint16,
|
||||
PowerManagementRegBlock + 4,
|
||||
1,
|
||||
&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…
Add table
Add a link
Reference in a new issue