2023-04-26 23:11:00

by Sean Wang

[permalink] [raw]
Subject: [PATCH v4 1/3] Bluetooth: btusb: mediatek: use readx_poll_timeout instead of open coding

From: Sean Wang <[email protected]>

Use readx_poll_timeout instead of open coding to poll the hardware reset
status until it is done.

Signed-off-by: Sean Wang <[email protected]>
---
v2: use 20ms as the unit to poll according to the requirement of
readx_poll_timeout
v3: refine btusb_mtk_reset_done and drop the necessary error check
in btusb_mtk_cmd_timeout
v4: rebase onto the latest codebase
---
drivers/bluetooth/btusb.c | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 2a8e2bb038f5..275e0666503d 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -2566,8 +2566,6 @@ static int btusb_setup_realtek(struct hci_dev *hdev)
#define MTK_EP_RST_OPT 0x74011890
#define MTK_EP_RST_IN_OUT_OPT 0x00010001
#define MTK_BT_RST_DONE 0x00000100
-#define MTK_BT_RESET_WAIT_MS 100
-#define MTK_BT_RESET_NUM_TRIES 10

static void btusb_mtk_wmt_recv(struct urb *urb)
{
@@ -2938,6 +2936,16 @@ static int btusb_mtk_id_get(struct btusb_data *data, u32 reg, u32 *id)
return btusb_mtk_reg_read(data, reg, id);
}

+static u32 btusb_mtk_reset_done(struct hci_dev *hdev)
+{
+ struct btusb_data *data = hci_get_drvdata(hdev);
+ u32 val = 0;
+
+ btusb_mtk_uhw_reg_read(data, MTK_BT_MISC, &val);
+
+ return val & MTK_BT_RST_DONE;
+}
+
static int btusb_mtk_setup(struct hci_dev *hdev)
{
struct btusb_data *data = hci_get_drvdata(hdev);
@@ -3127,7 +3135,7 @@ static void btusb_mtk_cmd_timeout(struct hci_dev *hdev)
{
struct btusb_data *data = hci_get_drvdata(hdev);
u32 val;
- int err, retry = 0;
+ int err;

/* It's MediaTek specific bluetooth reset mechanism via USB */
if (test_and_set_bit(BTUSB_HW_RESET_ACTIVE, &data->flags)) {
@@ -3158,18 +3166,10 @@ static void btusb_mtk_cmd_timeout(struct hci_dev *hdev)
btusb_mtk_uhw_reg_write(data, MTK_BT_SUBSYS_RST, 0);
btusb_mtk_uhw_reg_read(data, MTK_BT_SUBSYS_RST, &val);

- /* Poll the register until reset is completed */
- do {
- btusb_mtk_uhw_reg_read(data, MTK_BT_MISC, &val);
- if (val & MTK_BT_RST_DONE) {
- bt_dev_dbg(hdev, "Bluetooth Reset Successfully");
- break;
- }
-
- bt_dev_dbg(hdev, "Polling Bluetooth Reset CR");
- retry++;
- msleep(MTK_BT_RESET_WAIT_MS);
- } while (retry < MTK_BT_RESET_NUM_TRIES);
+ err = readx_poll_timeout(btusb_mtk_reset_done, hdev, val,
+ val & MTK_BT_RST_DONE, 20000, 1000000);
+ if (err < 0)
+ bt_dev_err(hdev, "Reset timeout");

btusb_mtk_id_get(data, 0x70010200, &val);
if (!val)
--
2.25.1


2023-04-26 23:58:54

by bluez.test.bot

[permalink] [raw]
Subject: RE: [v4,1/3] Bluetooth: btusb: mediatek: use readx_poll_timeout instead of open coding

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=743473

---Test result---

Test Summary:
CheckPatch PASS 2.91 seconds
GitLint FAIL 1.27 seconds
SubjectPrefix PASS 0.38 seconds
BuildKernel PASS 32.63 seconds
CheckAllWarning PASS 35.52 seconds
CheckSparse PASS 41.39 seconds
CheckSmatch PASS 109.94 seconds
BuildKernel32 PASS 31.82 seconds
TestRunnerSetup PASS 452.25 seconds
TestRunner_l2cap-tester PASS 17.25 seconds
TestRunner_iso-tester PASS 21.54 seconds
TestRunner_bnep-tester PASS 5.65 seconds
TestRunner_mgmt-tester PASS 117.22 seconds
TestRunner_rfcomm-tester PASS 9.05 seconds
TestRunner_sco-tester PASS 8.47 seconds
TestRunner_ioctl-tester PASS 9.83 seconds
TestRunner_mesh-tester PASS 7.26 seconds
TestRunner_smp-tester PASS 8.28 seconds
TestRunner_userchan-tester PASS 5.96 seconds
IncrementalBuild PASS 42.65 seconds

Details
##############################
Test: GitLint - FAIL
Desc: Run gitlint
Output:
[v4,1/3] Bluetooth: btusb: mediatek: use readx_poll_timeout instead of open coding

WARNING: I3 - ignore-body-lines: gitlint will be switching from using Python regex 'match' (match beginning) to 'search' (match anywhere) semantics. Please review your ignore-body-lines.regex option accordingly. To remove this warning, set general.regex-style-search=True. More details: https://jorisroovers.github.io/gitlint/configuration/#regex-style-search
1: T1 Title exceeds max length (82>80): "[v4,1/3] Bluetooth: btusb: mediatek: use readx_poll_timeout instead of open coding"


---
Regards,
Linux Bluetooth