• Stephan Gerhold's avatar
    Bluetooth: btqcomsmd: Fix command timeout after setting BD address · 5d44ab9e
    Stephan Gerhold authored
    On most devices using the btqcomsmd driver (e.g. the DragonBoard 410c
    and other devices based on the Qualcomm MSM8916/MSM8909/... SoCs)
    the Bluetooth firmware seems to become unresponsive for a while after
    setting the BD address. On recent kernel versions (at least 5.17+)
    this often causes timeouts for subsequent commands, e.g. the HCI reset
    sent by the Bluetooth core during initialization:
    
        Bluetooth: hci0: Opcode 0x c03 failed: -110
    
    Unfortunately this behavior does not seem to be documented anywhere.
    Experimentation suggests that the minimum necessary delay to avoid
    the problem is ~150us. However, to be sure add a sleep for > 1ms
    in case it is a bit longer on other firmware versions.
    
    Older kernel versions are likely also affected, although perhaps with
    slightly different errors or less probability. Side effects can easily
    hide the issue in most cases, e.g. unrelated incoming interrupts that
    cause the necessary delay.
    
    Fixes: 1511cc75 ("Bluetooth: Introduce Qualcomm WCNSS SMD based HCI driver")
    Signed-off-by: default avatarStephan Gerhold <stephan.gerhold@kernkonzept.com>
    Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
    5d44ab9e
btqcomsmd.c 4.89 KB