forked from Minki/linux
Bluetooth: hci_bcm: Handle empty packet after firmware loading
The Broadcom controller on the Raspberry Pi3 sends an empty packet with packet type 0x00 after launching the firmware. This will cause logging of errors. Bluetooth: hci0: Frame reassembly failed (-84) Since this seems to be an intented behaviour of the controller, handle it gracefully by parsing that empty packet with packet type 0x00 and then just simply report it as diagnostic packet. With that change no errors are logging and the packet itself is actually recorded in the Bluetooth monitor traces. < HCI Command: Broadcom Launch RAM (0x3f|0x004e) plen 4 Address: 0xffffffff > HCI Event: Command Complete (0x0e) plen 4 Broadcom Launch RAM (0x3f|0x004e) ncmd 1 Status: Success (0x00) = Vendor Diagnostic (len 0) < HCI Command: Broadcom Update UART Baud Rate (0x3f|0x0018) plen 6 00 00 00 10 0e 00 ...... > HCI Event: Command Complete (0x0e) plen 4 Broadcom Update UART Baud Rate (0x3f|0x0018) ncmd 1 Status: Success (0x00) < HCI Command: Reset (0x03|0x0003) plen 0 > HCI Event: Command Complete (0x0e) plen 4 Reset (0x03|0x0003) ncmd 1 Status: Success (0x00) Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This commit is contained in:
parent
778ead344a
commit
01d5e44ace
@ -44,6 +44,9 @@
|
|||||||
#include "btbcm.h"
|
#include "btbcm.h"
|
||||||
#include "hci_uart.h"
|
#include "hci_uart.h"
|
||||||
|
|
||||||
|
#define BCM_NULL_PKT 0x00
|
||||||
|
#define BCM_NULL_SIZE 0
|
||||||
|
|
||||||
#define BCM_LM_DIAG_PKT 0x07
|
#define BCM_LM_DIAG_PKT 0x07
|
||||||
#define BCM_LM_DIAG_SIZE 63
|
#define BCM_LM_DIAG_SIZE 63
|
||||||
|
|
||||||
@ -468,11 +471,19 @@ finalize:
|
|||||||
.lsize = 0, \
|
.lsize = 0, \
|
||||||
.maxlen = BCM_LM_DIAG_SIZE
|
.maxlen = BCM_LM_DIAG_SIZE
|
||||||
|
|
||||||
|
#define BCM_RECV_NULL \
|
||||||
|
.type = BCM_NULL_PKT, \
|
||||||
|
.hlen = BCM_NULL_SIZE, \
|
||||||
|
.loff = 0, \
|
||||||
|
.lsize = 0, \
|
||||||
|
.maxlen = BCM_NULL_SIZE
|
||||||
|
|
||||||
static const struct h4_recv_pkt bcm_recv_pkts[] = {
|
static const struct h4_recv_pkt bcm_recv_pkts[] = {
|
||||||
{ H4_RECV_ACL, .recv = hci_recv_frame },
|
{ H4_RECV_ACL, .recv = hci_recv_frame },
|
||||||
{ H4_RECV_SCO, .recv = hci_recv_frame },
|
{ H4_RECV_SCO, .recv = hci_recv_frame },
|
||||||
{ H4_RECV_EVENT, .recv = hci_recv_frame },
|
{ H4_RECV_EVENT, .recv = hci_recv_frame },
|
||||||
{ BCM_RECV_LM_DIAG, .recv = hci_recv_diag },
|
{ BCM_RECV_LM_DIAG, .recv = hci_recv_diag },
|
||||||
|
{ BCM_RECV_NULL, .recv = hci_recv_diag },
|
||||||
};
|
};
|
||||||
|
|
||||||
static int bcm_recv(struct hci_uart *hu, const void *data, int count)
|
static int bcm_recv(struct hci_uart *hu, const void *data, int count)
|
||||||
|
Loading…
Reference in New Issue
Block a user