diff options
author | Cédric Le Goater <clg@kaod.org> | 2019-10-01 08:59:55 +0200 |
---|---|---|
committer | Oliver O'Halloran <oohall@gmail.com> | 2019-11-04 10:52:47 +1100 |
commit | f0e2746e7042e6e09c84c3f8d7ee2b0b0d559080 (patch) | |
tree | 50e29c7561e5c74fbc26baba34794bb50fbd1bd5 /hw/xive.c | |
parent | 4f0a563377dfddb6d1b17b8907089ef2bd4aa602 (diff) | |
download | skiboot-f0e2746e7042e6e09c84c3f8d7ee2b0b0d559080.zip skiboot-f0e2746e7042e6e09c84c3f8d7ee2b0b0d559080.tar.gz skiboot-f0e2746e7042e6e09c84c3f8d7ee2b0b0d559080.tar.bz2 |
xive/p9: introduce definitions for priorities
The priority number 7 is used in a couple of places but it has
different meanings. It can be the maximum priority number or the
escalation priority number.
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
Diffstat (limited to 'hw/xive.c')
-rw-r--r-- | hw/xive.c | 24 |
1 files changed, 16 insertions, 8 deletions
@@ -172,9 +172,15 @@ /* Number of priorities (and thus EQDs) we allocate for each VP */ #define NUM_INT_PRIORITIES 8 +/* Max priority number */ +#define XIVE_MAX_PRIO 7 + /* Priority used for the one queue in XICS emulation */ #define XIVE_EMULATION_PRIO 7 +/* Priority used for gather/silent escalation (KVM) */ +#define XIVE_ESCALATION_PRIO 7 + /* Max number of VPs. We allocate an indirect table big enough so * that when fully populated we can have that many VPs. * @@ -847,7 +853,8 @@ static uint32_t xive_alloc_eq_set(struct xive *x, bool alloc_indirect) eq_base_idx = idx << 3; - xive_vdbg(x, "Got EQs 0x%x..0x%x\n", eq_base_idx, eq_base_idx + 7); + xive_vdbg(x, "Got EQs 0x%x..0x%x\n", eq_base_idx, + eq_base_idx + XIVE_MAX_PRIO); /* Calculate the indirect page where the EQs reside */ ind_idx = eq_base_idx / EQ_PER_PAGE; @@ -893,7 +900,7 @@ static void xive_free_eq_set(struct xive *x, uint32_t eqs) { uint32_t idx; - xive_vdbg(x, "Freeing EQ 0x%x..0x%x\n", eqs, eqs + 7); + xive_vdbg(x, "Freeing EQ 0x%x..0x%x\n", eqs, eqs + XIVE_MAX_PRIO); assert((eqs & 7) == 0); assert(x->eq_map); @@ -2064,7 +2071,7 @@ static inline bool xive_eq_for_target(uint32_t target, uint8_t prio, uint32_t vp_blk, vp_idx; uint32_t eq_blk, eq_idx; - if (prio > 7) + if (prio > XIVE_MAX_PRIO) return false; /* Get the VP block/index from the target word */ @@ -2141,7 +2148,7 @@ static int64_t xive_set_irq_targetting(uint32_t isn, uint32_t target, xive_vdbg(x, "ISN %x masked !\n", isn); /* Put prio 7 in the EQ */ - prio = 7; + prio = XIVE_MAX_PRIO; } else { /* Unmasking */ new_ive = ive->w & ~IVE_MASKED; @@ -3724,7 +3731,7 @@ static int64_t opal_xive_get_queue_info(uint64_t vp, uint32_t prio, * the escalation interrupt number here. */ if (eq->w0 & EQ_W0_UNCOND_ESCALATE) - esc_idx |= 7; + esc_idx |= XIVE_ESCALATION_PRIO; *out_escalate_irq = MAKE_ESCALATION_GIRQ(blk, esc_idx); } @@ -4024,7 +4031,8 @@ static int64_t opal_xive_get_vp_info(uint64_t vp_id, * look at EQ 7 instead. */ /* Grab EQ for prio 7 to check for silent escalation */ - if (!xive_eq_for_target(vp_id, 7, &eq_blk, &eq_idx)) + if (!xive_eq_for_target(vp_id, XIVE_ESCALATION_PRIO, + &eq_blk, &eq_idx)) return OPAL_PARAMETER; eq_x = xive_from_vc_blk(eq_blk); @@ -4070,7 +4078,7 @@ static int64_t xive_setup_silent_gather(uint64_t vp_id, bool enable) return OPAL_PARAMETER; /* Grab prio 7 */ - eq_orig = xive_get_eq(x, idx + 7); + eq_orig = xive_get_eq(x, idx + XIVE_ESCALATION_PRIO); if (!eq_orig) return OPAL_PARAMETER; @@ -4125,7 +4133,7 @@ static int64_t xive_setup_silent_gather(uint64_t vp_id, bool enable) eq.w4 = SETFIELD(EQ_W4_ESC_EQ_BLOCK, eq.w4, blk); eq.w4 = SETFIELD(EQ_W4_ESC_EQ_INDEX, - eq.w4, idx + 7); + eq.w4, idx + XIVE_ESCALATION_PRIO); } else if (eq.w0 & EQ_W0_UNCOND_ESCALATE) { /* Clear the "u" bit, disable escalations if it was set */ eq.w0 &= ~EQ_W0_UNCOND_ESCALATE; |