[Skiboot] [PATCH 16/16] xive: Indirect table entries must have top bits "type" set

Benjamin Herrenschmidt benh at kernel.crashing.org
Thu Nov 10 18:34:52 AEDT 2016


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 at kernel.crashing.org>
---
---
 hw/xive.c | 3 +++
 1 file changed, 3 insertions(+)

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]);
-- 
2.7.4



More information about the Skiboot mailing list