We execute certain NPU2 setup code (such as mapping an LPID to a device
in NPU2) unconditionally if an Nvlink bridge is detected. However this
cannot succeed on P8+ machines and errors appear in dmesg. This is
harmless as skiboot returns an error and the only place we check it is
vfio-pci but that code does not get called on P8+ either.

This adds a check if pnv_npu2_xxx helpers are called on a machine with
NPU2 which initializes pnv_phb::npu in pnv_npu2_init();
pnv_phb::npu==NULL on P8+.

Fixes: 1b785611e119 ("powerpc/powernv/npu: Add release_ownership hook")
Signed-off-by: Alexey Kardashevskiy <a...@ozlabs.ru>
---
 arch/powerpc/platforms/powernv/npu-dma.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/arch/powerpc/platforms/powernv/npu-dma.c 
b/arch/powerpc/platforms/powernv/npu-dma.c
index abeaa533b976..7b28b284a594 100644
--- a/arch/powerpc/platforms/powernv/npu-dma.c
+++ b/arch/powerpc/platforms/powernv/npu-dma.c
@@ -623,6 +623,11 @@ int pnv_npu2_map_lpar_dev(struct pci_dev *gpdev, unsigned 
int lparid,
                return -ENODEV;
 
        hose = pci_bus_to_host(npdev->bus);
+       if (hose->npu == NULL) {
+               dev_info_once(&npdev->dev, "Nvlink1 does not support contexts");
+               return 0;
+       }
+
        nphb = hose->private_data;
 
        dev_dbg(&gpdev->dev, "Map LPAR opalid=%llu lparid=%u\n",
@@ -670,6 +675,11 @@ int pnv_npu2_unmap_lpar_dev(struct pci_dev *gpdev)
                return -ENODEV;
 
        hose = pci_bus_to_host(npdev->bus);
+       if (hose->npu == NULL) {
+               dev_info_once(&npdev->dev, "Nvlink1 does not support contexts");
+               return 0;
+       }
+
        nphb = hose->private_data;
 
        dev_dbg(&gpdev->dev, "destroy context opalid=%llu\n",
-- 
2.17.1

Reply via email to