aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2016-12-22 14:16:52 +1100
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-01-05 15:41:02 +1100
commitdff2381c498e05b890437047ee38bd145b31e1af (patch)
treef097bdc39a8160c6ffc2e94eb569993109af6956 /hw
parent8e4bbabf600b3801f17f2e243fa52af2a38f2b4a (diff)
downloadskiboot-dff2381c498e05b890437047ee38bd145b31e1af.zip
skiboot-dff2381c498e05b890437047ee38bd145b31e1af.tar.gz
skiboot-dff2381c498e05b890437047ee38bd145b31e1af.tar.bz2
xive: Workaround for bad DD1 checker
The VSD size for the EQDT/VPDT in the VC is badly checked by HW, we need to set it to all 1's (it never accesses the memory directly so the incorrect size doesn't matter) 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.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/hw/xive.c b/hw/xive.c
index 5ae64c7..9d81d8b 100644
--- a/hw/xive.c
+++ b/hw/xive.c
@@ -1321,7 +1321,11 @@ static bool xive_set_vsd(struct xive *x, uint32_t tbl, uint32_t idx, uint64_t v)
SETFIELD(VST_TABLE_OFFSET, 0ull, idx));
if (x->last_reg_error)
return false;
- xive_regw(x, VC_VSD_TABLE_DATA, v);
+ /* Hack to workaround DD1 issue with NVT in VC in DD1 */
+ if (tbl == VST_TSEL_VPDT)
+ xive_regw(x, VC_VSD_TABLE_DATA, v | VSD_TSIZE);
+ else
+ xive_regw(x, VC_VSD_TABLE_DATA, v);
if (x->last_reg_error)
return false;