From: Kiran K kiran.k@intel.com
[ Upstream commit 926e8bfaaa11471b3df25befc284da62b11a1e92 ]
Add support for the BlazarIW Bluetooth core used in the Wildcat Lake platform.
HCI traces: < HCI Command: Intel Read Version (0x3f|0x0005) plen 1 Requested Type: All Supported Types(0xff)
HCI Event: Command Complete (0x0e) plen 122
Intel Read Version (0x3f|0x0005) ncmd 1 Status: Success (0x00) ..... CNVi BT(18): 0x00223700 - BlazarIW(0x22) ..... .....
Signed-off-by: Vijay Satija vijay.satija@intel.com Signed-off-by: Kiran K kiran.k@intel.com Signed-off-by: Luiz Augusto von Dentz luiz.von.dentz@intel.com Signed-off-by: Sasha Levin sashal@kernel.org ---
LLM Generated explanations, may be completely bogus:
YES — supporting BlazarIW is a straightforward extension of the existing TLV-capable Intel path and prevents a hard failure on shipping hardware.
- `drivers/bluetooth/btintel.c:487` adds variant `0x22` to the allow- list; without it the setup path aborts with `-EINVAL`, so Wildcat Lake systems can’t bring up Bluetooth. The variant follows the exact handling already used for 0x1d/0x1e/0x1f, so no new behavior is introduced. - `drivers/bluetooth/btintel.c:3257` ensures the new variant reuses the standard Microsoft vendor extension opcode assignment alongside the other TLV devices, keeping feature parity. - `drivers/bluetooth/btintel.c:3598` includes 0x22 in the TLV bootloader setup branch, reusing the proven quirk, DSM reset, and devcoredump logic the other Blazar-class parts rely on; there are no extra code paths or architectural changes. - `drivers/bluetooth/btintel_pcie.c:2095` mirrors the same allow-list update for the PCIe transport so host setups don’t bail out earlier in bring-up.
The change is limited to switch tables, carries no behavioral risk for older hardware, and resolves a clear user-visible regression (device unusable). Given the minimal scope and the importance of enabling supported hardware, this is a good fit for stable backporting.
drivers/bluetooth/btintel.c | 3 +++ drivers/bluetooth/btintel_pcie.c | 1 + 2 files changed, 4 insertions(+)
diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c index be69d21c9aa74..9d29ab811f802 100644 --- a/drivers/bluetooth/btintel.c +++ b/drivers/bluetooth/btintel.c @@ -484,6 +484,7 @@ int btintel_version_info_tlv(struct hci_dev *hdev, case 0x1d: /* BlazarU (BzrU) */ case 0x1e: /* BlazarI (Bzr) */ case 0x1f: /* Scorpious Peak */ + case 0x22: /* BlazarIW (BzrIW) */ break; default: bt_dev_err(hdev, "Unsupported Intel hardware variant (0x%x)", @@ -3253,6 +3254,7 @@ void btintel_set_msft_opcode(struct hci_dev *hdev, u8 hw_variant) case 0x1d: case 0x1e: case 0x1f: + case 0x22: hci_set_msft_opcode(hdev, 0xFC1E); break; default: @@ -3593,6 +3595,7 @@ static int btintel_setup_combined(struct hci_dev *hdev) case 0x1d: case 0x1e: case 0x1f: + case 0x22: /* Display version information of TLV type */ btintel_version_info_tlv(hdev, &ver_tlv);
diff --git a/drivers/bluetooth/btintel_pcie.c b/drivers/bluetooth/btintel_pcie.c index 585de143ab255..58cff211ec2c1 100644 --- a/drivers/bluetooth/btintel_pcie.c +++ b/drivers/bluetooth/btintel_pcie.c @@ -2087,6 +2087,7 @@ static int btintel_pcie_setup_internal(struct hci_dev *hdev) switch (INTEL_HW_VARIANT(ver_tlv.cnvi_bt)) { case 0x1e: /* BzrI */ case 0x1f: /* ScP */ + case 0x22: /* BzrIW */ /* Display version information of TLV type */ btintel_version_info_tlv(hdev, &ver_tlv);