mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
Bluetooth: btintel_pcie: Add 50 ms delay before MAC init on BlazarIW
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>
This commit is contained in:
parent
bea06c7c1b
commit
4d62d88e7a
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user