From: Brennan Ashton <brn@deako.com>
To: Marcel Holtmann <marcel@holtmann.org>
Cc: "linux-bluetooth@vger.kernel.org" <linux-bluetooth@vger.kernel.org>
Subject: Re: BCM43341B0 Frame reassembly failed
Date: Thu, 22 Mar 2018 16:48:42 -0700 [thread overview]
Message-ID: <1521762522.7136.11.camel@deako.com> (raw)
In-Reply-To: <D4216F60-512D-4F87-9820-7178A2742140@holtmann.org>
On Fri, 2018-03-23 at 00:06 +0100, Marcel Holtmann wrote:
> Hi Brennan,
>
> > > > I recently brought an Intel Edison board with a BCM43341B0 chip
> > > > up
> > > > from
> > > > 4.9 to 4.16.0-rc6 but I am having reliability issues when using
> > > > btattach instead of the previous brcm_patchram_plus utility to
> > > > attach
> > > > the device.
> > > >
> > > >
> > > > The hci communication with the bluetooth chip gets corrupted
> > > > almost
> > > > always when creating a GATT connection. Thowing "Bluetooth:
> > > > hci0:
> > > > Frame reassembly failed (-84)" and then requiring the device to
> > > > be
> > > > reset to communicate again.
> > > >
> > > > Kernel logs interleaved with attaching the device:
> > > > # /usr/bin/btattach --bredr /dev/ttyS0 -P bcm -S 3000000 &
> > > > # Attaching Primary controller to /dev/ttyS0
> > > > [ 53.148206] Bluetooth: HCI UART driver ver 2.3
> > > > [ 53.152758] Bluetooth: HCI UART protocol H4 registered
> > > > [ 53.157970] Bluetooth: HCI UART protocol Three-wire (H5)
> > > > registered
> > > > [ 53.164512] hci_bcm hci_bcm: hci_bcm device registered.
> > > > [ 53.170445] Bluetooth: HCI UART protocol Broadcom registered
> > > > Switched line discipline from 0 to 15
> > > > Device index 0 attached
> > > > [ 53.333220] Bluetooth: hci0: BCM: chip id 82
> > > > [ 53.340184] Bluetooth: hci0: BCM: features 0x2f
> > > > [ 53.368421] Bluetooth: hci0: BCM43341B0
> > > > [ 53.372338] Bluetooth: hci0: BCM43341B0 (002.001.014) build
> > > > 0000
> > > > [ 57.843684] Bluetooth: hci0: BCM (002.001.014) build 0166
> > >
> > > if you have a chance, I like to see the complete binary btmon -w
> > > trace.log.
> >
> > I have attached two traces starting the monitoring and then
> > attaching
> > the bluetooth device, first with btattach and second with the
> > patchram.
> >
> > btattach-trace.log patchram-trace.log
> >
> > The with btattach you can see the failure on connect, with patchram
> > the
> > full connection is successful as is the disconnect.
> >
> > >
> > > However I think we need to figure out what is causing the -EILSEQ
> > > error in the h4_recv_buf() in hci_h4.c. There are more than one
> > > in it
> > > and you have to do some printk debugging to figure out which one
> > > it
> > > is.
> > >
> > > So if you do something like this, then we might be able to debug
> > > what
> > > is going on in the H:4 stream.
> > >
> > > diff --git a/drivers/bluetooth/hci_h4.c
> > > b/drivers/bluetooth/hci_h4.c
> > > index fb97a3bf069b..ba9b293f4948 100644
> > > --- a/drivers/bluetooth/hci_h4.c
> > > +++ b/drivers/bluetooth/hci_h4.c
> > > @@ -201,8 +201,13 @@ struct sk_buff *h4_recv_buf(struct hci_dev
> > > *hdev, struct sk_buff *skb,
> > > }
> > >
> > > /* Check for invalid packet type */
> > > - if (!skb)
> > > + if (!skb) {
> > > + printk(KERN_INFO "H4: Invalid
> > > packet
> > > type\n");
> > > + print_hex_dump(KERN_INFO, " ",
> > > + DUMP_PREFIX_OFFSET
> > > ,
> > > 16, 1,
> > > + buffer, count,
> > > true);
> > > return ERR_PTR(-EILSEQ);
> > > + }
> > >
> > > count -= 1;
> > > buffer += 1;
> > > @@ -224,6 +229,9 @@ struct sk_buff *h4_recv_buf(struct hci_dev
> > > *hdev,
> > > struct sk_buff *skb,
> > > }
> > >
> > > if (i >= pkts_count) {
> > > + printk(KERN_INFO "H4: Corrupted packet
> > > type\n");
> > > + print_hex_dump(KERN_INFO, " ",
> > > DUMP_PREFIX_OFFSET,
> > > + 16, 1, skb->data, skb-
> > > >len,
> > > true);
> > > kfree_skb(skb);
> > > return ERR_PTR(-EILSEQ);
> > > }
> > > @@ -259,6 +267,10 @@ struct sk_buff *h4_recv_buf(struct hci_dev
> > > *hdev, struct sk_buff *skb,
> > > break;
> > > default:
> > > /* Unsupported variable length */
> > > + printk(KERN_INFO "H4: Invalid
> > > variable len\n");
> > > + print_hex_dump(KERN_INFO, " ",
> > > + DUMP_PREFIX_OFFSET
> > > ,
> > > 16, 1,
> > > + skb->data, skb-
> > > >len,
> > > true);
> > > kfree_skb(skb);
> > > return ERR_PTR(-EILSEQ);
> > > }
> > >
> > > If the H:4 stream fails for whatever reason, then that is pretty
> > > bad
> > > since there is no recovery.
> >
> >
> > Here are the results with the printk patch:
> > Kernel (btattach)
> >
> > [ 73.192554] Bluetooth: HCI UART driver ver 2.3
> > [ 73.197063] Bluetooth: HCI UART protocol H4 registered
> > [ 73.202268] Bluetooth: HCI UART protocol Three-wire (H5)
> > registered
> > [ 73.208744] hci_bcm hci_bcm: hci_bcm device registered.
> > [ 73.214382] Bluetooth: HCI UART protocol Broadcom registered
> > [ 73.393060] Bluetooth: hci0: BCM: chip id 82
> > [ 73.398965] Bluetooth: hci0: BCM: features 0x2f
> > [ 73.624991] Bluetooth: hci0: BCM43341B0
> > [ 73.747834] Bluetooth: hci0: BCM43341B0 (002.001.014) build 0000
> > [ 74.317254] random: crng init done
> > [ 78.234907] Bluetooth: hci0: BCM (002.001.014) build 0166
> > [ 124.797242] H4: Invalid packet type
> > [ 124.800808] 00000000: 90 9a 01 00 40 00 01 01 3e 54 00 18 45
> > 69 24
> > 00 ....@...>T..Ei$.
> > [ 124.809049] 00000010: 00 00 f4 01
> > 00 .....
> > [ 124.816332] Bluetooth: hci0: Frame reassembly failed (-84)
>
> so here is the problem, we detect a 0x90 packet type in the stream.
> If we detect that, we would need to re-synchronize to a H:4 valid
> packet type. Can you compare timestamps and see what the packet
> before and after of this is. btmon and dmesg can print absolute
> timestamps.
>
I am worried we are going to far away looking at this, since attaching
to the device differently seems to be triggering this. Maybe the serial
interface is being configured differently here:
https://github.com/01org/edison-firmware/blob/master/broadcom_cws/bluet
ooth/firmware/brcm_patchram_plus.c
I think this is what you are asking for though. I aligned the time-
stamps of the kernel and btmon messages:
< HCI Command: LE Set Adve.. (0x08|0x0006) plen 15 #312 [hci0]
23:35:24.170102
Min advertising interval: 1280.000 msec (0x0800)
Max advertising interval: 1280.000 msec (0x0800)
Type: Connectable undirected - ADV_IND (0x00)
Own address type: Public (0x00)
Direct address type: Public (0x00)
Direct address: 00:00:00:00:00:00 (OUI 00-00-00)
Channel map: 37, 38, 39 (0x07)
Filter policy: Allow Scan Request from Any, Allow Connect
Request from Any (0x00)
> HCI Event: Command Complete (0x0e) plen 4 #313 [hci0]
23:35:24.173680
LE Set Advertising Parameters (0x08|0x0006) ncmd 1
Status: Success (0x00)
< HCI Command: LE Set Adver.. (0x08|0x000a) plen 1 #314 [hci0]
23:35:24.173990
Advertising: Enabled (0x01)
> HCI Event: Command Complete (0x0e) plen 4 #315 [hci0]
23:35:24.176283
LE Set Advertise Enable (0x08|0x000a) ncmd 1
Status: Success (0x00)
@ Control Event: 0xffff {0x0003} [hci0]
23:35:24.176434
01 00 3e 00 00 01
2018-03-22T23:35:34,770131+0000 H4: Invalid packet type
2018-03-22T23:35:34,773701+0000 00000000: 90 9a 01 00 40 00 01 01 0e
e7 86 49 6f 4d 24 00 ....@......IoM$.
2018-03-22T23:35:34,781939+0000 00000010: 00 00 f4 01
00 .....
2018-03-22T23:35:34,789248+0000 Bluetooth: hci0: Frame reassembly
failed (-84)
2018-03-22T23:35:35,025555+0000 Bluetooth: hci0: ACL packet for unknown
connection handle 64
> ACL Data RX: Handle 64 flags 0x02 dlen 11 #316 [hci0]
23:35:36.025425
ATT: Read By Group Type Request (0x10) len 6
Handle range: 0x0001-0xffff
Attribute group type: Primary Service (0x2800)
> HCI Event: LE Meta Event (0x3e) plen 10 #317 [hci0]
23:35:36.393267
LE Connection Update Complete (0x03)
Status: Success (0x00)
Handle: 64
Connection interval: 7.50 msec (0x0006)
Connection latency: 0 (0x0000)
Supervision timeout: 5000 msec (0x01f4)
2018-03-22T23:35:39,952909+0000 Bluetooth: hci0: ACL packet for unknown
connection handle 64
> ACL Data RX: Handle 64 flags 0x02 dlen 11 #318 [hci0]
23:35:40.952760
ATT: Read By Group Type Request (0x10) len 6
Handle range: 0x0001-0xffff
Attribute group type: Primary Service (0x2800)
2018-03-22T23:35:44,970395+0000 Bluetooth: hci0: ACL packet for unknown
connection handle 64
> ACL Data RX: Handle 64 flags 0x02 dlen 11 #319 [hci0]
23:35:45.970242
ATT: Read By Group Type Request (0x10) len 6
Handle range: 0x0001-0xffff
Attribute group type: Primary Service (0x2800)
> HCI Event: Disconnect Complete (0x05) plen 4 #320 [hci0]
23:35:50.995471
Status: Success (0x00)
Handle: 64
Reason: Remote User Terminated Connection (0x13)
next prev parent reply other threads:[~2018-03-22 23:48 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-21 21:48 BCM43341B0 Frame reassembly failed Brennan Ashton
2018-03-22 5:21 ` Marcel Holtmann
2018-03-22 22:53 ` Brennan Ashton
2018-03-22 23:06 ` Marcel Holtmann
2018-03-22 23:48 ` Brennan Ashton [this message]
2018-03-23 8:15 ` Marcel Holtmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1521762522.7136.11.camel@deako.com \
--to=brn@deako.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=marcel@holtmann.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox