mirror of
https://github.com/torvalds/linux.git
synced 2024-12-25 20:32:22 +00:00
[PATCH] pciehp: handle sticky power-fault status
This patch disables power fault, MRL sensor and presence detection interrupts when a PCIe slot is powered-off and enables those interrupts when it is powered-on again. This is necessary to prevent the associated events from causing an endless cycle of interrupts due to the power-fault bit, which stays set till power is restored to the slot. Signed-off-by: Thomas Schaefer <thomas.schaefer@kontron.com> Signed-off-by: Rajesh Shah <rajesh.shah@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
9d265124d0
commit
c7ab337f91
@ -787,8 +787,13 @@ static int hpc_power_on_slot(struct slot * slot)
|
|||||||
|
|
||||||
slot_cmd = (slot_ctrl & ~PWR_CTRL) | POWER_ON;
|
slot_cmd = (slot_ctrl & ~PWR_CTRL) | POWER_ON;
|
||||||
|
|
||||||
|
/* Enable detection that we turned off at slot power-off time */
|
||||||
if (!pciehp_poll_mode)
|
if (!pciehp_poll_mode)
|
||||||
slot_cmd = slot_cmd | HP_INTR_ENABLE;
|
slot_cmd = slot_cmd |
|
||||||
|
PWR_FAULT_DETECT_ENABLE |
|
||||||
|
MRL_DETECT_ENABLE |
|
||||||
|
PRSN_DETECT_ENABLE |
|
||||||
|
HP_INTR_ENABLE;
|
||||||
|
|
||||||
retval = pcie_write_cmd(slot, slot_cmd);
|
retval = pcie_write_cmd(slot, slot_cmd);
|
||||||
|
|
||||||
@ -833,8 +838,18 @@ static int hpc_power_off_slot(struct slot * slot)
|
|||||||
|
|
||||||
slot_cmd = (slot_ctrl & ~PWR_CTRL) | POWER_OFF;
|
slot_cmd = (slot_ctrl & ~PWR_CTRL) | POWER_OFF;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we get MRL or presence detect interrupts now, the isr
|
||||||
|
* will notice the sticky power-fault bit too and issue power
|
||||||
|
* indicator change commands. This will lead to an endless loop
|
||||||
|
* of command completions, since the power-fault bit remains on
|
||||||
|
* till the slot is powered on again.
|
||||||
|
*/
|
||||||
if (!pciehp_poll_mode)
|
if (!pciehp_poll_mode)
|
||||||
slot_cmd = slot_cmd | HP_INTR_ENABLE;
|
slot_cmd = (slot_cmd &
|
||||||
|
~PWR_FAULT_DETECT_ENABLE &
|
||||||
|
~MRL_DETECT_ENABLE &
|
||||||
|
~PRSN_DETECT_ENABLE) | HP_INTR_ENABLE;
|
||||||
|
|
||||||
retval = pcie_write_cmd(slot, slot_cmd);
|
retval = pcie_write_cmd(slot, slot_cmd);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user