[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