Message ID | 20230621160306.896045-2-fbarrat@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | pnv/xive2: Fix TIMA special ops detection | expand |
On 6/21/23 18:03, Frederic Barrat wrote: > The presenters for xive on P9 and P10 are mostly similar but the > behavior can be tuned through a few CQ registers. This patch adds a > "get_config" method, which will allow to access that config from the > presenter in a later patch. > For now, just define the config for the TIMA version. > > Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com> Looks good. If I remember well, each XIVE subunit has a copy of the config registers and modifications to the CQ unit are spanned to the others. Reviewed-by: Cédric Le Goater <clg@kaod.org> Thanks, C. > --- > hw/intc/pnv_xive.c | 11 +++++++++++ > hw/intc/pnv_xive2.c | 12 ++++++++++++ > hw/intc/xive.c | 7 +++++++ > include/hw/ppc/xive.h | 3 +++ > 4 files changed, 33 insertions(+) > > diff --git a/hw/intc/pnv_xive.c b/hw/intc/pnv_xive.c > index 622f9d28b7..e536b3ec26 100644 > --- a/hw/intc/pnv_xive.c > +++ b/hw/intc/pnv_xive.c > @@ -479,6 +479,16 @@ static int pnv_xive_match_nvt(XivePresenter *xptr, uint8_t format, > return count; > } > > +static uint32_t pnv_xive_presenter_get_config(XivePresenter *xptr) > +{ > + uint32_t cfg = 0; > + > + /* TIMA GEN1 is all P9 knows */ > + cfg |= XIVE_PRESENTER_GEN1_TIMA_OS; > + > + return cfg; > +} > + > static uint8_t pnv_xive_get_block_id(XiveRouter *xrtr) > { > return pnv_xive_block_id(PNV_XIVE(xrtr)); > @@ -1991,6 +2001,7 @@ static void pnv_xive_class_init(ObjectClass *klass, void *data) > > xnc->notify = pnv_xive_notify; > xpc->match_nvt = pnv_xive_match_nvt; > + xpc->get_config = pnv_xive_presenter_get_config; > }; > > static const TypeInfo pnv_xive_info = { > diff --git a/hw/intc/pnv_xive2.c b/hw/intc/pnv_xive2.c > index ec1edeb385..59534f6843 100644 > --- a/hw/intc/pnv_xive2.c > +++ b/hw/intc/pnv_xive2.c > @@ -501,6 +501,17 @@ static int pnv_xive2_match_nvt(XivePresenter *xptr, uint8_t format, > return count; > } > > +static uint32_t pnv_xive2_presenter_get_config(XivePresenter *xptr) > +{ > + PnvXive2 *xive = PNV_XIVE2(xptr); > + uint32_t cfg = 0; > + > + if (xive->cq_regs[CQ_XIVE_CFG >> 3] & CQ_XIVE_CFG_GEN1_TIMA_OS) { > + cfg |= XIVE_PRESENTER_GEN1_TIMA_OS; > + } > + return cfg; > +} > + > static uint8_t pnv_xive2_get_block_id(Xive2Router *xrtr) > { > return pnv_xive2_block_id(PNV_XIVE2(xrtr)); > @@ -1987,6 +1998,7 @@ static void pnv_xive2_class_init(ObjectClass *klass, void *data) > xnc->notify = pnv_xive2_notify; > > xpc->match_nvt = pnv_xive2_match_nvt; > + xpc->get_config = pnv_xive2_presenter_get_config; > }; > > static const TypeInfo pnv_xive2_info = { > diff --git a/hw/intc/xive.c b/hw/intc/xive.c > index 5204c14b87..34a868b185 100644 > --- a/hw/intc/xive.c > +++ b/hw/intc/xive.c > @@ -461,6 +461,13 @@ static void xive_tm_push_os_ctx(XivePresenter *xptr, XiveTCTX *tctx, > } > } > > +static __attribute__((unused)) uint32_t xive_presenter_get_config(XivePresenter *xptr) > +{ > + XivePresenterClass *xpc = XIVE_PRESENTER_GET_CLASS(xptr); > + > + return xpc->get_config(xptr); > +} > + > /* > * Define a mapping of "special" operations depending on the TIMA page > * offset and the size of the operation. > diff --git a/include/hw/ppc/xive.h b/include/hw/ppc/xive.h > index f7eea4ca81..3dfb06e002 100644 > --- a/include/hw/ppc/xive.h > +++ b/include/hw/ppc/xive.h > @@ -430,6 +430,8 @@ typedef struct XivePresenterClass XivePresenterClass; > DECLARE_CLASS_CHECKERS(XivePresenterClass, XIVE_PRESENTER, > TYPE_XIVE_PRESENTER) > > +#define XIVE_PRESENTER_GEN1_TIMA_OS 0x1 > + > struct XivePresenterClass { > InterfaceClass parent; > int (*match_nvt)(XivePresenter *xptr, uint8_t format, > @@ -437,6 +439,7 @@ struct XivePresenterClass { > bool cam_ignore, uint8_t priority, > uint32_t logic_serv, XiveTCTXMatch *match); > bool (*in_kernel)(const XivePresenter *xptr); > + uint32_t (*get_config)(XivePresenter *xptr); > }; > > int xive_presenter_tctx_match(XivePresenter *xptr, XiveTCTX *tctx,
On 6/21/23 18:03, Frederic Barrat wrote: > The presenters for xive on P9 and P10 are mostly similar but the > behavior can be tuned through a few CQ registers. This patch adds a > "get_config" method, which will allow to access that config from the > presenter in a later patch. > For now, just define the config for the TIMA version. > > Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com> > --- > hw/intc/pnv_xive.c | 11 +++++++++++ > hw/intc/pnv_xive2.c | 12 ++++++++++++ spapr_xive.c needs an update too else QEMU will SEGV at first interrupt. Thanks, C. > hw/intc/xive.c | 7 +++++++ > include/hw/ppc/xive.h | 3 +++ > 4 files changed, 33 insertions(+) > > diff --git a/hw/intc/pnv_xive.c b/hw/intc/pnv_xive.c > index 622f9d28b7..e536b3ec26 100644 > --- a/hw/intc/pnv_xive.c > +++ b/hw/intc/pnv_xive.c > @@ -479,6 +479,16 @@ static int pnv_xive_match_nvt(XivePresenter *xptr, uint8_t format, > return count; > } > > +static uint32_t pnv_xive_presenter_get_config(XivePresenter *xptr) > +{ > + uint32_t cfg = 0; > + > + /* TIMA GEN1 is all P9 knows */ > + cfg |= XIVE_PRESENTER_GEN1_TIMA_OS; > + > + return cfg; > +} > + > static uint8_t pnv_xive_get_block_id(XiveRouter *xrtr) > { > return pnv_xive_block_id(PNV_XIVE(xrtr)); > @@ -1991,6 +2001,7 @@ static void pnv_xive_class_init(ObjectClass *klass, void *data) > > xnc->notify = pnv_xive_notify; > xpc->match_nvt = pnv_xive_match_nvt; > + xpc->get_config = pnv_xive_presenter_get_config; > }; > > static const TypeInfo pnv_xive_info = { > diff --git a/hw/intc/pnv_xive2.c b/hw/intc/pnv_xive2.c > index ec1edeb385..59534f6843 100644 > --- a/hw/intc/pnv_xive2.c > +++ b/hw/intc/pnv_xive2.c > @@ -501,6 +501,17 @@ static int pnv_xive2_match_nvt(XivePresenter *xptr, uint8_t format, > return count; > } > > +static uint32_t pnv_xive2_presenter_get_config(XivePresenter *xptr) > +{ > + PnvXive2 *xive = PNV_XIVE2(xptr); > + uint32_t cfg = 0; > + > + if (xive->cq_regs[CQ_XIVE_CFG >> 3] & CQ_XIVE_CFG_GEN1_TIMA_OS) { > + cfg |= XIVE_PRESENTER_GEN1_TIMA_OS; > + } > + return cfg; > +} > + > static uint8_t pnv_xive2_get_block_id(Xive2Router *xrtr) > { > return pnv_xive2_block_id(PNV_XIVE2(xrtr)); > @@ -1987,6 +1998,7 @@ static void pnv_xive2_class_init(ObjectClass *klass, void *data) > xnc->notify = pnv_xive2_notify; > > xpc->match_nvt = pnv_xive2_match_nvt; > + xpc->get_config = pnv_xive2_presenter_get_config; > }; > > static const TypeInfo pnv_xive2_info = { > diff --git a/hw/intc/xive.c b/hw/intc/xive.c > index 5204c14b87..34a868b185 100644 > --- a/hw/intc/xive.c > +++ b/hw/intc/xive.c > @@ -461,6 +461,13 @@ static void xive_tm_push_os_ctx(XivePresenter *xptr, XiveTCTX *tctx, > } > } > > +static __attribute__((unused)) uint32_t xive_presenter_get_config(XivePresenter *xptr) > +{ > + XivePresenterClass *xpc = XIVE_PRESENTER_GET_CLASS(xptr); > + > + return xpc->get_config(xptr); > +} > + > /* > * Define a mapping of "special" operations depending on the TIMA page > * offset and the size of the operation. > diff --git a/include/hw/ppc/xive.h b/include/hw/ppc/xive.h > index f7eea4ca81..3dfb06e002 100644 > --- a/include/hw/ppc/xive.h > +++ b/include/hw/ppc/xive.h > @@ -430,6 +430,8 @@ typedef struct XivePresenterClass XivePresenterClass; > DECLARE_CLASS_CHECKERS(XivePresenterClass, XIVE_PRESENTER, > TYPE_XIVE_PRESENTER) > > +#define XIVE_PRESENTER_GEN1_TIMA_OS 0x1 > + > struct XivePresenterClass { > InterfaceClass parent; > int (*match_nvt)(XivePresenter *xptr, uint8_t format, > @@ -437,6 +439,7 @@ struct XivePresenterClass { > bool cam_ignore, uint8_t priority, > uint32_t logic_serv, XiveTCTXMatch *match); > bool (*in_kernel)(const XivePresenter *xptr); > + uint32_t (*get_config)(XivePresenter *xptr); > }; > > int xive_presenter_tctx_match(XivePresenter *xptr, XiveTCTX *tctx,
On 22/06/2023 09:01, Cédric Le Goater wrote: > On 6/21/23 18:03, Frederic Barrat wrote: >> The presenters for xive on P9 and P10 are mostly similar but the >> behavior can be tuned through a few CQ registers. This patch adds a >> "get_config" method, which will allow to access that config from the >> presenter in a later patch. >> For now, just define the config for the TIMA version. >> >> Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com> >> --- >> hw/intc/pnv_xive.c | 11 +++++++++++ >> hw/intc/pnv_xive2.c | 12 ++++++++++++ > > spapr_xive.c needs an update too else QEMU will SEGV at first interrupt. Sigh... I should really start using your qemu-ppc-boot tests. Fred > > Thanks, > > C. > >> hw/intc/xive.c | 7 +++++++ >> include/hw/ppc/xive.h | 3 +++ >> 4 files changed, 33 insertions(+) >> >> diff --git a/hw/intc/pnv_xive.c b/hw/intc/pnv_xive.c >> index 622f9d28b7..e536b3ec26 100644 >> --- a/hw/intc/pnv_xive.c >> +++ b/hw/intc/pnv_xive.c >> @@ -479,6 +479,16 @@ static int pnv_xive_match_nvt(XivePresenter >> *xptr, uint8_t format, >> return count; >> } >> +static uint32_t pnv_xive_presenter_get_config(XivePresenter *xptr) >> +{ >> + uint32_t cfg = 0; >> + >> + /* TIMA GEN1 is all P9 knows */ >> + cfg |= XIVE_PRESENTER_GEN1_TIMA_OS; >> + >> + return cfg; >> +} >> + >> static uint8_t pnv_xive_get_block_id(XiveRouter *xrtr) >> { >> return pnv_xive_block_id(PNV_XIVE(xrtr)); >> @@ -1991,6 +2001,7 @@ static void pnv_xive_class_init(ObjectClass >> *klass, void *data) >> xnc->notify = pnv_xive_notify; >> xpc->match_nvt = pnv_xive_match_nvt; >> + xpc->get_config = pnv_xive_presenter_get_config; >> }; >> static const TypeInfo pnv_xive_info = { >> diff --git a/hw/intc/pnv_xive2.c b/hw/intc/pnv_xive2.c >> index ec1edeb385..59534f6843 100644 >> --- a/hw/intc/pnv_xive2.c >> +++ b/hw/intc/pnv_xive2.c >> @@ -501,6 +501,17 @@ static int pnv_xive2_match_nvt(XivePresenter >> *xptr, uint8_t format, >> return count; >> } >> +static uint32_t pnv_xive2_presenter_get_config(XivePresenter *xptr) >> +{ >> + PnvXive2 *xive = PNV_XIVE2(xptr); >> + uint32_t cfg = 0; >> + >> + if (xive->cq_regs[CQ_XIVE_CFG >> 3] & CQ_XIVE_CFG_GEN1_TIMA_OS) { >> + cfg |= XIVE_PRESENTER_GEN1_TIMA_OS; >> + } >> + return cfg; >> +} >> + >> static uint8_t pnv_xive2_get_block_id(Xive2Router *xrtr) >> { >> return pnv_xive2_block_id(PNV_XIVE2(xrtr)); >> @@ -1987,6 +1998,7 @@ static void pnv_xive2_class_init(ObjectClass >> *klass, void *data) >> xnc->notify = pnv_xive2_notify; >> xpc->match_nvt = pnv_xive2_match_nvt; >> + xpc->get_config = pnv_xive2_presenter_get_config; >> }; >> static const TypeInfo pnv_xive2_info = { >> diff --git a/hw/intc/xive.c b/hw/intc/xive.c >> index 5204c14b87..34a868b185 100644 >> --- a/hw/intc/xive.c >> +++ b/hw/intc/xive.c >> @@ -461,6 +461,13 @@ static void xive_tm_push_os_ctx(XivePresenter >> *xptr, XiveTCTX *tctx, >> } >> } >> +static __attribute__((unused)) uint32_t >> xive_presenter_get_config(XivePresenter *xptr) >> +{ >> + XivePresenterClass *xpc = XIVE_PRESENTER_GET_CLASS(xptr); >> + >> + return xpc->get_config(xptr); >> +} >> + >> /* >> * Define a mapping of "special" operations depending on the TIMA page >> * offset and the size of the operation. >> diff --git a/include/hw/ppc/xive.h b/include/hw/ppc/xive.h >> index f7eea4ca81..3dfb06e002 100644 >> --- a/include/hw/ppc/xive.h >> +++ b/include/hw/ppc/xive.h >> @@ -430,6 +430,8 @@ typedef struct XivePresenterClass XivePresenterClass; >> DECLARE_CLASS_CHECKERS(XivePresenterClass, XIVE_PRESENTER, >> TYPE_XIVE_PRESENTER) >> +#define XIVE_PRESENTER_GEN1_TIMA_OS 0x1 >> + >> struct XivePresenterClass { >> InterfaceClass parent; >> int (*match_nvt)(XivePresenter *xptr, uint8_t format, >> @@ -437,6 +439,7 @@ struct XivePresenterClass { >> bool cam_ignore, uint8_t priority, >> uint32_t logic_serv, XiveTCTXMatch *match); >> bool (*in_kernel)(const XivePresenter *xptr); >> + uint32_t (*get_config)(XivePresenter *xptr); >> }; >> int xive_presenter_tctx_match(XivePresenter *xptr, XiveTCTX *tctx, >
On 6/22/23 09:53, Frederic Barrat wrote: > > > On 22/06/2023 09:01, Cédric Le Goater wrote: >> On 6/21/23 18:03, Frederic Barrat wrote: >>> The presenters for xive on P9 and P10 are mostly similar but the >>> behavior can be tuned through a few CQ registers. This patch adds a >>> "get_config" method, which will allow to access that config from the >>> presenter in a later patch. >>> For now, just define the config for the TIMA version. >>> >>> Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com> >>> --- >>> hw/intc/pnv_xive.c | 11 +++++++++++ >>> hw/intc/pnv_xive2.c | 12 ++++++++++++ >> >> spapr_xive.c needs an update too else QEMU will SEGV at first interrupt. > > > Sigh... I should really start using your qemu-ppc-boot tests. yes. That's how I caugh it. QEMU has an avocado test : build/tests/venv/bin/avocado -t machine:pseries build/tests/avocado/boot_linux.py which hangs. More tests would be good to have. Thanks, C. > > Fred > >> >> Thanks, >> >> C. >> >>> hw/intc/xive.c | 7 +++++++ >>> include/hw/ppc/xive.h | 3 +++ >>> 4 files changed, 33 insertions(+) >>> >>> diff --git a/hw/intc/pnv_xive.c b/hw/intc/pnv_xive.c >>> index 622f9d28b7..e536b3ec26 100644 >>> --- a/hw/intc/pnv_xive.c >>> +++ b/hw/intc/pnv_xive.c >>> @@ -479,6 +479,16 @@ static int pnv_xive_match_nvt(XivePresenter *xptr, uint8_t format, >>> return count; >>> } >>> +static uint32_t pnv_xive_presenter_get_config(XivePresenter *xptr) >>> +{ >>> + uint32_t cfg = 0; >>> + >>> + /* TIMA GEN1 is all P9 knows */ >>> + cfg |= XIVE_PRESENTER_GEN1_TIMA_OS; >>> + >>> + return cfg; >>> +} >>> + >>> static uint8_t pnv_xive_get_block_id(XiveRouter *xrtr) >>> { >>> return pnv_xive_block_id(PNV_XIVE(xrtr)); >>> @@ -1991,6 +2001,7 @@ static void pnv_xive_class_init(ObjectClass *klass, void *data) >>> xnc->notify = pnv_xive_notify; >>> xpc->match_nvt = pnv_xive_match_nvt; >>> + xpc->get_config = pnv_xive_presenter_get_config; >>> }; >>> static const TypeInfo pnv_xive_info = { >>> diff --git a/hw/intc/pnv_xive2.c b/hw/intc/pnv_xive2.c >>> index ec1edeb385..59534f6843 100644 >>> --- a/hw/intc/pnv_xive2.c >>> +++ b/hw/intc/pnv_xive2.c >>> @@ -501,6 +501,17 @@ static int pnv_xive2_match_nvt(XivePresenter *xptr, uint8_t format, >>> return count; >>> } >>> +static uint32_t pnv_xive2_presenter_get_config(XivePresenter *xptr) >>> +{ >>> + PnvXive2 *xive = PNV_XIVE2(xptr); >>> + uint32_t cfg = 0; >>> + >>> + if (xive->cq_regs[CQ_XIVE_CFG >> 3] & CQ_XIVE_CFG_GEN1_TIMA_OS) { >>> + cfg |= XIVE_PRESENTER_GEN1_TIMA_OS; >>> + } >>> + return cfg; >>> +} >>> + >>> static uint8_t pnv_xive2_get_block_id(Xive2Router *xrtr) >>> { >>> return pnv_xive2_block_id(PNV_XIVE2(xrtr)); >>> @@ -1987,6 +1998,7 @@ static void pnv_xive2_class_init(ObjectClass *klass, void *data) >>> xnc->notify = pnv_xive2_notify; >>> xpc->match_nvt = pnv_xive2_match_nvt; >>> + xpc->get_config = pnv_xive2_presenter_get_config; >>> }; >>> static const TypeInfo pnv_xive2_info = { >>> diff --git a/hw/intc/xive.c b/hw/intc/xive.c >>> index 5204c14b87..34a868b185 100644 >>> --- a/hw/intc/xive.c >>> +++ b/hw/intc/xive.c >>> @@ -461,6 +461,13 @@ static void xive_tm_push_os_ctx(XivePresenter *xptr, XiveTCTX *tctx, >>> } >>> } >>> +static __attribute__((unused)) uint32_t xive_presenter_get_config(XivePresenter *xptr) >>> +{ >>> + XivePresenterClass *xpc = XIVE_PRESENTER_GET_CLASS(xptr); >>> + >>> + return xpc->get_config(xptr); >>> +} >>> + >>> /* >>> * Define a mapping of "special" operations depending on the TIMA page >>> * offset and the size of the operation. >>> diff --git a/include/hw/ppc/xive.h b/include/hw/ppc/xive.h >>> index f7eea4ca81..3dfb06e002 100644 >>> --- a/include/hw/ppc/xive.h >>> +++ b/include/hw/ppc/xive.h >>> @@ -430,6 +430,8 @@ typedef struct XivePresenterClass XivePresenterClass; >>> DECLARE_CLASS_CHECKERS(XivePresenterClass, XIVE_PRESENTER, >>> TYPE_XIVE_PRESENTER) >>> +#define XIVE_PRESENTER_GEN1_TIMA_OS 0x1 >>> + >>> struct XivePresenterClass { >>> InterfaceClass parent; >>> int (*match_nvt)(XivePresenter *xptr, uint8_t format, >>> @@ -437,6 +439,7 @@ struct XivePresenterClass { >>> bool cam_ignore, uint8_t priority, >>> uint32_t logic_serv, XiveTCTXMatch *match); >>> bool (*in_kernel)(const XivePresenter *xptr); >>> + uint32_t (*get_config)(XivePresenter *xptr); >>> }; >>> int xive_presenter_tctx_match(XivePresenter *xptr, XiveTCTX *tctx, >>
diff --git a/hw/intc/pnv_xive.c b/hw/intc/pnv_xive.c index 622f9d28b7..e536b3ec26 100644 --- a/hw/intc/pnv_xive.c +++ b/hw/intc/pnv_xive.c @@ -479,6 +479,16 @@ static int pnv_xive_match_nvt(XivePresenter *xptr, uint8_t format, return count; } +static uint32_t pnv_xive_presenter_get_config(XivePresenter *xptr) +{ + uint32_t cfg = 0; + + /* TIMA GEN1 is all P9 knows */ + cfg |= XIVE_PRESENTER_GEN1_TIMA_OS; + + return cfg; +} + static uint8_t pnv_xive_get_block_id(XiveRouter *xrtr) { return pnv_xive_block_id(PNV_XIVE(xrtr)); @@ -1991,6 +2001,7 @@ static void pnv_xive_class_init(ObjectClass *klass, void *data) xnc->notify = pnv_xive_notify; xpc->match_nvt = pnv_xive_match_nvt; + xpc->get_config = pnv_xive_presenter_get_config; }; static const TypeInfo pnv_xive_info = { diff --git a/hw/intc/pnv_xive2.c b/hw/intc/pnv_xive2.c index ec1edeb385..59534f6843 100644 --- a/hw/intc/pnv_xive2.c +++ b/hw/intc/pnv_xive2.c @@ -501,6 +501,17 @@ static int pnv_xive2_match_nvt(XivePresenter *xptr, uint8_t format, return count; } +static uint32_t pnv_xive2_presenter_get_config(XivePresenter *xptr) +{ + PnvXive2 *xive = PNV_XIVE2(xptr); + uint32_t cfg = 0; + + if (xive->cq_regs[CQ_XIVE_CFG >> 3] & CQ_XIVE_CFG_GEN1_TIMA_OS) { + cfg |= XIVE_PRESENTER_GEN1_TIMA_OS; + } + return cfg; +} + static uint8_t pnv_xive2_get_block_id(Xive2Router *xrtr) { return pnv_xive2_block_id(PNV_XIVE2(xrtr)); @@ -1987,6 +1998,7 @@ static void pnv_xive2_class_init(ObjectClass *klass, void *data) xnc->notify = pnv_xive2_notify; xpc->match_nvt = pnv_xive2_match_nvt; + xpc->get_config = pnv_xive2_presenter_get_config; }; static const TypeInfo pnv_xive2_info = { diff --git a/hw/intc/xive.c b/hw/intc/xive.c index 5204c14b87..34a868b185 100644 --- a/hw/intc/xive.c +++ b/hw/intc/xive.c @@ -461,6 +461,13 @@ static void xive_tm_push_os_ctx(XivePresenter *xptr, XiveTCTX *tctx, } } +static __attribute__((unused)) uint32_t xive_presenter_get_config(XivePresenter *xptr) +{ + XivePresenterClass *xpc = XIVE_PRESENTER_GET_CLASS(xptr); + + return xpc->get_config(xptr); +} + /* * Define a mapping of "special" operations depending on the TIMA page * offset and the size of the operation. diff --git a/include/hw/ppc/xive.h b/include/hw/ppc/xive.h index f7eea4ca81..3dfb06e002 100644 --- a/include/hw/ppc/xive.h +++ b/include/hw/ppc/xive.h @@ -430,6 +430,8 @@ typedef struct XivePresenterClass XivePresenterClass; DECLARE_CLASS_CHECKERS(XivePresenterClass, XIVE_PRESENTER, TYPE_XIVE_PRESENTER) +#define XIVE_PRESENTER_GEN1_TIMA_OS 0x1 + struct XivePresenterClass { InterfaceClass parent; int (*match_nvt)(XivePresenter *xptr, uint8_t format, @@ -437,6 +439,7 @@ struct XivePresenterClass { bool cam_ignore, uint8_t priority, uint32_t logic_serv, XiveTCTXMatch *match); bool (*in_kernel)(const XivePresenter *xptr); + uint32_t (*get_config)(XivePresenter *xptr); }; int xive_presenter_tctx_match(XivePresenter *xptr, XiveTCTX *tctx,
The presenters for xive on P9 and P10 are mostly similar but the behavior can be tuned through a few CQ registers. This patch adds a "get_config" method, which will allow to access that config from the presenter in a later patch. For now, just define the config for the TIMA version. Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com> --- hw/intc/pnv_xive.c | 11 +++++++++++ hw/intc/pnv_xive2.c | 12 ++++++++++++ hw/intc/xive.c | 7 +++++++ include/hw/ppc/xive.h | 3 +++ 4 files changed, 33 insertions(+)