qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 1/2] pnv/xive2: Add a get_config() method on the presenter cl


From: Cédric Le Goater
Subject: Re: [PATCH 1/2] pnv/xive2: Add a get_config() method on the presenter class
Date: Wed, 21 Jun 2023 19:07:46 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0

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,




reply via email to

[Prev in Thread] Current Thread [Next in Thread]