Skip to content

FROMLIST: arm64: dts: qcom: hamoa-iot-evk: support Bluetooth over both USB and UART - #345

Merged
Salendarsingh Gaud (sgaud-quic) merged 1 commit into
qualcomm-linux:qcom-6.18.yfrom
shuaz-shuai:qcom-6.18.y
Mar 16, 2026
Merged

FROMLIST: arm64: dts: qcom: hamoa-iot-evk: support Bluetooth over both USB and UART#345
Salendarsingh Gaud (sgaud-quic) merged 1 commit into
qualcomm-linux:qcom-6.18.yfrom
shuaz-shuai:qcom-6.18.y

Conversation

@shuaz-shuai

Copy link
Copy Markdown
Contributor

When Bluetooth supports both USB and UART, the BT UART driver is always loaded, while USB is hot-pluggable. As a result, when Bluetooth is used over USB, the UART driver still be probed and drive BT_EN low, which causes the Bluetooth device on USB to be disconnected.

Configure BT_EN as a GPIO hog so that it is controlled by the platform instead of the UART driver, preventing BT over USB from being unintentionally powered down.

Link: https://lore.kernel.org/all/20260311090921.1892191-1-shuai.zhang@oss.qualcomm.com/
CRs-Fixed: 4464912

@qcomlnxci

Copy link
Copy Markdown

Test Matrix

Test Casekaanapali-mtplemans-evkmonaco-evkqcs615-rideqcs6490-rb3gen2qcs8300-rideqcs9100-ride-r3sm8750-mtpx1e80100-crd
0_qcom-next-ci-premerge-tests◻️◻️◻️❌ Fail◻️◻️◻️❌ Fail◻️
BT_FW_KMD_Service◻️❌ Fail❌ Fail❌ Fail◻️✅ Pass✅ Pass❌ Fail◻️
BT_ON_OFF◻️✅ Pass✅ Pass⚠️ skip◻️✅ Pass✅ Pass⚠️ skip◻️
BT_SCAN◻️❌ Fail✅ Pass◻️◻️✅ Pass✅ Pass⚠️ skip◻️
CPUFreq_Validation◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️
CPU_affinity◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️
DSP_AudioPD◻️✅ Pass✅ Pass◻️◻️✅ Pass✅ Pass◻️◻️
Ethernet◻️✅ Pass✅ Pass⚠️ skip◻️✅ Pass⚠️ skip⚠️ skip◻️
Freq_Scaling◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass❌ Fail◻️
GIC◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️
IPA◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️
Interrupts◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️
OpenCV◻️⚠️ skip⚠️ skip◻️◻️⚠️ skip⚠️ skip◻️◻️
PCIe◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️
Probe_Failure_Check◻️❌ Fail❌ Fail❌ Fail◻️✅ Pass✅ Pass❌ Fail◻️
RMNET◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️
UFS_Validation◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️
USBHost◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass❌ Fail◻️
WiFi_Firmware_Driver◻️✅ Pass✅ Pass◻️◻️✅ Pass✅ Pass◻️◻️
WiFi_OnOff◻️⚠️ skip⚠️ skip◻️◻️✅ Pass✅ Pass◻️◻️
cdsp_remoteproc◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass❌ Fail◻️
hotplug◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️
irq◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️
kaslr◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️
pinctrl◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️
qcom_hwrng◻️✅ Pass✅ Pass◻️◻️✅ Pass✅ Pass◻️◻️
remoteproc◻️✅ Pass❌ Fail✅ Pass◻️❌ Fail✅ Pass❌ Fail◻️
rngtest◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️
shmbridge◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️
smmu◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️
watchdog◻️✅ Pass✅ Pass◻️◻️✅ Pass✅ Pass◻️◻️
wpss_remoteproc◻️✅ Pass✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️

…h USB and UART
When Bluetooth supports both USB and UART, the BT UART driver is
always loaded, while USB is hot-pluggable. As a result, when Bluetooth
is used over USB, the UART driver still be probed and drive BT_EN low,
which causes the Bluetooth device on USB to be disconnected.
Configure BT_EN as a GPIO hog so that it is controlled by the platform
instead of the UART driver, preventing BT over USB from being
unintentionally powered down.
Link: https://lore.kernel.org/all/20260311090921.1892191-1-shuai.zhang@oss.qualcomm.com/
Signed-off-by: Shuai Zhang <shuai.zhang@oss.qualcomm.com>
@shuaz-shuaishuaz-shuai changed the title FORMLIST: arm64: dts: qcom: hamoa-iot-evk: support Bluetooth over both USB and UARTFROMLIST: arm64: dts: qcom: hamoa-iot-evk: support Bluetooth over both USB and UARTMar 13, 2026
@qcomlnxci

Copy link
Copy Markdown

Test Matrix

Test Casekaanapali-mtplemans-evkmonaco-evkqcs615-rideqcs6490-rb3gen2qcs8300-rideqcs9100-ride-r3sm8750-mtpx1e80100-crd
0_qcom-next-ci-premerge-tests◻️◻️◻️◻️◻️◻️◻️❌ Fail◻️
BT_FW_KMD_Service◻️❌ Fail❌ Fail◻️✅ Pass✅ Pass✅ Pass❌ Fail◻️
BT_ON_OFF◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass⚠️ skip◻️
BT_SCAN◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass⚠️ skip◻️
CPUFreq_Validation◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass✅ Pass◻️
CPU_affinity◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass✅ Pass◻️
DSP_AudioPD◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️◻️
Ethernet◻️✅ Pass✅ Pass◻️⚠️ skip⚠️ skip⚠️ skip⚠️ skip◻️
Freq_Scaling◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass❌ Fail◻️
GIC◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass✅ Pass◻️
IPA◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass✅ Pass◻️
Interrupts◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass✅ Pass◻️
OpenCV◻️⚠️ skip⚠️ skip◻️⚠️ skip⚠️ skip⚠️ skip◻️◻️
PCIe◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass✅ Pass◻️
Probe_Failure_Check◻️❌ Fail❌ Fail◻️❌ Fail❌ Fail✅ Pass❌ Fail◻️
RMNET◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass✅ Pass◻️
UFS_Validation◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass✅ Pass◻️
USBHost◻️✅ Pass✅ Pass◻️❌ Fail✅ Pass✅ Pass❌ Fail◻️
WiFi_Firmware_Driver◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️◻️
WiFi_OnOff◻️✅ Pass⚠️ skip◻️✅ Pass✅ Pass✅ Pass◻️◻️
cdsp_remoteproc◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass❌ Fail◻️
hotplug◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass✅ Pass◻️
irq◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass✅ Pass◻️
kaslr◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass✅ Pass◻️
pinctrl◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass✅ Pass◻️
qcom_hwrng◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️◻️
remoteproc◻️✅ Pass❌ Fail◻️✅ Pass❌ Fail✅ Pass❌ Fail◻️
rngtest◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass✅ Pass◻️
shmbridge◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass✅ Pass◻️
smmu◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass✅ Pass◻️
watchdog◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass◻️◻️
wpss_remoteproc◻️✅ Pass✅ Pass◻️✅ Pass✅ Pass✅ Pass✅ Pass◻️

@sgaud-quic
Salendarsingh Gaud (sgaud-quic) merged commit 0879786 into qualcomm-linux:qcom-6.18.yMar 16, 2026
4 of 5 checks passed
Komal Bajaj (Komal-Bajaj) pushed a commit that referenced this pull request Apr 14, 2026
Limit the number of zones reclaimed in flush_space()'s RECLAIM_ZONES
state.
This prevents possibly long running reclaim sweeps to block other tasks in
the system, while the system is under pressure anyways, causing the
tasks to hang.
An example of this can be seen here, triggered by fstests generic/551:
generic/551 [ 27.042349] run fstests generic/551 at 2026-02-27 11:05:30
BTRFS: device fsid 78c16e29-20d9-4c8e-bc04-7ba431be38ff devid 1 transid 8 /dev/vdb (254:16) scanned by mount (806)
BTRFS info (device vdb): first mount of filesystem 78c16e29-20d9-4c8e-bc04-7ba431be38ff
BTRFS info (device vdb): using crc32c checksum algorithm
BTRFS info (device vdb): host-managed zoned block device /dev/vdb, 64 zones of 268435456 bytes
BTRFS info (device vdb): zoned mode enabled with zone size 268435456
BTRFS info (device vdb): checking UUID tree
BTRFS info (device vdb): enabling free space tree
INFO: task kworker/u38:1:90 blocked for more than 120 seconds.
Not tainted 7.0.0-rc1+ #345
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
task:kworker/u38:1 state:D stack:0 pid:90 tgid:90 ppid:2 task_flags:0x4208060 flags:0x00080000
Workqueue: events_unbound btrfs_async_reclaim_data_space
Call Trace:
<TASK>
__schedule+0x34f/0xe70
schedule+0x41/0x140
schedule_timeout+0xa3/0x110
? mark_held_locks+0x40/0x70
? lockdep_hardirqs_on_prepare+0xd8/0x1c0
? trace_hardirqs_on+0x18/0x100
? lockdep_hardirqs_on+0x84/0x130
? _raw_spin_unlock_irq+0x33/0x50
wait_for_completion+0xa4/0x150
? __flush_work+0x24c/0x550
__flush_work+0x339/0x550
? __pfx_wq_barrier_func+0x10/0x10
? wait_for_completion+0x39/0x150
flush_space+0x243/0x660
? find_held_lock+0x2b/0x80
? kvm_sched_clock_read+0x11/0x20
? local_clock_noinstr+0x17/0x110
? local_clock+0x15/0x30
? lock_release+0x1b7/0x4b0
do_async_reclaim_data_space+0xe8/0x160
btrfs_async_reclaim_data_space+0x19/0x30
process_one_work+0x20a/0x5f0
? lock_is_held_type+0xcd/0x130
worker_thread+0x1e2/0x3c0
? __pfx_worker_thread+0x10/0x10
kthread+0x103/0x150
? __pfx_kthread+0x10/0x10
ret_from_fork+0x20d/0x320
? __pfx_kthread+0x10/0x10
ret_from_fork_asm+0x1a/0x30
</TASK>
Showing all locks held in the system:
1 lock held by khungtaskd/67:
#0: ffffffff824d58e0 (rcu_read_lock){....}-{1:3}, at: debug_show_all_locks+0x3d/0x194
2 locks held by kworker/u38:1/90:
#0: ffff8881000aa158 ((wq_completion)events_unbound){+.+.}-{0:0}, at: process_one_work+0x3c4/0x5f0
#1: ffffc90000c17e58 ((work_completion)(&fs_info->async_data_reclaim_work)){+.+.}-{0:0}, at: process_one_work+0x1c0/0x5f0
5 locks held by kworker/u39:1/191:
#0: ffff8881000aa158 ((wq_completion)events_unbound){+.+.}-{0:0}, at: process_one_work+0x3c4/0x5f0
#1: ffffc90000dfbe58 ((work_completion)(&fs_info->reclaim_bgs_work)){+.+.}-{0:0}, at: process_one_work+0x1c0/0x5f0
#2: ffff888101da0420 (sb_writers#9){.+.+}-{0:0}, at: process_one_work+0x20a/0x5f0
#3: ffff88811040a648 (&fs_info->reclaim_bgs_lock){+.+.}-{4:4}, at: btrfs_reclaim_bgs_work+0x1de/0x770
#4: ffff888110408a18 (&fs_info->cleaner_mutex){+.+.}-{4:4}, at: btrfs_relocate_block_group+0x95a/0x20f0
1 lock held by aio-dio-write-v/980:
#0: ffff888110093008 (&sb->s_type->i_mutex_key#15){++++}-{4:4}, at: btrfs_inode_lock+0x51/0xb0
=============================================
To prevent these long running reclaims from blocking the system, only
reclaim 5 block_groups in the RECLAIM_ZONES state of flush_space(). Also
as these reclaims are now constrained, it opens up the use for a
synchronous call to brtfs_reclaim_block_groups(), eliminating the need
to place the reclaim task on a workqueue and then flushing the workqueue
again.
Reviewed-by: Boris Burkov <boris@bur.io>
Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@shuaz-shuai@qcomlnxci@shashim-quic@sgaud-quic