Hi Shuai, On Mon, Jun 9, 2025 at 7:00 AM Shuai Zhang <quic_shuaz@xxxxxxxxxxx> wrote: > > If the BT SoC BT_EN is controlled by hardware, disable the AUTO_OFF > feature. Otherwise, BT will close the HCI layer except for the UART > after firmware download. However, the SoC remains active. If the SoC > sends a packet to the Host after firmware download, the Host cannot > respond since the HCI layer is closed, which will cause the firmware > to enter an incorrect state. > > Signed-off-by: Shuai Zhang <quic_shuaz@xxxxxxxxxxx> > --- > drivers/bluetooth/hci_qca.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c > index a2dc39c00..0cb70a3cf 100644 > --- a/drivers/bluetooth/hci_qca.c > +++ b/drivers/bluetooth/hci_qca.c > @@ -2483,6 +2483,15 @@ static int qca_serdev_probe(struct serdev_device *serdev) > set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks); > hdev->shutdown = qca_power_off; > } > + /* If the BT SoC BT_EN is controlled by hardware, disable the AUTO_OFF > + * feature. Otherwise, BT will close the HCI layer except for > + * the UART after firmware download. However, the SoC remains active. > + * If the SoC sends a packet to the Host after firmware download, > + * the Host cannot respond since the HCI layer is closed, which will > + * cause the firmware to enter an incorrect state. > + */ > + else > + hci_dev_clear_flag(hdev, HCI_AUTO_OFF); This sounds like a bug imo, the driver shouldn't be messing up with HCI_AUTO_OFF, if the packet mentioned above is required as part of the setup stage then it shall be handled via setup callback otherwise the stack will consider the setup as completed and proceed with auto off, etc. > if (data) { > /* Wideband speech support must be set per driver since it can't > -- > 2.34.1 > > -- Luiz Augusto von Dentz