powerpc/xive: Move definition of ESB bits
PATCH 1/2 powerpc/xive: Move definition of ESB bits
Quoted 1 line
From
xive.htoxive-regs.hsince it's a HW register definition
and it can be used from assembly
--- arch/powerpc/include/asm/xive-regs.h | 35 +++++++++++++++++++++++++++++++++++ arch/powerpc/include/asm/xive.h | 35 ----------------------------------- 2 files changed, 35 insertions(+), 35 deletions(-)
arch/powerpc/include/asm/xive-regs.h +35 -0
@@ -9,6 +9,41 @@#ifndef _ASM_POWERPC_XIVE_REGS_H#define _ASM_POWERPC_XIVE_REGS_H +/* +* "magic" Event State Buffer (ESB) MMIO offsets. +* +* Each interrupt source has a 2-bit state machine called ESB +* which can be controlled by MMIO. It's made of 2 bits, P and +* Q. P indicates that an interrupt is pending (has been sent +* to a queue and is waiting for an EOI). Q indicates that the +* interrupt has been triggered while pending. +* +* This acts as a coalescing mechanism in order to guarantee +* that a given interrupt only occurs at most once in a queue. +* +* When doing an EOI, the Q bit will indicate if the interrupt +* needs to be re-triggered. +* +* The following offsets into the ESB MMIO allow to read or +* manipulate the PQ bits. They must be used with an 8-bytes +* load instruction. They all return the previous state of the +* interrupt (atomically). +* +* Additionally, some ESB pages support doing an EOI via a +* store at 0 and some ESBs support doing a trigger via a +* separate trigger page. +*/ +#define XIVE_ESB_STORE_EOI 0x400/* Store */ +#define XIVE_ESB_LOAD_EOI 0x000/* Load */ +#define XIVE_ESB_GET 0x800/* Load */ +#define XIVE_ESB_SET_PQ_00 0xc00/* Load */ +#define XIVE_ESB_SET_PQ_01 0xd00/* Load */ +#define XIVE_ESB_SET_PQ_10 0xe00/* Load */ +#define XIVE_ESB_SET_PQ_11 0xf00/* Load */ + +#define XIVE_ESB_VAL_P 0x2 +#define XIVE_ESB_VAL_Q 0x1 +/* * Thread Management (aka "TM") registers */
arch/powerpc/include/asm/xive.h +0 -35
@@ -72,41 +72,6 @@ struct xive_q {atomic_t pending_count; }; -/* -* "magic" Event State Buffer (ESB) MMIO offsets. -* -* Each interrupt source has a 2-bit state machine called ESB -* which can be controlled by MMIO. It's made of 2 bits, P and -* Q. P indicates that an interrupt is pending (has been sent -* to a queue and is waiting for an EOI). Q indicates that the -* interrupt has been triggered while pending. -* -* This acts as a coalescing mechanism in order to guarantee -* that a given interrupt only occurs at most once in a queue. -* -* When doing an EOI, the Q bit will indicate if the interrupt -* needs to be re-triggered. -* -* The following offsets into the ESB MMIO allow to read or -* manipulate the PQ bits. They must be used with an 8-bytes -* load instruction. They all return the previous state of the -* interrupt (atomically). -* -* Additionally, some ESB pages support doing an EOI via a -* store at 0 and some ESBs support doing a trigger via a -* separate trigger page. -*/ -#define XIVE_ESB_STORE_EOI 0x400/* Store */ -#define XIVE_ESB_LOAD_EOI 0x000/* Load */ -#define XIVE_ESB_GET 0x800/* Load */ -#define XIVE_ESB_SET_PQ_00 0xc00/* Load */ -#define XIVE_ESB_SET_PQ_01 0xd00/* Load */ -#define XIVE_ESB_SET_PQ_10 0xe00/* Load */ -#define XIVE_ESB_SET_PQ_11 0xf00/* Load */ - -#define XIVE_ESB_VAL_P 0x2 -#define XIVE_ESB_VAL_Q 0x1 -/* Global enable flags for the XIVE support */ extern bool __xive_enabled;
Signature · 1 line
2.14.3
PATCH 2/2 powerpc/xive: Add interrupt flag to disable automatic EOI
This will be used by KVM in order to keep escalation interrupts in the non-EOI (masked) state after they fire. They will be re-enabled directly in HW by KVM when needed.
--- arch/powerpc/include/asm/xive.h | 3 +++ arch/powerpc/sysdev/xive/common.c | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-)
arch/powerpc/include/asm/xive.h +3 -0
@@ -58,6 +58,9 @@ struct xive_irq_data {#define XIVE_IRQ_FLAG_EOI_FW 0x10#define XIVE_IRQ_FLAG_H_INT_ESB 0x20 +/* Special flag set by KVM for excalation interrupts */ +#define XIVE_IRQ_NO_EOI 0x80 +#define XIVE_INVALID_CHIP_ID -1/* A queue tracking structure in a CPU */
arch/powerpc/sysdev/xive/common.c +2 -1
@@ -367,7 +367,8 @@ static void xive_irq_eoi(struct irq_data *d)* EOI the source if it hasn't been disabled and hasn't * been passed-through to a KVM guest */ -if (!irqd_irq_disabled (d) && !irqd_is_forwarded_to_vcpu (d)) +if (!irqd_irq_disabled (d) && !irqd_is_forwarded_to_vcpu (d) && + !(xd->flags &XIVE_IRQ_NO_EOI ))xive_do_source_eoi (irqd_to_hwirq (d), xd);/*
Signature · 1 line
2.14.3
Quoted 4 lines · Benjamin Herrenschmidt
Quoted 1 line
From
xive.htoxive-regs.hsince it's a HW register definitionand it can be used from assembly
Signed-off-by Benjamin Herrenschmidt <[email protected]>
Series applied to topics/ppc-kvm, thanks.
https://git.kernel.org/powerpc/c/12c1f339cd49119e39063ae67f02d9
cheers
Quoted 4 lines · Benjamin Herrenschmidt
Quoted 1 line
From
xive.htoxive-regs.hsince it's a HW register definitionand it can be used from assembly
Signed-off-by Benjamin Herrenschmidt <[email protected]>
Series applied to powerpc next, thanks.
https://git.kernel.org/powerpc/c/12c1f339cd49119e39063ae67f02d9
cheers