linux/arch/powerpc/sysdev
Cédric Le Goater eac1e731b5 powerpc/xive: guest exploitation of the XIVE interrupt controller
This is the framework for using XIVE in a PowerVM guest. The support
is very similar to the native one in a much simpler form.

Each source is associated with an Event State Buffer (ESB). This is a
two bit state machine which is used to trigger events. The bits are
named "P" (pending) and "Q" (queued) and can be controlled by MMIO.
The Guest OS registers event (or notifications) queues on which the HW
will post event data for a target to notify.

Instead of OPAL calls, a set of Hypervisors call are used to configure
the interrupt sources and the event/notification queues of the guest:

 - H_INT_GET_SOURCE_INFO

   used to obtain the address of the MMIO page of the Event State
   Buffer (PQ bits) entry associated with the source.

 - H_INT_SET_SOURCE_CONFIG

   assigns a source to a "target".

 - H_INT_GET_SOURCE_CONFIG

   determines to which "target" and "priority" is assigned to a source

 - H_INT_GET_QUEUE_INFO

   returns the address of the notification management page associated
   with the specified "target" and "priority".

 - H_INT_SET_QUEUE_CONFIG

   sets or resets the event queue for a given "target" and "priority".
   It is also used to set the notification config associated with the
   queue, only unconditional notification for the moment.  Reset is
   performed with a queue size of 0 and queueing is disabled in that
   case.

 - H_INT_GET_QUEUE_CONFIG

   returns the queue settings for a given "target" and "priority".

 - H_INT_RESET

   resets all of the partition's interrupt exploitation structures to
   their initial state, losing all configuration set via the hcalls
   H_INT_SET_SOURCE_CONFIG and H_INT_SET_QUEUE_CONFIG.

 - H_INT_SYNC

   issue a synchronisation on a source to make sure sure all
   notifications have reached their queue.

As for XICS, the XIVE interface for the guest is described in the
device tree under the "interrupt-controller" node. A couple of new
properties are specific to XIVE :

 - "reg"

   contains the base address and size of the thread interrupt
   managnement areas (TIMA), also called rings, for the User level and
   for the Guest OS level. Only the Guest OS level is taken into
   account today.

 - "ibm,xive-eq-sizes"

   the size of the event queues. One cell per size supported, contains
   log2 of size, in ascending order.

 - "ibm,xive-lisn-ranges"

   the interrupt numbers ranges assigned to the guest. These are
   allocated using a simple bitmap.

and also :

 - "/ibm,plat-res-int-priorities"

   contains a list of priorities that the hypervisor has reserved for
   its own use.

Tested with a QEMU XIVE model for pseries and with the Power hypervisor.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2017-09-02 21:02:35 +10:00
..
ge powerpc: Remove all usages of NO_IRQ 2016-09-20 20:57:12 +10:00
xics powerpc/powernv: Fix oops on P9 DD1 in cause_ipi() 2017-04-26 23:28:12 +10:00
xive powerpc/xive: guest exploitation of the XIVE interrupt controller 2017-09-02 21:02:35 +10:00
6xx-suspend.S powerpc: Use CURRENT_THREAD_INFO instead of open coded assembly 2012-07-11 14:18:22 +10:00
axonram.c axonram: Return directly after a failed kzalloc() in axon_ram_probe() 2017-09-01 16:42:56 +10:00
cpm1.c powerpc/8xx: Adding support of IRQ in MPC8xx GPIO 2017-05-02 22:35:00 -05:00
cpm2.c soc/fsl/qe: fix Oops on CPM1 (and likely CPM2) 2016-09-25 02:38:52 -05:00
cpm2_pic.c powerpc/cpm2: Use irq_set_handler_locked() 2015-09-16 15:43:10 +02:00
cpm2_pic.h
cpm_common.c soc/fsl/qe: fix Oops on CPM1 (and likely CPM2) 2016-09-25 02:38:52 -05:00
dart.h
dart_iommu.c dma-mapping: use unsigned long for dma_attrs 2016-08-04 08:50:07 -04:00
dcr-low.S ppc: move exports to definitions 2016-08-07 23:50:09 -04:00
dcr.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
ehv_pic.c powerpc: Remove all usages of NO_IRQ 2016-09-20 20:57:12 +10:00
fsl_85xx_cache_ctlr.h powerpc/85xx: Fix sram_offset parameter type 2012-07-26 13:24:32 -05:00
fsl_85xx_cache_sram.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
fsl_85xx_l2ctlr.c powerpc/85xx: Don't report SRAM to L2 cache fallback as error 2016-07-08 19:55:34 -05:00
fsl_gtm.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
fsl_lbc.c powerpc/fsl-lbc: use DEFINE_SPINLOCK() 2016-12-09 23:08:40 -06:00
fsl_mpic_err.c powerpc: Remove all usages of NO_IRQ 2016-09-20 20:57:12 +10:00
fsl_mpic_timer_wakeup.c powerpc/fsl: add MPIC timer wakeup support 2013-07-01 18:38:42 -05:00
fsl_msi.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
fsl_msi.h powerpc/85xx: workaround for chips with MSI hardware errata 2015-03-23 19:51:18 -05:00
fsl_pci.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
fsl_pci.h EDAC, mpc85xx: Make mpc85xx-pci-edac a platform device 2015-12-11 16:56:16 +01:00
fsl_pmc.c powerpc/fsl_pmc: use builtin_platform_driver 2016-12-04 19:51:44 -06:00
fsl_rcpm.c powerpc/rcpm: Fix build break when SMP=n 2016-03-16 15:22:32 +11:00
fsl_rio.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
fsl_rio.h rapidio: add global inbound port write interfaces 2016-03-22 15:36:02 -07:00
fsl_rmu.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
fsl_soc.c powerpc/cpm1: link to CONFIG_CPM1 instead of CONFIG_8xx 2017-08-10 23:32:05 +10:00
fsl_soc.h powerpc/cpm1: link to CONFIG_CPM1 instead of CONFIG_8xx 2017-08-10 23:32:05 +10:00
grackle.c powerpc: rename ppc_pci_*_flags to pci_*_flags 2011-07-12 09:28:04 -05:00
i8259.c powerpc: Remove all usages of NO_IRQ 2016-09-20 20:57:12 +10:00
indirect_pci.c powerpc/fsl_pci: Fix pci stack build bug with FRAME_WARN 2015-01-29 19:56:15 -06:00
ipic.c powerpc/ipic: Support edge on IRQ0 2017-07-24 21:20:31 +10:00
ipic.h irq_domain/powerpc: Use common irq_domain structure instead of irq_host 2012-02-14 14:06:50 -07:00
Kconfig powerpc/xive: Native exploitation of the XIVE interrupt controller 2017-04-10 21:41:34 +10:00
Makefile powerpc/8xx: Move mpc8xx_pic.c from sysdev to platform/8xx 2017-08-10 23:32:07 +10:00
micropatch.c powerpc/8xx: Remove empty asm/mpc8xx.h 2014-06-25 18:49:40 -05:00
mmio_nvram.c powerpc/sparse: Make a bunch of things static 2016-09-13 17:35:47 +10:00
mpc5xxx_clocks.c powerpc/mpc5xxx: Use of_get_next_parent to simplify code 2015-10-15 20:32:01 +11:00
mpic.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
mpic.h powerpc/pasemi: Only the build the pasemi MSI code for PASEMI=y 2015-05-11 19:55:25 +10:00
mpic_msgr.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
mpic_msi.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
mpic_timer.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
mpic_u3msi.c powerpc: Remove all usages of NO_IRQ 2016-09-20 20:57:12 +10:00
msi_bitmap.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
mv64x60.h
mv64x60_dev.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
mv64x60_pci.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
mv64x60_pic.c powerpc: Remove all usages of NO_IRQ 2016-09-20 20:57:12 +10:00
mv64x60_udbg.c dt/bindings: Remove device_type "serial" from marvell,mv64360-mpsc 2014-01-16 16:31:31 +00:00
of_rtc.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
pmi.c powerpc: Remove all usages of NO_IRQ 2016-09-20 20:57:12 +10:00
rtc_cmos_setup.c PTR_RET is now PTR_ERR_OR_ZERO(): Replace most. 2013-07-15 11:25:01 +09:30
scom.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
simple_gpio.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
simple_gpio.h
tsi108_dev.c Disintegrate asm/system.h for PowerPC 2012-03-28 18:30:02 +01:00
tsi108_pci.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
udbg_memcons.c powerpc: Delete non-required instances of include <linux/init.h> 2014-01-15 13:46:44 +11:00
xilinx_intc.c powerpc/virtex: Use generic xilinx irqchip driver 2016-11-29 09:14:50 +00:00
xilinx_pci.c powerpc: make of_device_ids const 2014-09-25 23:14:46 +10:00