Skip to content

Commit f3b845e

Browse files
kirankrishnappa-intelVudentz
authored andcommitted
Bluetooth: btintel: Add support to download intermediate loader
Some variants of Intel controllers like BlazarI supports downloading of Intermediate bootloader (IML) image. IML gives flexibility to fix issues as its not possible to fix issue in Primary bootloader once flashed to ROM. This patch adds the support to download IML before downloading operational firmware image. dmesg logs: [13.399003] Bluetooth: Core ver 2.22 [13.399006] Bluetooth: Starting self testing [13.401194] Bluetooth: ECDH test passed in 2135 usecs [13.421175] Bluetooth: SMP test passed in 597 usecs [13.421184] Bluetooth: Finished self testing [13.422919] Bluetooth: HCI device and connection manager initialized [13.422923] Bluetooth: HCI socket layer initialized [13.422925] Bluetooth: L2CAP socket layer initialized [13.422930] Bluetooth: SCO socket layer initialized [13.458065] Bluetooth: hci0: Device revision is 0 [13.458071] Bluetooth: hci0: Secure boot is disabled [13.458072] Bluetooth: hci0: OTP lock is disabled [13.458072] Bluetooth: hci0: API lock is enabled [13.458073] Bluetooth: hci0: Debug lock is disabled [13.458073] Bluetooth: hci0: Minimum firmware build 1 week 10 2014 [13.458075] Bluetooth: hci0: Bootloader timestamp 2022.46 buildtype 1 build 26590 [13.458324] Bluetooth: hci0: DSM reset method type: 0x00 [13.460678] Bluetooth: hci0: Found device firmware: intel/ibt-0090-0291-iml.sfi [13.460684] Bluetooth: hci0: Boot Address: 0x30099000 [13.460685] Bluetooth: hci0: Firmware Version: 227-11.24 [13.562554] Bluetooth: hci0: Waiting for firmware download to complete [13.563023] Bluetooth: hci0: Firmware loaded in 99941 usecs [13.563057] Bluetooth: hci0: Waiting for device to boot [13.565029] Bluetooth: hci0: Malformed MSFT vendor event: 0x02 [13.565148] Bluetooth: hci0: Device booted in 2064 usecs [13.567065] Bluetooth: hci0: No device address configured [13.569010] Bluetooth: hci0: Found device firmware: intel/ibt-0090-0291.sfi [13.569061] Bluetooth: hci0: Boot Address: 0x10000800 [13.569062] Bluetooth: hci0: Firmware Version: 227-11.24 [13.788891] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [13.788897] Bluetooth: BNEP filters: protocol multicast [13.788902] Bluetooth: BNEP socket layer initialized [15.435905] Bluetooth: hci0: Waiting for firmware download to complete [15.436016] Bluetooth: hci0: Firmware loaded in 1823233 usecs [15.436258] Bluetooth: hci0: Waiting for device to boot [15.471140] Bluetooth: hci0: Device booted in 34277 usecs [15.471201] Bluetooth: hci0: Malformed MSFT vendor event: 0x02 [15.471487] Bluetooth: hci0: Found Intel DDC parameters: intel/ibt-0090-0291.ddc [15.474353] Bluetooth: hci0: Applying Intel DDC parameters completed [15.474486] Bluetooth: hci0: Found Intel DDC parameters: intel/bdaddress.cfg [15.475299] Bluetooth: hci0: Applying Intel DDC parameters completed [15.479381] Bluetooth: hci0: Firmware timestamp 2024.10 buildtype 3 build 58595 [15.479385] Bluetooth: hci0: Firmware SHA1: 0xb4f3cc46 [15.483243] Bluetooth: hci0: Fseq status: Success (0x00) [15.483246] Bluetooth: hci0: Fseq executed: 00.00.00.00 [15.483247] Bluetooth: hci0: Fseq BT Top: 00.00.00.00 [15.578712] Bluetooth: MGMT ver 1.22 [15.822682] Bluetooth: RFCOMM TTY layer initialized [15.822690] Bluetooth: RFCOMM socket layer initialized [15.822695] Bluetooth: RFCOMM ver 1.11 Signed-off-by: Kiran K <[email protected]> Signed-off-by: Luiz Augusto von Dentz <[email protected]>
1 parent 5ec6feb commit f3b845e

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

drivers/bluetooth/btintel.c

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,9 @@ static int btintel_version_info_tlv(struct hci_dev *hdev,
521521
version->min_fw_build_nn, version->min_fw_build_cw,
522522
2000 + version->min_fw_build_yy);
523523
break;
524+
case BTINTEL_IMG_IML:
525+
variant = "Intermediate loader";
526+
break;
524527
case BTINTEL_IMG_OP:
525528
variant = "Firmware";
526529
break;
@@ -2194,10 +2197,26 @@ static void btintel_get_fw_name_tlv(const struct intel_version_tlv *ver,
21942197
char *fw_name, size_t len,
21952198
const char *suffix)
21962199
{
2200+
const char *format;
21972201
/* The firmware file name for new generation controllers will be
21982202
* ibt-<cnvi_top type+cnvi_top step>-<cnvr_top type+cnvr_top step>
21992203
*/
2200-
snprintf(fw_name, len, "intel/ibt-%04x-%04x.%s",
2204+
switch (ver->cnvi_top & 0xfff) {
2205+
/* Only Blazar product supports downloading of intermediate loader
2206+
* image
2207+
*/
2208+
case BTINTEL_CNVI_BLAZARI:
2209+
if (ver->img_type == BTINTEL_IMG_BOOTLOADER)
2210+
format = "intel/ibt-%04x-%04x-iml.%s";
2211+
else
2212+
format = "intel/ibt-%04x-%04x.%s";
2213+
break;
2214+
default:
2215+
format = "intel/ibt-%04x-%04x.%s";
2216+
break;
2217+
}
2218+
2219+
snprintf(fw_name, len, format,
22012220
INTEL_CNVX_TOP_PACK_SWAB(INTEL_CNVX_TOP_TYPE(ver->cnvi_top),
22022221
INTEL_CNVX_TOP_STEP(ver->cnvi_top)),
22032222
INTEL_CNVX_TOP_PACK_SWAB(INTEL_CNVX_TOP_TYPE(ver->cnvr_top),
@@ -2607,6 +2626,23 @@ static int btintel_bootloader_setup_tlv(struct hci_dev *hdev,
26072626
if (err)
26082627
return err;
26092628

2629+
err = btintel_read_version_tlv(hdev, ver);
2630+
if (err)
2631+
return err;
2632+
2633+
/* If image type returned is BTINTEL_IMG_IML, then controller supports
2634+
* intermediae loader image
2635+
*/
2636+
if (ver->img_type == BTINTEL_IMG_IML) {
2637+
err = btintel_prepare_fw_download_tlv(hdev, ver, &boot_param);
2638+
if (err)
2639+
return err;
2640+
2641+
err = btintel_boot(hdev, boot_param);
2642+
if (err)
2643+
return err;
2644+
}
2645+
26102646
btintel_clear_flag(hdev, INTEL_BOOTLOADER);
26112647

26122648
btintel_get_fw_name_tlv(ver, ddcname, sizeof(ddcname), "ddc");

drivers/bluetooth/btintel.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,10 @@ struct intel_tlv {
5151
u8 val[];
5252
} __packed;
5353

54+
#define BTINTEL_CNVI_BLAZARI 0x900
55+
5456
#define BTINTEL_IMG_BOOTLOADER 0x01 /* Bootloader image */
57+
#define BTINTEL_IMG_IML 0x02 /* Intermediate image */
5558
#define BTINTEL_IMG_OP 0x03 /* Operational image */
5659

5760
struct intel_version_tlv {

0 commit comments

Comments
 (0)