[Skiboot] [PATCH] capi: Perform capp recovery sequence only when PBCQ is idle

Andrew Donnellan andrew.donnellan at au1.ibm.com
Thu Jan 18 17:34:12 AEDT 2018


On 18/01/18 17:06, Vaibhav Jain wrote:
> Presently during a CRESET the CAPP recovery sequence can be executed
> multiple times in case PBCQ on the PEC is still busy processing in/out
> bound inflight transactions.
> 
> This patch updates phb4_creset() to perform capp-recovery sequence via
> do_capp_recovery_scoms() only when PBCQ General Status Register
> reports no pending transactions.
> 
> Signed-off-by: Vaibhav Jain <vaibhav at linux.vnet.ibm.com>

Seems reasonable enough.

Reviewed-by: Andrew Donnellan <andrew.donnellan at au1.ibm.com>

> ---
>   hw/phb4.c | 7 ++++---
>   1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/hw/phb4.c b/hw/phb4.c
> index 8e660b66..93ed1e06 100644
> --- a/hw/phb4.c
> +++ b/hw/phb4.c
> @@ -2899,15 +2899,16 @@ static int64_t phb4_creset(struct pci_slot *slot)
>   		slot->retries = 500;
>   		return pci_slot_set_sm_timeout(slot, msecs_to_tb(10));
>   	case PHB4_SLOT_CRESET_WAIT_CQ:
> -		/* capp recovery */
> -		if (p->flags & PHB4_CAPP_RECOVERY)
> -			do_capp_recovery_scoms(p);
> 
>   		// Wait until operations are complete
>   		xscom_read(p->chip_id, p->pe_stk_xscom + 0xc, &pbcq_status);
>   		if (!(pbcq_status & 0xC000000000000000)) {
>   			PHBDBG(p, "CRESET: No pending transactions\n");
> 
> +			/* capp recovery */
> +			if (p->flags & PHB4_CAPP_RECOVERY)
> +				do_capp_recovery_scoms(p);
> +
>   			/* Clear errors in PFIR and NFIR */
>   			xscom_write(p->chip_id, p->pci_stk_xscom + 0x1,
>   				    ~p->pfir_cache);
> 

-- 
Andrew Donnellan              OzLabs, ADL Canberra
andrew.donnellan at au1.ibm.com  IBM Australia Limited



More information about the Skiboot mailing list