[Skiboot] [PATCH v3 8/8] capp/phb4: Prevent HMI from getting triggered when disabling CAPP

Frederic Barrat fbarrat at linux.ibm.com
Fri Jan 11 00:49:50 AEDT 2019



Le 08/01/2019 à 10:59, Vaibhav Jain a écrit :
> While disabling CAPP an HMI gets triggered as soon as ETU is put in
> reset mode. This is caused as before we can disabled CAPP, it detects
> PHB link going down and triggers an HMI requesting Opal to perform
> CAPP recovery. This has an un-intended side effect of spamming the
> Opal logs with malfunction alert messages and may also confuse the
> user.
> 
> To prevent this we mask the CAPP FIR error 'PHB Link Down' Bit(31)
> when we are disabling CAPP just before we put ETU in reset in
> phb4_creset(). Also now since bringing down the PHB link now wont
> trigger an HMI and CAPP recovery, hence we manually set the
> PHB4_CAPP_RECOVERY flag on the phb to force recovery during creset.
> 
> Reviewed-by: Andrew Donnellan <andrew.donnellan at au1.ibm.com>
> Signed-off-by: Vaibhav Jain <vaibhav at linux.ibm.com>
> ---

Reviewed-by: Frederic Barrat <fbarrat at linux.ibm.com>

> Change-log
> 
> v3:	Fetch the pointer to 'struct capp' from struct phb4 instead of
> 	struct phb.
> 
> v2:	Use the member 'struct capp->capp_xscom_offset' to find the
> 	xscom register offset instead of 'PHB4_CAPP_REG_OFFSET'.
> ---
>   hw/phb4.c | 11 +++++++++++
>   1 file changed, 11 insertions(+)
> 
> diff --git a/hw/phb4.c b/hw/phb4.c
> index 6b330793..73b2c40d 100644
> --- a/hw/phb4.c
> +++ b/hw/phb4.c
> @@ -3284,6 +3284,7 @@ static void disable_capi_mode(struct phb4 *p)
>   static int64_t phb4_creset(struct pci_slot *slot)
>   {
>   	struct phb4 *p = phb_to_phb4(slot->phb);
> +	struct capp *capp = p->capp;
>   	uint64_t pbcq_status, reg;
>   
>   	/* Don't even try fixing a broken PHB */
> @@ -3299,6 +3300,16 @@ static int64_t phb4_creset(struct pci_slot *slot)
>   		/* Clear error inject register, preventing recursive errors */
>   		xscom_write(p->chip_id, p->pe_xscom + 0x2, 0x0);
>   
> +		/* Prevent HMI when PHB gets fenced as we are disabling CAPP */
> +		if (p->flags & PHB4_CAPP_DISABLE &&
> +		    capp && capp->phb == slot->phb) {
> +			/* Since no HMI, So set the recovery flag manually. */
> +			p->flags |= PHB4_CAPP_RECOVERY;
> +			xscom_write_mask(p->chip_id, capp->capp_xscom_offset +
> +					 CAPP_FIR_MASK,
> +					 PPC_BIT(31), PPC_BIT(31));
> +		}
> +
>   		/* Force fence on the PHB to work around a non-existent PE */
>   		if (!phb4_fenced(p))
>   			xscom_write(p->chip_id, p->pe_stk_xscom + 0x2,
> 



More information about the Skiboot mailing list