[Skiboot] [RFC PATCH skiboot] npu2: Clear XTS_BDF_MAP when destroying context for next init_context
Alexey Kardashevskiy
aik at ozlabs.ru
Thu Oct 4 19:17:49 AEST 2018
Once programmed into the NPU, the NPU2_XTS_PID_MAP register content does
not change and if we try calling opal_npu_init_context() with a different
MSR (which is going to happen when GPU+NPU virtualization becomes
available), that will fail.
This clears XTS_BDF_MAP when the context is destroyed.
Signed-off-by: Alexey Kardashevskiy <aik at ozlabs.ru>
---
The alternative would be making opal_npu_destroy_context() a no-op
and making opal_npu_init_context() do this if a new MSR is different
from the already programmed one. Opinions?
This is for:
https://github.ibm.com/alexey/linux/commits/nv2
In particular these two:
https://github.ibm.com/alexey/linux/commit/4b36638770afa8f91f4bee7706fa7e9b88f695e6
https://github.ibm.com/alexey/linux/commit/4c9ce6ce1777ea91698e9a67080aa2086622249a
---
hw/npu2.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/hw/npu2.c b/hw/npu2.c
index d7d9435..a8fc021 100644
--- a/hw/npu2.c
+++ b/hw/npu2.c
@@ -2068,7 +2068,7 @@ static int opal_npu_destroy_context(uint64_t phb_id, uint64_t pid __unused,
struct phb *phb = pci_get_phb(phb_id);
struct npu2 *p;
uint64_t xts_bdf;
- int rc = 0;
+ int rc = 0, id;
if (!phb || phb->phb_type != phb_type_npu_v2)
return OPAL_PARAMETER;
@@ -2085,9 +2085,13 @@ static int opal_npu_destroy_context(uint64_t phb_id, uint64_t pid __unused,
}
/*
- * The bdf/pid table only contains wildcard entries, so we don't
- * need to remove anything here.
+ * The bdf/pid table contains wildcard entries but also contains
+ * MSR bits which will change when a device is passed through to
+ * a KVM guest or vice versa so we need to remove the mapping here.
*/
+ id = GETFIELD(NPU2_XTS_BDF_MAP_LPARSHORT, xts_bdf);
+ NPU2DBG(p, "XTS_PID_MAP[%03d] = 0 (destroy)\n", id);
+ npu2_write(p, NPU2_XTS_PID_MAP + id*0x20, 0);
unlock(&p->lock);
return rc;
--
2.11.0
More information about the Skiboot
mailing list