From: "Cédric Le Goater" <clg@kaod.org>
To: qemu-ppc@nongnu.org, qemu-devel@nongnu.org,
David Gibson <david@gibson.dropbear.id.au>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Alexey Kardashevskiy <aik@ozlabs.ru>,
Alexander Graf <agraf@suse.de>
Cc: "Cédric Le Goater" <clg@kaod.org>
Subject: [Qemu-devel] [RFC PATCH v2 16/21] spapr: add a XIVE object to the sPAPR machine
Date: Mon, 11 Sep 2017 19:12:30 +0200 [thread overview]
Message-ID: <20170911171235.29331-17-clg@kaod.org> (raw)
In-Reply-To: <20170911171235.29331-1-clg@kaod.org>
If the machine supports XIVE (POWER9 CPU), create a XIVE object. The
CAS negotiation process will decide which model (legacy or XIVE) will
be used for the interrupt controller depending on the guest
capabilities.
Also extend the number of provisionned IRQs with the number of CPUs,
this is required for XIVE which allocates one IRQ number for each IPI.
Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
hw/ppc/spapr.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++--
include/hw/ppc/spapr.h | 2 ++
2 files changed, 63 insertions(+), 2 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 5d69df928434..b6577dbecdea 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -44,6 +44,7 @@
#include "mmu-hash64.h"
#include "mmu-book3s-v3.h"
#include "qom/cpu.h"
+#include "target/ppc/cpu-models.h"
#include "hw/boards.h"
#include "hw/ppc/ppc.h"
@@ -54,6 +55,7 @@
#include "hw/ppc/spapr_vio.h"
#include "hw/pci-host/spapr.h"
#include "hw/ppc/xics.h"
+#include "hw/ppc/spapr_xive.h"
#include "hw/pci/msi.h"
#include "hw/pci/pci.h"
@@ -202,6 +204,35 @@ static void xics_system_init(MachineState *machine, int nr_irqs, Error **errp)
}
}
+static sPAPRXive *spapr_spapr_xive_create(sPAPRMachineState *spapr, int nr_irqs,
+ int nr_servers, Error **errp)
+{
+ Error *local_err = NULL;
+ Object *obj;
+
+ obj = object_new(TYPE_SPAPR_XIVE);
+ object_property_add_child(OBJECT(spapr), "xive", obj, &error_abort);
+ object_property_add_const_link(obj, "ics", OBJECT(spapr->ics),
+ &error_abort);
+ object_property_set_int(obj, nr_irqs, "nr-irqs", &local_err);
+ if (local_err) {
+ goto error;
+ }
+ object_property_set_int(obj, nr_servers, "nr-targets", &local_err);
+ if (local_err) {
+ goto error;
+ }
+ object_property_set_bool(obj, true, "realized", &local_err);
+ if (local_err) {
+ goto error;
+ }
+
+ return SPAPR_XIVE(obj);
+error:
+ error_propagate(errp, local_err);
+ return NULL;
+}
+
static int spapr_fixup_cpu_smt_dt(void *fdt, int offset, PowerPCCPU *cpu,
int smt_threads)
{
@@ -1093,7 +1124,8 @@ static void *spapr_build_fdt(sPAPRMachineState *spapr,
}
QLIST_FOREACH(phb, &spapr->phbs, list) {
- ret = spapr_populate_pci_dt(phb, PHANDLE_XICP, fdt, XICS_IRQS_SPAPR);
+ ret = spapr_populate_pci_dt(phb, PHANDLE_XICP, fdt,
+ XICS_IRQS_SPAPR + xics_max_server_number());
if (ret < 0) {
error_report("couldn't setup PCI devices in fdt");
exit(1);
@@ -2140,6 +2172,16 @@ static void spapr_init_cpus(sPAPRMachineState *spapr)
g_free(type);
}
+/*
+ * Only POWER9 Processor chips support the XIVE interrupt controller
+ */
+static bool ppc_support_xive(MachineState *machine)
+{
+ PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(first_cpu);
+
+ return pcc->pvr_match(pcc, CPU_POWERPC_POWER9_BASE);
+}
+
/* pSeries LPAR / sPAPR hardware init */
static void ppc_spapr_init(MachineState *machine)
{
@@ -2237,7 +2279,8 @@ static void ppc_spapr_init(MachineState *machine)
load_limit = MIN(spapr->rma_size, RTAS_MAX_ADDR) - FW_OVERHEAD;
/* Set up Interrupt Controller before we create the VCPUs */
- xics_system_init(machine, XICS_IRQS_SPAPR, &error_fatal);
+ xics_system_init(machine, XICS_IRQS_SPAPR + xics_max_server_number(),
+ &error_fatal);
/* Set up containers for ibm,client-set-architecture negotiated options */
spapr->ov5 = spapr_ovec_new();
@@ -2274,6 +2317,22 @@ static void ppc_spapr_init(MachineState *machine)
spapr_init_cpus(spapr);
+ /* Set up XIVE. CAS will choose whether the guest runs in XICS
+ * (legacy mode) or XIVE Exploitation mode
+ *
+ * We don't have KVM support yet, so check for irqchip=on
+ */
+ if (ppc_support_xive(machine)) {
+ if (kvm_enabled() && machine_kernel_irqchip_required(machine)) {
+ error_report("kernel_irqchip requested. no XIVE support");
+ } else {
+ spapr->xive = spapr_spapr_xive_create(spapr,
+ XICS_IRQS_SPAPR + xics_max_server_number(),
+ xics_max_server_number(),
+ &error_fatal);
+ }
+ }
+
if (kvm_enabled()) {
/* Enable H_LOGICAL_CI_* so SLOF can talk to in-kernel devices */
kvmppc_enable_logical_ci_hcalls();
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 2a303a705c17..6cd5ab73c5dc 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -14,6 +14,7 @@ struct sPAPRNVRAM;
typedef struct sPAPREventLogEntry sPAPREventLogEntry;
typedef struct sPAPREventSource sPAPREventSource;
typedef struct sPAPRPendingHPT sPAPRPendingHPT;
+typedef struct sPAPRXive sPAPRXive;
#define HPTE64_V_HPTE_DIRTY 0x0000000000000040ULL
#define SPAPR_ENTRY_POINT 0x100
@@ -127,6 +128,7 @@ struct sPAPRMachineState {
MemoryHotplugState hotplug_memory;
const char *icp_type;
+ sPAPRXive *xive;
};
#define H_SUCCESS 0
--
2.13.5
next prev parent reply other threads:[~2017-09-11 17:14 UTC|newest]
Thread overview: 90+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-11 17:12 [Qemu-devel] [RFC PATCH v2 00/21] Guest exploitation of the XIVE interrupt controller (POWER9) Cédric Le Goater
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 01/21] ppc/xive: introduce a skeleton for the sPAPR XIVE interrupt controller Cédric Le Goater
2017-09-19 2:27 ` David Gibson
2017-09-19 13:15 ` Cédric Le Goater
2017-09-22 11:00 ` David Gibson
2017-09-22 12:42 ` Cédric Le Goater
2017-09-26 3:54 ` David Gibson
2017-09-26 9:45 ` Benjamin Herrenschmidt
2017-11-16 16:48 ` Cédric Le Goater
2017-11-16 15:58 ` Cédric Le Goater
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 02/21] migration: add VMSTATE_STRUCT_VARRAY_UINT32_ALLOC Cédric Le Goater
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 03/21] ppc/xive: define the XIVE internal tables Cédric Le Goater
2017-09-19 2:39 ` David Gibson
2017-09-19 13:46 ` Cédric Le Goater
2017-09-20 4:33 ` David Gibson
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 04/21] ppc/xive: provide a link to the sPAPR ICS object under XIVE Cédric Le Goater
2017-09-11 22:04 ` [Qemu-devel] [Qemu-ppc] " Greg Kurz
2017-09-12 5:47 ` Cédric Le Goater
2017-09-19 2:44 ` [Qemu-devel] " David Gibson
2017-09-19 14:46 ` Cédric Le Goater
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 05/21] ppc/xive: allocate IRQ numbers for the IPIs Cédric Le Goater
2017-09-19 2:45 ` David Gibson
2017-09-19 14:52 ` Cédric Le Goater
2017-09-20 4:35 ` David Gibson
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 06/21] ppc/xive: introduce handlers for interrupt sources Cédric Le Goater
2017-09-19 2:48 ` David Gibson
2017-09-19 15:08 ` Cédric Le Goater
2017-09-20 4:38 ` David Gibson
2017-09-21 14:11 ` Cédric Le Goater
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 07/21] ppc/xive: add MMIO handlers for the XIVE " Cédric Le Goater
2017-09-19 2:57 ` David Gibson
2017-09-20 12:54 ` Cédric Le Goater
2017-09-22 10:58 ` David Gibson
2017-09-22 12:26 ` Cédric Le Goater
2017-09-28 8:27 ` Benjamin Herrenschmidt
2017-09-20 13:05 ` Cédric Le Goater
2017-09-28 8:29 ` Benjamin Herrenschmidt
2017-09-28 13:20 ` David Gibson
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 08/21] ppc/xive: describe the XIVE interrupt source flags Cédric Le Goater
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 09/21] ppc/xive: extend the interrupt presenter model for XIVE Cédric Le Goater
2017-09-19 7:36 ` David Gibson
2017-09-19 19:28 ` Cédric Le Goater
2017-09-22 10:58 ` David Gibson
2017-09-22 12:27 ` Cédric Le Goater
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 10/21] ppc/xive: add MMIO handlers for the XIVE TIMA Cédric Le Goater
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 11/21] ppc/xive: push the EQ data in OS event queue Cédric Le Goater
2017-09-19 7:45 ` David Gibson
2017-09-19 19:36 ` Cédric Le Goater
2017-09-20 6:34 ` David Gibson
2017-09-28 8:12 ` Benjamin Herrenschmidt
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 12/21] ppc/xive: notify the CPU when interrupt priority is more privileged Cédric Le Goater
2017-09-19 7:50 ` David Gibson
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 13/21] ppc/xive: handle interrupt acknowledgment by the O/S Cédric Le Goater
2017-09-19 7:53 ` David Gibson
2017-09-20 9:40 ` Cédric Le Goater
2017-09-28 8:14 ` Benjamin Herrenschmidt
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 14/21] ppc/xive: add support for the SET_OS_PENDING command Cédric Le Goater
2017-09-19 7:55 ` David Gibson
2017-09-20 9:47 ` Cédric Le Goater
2017-09-28 8:18 ` Benjamin Herrenschmidt
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 15/21] spapr: modify spapr_populate_pci_dt() to use a 'nr_irqs' argument Cédric Le Goater
2017-09-19 7:56 ` David Gibson
2017-09-20 9:49 ` Cédric Le Goater
2017-09-11 17:12 ` Cédric Le Goater [this message]
2017-09-19 8:38 ` [Qemu-devel] [RFC PATCH v2 16/21] spapr: add a XIVE object to the sPAPR machine David Gibson
2017-09-20 9:51 ` Cédric Le Goater
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 17/21] ppc/xive: add hcalls support Cédric Le Goater
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 18/21] ppc/xive: add device tree support Cédric Le Goater
2017-09-19 8:44 ` David Gibson
2017-09-20 12:26 ` Cédric Le Goater
2017-09-21 1:35 ` David Gibson
2017-09-21 11:21 ` Cédric Le Goater
2017-09-22 10:54 ` David Gibson
2017-09-28 8:43 ` Benjamin Herrenschmidt
2017-09-28 8:51 ` Cédric Le Goater
2017-09-28 10:03 ` Benjamin Herrenschmidt
2017-09-28 12:50 ` Cédric Le Goater
2017-09-28 8:31 ` Benjamin Herrenschmidt
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 19/21] ppc/xive: introduce a helper to map the XIVE memory regions Cédric Le Goater
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 20/21] ppc/xics: introduce a qirq_get() helper in the XICSFabric Cédric Le Goater
2017-09-11 17:12 ` [Qemu-devel] [RFC PATCH v2 21/21] spapr: activate XIVE exploitation mode Cédric Le Goater
2017-09-19 8:20 ` [Qemu-devel] [RFC PATCH v2 00/21] Guest exploitation of the XIVE interrupt controller (POWER9) David Gibson
2017-09-19 8:46 ` David Gibson
2017-09-20 12:33 ` Cédric Le Goater
2017-09-21 1:25 ` David Gibson
2017-09-21 14:18 ` Cédric Le Goater
2017-09-22 10:33 ` David Gibson
2017-09-22 12:32 ` Cédric Le Goater
2017-09-28 8:23 ` Benjamin Herrenschmidt
2017-09-28 13:17 ` David Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170911171235.29331-17-clg@kaod.org \
--to=clg@kaod.org \
--cc=agraf@suse.de \
--cc=aik@ozlabs.ru \
--cc=benh@kernel.crashing.org \
--cc=david@gibson.dropbear.id.au \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).