[Skiboot] [PATCH v2] phb4: Reset pfir and nfir if new errors reported during ETU reset

Oliver oohall at gmail.com
Wed Sep 19 15:22:05 AEST 2018


On Mon, Sep 17, 2018 at 5:25 PM, Vaibhav Jain <vaibhav at linux.ibm.com> wrote:
> During fast-reboot new PEC errors can be latched even after ETU-Reset
> is asserted. This will result in values of variables nfir_cache and
> pfir_cache to be out of sync.
>
> During step-2 of CRESET nfir_cache and pfir_cache values are used to
> bring the PHB out of reset state. However if these variables are out
> as noted above of date the nfir/pfir registers are never reset
> completely and ETU still remains frozen.
>
> Hence this patch updates step-2 of phb4_creset to re-read the values of
> nfir/pfir registers to check if any new errors were reported after
> ETU-reset was asserted, report these new errors and reset the
> nfir/pfir registers. This should bring the ETU out of reset
> successfully.
>
> Signed-off-by: Vaibhav Jain <vaibhav at linux.ibm.com>
> ---
> Change-log:
> v2      -> Rebased the patch to
>         http://patchwork.ozlabs.org/patch/970408/ to dump all pec
>         error registers.

looks good to me

Reviewed-by: Oliver O'Halloran <oohall at gmail.com>

> ---
>  hw/phb4.c | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
>
> diff --git a/hw/phb4.c b/hw/phb4.c
> index cf3d0f84..3b1a755c 100644
> --- a/hw/phb4.c
> +++ b/hw/phb4.c
> @@ -3160,6 +3160,25 @@ static int64_t phb4_creset(struct pci_slot *slot)
>                         xscom_write(p->chip_id, p->pe_stk_xscom + 0x1,
>                                     ~p->nfir_cache);
>
> +                       /* Re-read errors in PFIR and NFIR and reset any new
> +                        * error reported.
> +                        */
> +                       xscom_read(p->chip_id, p->pci_stk_xscom +
> +                                  XPEC_PCI_STK_PCI_FIR, &p->pfir_cache);
> +                       xscom_read(p->chip_id, p->pe_stk_xscom +
> +                                  XPEC_NEST_STK_PCI_NFIR, &p->nfir_cache);
> +
> +                       if (p->pfir_cache || p->nfir_cache) {
> +                               PHBERR(p, "CRESET: PHB still fenced !!\n");
> +                               phb4_dump_pec_err_regs(p);
> +
> +                               /* Reset the PHB errors */
> +                               xscom_write(p->chip_id, p->pci_stk_xscom +
> +                                           XPEC_PCI_STK_PCI_FIR, 0);
> +                               xscom_write(p->chip_id, p->pe_stk_xscom +
> +                                           XPEC_NEST_STK_PCI_NFIR, 0);
> +                       }
> +
>                         /* Clear PHB from reset */
>                         xscom_write(p->chip_id,
>                                     p->pci_stk_xscom + XPEC_PCI_STK_ETU_RESET, 0x0);
> --
> 2.17.1
>


More information about the Skiboot mailing list