[Skiboot] [PATCH] SCOM restore for DARN and XIVE
Akshay Adiga
akshay.adiga at linux.vnet.ibm.com
Thu Nov 16 14:22:16 AEDT 2017
I have added errror handling code and some other fixes and reposted.
https://patchwork.ozlabs.org/patch/838382/
https://patchwork.ozlabs.org/patch/838383/
On 11/13/2017 11:36 AM, Oliver wrote:
> On Mon, Nov 13, 2017 at 5:04 PM, Stewart Smith
> <stewart at linux.vnet.ibm.com> wrote:
> > Akshay Adiga <akshay.adiga at linux.vnet.ibm.com> writes:
> >> While waking up from stop11, we want NCU_DARN_BAR to have enable bit set.
> >> Without this stop_api call, the value restored is without enable bit set.
> >> We loose NCU_SPEC_BAR when the quad goes into stop11, stop_api will
> >> restore while waking up from stop11.
> >>
> >> Signed-off-by: Akshay Adiga <akshay.adiga at linux.vnet.ibm.com>
> >> ---
> >> hw/nx.c | 12 +++++++++++-
> >> hw/xive.c | 8 ++++++++
> >> 2 files changed, 19 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/hw/nx.c b/hw/nx.c
> >> index 64ac793..8431c3c 100644
> >> --- a/hw/nx.c
> >> +++ b/hw/nx.c
> >> @@ -24,6 +24,7 @@
> >> #include <chip.h>
> >> #include <xscom-p9-regs.h>
> >> #include <phys-map.h>
> >> +#include <p9_stop_api.H>
> >>
> >> extern void nx_p9_rng_init(void);
> >>
> >> @@ -31,7 +32,7 @@ void nx_p9_rng_init(void)
> >> {
> >> struct proc_chip *chip;
> >> struct cpu_thread *c;
> >> - uint64_t bar, tmp;
> >> + uint64_t bar, tmp, rc;
> >>
> >> if (proc_gen != proc_gen_p9)
> >> return;
> >> @@ -65,6 +66,15 @@ void nx_p9_rng_init(void)
> >> P9X_EX_NCU_DARN_BAR);
> >> xscom_write(chip->id, addr,
> >> bar | P9X_EX_NCU_DARN_BAR_EN);
> >> + rc = p9_stop_save_scom(( void *)chip->homer_base,
> >> + addr, bar | P9X_EX_NCU_DARN_BAR_EN,
> >> + P9_STOP_SCOM_REPLACE,
> >> + P9_STOP_SECTION_CORE_SCOM);
> >> + if (rc) {
> >> + prlog(PR_ERR,
> >> + " stopapi for DARN_BAR failed %lld",
> >> + rc);
> >> + }
> >
> > Don't need {} for single line ifs
>
> Is it really a single line if when it's spread across three?
>
> >
> > Also, this (and below) I think should just say p9_stop_api rather than
> > 'stopapi' here and 'STOP_API' below.
> >
> > I also think the error handling here is incorrect.
> >
> > IF we can't get stop to save and restore the DARN_BAR then we either
> > need to disable deep stop states or DARN.
> >> @@ -3111,6 +3112,7 @@ static void xive_configure_ex_special_bar(struct xive *x, struct cpu_thread *c)
> >> {
> >> uint64_t xa, val;
> >> int64_t rc;
> >> + struct proc_chip *chip = get_chip(c->chip_id);
> >>
> >> xive_cpu_dbg(c, "Setting up special BAR\n");
> >> xa = XSCOM_ADDR_P9_EX(pir_to_core_id(c->pir), P9X_EX_NCU_SPEC_BAR);
> >> @@ -3123,6 +3125,12 @@ static void xive_configure_ex_special_bar(struct xive *x, struct cpu_thread *c)
> >> xive_cpu_err(c, "Failed to setup NCU_SPEC_BAR\n");
> >> /* XXXX what do do now ? */
> >> }
> >> + rc = p9_stop_save_scom(( void *)chip->homer_base, xa, val,
> >> + P9_STOP_SCOM_REPLACE, P9_STOP_SECTION_EQ_SCOM);
> >> + if (rc) {
> >> + xive_cpu_err(c, "STOP_API failed for NCU_SPEC_BAR rc=%lld\n",rc);
> >> +
> >> + }
> >> }
> >
> > I think we need to handle the error case here too, although I'm not sure
> > what options we have in this case...
> >
> > --
> > Stewart Smith
> > OPAL Architect, IBM.
> >
> > _______________________________________________
> > Skiboot mailing list
> > Skiboot at lists.ozlabs.org
> > https://lists.ozlabs.org/listinfo/skiboot
>
More information about the Skiboot
mailing list