[Skiboot] [PATCH 1/5] phb4: Workaround PHB errata with CFG write UR/CA errors

Oliver oohall at gmail.com
Tue Aug 21 15:48:12 AEST 2018


On Wed, Aug 15, 2018 at 3:10 PM, Benjamin Herrenschmidt
<benh at kernel.crashing.org> wrote:
> If the PHB encounters a UR or CA status on a CFG write, it will
> incorrectly freeze the wrong PE. Instead of using the PE# specified
> in the CONFIG_ADDRESS register, it will use the PE# of whatever
> MMIO occurred last.
>
> Work around this disabling freeze on such errors
>
> Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>

Tested and it seems to fix the bonus freeze bug. I had some problems
with EEH while testing this, but I think those are due to the Linux
race during boot rather than this.

Stewart, can you put this in stable too?

Tested-By: Oliver O'Halloran <oohall at gmail.com>

> ---
>  hw/phb4.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/hw/phb4.c b/hw/phb4.c
> index 5e07e2bc..c329e5a2 100644
> --- a/hw/phb4.c
> +++ b/hw/phb4.c
> @@ -4686,7 +4686,11 @@ static void phb4_init_errors(struct phb4 *p)
>         out_be64(p->regs + 0x0d00,      0xffffffffffffffffull);
>         out_be64(p->regs + 0x0d08,      0x0000000000000000ull);
>         out_be64(p->regs + 0x0d18,      0xffffff0fffffffffull);
> -       out_be64(p->regs + 0x0d28,      0x0000400a00000000ull);
> +
> +       /* Errata: Clear bit 17, otherwise a CFG write UR/CA will incorrectly
> +        * freeze a "random" PE (whatever last PE did an MMIO)
> +        */
> +       out_be64(p->regs + 0x0d28,      0x0000000a00000000ull);
>         out_be64(p->regs + 0x0d30,      0xdff7bd05f7ddfff0ull); /* XXX CAPI has diff. value */
>         out_be64(p->regs + 0x0d40,      0x0000000000000000ull);
>         out_be64(p->regs + 0x0d48,      0x0000000000000000ull);
> --
> 2.17.1
>
> _______________________________________________
> Skiboot mailing list
> Skiboot at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/skiboot


More information about the Skiboot mailing list