• Frederic Barrat's avatar
    powerpc/powernv/npu: Fix oops in pnv_try_setup_npu_table_group() · 6bca5159
    Frederic Barrat authored
    With a recent change around IOMMU group, a system with an opencapi
    adapter is no longer booting and we get a kernel oops:
    
      BUG: Kernel NULL pointer dereference at 0x00000028
      Faulting instruction address: 0xc0000000000aa38c
      ...
      NIP pnv_try_setup_npu_table_group+0x1c/0x1a0
      LR  pnv_pci_ioda_fixup+0x1f8/0x660
      Call Trace:
        pnv_try_setup_npu_table_group+0x60/0x
        pnv_pci_ioda_fixup+0x20c/0x660
        pcibios_resource_survey+0x2c8/0x31c
        pcibios_init+0xb0/0xe4
        do_one_initcall+0x64/0x264
        kernel_init_freeable+0x36c/0x468
        kernel_init+0x2c/0x148
        ret_from_kernel_thread+0x5c/0x68
    
    An opencapi device is using a device PE, so the current code breaks
    because pe->pbus is not defined.
    
    More generally, there's no need to define an IOMMU group for opencapi,
    as the device sends real addresses directly (admittedly, the
    virtualization story is yet to be written). So let's fix it by
    skipping the IOMMU group setup for opencapi PHBs.
    
    Fixes: 0bd97167 ("powerpc/powernv/npu: Add compound IOMMU groups")
    Signed-off-by: default avatarFrederic Barrat <fbarrat@linux.ibm.com>
    Reviewed-by: default avatarGreg Kurz <groug@kaod.org>
    Reviewed-by: default avatarAndrew Donnellan <andrew.donnellan@au1.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    6bca5159
pci-ioda.c 107 KB