Lines Matching +full:e +full:- +full:ddc
1 // SPDX-License-Identifier: GPL-2.0-or-later
41 if (skb->len != sizeof(*bda)) { in btintel_check_bdaddr()
44 return -EIO; in btintel_check_bdaddr()
47 bda = (struct hci_rp_read_bd_addr *)skb->data; in btintel_check_bdaddr()
50 * address 00:03:19:9E:8B:00 can be found. These controllers are in btintel_check_bdaddr()
54 if (!bacmp(&bda->bdaddr, BDADDR_INTEL)) { in btintel_check_bdaddr()
56 &bda->bdaddr); in btintel_check_bdaddr()
57 set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks); in btintel_check_bdaddr()
145 if (err == -ENODATA) in btintel_set_diag()
199 if (skb->len != 13) { in btintel_hw_error()
205 bt_dev_err(hdev, "Exception info %s", (char *)(skb->data + 1)); in btintel_hw_error()
215 switch (ver->fw_variant) { in btintel_version_info()
227 variant, ver->fw_revision >> 4, ver->fw_revision & 0x0f, in btintel_version_info()
228 ver->fw_build_num, ver->fw_build_ww, in btintel_version_info()
229 2000 + ver->fw_build_yy); in btintel_version_info()
250 plen -= fragment_len; in btintel_secure_send()
265 err = request_firmware_direct(&fw, ddc_name, &hdev->dev); in btintel_load_ddc_config()
267 bt_dev_err(hdev, "Failed to load Intel DDC file %s (%d)", in btintel_load_ddc_config()
272 bt_dev_info(hdev, "Found Intel DDC parameters: %s", ddc_name); in btintel_load_ddc_config()
274 fw_ptr = fw->data; in btintel_load_ddc_config()
276 /* DDC file contains one or more DDC structure which has in btintel_load_ddc_config()
277 * Length (1 byte), DDC ID (2 bytes), and DDC value (Length - 2). in btintel_load_ddc_config()
279 while (fw->size > fw_ptr - fw->data) { in btintel_load_ddc_config()
297 bt_dev_info(hdev, "Applying Intel DDC parameters completed"); in btintel_load_ddc_config()
353 if (skb->len != sizeof(*ver)) { in btintel_read_version()
356 return -EILSEQ; in btintel_read_version()
359 memcpy(ver, skb->data, sizeof(*ver)); in btintel_read_version()
371 switch (version->img_type) { in btintel_version_info_tlv()
374 bt_dev_info(hdev, "Device revision is %u", version->dev_rev_id); in btintel_version_info_tlv()
376 version->secure_boot ? "enabled" : "disabled"); in btintel_version_info_tlv()
378 version->otp_lock ? "enabled" : "disabled"); in btintel_version_info_tlv()
380 version->api_lock ? "enabled" : "disabled"); in btintel_version_info_tlv()
382 version->debug_lock ? "enabled" : "disabled"); in btintel_version_info_tlv()
384 version->min_fw_build_nn, version->min_fw_build_cw, in btintel_version_info_tlv()
385 2000 + version->min_fw_build_yy); in btintel_version_info_tlv()
391 bt_dev_err(hdev, "Unsupported image type(%02x)", version->img_type); in btintel_version_info_tlv()
396 2000 + (version->timestamp >> 8), version->timestamp & 0xff, in btintel_version_info_tlv()
397 version->build_type, version->build_num); in btintel_version_info_tlv()
410 return -EINVAL; in btintel_read_version_tlv()
419 if (skb->data[0]) { in btintel_read_version_tlv()
421 skb->data[0]); in btintel_read_version_tlv()
423 return -EIO; in btintel_read_version_tlv()
434 while (skb->len) { in btintel_read_version_tlv()
437 tlv = (struct intel_tlv *)skb->data; in btintel_read_version_tlv()
438 switch (tlv->type) { in btintel_read_version_tlv()
440 version->cnvi_top = get_unaligned_le32(tlv->val); in btintel_read_version_tlv()
443 version->cnvr_top = get_unaligned_le32(tlv->val); in btintel_read_version_tlv()
446 version->cnvi_bt = get_unaligned_le32(tlv->val); in btintel_read_version_tlv()
449 version->cnvr_bt = get_unaligned_le32(tlv->val); in btintel_read_version_tlv()
452 version->dev_rev_id = get_unaligned_le16(tlv->val); in btintel_read_version_tlv()
455 version->img_type = tlv->val[0]; in btintel_read_version_tlv()
458 version->timestamp = get_unaligned_le16(tlv->val); in btintel_read_version_tlv()
461 version->build_type = tlv->val[0]; in btintel_read_version_tlv()
464 version->build_num = get_unaligned_le32(tlv->val); in btintel_read_version_tlv()
467 version->secure_boot = tlv->val[0]; in btintel_read_version_tlv()
470 version->otp_lock = tlv->val[0]; in btintel_read_version_tlv()
473 version->api_lock = tlv->val[0]; in btintel_read_version_tlv()
476 version->debug_lock = tlv->val[0]; in btintel_read_version_tlv()
479 version->min_fw_build_nn = tlv->val[0]; in btintel_read_version_tlv()
480 version->min_fw_build_cw = tlv->val[1]; in btintel_read_version_tlv()
481 version->min_fw_build_yy = tlv->val[2]; in btintel_read_version_tlv()
484 version->limited_cce = tlv->val[0]; in btintel_read_version_tlv()
487 version->sbe_type = tlv->val[0]; in btintel_read_version_tlv()
490 memcpy(&version->otp_bd_addr, tlv->val, tlv->len); in btintel_read_version_tlv()
497 skb_pull(skb, tlv->len + sizeof(*tlv)); in btintel_read_version_tlv()
505 /* ------- REGMAP IBT SUPPORT ------- */
540 return -EINVAL; in regmap_ibt_read()
553 return -EINVAL; in regmap_ibt_read()
556 /* regmap provides a little-endian formatted addr */ in regmap_ibt_read()
560 bt_dev_dbg(ctx->hdev, "Register (0x%x) read", le32_to_cpu(cp.addr)); in regmap_ibt_read()
562 skb = hci_cmd_sync(ctx->hdev, ctx->op_read, sizeof(cp), &cp, in regmap_ibt_read()
566 bt_dev_err(ctx->hdev, "regmap: Register (0x%x) read error (%d)", in regmap_ibt_read()
571 if (skb->len != sizeof(*rp) + val_size) { in regmap_ibt_read()
572 bt_dev_err(ctx->hdev, "regmap: Register (0x%x) read error, bad len", in regmap_ibt_read()
574 err = -EINVAL; in regmap_ibt_read()
578 rp = (struct ibt_rp_reg_access *)skb->data; in regmap_ibt_read()
580 if (rp->addr != cp.addr) { in regmap_ibt_read()
581 bt_dev_err(ctx->hdev, "regmap: Register (0x%x) read error, bad addr", in regmap_ibt_read()
582 le32_to_cpu(rp->addr)); in regmap_ibt_read()
583 err = -EINVAL; in regmap_ibt_read()
587 memcpy(val, rp->data, val_size); in regmap_ibt_read()
606 return -EINVAL; in regmap_ibt_gather_write()
619 return -EINVAL; in regmap_ibt_gather_write()
624 return -ENOMEM; in regmap_ibt_gather_write()
626 /* regmap provides a little-endian formatted addr/value */ in regmap_ibt_gather_write()
627 cp->addr = *(__le32 *)addr; in regmap_ibt_gather_write()
628 cp->mode = mode; in regmap_ibt_gather_write()
629 cp->len = val_size; in regmap_ibt_gather_write()
630 memcpy(&cp->data, val, val_size); in regmap_ibt_gather_write()
632 bt_dev_dbg(ctx->hdev, "Register (0x%x) write", le32_to_cpu(cp->addr)); in regmap_ibt_gather_write()
634 skb = hci_cmd_sync(ctx->hdev, ctx->op_write, plen, cp, HCI_CMD_TIMEOUT); in regmap_ibt_gather_write()
637 bt_dev_err(ctx->hdev, "regmap: Register (0x%x) write error (%d)", in regmap_ibt_gather_write()
638 le32_to_cpu(cp->addr), err); in regmap_ibt_gather_write()
654 return -EINVAL; in regmap_ibt_write()
656 return regmap_ibt_gather_write(context, data, 4, data + 4, count - 4); in regmap_ibt_write()
685 bt_dev_info(hdev, "regmap: Init R%x-W%x region", opcode_read, in btintel_regmap_init()
690 return ERR_PTR(-ENOMEM); in btintel_regmap_init()
692 ctx->op_read = opcode_read; in btintel_regmap_init()
693 ctx->op_write = opcode_write; in btintel_regmap_init()
694 ctx->hdev = hdev; in btintel_regmap_init()
696 return regmap_init(&hdev->dev, ®map_ibt, ctx, ®map_ibt_cfg); in btintel_regmap_init()
732 if (skb->len != sizeof(*params)) { in btintel_read_boot_params()
735 return -EILSEQ; in btintel_read_boot_params()
738 memcpy(params, skb->data, sizeof(*params)); in btintel_read_boot_params()
742 if (params->status) { in btintel_read_boot_params()
744 params->status); in btintel_read_boot_params()
745 return -bt_to_errno(params->status); in btintel_read_boot_params()
749 le16_to_cpu(params->dev_revid)); in btintel_read_boot_params()
752 params->secure_boot ? "enabled" : "disabled"); in btintel_read_boot_params()
755 params->otp_lock ? "enabled" : "disabled"); in btintel_read_boot_params()
758 params->api_lock ? "enabled" : "disabled"); in btintel_read_boot_params()
761 params->debug_lock ? "enabled" : "disabled"); in btintel_read_boot_params()
764 params->min_fw_build_nn, params->min_fw_build_cw, in btintel_read_boot_params()
765 2000 + params->min_fw_build_yy); in btintel_read_boot_params()
779 err = btintel_secure_send(hdev, 0x00, 128, fw->data); in btintel_sfi_rsa_header_secure_send()
788 err = btintel_secure_send(hdev, 0x03, 256, fw->data + 128); in btintel_sfi_rsa_header_secure_send()
797 err = btintel_secure_send(hdev, 0x02, 256, fw->data + 388); in btintel_sfi_rsa_header_secure_send()
815 err = btintel_secure_send(hdev, 0x00, 128, fw->data + 644); in btintel_sfi_ecdsa_header_secure_send()
824 err = btintel_secure_send(hdev, 0x03, 96, fw->data + 644 + 128); in btintel_sfi_ecdsa_header_secure_send()
833 err = btintel_secure_send(hdev, 0x02, 96, fw->data + 644 + 224); in btintel_sfi_ecdsa_header_secure_send()
850 fw_ptr = fw->data + offset; in btintel_download_firmware_payload()
852 err = -EINVAL; in btintel_download_firmware_payload()
854 while (fw_ptr - fw->data < fw->size) { in btintel_download_firmware_payload()
862 if (le16_to_cpu(cmd->opcode) == 0xfc0e) { in btintel_download_firmware_payload()
863 /* The boot parameter is the first 32-bit value in btintel_download_firmware_payload()
871 frag_len += sizeof(*cmd) + cmd->plen; in btintel_download_firmware_payload()
933 css_header_ver = get_unaligned_le32(fw->data + CSS_HEADER_OFFSET); in btintel_download_firmware_newgen()
936 return -EINVAL; in btintel_download_firmware_newgen()
943 return -EINVAL; in btintel_download_firmware_newgen()
955 if (fw->data[ECDSA_OFFSET] != 0x06) in btintel_download_firmware_newgen()
956 return -EINVAL; in btintel_download_firmware_newgen()
959 css_header_ver = get_unaligned_le32(fw->data + ECDSA_OFFSET + CSS_HEADER_OFFSET); in btintel_download_firmware_newgen()
962 return -EINVAL; in btintel_download_firmware_newgen()
997 * re-enumeration of BT controller. in btintel_reset_to_bootloader()
1042 /* Intel controller supports two pages, each page is of 128-bit in btintel_read_debug_features()
1053 if (skb->len != (sizeof(features->page1) + 3)) { in btintel_read_debug_features()
1056 return -EILSEQ; in btintel_read_debug_features()
1059 memcpy(features->page1, skb->data + 3, sizeof(features->page1)); in btintel_read_debug_features()
1076 return -EINVAL; in btintel_set_debug_features()
1078 if (!(features->page1[0] & 0x3f)) { in btintel_set_debug_features()
1085 bt_dev_err(hdev, "Setting Intel telemetry ddc write event mask failed (%ld)", in btintel_set_debug_features()
1099 MODULE_FIRMWARE("intel/ibt-11-5.sfi");
1100 MODULE_FIRMWARE("intel/ibt-11-5.ddc");
1101 MODULE_FIRMWARE("intel/ibt-12-16.sfi");
1102 MODULE_FIRMWARE("intel/ibt-12-16.ddc");