[Skiboot] [PATCH] xive/p9: Enforce thread enablement
Cédric Le Goater
clg at kaod.org
Fri Jul 24 02:37:57 AEST 2020
Make sure that the enablement has completed to guarantee that the TIMA
accesses will see the latest state of the enable register.
Signed-off-by: Cédric Le Goater <clg at kaod.org>
---
hw/xive.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/hw/xive.c b/hw/xive.c
index 8d6095c02e7e..9a8d91482589 100644
--- a/hw/xive.c
+++ b/hw/xive.c
@@ -2741,6 +2741,7 @@ static void xive_reset_enable_thread(struct cpu_thread *c)
struct proc_chip *chip = get_chip(c->chip_id);
struct xive *x = chip->xive;
uint32_t fc, bit;
+ uint64_t enable;
/* Get fused core number */
fc = (c->pir >> 3) & 0xf;
@@ -2752,9 +2753,16 @@ static void xive_reset_enable_thread(struct cpu_thread *c)
if (fc < 8) {
xive_regw(x, PC_THREAD_EN_REG0_CLR, PPC_BIT(bit));
xive_regw(x, PC_THREAD_EN_REG0_SET, PPC_BIT(bit));
+
+ enable = xive_regr(x, PC_THREAD_EN_REG0, PPC_BIT(bit));
+ if (!(enable & PPC_BIT(bit)))
+ xive_cpu_err(c, "Failed to enable thread\n");
} else {
xive_regw(x, PC_THREAD_EN_REG1_CLR, PPC_BIT(bit));
xive_regw(x, PC_THREAD_EN_REG1_SET, PPC_BIT(bit));
+ enable = xive_regr(x, PC_THREAD_EN_REG1, PPC_BIT(bit));
+ if (!(enable & PPC_BIT(bit)))
+ xive_cpu_err(c, "Failed to enable thread\n");
}
}
--
2.25.4
More information about the Skiboot
mailing list