From: David Gibson <david@gibson.dropbear.id.au>
To: "Cédric Le Goater" <clg@kaod.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Alexander Graf <agraf@suse.de>,
qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC PATCH 09/26] ppc/xive: add an overall memory region for the ESBs
Date: Tue, 25 Jul 2017 12:19:07 +1000 [thread overview]
Message-ID: <20170725021907.GD9471@umbus.fritz.box> (raw)
In-Reply-To: <9a97771c-7895-26af-d3b7-06404199684f@kaod.org>
[-- Attachment #1: Type: text/plain, Size: 7566 bytes --]
On Mon, Jul 24, 2017 at 03:25:29PM +0200, Cédric Le Goater wrote:
> On 07/24/2017 08:09 AM, Benjamin Herrenschmidt wrote:
> > On Mon, 2017-07-24 at 14:49 +1000, David Gibson wrote:
> >> On Wed, Jul 05, 2017 at 07:13:22PM +0200, Cédric Le Goater wrote:
> >>> Each source adds its own ESB mempry region to the overall ESB memory
> >>> region of the controller. It will be mapped in the CPU address space
> >>> when XIVE is activated.
> >>>
> >>> The default mapping address for the ESB memory region is the same one
> >>> used on baremetal.
> >>>
> >>> Signed-off-by: Cédric Le Goater <clg@kaod.org>
> >>> ---
> >>> hw/intc/xive-internal.h | 5 +++++
> >>> hw/intc/xive.c | 44 +++++++++++++++++++++++++++++++++++++++++++-
> >>> 2 files changed, 48 insertions(+), 1 deletion(-)
> >>>
> >>> diff --git a/hw/intc/xive-internal.h b/hw/intc/xive-internal.h
> >>> index 8e755aa88a14..c06be823aad0 100644
> >>> --- a/hw/intc/xive-internal.h
> >>> +++ b/hw/intc/xive-internal.h
> >>> @@ -98,6 +98,7 @@ struct XIVE {
> >>> SysBusDevice parent;
> >>>
> >>> /* Properties */
> >>> + uint32_t chip_id;
> >>
> >> So there is a XIVE object per chip. How does this work on PAPR? One
> >> logical chip/XIVE, or something more complex?
> >
> > One global XIVE for PAPR.
>
> Yes.
>
> The chip-id is useless for sPAPR (0 is the default) but for a PowerNV
> system, the address used to map the ESB memory region depends on the
> chip-id and I thought we could reuse the same XIVE object.
Hmm, maybe.
> So, a sPAPR guest would use the address of a single chip baremetal
> system. This needs more explanation I agree. Thanks to Ben who is
> providing a lot. I will update the changelogs in the next version.
> The TIMA is mapped at a fixed address so the chip-id does not come
> in play.
>
> > For the MMIOs, the way it works is that:
> >
> > - For MMIOs pertaining to a specific interrupt or queue, there's an H-
> > call that will return the proper "guest physical" address. For qemu
> > with KVM we'll have to probably create a single chunk of qemu address
> > space (a single mem region) that contains individual pages mapped with
> > MAP_FIXED originating from the different HW bits, we still need to sort
> > out how exactly we'll do that in practice.
>
> I haven't looked at all the KVM details. But, regarding the ESBs, I had
> the above in mind and used a single memory region to contain them all.
>
> > - For the TIMA (the presentation MMIOs), those are always at the same
> > physical address for everybody (so for a guest it's a single memory
> > region we'll map to that physical address), the HW "knows" which HW
> > thread is talking to it (and the hypervisor tells the HW which vcpu is
> > running on a given HW thread at a given point in time). That address is
> > obtained from the device-tree
> >
> >>> uint32_t nr_targets;
> >>>
> >>> /* IRQ number allocator */
> >>> @@ -111,6 +112,10 @@ struct XIVE {
> >>> void *sbe;
> >>> XiveIVE *ivt;
> >>> XiveEQ *eqdt;
> >>> +
> >>> + /* ESB and TIMA memory location */
> >>> + hwaddr vc_base;
> >>> + MemoryRegion esb_iomem;
> >>> };
> >>>
> >>> void xive_reset(void *dev);
> >>> diff --git a/hw/intc/xive.c b/hw/intc/xive.c
> >>> index 8f8bb8b787bd..a1cb87a07b76 100644
> >>> --- a/hw/intc/xive.c
> >>> +++ b/hw/intc/xive.c
> >>> @@ -312,6 +312,7 @@ static void xive_ics_realize(ICSState *ics, Error **errp)
> >>> XiveICSState *xs = ICS_XIVE(ics);
> >>> Object *obj;
> >>> Error *err = NULL;
> >>> + XIVE *x;
> >>
> >> I don't really like just 'x' for a context variable like this (as
> >> opposed to a temporary).
>
> OK. I will change 'x' in 'xive' then.
>
> >>>
> >>> obj = object_property_get_link(OBJECT(xs), "xive", &err);
> >>> if (!obj) {
> >>> @@ -319,7 +320,7 @@ static void xive_ics_realize(ICSState *ics, Error **errp)
> >>> __func__, error_get_pretty(err));
> >>> return;
> >>> }
> >>> - xs->xive = XIVE(obj);
> >>> + x = xs->xive = XIVE(obj);
> >>>
> >>> if (!ics->nr_irqs) {
> >>> error_setg(errp, "Number of interrupts needs to be greater 0");
> >>> @@ -338,6 +339,11 @@ static void xive_ics_realize(ICSState *ics, Error **errp)
> >>> "xive.esb",
> >>> (1ull << xs->esb_shift) * ICS_BASE(xs)->nr_irqs);
> >>>
> >>> + /* Install the ESB memory region in the overall one */
> >>> + memory_region_add_subregion(&x->esb_iomem,
> >>> + ICS_BASE(xs)->offset * (1 << xs->esb_shift),
> >>> + &xs->esb_iomem);
> >>> +
> >>> qemu_register_reset(xive_ics_reset, xs);
> >>> }
> >>>
> >>> @@ -375,6 +381,32 @@ static const TypeInfo xive_ics_info = {
> >>> */
> >>> #define MAX_HW_IRQS_ENTRIES (8 * 1024)
> >>>
> >>> +/* VC BAR contains set translations for the ESBs and the EQs. */
> >>> +#define VC_BAR_DEFAULT 0x10000000000ull
> >>> +#define VC_BAR_SIZE 0x08000000000ull
> >>> +
> >>> +#define P9_MMIO_BASE 0x006000000000000ull
> >>> +#define P9_CHIP_BASE(id) (P9_MMIO_BASE | (0x40000000000ull * (uint64_t) (id)))
> >>
> >> chip-based MMIO addresses leaking into the PAPR model seems like it
> >> might not be what you want
>
> See above for the reason.
>
>
> Thanks,
>
> C.
>
> >>
> >>> +static uint64_t xive_esb_default_read(void *p, hwaddr offset, unsigned size)
> >>> +{
> >>> + qemu_log_mask(LOG_UNIMP, "%s: 0x%" HWADDR_PRIx " [%u]\n",
> >>> + __func__, offset, size);
> >>> + return 0;
> >>> +}
> >>> +
> >>> +static void xive_esb_default_write(void *opaque, hwaddr offset, uint64_t value,
> >>> + unsigned size)
> >>> +{
> >>> + qemu_log_mask(LOG_UNIMP, "%s: 0x%" HWADDR_PRIx " <- 0x%" PRIx64 " [%u]\n",
> >>> + __func__, offset, value, size);
> >>> +}
> >>> +
> >>> +static const MemoryRegionOps xive_esb_default_ops = {
> >>> + .read = xive_esb_default_read,
> >>> + .write = xive_esb_default_write,
> >>> + .endianness = DEVICE_BIG_ENDIAN,
> >>> +};
> >>>
> >>> void xive_reset(void *dev)
> >>> {
> >>> @@ -435,10 +467,20 @@ static void xive_realize(DeviceState *dev, Error **errp)
> >>> x->eqdt = g_malloc0(x->nr_targets * XIVE_EQ_PRIORITY_COUNT *
> >>> sizeof(XiveEQ));
> >>>
> >>> + /* VC BAR. That's the full window but we will only map the
> >>> + * subregions in use. */
> >>> + x->vc_base = (hwaddr)(P9_CHIP_BASE(x->chip_id) | VC_BAR_DEFAULT);
> >>> +
> >>> + /* install default memory region handlers to log bogus access */
> >>> + memory_region_init_io(&x->esb_iomem, NULL, &xive_esb_default_ops,
> >>> + NULL, "xive.esb", VC_BAR_SIZE);
> >>> + sysbus_init_mmio(SYS_BUS_DEVICE(dev), &x->esb_iomem);
> >>> +
> >>> qemu_register_reset(xive_reset, dev);
> >>> }
> >>>
> >>> static Property xive_properties[] = {
> >>> + DEFINE_PROP_UINT32("chip-id", XIVE, chip_id, 0),
> >>> DEFINE_PROP_UINT32("nr-targets", XIVE, nr_targets, 0),
> >>> DEFINE_PROP_END_OF_LIST(),
> >>> };
> >>
> >>
>
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2017-07-25 2:19 UTC|newest]
Thread overview: 122+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-05 17:13 [Qemu-devel] [RFC PATCH 00/26] guest exploitation of the XIVE interrupt controller (POWER9) Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 01/26] spapr: introduce the XIVE_EXPLOIT option in CAS Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 02/26] spapr: populate device tree depending on XIVE_EXPLOIT option Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 03/26] target/ppc/POWER9: add POWERPC_EXCP_POWER9 Cédric Le Goater
2017-07-10 10:26 ` David Gibson
2017-07-10 12:49 ` Cédric Le Goater
2017-07-10 21:00 ` Benjamin Herrenschmidt
2017-07-11 9:01 ` Cédric Le Goater
2017-07-11 13:27 ` David Gibson
2017-07-11 13:52 ` Cédric Le Goater
2017-07-11 21:20 ` Benjamin Herrenschmidt
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 04/26] ppc/xive: introduce a skeleton for the XIVE interrupt controller model Cédric Le Goater
2017-07-19 3:08 ` David Gibson
2017-07-19 3:23 ` David Gibson
2017-07-19 3:56 ` Benjamin Herrenschmidt
2017-07-19 4:01 ` David Gibson
2017-07-19 4:18 ` Benjamin Herrenschmidt
2017-07-19 4:25 ` David Gibson
2017-07-19 4:02 ` Benjamin Herrenschmidt
2017-07-21 7:50 ` David Gibson
2017-07-21 8:21 ` Benjamin Herrenschmidt
2017-07-24 3:28 ` David Gibson
2017-07-24 3:53 ` Alexey Kardashevskiy
2017-07-24 5:04 ` Benjamin Herrenschmidt
2017-07-24 5:38 ` David Gibson
2017-07-24 7:20 ` Benjamin Herrenschmidt
2017-07-24 10:03 ` David Gibson
2017-07-25 8:52 ` Cédric Le Goater
2017-07-25 12:39 ` David Gibson
2017-07-25 13:48 ` Cédric Le Goater
2017-07-24 13:00 ` Cédric Le Goater
2017-07-25 1:26 ` [Qemu-devel] [Qemu-ppc] " Alexey Kardashevskiy
2017-07-25 2:17 ` David Gibson
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 05/26] ppc/xive: define XIVE internal tables Cédric Le Goater
2017-07-19 3:24 ` David Gibson
2017-07-24 12:52 ` Cédric Le Goater
2017-07-25 2:16 ` David Gibson
2017-07-25 15:54 ` Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 06/26] ppc/xive: introduce a XIVE interrupt source model Cédric Le Goater
2017-07-24 4:02 ` David Gibson
2017-07-24 6:00 ` Alexey Kardashevskiy
2017-07-24 15:20 ` Cédric Le Goater
2017-07-25 3:06 ` Alexey Kardashevskiy
2017-07-24 15:13 ` Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 07/26] ppc/xive: add MMIO handlers to the XIVE interrupt source Cédric Le Goater
2017-07-24 4:29 ` David Gibson
2017-07-24 8:56 ` Benjamin Herrenschmidt
2017-07-24 15:55 ` Cédric Le Goater
2017-07-25 12:21 ` David Gibson
2017-07-25 15:42 ` Cédric Le Goater
2017-07-24 6:50 ` Alexey Kardashevskiy
2017-07-24 15:39 ` Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 08/26] ppc/xive: add flags " Cédric Le Goater
2017-07-24 4:36 ` David Gibson
2017-07-24 7:00 ` Benjamin Herrenschmidt
2017-07-24 9:50 ` David Gibson
2017-07-24 11:07 ` Benjamin Herrenschmidt
2017-07-24 11:47 ` Cédric Le Goater
2017-07-25 4:19 ` David Gibson
2017-07-25 5:49 ` Benjamin Herrenschmidt
2017-07-25 4:18 ` David Gibson
2017-07-25 5:47 ` Benjamin Herrenschmidt
2017-07-25 8:28 ` Cédric Le Goater
2017-07-25 12:24 ` David Gibson
2017-07-25 8:17 ` Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 09/26] ppc/xive: add an overall memory region for the ESBs Cédric Le Goater
2017-07-24 4:49 ` David Gibson
2017-07-24 6:09 ` Benjamin Herrenschmidt
2017-07-24 6:39 ` David Gibson
2017-07-24 13:27 ` Cédric Le Goater
2017-07-25 2:19 ` David Gibson
2017-07-24 13:25 ` Cédric Le Goater
2017-07-25 2:19 ` David Gibson [this message]
2017-07-25 9:50 ` Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 10/26] ppc/xive: record interrupt source MMIO address for hcalls Cédric Le Goater
2017-07-24 5:11 ` David Gibson
2017-07-24 13:45 ` Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 11/26] ppc/xics: introduce a print_info() handler to the ICS and ICP objects Cédric Le Goater
2017-07-24 5:13 ` David Gibson
2017-07-24 13:58 ` Cédric Le Goater
2017-07-25 13:26 ` David Gibson
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 12/26] ppc/xive: add a print_info() handler for the interrupt source Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 13/26] ppc/xive: introduce a XIVE interrupt presenter model Cédric Le Goater
2017-07-24 6:05 ` David Gibson
2017-07-24 14:02 ` Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 14/26] ppc/xive: add MMIO handlers to the " Cédric Le Goater
2017-07-24 6:35 ` David Gibson
2017-07-24 14:44 ` Cédric Le Goater
2017-07-25 4:20 ` David Gibson
2017-07-25 9:08 ` Cédric Le Goater
2017-07-25 13:21 ` David Gibson
2017-07-25 15:01 ` Cédric Le Goater
2017-07-26 2:02 ` David Gibson
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 15/26] ppc/xive: push EQ data in OS event queues Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 16/26] ppc/xive: notify CPU when interrupt priority is more privileged Cédric Le Goater
2017-09-09 7:39 ` Benjamin Herrenschmidt
2017-09-09 8:08 ` Cédric Le Goater
2017-09-09 8:40 ` Benjamin Herrenschmidt
2017-09-09 8:24 ` Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 17/26] ppc/xive: add hcalls support Cédric Le Goater
2017-07-24 9:39 ` [Qemu-devel] [Qemu-ppc] " Alexey Kardashevskiy
2017-07-24 14:55 ` Cédric Le Goater
2017-07-25 2:09 ` Alexey Kardashevskiy
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 18/26] ppc/xive: add device tree support Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 19/26] ppc/xive: introduce a helper to map the XIVE memory regions Cédric Le Goater
2017-07-25 2:54 ` [Qemu-devel] [Qemu-ppc] " Alexey Kardashevskiy
2017-07-25 9:18 ` Cédric Le Goater
2017-07-25 14:16 ` Alexey Kardashevskiy
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 20/26] ppc/xive: introduce a helper to create XIVE interrupt source objects Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 21/26] ppc/xive: introduce routines to allocate IRQ numbers Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 22/26] ppc/xive: create an XIVE interrupt source to handle IPIs Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 23/26] spapr: add a XIVE object to the sPAPR machine Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 24/26] spapr: include the XIVE interrupt source for IPIs Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 25/26] spapr: print the XIVE interrupt source for IPIs in the monitor Cédric Le Goater
2017-07-05 17:13 ` [Qemu-devel] [RFC PATCH 26/26] spapr: force XIVE exploitation mode for POWER9 (HACK) Cédric Le Goater
2017-07-25 2:43 ` [Qemu-devel] [Qemu-ppc] " Alexey Kardashevskiy
2017-07-25 9:20 ` Cédric Le Goater
2017-07-10 10:24 ` [Qemu-devel] [RFC PATCH 00/26] guest exploitation of the XIVE interrupt controller (POWER9) David Gibson
2017-07-10 12:36 ` Cédric Le Goater
2017-07-19 3:00 ` David Gibson
2017-07-19 3:55 ` Benjamin Herrenschmidt
2017-07-24 7:28 ` Cédric Le Goater
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=20170725021907.GD9471@umbus.fritz.box \
--to=david@gibson.dropbear.id.au \
--cc=agraf@suse.de \
--cc=benh@kernel.crashing.org \
--cc=clg@kaod.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.