aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2017-04-04 22:00:47 +1000
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-04-05 12:30:44 +1000
commitdc7017742bb5943d3302f075bb99b27bb26ba541 (patch)
treead2a666216872482321941363865c848f3cb8873 /hw
parent036d2e8d4f90e7828177f37ce330768370b0e845 (diff)
downloadskiboot-dc7017742bb5943d3302f075bb99b27bb26ba541.zip
skiboot-dc7017742bb5943d3302f075bb99b27bb26ba541.tar.gz
skiboot-dc7017742bb5943d3302f075bb99b27bb26ba541.tar.bz2
xive: Fix setting of remote NVT VSD
Unlike the other remote VSDs, the NVT one needs a valid size field that represents the size of the remote PC BAR. Without this, multi chip machines may checkstop when a processor pool or OS CAM gets attached to a VP on a different chip. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'hw')
-rw-r--r--hw/xive.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/hw/xive.c b/hw/xive.c
index bb5f0b0..0837bed 100644
--- a/hw/xive.c
+++ b/hw/xive.c
@@ -1854,8 +1854,10 @@ static void xive_setup_forward_ports(struct xive *x, struct proc_chip *remote_ch
/* NVT/VPD points to the remote NVT MMIO sets */
if (!xive_set_vsd(x, VST_TSEL_VPDT, remote_id,
- base | (uint64_t)remote_xive->pc_base))
+ base | ((uint64_t)remote_xive->pc_base) |
+ SETFIELD(VSD_TSIZE, 0ull, ilog2(PC_BAR_SIZE) - 12)))
goto error;
+
return;
error: