Bluetooth: h4_recv: frame reassembly failed



Hi all,
when i use hcitool scan command i’m getting the following error:
h4_recv :Frame Reassembly Failed

This error is coming because of invalid hci event packet type;
below is the part of error code.this is coming from h4_recv_buf() function.

In h4_recv_buf(…)

skb = bt_skb_alloc((&pkts[i])->maxlen,GFP_ATOMIC);
hci_skb_pkt_type(skb) = (&pkts[i])->type;
hci_skb_expect(skb) = (&pkts[i])->hlen;

/* Check for invalid packet type */
if (!skb)
return ERR_PTR(-EILSEQ); (here its returning)

generally the correct hci event packet type should be 0x04 but the packet type i’m getting is 0xfd.

where its getting wrong?



Could you provide more information about board (DragonBoard-410c, Hikey960…) and OS (debian, OE…)


it is on debian 820 with 4.9 kernel
i’m using hciattach command specifying any protocol
hciattach -s 115200 /dev/ttyMSM1 any

so here its initiatizing h4 protocol.
hcitool scan returning: hci reassembly failed (-84)
and i want to know whether h4 protocol requires any firmware?



You should try to update with latest debian image, my kernel is 4.11 and Bluetooth seems to work well.
Actually ‘any’ protocol means that driver will understand only generic H4 HCI payload, and won’t perform any device specific action. If a vendor formatted packet is received, you can eventually get a reassembly failure message.

In Theory we should use something like ‘btattach -B /dev/ttyMSM1 -P qca’ to use the QCA driver and then be able to patch the firmware and switch to full operating speed, but this does not work for now. Driver expects a rampatch_00440302. bin firmware which does not exist.


In latest kernel this is working fine.but i want to know whether h4 uses firmware?



I’m not sure to understand the question, H4 encapsulates HCI protocol to send packets from the Host to the BT controller, then BT controller/firmware takes and schedules action depending the packet content (command, data, …). Firmware is embedded in the BT controller but can be patched (bug fix, new features) at initialization. In Linux, generic H4 driver does not perform any patching of the controller’s firmware but ‘uses’ it as is.