Bluetooth: btintel: Print Firmware Sequencer information
Firmware sequencer (FSEQ) is a common code shared across Bluetooth and Wifi. Printing FSEQ will help to debug if there is any mismatch between Bluetooth and Wifi FSEQ. Signed-off-by: Kiran K <kiran.k@intel.com> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This commit is contained in:
parent
f7cbce60a3
commit
a7ba218a44
@ -2670,6 +2670,119 @@ static void btintel_set_msft_opcode(struct hci_dev *hdev, u8 hw_variant)
|
||||
}
|
||||
}
|
||||
|
||||
static void btintel_print_fseq_info(struct hci_dev *hdev)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
u8 *p;
|
||||
u32 val;
|
||||
const char *str;
|
||||
|
||||
skb = __hci_cmd_sync(hdev, 0xfcb3, 0, NULL, HCI_CMD_TIMEOUT);
|
||||
if (IS_ERR(skb)) {
|
||||
bt_dev_dbg(hdev, "Reading fseq status command failed (%ld)",
|
||||
PTR_ERR(skb));
|
||||
return;
|
||||
}
|
||||
|
||||
if (skb->len < (sizeof(u32) * 16 + 2)) {
|
||||
bt_dev_dbg(hdev, "Malformed packet of length %u received",
|
||||
skb->len);
|
||||
kfree_skb(skb);
|
||||
return;
|
||||
}
|
||||
|
||||
p = skb_pull_data(skb, 1);
|
||||
if (*p) {
|
||||
bt_dev_dbg(hdev, "Failed to get fseq status (0x%2.2x)", *p);
|
||||
kfree_skb(skb);
|
||||
return;
|
||||
}
|
||||
|
||||
p = skb_pull_data(skb, 1);
|
||||
switch (*p) {
|
||||
case 0:
|
||||
str = "Success";
|
||||
break;
|
||||
case 1:
|
||||
str = "Fatal error";
|
||||
break;
|
||||
case 2:
|
||||
str = "Semaphore acquire error";
|
||||
break;
|
||||
default:
|
||||
str = "Unknown error";
|
||||
break;
|
||||
}
|
||||
|
||||
if (*p) {
|
||||
bt_dev_err(hdev, "Fseq status: %s (0x%2.2x)", str, *p);
|
||||
kfree_skb(skb);
|
||||
return;
|
||||
}
|
||||
|
||||
bt_dev_info(hdev, "Fseq status: %s (0x%2.2x)", str, *p);
|
||||
|
||||
val = get_unaligned_le32(skb_pull_data(skb, 4));
|
||||
bt_dev_dbg(hdev, "Reason: 0x%8.8x", val);
|
||||
|
||||
val = get_unaligned_le32(skb_pull_data(skb, 4));
|
||||
bt_dev_dbg(hdev, "Global version: 0x%8.8x", val);
|
||||
|
||||
val = get_unaligned_le32(skb_pull_data(skb, 4));
|
||||
bt_dev_dbg(hdev, "Installed version: 0x%8.8x", val);
|
||||
|
||||
p = skb->data;
|
||||
skb_pull_data(skb, 4);
|
||||
bt_dev_info(hdev, "Fseq executed: %2.2u.%2.2u.%2.2u.%2.2u", p[0], p[1],
|
||||
p[2], p[3]);
|
||||
|
||||
p = skb->data;
|
||||
skb_pull_data(skb, 4);
|
||||
bt_dev_info(hdev, "Fseq BT Top: %2.2u.%2.2u.%2.2u.%2.2u", p[0], p[1],
|
||||
p[2], p[3]);
|
||||
|
||||
val = get_unaligned_le32(skb_pull_data(skb, 4));
|
||||
bt_dev_dbg(hdev, "Fseq Top init version: 0x%8.8x", val);
|
||||
|
||||
val = get_unaligned_le32(skb_pull_data(skb, 4));
|
||||
bt_dev_dbg(hdev, "Fseq Cnvio init version: 0x%8.8x", val);
|
||||
|
||||
val = get_unaligned_le32(skb_pull_data(skb, 4));
|
||||
bt_dev_dbg(hdev, "Fseq MBX Wifi file version: 0x%8.8x", val);
|
||||
|
||||
val = get_unaligned_le32(skb_pull_data(skb, 4));
|
||||
bt_dev_dbg(hdev, "Fseq BT version: 0x%8.8x", val);
|
||||
|
||||
val = get_unaligned_le32(skb_pull_data(skb, 4));
|
||||
bt_dev_dbg(hdev, "Fseq Top reset address: 0x%8.8x", val);
|
||||
|
||||
val = get_unaligned_le32(skb_pull_data(skb, 4));
|
||||
bt_dev_dbg(hdev, "Fseq MBX timeout: 0x%8.8x", val);
|
||||
|
||||
val = get_unaligned_le32(skb_pull_data(skb, 4));
|
||||
bt_dev_dbg(hdev, "Fseq MBX ack: 0x%8.8x", val);
|
||||
|
||||
val = get_unaligned_le32(skb_pull_data(skb, 4));
|
||||
bt_dev_dbg(hdev, "Fseq CNVi id: 0x%8.8x", val);
|
||||
|
||||
val = get_unaligned_le32(skb_pull_data(skb, 4));
|
||||
bt_dev_dbg(hdev, "Fseq CNVr id: 0x%8.8x", val);
|
||||
|
||||
val = get_unaligned_le32(skb_pull_data(skb, 4));
|
||||
bt_dev_dbg(hdev, "Fseq Error handle: 0x%8.8x", val);
|
||||
|
||||
val = get_unaligned_le32(skb_pull_data(skb, 4));
|
||||
bt_dev_dbg(hdev, "Fseq Magic noalive indication: 0x%8.8x", val);
|
||||
|
||||
val = get_unaligned_le32(skb_pull_data(skb, 4));
|
||||
bt_dev_dbg(hdev, "Fseq OTP version: 0x%8.8x", val);
|
||||
|
||||
val = get_unaligned_le32(skb_pull_data(skb, 4));
|
||||
bt_dev_dbg(hdev, "Fseq MBX otp version: 0x%8.8x", val);
|
||||
|
||||
kfree_skb(skb);
|
||||
}
|
||||
|
||||
static int btintel_setup_combined(struct hci_dev *hdev)
|
||||
{
|
||||
const u8 param[1] = { 0xFF };
|
||||
@ -2902,6 +3015,7 @@ static int btintel_setup_combined(struct hci_dev *hdev)
|
||||
|
||||
err = btintel_bootloader_setup_tlv(hdev, &ver_tlv);
|
||||
btintel_register_devcoredump_support(hdev);
|
||||
btintel_print_fseq_info(hdev);
|
||||
break;
|
||||
default:
|
||||
bt_dev_err(hdev, "Unsupported Intel hw variant (%u)",
|
||||
|
Loading…
x
Reference in New Issue
Block a user