linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).