diff options
author | Vaibhav Jain <vaibhav@linux.ibm.com> | 2019-01-13 11:07:09 +0530 |
---|---|---|
committer | Stewart Smith <stewart@linux.ibm.com> | 2019-01-16 00:46:49 -0600 |
commit | 9d2d0115eaca5d92e8032f3c051a200e59e80971 (patch) | |
tree | 4c8d6793e57d2e4869be5c3b13043bbac7065334 | |
parent | 658c39dda366aca674e7192535c4cc740c837f1c (diff) | |
download | blackbird-skiboot-9d2d0115eaca5d92e8032f3c051a200e59e80971.tar.gz blackbird-skiboot-9d2d0115eaca5d92e8032f3c051a200e59e80971.zip |
core/pci: Introduce a new pci_slot_op named completed_sm_run()
At times we need to perform some cleanup activities when the Opal PCI
state machine that perform creset/freset/hreset (driven by
pci_slot_ops->run_sm which) of a slot completes. One example can be to
mark CAPP attached to a PHB, as deactivated when creset/freset of a
CAPI card slot is completed.
However the calls to pci_slot_ops->run_sm() is scattered through out
the code and patching each call site to check for the return value and
perform custom cleanup tacks is difficult.
Hence this patch introduces a new pci_slot_ops named
completed_sm_run() which should be called when pci_slot_ops->run_sm()
determines that the reset state machine is complete. This provides a
more centralized way to handle slot related cleanup activities.
Reviewed-by: Frederic Barrat <fbarrat@linux.ibm.com>
Reviewed-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Reviewed-by: Christophe Lombard <clombard@linux.vnet.ibm.com>
Signed-off-by: Vaibhav Jain <vaibhav@linux.ibm.com>
Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
-rw-r--r-- | core/pci-slot.c | 6 | ||||
-rw-r--r-- | include/pci-slot.h | 1 |
2 files changed, 6 insertions, 1 deletions
diff --git a/core/pci-slot.c b/core/pci-slot.c index 71d2769e..497d0a47 100644 --- a/core/pci-slot.c +++ b/core/pci-slot.c @@ -104,9 +104,13 @@ static int64_t pci_slot_run_sm(struct pci_slot *slot) prlog(PR_ERR, PCI_SLOT_PREFIX "Invalid state %08x\n", slot->id, slot->state); pci_slot_set_state(slot, PCI_SLOT_STATE_NORMAL); - return OPAL_HARDWARE; + ret = OPAL_HARDWARE; } + /* Notify about the pci slot state machine completion */ + if (ret <= 0 && slot->ops.completed_sm_run) + slot->ops.completed_sm_run(slot, ret); + return ret; } diff --git a/include/pci-slot.h b/include/pci-slot.h index cd757535..708374b6 100644 --- a/include/pci-slot.h +++ b/include/pci-slot.h @@ -110,6 +110,7 @@ struct pci_slot_ops { int64_t (*freset)(struct pci_slot *slot); int64_t (*hreset)(struct pci_slot *slot); int64_t (*run_sm)(struct pci_slot *slot); + int64_t (*completed_sm_run)(struct pci_slot *slot, uint64_t err); /* Auxillary functions */ void (*add_properties)(struct pci_slot *slot, struct dt_node *np); |