Message ID | 20210729183600.281586-12-hj.tedd.an@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Bluetooth: btintel: Refactoring setup routines | expand |
Hi Tedd, > From the ThP, it supports both old and TLV based HCI_Intel_Read_Version > command after downloading the operational firmware. > Starting from th JfP, it supports both old and TLV based > HCI_Intel_Read_Version command in the operational firmware and it causes > the setup() uses the TLV based setup instead of legacy setup. > > So, as a workaround, this patch checks the fw variant from the TLV based > version and it uses the legacy HCI_Intel_Read_Version command to get the > legacy version information and run the legacy bootloader setup with it. > > Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com> > --- > drivers/bluetooth/btintel.c | 25 ++++++++++++++++++++++++- > 1 file changed, 24 insertions(+), 1 deletion(-) > > diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c > index 57b64d744f0a..f11882d10da7 100644 > --- a/drivers/bluetooth/btintel.c > +++ b/drivers/bluetooth/btintel.c > @@ -2254,10 +2254,33 @@ int btintel_setup_combined(struct hci_dev *hdev) > /* For TLV type device, parse the tlv data */ > btintel_parse_version_tlv(hdev, &ver_tlv, skb); > > + /* Some legacy bootloader devices from JfP supports both old and TLV > + * based HCI_Intel_Read_Version command. But we don't want to use the > + * TLV based setup routines for those old bootloader device. > + * Also, it is not easy to convert TLV based version to the legacy > + * version format. > + * > + * So, as a workaround for those devices, use the legacy > + * HCI_Intel_Read_Version to get the version information and run the > + * legacy bootloader setup. > + */ why is that again? If possible we should convert them. What information is missing from the TLV format that we need? Regards Marcel
Hi Marcel, On Thu, 2021-07-29 at 21:40 +0200, Marcel Holtmann wrote: > Hi Tedd, > > > From the ThP, it supports both old and TLV based HCI_Intel_Read_Version > > command after downloading the operational firmware. > > Starting from th JfP, it supports both old and TLV based > > HCI_Intel_Read_Version command in the operational firmware and it causes > > the setup() uses the TLV based setup instead of legacy setup. > > > > So, as a workaround, this patch checks the fw variant from the TLV based > > version and it uses the legacy HCI_Intel_Read_Version command to get the > > legacy version information and run the legacy bootloader setup with it. > > > > Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com> > > --- > > drivers/bluetooth/btintel.c | 25 ++++++++++++++++++++++++- > > 1 file changed, 24 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c > > index 57b64d744f0a..f11882d10da7 100644 > > --- a/drivers/bluetooth/btintel.c > > +++ b/drivers/bluetooth/btintel.c > > @@ -2254,10 +2254,33 @@ int btintel_setup_combined(struct hci_dev *hdev) > > /* For TLV type device, parse the tlv data */ > > btintel_parse_version_tlv(hdev, &ver_tlv, skb); > > > > + /* Some legacy bootloader devices from JfP supports both old and TLV > > + * based HCI_Intel_Read_Version command. But we don't want to use the > > + * TLV based setup routines for those old bootloader device. > > + * Also, it is not easy to convert TLV based version to the legacy > > + * version format. > > + * > > + * So, as a workaround for those devices, use the legacy > > + * HCI_Intel_Read_Version to get the version information and run the > > + * legacy bootloader setup. > > + */ > > why is that again? If possible we should convert them. What information is missing from the TLV > format that we need? > It needs hw_variant, hw_revision, and fw_revision in order to get the firmware file for legacy bootloader setup. But new TLV format doesn't provide those values. Let me check with FW team if those values are wrapped in TLV somehow. > Regards > > Marcel > Regards, Tedd
diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c index 57b64d744f0a..f11882d10da7 100644 --- a/drivers/bluetooth/btintel.c +++ b/drivers/bluetooth/btintel.c @@ -2254,10 +2254,33 @@ int btintel_setup_combined(struct hci_dev *hdev) /* For TLV type device, parse the tlv data */ btintel_parse_version_tlv(hdev, &ver_tlv, skb); + /* Some legacy bootloader devices from JfP supports both old and TLV + * based HCI_Intel_Read_Version command. But we don't want to use the + * TLV based setup routines for those old bootloader device. + * Also, it is not easy to convert TLV based version to the legacy + * version format. + * + * So, as a workaround for those devices, use the legacy + * HCI_Intel_Read_Version to get the version information and run the + * legacy bootloader setup. + */ + switch (INTEL_HW_VARIANT(ver_tlv.cnvi_bt)) { + case 0x11: /* JfP */ + case 0x12: /* ThP */ + case 0x13: /* HrP */ + case 0x14: /* CcP */ + err = btintel_read_version(hdev, &ver); + if (err) + return err; + return btintel_bootloader_setup(hdev, &ver); + default: + /* Nothing to do here */ + break; + } + /* Display version information of TLV type */ btintel_version_info_tlv(hdev, &ver_tlv); - /* TODO: Need to filter the device for new generation */ err = btintel_bootloader_setup_tlv(hdev, &ver_tlv); return err;