diff mbox series

Bluetooth: btmtk: Remove resetting mt7921 before downloading the fw

Message ID 20240822052310.25220-1-hao.qin@mediatek.com
State New
Headers show
Series Bluetooth: btmtk: Remove resetting mt7921 before downloading the fw | expand

Commit Message

Hao Qin Aug. 22, 2024, 5:23 a.m. UTC
Remove resetting mt7921 before downloading the fw, as it may cause
command timeout when performing the reset.

Signed-off-by: Hao Qin <hao.qin@mediatek.com>
---
 drivers/bluetooth/btmtk.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Marc Payne Sept. 10, 2024, 5:09 p.m. UTC | #1
Hi,

The 22/08/2024 13:23, Hao Qin wrote:
> Remove resetting mt7921 before downloading the fw, as it may cause
> command timeout when performing the reset.
> 
> Signed-off-by: Hao Qin <hao.qin@mediatek.com>
> ---
>  drivers/bluetooth/btmtk.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/bluetooth/btmtk.c b/drivers/bluetooth/btmtk.c
> index 2b7c80043aa2..a46f70135cbd 100644
> --- a/drivers/bluetooth/btmtk.c
> +++ b/drivers/bluetooth/btmtk.c
> @@ -1326,7 +1326,6 @@ int btmtk_usb_setup(struct hci_dev *hdev)
>  		fwname = FIRMWARE_MT7668;
>  		break;
>  	case 0x7922:
> -	case 0x7961:
>  	case 0x7925:
>  		/* Reset the device to ensure it's in the initial state before
>  		 * downloading the firmware to ensure.
> @@ -1334,7 +1333,8 @@ int btmtk_usb_setup(struct hci_dev *hdev)
>  
>  		if (!test_bit(BTMTK_FIRMWARE_LOADED, &btmtk_data->flags))
>  			btmtk_usb_subsys_reset(hdev, dev_id);
> -
> +		fallthrough;
> +	case 0x7961:
>  		btmtk_fw_get_filename(fw_bin_name, sizeof(fw_bin_name), dev_id,
>  				      fw_version, fw_flavor);
>  
> -- 
> 2.18.0
> 

[Original regression report
https://lore.kernel.org/linux-bluetooth/ZsTh7Jyug7MbZsLE@mdpsys.co.uk/]

Thanks for the patch, I have tested it on top of v6.11-rc7 and can confirm
that it resolves the initial command timeout issue.

Unfortunately, when using the latest firmware version 20240826151221 from the
linux-firmware repo I'm still seeing "Mediatek coredump end" errors
followed by MSFT and AOSP errors. The device then appears unresponsive
and the kernel eventually gives up attempting to enumerate:

[  230.042936] usb 4-3.2: new SuperSpeed USB device number 4 using xhci_hcd
[  230.065228] usb 4-3.2: New USB device found, idVendor=0e8d, idProduct=7961, bcdDevice= 1.00
[  230.065237] usb 4-3.2: New USB device strings: Mfr=6, Product=7, SerialNumber=8
[  230.065240] usb 4-3.2: Product: Wireless_Device
[  230.065242] usb 4-3.2: Manufacturer: MediaTek Inc.
[  230.065245] usb 4-3.2: SerialNumber: 000000000
[  230.101915] Bluetooth: hci2: HW/SW Version: 0x008a008a, Build Time: 20240826151221
[  233.005938] Bluetooth: hci2: Device setup in 2862056 usecs
[  233.005983] Bluetooth: hci2: HCI Enhanced Setup Synchronous Connection command is advertised, but not supported.
[  234.306071] Bluetooth: hci2: Mediatek coredump end
[  235.092729] Bluetooth: hci2: Opcode 0x0c03 failed: -110
[  235.192772] Bluetooth: hci2: Mediatek coredump end
[  237.226157] Bluetooth: hci2: Failed to read MSFT supported features (-110)
[  239.359435] Bluetooth: hci2: AOSP get vendor capabilities (-110)
[  244.479726] usb 4-3.2: Disable of device-initiated U1 failed.
[  249.599598] usb 4-3.2: Disable of device-initiated U2 failed.
[  259.839215] Bluetooth: hci2: Failed to write uhw reg(-110)
[  259.839240] usb 4-3.2: Disable of device-initiated U1 failed.
[  264.959343] usb 4-3.2: Disable of device-initiated U2 failed.
[  270.079038] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[  275.412299] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[  275.618812] usb 4-3.2: device not accepting address 4, error -62
[  280.958852] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[  286.292034] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[  286.498618] usb 4-3.2: device not accepting address 4, error -62
[  291.838759] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[  297.172018] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[  297.378477] usb 4-3.2: device not accepting address 4, error -62
[  302.718497] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[  308.051867] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[  308.258345] usb 4-3.2: device not accepting address 4, error -62
[  308.260253] usb 4-3.2: USB disconnect, device number 4
[  313.598307] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[  318.931586] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[  319.138278] usb 4-3.2: device not accepting address 5, error -62
[  324.478224] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[  329.811444] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[  330.018032] usb 4-3.2: device not accepting address 6, error -62
[  330.018489] usb 4-3-port2: attempt power cycle
[  336.211505] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[  341.544640] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[  341.751239] usb 4-3.2: device not accepting address 7, error -62
[  347.091375] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[  352.424563] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[  352.631136] usb 4-3.2: device not accepting address 8, error -62
[  352.631538] usb 4-3-port2: unable to enumerate USB device


Interestingly, if I revert back to an known-good firmware version
20231025113744 along with your patch, the device enumerates and works fine:

[ 4001.366725] usb 4-1: new SuperSpeed USB device number 4 using xhci_hcd
[ 4001.385840] usb 4-1: New USB device found, idVendor=0e8d, idProduct=7961, bcdDevice= 1.00
[ 4001.385855] usb 4-1: New USB device strings: Mfr=6, Product=7, SerialNumber=8
[ 4001.385860] usb 4-1: Product: Wireless_Device
[ 4001.385863] usb 4-1: Manufacturer: MediaTek Inc.
[ 4001.385867] usb 4-1: SerialNumber: 000000000
[ 4001.398010] Bluetooth: hci1: HW/SW Version: 0x008a008a, Build Time: 20231025113744
[ 4004.275656] Bluetooth: hci1: Device setup in 2812288 usecs
[ 4004.275661] Bluetooth: hci1: HCI Enhanced Setup Synchronous Connection command is advertised, but not supported.
[ 4004.355137] Bluetooth: hci1: AOSP extensions version v0.96
[ 4004.355156] Bluetooth: hci1: AOSP quality report is not supported
[ 4004.355698] Bluetooth: MGMT ver 1.23

But if I then disconnect it, I get the Oops that I shared in my original
regression report:

[ 4043.436215] usb 4-1: USB disconnect, device number 4
[ 4043.437308] Oops: general protection fault, probably for non-canonical address 0xdead000000000122: 0000 [#1] PREEMPT SMP NOPTI
[ 4043.437332] CPU: 2 UID: 0 PID: 3698 Comm: kworker/2:0 Not tainted 6.11.0-rc7-00001-g0e2ad6528188-dirty #71 d90fb9085e2a0686ac48ebcc408d97b104c6fbf1
[ 4043.437352] Hardware name: Intel(R) Client Systems NUC12WSHi7/NUC12WSBi7, BIOS WSADL357.0088.2023.0505.1623 05/05/2023
[ 4043.437361] Workqueue: usb_hub_wq hub_event
[ 4043.437386] RIP: 0010:hci_unregister_dev+0x45/0x1f0 [bluetooth]
[ 4043.437548] Code: 89 ef e8 ae d4 5c c1 f0 80 8b e9 0e 00 00 08 48 89 ef e8 0e c2 5c c1 48 c7 c7 68 60 52 c1 e8 22 23 5d c1 48 8b 43 08 48 8b 13 <48> 3b 18 0f 85 f5 c7 06 00 48 3b 5a 08 0f 85 eb c7 06 00 48 89 42
[ 4043.437560] RSP: 0018:ffffa10f4ae43b98 EFLAGS: 00010246
[ 4043.437574] RAX: dead000000000122 RBX: ffff8cf86c160000 RCX: 0000000000000000
[ 4043.437585] RDX: dead000000000100 RSI: ffff8cf7b7d16c50 RDI: ffffffffc1526068
[ 4043.437594] RBP: ffff8cf86c1604d0 R08: 0000000000000000 R09: ffff8cf7401d8e10
[ 4043.437602] R10: ffffa10f4ae43ba0 R11: ffffa10f4ae43ba8 R12: ffff8cf86c160000
[ 4043.437610] R13: ffffffffc1416278 R14: ffffffffc1416278 R15: ffff8cf7f8d73850
[ 4043.437620] FS:  0000000000000000(0000) GS:ffff8d0697300000(0000) knlGS:0000000000000000
[ 4043.437632] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 4043.437641] CR2: 00007f98d66dc000 CR3: 0000000131124000 CR4: 0000000000f50ef0
[ 4043.437651] PKRU: 55555554
[ 4043.437658] Call Trace:
[ 4043.437670]  <TASK>
[ 4043.437680]  ? __die_body.cold+0x19/0x27
[ 4043.437700]  ? die_addr+0x3c/0x60
[ 4043.437716]  ? exc_general_protection+0x17d/0x400
[ 4043.437738]  ? asm_exc_general_protection+0x26/0x30
[ 4043.437760]  ? hci_unregister_dev+0x45/0x1f0 [bluetooth 6dca047d1088401e195d97746b2b4936e5756d61]
[ 4043.437930]  ? hci_unregister_dev+0x3e/0x1f0 [bluetooth 6dca047d1088401e195d97746b2b4936e5756d61]
[ 4043.438080]  btusb_disconnect+0x67/0x170 [btusb 5bf8186d9cab4c5be1762247dadb6753a7c72a7f]
[ 4043.438108]  usb_unbind_interface+0x90/0x290
[ 4043.438130]  device_release_driver_internal+0x19c/0x200
[ 4043.438150]  bus_remove_device+0xc6/0x130
[ 4043.438166]  device_del+0x161/0x3e0
[ 4043.438182]  ? kobject_put+0xa0/0x1d0
[ 4043.438196]  usb_disable_device+0x104/0x220
[ 4043.438213]  usb_disconnect+0xe6/0x2e0
[ 4043.438231]  hub_event+0x7f9/0x19d0
[ 4043.438250]  ? __pm_runtime_suspend+0x47/0xc0
[ 4043.438269]  process_one_work+0x17b/0x330
[ 4043.438287]  worker_thread+0x2c6/0x3f0
[ 4043.438304]  ? __pfx_worker_thread+0x10/0x10
[ 4043.438318]  kthread+0xcf/0x100
[ 4043.438337]  ? __pfx_kthread+0x10/0x10
[ 4043.438354]  ret_from_fork+0x31/0x50
[ 4043.438367]  ? __pfx_kthread+0x10/0x10
[ 4043.438382]  ret_from_fork_asm+0x1a/0x30
[ 4043.438403]  </TASK>
[ 4043.438408] Modules linked in: uhid mt792x_usb mt7921_common mt792x_lib mt76_connac_lib mt76_usb mt76 ccm option usb_wwan cmac algif_hash algif_skcipher af_alg sr_mod cdrom bnep mousedev joydev vfat fat snd_sof_pci_intel_tgl snd_sof_pci_intel_cnl intel_rapl_msr snd_sof_intel_hda_generic intel_rapl_common soundwire_intel intel_uncore_frequency soundwire_cadence intel_uncore_frequency_common snd_sof_intel_hda_common snd_sof_intel_hda_mlink snd_sof_intel_hda snd_sof_pci snd_sof_xtensa_dsp snd_sof iwlmvm snd_sof_utils snd_soc_hdac_hda snd_soc_acpi_intel_match soundwire_generic_allocation snd_soc_acpi soundwire_bus snd_soc_avs r8152 x86_pkg_temp_thermal intel_powerclamp libphy snd_soc_hda_codec coretemp mac80211 snd_hda_ext_core kvm_intel snd_soc_core snd_hda_codec_hdmi cdc_ether hid_generic uas usbnet snd_hda_codec_realtek snd_compress kvm usb_storage mii usbhid snd_hda_codec_generic ac97_bus snd_pcm_dmaengine snd_hda_scodec_component snd_hda_intel libarc4 snd_intel_dspcfg btusb crct10dif_pclmul snd_intel_sdw_acpi
[ 4043.438617]  crc32_pclmul iwlwifi btrtl snd_hda_codec polyval_clmulni btintel polyval_generic btbcm ghash_clmulni_intel sha512_ssse3 btmtk tps6598x sha256_ssse3 snd_hda_core typec sha1_ssse3 cfg80211 bluetooth aesni_intel snd_hwdep roles gf128mul crypto_simd snd_pcm cryptd mei_hdcp mei_pxp rapl ee1004 ov13858 snd_timer intel_cstate igc spi_nor intel_uncore i2c_i801 thunderbolt snd v4l2_fwnode mei_me v4l2_async ptp wdat_wdt i2c_smbus mtd pcspkr wmi_bmof intel_lpss_pci videodev mei pps_core soundcore intel_pmc_core i2c_mux intel_lpss rfkill idma64 igen6_edac intel_vsec serial_multi_instantiate mc pmt_telemetry pinctrl_tigerlake pmt_class acpi_pad acpi_tad mac_hid i2c_dev dm_mod sg crypto_user loop nfnetlink ip_tables x_tables ext4 crc32c_generic crc16 mbcache jbd2 xe drm_ttm_helper gpu_sched drm_suballoc_helper drm_gpuvm drm_exec i915 i2c_algo_bit drm_buddy ttm nvme intel_gtt drm_display_helper nvme_core spi_intel_pci cec xhci_pci crc32c_intel spi_intel nvme_auth xhci_pci_renesas video wmi
[ 4043.438898] ---[ end trace 0000000000000000 ]---
[ 4043.438905] RIP: 0010:hci_unregister_dev+0x45/0x1f0 [bluetooth]
[ 4043.439039] Code: 89 ef e8 ae d4 5c c1 f0 80 8b e9 0e 00 00 08 48 89 ef e8 0e c2 5c c1 48 c7 c7 68 60 52 c1 e8 22 23 5d c1 48 8b 43 08 48 8b 13 <48> 3b 18 0f 85 f5 c7 06 00 48 3b 5a 08 0f 85 eb c7 06 00 48 89 42
[ 4043.439048] RSP: 0018:ffffa10f4ae43b98 EFLAGS: 00010246
[ 4043.439058] RAX: dead000000000122 RBX: ffff8cf86c160000 RCX: 0000000000000000
[ 4043.439065] RDX: dead000000000100 RSI: ffff8cf7b7d16c50 RDI: ffffffffc1526068
[ 4043.439072] RBP: ffff8cf86c1604d0 R08: 0000000000000000 R09: ffff8cf7401d8e10
[ 4043.439078] R10: ffffa10f4ae43ba0 R11: ffffa10f4ae43ba8 R12: ffff8cf86c160000
[ 4043.439085] R13: ffffffffc1416278 R14: ffffffffc1416278 R15: ffff8cf7f8d73850
[ 4043.439091] FS:  0000000000000000(0000) GS:ffff8d0697300000(0000) knlGS:0000000000000000
[ 4043.439100] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 4043.439108] CR2: 00007f98d66dc000 CR3: 0000000131124000 CR4: 0000000000f50ef0
[ 4043.439116] PKRU: 55555554
[ 4043.439122] note: kworker/2:0[3698] exited with preempt_count 1

So, in summary, it looks as though there are two issues here:

1. The latest firmware does not seem to work well with this chipset,
   perhaps it is crashing after loading?
2. The Oops in the hci_unregister_dev function suggests some HCI
   registration bug.

Let me know if I can provide any further assistance.

Regards,

Marc
diff mbox series

Patch

diff --git a/drivers/bluetooth/btmtk.c b/drivers/bluetooth/btmtk.c
index 2b7c80043aa2..a46f70135cbd 100644
--- a/drivers/bluetooth/btmtk.c
+++ b/drivers/bluetooth/btmtk.c
@@ -1326,7 +1326,6 @@  int btmtk_usb_setup(struct hci_dev *hdev)
 		fwname = FIRMWARE_MT7668;
 		break;
 	case 0x7922:
-	case 0x7961:
 	case 0x7925:
 		/* Reset the device to ensure it's in the initial state before
 		 * downloading the firmware to ensure.
@@ -1334,7 +1333,8 @@  int btmtk_usb_setup(struct hci_dev *hdev)
 
 		if (!test_bit(BTMTK_FIRMWARE_LOADED, &btmtk_data->flags))
 			btmtk_usb_subsys_reset(hdev, dev_id);
-
+		fallthrough;
+	case 0x7961:
 		btmtk_fw_get_filename(fw_bin_name, sizeof(fw_bin_name), dev_id,
 				      fw_version, fw_flavor);