2021-08-20 11:54:38

by Kiran K

[permalink] [raw]
Subject: [PATCH v1] Bluetooth: btintel: Fix boot address

Cache Boot address present in firmware file which
is later used Intel_Soft_Reset command to bring
controller from boot mode to operational mode.

Signed-off-by: Kiran K <[email protected]>
---
drivers/bluetooth/btintel.c | 31 +++++++++++++------------------
1 file changed, 13 insertions(+), 18 deletions(-)

diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c
index f1705b46fc88..80d6dd7ae51a 100644
--- a/drivers/bluetooth/btintel.c
+++ b/drivers/bluetooth/btintel.c
@@ -1037,8 +1037,9 @@ static bool btintel_firmware_version(struct hci_dev *hdev,

params = (void *)(fw_ptr + sizeof(*cmd));

- bt_dev_info(hdev, "Boot Address: 0x%x",
- le32_to_cpu(params->boot_addr));
+ *boot_addr = le32_to_cpu(params->boot_addr);
+
+ bt_dev_info(hdev, "Boot Address: 0x%x", *boot_addr);

bt_dev_info(hdev, "Firmware Version: %u-%u.%u",
params->fw_build_num, params->fw_build_ww,
@@ -1071,9 +1072,6 @@ int btintel_download_firmware(struct hci_dev *hdev,
/* Skip version checking */
break;
default:
- /* Skip reading firmware file version in bootloader mode */
- if (ver->fw_variant == 0x06)
- break;

/* Skip download if firmware has the same version */
if (btintel_firmware_version(hdev, ver->fw_build_num,
@@ -1114,19 +1112,16 @@ static int btintel_download_fw_tlv(struct hci_dev *hdev,
int err;
u32 css_header_ver;

- /* Skip reading firmware file version in bootloader mode */
- if (ver->img_type != 0x01) {
- /* Skip download if firmware has the same version */
- if (btintel_firmware_version(hdev, ver->min_fw_build_nn,
- ver->min_fw_build_cw,
- ver->min_fw_build_yy,
- fw, boot_param)) {
- bt_dev_info(hdev, "Firmware already loaded");
- /* Return -EALREADY to indicate that firmware has
- * already been loaded.
- */
- return -EALREADY;
- }
+ /* Skip download if firmware has the same version */
+ if (btintel_firmware_version(hdev, ver->min_fw_build_nn,
+ ver->min_fw_build_cw,
+ ver->min_fw_build_yy,
+ fw, boot_param)) {
+ bt_dev_info(hdev, "Firmware already loaded");
+ /* Return -EALREADY to indicate that firmware has
+ * already been loaded.
+ */
+ return -EALREADY;
}

/* The firmware variant determines if the device is in bootloader
--
2.17.1


2021-08-30 15:09:16

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH v1] Bluetooth: btintel: Fix boot address

Hi Kiran,

> Cache Boot address present in firmware file which
> is later used Intel_Soft_Reset command to bring
> controller from boot mode to operational mode.
>
> Signed-off-by: Kiran K <[email protected]>
> ---
> drivers/bluetooth/btintel.c | 31 +++++++++++++------------------
> 1 file changed, 13 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c
> index f1705b46fc88..80d6dd7ae51a 100644
> --- a/drivers/bluetooth/btintel.c
> +++ b/drivers/bluetooth/btintel.c
> @@ -1037,8 +1037,9 @@ static bool btintel_firmware_version(struct hci_dev *hdev,
>
> params = (void *)(fw_ptr + sizeof(*cmd));
>
> - bt_dev_info(hdev, "Boot Address: 0x%x",
> - le32_to_cpu(params->boot_addr));
> + *boot_addr = le32_to_cpu(params->boot_addr);
> +
> + bt_dev_info(hdev, "Boot Address: 0x%x", *boot_addr);
>

so this hunk looks good and is described in the commit message.

> bt_dev_info(hdev, "Firmware Version: %u-%u.%u",
> params->fw_build_num, params->fw_build_ww,
> @@ -1071,9 +1072,6 @@ int btintel_download_firmware(struct hci_dev *hdev,
> /* Skip version checking */
> break;
> default:
> - /* Skip reading firmware file version in bootloader mode */
> - if (ver->fw_variant == 0x06)
> - break;
>
> /* Skip download if firmware has the same version */
> if (btintel_firmware_version(hdev, ver->fw_build_num,
> @@ -1114,19 +1112,16 @@ static int btintel_download_fw_tlv(struct hci_dev *hdev,
> int err;
> u32 css_header_ver;
>
> - /* Skip reading firmware file version in bootloader mode */
> - if (ver->img_type != 0x01) {
> - /* Skip download if firmware has the same version */
> - if (btintel_firmware_version(hdev, ver->min_fw_build_nn,
> - ver->min_fw_build_cw,
> - ver->min_fw_build_yy,
> - fw, boot_param)) {
> - bt_dev_info(hdev, "Firmware already loaded");
> - /* Return -EALREADY to indicate that firmware has
> - * already been loaded.
> - */
> - return -EALREADY;
> - }
> + /* Skip download if firmware has the same version */
> + if (btintel_firmware_version(hdev, ver->min_fw_build_nn,
> + ver->min_fw_build_cw,
> + ver->min_fw_build_yy,
> + fw, boot_param)) {
> + bt_dev_info(hdev, "Firmware already loaded");
> + /* Return -EALREADY to indicate that firmware has
> + * already been loaded.
> + */
> + return -EALREADY;
> }

This part however isn’t.

Regards

Marcel

2021-08-31 12:58:06

by Kiran K

[permalink] [raw]
Subject: RE: [PATCH v1] Bluetooth: btintel: Fix boot address

HI Marcel,

> -----Original Message-----
> From: Marcel Holtmann <[email protected]>
> Sent: Monday, August 30, 2021 8:38 PM
> To: K, Kiran <[email protected]>
> Cc: open list:BLUETOOTH SUBSYSTEM <[email protected]>;
> Srivatsa, Ravishankar <[email protected]>; Tumkur Narayan,
> Chethan <[email protected]>; An, Tedd
> <[email protected]>; Von Dentz, Luiz <[email protected]>
> Subject: Re: [PATCH v1] Bluetooth: btintel: Fix boot address
>
> Hi Kiran,
>
> > Cache Boot address present in firmware file which is later used
> > Intel_Soft_Reset command to bring controller from boot mode to
> > operational mode.
> >
> > Signed-off-by: Kiran K <[email protected]>
> > ---
> > drivers/bluetooth/btintel.c | 31 +++++++++++++------------------
> > 1 file changed, 13 insertions(+), 18 deletions(-)
> >
> > diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c
> > index f1705b46fc88..80d6dd7ae51a 100644
> > --- a/drivers/bluetooth/btintel.c
> > +++ b/drivers/bluetooth/btintel.c
> > @@ -1037,8 +1037,9 @@ static bool btintel_firmware_version(struct
> > hci_dev *hdev,
> >
> > params = (void *)(fw_ptr + sizeof(*cmd));
> >
> > - bt_dev_info(hdev, "Boot Address: 0x%x",
> > - le32_to_cpu(params->boot_addr));
> > + *boot_addr = le32_to_cpu(params->boot_addr);
> > +
> > + bt_dev_info(hdev, "Boot Address: 0x%x",
> *boot_addr);
> >
>
> so this hunk looks good and is described in the commit message.
>
> > bt_dev_info(hdev, "Firmware Version: %u-%u.%u",
> > params->fw_build_num, params-
> >fw_build_ww, @@ -1071,9 +1072,6
> > @@ int btintel_download_firmware(struct hci_dev *hdev,
> > /* Skip version checking */
> > break;
> > default:
> > - /* Skip reading firmware file version in bootloader mode */
> > - if (ver->fw_variant == 0x06)
> > - break;
> >
> > /* Skip download if firmware has the same version */
> > if (btintel_firmware_version(hdev, ver->fw_build_num, @@
> -1114,19
> > +1112,16 @@ static int btintel_download_fw_tlv(struct hci_dev *hdev,
> > int err;
> > u32 css_header_ver;
> >
> > - /* Skip reading firmware file version in bootloader mode */
> > - if (ver->img_type != 0x01) {
> > - /* Skip download if firmware has the same version */
> > - if (btintel_firmware_version(hdev, ver->min_fw_build_nn,
> > - ver->min_fw_build_cw,
> > - ver->min_fw_build_yy,
> > - fw, boot_param)) {
> > - bt_dev_info(hdev, "Firmware already loaded");
> > - /* Return -EALREADY to indicate that firmware has
> > - * already been loaded.
> > - */
> > - return -EALREADY;
> > - }
> > + /* Skip download if firmware has the same version */
> > + if (btintel_firmware_version(hdev, ver->min_fw_build_nn,
> > + ver->min_fw_build_cw,
> > + ver->min_fw_build_yy,
> > + fw, boot_param)) {
> > + bt_dev_info(hdev, "Firmware already loaded");
> > + /* Return -EALREADY to indicate that firmware has
> > + * already been loaded.
> > + */
> > + return -EALREADY;
> > }
>
> This part however isn’t.

Ack. I have separated the patches with proper commit message and sent an updated version.
>
> Regards
>
> Marcel

Thanks,
Kiran