aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2016-11-14 13:06:17 +1100
committerStewart Smith <stewart@linux.vnet.ibm.com>2016-11-15 15:06:03 +1100
commit13f77a39529c2f0350d77d48fa0fec879ec7b478 (patch)
tree86aadef84d96c5ddff65d6a728347792d322c284 /hw
parent628700316d10ed76ebe3e4be02eb55a765d675b8 (diff)
downloadskiboot-13f77a39529c2f0350d77d48fa0fec879ec7b478.zip
skiboot-13f77a39529c2f0350d77d48fa0fec879ec7b478.tar.gz
skiboot-13f77a39529c2f0350d77d48fa0fec879ec7b478.tar.bz2
xive: Indirect table entries must have top bits "type" set
The HW check that the 2 tops bits aren't both clear to differenciate an unallocated entry from a valid one. So we need to put some value there. 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.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/hw/xive.c b/hw/xive.c
index 37c367e..a8cc2fc 100644
--- a/hw/xive.c
+++ b/hw/xive.c
@@ -1126,7 +1126,9 @@ static bool xive_prealloc_tables(struct xive *x)
}
memset(page, 0, 0x10000);
x->vp_ind_base[i] = ((uint64_t)page) & VSD_ADDRESS_MASK;
+
x->vp_ind_base[i] |= SETFIELD(VSD_TSIZE, 0ull, 4);
+ x->vp_ind_base[i] |= SETFIELD(VSD_MODE, 0ull, VSD_MODE_EXCLUSIVE);
page = local_alloc(x->chip_id, 0x10000, 0x10000);
if (!page) {
@@ -1136,6 +1138,7 @@ static bool xive_prealloc_tables(struct xive *x)
memset(page, 0, 0x10000);
x->eq_ind_base[i] = ((uint64_t)page) & VSD_ADDRESS_MASK;
x->eq_ind_base[i] |= SETFIELD(VSD_TSIZE, 0ull, 4);
+ x->eq_ind_base[i] |= SETFIELD(VSD_MODE, 0ull, VSD_MODE_EXCLUSIVE);
#ifdef INDIRECT_IS_LE
x->vp_ind_base[i] = cpu_to_le64(x->vp_ind_base[i]);