]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Bluetooth: btintel_pcie: Add 50 ms delay before MAC init on BlazarIW
authorKiran K <kiran.k@intel.com>
Sat, 6 Jun 2026 00:36:37 +0000 (06:06 +0530)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Thu, 11 Jun 2026 18:24:41 +0000 (14:24 -0400)
On BlazarIW, fast restart cycles fail because the D0 entry to MAC
init does not complete in time. As a result, MAC initialization
does not proceed and the controller fails to transition past the
ROM boot stage.

Add a 50 ms delay (worst case as per HW analysis) before doing MAC
init in btintel_pcie_enable_bt() so the shared hardware reset flow
has time to complete. The delay is gated on the BlazarIW PCI device
id 0x4D76 so other Intel BT PCIe controllers are unaffected.

Signed-off-by: Kiran K <kiran.k@intel.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
drivers/bluetooth/btintel_pcie.c

index d2b0875cfa0826ae37e592d02cec50135e4c97a7..2084159f2cedd6f9c6cfc4b3a6f58f526acaddbc 100644 (file)
@@ -799,6 +799,11 @@ static void btintel_pcie_dump_traces(struct hci_dev *hdev)
                bt_dev_err(hdev, "Failed to dump traces: (%d)", ret);
 }
 
+static bool btintel_pcie_is_blazariw(struct pci_dev *pdev)
+{
+       return pdev->device == 0x4D76;
+}
+
 /* This function enables BT function by setting BTINTEL_PCIE_CSR_FUNC_CTRL_MAC_INIT bit in
  * BTINTEL_PCIE_CSR_FUNC_CTRL_REG register and wait for MSI-X with
  * BTINTEL_PCIE_MSIX_HW_INT_CAUSES_GP0.
@@ -818,6 +823,14 @@ static int btintel_pcie_enable_bt(struct btintel_pcie_data *data)
        btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_CI_ADDR_MSB_REG,
                              (u64)data->ci_p_addr >> 32);
 
+       /* On BlazarIW, the D0 entry to MAC init does not complete in
+        * time. Wait 50 ms (worst case as per HW analysis) for the
+        * shared hardware reset flow to complete before proceeding with
+        * MAC init.
+        */
+       if (btintel_pcie_is_blazariw(data->pdev))
+               msleep(50);
+
        /* Reset the cached value of boot stage. it is updated by the MSI-X
         * gp0 interrupt handler.
         */