* [PATCH v1] Bluetooth: btmtk: Trigger reset on firmware download failure
@ 2025-12-09 12:05 Chris Lu
2025-12-09 12:54 ` [v1] " bluez.test.bot
2025-12-10 21:09 ` [PATCH v1] " Luiz Augusto von Dentz
0 siblings, 2 replies; 4+ messages in thread
From: Chris Lu @ 2025-12-09 12:05 UTC (permalink / raw)
To: Marcel Holtmann, Johan Hedberg, Luiz Von Dentz
Cc: Sean Wang, Will Lee, SS Wu, Steve Lee, linux-bluetooth,
linux-kernel, linux-mediatek, Chris Lu
Initiate reset flow if MT79xx series BT failed to download firmware when
doing setup.
If driver is not able to get event after reset in the first section of
btmtk_usb_setup, the protocol is deemed unuable and driver will return to
prevent from repeatedly executing resets.
Signed-off-by: Chris Lu <chris.lu@mediatek.com>
---
drivers/bluetooth/btmtk.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/bluetooth/btmtk.c b/drivers/bluetooth/btmtk.c
index a8c520dc09e1..8b1443b9e9cf 100644
--- a/drivers/bluetooth/btmtk.c
+++ b/drivers/bluetooth/btmtk.c
@@ -1333,7 +1333,7 @@ int btmtk_usb_setup(struct hci_dev *hdev)
btmtk_usb_hci_wmt_sync);
if (err < 0) {
bt_dev_err(hdev, "Failed to set up firmware (%d)", err);
- return err;
+ goto reset_fw;
}
/* It's Device EndPoint Reset Option Register */
@@ -1353,7 +1353,7 @@ int btmtk_usb_setup(struct hci_dev *hdev)
err = btmtk_usb_hci_wmt_sync(hdev, &wmt_params);
if (err < 0) {
bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
- return err;
+ goto reset_fw;
}
hci_set_msft_opcode(hdev, 0xFD30);
@@ -1444,6 +1444,13 @@ int btmtk_usb_setup(struct hci_dev *hdev)
}
kfree_skb(skb);
+reset_fw:
+ if (btmtk_data->reset_sync) {
+ bt_dev_err(hdev, "Mediatek do firmware reset");
+ btmtk_reset_sync(hdev);
+ return err;
+ }
+
done:
rettime = ktime_get();
delta = ktime_sub(rettime, calltime);
--
2.45.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* RE: [v1] Bluetooth: btmtk: Trigger reset on firmware download failure
2025-12-09 12:05 [PATCH v1] Bluetooth: btmtk: Trigger reset on firmware download failure Chris Lu
@ 2025-12-09 12:54 ` bluez.test.bot
2025-12-10 21:09 ` [PATCH v1] " Luiz Augusto von Dentz
1 sibling, 0 replies; 4+ messages in thread
From: bluez.test.bot @ 2025-12-09 12:54 UTC (permalink / raw)
To: linux-bluetooth, chris.lu
[-- Attachment #1: Type: text/plain, Size: 2593 bytes --]
This is automated email and please do not reply to this email!
Dear submitter,
Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=1031700
---Test result---
Test Summary:
CheckPatch PENDING 0.39 seconds
GitLint PENDING 0.42 seconds
SubjectPrefix PASS 0.09 seconds
BuildKernel PASS 25.46 seconds
CheckAllWarning PASS 27.76 seconds
CheckSparse PASS 31.06 seconds
BuildKernel32 PASS 24.82 seconds
TestRunnerSetup PASS 551.53 seconds
TestRunner_l2cap-tester PASS 24.20 seconds
TestRunner_iso-tester PASS 88.35 seconds
TestRunner_bnep-tester PASS 6.15 seconds
TestRunner_mgmt-tester FAIL 114.62 seconds
TestRunner_rfcomm-tester PASS 9.50 seconds
TestRunner_sco-tester FAIL 14.31 seconds
TestRunner_ioctl-tester PASS 10.33 seconds
TestRunner_mesh-tester FAIL 11.41 seconds
TestRunner_smp-tester PASS 8.48 seconds
TestRunner_userchan-tester PASS 6.58 seconds
IncrementalBuild PENDING 0.97 seconds
Details
##############################
Test: CheckPatch - PENDING
Desc: Run checkpatch.pl script
Output:
##############################
Test: GitLint - PENDING
Desc: Run gitlint
Output:
##############################
Test: TestRunner_mgmt-tester - FAIL
Desc: Run mgmt-tester with test-runner
Output:
Total: 494, Passed: 489 (99.0%), Failed: 1, Not Run: 4
Failed Test Cases
Read Exp Feature - Success Failed 0.102 seconds
##############################
Test: TestRunner_sco-tester - FAIL
Desc: Run sco-tester with test-runner
Output:
WARNING: possible circular locking dependency detected
BUG: sleeping function called from invalid context at net/core/sock.c:3782
Total: 30, Passed: 30 (100.0%), Failed: 0, Not Run: 0
##############################
Test: TestRunner_mesh-tester - FAIL
Desc: Run mesh-tester with test-runner
Output:
Total: 10, Passed: 8 (80.0%), Failed: 2, Not Run: 0
Failed Test Cases
Mesh - Send cancel - 1 Timed out 1.816 seconds
Mesh - Send cancel - 2 Timed out 1.999 seconds
##############################
Test: IncrementalBuild - PENDING
Desc: Incremental build with the patches in the series
Output:
---
Regards,
Linux Bluetooth
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v1] Bluetooth: btmtk: Trigger reset on firmware download failure
2025-12-09 12:05 [PATCH v1] Bluetooth: btmtk: Trigger reset on firmware download failure Chris Lu
2025-12-09 12:54 ` [v1] " bluez.test.bot
@ 2025-12-10 21:09 ` Luiz Augusto von Dentz
2025-12-11 11:35 ` Chris Lu (陸稚泓)
1 sibling, 1 reply; 4+ messages in thread
From: Luiz Augusto von Dentz @ 2025-12-10 21:09 UTC (permalink / raw)
To: Chris Lu
Cc: Marcel Holtmann, Johan Hedberg, Sean Wang, Will Lee, SS Wu,
Steve Lee, linux-bluetooth, linux-kernel, linux-mediatek
Hi Chris,
On Tue, Dec 9, 2025 at 7:06 AM Chris Lu <chris.lu@mediatek.com> wrote:
>
> Initiate reset flow if MT79xx series BT failed to download firmware when
> doing setup.
> If driver is not able to get event after reset in the first section of
> btmtk_usb_setup, the protocol is deemed unuable and driver will return to
> prevent from repeatedly executing resets.
>
> Signed-off-by: Chris Lu <chris.lu@mediatek.com>
> ---
> drivers/bluetooth/btmtk.c | 11 +++++++++--
> 1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/bluetooth/btmtk.c b/drivers/bluetooth/btmtk.c
> index a8c520dc09e1..8b1443b9e9cf 100644
> --- a/drivers/bluetooth/btmtk.c
> +++ b/drivers/bluetooth/btmtk.c
> @@ -1333,7 +1333,7 @@ int btmtk_usb_setup(struct hci_dev *hdev)
> btmtk_usb_hci_wmt_sync);
> if (err < 0) {
> bt_dev_err(hdev, "Failed to set up firmware (%d)", err);
> - return err;
> + goto reset_fw;
> }
>
> /* It's Device EndPoint Reset Option Register */
> @@ -1353,7 +1353,7 @@ int btmtk_usb_setup(struct hci_dev *hdev)
> err = btmtk_usb_hci_wmt_sync(hdev, &wmt_params);
> if (err < 0) {
> bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
> - return err;
> + goto reset_fw;
> }
>
> hci_set_msft_opcode(hdev, 0xFD30);
> @@ -1444,6 +1444,13 @@ int btmtk_usb_setup(struct hci_dev *hdev)
> }
> kfree_skb(skb);
>
> +reset_fw:
> + if (btmtk_data->reset_sync) {
> + bt_dev_err(hdev, "Mediatek do firmware reset");
This message is a bit cryptic to me, why do we need to print that you
will be doing a reset?
> + btmtk_reset_sync(hdev);
This seems to be doing a hard reset, which I assume you are doing as
an attempt to recover by retrying to setup, but if it fails we may go
into a loop condition trying to setup so we better limit the number of
attempts.
> + return err;
> + }
> +
> done:
> rettime = ktime_get();
> delta = ktime_sub(rettime, calltime);
> --
> 2.45.2
>
--
Luiz Augusto von Dentz
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v1] Bluetooth: btmtk: Trigger reset on firmware download failure
2025-12-10 21:09 ` [PATCH v1] " Luiz Augusto von Dentz
@ 2025-12-11 11:35 ` Chris Lu (陸稚泓)
0 siblings, 0 replies; 4+ messages in thread
From: Chris Lu (陸稚泓) @ 2025-12-11 11:35 UTC (permalink / raw)
To: luiz.dentz@gmail.com
Cc: Will-CY Lee (李政穎),
Steve Lee (李視誠), marcel@holtmann.org,
SS Wu (巫憲欣), linux-kernel@vger.kernel.org,
johan.hedberg@gmail.com, Sean Wang,
linux-bluetooth@vger.kernel.org,
linux-mediatek@lists.infradead.org
Hi Luiz,
Thanks for your review and response.
On Wed, 2025-12-10 at 16:09 -0500, Luiz Augusto von Dentz wrote:
>
> External email : Please do not click links or open attachments until
> you have verified the sender or the content.
>
>
> Hi Chris,
>
> On Tue, Dec 9, 2025 at 7:06 AM Chris Lu <chris.lu@mediatek.com>
> wrote:
> >
> > Initiate reset flow if MT79xx series BT failed to download firmware
> > when
> > doing setup.
> > If driver is not able to get event after reset in the first section
> > of
> > btmtk_usb_setup, the protocol is deemed unuable and driver will
> > return to
> > prevent from repeatedly executing resets.
> >
> > Signed-off-by: Chris Lu <chris.lu@mediatek.com>
> > ---
> > drivers/bluetooth/btmtk.c | 11 +++++++++--
> > 1 file changed, 9 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/bluetooth/btmtk.c b/drivers/bluetooth/btmtk.c
> > index a8c520dc09e1..8b1443b9e9cf 100644
> > --- a/drivers/bluetooth/btmtk.c
> > +++ b/drivers/bluetooth/btmtk.c
> > @@ -1333,7 +1333,7 @@ int btmtk_usb_setup(struct hci_dev *hdev)
> >
> > btmtk_usb_hci_wmt_sync);
> > if (err < 0) {
> > bt_dev_err(hdev, "Failed to set up firmware
> > (%d)", err);
> > - return err;
> > + goto reset_fw;
> > }
> >
> > /* It's Device EndPoint Reset Option Register */
> > @@ -1353,7 +1353,7 @@ int btmtk_usb_setup(struct hci_dev *hdev)
> > err = btmtk_usb_hci_wmt_sync(hdev, &wmt_params);
> > if (err < 0) {
> > bt_dev_err(hdev, "Failed to send wmt func
> > ctrl (%d)", err);
> > - return err;
> > + goto reset_fw;
> > }
> >
> > hci_set_msft_opcode(hdev, 0xFD30);
> > @@ -1444,6 +1444,13 @@ int btmtk_usb_setup(struct hci_dev *hdev)
> > }
> > kfree_skb(skb);
> >
> > +reset_fw:
> > + if (btmtk_data->reset_sync) {
> > + bt_dev_err(hdev, "Mediatek do firmware reset");
>
> This message is a bit cryptic to me, why do we need to print that you
> will be doing a reset?
Indeed, this log can only be interpreted by Mediatek engineers. I'll
update v2 to remove this line.
>
> > + btmtk_reset_sync(hdev);
>
> This seems to be doing a hard reset, which I assume you are doing as
> an attempt to recover by retrying to setup, but if it fails we may go
> into a loop condition trying to setup so we better limit the number
> of
> attempts.
We only perform reset once when firmware download failed or 'wmt ctrl'
command failed.
Before downloading the firmware, driver will send pre-init commands to
get information such as chip id, after the reset, if those command
still can't work normally, it is considered a protocol issue that it
can't be further used. We'll not enter the reset flow again to avoid an
endless loop.
There is indeed a potential risk. If the pre-init commands are all fine
but firmware download continues to have problem, it could cause a loop
condition. Retry limit will be addressed in v2.
>
> > + return err;
> > + }
> > +
> > done:
> > rettime = ktime_get();
> > delta = ktime_sub(rettime, calltime);
> > --
> > 2.45.2
> >
>
>
> --
> Luiz Augusto von Dentz
Thanks a lot!
Chris Lu
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-12-11 11:36 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-09 12:05 [PATCH v1] Bluetooth: btmtk: Trigger reset on firmware download failure Chris Lu
2025-12-09 12:54 ` [v1] " bluez.test.bot
2025-12-10 21:09 ` [PATCH v1] " Luiz Augusto von Dentz
2025-12-11 11:35 ` Chris Lu (陸稚泓)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).