aboutsummaryrefslogtreecommitdiff
path: root/platforms
diff options
context:
space:
mode:
authorGavin Shan <gwshan@linux.vnet.ibm.com>2016-10-14 15:26:05 +1100
committerStewart Smith <stewart@linux.vnet.ibm.com>2016-10-17 10:33:56 +1100
commit51931bad325e3feba934eaf95b422deeb24cf4e5 (patch)
tree984642f7ee72a5146c187fbbd24f7432e0a05299 /platforms
parent481ad7330e332770b1dcd2c9f56d0a2caac67755 (diff)
downloadskiboot-51931bad325e3feba934eaf95b422deeb24cf4e5.zip
skiboot-51931bad325e3feba934eaf95b422deeb24cf4e5.tar.gz
skiboot-51931bad325e3feba934eaf95b422deeb24cf4e5.tar.bz2
core/pci: Claim surprise hotplug capability
This claims PCIe surprise hotplug capability through device node's property "ibm,slot-surprise-pluggable". The slot has the capability when surprise hotplug is supported in its slot's capability bits or link state change reporting is supported in PCIe link capability bits. In order for link state events to be properly raised during surprise hotplug, the power supply to the slot should be always on. The slot's power state should be switched accordingly during fundamental reset. Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'platforms')
-rw-r--r--platforms/ibm-fsp/firenze-pci.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/platforms/ibm-fsp/firenze-pci.c b/platforms/ibm-fsp/firenze-pci.c
index 1d83409..2b8c0c6 100644
--- a/platforms/ibm-fsp/firenze-pci.c
+++ b/platforms/ibm-fsp/firenze-pci.c
@@ -653,6 +653,16 @@ static int64_t firenze_pci_slot_set_power_state(struct pci_slot *slot,
if (slot->power_state == val)
return OPAL_SUCCESS;
+ /* Update with the requested power state and bail immediately when
+ * surprise hotplug is supported on the slot. It keeps the power
+ * supply to the slot on and it guarentees the link state change
+ * events will be raised properly during surprise hot add/remove.
+ */
+ if (slot->surprise_pluggable) {
+ slot->power_state = val;
+ return OPAL_SUCCESS;
+ }
+
slot->power_state = val;
pci_slot_set_state(slot, FIRENZE_PCI_SLOT_SPOWER_START);