aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorCédric Le Goater <clg@kaod.org>2021-08-04 12:51:10 +0530
committerVasant Hegde <hegdevasant@linux.vnet.ibm.com>2021-08-06 12:25:41 +0530
commite62291f3d9f529032c5aacbaaad4d4738f879640 (patch)
tree66492f4cc0b39067527da6a4b082652234b88bd6 /hw
parent004f0a7a1a6cf99a95d56007e8d7428953751f31 (diff)
downloadskiboot-e62291f3d9f529032c5aacbaaad4d4738f879640.zip
skiboot-e62291f3d9f529032c5aacbaaad4d4738f879640.tar.gz
skiboot-e62291f3d9f529032c5aacbaaad4d4738f879640.tar.bz2
psi/p10: Activate StoreEOI
Signed-off-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
Diffstat (limited to 'hw')
-rw-r--r--hw/psi.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/hw/psi.c b/hw/psi.c
index 991ea3b..2914225 100644
--- a/hw/psi.c
+++ b/hw/psi.c
@@ -749,11 +749,14 @@ static const struct irq_source_ops psi_p10_irq_ops = {
.name = psi_p9_irq_name,
};
+#define PSIHB10_CAN_STORE_EOI(x) XIVE2_STORE_EOI_ENABLED
+
static void psi_init_p10_interrupts(struct psi *psi)
{
struct proc_chip *chip;
u64 val;
uint32_t esb_shift = 16;
+ uint32_t flags = XIVE_SRC_LSI;
/* Grab chip */
chip = get_chip(psi->chip_id);
@@ -772,6 +775,16 @@ static void psi_init_p10_interrupts(struct psi *psi)
prlog(PR_DEBUG, "PSI[0x%03x]: ESB MMIO at @%p\n",
psi->chip_id, psi->esb_mmio);
+ /* Store EOI */
+ if (PSIHB10_CAN_STORE_EOI(psi)) {
+ val = in_be64(psi->regs + PSIHB_CR);
+ val |= PSIHB10_CR_STORE_EOI;
+ out_be64(psi->regs + PSIHB_CR, val);
+ prlog(PR_DEBUG, "PSI[0x%03x]: store EOI is enabled\n",
+ psi->chip_id);
+ flags |= XIVE_SRC_STORE_EOI;
+ }
+
/* Grab and configure the notification port */
val = xive2_get_notify_port(psi->chip_id, XIVE_HW_SRC_PSI);
val |= PSIHB_ESB_NOTIF_VALID;
@@ -788,7 +801,7 @@ static void psi_init_p10_interrupts(struct psi *psi)
psi->chip_id, 0xf & (chip->ec_level >> 4), chip->ec_level & 0xf);
xive2_register_hw_source(psi->interrupt, P9_PSI_NUM_IRQS,
- esb_shift, psi->esb_mmio, XIVE_SRC_LSI,
+ esb_shift, psi->esb_mmio, flags,
psi, &psi_p10_irq_ops);
/* Reset irq handling and switch to ESB mode */