[Skiboot] [PATCH v2 2/8] core/pci: Introduce a new pci_slot_op named completed_sm_run()
Andrew Donnellan
andrew.donnellan at au1.ibm.com
Mon Dec 10 13:39:02 AEDT 2018
On 10/12/18 1:17 am, Vaibhav Jain wrote:
> 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.
>
> Signed-off-by: Vaibhav Jain <vaibhav at linux.ibm.com>
Reviewed-by: Andrew Donnellan <andrew.donnellan at au1.ibm.com>
> ---
> Change-log
>
> v2: Update the callback signature to return a int64_t back to
> caller. [Andrew]
> ---
> core/pci-slot.c | 6 +++++-
> include/pci-slot.h | 1 +
> 2 files changed, 6 insertions(+), 1 deletion(-)
>
> 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);
>
--
Andrew Donnellan OzLabs, ADL Canberra
andrew.donnellan at au1.ibm.com IBM Australia Limited
More information about the Skiboot
mailing list