Re: [PATCH v5] Fix SSR(SubSystem Restart) fail when BT_EN is pulled up by hw
From: kernel test robot <hidden>
Date: 2025-08-23 10:20:58
Also in:
linux-arm-msm, oe-kbuild-all
Hi Shuai, kernel test robot noticed the following build errors: [auto build test ERROR on bluetooth-next/master] [also build test ERROR on bluetooth/master linus/master v6.17-rc2 next-20250822] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Shuai-Zhang/Fix-SSR-SubSystem-Restart-fail-when-BT_EN-is-pulled-up-by-hw/20250820-200925 base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git master patch link: https://lore.kernel.org/r/20250820120641.1622351-1-quic_shuaz%40quicinc.com patch subject: [PATCH v5] Fix SSR(SubSystem Restart) fail when BT_EN is pulled up by hw config: loongarch-allyesconfig (https://download.01.org/0day-ci/archive/20250823/202508231806.zApKGtbH-lkp@intel.com/config) compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project d26ea02060b1c9db751d188b2edb0059a9eb273d) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250823/202508231806.zApKGtbH-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot [off-list ref] | Closes: https://lore.kernel.org/oe-kbuild-all/202508231806.zApKGtbH-lkp@intel.com/ (local) All errors (new ones prefixed by >>):
quoted
drivers/bluetooth/hci_qca.c:1669:55: error: no member named 'quirks' in 'struct hci_dev'
1669 | if (!test_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks)) {
| ~~~~ ^quoted
drivers/bluetooth/hci_qca.c:1669:55: error: no member named 'quirks' in 'struct hci_dev'
1669 | if (!test_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks)) {
| ~~~~ ^quoted
drivers/bluetooth/hci_qca.c:1669:55: error: no member named 'quirks' in 'struct hci_dev'
1669 | if (!test_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks)) {
| ~~~~ ^quoted
drivers/bluetooth/hci_qca.c:1669:55: error: no member named 'quirks' in 'struct hci_dev'
1669 | if (!test_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks)) {
| ~~~~ ^quoted
drivers/bluetooth/hci_qca.c:1669:55: error: no member named 'quirks' in 'struct hci_dev'
1669 | if (!test_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks)) {
| ~~~~ ^
5 errors generated.
vim +1669 drivers/bluetooth/hci_qca.c
1609
1610 static void qca_hw_error(struct hci_dev *hdev, u8 code)
1611 {
1612 struct hci_uart *hu = hci_get_drvdata(hdev);
1613 struct qca_data *qca = hu->priv;
1614
1615 set_bit(QCA_SSR_TRIGGERED, &qca->flags);
1616 set_bit(QCA_HW_ERROR_EVENT, &qca->flags);
1617 bt_dev_info(hdev, "mem_dump_status: %d", qca->memdump_state);
1618
1619 if (qca->memdump_state == QCA_MEMDUMP_IDLE) {
1620 /* If hardware error event received for other than QCA
1621 * soc memory dump event, then we need to crash the SOC
1622 * and wait here for 8 seconds to get the dump packets.
1623 * This will block main thread to be on hold until we
1624 * collect dump.
1625 */
1626 set_bit(QCA_MEMDUMP_COLLECTION, &qca->flags);
1627 qca_send_crashbuffer(hu);
1628 qca_wait_for_dump_collection(hdev);
1629 } else if (qca->memdump_state == QCA_MEMDUMP_COLLECTING) {
1630 /* Let us wait here until memory dump collected or
1631 * memory dump timer expired.
1632 */
1633 bt_dev_info(hdev, "waiting for dump to complete");
1634 qca_wait_for_dump_collection(hdev);
1635 }
1636
1637 mutex_lock(&qca->hci_memdump_lock);
1638 if (qca->memdump_state != QCA_MEMDUMP_COLLECTED) {
1639 bt_dev_err(hu->hdev, "clearing allocated memory due to memdump timeout");
1640 hci_devcd_abort(hu->hdev);
1641 if (qca->qca_memdump) {
1642 kfree(qca->qca_memdump);
1643 qca->qca_memdump = NULL;
1644 }
1645 qca->memdump_state = QCA_MEMDUMP_TIMEOUT;
1646 cancel_delayed_work(&qca->ctrl_memdump_timeout);
1647 }
1648 mutex_unlock(&qca->hci_memdump_lock);
1649
1650 if (qca->memdump_state == QCA_MEMDUMP_TIMEOUT ||
1651 qca->memdump_state == QCA_MEMDUMP_COLLECTED) {
1652 cancel_work_sync(&qca->ctrl_memdump_evt);
1653 skb_queue_purge(&qca->rx_memdump_q);
1654 }
1655
1656 /*
1657 * If the BT chip's bt_en pin is connected to a 3.3V power supply via
1658 * hardware and always stays high, driver cannot control the bt_en pin.
1659 * As a result, during SSR(SubSystem Restart), QCA_SSR_TRIGGERED and
1660 * QCA_IBS_DISABLED flags cannot be cleared, which leads to a reset
1661 * command timeout.
1662 * Add an msleep delay to ensure controller completes the SSR process.
1663 *
1664 * Host will not download the firmware after SSR, controller to remain
1665 * in the IBS_WAKE state, and the host needs to synchronize with it
1666 *
1667 * Since the bluetooth chip has been reset, clear the memdump state.
1668 */1669 if (!test_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks)) {1670 /* 1671 * When the SSR (Sub-System Restart) duration exceeds 2 seconds, 1672 * it triggers host tx_idle_delay, which sets host TX state 1673 * to sleep. Reset tx_idle_timer after SSR to prevent 1674 * host enter TX IBS_Sloeep mode. 1675 */ 1676 mod_timer(&qca->tx_idle_timer, jiffies + 1677 msecs_to_jiffies(qca->tx_idle_delay)); 1678 msleep(50); 1679 1680 clear_bit(QCA_SSR_TRIGGERED, &qca->flags); 1681 clear_bit(QCA_IBS_DISABLED, &qca->flags); 1682 1683 qca->tx_ibs_state = HCI_IBS_TX_AWAKE; 1684 qca->memdump_state = QCA_MEMDUMP_IDLE; 1685 } 1686 1687 clear_bit(QCA_HW_ERROR_EVENT, &qca->flags); 1688 } 1689 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki