linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 0/3] Bluetooth: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING
@ 2022-07-20 14:07 Zijun Hu
  2022-07-20 14:07 ` [PATCH v1 1/3] Bluetooth: hci_sync: " Zijun Hu
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Zijun Hu @ 2022-07-20 14:07 UTC (permalink / raw)
  To: marcel, johan.hedberg, luiz.dentz, davem, edumazet, kuba, pabeni,
	luiz.von.dentz, swyterzone, quic_zijuhu
  Cc: linux-kernel, linux-bluetooth, netdev

This patch series remove quirk HCI_QUIRK_BROKEN_ERR_DATA_REPORTING
for bluetooth, in order to check if HCI commands
HCI_Read|Write_Default_Erroneous_Data_Reporting work fine, it make BT core
driver addtionally check feature bit "Erroneous Data Reporting" instead of
the quirk set by BT device driver.

Zijun Hu (3):
  Bluetooth: hci_sync: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING
  Bluetooth: btusb: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING for QCA
  Bluetooth: btusb: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING for fake
    CSR

 drivers/bluetooth/btusb.c   |  2 --
 include/net/bluetooth/hci.h | 12 +-----------
 net/bluetooth/hci_sync.c    |  7 ++-----
 3 files changed, 3 insertions(+), 18 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v1 1/3] Bluetooth: hci_sync: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING
  2022-07-20 14:07 [PATCH v1 0/3] Bluetooth: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING Zijun Hu
@ 2022-07-20 14:07 ` Zijun Hu
  2022-07-20 14:07 ` [PATCH v1 2/3] Bluetooth: btusb: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING for QCA Zijun Hu
  2022-07-20 14:07 ` [PATCH v1 3/3] Bluetooth: btusb: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING for fake CSR Zijun Hu
  2 siblings, 0 replies; 6+ messages in thread
From: Zijun Hu @ 2022-07-20 14:07 UTC (permalink / raw)
  To: marcel, johan.hedberg, luiz.dentz, davem, edumazet, kuba, pabeni,
	luiz.von.dentz, swyterzone, quic_zijuhu
  Cc: linux-kernel, linux-bluetooth, netdev

Check feature bit "Erroneous Data Reporting" instead of quirk
HCI_QUIRK_BROKEN_ERR_DATA_REPORTING to decide if HCI command
HCI_Read|Write_Default_Erroneous_Data_Reporting work fine.

BLUETOOTH CORE SPECIFICATION Version 5.3 | Vol 2, Part C | page 587
This feature indicates whether the device is able to support the
Packet_Status_Flag and the HCI commands HCI_Write_Default_-
Erroneous_Data_Reporting and HCI_Read_Default_Erroneous_-
Data_Reporting.

ALL BT controller whose device driver set the quirk currently does not
enable the fearture bit as shown by below btmon log:

@ RAW Open: hcitool (privileged) version 2.22
< HCI Command: Read Local Supported Commands (0x04|0x0002) plen 0
> HCI Event: Command Complete (0x0e) plen 68
      Read Local Supported Commands (0x04|0x0002) ncmd 1
        Status: Success (0x00)
        Commands: 288 entries
......
          Read Default Erroneous Data Reporting (Octet 18 - Bit 2)
          Write Default Erroneous Data Reporting (Octet 18 - Bit 3)
......

< HCI Command: Read Default Erroneous Data Reporting (0x03|0x005a) plen 0
> HCI Event: Command Complete (0x0e) plen 4
      Read Default Erroneous Data Reporting (0x03|0x005a) ncmd 1
        Status: Unknown HCI Command (0x01)

< HCI Command: Read Local Supported Features (0x04|0x0003) plen 0
> HCI Event: Command Complete (0x0e) plen 12
      Read Local Supported Features (0x04|0x0003) ncmd 1
        Status: Success (0x00)
        Features: 0xff 0xfe 0x0f 0xfe 0xd8 0x3f 0x5b 0x87
          3 slot packets
......

Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
Tested-by: Zijun Hu <quic_zijuhu@quicinc.com>
---
 include/net/bluetooth/hci.h | 12 +-----------
 net/bluetooth/hci_sync.c    |  7 ++-----
 2 files changed, 3 insertions(+), 16 deletions(-)

diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index 4a45c48eb0d2..927f51b92854 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -228,17 +228,6 @@ enum {
 	 */
 	HCI_QUIRK_VALID_LE_STATES,
 
-	/* When this quirk is set, then erroneous data reporting
-	 * is ignored. This is mainly due to the fact that the HCI
-	 * Read Default Erroneous Data Reporting command is advertised,
-	 * but not supported; these controllers often reply with unknown
-	 * command and tend to lock up randomly. Needing a hard reset.
-	 *
-	 * This quirk can be set before hci_register_dev is called or
-	 * during the hdev->setup vendor callback.
-	 */
-	HCI_QUIRK_BROKEN_ERR_DATA_REPORTING,
-
 	/*
 	 * When this quirk is set, then the hci_suspend_notifier is not
 	 * registered. This is intended for devices which drop completely
@@ -497,6 +486,7 @@ enum {
 #define LMP_EXT_INQ	0x01
 #define LMP_SIMUL_LE_BR	0x02
 #define LMP_SIMPLE_PAIR	0x08
+#define LMP_ERR_DATA_REPORTING 0x20
 #define LMP_NO_FLUSH	0x40
 
 #define LMP_LSTO	0x01
diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
index 464a5e2c56fb..0b6987b37c03 100644
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c
@@ -3221,7 +3221,7 @@ static int hci_read_page_scan_activity_sync(struct hci_dev *hdev)
 static int hci_read_def_err_data_reporting_sync(struct hci_dev *hdev)
 {
 	if (!(hdev->commands[18] & 0x04) ||
-	    test_bit(HCI_QUIRK_BROKEN_ERR_DATA_REPORTING, &hdev->quirks))
+	    !(hdev->features[0][6] & LMP_ERR_DATA_REPORTING))
 		return 0;
 
 	return __hci_cmd_sync_status(hdev, HCI_OP_READ_DEF_ERR_DATA_REPORTING,
@@ -3706,7 +3706,7 @@ static int hci_set_err_data_report_sync(struct hci_dev *hdev)
 	bool enabled = hci_dev_test_flag(hdev, HCI_WIDEBAND_SPEECH_ENABLED);
 
 	if (!(hdev->commands[18] & 0x08) ||
-	    test_bit(HCI_QUIRK_BROKEN_ERR_DATA_REPORTING, &hdev->quirks))
+	    !(hdev->features[0][6] & LMP_ERR_DATA_REPORTING))
 		return 0;
 
 	if (enabled == hdev->err_data_reporting)
@@ -3865,9 +3865,6 @@ static const struct {
 	HCI_QUIRK_BROKEN(STORED_LINK_KEY,
 			 "HCI Delete Stored Link Key command is advertised, "
 			 "but not supported."),
-	HCI_QUIRK_BROKEN(ERR_DATA_REPORTING,
-			 "HCI Read Default Erroneous Data Reporting command is "
-			 "advertised, but not supported."),
 	HCI_QUIRK_BROKEN(READ_TRANSMIT_POWER,
 			 "HCI Read Transmit Power Level command is advertised, "
 			 "but not supported."),
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v1 2/3] Bluetooth: btusb: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING for QCA
  2022-07-20 14:07 [PATCH v1 0/3] Bluetooth: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING Zijun Hu
  2022-07-20 14:07 ` [PATCH v1 1/3] Bluetooth: hci_sync: " Zijun Hu
@ 2022-07-20 14:07 ` Zijun Hu
  2022-07-20 14:07 ` [PATCH v1 3/3] Bluetooth: btusb: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING for fake CSR Zijun Hu
  2 siblings, 0 replies; 6+ messages in thread
From: Zijun Hu @ 2022-07-20 14:07 UTC (permalink / raw)
  To: marcel, johan.hedberg, luiz.dentz, davem, edumazet, kuba, pabeni,
	luiz.von.dentz, swyterzone, quic_zijuhu
  Cc: linux-kernel, linux-bluetooth, netdev

QCA BT controllers do not enable feature bit "Erroneous Data Reporting"
currently, BT core driver will check the feature bit instead of the quirk
to decide if HCI command HCI_Read|Write_Default_Erroneous_Data_Reporting
work fine, so remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING for QCA.

Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
Tested-by: Zijun Hu <quic_zijuhu@quicinc.com>
---
 drivers/bluetooth/btusb.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index fb1a67189412..f0f86c5c3b37 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -3355,7 +3355,6 @@ static int btusb_setup_qca(struct hci_dev *hdev)
 	 * work with the likes of HSP/HFP mSBC.
 	 */
 	set_bit(HCI_QUIRK_BROKEN_ENHANCED_SETUP_SYNC_CONN, &hdev->quirks);
-	set_bit(HCI_QUIRK_BROKEN_ERR_DATA_REPORTING, &hdev->quirks);
 
 	return 0;
 }
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v1 3/3] Bluetooth: btusb: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING for fake CSR
  2022-07-20 14:07 [PATCH v1 0/3] Bluetooth: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING Zijun Hu
  2022-07-20 14:07 ` [PATCH v1 1/3] Bluetooth: hci_sync: " Zijun Hu
  2022-07-20 14:07 ` [PATCH v1 2/3] Bluetooth: btusb: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING for QCA Zijun Hu
@ 2022-07-20 14:07 ` Zijun Hu
  2022-07-20 15:38   ` Luiz Augusto von Dentz
  2 siblings, 1 reply; 6+ messages in thread
From: Zijun Hu @ 2022-07-20 14:07 UTC (permalink / raw)
  To: marcel, johan.hedberg, luiz.dentz, davem, edumazet, kuba, pabeni,
	luiz.von.dentz, swyterzone, quic_zijuhu
  Cc: linux-kernel, linux-bluetooth, netdev

Fake CSR BT controllers do not enable feature "Erroneous Data Reporting"
currently, BT core driver will check the feature bit instead of the quirk
to decide if HCI command HCI_Read|Write_Default_Erroneous_Data_Reporting
work fine, so remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING for fake CSR.

Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
---
 drivers/bluetooth/btusb.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index f0f86c5c3b37..f2b3d31d56cf 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -2072,7 +2072,6 @@ static int btusb_setup_csr(struct hci_dev *hdev)
 		 * without these the controller will lock up.
 		 */
 		set_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks);
-		set_bit(HCI_QUIRK_BROKEN_ERR_DATA_REPORTING, &hdev->quirks);
 		set_bit(HCI_QUIRK_BROKEN_FILTER_CLEAR_ALL, &hdev->quirks);
 		set_bit(HCI_QUIRK_NO_SUSPEND_NOTIFIER, &hdev->quirks);
 
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v1 3/3] Bluetooth: btusb: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING for fake CSR
  2022-07-20 14:07 ` [PATCH v1 3/3] Bluetooth: btusb: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING for fake CSR Zijun Hu
@ 2022-07-20 15:38   ` Luiz Augusto von Dentz
  2022-07-21  1:28     ` quic_zijuhu
  0 siblings, 1 reply; 6+ messages in thread
From: Luiz Augusto von Dentz @ 2022-07-20 15:38 UTC (permalink / raw)
  To: Zijun Hu
  Cc: Marcel Holtmann, Johan Hedberg, David Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Luiz Augusto Von Dentz, swyterzone,
	Linux Kernel Mailing List, linux-bluetooth,
	open list:NETWORKING [GENERAL]

Hi Zijun,

On Wed, Jul 20, 2022 at 7:07 AM Zijun Hu <quic_zijuhu@quicinc.com> wrote:
>
> Fake CSR BT controllers do not enable feature "Erroneous Data Reporting"
> currently, BT core driver will check the feature bit instead of the quirk
> to decide if HCI command HCI_Read|Write_Default_Erroneous_Data_Reporting
> work fine, so remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING for fake CSR.
>
> Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
> ---
>  drivers/bluetooth/btusb.c | 1 -
>  1 file changed, 1 deletion(-)
>
> diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
> index f0f86c5c3b37..f2b3d31d56cf 100644
> --- a/drivers/bluetooth/btusb.c
> +++ b/drivers/bluetooth/btusb.c
> @@ -2072,7 +2072,6 @@ static int btusb_setup_csr(struct hci_dev *hdev)
>                  * without these the controller will lock up.
>                  */
>                 set_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks);
> -               set_bit(HCI_QUIRK_BROKEN_ERR_DATA_REPORTING, &hdev->quirks);
>                 set_bit(HCI_QUIRK_BROKEN_FILTER_CLEAR_ALL, &hdev->quirks);
>                 set_bit(HCI_QUIRK_NO_SUSPEND_NOTIFIER, &hdev->quirks);

You will probably need to remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING
last otherwise it breaks the build in between patches, and please
double check if there are no other instances of driver using it or
perhaps leave it defined in case the feature is broken for some reason
but then we need a macro that checks both the quirk and the feature
bit.

> --
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
>


-- 
Luiz Augusto von Dentz

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v1 3/3] Bluetooth: btusb: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING for fake CSR
  2022-07-20 15:38   ` Luiz Augusto von Dentz
@ 2022-07-21  1:28     ` quic_zijuhu
  0 siblings, 0 replies; 6+ messages in thread
From: quic_zijuhu @ 2022-07-21  1:28 UTC (permalink / raw)
  To: Luiz Augusto von Dentz
  Cc: Marcel Holtmann, Johan Hedberg, David Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Luiz Augusto Von Dentz, swyterzone,
	Linux Kernel Mailing List, linux-bluetooth,
	open list:NETWORKING [GENERAL]

On 7/20/2022 11:38 PM, Luiz Augusto von Dentz wrote:
> Hi Zijun,
> 
> On Wed, Jul 20, 2022 at 7:07 AM Zijun Hu <quic_zijuhu@quicinc.com> wrote:
>>
>> Fake CSR BT controllers do not enable feature "Erroneous Data Reporting"
>> currently, BT core driver will check the feature bit instead of the quirk
>> to decide if HCI command HCI_Read|Write_Default_Erroneous_Data_Reporting
>> work fine, so remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING for fake CSR.
>>
>> Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
>> ---
>>  drivers/bluetooth/btusb.c | 1 -
>>  1 file changed, 1 deletion(-)
>>
>> diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
>> index f0f86c5c3b37..f2b3d31d56cf 100644
>> --- a/drivers/bluetooth/btusb.c
>> +++ b/drivers/bluetooth/btusb.c
>> @@ -2072,7 +2072,6 @@ static int btusb_setup_csr(struct hci_dev *hdev)
>>                  * without these the controller will lock up.
>>                  */
>>                 set_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks);
>> -               set_bit(HCI_QUIRK_BROKEN_ERR_DATA_REPORTING, &hdev->quirks);
>>                 set_bit(HCI_QUIRK_BROKEN_FILTER_CLEAR_ALL, &hdev->quirks);
>>                 set_bit(HCI_QUIRK_NO_SUSPEND_NOTIFIER, &hdev->quirks);
> 
> You will probably need to remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING
> last otherwise it breaks the build in between patches, and please
> double check if there are no other instances of driver using it or
> perhaps leave it defined in case the feature is broken for some reason
> but then we need a macro that checks both the quirk and the feature
> bit.
> 
okay, i will split this change to solve build error between patches.

yes.  only QCA and CSR device with USB I/F use it. no other driver use it

the quirk was introduced to mark HCI_Read|Write_Default_Erroneous_Data_Reporting
broken, but the reason why these two HCI commands don't work fine is that the feature
"Erroneous Data Reporting" is not enabled by firmware.
so we need to check the feature bit instead of the quirk and don't also need the quirk.

>> --
>> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
>>
> 
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-07-21  1:28 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-20 14:07 [PATCH v1 0/3] Bluetooth: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING Zijun Hu
2022-07-20 14:07 ` [PATCH v1 1/3] Bluetooth: hci_sync: " Zijun Hu
2022-07-20 14:07 ` [PATCH v1 2/3] Bluetooth: btusb: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING for QCA Zijun Hu
2022-07-20 14:07 ` [PATCH v1 3/3] Bluetooth: btusb: Remove HCI_QUIRK_BROKEN_ERR_DATA_REPORTING for fake CSR Zijun Hu
2022-07-20 15:38   ` Luiz Augusto von Dentz
2022-07-21  1:28     ` quic_zijuhu

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).