* [PATCH v4 1/3] Bluetooth: btusb: mediatek: use readx_poll_timeout instead of open coding
@ 2023-04-26 23:08 sean.wang
2023-04-26 23:08 ` [PATCH v4 2/3] Bluetooth: btmtk: introduce btmtk reset work sean.wang
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: sean.wang @ 2023-04-26 23:08 UTC (permalink / raw)
To: marcel, johan.hedberg, luiz.dentz
Cc: sean.wang, chris.lu, Soul.Huang, Leon.Yen, Deren.Wu, km.lin,
robin.chiu, Eddie.Chen, ch.yeh, jenhao.yang, Stella.Chang,
Tom.Chou, steve.lee, jsiuda, frankgor, abhishekpandit,
michaelfsun, abhishekpandit, mcchou, shawnku, linux-bluetooth,
linux-mediatek, linux-kernel
From: Sean Wang <sean.wang@mediatek.com>
Use readx_poll_timeout instead of open coding to poll the hardware reset
status until it is done.
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
---
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
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v4 2/3] Bluetooth: btmtk: introduce btmtk reset work
2023-04-26 23:08 [PATCH v4 1/3] Bluetooth: btusb: mediatek: use readx_poll_timeout instead of open coding sean.wang
@ 2023-04-26 23:08 ` sean.wang
2023-04-27 0:14 ` Luiz Augusto von Dentz
2023-04-26 23:08 ` [PATCH v4 3/3] Bluetooth: btusb: mediatek: add MediaTek devcoredump support sean.wang
2023-04-26 23:58 ` [v4,1/3] Bluetooth: btusb: mediatek: use readx_poll_timeout instead of open coding bluez.test.bot
2 siblings, 1 reply; 7+ messages in thread
From: sean.wang @ 2023-04-26 23:08 UTC (permalink / raw)
To: marcel, johan.hedberg, luiz.dentz
Cc: sean.wang, chris.lu, Soul.Huang, Leon.Yen, Deren.Wu, km.lin,
robin.chiu, Eddie.Chen, ch.yeh, jenhao.yang, Stella.Chang,
Tom.Chou, steve.lee, jsiuda, frankgor, abhishekpandit,
michaelfsun, abhishekpandit, mcchou, shawnku, linux-bluetooth,
linux-mediatek, linux-kernel, Jing Cai
From: Jing Cai <jing.cai@mediatek.com>
Introduce btmtk_reset_work which can be called whenever the firmware abort,
HCI command timeout, other fatal error happen.
Co-developed-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Jing Cai <jing.cai@mediatek.com>
---
v2, v3, v4: rebase onto the latest codebase
---
drivers/bluetooth/btmtk.c | 16 ++++++
drivers/bluetooth/btmtk.h | 14 +++++
drivers/bluetooth/btusb.c | 106 ++++++++++++++++++++------------------
3 files changed, 86 insertions(+), 50 deletions(-)
diff --git a/drivers/bluetooth/btmtk.c b/drivers/bluetooth/btmtk.c
index 809762d64fc6..77df7b5c3ef3 100644
--- a/drivers/bluetooth/btmtk.c
+++ b/drivers/bluetooth/btmtk.c
@@ -53,6 +53,8 @@ struct btmtk_section_map {
};
} __packed;
+static struct btmtk_reset_work reset_work;
+
int btmtk_setup_firmware_79xx(struct hci_dev *hdev, const char *fwname,
wmt_cmd_sync_func_t wmt_cmd_sync)
{
@@ -280,6 +282,20 @@ int btmtk_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr)
}
EXPORT_SYMBOL_GPL(btmtk_set_bdaddr);
+void btmtk_init_reset_work(struct hci_dev *hdev, work_func_t func)
+{
+ reset_work.hdev = hdev;
+ INIT_WORK(&reset_work.work, func);
+}
+EXPORT_SYMBOL_GPL(btmtk_init_reset_work);
+
+void btmtk_reset_sync(struct hci_dev *hdev)
+{
+ schedule_work(&reset_work.work);
+ flush_work(&reset_work.work);
+}
+EXPORT_SYMBOL_GPL(btmtk_reset_sync);
+
MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
MODULE_AUTHOR("Mark Chen <mark-yw.chen@mediatek.com>");
MODULE_DESCRIPTION("Bluetooth support for MediaTek devices ver " VERSION);
diff --git a/drivers/bluetooth/btmtk.h b/drivers/bluetooth/btmtk.h
index 2a88ea8e475e..22d39f637652 100644
--- a/drivers/bluetooth/btmtk.h
+++ b/drivers/bluetooth/btmtk.h
@@ -119,6 +119,11 @@ struct btmtk_hci_wmt_params {
u32 *status;
};
+struct btmtk_reset_work {
+ struct hci_dev *hdev;
+ struct work_struct work;
+};
+
typedef int (*wmt_cmd_sync_func_t)(struct hci_dev *,
struct btmtk_hci_wmt_params *);
@@ -131,6 +136,8 @@ int btmtk_setup_firmware_79xx(struct hci_dev *hdev, const char *fwname,
int btmtk_setup_firmware(struct hci_dev *hdev, const char *fwname,
wmt_cmd_sync_func_t wmt_cmd_sync);
+void btmtk_init_reset_work(struct hci_dev *hdev, work_func_t func);
+void btmtk_reset_sync(struct hci_dev *hdev);
#else
static inline int btmtk_set_bdaddr(struct hci_dev *hdev,
@@ -151,4 +158,11 @@ static int btmtk_setup_firmware(struct hci_dev *hdev, const char *fwname,
return -EOPNOTSUPP;
}
+static void btmtk_init_reset_work(struct hci_dev *hdev, work_func_t func)
+{
+}
+
+static void btmtk_reset_sync(struct hci_dev *hdev)
+{
+}
#endif
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 275e0666503d..e84f1a8d03a3 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -2946,6 +2946,59 @@ static u32 btusb_mtk_reset_done(struct hci_dev *hdev)
return val & MTK_BT_RST_DONE;
}
+static void btusb_mtk_reset_work(struct work_struct *work)
+{
+ struct btmtk_reset_work *info = container_of(work,
+ struct btmtk_reset_work,
+ work);
+ struct hci_dev *hdev = info->hdev;
+ struct btusb_data *data = hci_get_drvdata(hdev);
+ u32 val;
+ int err;
+
+ /* It's MediaTek specific bluetooth reset mechanism via USB */
+ if (test_and_set_bit(BTUSB_HW_RESET_ACTIVE, &data->flags)) {
+ bt_dev_err(hdev, "last reset failed? Not resetting again");
+ return;
+ }
+
+ err = usb_autopm_get_interface(data->intf);
+ if (err < 0)
+ return;
+
+ btusb_stop_traffic(data);
+ usb_kill_anchored_urbs(&data->tx_anchor);
+
+ /* It's Device EndPoint Reset Option Register */
+ bt_dev_dbg(hdev, "Initiating reset mechanism via uhw");
+ btusb_mtk_uhw_reg_write(data, MTK_EP_RST_OPT, MTK_EP_RST_IN_OUT_OPT);
+ btusb_mtk_uhw_reg_read(data, MTK_BT_WDT_STATUS, &val);
+
+ /* Reset the bluetooth chip via USB interface. */
+ btusb_mtk_uhw_reg_write(data, MTK_BT_SUBSYS_RST, 1);
+ btusb_mtk_uhw_reg_write(data, MTK_UDMA_INT_STA_BT, 0x000000FF);
+ btusb_mtk_uhw_reg_read(data, MTK_UDMA_INT_STA_BT, &val);
+ btusb_mtk_uhw_reg_write(data, MTK_UDMA_INT_STA_BT1, 0x000000FF);
+ btusb_mtk_uhw_reg_read(data, MTK_UDMA_INT_STA_BT1, &val);
+ /* MT7921 need to delay 20ms between toggle reset bit */
+ msleep(20);
+ btusb_mtk_uhw_reg_write(data, MTK_BT_SUBSYS_RST, 0);
+ btusb_mtk_uhw_reg_read(data, MTK_BT_SUBSYS_RST, &val);
+
+ 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)
+ bt_dev_err(hdev, "Can't get device id, subsys reset fail.");
+
+ usb_queue_reset_device(data->intf);
+
+ clear_bit(BTUSB_HW_RESET_ACTIVE, &data->flags);
+}
+
static int btusb_mtk_setup(struct hci_dev *hdev)
{
struct btusb_data *data = hci_get_drvdata(hdev);
@@ -2982,6 +3035,8 @@ static int btusb_mtk_setup(struct hci_dev *hdev)
}
}
+ btmtk_init_reset_work(hdev, btusb_mtk_reset_work);
+
switch (dev_id) {
case 0x7663:
fwname = FIRMWARE_MT7663;
@@ -3131,55 +3186,6 @@ static int btusb_mtk_shutdown(struct hci_dev *hdev)
return 0;
}
-static void btusb_mtk_cmd_timeout(struct hci_dev *hdev)
-{
- struct btusb_data *data = hci_get_drvdata(hdev);
- u32 val;
- int err;
-
- /* It's MediaTek specific bluetooth reset mechanism via USB */
- if (test_and_set_bit(BTUSB_HW_RESET_ACTIVE, &data->flags)) {
- bt_dev_err(hdev, "last reset failed? Not resetting again");
- return;
- }
-
- err = usb_autopm_get_interface(data->intf);
- if (err < 0)
- return;
-
- btusb_stop_traffic(data);
- usb_kill_anchored_urbs(&data->tx_anchor);
-
- /* It's Device EndPoint Reset Option Register */
- bt_dev_dbg(hdev, "Initiating reset mechanism via uhw");
- btusb_mtk_uhw_reg_write(data, MTK_EP_RST_OPT, MTK_EP_RST_IN_OUT_OPT);
- btusb_mtk_uhw_reg_read(data, MTK_BT_WDT_STATUS, &val);
-
- /* Reset the bluetooth chip via USB interface. */
- btusb_mtk_uhw_reg_write(data, MTK_BT_SUBSYS_RST, 1);
- btusb_mtk_uhw_reg_write(data, MTK_UDMA_INT_STA_BT, 0x000000FF);
- btusb_mtk_uhw_reg_read(data, MTK_UDMA_INT_STA_BT, &val);
- btusb_mtk_uhw_reg_write(data, MTK_UDMA_INT_STA_BT1, 0x000000FF);
- btusb_mtk_uhw_reg_read(data, MTK_UDMA_INT_STA_BT1, &val);
- /* MT7921 need to delay 20ms between toggle reset bit */
- msleep(20);
- btusb_mtk_uhw_reg_write(data, MTK_BT_SUBSYS_RST, 0);
- btusb_mtk_uhw_reg_read(data, MTK_BT_SUBSYS_RST, &val);
-
- 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)
- bt_dev_err(hdev, "Can't get device id, subsys reset fail.");
-
- usb_queue_reset_device(data->intf);
-
- clear_bit(BTUSB_HW_RESET_ACTIVE, &data->flags);
-}
-
static int btusb_recv_acl_mtk(struct hci_dev *hdev, struct sk_buff *skb)
{
struct btusb_data *data = hci_get_drvdata(hdev);
@@ -4301,7 +4307,7 @@ static int btusb_probe(struct usb_interface *intf,
hdev->setup = btusb_mtk_setup;
hdev->shutdown = btusb_mtk_shutdown;
hdev->manufacturer = 70;
- hdev->cmd_timeout = btusb_mtk_cmd_timeout;
+ hdev->cmd_timeout = btmtk_reset_sync;
hdev->set_bdaddr = btmtk_set_bdaddr;
set_bit(HCI_QUIRK_BROKEN_ENHANCED_SETUP_SYNC_CONN, &hdev->quirks);
set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks);
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v4 3/3] Bluetooth: btusb: mediatek: add MediaTek devcoredump support
2023-04-26 23:08 [PATCH v4 1/3] Bluetooth: btusb: mediatek: use readx_poll_timeout instead of open coding sean.wang
2023-04-26 23:08 ` [PATCH v4 2/3] Bluetooth: btmtk: introduce btmtk reset work sean.wang
@ 2023-04-26 23:08 ` sean.wang
2023-04-27 3:20 ` kernel test robot
2023-04-27 17:20 ` kernel test robot
2023-04-26 23:58 ` [v4,1/3] Bluetooth: btusb: mediatek: use readx_poll_timeout instead of open coding bluez.test.bot
2 siblings, 2 replies; 7+ messages in thread
From: sean.wang @ 2023-04-26 23:08 UTC (permalink / raw)
To: marcel, johan.hedberg, luiz.dentz
Cc: sean.wang, chris.lu, Soul.Huang, Leon.Yen, Deren.Wu, km.lin,
robin.chiu, Eddie.Chen, ch.yeh, jenhao.yang, Stella.Chang,
Tom.Chou, steve.lee, jsiuda, frankgor, abhishekpandit,
michaelfsun, abhishekpandit, mcchou, shawnku, linux-bluetooth,
linux-mediatek, linux-kernel, Jing Cai
From: Jing Cai <jing.cai@mediatek.com>
This patch implement function .coredump() and dmp_hdr() in btusb
driver for MediaTek controller. FW core dump was triggered by FW
specific event to show something unexpected happened in the controller.
The driver would be responsible for collecting and uploading the device
core dump pieces in hci driver using core dump API. Once we finished
the whole process, the driver would reset the controller to recover the
kind of fatal error.
Co-developed-by: Chris Lu <chris.lu@mediatek.com>
Signed-off-by: Chris Lu <chris.lu@mediatek.com>
Co-developed-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Jing Cai <jing.cai@mediatek.com>
---
v2, v3: rebase onto the latest codebase
v4: update the newest API usage for the coredump which was already
into the upstream
---
drivers/bluetooth/btmtk.c | 120 ++++++++++++++++++++++++++++++++++++++
drivers/bluetooth/btmtk.h | 13 +++++
drivers/bluetooth/btusb.c | 11 ++++
3 files changed, 144 insertions(+)
diff --git a/drivers/bluetooth/btmtk.c b/drivers/bluetooth/btmtk.c
index 77df7b5c3ef3..96c1b49cf7c0 100644
--- a/drivers/bluetooth/btmtk.c
+++ b/drivers/bluetooth/btmtk.c
@@ -18,6 +18,15 @@
#define MTK_FW_ROM_PATCH_SEC_MAP_SIZE 64
#define MTK_SEC_MAP_COMMON_SIZE 12
#define MTK_SEC_MAP_NEED_SEND_SIZE 52
+#define MTK_DRIVER_NAME_LEN 16
+#define MTK_COREDUMP_SIZE (1024 * 1000)
+#define MTK_COREDUMP_END "coredump end"
+
+enum {
+ BTMTK_COREDUMP_INIT,
+ BTMTK_COREDUMP_DISABLED,
+ BTMTK_COREDUMP_ACTIVE,
+};
struct btmtk_patch_header {
u8 datetime[16];
@@ -53,8 +62,60 @@ struct btmtk_section_map {
};
} __packed;
+static struct btmtk_coredump_info {
+ struct hci_dev *hdev;
+ char driver_name[MTK_DRIVER_NAME_LEN];
+ u32 dev_id;
+ u32 fw_version;
+ int state;
+} coredump_info;
+
static struct btmtk_reset_work reset_work;
+static void btmtk_coredump(struct hci_dev *hdev)
+{
+ int err;
+
+ err = __hci_cmd_send(hdev, 0xfd5b, 0, NULL);
+ if (err < 0)
+ bt_dev_err(hdev, "Coredump failed (%d)", err);
+}
+
+static void btmtk_coredump_hdr(struct hci_dev *hdev, struct sk_buff *skb)
+{
+ char buf[80];
+
+ snprintf(buf, sizeof(buf), "Controller Name: 0x%X\n", coredump_info.dev_id);
+ skb_put_data(skb, buf, strlen(buf));
+
+ snprintf(buf, sizeof(buf), "Firmware Version: 0x%X\n", coredump_info.fw_version);
+ skb_put_data(skb, buf, strlen(buf));
+
+ snprintf(buf, sizeof(buf), "Driver: %s\n", coredump_info.driver_name);
+ skb_put_data(skb, buf, strlen(buf));
+
+ snprintf(buf, sizeof(buf), "Vendor: MediaTek\n");
+ skb_put_data(skb, buf, strlen(buf));
+}
+
+static void btmtk_coredump_notify(struct hci_dev *hdev, int state)
+{
+ switch (state) {
+ case HCI_DEVCOREDUMP_IDLE:
+ coredump_info.state = BTMTK_COREDUMP_INIT;
+ break;
+ case HCI_DEVCOREDUMP_ACTIVE:
+ coredump_info.state = BTMTK_COREDUMP_ACTIVE;
+ break;
+ case HCI_DEVCOREDUMP_TIMEOUT:
+ case HCI_DEVCOREDUMP_ABORT:
+ case HCI_DEVCOREDUMP_DONE:
+ coredump_info.state = BTMTK_COREDUMP_INIT;
+ btmtk_reset_sync(coredump_info.hdev);
+ break;
+ }
+}
+
int btmtk_setup_firmware_79xx(struct hci_dev *hdev, const char *fwname,
wmt_cmd_sync_func_t wmt_cmd_sync)
{
@@ -296,6 +357,65 @@ void btmtk_reset_sync(struct hci_dev *hdev)
}
EXPORT_SYMBOL_GPL(btmtk_reset_sync);
+void btmtk_register_coredump(struct hci_dev *hdev, u32 dev_id,
+ const char *name, u32 fw_version)
+{
+ if (!IS_ENABLED(CONFIG_DEV_COREDUMP))
+ return;
+
+ coredump_info.hdev = hdev;
+ coredump_info.dev_id = dev_id;
+ coredump_info.fw_version = fw_version;
+ coredump_info.state = BTMTK_COREDUMP_INIT;
+ strncpy(coredump_info.driver_name, name, MTK_DRIVER_NAME_LEN - 1);
+
+ hci_devcd_register(hdev, btmtk_coredump, btmtk_coredump_hdr,
+ btmtk_coredump_notify);
+}
+EXPORT_SYMBOL_GPL(btmtk_register_coredump);
+
+int btmtk_process_coredump(struct hci_dev *hdev, struct sk_buff *skb)
+{
+ int err;
+
+ if (!IS_ENABLED(CONFIG_DEV_COREDUMP))
+ return 0;
+
+ switch (coredump_info.state) {
+ case BTMTK_COREDUMP_DISABLED:
+ err = -EINVAL;
+ break;
+ case BTMTK_COREDUMP_INIT:
+ err = hci_devcd_init(hdev, MTK_COREDUMP_SIZE);
+ if (err < 0)
+ break;
+ /* It is supposed coredump can be done within 5 seconds */
+ schedule_delayed_work(&hdev->dump.dump_timeout,
+ msecs_to_jiffies(5000));
+ fallthrough;
+ case BTMTK_COREDUMP_ACTIVE:
+ default:
+ err = hci_devcd_append(hdev, skb);
+ if (err < 0)
+ break;
+
+ if (skb->len > 12 &&
+ !strncmp((char *)&skb->data[skb->len - 13],
+ MTK_COREDUMP_END, 12))
+ hci_devcd_complete(hdev);
+
+ break;
+ }
+
+ if (err < 0) {
+ coredump_info.state = BTMTK_COREDUMP_DISABLED;
+ kfree_skb(skb);
+ }
+
+ return err;
+}
+EXPORT_SYMBOL_GPL(btmtk_process_coredump);
+
MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
MODULE_AUTHOR("Mark Chen <mark-yw.chen@mediatek.com>");
MODULE_DESCRIPTION("Bluetooth support for MediaTek devices ver " VERSION);
diff --git a/drivers/bluetooth/btmtk.h b/drivers/bluetooth/btmtk.h
index 22d39f637652..faf941ce7ca2 100644
--- a/drivers/bluetooth/btmtk.h
+++ b/drivers/bluetooth/btmtk.h
@@ -138,6 +138,9 @@ int btmtk_setup_firmware(struct hci_dev *hdev, const char *fwname,
wmt_cmd_sync_func_t wmt_cmd_sync);
void btmtk_init_reset_work(struct hci_dev *hdev, work_func_t func);
void btmtk_reset_sync(struct hci_dev *hdev);
+void btmtk_register_coredump(struct hci_dev *hdev, u32 dev_id, const char *name,
+ u32 fw_version);
+int btmtk_process_coredump(struct hci_dev *hdev, struct sk_buff *skb);
#else
static inline int btmtk_set_bdaddr(struct hci_dev *hdev,
@@ -165,4 +168,14 @@ static void btmtk_init_reset_work(struct hci_dev *hdev, work_func_t func)
static void btmtk_reset_sync(struct hci_dev *hdev)
{
}
+
+void btmtk_register_coredump(struct hci_dev *hdev, u32 dev_id, const char *name,
+ u32 fw_version)
+{
+}
+
+static int btmtk_process_coredump(struct hci_dev *hdev, struct sk_buff *skb)
+{
+ return -EOPNOTSUPP;
+}
#endif
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index e84f1a8d03a3..72a1cf83a859 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -3036,6 +3036,7 @@ static int btusb_mtk_setup(struct hci_dev *hdev)
}
btmtk_init_reset_work(hdev, btusb_mtk_reset_work);
+ btmtk_register_coredump(hdev, dev_id, btusb_driver.name, fw_version);
switch (dev_id) {
case 0x7663:
@@ -3190,6 +3191,7 @@ static int btusb_recv_acl_mtk(struct hci_dev *hdev, struct sk_buff *skb)
{
struct btusb_data *data = hci_get_drvdata(hdev);
u16 handle = le16_to_cpu(hci_acl_hdr(skb)->handle);
+ struct sk_buff *skb_cd;
switch (handle) {
case 0xfc6f: /* Firmware dump from device */
@@ -3197,6 +3199,15 @@ static int btusb_recv_acl_mtk(struct hci_dev *hdev, struct sk_buff *skb)
* suspend and thus disable auto-suspend.
*/
usb_disable_autosuspend(data->udev);
+
+ /* We need to forward the diagnostic packet to userspace daemon
+ * for backward compatibility, so we have to clone the packet
+ * extraly for the in-kernel coredump support.
+ */
+ skb_cd = skb_clone(skb, GFP_ATOMIC);
+ if (skb_cd)
+ btmtk_process_coredump(hdev, skb_cd);
+
fallthrough;
case 0x05ff: /* Firmware debug logging 1 */
case 0x05fe: /* Firmware debug logging 2 */
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* RE: [v4,1/3] Bluetooth: btusb: mediatek: use readx_poll_timeout instead of open coding
2023-04-26 23:08 [PATCH v4 1/3] Bluetooth: btusb: mediatek: use readx_poll_timeout instead of open coding sean.wang
2023-04-26 23:08 ` [PATCH v4 2/3] Bluetooth: btmtk: introduce btmtk reset work sean.wang
2023-04-26 23:08 ` [PATCH v4 3/3] Bluetooth: btusb: mediatek: add MediaTek devcoredump support sean.wang
@ 2023-04-26 23:58 ` bluez.test.bot
2 siblings, 0 replies; 7+ messages in thread
From: bluez.test.bot @ 2023-04-26 23:58 UTC (permalink / raw)
To: linux-bluetooth, sean.wang
[-- Attachment #1: Type: text/plain, Size: 2075 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=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
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v4 2/3] Bluetooth: btmtk: introduce btmtk reset work
2023-04-26 23:08 ` [PATCH v4 2/3] Bluetooth: btmtk: introduce btmtk reset work sean.wang
@ 2023-04-27 0:14 ` Luiz Augusto von Dentz
0 siblings, 0 replies; 7+ messages in thread
From: Luiz Augusto von Dentz @ 2023-04-27 0:14 UTC (permalink / raw)
To: sean.wang
Cc: marcel, johan.hedberg, chris.lu, Soul.Huang, Leon.Yen, Deren.Wu,
km.lin, robin.chiu, Eddie.Chen, ch.yeh, jenhao.yang,
Stella.Chang, Tom.Chou, steve.lee, jsiuda, frankgor,
abhishekpandit, michaelfsun, abhishekpandit, mcchou, shawnku,
linux-bluetooth, linux-mediatek, linux-kernel, Jing Cai
Hi Sean,
On Wed, Apr 26, 2023 at 4:08 PM <sean.wang@mediatek.com> wrote:
>
> From: Jing Cai <jing.cai@mediatek.com>
>
> Introduce btmtk_reset_work which can be called whenever the firmware abort,
> HCI command timeout, other fatal error happen.
>
> Co-developed-by: Sean Wang <sean.wang@mediatek.com>
> Signed-off-by: Sean Wang <sean.wang@mediatek.com>
> Signed-off-by: Jing Cai <jing.cai@mediatek.com>
> ---
> v2, v3, v4: rebase onto the latest codebase
> ---
> drivers/bluetooth/btmtk.c | 16 ++++++
> drivers/bluetooth/btmtk.h | 14 +++++
> drivers/bluetooth/btusb.c | 106 ++++++++++++++++++++------------------
> 3 files changed, 86 insertions(+), 50 deletions(-)
>
> diff --git a/drivers/bluetooth/btmtk.c b/drivers/bluetooth/btmtk.c
> index 809762d64fc6..77df7b5c3ef3 100644
> --- a/drivers/bluetooth/btmtk.c
> +++ b/drivers/bluetooth/btmtk.c
> @@ -53,6 +53,8 @@ struct btmtk_section_map {
> };
> } __packed;
>
> +static struct btmtk_reset_work reset_work;
> +
> int btmtk_setup_firmware_79xx(struct hci_dev *hdev, const char *fwname,
> wmt_cmd_sync_func_t wmt_cmd_sync)
> {
> @@ -280,6 +282,20 @@ int btmtk_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr)
> }
> EXPORT_SYMBOL_GPL(btmtk_set_bdaddr);
>
> +void btmtk_init_reset_work(struct hci_dev *hdev, work_func_t func)
> +{
> + reset_work.hdev = hdev;
> + INIT_WORK(&reset_work.work, func);
> +}
> +EXPORT_SYMBOL_GPL(btmtk_init_reset_work);
> +
> +void btmtk_reset_sync(struct hci_dev *hdev)
> +{
> + schedule_work(&reset_work.work);
> + flush_work(&reset_work.work);
> +}
> +EXPORT_SYMBOL_GPL(btmtk_reset_sync);
Lets stop assuming there is only one controller in the system, so
works like reset_work need to be store on a per hdev basis, not using
a global variable, also Im not sure why you would need dedicated work
for reset? Can't you use hci_cmd_sync_queue/hci_cmd_sync_submit?
> MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
> MODULE_AUTHOR("Mark Chen <mark-yw.chen@mediatek.com>");
> MODULE_DESCRIPTION("Bluetooth support for MediaTek devices ver " VERSION);
> diff --git a/drivers/bluetooth/btmtk.h b/drivers/bluetooth/btmtk.h
> index 2a88ea8e475e..22d39f637652 100644
> --- a/drivers/bluetooth/btmtk.h
> +++ b/drivers/bluetooth/btmtk.h
> @@ -119,6 +119,11 @@ struct btmtk_hci_wmt_params {
> u32 *status;
> };
>
> +struct btmtk_reset_work {
> + struct hci_dev *hdev;
> + struct work_struct work;
> +};
> +
> typedef int (*wmt_cmd_sync_func_t)(struct hci_dev *,
> struct btmtk_hci_wmt_params *);
>
> @@ -131,6 +136,8 @@ int btmtk_setup_firmware_79xx(struct hci_dev *hdev, const char *fwname,
>
> int btmtk_setup_firmware(struct hci_dev *hdev, const char *fwname,
> wmt_cmd_sync_func_t wmt_cmd_sync);
> +void btmtk_init_reset_work(struct hci_dev *hdev, work_func_t func);
> +void btmtk_reset_sync(struct hci_dev *hdev);
> #else
>
> static inline int btmtk_set_bdaddr(struct hci_dev *hdev,
> @@ -151,4 +158,11 @@ static int btmtk_setup_firmware(struct hci_dev *hdev, const char *fwname,
> return -EOPNOTSUPP;
> }
>
> +static void btmtk_init_reset_work(struct hci_dev *hdev, work_func_t func)
> +{
> +}
> +
> +static void btmtk_reset_sync(struct hci_dev *hdev)
> +{
> +}
> #endif
> diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
> index 275e0666503d..e84f1a8d03a3 100644
> --- a/drivers/bluetooth/btusb.c
> +++ b/drivers/bluetooth/btusb.c
> @@ -2946,6 +2946,59 @@ static u32 btusb_mtk_reset_done(struct hci_dev *hdev)
> return val & MTK_BT_RST_DONE;
> }
>
> +static void btusb_mtk_reset_work(struct work_struct *work)
> +{
> + struct btmtk_reset_work *info = container_of(work,
> + struct btmtk_reset_work,
> + work);
> + struct hci_dev *hdev = info->hdev;
> + struct btusb_data *data = hci_get_drvdata(hdev);
> + u32 val;
> + int err;
> +
> + /* It's MediaTek specific bluetooth reset mechanism via USB */
> + if (test_and_set_bit(BTUSB_HW_RESET_ACTIVE, &data->flags)) {
> + bt_dev_err(hdev, "last reset failed? Not resetting again");
> + return;
> + }
> +
> + err = usb_autopm_get_interface(data->intf);
> + if (err < 0)
> + return;
> +
> + btusb_stop_traffic(data);
> + usb_kill_anchored_urbs(&data->tx_anchor);
> +
> + /* It's Device EndPoint Reset Option Register */
> + bt_dev_dbg(hdev, "Initiating reset mechanism via uhw");
> + btusb_mtk_uhw_reg_write(data, MTK_EP_RST_OPT, MTK_EP_RST_IN_OUT_OPT);
> + btusb_mtk_uhw_reg_read(data, MTK_BT_WDT_STATUS, &val);
> +
> + /* Reset the bluetooth chip via USB interface. */
> + btusb_mtk_uhw_reg_write(data, MTK_BT_SUBSYS_RST, 1);
> + btusb_mtk_uhw_reg_write(data, MTK_UDMA_INT_STA_BT, 0x000000FF);
> + btusb_mtk_uhw_reg_read(data, MTK_UDMA_INT_STA_BT, &val);
> + btusb_mtk_uhw_reg_write(data, MTK_UDMA_INT_STA_BT1, 0x000000FF);
> + btusb_mtk_uhw_reg_read(data, MTK_UDMA_INT_STA_BT1, &val);
> + /* MT7921 need to delay 20ms between toggle reset bit */
> + msleep(20);
> + btusb_mtk_uhw_reg_write(data, MTK_BT_SUBSYS_RST, 0);
> + btusb_mtk_uhw_reg_read(data, MTK_BT_SUBSYS_RST, &val);
> +
> + 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)
> + bt_dev_err(hdev, "Can't get device id, subsys reset fail.");
> +
> + usb_queue_reset_device(data->intf);
> +
> + clear_bit(BTUSB_HW_RESET_ACTIVE, &data->flags);
> +}
> +
> static int btusb_mtk_setup(struct hci_dev *hdev)
> {
> struct btusb_data *data = hci_get_drvdata(hdev);
> @@ -2982,6 +3035,8 @@ static int btusb_mtk_setup(struct hci_dev *hdev)
> }
> }
>
> + btmtk_init_reset_work(hdev, btusb_mtk_reset_work);
> +
> switch (dev_id) {
> case 0x7663:
> fwname = FIRMWARE_MT7663;
> @@ -3131,55 +3186,6 @@ static int btusb_mtk_shutdown(struct hci_dev *hdev)
> return 0;
> }
>
> -static void btusb_mtk_cmd_timeout(struct hci_dev *hdev)
> -{
> - struct btusb_data *data = hci_get_drvdata(hdev);
> - u32 val;
> - int err;
> -
> - /* It's MediaTek specific bluetooth reset mechanism via USB */
> - if (test_and_set_bit(BTUSB_HW_RESET_ACTIVE, &data->flags)) {
> - bt_dev_err(hdev, "last reset failed? Not resetting again");
> - return;
> - }
> -
> - err = usb_autopm_get_interface(data->intf);
> - if (err < 0)
> - return;
> -
> - btusb_stop_traffic(data);
> - usb_kill_anchored_urbs(&data->tx_anchor);
> -
> - /* It's Device EndPoint Reset Option Register */
> - bt_dev_dbg(hdev, "Initiating reset mechanism via uhw");
> - btusb_mtk_uhw_reg_write(data, MTK_EP_RST_OPT, MTK_EP_RST_IN_OUT_OPT);
> - btusb_mtk_uhw_reg_read(data, MTK_BT_WDT_STATUS, &val);
> -
> - /* Reset the bluetooth chip via USB interface. */
> - btusb_mtk_uhw_reg_write(data, MTK_BT_SUBSYS_RST, 1);
> - btusb_mtk_uhw_reg_write(data, MTK_UDMA_INT_STA_BT, 0x000000FF);
> - btusb_mtk_uhw_reg_read(data, MTK_UDMA_INT_STA_BT, &val);
> - btusb_mtk_uhw_reg_write(data, MTK_UDMA_INT_STA_BT1, 0x000000FF);
> - btusb_mtk_uhw_reg_read(data, MTK_UDMA_INT_STA_BT1, &val);
> - /* MT7921 need to delay 20ms between toggle reset bit */
> - msleep(20);
> - btusb_mtk_uhw_reg_write(data, MTK_BT_SUBSYS_RST, 0);
> - btusb_mtk_uhw_reg_read(data, MTK_BT_SUBSYS_RST, &val);
> -
> - 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)
> - bt_dev_err(hdev, "Can't get device id, subsys reset fail.");
> -
> - usb_queue_reset_device(data->intf);
> -
> - clear_bit(BTUSB_HW_RESET_ACTIVE, &data->flags);
> -}
> -
> static int btusb_recv_acl_mtk(struct hci_dev *hdev, struct sk_buff *skb)
> {
> struct btusb_data *data = hci_get_drvdata(hdev);
> @@ -4301,7 +4307,7 @@ static int btusb_probe(struct usb_interface *intf,
> hdev->setup = btusb_mtk_setup;
> hdev->shutdown = btusb_mtk_shutdown;
> hdev->manufacturer = 70;
> - hdev->cmd_timeout = btusb_mtk_cmd_timeout;
> + hdev->cmd_timeout = btmtk_reset_sync;
> hdev->set_bdaddr = btmtk_set_bdaddr;
> set_bit(HCI_QUIRK_BROKEN_ENHANCED_SETUP_SYNC_CONN, &hdev->quirks);
> set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks);
> --
> 2.25.1
>
--
Luiz Augusto von Dentz
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v4 3/3] Bluetooth: btusb: mediatek: add MediaTek devcoredump support
2023-04-26 23:08 ` [PATCH v4 3/3] Bluetooth: btusb: mediatek: add MediaTek devcoredump support sean.wang
@ 2023-04-27 3:20 ` kernel test robot
2023-04-27 17:20 ` kernel test robot
1 sibling, 0 replies; 7+ messages in thread
From: kernel test robot @ 2023-04-27 3:20 UTC (permalink / raw)
To: sean.wang, marcel, johan.hedberg, luiz.dentz
Cc: llvm, oe-kbuild-all, sean.wang, chris.lu, Soul.Huang, Leon.Yen,
Deren.Wu, km.lin, robin.chiu, Eddie.Chen, ch.yeh, jenhao.yang,
Stella.Chang, Tom.Chou, steve.lee, jsiuda, frankgor,
abhishekpandit, michaelfsun, abhishekpandit, mcchou, shawnku,
linux-bluetooth, linux-mediatek, linux-kernel, Jing Cai
Hi,
kernel test robot noticed the following build errors:
[auto build test ERROR on bluetooth/master]
[also build test ERROR on bluetooth-next/master linus/master v6.3 next-20230426]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/sean-wang-mediatek-com/Bluetooth-btmtk-introduce-btmtk-reset-work/20230427-071054
base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git master
patch link: https://lore.kernel.org/r/01d3fe06d3a1e333b193e7d9fbc9cbfb4ee5d02b.1682549719.git.objelf%40gmail.com
patch subject: [PATCH v4 3/3] Bluetooth: btusb: mediatek: add MediaTek devcoredump support
config: i386-randconfig-a013 (https://download.01.org/0day-ci/archive/20230427/202304271131.HetsXcxM-lkp@intel.com/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/d253c927e94cb7e88bfcd0182449d29e477ca011
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review sean-wang-mediatek-com/Bluetooth-btmtk-introduce-btmtk-reset-work/20230427-071054
git checkout d253c927e94cb7e88bfcd0182449d29e477ca011
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/bluetooth/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202304271131.HetsXcxM-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/bluetooth/btmtk.c:104:7: error: use of undeclared identifier 'HCI_DEVCOREDUMP_IDLE'
case HCI_DEVCOREDUMP_IDLE:
^
>> drivers/bluetooth/btmtk.c:107:7: error: use of undeclared identifier 'HCI_DEVCOREDUMP_ACTIVE'; did you mean 'BTMTK_COREDUMP_ACTIVE'?
case HCI_DEVCOREDUMP_ACTIVE:
^~~~~~~~~~~~~~~~~~~~~~
BTMTK_COREDUMP_ACTIVE
drivers/bluetooth/btmtk.c:28:2: note: 'BTMTK_COREDUMP_ACTIVE' declared here
BTMTK_COREDUMP_ACTIVE,
^
>> drivers/bluetooth/btmtk.c:110:7: error: use of undeclared identifier 'HCI_DEVCOREDUMP_TIMEOUT'
case HCI_DEVCOREDUMP_TIMEOUT:
^
>> drivers/bluetooth/btmtk.c:111:7: error: use of undeclared identifier 'HCI_DEVCOREDUMP_ABORT'
case HCI_DEVCOREDUMP_ABORT:
^
>> drivers/bluetooth/btmtk.c:112:7: error: use of undeclared identifier 'HCI_DEVCOREDUMP_DONE'
case HCI_DEVCOREDUMP_DONE:
^
>> drivers/bluetooth/btmtk.c:372:2: error: implicit declaration of function 'hci_devcd_register' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
hci_devcd_register(hdev, btmtk_coredump, btmtk_coredump_hdr,
^
>> drivers/bluetooth/btmtk.c:389:9: error: implicit declaration of function 'hci_devcd_init' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
err = hci_devcd_init(hdev, MTK_COREDUMP_SIZE);
^
drivers/bluetooth/btmtk.c:389:9: note: did you mean 'hci_sock_init'?
include/net/bluetooth/bluetooth.h:577:5: note: 'hci_sock_init' declared here
int hci_sock_init(void);
^
>> drivers/bluetooth/btmtk.c:393:32: error: no member named 'dump' in 'struct hci_dev'
schedule_delayed_work(&hdev->dump.dump_timeout,
~~~~ ^
>> drivers/bluetooth/btmtk.c:398:9: error: implicit declaration of function 'hci_devcd_append' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
err = hci_devcd_append(hdev, skb);
^
drivers/bluetooth/btmtk.c:398:9: note: did you mean 'hci_dev_open'?
include/net/bluetooth/hci_core.h:1500:5: note: 'hci_dev_open' declared here
int hci_dev_open(__u16 dev);
^
>> drivers/bluetooth/btmtk.c:405:4: error: implicit declaration of function 'hci_devcd_complete' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
hci_devcd_complete(hdev);
^
drivers/bluetooth/btmtk.c:405:4: note: did you mean 'hci_devcd_append'?
drivers/bluetooth/btmtk.c:398:9: note: 'hci_devcd_append' declared here
err = hci_devcd_append(hdev, skb);
^
10 errors generated.
vim +/HCI_DEVCOREDUMP_IDLE +104 drivers/bluetooth/btmtk.c
100
101 static void btmtk_coredump_notify(struct hci_dev *hdev, int state)
102 {
103 switch (state) {
> 104 case HCI_DEVCOREDUMP_IDLE:
105 coredump_info.state = BTMTK_COREDUMP_INIT;
106 break;
> 107 case HCI_DEVCOREDUMP_ACTIVE:
108 coredump_info.state = BTMTK_COREDUMP_ACTIVE;
109 break;
> 110 case HCI_DEVCOREDUMP_TIMEOUT:
> 111 case HCI_DEVCOREDUMP_ABORT:
> 112 case HCI_DEVCOREDUMP_DONE:
113 coredump_info.state = BTMTK_COREDUMP_INIT;
114 btmtk_reset_sync(coredump_info.hdev);
115 break;
116 }
117 }
118
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v4 3/3] Bluetooth: btusb: mediatek: add MediaTek devcoredump support
2023-04-26 23:08 ` [PATCH v4 3/3] Bluetooth: btusb: mediatek: add MediaTek devcoredump support sean.wang
2023-04-27 3:20 ` kernel test robot
@ 2023-04-27 17:20 ` kernel test robot
1 sibling, 0 replies; 7+ messages in thread
From: kernel test robot @ 2023-04-27 17:20 UTC (permalink / raw)
To: sean.wang, marcel, johan.hedberg, luiz.dentz
Cc: oe-kbuild-all, sean.wang, chris.lu, Soul.Huang, Leon.Yen,
Deren.Wu, km.lin, robin.chiu, Eddie.Chen, ch.yeh, jenhao.yang,
Stella.Chang, Tom.Chou, steve.lee, jsiuda, frankgor,
abhishekpandit, michaelfsun, abhishekpandit, mcchou, shawnku,
linux-bluetooth, linux-mediatek, linux-kernel, Jing Cai
Hi,
kernel test robot noticed the following build warnings:
[auto build test WARNING on bluetooth/master]
[also build test WARNING on bluetooth-next/master linus/master v6.3 next-20230426]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/sean-wang-mediatek-com/Bluetooth-btmtk-introduce-btmtk-reset-work/20230427-071054
base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git master
patch link: https://lore.kernel.org/r/01d3fe06d3a1e333b193e7d9fbc9cbfb4ee5d02b.1682549719.git.objelf%40gmail.com
patch subject: [PATCH v4 3/3] Bluetooth: btusb: mediatek: add MediaTek devcoredump support
config: x86_64-randconfig-r035-20211003 (https://download.01.org/0day-ci/archive/20230428/202304280130.Aoglg07c-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0
reproduce (this is a W=1 build):
# https://github.com/intel-lab-lkp/linux/commit/d253c927e94cb7e88bfcd0182449d29e477ca011
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review sean-wang-mediatek-com/Bluetooth-btmtk-introduce-btmtk-reset-work/20230427-071054
git checkout d253c927e94cb7e88bfcd0182449d29e477ca011
# save the config file
mkdir build_dir && cp config build_dir/.config
make W=1 O=build_dir ARCH=x86_64 olddefconfig
make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash drivers/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202304280130.Aoglg07c-lkp@intel.com/
All warnings (new ones prefixed by >>):
In file included from drivers/bluetooth/btusb.c:28:
>> drivers/bluetooth/btmtk.h:172:6: warning: no previous prototype for 'btmtk_register_coredump' [-Wmissing-prototypes]
172 | void btmtk_register_coredump(struct hci_dev *hdev, u32 dev_id, const char *name,
| ^~~~~~~~~~~~~~~~~~~~~~~
vim +/btmtk_register_coredump +172 drivers/bluetooth/btmtk.h
171
> 172 void btmtk_register_coredump(struct hci_dev *hdev, u32 dev_id, const char *name,
173 u32 fw_version)
174 {
175 }
176
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-04-27 17:23 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-26 23:08 [PATCH v4 1/3] Bluetooth: btusb: mediatek: use readx_poll_timeout instead of open coding sean.wang
2023-04-26 23:08 ` [PATCH v4 2/3] Bluetooth: btmtk: introduce btmtk reset work sean.wang
2023-04-27 0:14 ` Luiz Augusto von Dentz
2023-04-26 23:08 ` [PATCH v4 3/3] Bluetooth: btusb: mediatek: add MediaTek devcoredump support sean.wang
2023-04-27 3:20 ` kernel test robot
2023-04-27 17:20 ` kernel test robot
2023-04-26 23:58 ` [v4,1/3] Bluetooth: btusb: mediatek: use readx_poll_timeout instead of open coding bluez.test.bot
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).