CC: [email protected] CC: Linux Memory Management List <[email protected]> TO: Mark Chen <[email protected]> CC: Marcel Holtmann <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: 6553715b6db5ff5d4898895dad1b2926cfe406cf commit: fc342c4dc408754f50f19dc832152fbb4b73f1e6 [7132/11526] Bluetooth: btusb: Add protocol support for MediaTek MT7921U USB devices :::::: branch date: 9 hours ago :::::: commit date: 2 weeks ago config: parisc-randconfig-m031-20210216 (attached as .config) compiler: hppa-linux-gcc (GCC) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> New smatch warnings: drivers/bluetooth/btusb.c:3775 btusb_mtk_setup() error: uninitialized symbol 'fw_version'. Old smatch warnings: drivers/bluetooth/btusb.c:2201 btusb_setup_intel() warn: inconsistent indenting vim +/fw_version +3775 drivers/bluetooth/btusb.c a1c49c434e15050 Sean Wang 2019-06-02 3728 a1c49c434e15050 Sean Wang 2019-06-02 3729 static int btusb_mtk_setup(struct hci_dev *hdev) a1c49c434e15050 Sean Wang 2019-06-02 3730 { a1c49c434e15050 Sean Wang 2019-06-02 3731 struct btusb_data *data = hci_get_drvdata(hdev); a1c49c434e15050 Sean Wang 2019-06-02 3732 struct btmtk_hci_wmt_params wmt_params; a1c49c434e15050 Sean Wang 2019-06-02 3733 ktime_t calltime, delta, rettime; a1c49c434e15050 Sean Wang 2019-06-02 3734 struct btmtk_tci_sleep tci_sleep; a1c49c434e15050 Sean Wang 2019-06-02 3735 unsigned long long duration; a1c49c434e15050 Sean Wang 2019-06-02 3736 struct sk_buff *skb; a1c49c434e15050 Sean Wang 2019-06-02 3737 const char *fwname; a1c49c434e15050 Sean Wang 2019-06-02 3738 int err, status; a1c49c434e15050 Sean Wang 2019-06-02 3739 u32 dev_id; fc342c4dc408754 Mark Chen 2021-02-02 3740 char fw_bin_name[64]; fc342c4dc408754 Mark Chen 2021-02-02 3741 u32 fw_version; a1c49c434e15050 Sean Wang 2019-06-02 3742 u8 param; a1c49c434e15050 Sean Wang 2019-06-02 3743 a1c49c434e15050 Sean Wang 2019-06-02 3744 calltime = ktime_get(); a1c49c434e15050 Sean Wang 2019-06-02 3745 48c13301e6baba5 Mark Chen 2021-02-02 3746 err = btusb_mtk_id_get(data, 0x80000008, &dev_id); a1c49c434e15050 Sean Wang 2019-06-02 3747 if (err < 0) { a1c49c434e15050 Sean Wang 2019-06-02 3748 bt_dev_err(hdev, "Failed to get device id (%d)", err); a1c49c434e15050 Sean Wang 2019-06-02 3749 return err; a1c49c434e15050 Sean Wang 2019-06-02 3750 } a1c49c434e15050 Sean Wang 2019-06-02 3751 fc342c4dc408754 Mark Chen 2021-02-02 3752 if (!dev_id) { fc342c4dc408754 Mark Chen 2021-02-02 3753 err = btusb_mtk_id_get(data, 0x70010200, &dev_id); fc342c4dc408754 Mark Chen 2021-02-02 3754 if (err < 0) { fc342c4dc408754 Mark Chen 2021-02-02 3755 bt_dev_err(hdev, "Failed to get device id (%d)", err); fc342c4dc408754 Mark Chen 2021-02-02 3756 return err; fc342c4dc408754 Mark Chen 2021-02-02 3757 } fc342c4dc408754 Mark Chen 2021-02-02 3758 err = btusb_mtk_id_get(data, 0x80021004, &fw_version); fc342c4dc408754 Mark Chen 2021-02-02 3759 if (err < 0) { fc342c4dc408754 Mark Chen 2021-02-02 3760 bt_dev_err(hdev, "Failed to get fw version (%d)", err); fc342c4dc408754 Mark Chen 2021-02-02 3761 return err; fc342c4dc408754 Mark Chen 2021-02-02 3762 } fc342c4dc408754 Mark Chen 2021-02-02 3763 } fc342c4dc408754 Mark Chen 2021-02-02 3764 a1c49c434e15050 Sean Wang 2019-06-02 3765 switch (dev_id) { 9ce67c3235be71e Sean Wang 2019-06-02 3766 case 0x7663: 9ce67c3235be71e Sean Wang 2019-06-02 3767 fwname = FIRMWARE_MT7663; 9ce67c3235be71e Sean Wang 2019-06-02 3768 break; a1c49c434e15050 Sean Wang 2019-06-02 3769 case 0x7668: a1c49c434e15050 Sean Wang 2019-06-02 3770 fwname = FIRMWARE_MT7668; a1c49c434e15050 Sean Wang 2019-06-02 3771 break; fc342c4dc408754 Mark Chen 2021-02-02 3772 case 0x7961: fc342c4dc408754 Mark Chen 2021-02-02 3773 snprintf(fw_bin_name, sizeof(fw_bin_name), fc342c4dc408754 Mark Chen 2021-02-02 3774 "mediatek/BT_RAM_CODE_MT%04x_1_%x_hdr.bin", fc342c4dc408754 Mark Chen 2021-02-02 @3775 dev_id & 0xffff, (fw_version & 0xff) + 1); fc342c4dc408754 Mark Chen 2021-02-02 3776 err = btusb_mtk_setup_firmware_79xx(hdev, fw_bin_name); fc342c4dc408754 Mark Chen 2021-02-02 3777 fc342c4dc408754 Mark Chen 2021-02-02 3778 /* Enable Bluetooth protocol */ fc342c4dc408754 Mark Chen 2021-02-02 3779 param = 1; fc342c4dc408754 Mark Chen 2021-02-02 3780 wmt_params.op = BTMTK_WMT_FUNC_CTRL; fc342c4dc408754 Mark Chen 2021-02-02 3781 wmt_params.flag = 0; fc342c4dc408754 Mark Chen 2021-02-02 3782 wmt_params.dlen = sizeof(param); fc342c4dc408754 Mark Chen 2021-02-02 3783 wmt_params.data = ¶m; fc342c4dc408754 Mark Chen 2021-02-02 3784 wmt_params.status = NULL; fc342c4dc408754 Mark Chen 2021-02-02 3785 fc342c4dc408754 Mark Chen 2021-02-02 3786 err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params); fc342c4dc408754 Mark Chen 2021-02-02 3787 if (err < 0) { fc342c4dc408754 Mark Chen 2021-02-02 3788 bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err); fc342c4dc408754 Mark Chen 2021-02-02 3789 return err; fc342c4dc408754 Mark Chen 2021-02-02 3790 } fc342c4dc408754 Mark Chen 2021-02-02 3791 goto done; a1c49c434e15050 Sean Wang 2019-06-02 3792 default: a1c49c434e15050 Sean Wang 2019-06-02 3793 bt_dev_err(hdev, "Unsupported support hardware variant (%08x)", a1c49c434e15050 Sean Wang 2019-06-02 3794 dev_id); a1c49c434e15050 Sean Wang 2019-06-02 3795 return -ENODEV; a1c49c434e15050 Sean Wang 2019-06-02 3796 } a1c49c434e15050 Sean Wang 2019-06-02 3797 a1c49c434e15050 Sean Wang 2019-06-02 3798 /* Query whether the firmware is already download */ a1c49c434e15050 Sean Wang 2019-06-02 3799 wmt_params.op = BTMTK_WMT_SEMAPHORE; a1c49c434e15050 Sean Wang 2019-06-02 3800 wmt_params.flag = 1; a1c49c434e15050 Sean Wang 2019-06-02 3801 wmt_params.dlen = 0; a1c49c434e15050 Sean Wang 2019-06-02 3802 wmt_params.data = NULL; a1c49c434e15050 Sean Wang 2019-06-02 3803 wmt_params.status = &status; a1c49c434e15050 Sean Wang 2019-06-02 3804 a1c49c434e15050 Sean Wang 2019-06-02 3805 err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params); a1c49c434e15050 Sean Wang 2019-06-02 3806 if (err < 0) { a1c49c434e15050 Sean Wang 2019-06-02 3807 bt_dev_err(hdev, "Failed to query firmware status (%d)", err); a1c49c434e15050 Sean Wang 2019-06-02 3808 return err; a1c49c434e15050 Sean Wang 2019-06-02 3809 } a1c49c434e15050 Sean Wang 2019-06-02 3810 a1c49c434e15050 Sean Wang 2019-06-02 3811 if (status == BTMTK_WMT_PATCH_DONE) { a1c49c434e15050 Sean Wang 2019-06-02 3812 bt_dev_info(hdev, "firmware already downloaded"); a1c49c434e15050 Sean Wang 2019-06-02 3813 goto ignore_setup_fw; a1c49c434e15050 Sean Wang 2019-06-02 3814 } a1c49c434e15050 Sean Wang 2019-06-02 3815 a1c49c434e15050 Sean Wang 2019-06-02 3816 /* Setup a firmware which the device definitely requires */ a1c49c434e15050 Sean Wang 2019-06-02 3817 err = btusb_mtk_setup_firmware(hdev, fwname); a1c49c434e15050 Sean Wang 2019-06-02 3818 if (err < 0) a1c49c434e15050 Sean Wang 2019-06-02 3819 return err; a1c49c434e15050 Sean Wang 2019-06-02 3820 a1c49c434e15050 Sean Wang 2019-06-02 3821 ignore_setup_fw: a1c49c434e15050 Sean Wang 2019-06-02 3822 err = readx_poll_timeout(btusb_mtk_func_query, hdev, status, a1c49c434e15050 Sean Wang 2019-06-02 3823 status < 0 || status != BTMTK_WMT_ON_PROGRESS, a1c49c434e15050 Sean Wang 2019-06-02 3824 2000, 5000000); a1c49c434e15050 Sean Wang 2019-06-02 3825 /* -ETIMEDOUT happens */ a1c49c434e15050 Sean Wang 2019-06-02 3826 if (err < 0) a1c49c434e15050 Sean Wang 2019-06-02 3827 return err; a1c49c434e15050 Sean Wang 2019-06-02 3828 a1c49c434e15050 Sean Wang 2019-06-02 3829 /* The other errors happen in btusb_mtk_func_query */ a1c49c434e15050 Sean Wang 2019-06-02 3830 if (status < 0) a1c49c434e15050 Sean Wang 2019-06-02 3831 return status; a1c49c434e15050 Sean Wang 2019-06-02 3832 a1c49c434e15050 Sean Wang 2019-06-02 3833 if (status == BTMTK_WMT_ON_DONE) { a1c49c434e15050 Sean Wang 2019-06-02 3834 bt_dev_info(hdev, "function already on"); a1c49c434e15050 Sean Wang 2019-06-02 3835 goto ignore_func_on; a1c49c434e15050 Sean Wang 2019-06-02 3836 } a1c49c434e15050 Sean Wang 2019-06-02 3837 a1c49c434e15050 Sean Wang 2019-06-02 3838 /* Enable Bluetooth protocol */ a1c49c434e15050 Sean Wang 2019-06-02 3839 param = 1; a1c49c434e15050 Sean Wang 2019-06-02 3840 wmt_params.op = BTMTK_WMT_FUNC_CTRL; a1c49c434e15050 Sean Wang 2019-06-02 3841 wmt_params.flag = 0; a1c49c434e15050 Sean Wang 2019-06-02 3842 wmt_params.dlen = sizeof(param); a1c49c434e15050 Sean Wang 2019-06-02 3843 wmt_params.data = ¶m; a1c49c434e15050 Sean Wang 2019-06-02 3844 wmt_params.status = NULL; a1c49c434e15050 Sean Wang 2019-06-02 3845 a1c49c434e15050 Sean Wang 2019-06-02 3846 err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params); a1c49c434e15050 Sean Wang 2019-06-02 3847 if (err < 0) { a1c49c434e15050 Sean Wang 2019-06-02 3848 bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err); a1c49c434e15050 Sean Wang 2019-06-02 3849 return err; a1c49c434e15050 Sean Wang 2019-06-02 3850 } a1c49c434e15050 Sean Wang 2019-06-02 3851 a1c49c434e15050 Sean Wang 2019-06-02 3852 ignore_func_on: a1c49c434e15050 Sean Wang 2019-06-02 3853 /* Apply the low power environment setup */ a1c49c434e15050 Sean Wang 2019-06-02 3854 tci_sleep.mode = 0x5; a1c49c434e15050 Sean Wang 2019-06-02 3855 tci_sleep.duration = cpu_to_le16(0x640); a1c49c434e15050 Sean Wang 2019-06-02 3856 tci_sleep.host_duration = cpu_to_le16(0x640); a1c49c434e15050 Sean Wang 2019-06-02 3857 tci_sleep.host_wakeup_pin = 0; a1c49c434e15050 Sean Wang 2019-06-02 3858 tci_sleep.time_compensation = 0; a1c49c434e15050 Sean Wang 2019-06-02 3859 a1c49c434e15050 Sean Wang 2019-06-02 3860 skb = __hci_cmd_sync(hdev, 0xfc7a, sizeof(tci_sleep), &tci_sleep, a1c49c434e15050 Sean Wang 2019-06-02 3861 HCI_INIT_TIMEOUT); a1c49c434e15050 Sean Wang 2019-06-02 3862 if (IS_ERR(skb)) { a1c49c434e15050 Sean Wang 2019-06-02 3863 err = PTR_ERR(skb); a1c49c434e15050 Sean Wang 2019-06-02 3864 bt_dev_err(hdev, "Failed to apply low power setting (%d)", err); a1c49c434e15050 Sean Wang 2019-06-02 3865 return err; a1c49c434e15050 Sean Wang 2019-06-02 3866 } a1c49c434e15050 Sean Wang 2019-06-02 3867 kfree_skb(skb); a1c49c434e15050 Sean Wang 2019-06-02 3868 fc342c4dc408754 Mark Chen 2021-02-02 3869 done: a1c49c434e15050 Sean Wang 2019-06-02 3870 rettime = ktime_get(); a1c49c434e15050 Sean Wang 2019-06-02 3871 delta = ktime_sub(rettime, calltime); a1c49c434e15050 Sean Wang 2019-06-02 3872 duration = (unsigned long long)ktime_to_ns(delta) >> 10; a1c49c434e15050 Sean Wang 2019-06-02 3873 a1c49c434e15050 Sean Wang 2019-06-02 3874 bt_dev_info(hdev, "Device setup in %llu usecs", duration); a1c49c434e15050 Sean Wang 2019-06-02 3875 a1c49c434e15050 Sean Wang 2019-06-02 3876 return 0; a1c49c434e15050 Sean Wang 2019-06-02 3877 } a1c49c434e15050 Sean Wang 2019-06-02 3878 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
