Re: [PATCH 1/3] Bluetooth: Add new quirk for broken local ext features max_page

2020-07-13 Thread Marcel Holtmann
Hi Vasily,

>> maybe just the read sync train params command is broken? Can you change the 
>> init code and not send it and see if the rest of the init phase proceeds. I 
>> would rather have the secure connections actually tested before dismissing 
>> it altogether.
> 
> I don't think that I have any devices that support secure connections
> to test, I've got only a bluetooth mouse and headphones, both are from
> the 2.0 era.
> 
> FWIW unofficial recommendation from Realtek to Pine64 was to avoid
> using any 4.1+ features on this chip. Unfortunately I don't have any
> contacts with Realtek, so I can't confirm that.
> 
>> Mind you, there were broken Broadcom implementation of connectionless slave 
>> broadcast as well. Maybe this is similar.
> 
> I'd prefer to stick to what works unless there's some comprehensive
> test that can figure out what's broken.

check if removing the read sync trains params command makes the controller 
initialize and usable. Then we see about the rest.

Regards

Marcel



Re: [PATCH 1/3] Bluetooth: Add new quirk for broken local ext features max_page

2020-07-13 Thread Vasily Khoruzhick
On Sun, Jul 12, 2020 at 11:28 PM Marcel Holtmann  wrote:

Hi Marcel,

> maybe just the read sync train params command is broken? Can you change the 
> init code and not send it and see if the rest of the init phase proceeds. I 
> would rather have the secure connections actually tested before dismissing it 
> altogether.

I don't think that I have any devices that support secure connections
to test, I've got only a bluetooth mouse and headphones, both are from
the 2.0 era.

FWIW unofficial recommendation from Realtek to Pine64 was to avoid
using any 4.1+ features on this chip. Unfortunately I don't have any
contacts with Realtek, so I can't confirm that.

> Mind you, there were broken Broadcom implementation of connectionless slave 
> broadcast as well. Maybe this is similar.

I'd prefer to stick to what works unless there's some comprehensive
test that can figure out what's broken.

Regards,
Vasily


Re: [PATCH 1/3] Bluetooth: Add new quirk for broken local ext features max_page

2020-07-13 Thread Marcel Holtmann
Hi Vasily,

>>> Some adapters (e.g. RTL8723CS) advertise that they have more than
>>> 2 pages for local ext features, but they don't support any features
>>> declared in these pages. RTL8723CS reports max_page = 2 and declares
>>> support for sync train and secure connection, but it responds with
>>> either garbage or with error in status on corresponding commands.
>> 
>> please send the btmon for this so I can see what the controller is 
>> responding.
> 
> Here is relevant part:
> 
> < HCI Command: Read Local Extend.. (0x04|0x0004) plen 1  #228 [hci0] 6.889869
>Page: 2
>> HCI Event: Command Complete (0x0e) plen 14 #229 [hci0] 6.890487
>  Read Local Extended Features (0x04|0x0004) ncmd 2
>Status: Success (0x00)
>Page: 2/2
>Features: 0x5f 0x03 0x00 0x00 0x00 0x00 0x00 0x00
>  Connectionless Slave Broadcast - Master
>  Connectionless Slave Broadcast - Slave
>  Synchronization Train
>  Synchronization Scan
>  Inquiry Response Notification Event
>  Coarse Clock Adjustment
>  Secure Connections (Controller Support)
>  Ping
> < HCI Command: Delete Stored Lin.. (0x03|0x0012) plen 7  #230 [hci0] 6.890559
>Address: 00:00:00:00:00:00 (OUI 00-00-00)
>Delete all: 0x01
>> HCI Event: Command Complete (0x0e) plen 6  #231 [hci0] 6.891170
>  Delete Stored Link Key (0x03|0x0012) ncmd 2
>Status: Success (0x00)
>Num keys: 0
> < HCI Command: Read Synchronizat.. (0x03|0x0077) plen 0  #232 [hci0] 6.891199
>> HCI Event: Command Complete (0x0e) plen 9  #233 [hci0] 6.891788
>  Read Synchronization Train Parameters (0x03|0x0077) ncmd 2
>invalid packet size
>01 ac bd 11 80 80..
> = Close Index: 00:E0:4C:23:99:87  [hci0] 6.891832
> 
> hci0 registration stops here and bluetoothctl doesn't even see the controller.

maybe just the read sync train params command is broken? Can you change the 
init code and not send it and see if the rest of the init phase proceeds. I 
would rather have the secure connections actually tested before dismissing it 
altogether.

Mind you, there were broken Broadcom implementation of connectionless slave 
broadcast as well. Maybe this is similar.

Regards

Marcel



Re: [PATCH 1/3] Bluetooth: Add new quirk for broken local ext features max_page

2020-07-12 Thread Vasily Khoruzhick
On Tue, Jul 7, 2020 at 9:03 AM Marcel Holtmann  wrote:
>
> Hi Vasily,
>
> > Some adapters (e.g. RTL8723CS) advertise that they have more than
> > 2 pages for local ext features, but they don't support any features
> > declared in these pages. RTL8723CS reports max_page = 2 and declares
> > support for sync train and secure connection, but it responds with
> > either garbage or with error in status on corresponding commands.
>
> please send the btmon for this so I can see what the controller is responding.

Here is relevant part:

< HCI Command: Read Local Extend.. (0x04|0x0004) plen 1  #228 [hci0] 6.889869
Page: 2
> HCI Event: Command Complete (0x0e) plen 14 #229 [hci0] 6.890487
  Read Local Extended Features (0x04|0x0004) ncmd 2
Status: Success (0x00)
Page: 2/2
Features: 0x5f 0x03 0x00 0x00 0x00 0x00 0x00 0x00
  Connectionless Slave Broadcast - Master
  Connectionless Slave Broadcast - Slave
  Synchronization Train
  Synchronization Scan
  Inquiry Response Notification Event
  Coarse Clock Adjustment
  Secure Connections (Controller Support)
  Ping
< HCI Command: Delete Stored Lin.. (0x03|0x0012) plen 7  #230 [hci0] 6.890559
Address: 00:00:00:00:00:00 (OUI 00-00-00)
Delete all: 0x01
> HCI Event: Command Complete (0x0e) plen 6  #231 [hci0] 6.891170
  Delete Stored Link Key (0x03|0x0012) ncmd 2
Status: Success (0x00)
Num keys: 0
< HCI Command: Read Synchronizat.. (0x03|0x0077) plen 0  #232 [hci0] 6.891199
> HCI Event: Command Complete (0x0e) plen 9  #233 [hci0] 6.891788
  Read Synchronization Train Parameters (0x03|0x0077) ncmd 2
invalid packet size
01 ac bd 11 80 80..
= Close Index: 00:E0:4C:23:99:87  [hci0] 6.891832

hci0 registration stops here and bluetoothctl doesn't even see the controller.

> Regards
>
> Marcel
>


Re: [PATCH 1/3] Bluetooth: Add new quirk for broken local ext features max_page

2020-07-07 Thread Marcel Holtmann
Hi Vasily,

> Some adapters (e.g. RTL8723CS) advertise that they have more than
> 2 pages for local ext features, but they don't support any features
> declared in these pages. RTL8723CS reports max_page = 2 and declares
> support for sync train and secure connection, but it responds with
> either garbage or with error in status on corresponding commands.

please send the btmon for this so I can see what the controller is responding.

Regards

Marcel



[PATCH 1/3] Bluetooth: Add new quirk for broken local ext features max_page

2020-07-05 Thread Vasily Khoruzhick
Some adapters (e.g. RTL8723CS) advertise that they have more than
2 pages for local ext features, but they don't support any features
declared in these pages. RTL8723CS reports max_page = 2 and declares
support for sync train and secure connection, but it responds with
either garbage or with error in status on corresponding commands.

Signed-off-by: Vasily Khoruzhick 
---
 include/net/bluetooth/hci.h | 7 +++
 net/bluetooth/hci_event.c   | 4 +++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index 16ab6ce87883..8e4c16210d18 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -227,6 +227,13 @@ enum {
 * supported.
 */
HCI_QUIRK_VALID_LE_STATES,
+
+   /* When this quirk is set, max_page for local extended features
+* is set to 1, even if controller reports higher number. Some
+* controllers (e.g. RTL8723CS) report more pages, but they
+* don't actually support features declared there.
+*/
+   HCI_QUIRK_BROKEN_LOCAL_EXT_FTR_MAX_PAGE,
 };
 
 /* HCI device flags */
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index cfeaee347db3..df3232828978 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -700,7 +700,9 @@ static void hci_cc_read_local_ext_features(struct hci_dev 
*hdev,
if (rp->status)
return;
 
-   if (hdev->max_page < rp->max_page)
+   if (!test_bit(HCI_QUIRK_BROKEN_LOCAL_EXT_FTR_MAX_PAGE,
+ >quirks) &&
+   hdev->max_page < rp->max_page)
hdev->max_page = rp->max_page;
 
if (rp->page < HCI_MAX_PAGES)
-- 
2.27.0