scnprintf(variant, sizeof(variant), ",variant=%s",
                          ab->qmi.target.bdf_ext);
 
-       scnprintf(name, name_len,
-                 "bus=%s,qmi-chip-id=%d,qmi-board-id=%d%s",
-                 ath12k_bus_str(ab->hif.bus),
-                 ab->qmi.target.chip_id,
-                 ab->qmi.target.board_id, variant);
+       switch (ab->id.bdf_search) {
+       case ATH12K_BDF_SEARCH_BUS_AND_BOARD:
+               scnprintf(name, name_len,
+                         "bus=%s,vendor=%04x,device=%04x,subsystem-vendor=%04x,subsystem-device=%04x,qmi-chip-id=%d,qmi-board-id=%d%s",
+                         ath12k_bus_str(ab->hif.bus),
+                         ab->id.vendor, ab->id.device,
+                         ab->id.subsystem_vendor,
+                         ab->id.subsystem_device,
+                         ab->qmi.target.chip_id,
+                         ab->qmi.target.board_id,
+                         variant);
+               break;
+       default:
+               scnprintf(name, name_len,
+                         "bus=%s,qmi-chip-id=%d,qmi-board-id=%d%s",
+                         ath12k_bus_str(ab->hif.bus),
+                         ab->qmi.target.chip_id,
+                         ab->qmi.target.board_id, variant);
+               break;
+       }
 
        ath12k_dbg(ab, ATH12K_DBG_BOOT, "boot using board name '%s'\n", name);
 
        return 0;
 }
 
-#define BOARD_NAME_SIZE 100
+#define BOARD_NAME_SIZE 200
 int ath12k_core_fetch_bdf(struct ath12k_base *ab, struct ath12k_board_data *bd)
 {
        char boardname[BOARD_NAME_SIZE];
 
 #define ATH12K_RECONFIGURE_TIMEOUT_HZ          (10 * HZ)
 #define ATH12K_RECOVER_START_TIMEOUT_HZ                (20 * HZ)
 
+enum ath12k_bdf_search {
+       ATH12K_BDF_SEARCH_DEFAULT,
+       ATH12K_BDF_SEARCH_BUS_AND_BOARD,
+};
+
 enum wme_ac {
        WME_AC_BE,
        WME_AC_BK,
        /* true means radio is on */
        bool rfkill_radio_on;
 
+       struct {
+               enum ath12k_bdf_search bdf_search;
+               u32 vendor;
+               u32 device;
+               u32 subsystem_vendor;
+               u32 subsystem_device;
+       } id;
+
        /* must be last */
        u8 drv_priv[] __aligned(sizeof(void *));
 };
 
                goto err_free_core;
        }
 
+       ath12k_dbg(ab, ATH12K_DBG_BOOT, "pci probe %04x:%04x %04x:%04x\n",
+                  pdev->vendor, pdev->device,
+                  pdev->subsystem_vendor, pdev->subsystem_device);
+
+       ab->id.vendor = pdev->vendor;
+       ab->id.device = pdev->device;
+       ab->id.subsystem_vendor = pdev->subsystem_vendor;
+       ab->id.subsystem_device = pdev->subsystem_device;
+
        switch (pci_dev->device) {
        case QCN9274_DEVICE_ID:
                ab_pci->msi_config = &ath12k_msi_config[0];
                }
                break;
        case WCN7850_DEVICE_ID:
+               ab->id.bdf_search = ATH12K_BDF_SEARCH_BUS_AND_BOARD;
                ab_pci->msi_config = &ath12k_msi_config[0];
                ab->static_window_map = false;
                ab_pci->pci_ops = &ath12k_pci_ops_wcn7850;