[Skiboot] [PATCH] FSP: Handle DPO initiated CEC shutdown with FSP in RR
Neelesh Gupta
neelegup at linux.vnet.ibm.com
Fri Nov 6 21:35:16 AEDT 2015
Hi Ananth,
On 11/06/2015 03:10 PM, Ananth N Mavinakayanahalli wrote:
> In a scenario where the DPO has been initiated, but the FSP then went into
> reset before the CEC power down came in, OPAL may not give up the link since
> it may never see the PSI interrupt. So, if we are in dpo_pending and an FSP
> reset is detected via the DISR, give up the PSI link voluntarily.
>
> Tested-by: Vipin K Parashar <vipin at linux.vnet.ibm.com>
> Signed-off-by: Ananth N Mavinakayanahalli <ananth at in.ibm.com>
> ---
> hw/fsp/fsp-dpo.c | 2 +-
> hw/fsp/fsp.c | 20 +++++++++++++++++---
> include/fsp.h | 1 +
> 3 files changed, 19 insertions(+), 4 deletions(-)
>
> diff --git a/hw/fsp/fsp-dpo.c b/hw/fsp/fsp-dpo.c
> index 8c7c296..f6fadc5 100644
> --- a/hw/fsp/fsp-dpo.c
> +++ b/hw/fsp/fsp-dpo.c
> @@ -29,7 +29,7 @@
> #define DPO_CMD_SGN_BYTE1 0x20 /* Byte[1] signature */
> #define DPO_TIMEOUT 2700 /* 45 minutes in seconds */
>
> -static bool fsp_dpo_pending;
> +bool fsp_dpo_pending;
> static unsigned long fsp_dpo_init_tb;
>
> /*
> diff --git a/hw/fsp/fsp.c b/hw/fsp/fsp.c
> index ab625a5..b53c3f0 100644
> --- a/hw/fsp/fsp.c
> +++ b/hw/fsp/fsp.c
> @@ -666,9 +666,23 @@ static void fsp_handle_errors(struct fsp *fsp)
> if (fsp->state == fsp_mbx_rr)
> return;
>
> - prlog(PR_NOTICE, "FSP #%d: FSP in Reset."
> - " Waiting for PSI interrupt\n",
> - fsp->index);
> + if (fsp_dpo_pending) {
> + /*
> + * If we are about to process a reset when DPO
> + * is pending, its possible that the host has
> + * gone down, and OPAL is on its way down and
> + * hence will not see the subsequent PSI interrupt.
> + * So, just give up the link here.
> + */
> + prlog(PR_NOTICE, "FSP #%d: FSP reset with DPO pending."
> + " Giving up PSI link\n",
> + fsp->index);
> + psi_disable_link(psi);
> + } else {
> + prlog(PR_NOTICE, "FSP #%d: FSP in Reset."
> + " Waiting for PSI interrupt\n",
> + fsp->index);
> + }
Instead of exporting the dpo variable.. can we register a dpo client for
RR_EVENT
with moving this logic there and the function just below
'fsp_start_rr()' will do the
rest ...
Neelesh.
> fsp_start_rr(fsp);
> }
>
> diff --git a/include/fsp.h b/include/fsp.h
> index 4e247cc..a61bd58 100644
> --- a/include/fsp.h
> +++ b/include/fsp.h
> @@ -823,6 +823,7 @@ extern void fsp_epow_init(void);
>
> /* DPO */
> extern void fsp_dpo_init(void);
> +extern bool fsp_dpo_pending;
>
> /* Chiptod */
> extern void fsp_chiptod_init(void);
>
> _______________________________________________
> Skiboot mailing list
> Skiboot at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/skiboot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ozlabs.org/pipermail/skiboot/attachments/20151106/e9cf22fd/attachment.html>
More information about the Skiboot
mailing list