|
@@ -1953,7 +1953,12 @@ static void pnv_pci_ioda2_tce_invalidate(struct iommu_table *tbl,
|
|
|
struct pnv_phb *phb = pe->phb;
|
|
|
unsigned int shift = tbl->it_page_shift;
|
|
|
|
|
|
- if (phb->type == PNV_PHB_NPU) {
|
|
|
+ /*
|
|
|
+ * NVLink1 can use the TCE kill register directly as
|
|
|
+ * it's the same as PHB3. NVLink2 is different and
|
|
|
+ * should go via the OPAL call.
|
|
|
+ */
|
|
|
+ if (phb->model == PNV_PHB_MODEL_NPU) {
|
|
|
/*
|
|
|
* The NVLink hardware does not support TCE kill
|
|
|
* per TCE entry so we have to invalidate
|
|
@@ -3674,6 +3679,8 @@ static void __init pnv_pci_init_ioda_phb(struct device_node *np,
|
|
|
phb->model = PNV_PHB_MODEL_PHB3;
|
|
|
else if (of_device_is_compatible(np, "ibm,power8-npu-pciex"))
|
|
|
phb->model = PNV_PHB_MODEL_NPU;
|
|
|
+ else if (of_device_is_compatible(np, "ibm,power9-npu-pciex"))
|
|
|
+ phb->model = PNV_PHB_MODEL_NPU2;
|
|
|
else
|
|
|
phb->model = PNV_PHB_MODEL_UNKNOWN;
|
|
|
|