mlx5_core_err(dev, "Failed to reload FW tracer\n");
 }
 
+static const struct pci_device_id mgt_ifc_device_ids[] = {
+       { PCI_VDEVICE(MELLANOX, 0xc2d2) }, /* BlueField1 MGT interface device ID */
+       { PCI_VDEVICE(MELLANOX, 0xc2d3) }, /* BlueField2 MGT interface device ID */
+       { PCI_VDEVICE(MELLANOX, 0xc2d4) }, /* BlueField3-Lx MGT interface device ID */
+       { PCI_VDEVICE(MELLANOX, 0xc2d5) }, /* BlueField3 MGT interface device ID */
+       { PCI_VDEVICE(MELLANOX, 0xc2d6) }, /* BlueField4 MGT interface device ID */
+};
+
+static bool mlx5_is_mgt_ifc_pci_device(struct mlx5_core_dev *dev, u16 dev_id)
+{
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(mgt_ifc_device_ids); ++i)
+               if (mgt_ifc_device_ids[i].device == dev_id)
+                       return true;
+
+       return false;
+}
+
 static int mlx5_check_dev_ids(struct mlx5_core_dev *dev, u16 dev_id)
 {
        struct pci_bus *bridge_bus = dev->pdev->bus;
                err = pci_read_config_word(sdev, PCI_DEVICE_ID, &sdev_id);
                if (err)
                        return pcibios_err_to_errno(err);
-               if (sdev_id != dev_id) {
-                       mlx5_core_warn(dev, "unrecognized dev_id (0x%x)\n", sdev_id);
-                       return -EPERM;
-               }
+
+               if (sdev_id == dev_id)
+                       continue;
+
+               if (mlx5_is_mgt_ifc_pci_device(dev, sdev_id))
+                       continue;
+
+               mlx5_core_warn(dev, "unrecognized dev_id (0x%x)\n", sdev_id);
+               return -EPERM;
        }
        return 0;
 }