aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hw/intc/xive.c8
-rw-r--r--include/hw/ppc/xive_regs.h2
2 files changed, 10 insertions, 0 deletions
diff --git a/hw/intc/xive.c b/hw/intc/xive.c
index 3fe84f3..dd7d02d 100644
--- a/hw/intc/xive.c
+++ b/hw/intc/xive.c
@@ -1486,6 +1486,13 @@ static void xive_router_end_notify(XiveRouter *xrtr, uint8_t end_blk,
}
/*
+ * When the END is silent, we skip the notification part.
+ */
+ if (xive_end_is_silent_escalation(&end)) {
+ goto do_escalation;
+ }
+
+ /*
* The W7 format depends on the F bit in W6. It defines the type
* of the notification :
*
@@ -1564,6 +1571,7 @@ static void xive_router_end_notify(XiveRouter *xrtr, uint8_t end_blk,
*/
}
+do_escalation:
/*
* If activated, escalate notification using the ESe PQ bits and
* the EAS in w4-5
diff --git a/include/hw/ppc/xive_regs.h b/include/hw/ppc/xive_regs.h
index 4378d72..fed0195 100644
--- a/include/hw/ppc/xive_regs.h
+++ b/include/hw/ppc/xive_regs.h
@@ -212,6 +212,8 @@ typedef struct XiveEND {
#define xive_end_is_escalate(end) (be32_to_cpu((end)->w0) & END_W0_ESCALATE_CTL)
#define xive_end_is_uncond_escalation(end) \
(be32_to_cpu((end)->w0) & END_W0_UNCOND_ESCALATE)
+#define xive_end_is_silent_escalation(end) \
+ (be32_to_cpu((end)->w0) & END_W0_SILENT_ESCALATE)
static inline uint64_t xive_end_qaddr(XiveEND *end)
{