Message ID | 20161222031708.18752-44-benh@kernel.crashing.org |
---|---|
State | Accepted |
Headers | show |
diff --git a/hw/xive.c b/hw/xive.c index c2fe95f..bd477ca 100644 --- a/hw/xive.c +++ b/hw/xive.c @@ -1318,7 +1318,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;
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> --- hw/xive.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)