Message ID | 20240724212130.26811-12-kowal@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | XIVE changes for Cache Watch, VSTs, STT and info pic | expand |
On 7/24/24 23:21, Michael Kowal wrote: > From: Frederic Barrat <fbarrat@linux.ibm.com> > > Additional END state 'info pic' information as added. The 'ignore', > 'crowd' and 'precluded escalation control' bits of an Event Notification > Descriptor are all used when delivering an interrupt targeting a VP-group > or crowd. > > Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com> > Signed-off-by: Michael Kowal <kowal@linux.vnet.ibm.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Thanks, C. > --- > include/hw/ppc/xive2_regs.h | 7 +++++++ > hw/intc/xive2.c | 7 +++++-- > 2 files changed, 12 insertions(+), 2 deletions(-) > > diff --git a/include/hw/ppc/xive2_regs.h b/include/hw/ppc/xive2_regs.h > index ec5d6ec2d6..4349d009d0 100644 > --- a/include/hw/ppc/xive2_regs.h > +++ b/include/hw/ppc/xive2_regs.h > @@ -97,6 +97,7 @@ typedef struct Xive2End { > uint32_t w6; > #define END2_W6_FORMAT_BIT PPC_BIT32(0) > #define END2_W6_IGNORE PPC_BIT32(1) > +#define END2_W6_CROWD PPC_BIT32(2) > #define END2_W6_VP_BLOCK PPC_BITMASK32(4, 7) > #define END2_W6_VP_OFFSET PPC_BITMASK32(8, 31) > #define END2_W6_VP_OFFSET_GEN1 PPC_BITMASK32(13, 31) > @@ -111,6 +112,8 @@ typedef struct Xive2End { > #define xive2_end_is_notify(end) \ > (be32_to_cpu((end)->w0) & END2_W0_UCOND_NOTIFY) > #define xive2_end_is_backlog(end) (be32_to_cpu((end)->w0) & END2_W0_BACKLOG) > +#define xive2_end_is_precluded_escalation(end) \ > + (be32_to_cpu((end)->w0) & END2_W0_PRECL_ESC_CTL) > #define xive2_end_is_escalate(end) \ > (be32_to_cpu((end)->w0) & END2_W0_ESCALATE_CTL) > #define xive2_end_is_uncond_escalation(end) \ > @@ -123,6 +126,10 @@ typedef struct Xive2End { > (be32_to_cpu((end)->w0) & END2_W0_FIRMWARE1) > #define xive2_end_is_firmware2(end) \ > (be32_to_cpu((end)->w0) & END2_W0_FIRMWARE2) > +#define xive2_end_is_ignore(end) \ > + (be32_to_cpu((end)->w6) & END2_W6_IGNORE) > +#define xive2_end_is_crowd(end) \ > + (be32_to_cpu((end)->w6) & END2_W6_CROWD) > > static inline uint64_t xive2_end_qaddr(Xive2End *end) > { > diff --git a/hw/intc/xive2.c b/hw/intc/xive2.c > index ac914b3d1c..1f150685bf 100644 > --- a/hw/intc/xive2.c > +++ b/hw/intc/xive2.c > @@ -89,7 +89,7 @@ void xive2_end_pic_print_info(Xive2End *end, uint32_t end_idx, GString *buf) > pq = xive_get_field32(END2_W1_ESn, end->w1); > > g_string_append_printf(buf, > - " %08x %c%c %c%c%c%c%c%c%c%c%c%c " > + " %08x %c%c %c%c%c%c%c%c%c%c%c%c%c %c%c " > "prio:%d nvp:%02x/%04x", > end_idx, > pq & XIVE_ESB_VAL_P ? 'P' : '-', > @@ -98,12 +98,15 @@ void xive2_end_pic_print_info(Xive2End *end, uint32_t end_idx, GString *buf) > xive2_end_is_enqueue(end) ? 'q' : '-', > xive2_end_is_notify(end) ? 'n' : '-', > xive2_end_is_backlog(end) ? 'b' : '-', > + xive2_end_is_precluded_escalation(end) ? 'p' : '-', > xive2_end_is_escalate(end) ? 'e' : '-', > xive2_end_is_escalate_end(end) ? 'N' : '-', > xive2_end_is_uncond_escalation(end) ? 'u' : '-', > xive2_end_is_silent_escalation(end) ? 's' : '-', > xive2_end_is_firmware1(end) ? 'f' : '-', > xive2_end_is_firmware2(end) ? 'F' : '-', > + xive2_end_is_ignore(end) ? 'i' : '-', > + xive2_end_is_crowd(end) ? 'c' : '-', > priority, nvp_blk, nvp_idx); > > if (qaddr_base) { > @@ -676,7 +679,7 @@ static void xive2_router_end_notify(Xive2Router *xrtr, uint8_t end_blk, > } > > found = xive_presenter_notify(xrtr->xfb, format, nvp_blk, nvp_idx, > - xive_get_field32(END2_W6_IGNORE, end.w7), > + xive2_end_is_ignore(&end), > priority, > xive_get_field32(END2_W7_F1_LOG_SERVER_ID, end.w7)); >
diff --git a/include/hw/ppc/xive2_regs.h b/include/hw/ppc/xive2_regs.h index ec5d6ec2d6..4349d009d0 100644 --- a/include/hw/ppc/xive2_regs.h +++ b/include/hw/ppc/xive2_regs.h @@ -97,6 +97,7 @@ typedef struct Xive2End { uint32_t w6; #define END2_W6_FORMAT_BIT PPC_BIT32(0) #define END2_W6_IGNORE PPC_BIT32(1) +#define END2_W6_CROWD PPC_BIT32(2) #define END2_W6_VP_BLOCK PPC_BITMASK32(4, 7) #define END2_W6_VP_OFFSET PPC_BITMASK32(8, 31) #define END2_W6_VP_OFFSET_GEN1 PPC_BITMASK32(13, 31) @@ -111,6 +112,8 @@ typedef struct Xive2End { #define xive2_end_is_notify(end) \ (be32_to_cpu((end)->w0) & END2_W0_UCOND_NOTIFY) #define xive2_end_is_backlog(end) (be32_to_cpu((end)->w0) & END2_W0_BACKLOG) +#define xive2_end_is_precluded_escalation(end) \ + (be32_to_cpu((end)->w0) & END2_W0_PRECL_ESC_CTL) #define xive2_end_is_escalate(end) \ (be32_to_cpu((end)->w0) & END2_W0_ESCALATE_CTL) #define xive2_end_is_uncond_escalation(end) \ @@ -123,6 +126,10 @@ typedef struct Xive2End { (be32_to_cpu((end)->w0) & END2_W0_FIRMWARE1) #define xive2_end_is_firmware2(end) \ (be32_to_cpu((end)->w0) & END2_W0_FIRMWARE2) +#define xive2_end_is_ignore(end) \ + (be32_to_cpu((end)->w6) & END2_W6_IGNORE) +#define xive2_end_is_crowd(end) \ + (be32_to_cpu((end)->w6) & END2_W6_CROWD) static inline uint64_t xive2_end_qaddr(Xive2End *end) { diff --git a/hw/intc/xive2.c b/hw/intc/xive2.c index ac914b3d1c..1f150685bf 100644 --- a/hw/intc/xive2.c +++ b/hw/intc/xive2.c @@ -89,7 +89,7 @@ void xive2_end_pic_print_info(Xive2End *end, uint32_t end_idx, GString *buf) pq = xive_get_field32(END2_W1_ESn, end->w1); g_string_append_printf(buf, - " %08x %c%c %c%c%c%c%c%c%c%c%c%c " + " %08x %c%c %c%c%c%c%c%c%c%c%c%c%c %c%c " "prio:%d nvp:%02x/%04x", end_idx, pq & XIVE_ESB_VAL_P ? 'P' : '-', @@ -98,12 +98,15 @@ void xive2_end_pic_print_info(Xive2End *end, uint32_t end_idx, GString *buf) xive2_end_is_enqueue(end) ? 'q' : '-', xive2_end_is_notify(end) ? 'n' : '-', xive2_end_is_backlog(end) ? 'b' : '-', + xive2_end_is_precluded_escalation(end) ? 'p' : '-', xive2_end_is_escalate(end) ? 'e' : '-', xive2_end_is_escalate_end(end) ? 'N' : '-', xive2_end_is_uncond_escalation(end) ? 'u' : '-', xive2_end_is_silent_escalation(end) ? 's' : '-', xive2_end_is_firmware1(end) ? 'f' : '-', xive2_end_is_firmware2(end) ? 'F' : '-', + xive2_end_is_ignore(end) ? 'i' : '-', + xive2_end_is_crowd(end) ? 'c' : '-', priority, nvp_blk, nvp_idx); if (qaddr_base) { @@ -676,7 +679,7 @@ static void xive2_router_end_notify(Xive2Router *xrtr, uint8_t end_blk, } found = xive_presenter_notify(xrtr->xfb, format, nvp_blk, nvp_idx, - xive_get_field32(END2_W6_IGNORE, end.w7), + xive2_end_is_ignore(&end), priority, xive_get_field32(END2_W7_F1_LOG_SERVER_ID, end.w7));