aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2017-06-24 14:17:16 -0500
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-06-26 14:28:58 +1000
commit616489b0701a7516f5497140a12ca068bb231255 (patch)
tree3a6a879eb5e68d7897fc5a05c12bb530e7e81102
parentb0db1d7883094adb0fc51a7920075ca3d866d2c7 (diff)
downloadskiboot-616489b0701a7516f5497140a12ca068bb231255.zip
skiboot-616489b0701a7516f5497140a12ca068bb231255.tar.gz
skiboot-616489b0701a7516f5497140a12ca068bb231255.tar.bz2
psi: Switch to ESB mode later
There's an errata, if we switch to ESB mode before setting up the various ESB mode related registers, a pending interrupts can go wrong. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Michael Neuling <mikey@neuling.org> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
-rw-r--r--hw/psi.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/hw/psi.c b/hw/psi.c
index c98babf..9da0257 100644
--- a/hw/psi.c
+++ b/hw/psi.c
@@ -826,10 +826,6 @@ static void psi_init_p9_interrupts(struct psi *psi)
bool is_p9ndd1;
u64 val;
- /* Reset irq handling and switch to ESB mode */
- out_be64(psi->regs + PSIHB_INTERRUPT_CONTROL, PSIHB_IRQ_RESET);
- out_be64(psi->regs + PSIHB_INTERRUPT_CONTROL, 0);
-
/* Grab chip */
chip = get_chip(psi->chip_id);
if (!chip)
@@ -874,6 +870,10 @@ static void psi_init_p9_interrupts(struct psi *psi)
12, psi->esb_mmio, XIVE_SRC_LSI,
psi, &psi_p9_irq_ops);
}
+
+ /* Reset irq handling and switch to ESB mode */
+ out_be64(psi->regs + PSIHB_INTERRUPT_CONTROL, PSIHB_IRQ_RESET);
+ out_be64(psi->regs + PSIHB_INTERRUPT_CONTROL, 0);
}
static void psi_init_interrupts(struct psi *psi)