Skip to content

Commit

Permalink
xive/p9: obsolete OPAL_XIVE_IRQ_SHIFT_BUG flags
Browse files Browse the repository at this point in the history
These were needed to workaround HW bugs in PHB4 LSIs of POWER9 DD1.0
processors.

HW395455 P9/PHB4: Wrong Interrupt ESB CI Load Opcode Location in 64K
page mode

Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
  • Loading branch information
legoater authored and oohal committed Nov 3, 2019
1 parent a10f150 commit ad7e9a6
Show file tree
Hide file tree
Showing 4 changed files with 3 additions and 9 deletions.
1 change: 1 addition & 0 deletions hw/phb4.c
Expand Up @@ -5738,6 +5738,7 @@ static void phb4_create(struct dt_node *np)
xive_register_hw_source(p->base_msi, p->num_irqs - 8, 16,
p->int_mmio, irq_flags, NULL, NULL);

/* XIVE_SRC_SHIFT_BUG is a DD1 workaround */
xive_register_hw_source(p->base_lsi, 8, 16,
p->int_mmio + ((p->num_irqs - 8) << 16),
XIVE_SRC_LSI | XIVE_SRC_SHIFT_BUG,
Expand Down
7 changes: 0 additions & 7 deletions hw/xive.c
Expand Up @@ -2219,9 +2219,6 @@ static void xive_update_irq_mask(struct xive_src *s, uint32_t idx, bool masked)
else
offset = 0xc00; /* PQ = 00 */

if (s->flags & XIVE_SRC_SHIFT_BUG)
offset <<= 4;

in_be64(mmio_base + offset);
}

Expand Down Expand Up @@ -2404,8 +2401,6 @@ static void __xive_source_eoi(struct irq_source *is, uint32_t isn)
in_be64(mmio_base);
else {
offset = 0xc00;
if (s->flags & XIVE_SRC_SHIFT_BUG)
offset <<= 4;
eoi_val = in_be64(mmio_base + offset);
xive_vdbg(s->xive, "ISN: %08x EOI=%llx\n",
isn, eoi_val);
Expand Down Expand Up @@ -3602,8 +3597,6 @@ static uint64_t xive_convert_irq_flags(uint64_t iflags)

if (iflags & XIVE_SRC_LSI)
oflags |= OPAL_XIVE_IRQ_LSI;
if (iflags & XIVE_SRC_SHIFT_BUG)
oflags |= OPAL_XIVE_IRQ_SHIFT_BUG;
return oflags;
}

Expand Down
2 changes: 1 addition & 1 deletion include/opal-api.h
Expand Up @@ -1148,7 +1148,7 @@ enum {
OPAL_XIVE_IRQ_TRIGGER_PAGE = 0x00000001,
OPAL_XIVE_IRQ_STORE_EOI = 0x00000002,
OPAL_XIVE_IRQ_LSI = 0x00000004,
OPAL_XIVE_IRQ_SHIFT_BUG = 0x00000008,
OPAL_XIVE_IRQ_SHIFT_BUG = 0x00000008, /* DD1.0 workaround */
OPAL_XIVE_IRQ_MASK_VIA_FW = 0x00000010, /* DD1.0 workaround */
OPAL_XIVE_IRQ_EOI_VIA_FW = 0x00000020, /* DD1.0 workaround */
};
Expand Down
2 changes: 1 addition & 1 deletion include/xive.h
Expand Up @@ -41,7 +41,7 @@ uint32_t xive_get_notify_base(uint32_t girq);
#define XIVE_SRC_EOI_PAGE1 0x02 /* EOI on the second page */
#define XIVE_SRC_STORE_EOI 0x04 /* EOI using stores supported */
#define XIVE_SRC_LSI 0x08 /* Interrupt is an LSI */
#define XIVE_SRC_SHIFT_BUG 0x10 /* ESB update offset << 4 */
#define XIVE_SRC_SHIFT_BUG 0x10 /* ESB update offset << 4 (PHB4 LSI DD1) */

struct irq_source_ops;
void xive_register_hw_source(uint32_t base, uint32_t count, uint32_t shift,
Expand Down

0 comments on commit ad7e9a6

Please sign in to comment.