[Skiboot] [PATCH] Revert "FSP: Disable PSI link whenever FSP tells OPAL about impending R/R"

Ananth N Mavinakayanahalli ananth at linux.ibm.com
Fri Mar 13 19:41:22 AEDT 2020


On 3/12/20 6:11 PM, Vasant Hegde wrote:
> This reverts commit a4788a49f004a91bb8ca015336abf9ae119fbc52.
> 
> Above patch was added to handle host power down with FSP in R/R state.
> But FSP is not liking OPAL giving up PSI link early in R/R process. For
> FSP initiated R/R OPAL should wait until we get PSI interrupt. Hence
> reverting above commit.
> 
> Also partially reverting commit e04a34af to make fsp_dpo_pending as
> global variable.
> 
> We have made several improvement in the way we handle FSP communication
> and also in power down path. Now if host sends powerdown message when
> FSP in RR, OPAL return OPAL_BUSY_EVENT. Kernel will run poller() and
> retry power down message after sometime. So I think this patch will not
> have any side effect on power down path.
> 
> Cc: Ananth N Mavinakayanahalli <ananth at linux.vnet.ibm.com>
> Signed-off-by: Vasant Hegde <hegdevasant at linux.vnet.ibm.com>
> ---
> Oliver,
>    I have tested this patch with FSP RR followed by host power down
>    scenario. It worked fine. Once FSP booted it detected power down
>    command and moved host to standby state.
> 
> -Vasant
> 
>   hw/fsp/fsp-dpo.c |  2 +-
>   hw/fsp/fsp.c     | 25 +++++++++++++++++--------
>   include/fsp.h    |  1 +
>   3 files changed, 19 insertions(+), 9 deletions(-)
> 
> diff --git a/hw/fsp/fsp-dpo.c b/hw/fsp/fsp-dpo.c
> index da83a93d8..8f0861ed4 100644
> --- a/hw/fsp/fsp-dpo.c
> +++ b/hw/fsp/fsp-dpo.c
> @@ -18,7 +18,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 392cf5d36..117810bf8 100644
> --- a/hw/fsp/fsp.c
> +++ b/hw/fsp/fsp.c
> @@ -726,14 +726,23 @@ static void fsp_handle_errors(struct fsp *fsp)
>   		if (fsp->state == fsp_mbx_rr)
>   			return;
> 
> -		/*
> -		 * 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.
> -		 */
> -		psi_disable_link(psi);
> -		prlog(PR_NOTICE, "FSP #%d: FSP in reset."
> -		      " Giving up PSI link\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);
> +		}
>   		fsp_start_rr(fsp);
>   	}
> 
> diff --git a/include/fsp.h b/include/fsp.h
> index ec079a274..472ce62ff 100644
> --- a/include/fsp.h
> +++ b/include/fsp.h
> @@ -842,6 +842,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);
> 

Acked-by: Ananth N Mavinakayanahalli <ananth at linux.ibm.com>

-- 
Ananth


More information about the Skiboot mailing list