2020-11-19 22:07:22

by Heiner Kallweit

[permalink] [raw]
Subject: Updated fw versions ignored for Intel devices?

In btusb.c we have the following code. I interpret this in a way
that once firmware was loaded the driver will never check for
updated firmware.
Shouldn't the driver always read the firmware file available on
the system and check its version against the firmware version
the device has (and apply it if it's newer)?
But maybe I miss something ..

bt_dev_info(hdev, "read Intel version: %02x%02x%02x%02x%02x%02x%02x%02x%02x",
ver.hw_platform, ver.hw_variant, ver.hw_revision,
ver.fw_variant, ver.fw_revision, ver.fw_build_num,
ver.fw_build_ww, ver.fw_build_yy, ver.fw_patch_num);

/* fw_patch_num indicates the version of patch the device currently
* have. If there is no patch data in the device, it is always 0x00.
* So, if it is other than 0x00, no need to patch the device again.
*/
if (ver.fw_patch_num) {
bt_dev_info(hdev, "Intel device is already patched. "
"patch num: %02x", ver.fw_patch_num);
goto complete;
}


2020-11-23 11:38:39

by Marcel Holtmann

[permalink] [raw]
Subject: Re: Updated fw versions ignored for Intel devices?

Hi Heiner,

> In btusb.c we have the following code. I interpret this in a way
> that once firmware was loaded the driver will never check for
> updated firmware.
> Shouldn't the driver always read the firmware file available on
> the system and check its version against the firmware version
> the device has (and apply it if it's newer)?
> But maybe I miss something ..
>
> bt_dev_info(hdev, "read Intel version: %02x%02x%02x%02x%02x%02x%02x%02x%02x",
> ver.hw_platform, ver.hw_variant, ver.hw_revision,
> ver.fw_variant, ver.fw_revision, ver.fw_build_num,
> ver.fw_build_ww, ver.fw_build_yy, ver.fw_patch_num);
>
> /* fw_patch_num indicates the version of patch the device currently
> * have. If there is no patch data in the device, it is always 0x00.
> * So, if it is other than 0x00, no need to patch the device again.
> */
> if (ver.fw_patch_num) {
> bt_dev_info(hdev, "Intel device is already patched. "
> "patch num: %02x", ver.fw_patch_num);
> goto complete;
> }

if you reboot it looses its firmware and things start over again.

Regards

Marcel

2020-11-23 17:25:44

by Kiran K

[permalink] [raw]
Subject: RE: Updated fw versions ignored for Intel devices?

Hi Marcel, Heiner

> -----Original Message-----
> From: Marcel Holtmann <[email protected]>
> Sent: Monday, November 23, 2020 5:08 PM
> To: Heiner Kallweit <[email protected]>
> Cc: Johan Hedberg <[email protected]>; BlueZ development <linux-
> [email protected]>
> Subject: Re: Updated fw versions ignored for Intel devices?
>
> Hi Heiner,
>
> > In btusb.c we have the following code. I interpret this in a way that
> > once firmware was loaded the driver will never check for updated
> > firmware.
> > Shouldn't the driver always read the firmware file available on the
> > system and check its version against the firmware version the device
> > has (and apply it if it's newer)?
> > But maybe I miss something ..

Need to check. If I am correct, the firmware images are encrypted and signed. Need to explore if there are any dependencies to read the firmware version.
> >
> > bt_dev_info(hdev, "read Intel version:
> %02x%02x%02x%02x%02x%02x%02x%02x%02x",
> > ver.hw_platform, ver.hw_variant, ver.hw_revision,
> > ver.fw_variant, ver.fw_revision, ver.fw_build_num,
> > ver.fw_build_ww, ver.fw_build_yy, ver.fw_patch_num);
> >
> > /* fw_patch_num indicates the version of patch the device currently
> > * have. If there is no patch data in the device, it is always 0x00.
> > * So, if it is other than 0x00, no need to patch the device again.
> > */
> > if (ver.fw_patch_num) {
> > bt_dev_info(hdev, "Intel device is already patched. "
> > "patch num: %02x", ver.fw_patch_num);
> > goto complete;
> > }
>
> if you reboot it looses its firmware and things start over again.

Reboot doesn't guarantee to load new firmware on all platforms as the power supply to BT adapter will still be intact. Few platforms need power cycle.
>
> Regards
>
> Marcel

Thanks,
Kiran