aboutsummaryrefslogtreecommitdiff
path: root/hw/xive2.c
diff options
context:
space:
mode:
authorCédric Le Goater <clg@kaod.org>2021-08-04 12:51:19 +0530
committerVasant Hegde <hegdevasant@linux.vnet.ibm.com>2021-08-06 12:28:22 +0530
commitae1331300e0d128b22c2d31d9ea9288c646d043d (patch)
tree63319b49c5efcd4a9c599203de8530de45dd655c /hw/xive2.c
parentd1e8ed0cbfcbd69786ca33a62afeafac223fcf58 (diff)
downloadskiboot-ae1331300e0d128b22c2d31d9ea9288c646d043d.zip
skiboot-ae1331300e0d128b22c2d31d9ea9288c646d043d.tar.gz
skiboot-ae1331300e0d128b22c2d31d9ea9288c646d043d.tar.bz2
xive/p10: Configure XIVE for fused cores
Signed-off-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
Diffstat (limited to 'hw/xive2.c')
-rw-r--r--hw/xive2.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/hw/xive2.c b/hw/xive2.c
index 3d74b85..f221ac5 100644
--- a/hw/xive2.c
+++ b/hw/xive2.c
@@ -1593,6 +1593,19 @@ static bool xive_has_cap(struct xive *x, uint64_t cap)
#define XIVE_CAN_STORE_EOI(x) xive_has_cap(x, CQ_XIVE_CAP_STORE_EOI)
+static void xive_config_fused_core(struct xive *x)
+{
+ uint64_t val = xive_regr(x, TCTXT_CFG);
+
+ if (this_cpu()->is_fused_core) {
+ val |= TCTXT_CFG_FUSE_CORE_EN;
+ xive_dbg(x, "configured for fused cores. "
+ "PC_TCTXT_CFG=%016llx\n", val);
+ } else
+ val &= ~TCTXT_CFG_FUSE_CORE_EN;
+ xive_regw(x, TCTXT_CFG, val);
+}
+
static void xive_config_reduced_priorities_fixup(struct xive *x)
{
if (xive_cfg_vp_prio_shift(x) < CQ_XIVE_CFG_INT_PRIO_8 &&
@@ -1685,6 +1698,8 @@ static bool xive_config_init(struct xive *x)
xive_dbg(x, "store EOI is %savailable\n",
XIVE_CAN_STORE_EOI(x) ? "" : "not ");
+ xive_config_fused_core(x);
+
xive_config_reduced_priorities_fixup(x);
return true;
@@ -2980,7 +2995,7 @@ static void xive_init_cpu(struct cpu_thread *c)
* of a pair is present we just do the setup for each of them, which
* is harmless.
*/
- if (cpu_is_thread0(c))
+ if (cpu_is_thread0(c) || cpu_is_core_chiplet_primary(c))
xive_configure_ex_special_bar(x, c);
/* Initialize the state structure */