RE: [PATCH v3 2/2] Bluetooth: btintel: Add support for downloading intermediate loader

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Luiz,

Thanks for the comments.

> -----Original Message-----
> From: Luiz Augusto von Dentz <luiz.dentz@xxxxxxxxx>
> Sent: Wednesday, March 6, 2024 3:57 AM
> To: K, Kiran <kiran.k@xxxxxxxxx>
> Cc: linux-bluetooth@xxxxxxxxxxxxxxx; Srivatsa, Ravishankar
> <ravishankar.srivatsa@xxxxxxxxx>; Tumkur Narayan, Chethan
> <chethan.tumkur.narayan@xxxxxxxxx>
> Subject: Re: [PATCH v3 2/2] Bluetooth: btintel: Add support for downloading
> intermediate loader
> 
> Hi Kiran,
> 
> On Tue, Mar 5, 2024 at 9:31 AM Kiran K <kiran.k@xxxxxxxxx> wrote:
> >
> > 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 <kiran.k@xxxxxxxxx>
> > ---
> >  drivers/bluetooth/btintel.c | 38
> > ++++++++++++++++++++++++++++++++++++-
> >  drivers/bluetooth/btintel.h |  3 +++
> >  2 files changed, 40 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c
> > index ed98bb867cff..00e98606cf02 100644
> > --- a/drivers/bluetooth/btintel.c
> > +++ b/drivers/bluetooth/btintel.c
> > @@ -521,6 +521,9 @@ static int btintel_version_info_tlv(struct hci_dev
> *hdev,
> >                             version->min_fw_build_nn, version->min_fw_build_cw,
> >                             2000 + version->min_fw_build_yy);
> >                 break;
> > +       case IMG_IML:
> > +               variant = "Intermediate loader";
> > +               break;
> >         case IMG_OP:
> >                 variant = "Firmware";
> >                 break;
> > @@ -2194,10 +2197,26 @@ static void btintel_get_fw_name_tlv(const
> struct intel_version_tlv *ver,
> >                                     char *fw_name, size_t len,
> >                                     const char *suffix)  {
> > +       const char *format;
> >         /* The firmware file name for new generation controllers will be
> >          * ibt-<cnvi_top type+cnvi_top step>-<cnvr_top type+cnvr_top step>
> >          */
> > -       snprintf(fw_name, len, "intel/ibt-%04x-%04x.%s",
> > +       switch (ver->cnvi_top & 0xfff) {
> > +       /* Only Blazar  product supports downloading of intermediate loader
> > +        * image
> > +        */
> > +       case CNVI_BLAZARI:
> > +               if (ver->img_type == IMG_BOOTLOADER)
> > +                       format = "intel/ibt-%04x-%04x-iml.%s";
> 
> Shouldn't iml be the extension rather than the name? Like in intel/ibt-0090-
> 0291.iml which you can probably achieve by just replacing suffix, that said this
> function seems to be called with .ddc as suffix as well so I assume there is

I feel it's better to keep the extension as sfi  as the image format for IML and OP binaries are same.

> some check preventing it to be called while version is IMG_BOOTLOADER?
There is no such restriction. The same function gets called even when version is IMG_BOOTLOADER. Inside this function we check for product and version to decide whether to load IML or OP image.
> 
> > +               else
> > +                       format = "intel/ibt-%04x-%04x.%s";
> > +               break;
> > +       default:
> > +                       format = "intel/ibt-%04x-%04x.%s";
> > +               break;
> > +       }
> > +
> > +       snprintf(fw_name, len, format,
> >                  INTEL_CNVX_TOP_PACK_SWAB(INTEL_CNVX_TOP_TYPE(ver-
> >cnvi_top),
> >                                           INTEL_CNVX_TOP_STEP(ver->cnvi_top)),
> >
> > 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,
> >         if (err)
> >                 return err;
> >
> > +       err = btintel_read_version_tlv(hdev, ver);
> > +       if (err)
> > +               return err;
> > +
> > +       /* If image type returned is IMG_IML, then controller supports
> > +        * intermediae loader image
> > +        */
> > +       if (ver->img_type == IMG_IML) {
> > +               err = btintel_prepare_fw_download_tlv(hdev, ver, &boot_param);
> > +               if (err)
> > +                       return err;
> > +
> > +               err = btintel_boot(hdev, boot_param);
> > +               if (err)
> > +                       return err;
> > +       }
> > +
> >         btintel_clear_flag(hdev, INTEL_BOOTLOADER);
> >
> >         btintel_get_fw_name_tlv(ver, ddcname, sizeof(ddcname), "ddc");
> > diff --git a/drivers/bluetooth/btintel.h b/drivers/bluetooth/btintel.h
> > index 52b2f1986f85..ae15b2253b6d 100644
> > --- a/drivers/bluetooth/btintel.h
> > +++ b/drivers/bluetooth/btintel.h
> > @@ -51,7 +51,10 @@ struct intel_tlv {
> >         u8 val[];
> >  } __packed;
> >
> > +#define CNVI_BLAZARI           0x900
> > +
> >  #define IMG_BOOTLOADER         0x01    /* Bootloader image */
> > +#define IMG_IML                        0x02    /* Intermediate image */
> >  #define IMG_OP                 0x03    /* Operational image */
> >
> >  struct intel_version_tlv {
> > --
> > 2.34.1
> >
> >
> 
> 
> --
> Luiz Augusto von Dentz

Regards,
Kiran





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux