diff mbox series

Bluetooth: btusb: Fix MT7925 fail to send download patch command

Message ID 20231228092014.23184-1-peter.tsao@mediatek.com (mailing list archive)
State New, archived
Headers show
Series Bluetooth: btusb: Fix MT7925 fail to send download patch command | expand

Checks

Context Check Description
tedd_an/pre-ci_am success Success
tedd_an/CheckPatch success CheckPatch PASS
tedd_an/GitLint success Gitlint PASS
tedd_an/SubjectPrefix success Gitlint PASS
tedd_an/BuildKernel fail BuildKernel: FAIL: drivers/bluetooth/btusb.c: In function ‘btusb_mtk_setup’: drivers/bluetooth/btusb.c:3124:49: error: ‘val’ undeclared (first use in this function) 3124 | btusb_mtk_uhw_reg_read(data, MT7925_SLPPROT, &val); | ^~~ drivers/bluetooth/btusb.c:3124:49: note: each undeclared identifier is reported only once for each function it appears in make[4]: *** [scripts/Makefile.build:243: drivers/bluetooth/btusb.o] Error 1 make[3]: *** [scripts/Makefile.build:480: drivers/bluetooth] Error 2 make[2]: *** [scripts/Makefile.build:480: drivers] Error 2 make[2]: *** Waiting for unfinished jobs.... make[1]: *** [/github/workspace/src/src/Makefile:1911: .] Error 2 make: *** [Makefile:234: __sub-make] Error 2
tedd_an/CheckAllWarning fail CheckAllWarning: FAIL: drivers/bluetooth/btusb.c: In function ‘btusb_mtk_setup’: drivers/bluetooth/btusb.c:3124:49: error: ‘val’ undeclared (first use in this function) 3124 | btusb_mtk_uhw_reg_read(data, MT7925_SLPPROT, &val); | ^~~ drivers/bluetooth/btusb.c:3124:49: note: each undeclared identifier is reported only once for each function it appears in make[4]: *** [scripts/Makefile.build:243: drivers/bluetooth/btusb.o] Error 1 make[3]: *** [scripts/Makefile.build:480: drivers/bluetooth] Error 2 make[2]: *** [scripts/Makefile.build:480: drivers] Error 2 make[2]: *** Waiting for unfinished jobs.... make[1]: *** [/github/workspace/src/src/Makefile:1911: .] Error 2 make: *** [Makefile:234: __sub-make] Error 2
tedd_an/CheckSparse fail CheckSparse: FAIL: net/bluetooth/af_bluetooth.c:223:25: warning: context imbalance in 'bt_accept_enqueue' - different lock contexts for basic block drivers/bluetooth/hci_ag6xx.c:257:24: warning: restricted __le32 degrades to integer drivers/bluetooth/hci_mrvl.c:170:23: warning: restricted __le16 degrades to integer drivers/bluetooth/hci_mrvl.c:203:23: warning: restricted __le16 degrades to integer net/bluetooth/hci_event.c: note: in included file (through include/net/bluetooth/hci_core.h): ./include/net/bluetooth/hci.h:2671:47: warning: array of flexible structures ./include/net/bluetooth/hci.h:2757:43: warning: array of flexible structures drivers/bluetooth/btusb.c: In function ‘btusb_mtk_setup’: drivers/bluetooth/btusb.c:3124:49: error: ‘val’ undeclared (first use in this function) 3124 | btusb_mtk_uhw_reg_read(data, MT7925_SLPPROT, &val); | ^~~ drivers/bluetooth/btusb.c:3124:49: note: each undeclared identifier is reported only once for each function it appears in make[4]: *** [scripts/Makefile.build:243: drivers/bluetooth/btusb.o] Error 1 make[3]: *** [scripts/Makefile.build:480: drivers/bluetooth] Error 2 make[2]: *** [scripts/Makefile.build:480: drivers] Error 2 make[2]: *** Waiting for unfinished jobs.... net/bluetooth/hci_codec.c: note: in included file: ./include/net/bluetooth/hci_core.h:150:35: warning: array of flexible structures net/bluetooth/sco.c: note: in included file: ./include/net/bluetooth/hci_core.h:150:35: warning: array of flexible structures make[1]: *** [/github/workspace/src/src/Makefile:1911: .] Error 2 make: *** [Makefile:234: __sub-make] Error 2
tedd_an/CheckSmatch fail CheckSparse: FAIL: drivers/bluetooth/btusb.c: In function ‘btusb_mtk_setup’: drivers/bluetooth/btusb.c:3124:49: error: ‘val’ undeclared (first use in this function) 3124 | btusb_mtk_uhw_reg_read(data, MT7925_SLPPROT, &val); | ^~~ drivers/bluetooth/btusb.c:3124:49: note: each undeclared identifier is reported only once for each function it appears in make[4]: *** [scripts/Makefile.build:243: drivers/bluetooth/btusb.o] Error 1 make[3]: *** [scripts/Makefile.build:480: drivers/bluetooth] Error 2 make[2]: *** [scripts/Makefile.build:480: drivers] Error 2 make[2]: *** Waiting for unfinished jobs.... net/bluetooth/hci_event.c: note: in included file (through include/net/bluetooth/hci_core.h): ./include/net/bluetooth/hci.h:2671:47: warning: array of flexible structures ./include/net/bluetooth/hci.h:2757:43: warning: array of flexible structures net/bluetooth/hci_codec.c: note: in included file: ./include/net/bluetooth/hci_core.h:150:35: warning: array of flexible structures net/bluetooth/sco.c: note: in included file: ./include/net/bluetooth/hci_core.h:150:35: warning: array of flexible structures make[1]: *** [/github/workspace/src/src/Makefile:1911: .] Error 2 make: *** [Makefile:234: __sub-make] Error 2
tedd_an/BuildKernel32 fail BuildKernel32: FAIL: drivers/bluetooth/btusb.c: In function ‘btusb_mtk_setup’: drivers/bluetooth/btusb.c:3124:49: error: ‘val’ undeclared (first use in this function) 3124 | btusb_mtk_uhw_reg_read(data, MT7925_SLPPROT, &val); | ^~~ drivers/bluetooth/btusb.c:3124:49: note: each undeclared identifier is reported only once for each function it appears in make[4]: *** [scripts/Makefile.build:243: drivers/bluetooth/btusb.o] Error 1 make[3]: *** [scripts/Makefile.build:480: drivers/bluetooth] Error 2 make[2]: *** [scripts/Makefile.build:480: drivers] Error 2 make[2]: *** Waiting for unfinished jobs.... make[1]: *** [/github/workspace/src/src/Makefile:1911: .] Error 2 make: *** [Makefile:234: __sub-make] Error 2
tedd_an/TestRunnerSetup success TestRunnerSetup PASS
tedd_an/TestRunner_l2cap-tester success TestRunner PASS
tedd_an/TestRunner_iso-tester success TestRunner PASS
tedd_an/TestRunner_bnep-tester success TestRunner PASS
tedd_an/TestRunner_mgmt-tester success TestRunner PASS
tedd_an/TestRunner_rfcomm-tester success TestRunner PASS
tedd_an/TestRunner_sco-tester success TestRunner PASS
tedd_an/TestRunner_ioctl-tester success TestRunner PASS
tedd_an/TestRunner_mesh-tester success TestRunner PASS
tedd_an/TestRunner_smp-tester success TestRunner PASS
tedd_an/TestRunner_userchan-tester success TestRunner PASS
tedd_an/IncrementalBuild fail Bluetooth: btusb: Fix MT7925 fail to send download patch command drivers/bluetooth/btusb.c: In function ‘btusb_mtk_setup’: drivers/bluetooth/btusb.c:3124:49: error: ‘val’ undeclared (first use in this function) 3124 | btusb_mtk_uhw_reg_read(data, MT7925_SLPPROT, &val); | ^~~ drivers/bluetooth/btusb.c:3124:49: note: each undeclared identifier is reported only once for each function it appears in make[4]: *** [scripts/Makefile.build:243: drivers/bluetooth/btusb.o] Error 1 make[3]: *** [scripts/Makefile.build:480: drivers/bluetooth] Error 2 make[2]: *** [scripts/Makefile.build:480: drivers] Error 2 make[2]: *** Waiting for unfinished jobs.... make[1]: *** [/github/workspace/src/src/Makefile:1911: .] Error 2 make: *** [Makefile:234: __sub-make] Error 2

Commit Message

Peter Tsao Dec. 28, 2023, 9:20 a.m. UTC
Write the register 0x18011100[1] = 1 to avoid the device enter sleep
state during download patch flow on specific platform.

Error log:
Bluetooth: hci0: Execution of wmt command timed out
Bluetooth: hci0: Failed to send wmt patch dwnld (-110)
Bluetooth: hci0: Failed to set up firmware (-110)

Signed-off-by: Peter Tsao <peter.tsao@mediatek.com>
---
 drivers/bluetooth/btmtk.h | 3 +++
 drivers/bluetooth/btusb.c | 6 +++++-
 2 files changed, 8 insertions(+), 1 deletion(-)

Comments

bluez.test.bot@gmail.com Dec. 28, 2023, 9:56 a.m. UTC | #1
This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=813170

---Test result---

Test Summary:
CheckPatch                    PASS      0.61 seconds
GitLint                       PASS      0.53 seconds
SubjectPrefix                 PASS      0.07 seconds
BuildKernel                   FAIL      24.72 seconds
CheckAllWarning               FAIL      26.84 seconds
CheckSparse                   FAIL      30.92 seconds
CheckSmatch                   FAIL      83.69 seconds
BuildKernel32                 FAIL      23.69 seconds
TestRunnerSetup               PASS      439.55 seconds
TestRunner_l2cap-tester       PASS      23.22 seconds
TestRunner_iso-tester         PASS      47.44 seconds
TestRunner_bnep-tester        PASS      7.11 seconds
TestRunner_mgmt-tester        PASS      167.68 seconds
TestRunner_rfcomm-tester      PASS      10.85 seconds
TestRunner_sco-tester         PASS      14.35 seconds
TestRunner_ioctl-tester       PASS      12.03 seconds
TestRunner_mesh-tester        PASS      10.80 seconds
TestRunner_smp-tester         PASS      9.79 seconds
TestRunner_userchan-tester    PASS      8.68 seconds
IncrementalBuild              FAIL      23.17 seconds

Details
##############################
Test: BuildKernel - FAIL
Desc: Build Kernel for Bluetooth
Output:

drivers/bluetooth/btusb.c: In function ‘btusb_mtk_setup’:
drivers/bluetooth/btusb.c:3124:49: error: ‘val’ undeclared (first use in this function)
 3124 |   btusb_mtk_uhw_reg_read(data, MT7925_SLPPROT, &val);
      |                                                 ^~~
drivers/bluetooth/btusb.c:3124:49: note: each undeclared identifier is reported only once for each function it appears in
make[4]: *** [scripts/Makefile.build:243: drivers/bluetooth/btusb.o] Error 1
make[3]: *** [scripts/Makefile.build:480: drivers/bluetooth] Error 2
make[2]: *** [scripts/Makefile.build:480: drivers] Error 2
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [/github/workspace/src/src/Makefile:1911: .] Error 2
make: *** [Makefile:234: __sub-make] Error 2
##############################
Test: CheckAllWarning - FAIL
Desc: Run linux kernel with all warning enabled
Output:

drivers/bluetooth/btusb.c: In function ‘btusb_mtk_setup’:
drivers/bluetooth/btusb.c:3124:49: error: ‘val’ undeclared (first use in this function)
 3124 |   btusb_mtk_uhw_reg_read(data, MT7925_SLPPROT, &val);
      |                                                 ^~~
drivers/bluetooth/btusb.c:3124:49: note: each undeclared identifier is reported only once for each function it appears in
make[4]: *** [scripts/Makefile.build:243: drivers/bluetooth/btusb.o] Error 1
make[3]: *** [scripts/Makefile.build:480: drivers/bluetooth] Error 2
make[2]: *** [scripts/Makefile.build:480: drivers] Error 2
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [/github/workspace/src/src/Makefile:1911: .] Error 2
make: *** [Makefile:234: __sub-make] Error 2
##############################
Test: CheckSparse - FAIL
Desc: Run sparse tool with linux kernel
Output:

net/bluetooth/af_bluetooth.c:223:25: warning: context imbalance in 'bt_accept_enqueue' - different lock contexts for basic block
drivers/bluetooth/hci_ag6xx.c:257:24: warning: restricted __le32 degrades to integer
drivers/bluetooth/hci_mrvl.c:170:23: warning: restricted __le16 degrades to integer
drivers/bluetooth/hci_mrvl.c:203:23: warning: restricted __le16 degrades to integer
net/bluetooth/hci_event.c: note: in included file (through include/net/bluetooth/hci_core.h):
./include/net/bluetooth/hci.h:2671:47: warning: array of flexible structures
./include/net/bluetooth/hci.h:2757:43: warning: array of flexible structures
drivers/bluetooth/btusb.c: In function ‘btusb_mtk_setup’:
drivers/bluetooth/btusb.c:3124:49: error: ‘val’ undeclared (first use in this function)
 3124 |   btusb_mtk_uhw_reg_read(data, MT7925_SLPPROT, &val);
      |                                                 ^~~
drivers/bluetooth/btusb.c:3124:49: note: each undeclared identifier is reported only once for each function it appears in
make[4]: *** [scripts/Makefile.build:243: drivers/bluetooth/btusb.o] Error 1
make[3]: *** [scripts/Makefile.build:480: drivers/bluetooth] Error 2
make[2]: *** [scripts/Makefile.build:480: drivers] Error 2
make[2]: *** Waiting for unfinished jobs....
net/bluetooth/hci_codec.c: note: in included file:
./include/net/bluetooth/hci_core.h:150:35: warning: array of flexible structures
net/bluetooth/sco.c: note: in included file:
./include/net/bluetooth/hci_core.h:150:35: warning: array of flexible structures
make[1]: *** [/github/workspace/src/src/Makefile:1911: .] Error 2
make: *** [Makefile:234: __sub-make] Error 2
##############################
Test: CheckSmatch - FAIL
Desc: Run smatch tool with source
Output:

drivers/bluetooth/btusb.c: In function ‘btusb_mtk_setup’:
drivers/bluetooth/btusb.c:3124:49: error: ‘val’ undeclared (first use in this function)
 3124 |   btusb_mtk_uhw_reg_read(data, MT7925_SLPPROT, &val);
      |                                                 ^~~
drivers/bluetooth/btusb.c:3124:49: note: each undeclared identifier is reported only once for each function it appears in
make[4]: *** [scripts/Makefile.build:243: drivers/bluetooth/btusb.o] Error 1
make[3]: *** [scripts/Makefile.build:480: drivers/bluetooth] Error 2
make[2]: *** [scripts/Makefile.build:480: drivers] Error 2
make[2]: *** Waiting for unfinished jobs....
net/bluetooth/hci_event.c: note: in included file (through include/net/bluetooth/hci_core.h):
./include/net/bluetooth/hci.h:2671:47: warning: array of flexible structures
./include/net/bluetooth/hci.h:2757:43: warning: array of flexible structures
net/bluetooth/hci_codec.c: note: in included file:
./include/net/bluetooth/hci_core.h:150:35: warning: array of flexible structures
net/bluetooth/sco.c: note: in included file:
./include/net/bluetooth/hci_core.h:150:35: warning: array of flexible structures
make[1]: *** [/github/workspace/src/src/Makefile:1911: .] Error 2
make: *** [Makefile:234: __sub-make] Error 2
##############################
Test: BuildKernel32 - FAIL
Desc: Build 32bit Kernel for Bluetooth
Output:

drivers/bluetooth/btusb.c: In function ‘btusb_mtk_setup’:
drivers/bluetooth/btusb.c:3124:49: error: ‘val’ undeclared (first use in this function)
 3124 |   btusb_mtk_uhw_reg_read(data, MT7925_SLPPROT, &val);
      |                                                 ^~~
drivers/bluetooth/btusb.c:3124:49: note: each undeclared identifier is reported only once for each function it appears in
make[4]: *** [scripts/Makefile.build:243: drivers/bluetooth/btusb.o] Error 1
make[3]: *** [scripts/Makefile.build:480: drivers/bluetooth] Error 2
make[2]: *** [scripts/Makefile.build:480: drivers] Error 2
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [/github/workspace/src/src/Makefile:1911: .] Error 2
make: *** [Makefile:234: __sub-make] Error 2
##############################
Test: IncrementalBuild - FAIL
Desc: Incremental build with the patches in the series
Output:
Bluetooth: btusb: Fix MT7925 fail to send download patch command

drivers/bluetooth/btusb.c: In function ‘btusb_mtk_setup’:
drivers/bluetooth/btusb.c:3124:49: error: ‘val’ undeclared (first use in this function)
 3124 |   btusb_mtk_uhw_reg_read(data, MT7925_SLPPROT, &val);
      |                                                 ^~~
drivers/bluetooth/btusb.c:3124:49: note: each undeclared identifier is reported only once for each function it appears in
make[4]: *** [scripts/Makefile.build:243: drivers/bluetooth/btusb.o] Error 1
make[3]: *** [scripts/Makefile.build:480: drivers/bluetooth] Error 2
make[2]: *** [scripts/Makefile.build:480: drivers] Error 2
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [/github/workspace/src/src/Makefile:1911: .] Error 2
make: *** [Makefile:234: __sub-make] Error 2


---
Regards,
Linux Bluetooth
kernel test robot Dec. 29, 2023, 12:44 a.m. UTC | #2
Hi Peter,

kernel test robot noticed the following build errors:

[auto build test ERROR on bluetooth/master]
[also build test ERROR on bluetooth-next/master linus/master v6.7-rc7 next-20231222]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Peter-Tsao/Bluetooth-btusb-Fix-MT7925-fail-to-send-download-patch-command/20231228-172328
base:   https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git master
patch link:    https://lore.kernel.org/r/20231228092014.23184-1-peter.tsao%40mediatek.com
patch subject: [PATCH] Bluetooth: btusb: Fix MT7925 fail to send download patch command
config: i386-buildonly-randconfig-002-20231229 (https://download.01.org/0day-ci/archive/20231229/202312290838.c0zcBoUz-lkp@intel.com/config)
compiler: ClangBuiltLinux clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231229/202312290838.c0zcBoUz-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202312290838.c0zcBoUz-lkp@intel.com/

All errors (new ones prefixed by >>):

>> drivers/bluetooth/btusb.c:3122:49: error: use of undeclared identifier 'val'
    3122 |                 btusb_mtk_uhw_reg_read(data, MT7925_SLPPROT, &val);
         |                                                               ^
   drivers/bluetooth/btusb.c:3123:3: error: use of undeclared identifier 'val'
    3123 |                 val |= SLPPROT_BYPASS;
         |                 ^
   drivers/bluetooth/btusb.c:3124:49: error: use of undeclared identifier 'val'
    3124 |                 btusb_mtk_uhw_reg_write(data, MT7925_SLPPROT, val);
         |                                                               ^
   3 errors generated.


vim +/val +3122 drivers/bluetooth/btusb.c

  3068	
  3069	static int btusb_mtk_setup(struct hci_dev *hdev)
  3070	{
  3071		struct btusb_data *data = hci_get_drvdata(hdev);
  3072		struct btmtk_hci_wmt_params wmt_params;
  3073		ktime_t calltime, delta, rettime;
  3074		struct btmtk_tci_sleep tci_sleep;
  3075		unsigned long long duration;
  3076		struct sk_buff *skb;
  3077		const char *fwname;
  3078		int err, status;
  3079		u32 dev_id = 0;
  3080		char fw_bin_name[64];
  3081		u32 fw_version = 0;
  3082		u8 param;
  3083		struct btmediatek_data *mediatek;
  3084	
  3085		calltime = ktime_get();
  3086	
  3087		err = btusb_mtk_id_get(data, 0x80000008, &dev_id);
  3088		if (err < 0) {
  3089			bt_dev_err(hdev, "Failed to get device id (%d)", err);
  3090			return err;
  3091		}
  3092	
  3093		if (!dev_id || dev_id != 0x7663) {
  3094			err = btusb_mtk_id_get(data, 0x70010200, &dev_id);
  3095			if (err < 0) {
  3096				bt_dev_err(hdev, "Failed to get device id (%d)", err);
  3097				return err;
  3098			}
  3099			err = btusb_mtk_id_get(data, 0x80021004, &fw_version);
  3100			if (err < 0) {
  3101				bt_dev_err(hdev, "Failed to get fw version (%d)", err);
  3102				return err;
  3103			}
  3104		}
  3105	
  3106		mediatek = hci_get_priv(hdev);
  3107		mediatek->dev_id = dev_id;
  3108		mediatek->reset_sync = btusb_mtk_reset;
  3109	
  3110		err = btmtk_register_coredump(hdev, btusb_driver.name, fw_version);
  3111		if (err < 0)
  3112			bt_dev_err(hdev, "Failed to register coredump (%d)", err);
  3113	
  3114		switch (dev_id) {
  3115		case 0x7663:
  3116			fwname = FIRMWARE_MT7663;
  3117			break;
  3118		case 0x7668:
  3119			fwname = FIRMWARE_MT7668;
  3120			break;
  3121		case 0x7925:
> 3122			btusb_mtk_uhw_reg_read(data, MT7925_SLPPROT, &val);
  3123			val |= SLPPROT_BYPASS;
  3124			btusb_mtk_uhw_reg_write(data, MT7925_SLPPROT, val);
  3125			fallthrough;
  3126		case 0x7922:
  3127		case 0x7961:
  3128			if (dev_id == 0x7925)
  3129				snprintf(fw_bin_name, sizeof(fw_bin_name),
  3130					 "mediatek/mt%04x/BT_RAM_CODE_MT%04x_1_%x_hdr.bin",
  3131					 dev_id & 0xffff, dev_id & 0xffff, (fw_version & 0xff) + 1);
  3132			else
  3133				snprintf(fw_bin_name, sizeof(fw_bin_name),
  3134					 "mediatek/BT_RAM_CODE_MT%04x_1_%x_hdr.bin",
  3135					 dev_id & 0xffff, (fw_version & 0xff) + 1);
  3136	
  3137			err = btmtk_setup_firmware_79xx(hdev, fw_bin_name,
  3138							btusb_mtk_hci_wmt_sync);
  3139			if (err < 0) {
  3140				bt_dev_err(hdev, "Failed to set up firmware (%d)", err);
  3141				return err;
  3142			}
  3143	
  3144			/* It's Device EndPoint Reset Option Register */
  3145			btusb_mtk_uhw_reg_write(data, MTK_EP_RST_OPT, MTK_EP_RST_IN_OUT_OPT);
  3146	
  3147			/* Enable Bluetooth protocol */
  3148			param = 1;
  3149			wmt_params.op = BTMTK_WMT_FUNC_CTRL;
  3150			wmt_params.flag = 0;
  3151			wmt_params.dlen = sizeof(param);
  3152			wmt_params.data = &param;
  3153			wmt_params.status = NULL;
  3154	
  3155			err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params);
  3156			if (err < 0) {
  3157				bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
  3158				return err;
  3159			}
  3160	
  3161			hci_set_msft_opcode(hdev, 0xFD30);
  3162			hci_set_aosp_capable(hdev);
  3163			goto done;
  3164		default:
  3165			bt_dev_err(hdev, "Unsupported hardware variant (%08x)",
  3166				   dev_id);
  3167			return -ENODEV;
  3168		}
  3169	
  3170		/* Query whether the firmware is already download */
  3171		wmt_params.op = BTMTK_WMT_SEMAPHORE;
  3172		wmt_params.flag = 1;
  3173		wmt_params.dlen = 0;
  3174		wmt_params.data = NULL;
  3175		wmt_params.status = &status;
  3176	
  3177		err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params);
  3178		if (err < 0) {
  3179			bt_dev_err(hdev, "Failed to query firmware status (%d)", err);
  3180			return err;
  3181		}
  3182	
  3183		if (status == BTMTK_WMT_PATCH_DONE) {
  3184			bt_dev_info(hdev, "firmware already downloaded");
  3185			goto ignore_setup_fw;
  3186		}
  3187	
  3188		/* Setup a firmware which the device definitely requires */
  3189		err = btmtk_setup_firmware(hdev, fwname,
  3190					   btusb_mtk_hci_wmt_sync);
  3191		if (err < 0)
  3192			return err;
  3193	
  3194	ignore_setup_fw:
  3195		err = readx_poll_timeout(btusb_mtk_func_query, hdev, status,
  3196					 status < 0 || status != BTMTK_WMT_ON_PROGRESS,
  3197					 2000, 5000000);
  3198		/* -ETIMEDOUT happens */
  3199		if (err < 0)
  3200			return err;
  3201	
  3202		/* The other errors happen in btusb_mtk_func_query */
  3203		if (status < 0)
  3204			return status;
  3205	
  3206		if (status == BTMTK_WMT_ON_DONE) {
  3207			bt_dev_info(hdev, "function already on");
  3208			goto ignore_func_on;
  3209		}
  3210	
  3211		/* Enable Bluetooth protocol */
  3212		param = 1;
  3213		wmt_params.op = BTMTK_WMT_FUNC_CTRL;
  3214		wmt_params.flag = 0;
  3215		wmt_params.dlen = sizeof(param);
  3216		wmt_params.data = &param;
  3217		wmt_params.status = NULL;
  3218	
  3219		err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params);
  3220		if (err < 0) {
  3221			bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
  3222			return err;
  3223		}
  3224	
  3225	ignore_func_on:
  3226		/* Apply the low power environment setup */
  3227		tci_sleep.mode = 0x5;
  3228		tci_sleep.duration = cpu_to_le16(0x640);
  3229		tci_sleep.host_duration = cpu_to_le16(0x640);
  3230		tci_sleep.host_wakeup_pin = 0;
  3231		tci_sleep.time_compensation = 0;
  3232	
  3233		skb = __hci_cmd_sync(hdev, 0xfc7a, sizeof(tci_sleep), &tci_sleep,
  3234				     HCI_INIT_TIMEOUT);
  3235		if (IS_ERR(skb)) {
  3236			err = PTR_ERR(skb);
  3237			bt_dev_err(hdev, "Failed to apply low power setting (%d)", err);
  3238			return err;
  3239		}
  3240		kfree_skb(skb);
  3241	
  3242	done:
  3243		rettime = ktime_get();
  3244		delta = ktime_sub(rettime, calltime);
  3245		duration = (unsigned long long)ktime_to_ns(delta) >> 10;
  3246	
  3247		bt_dev_info(hdev, "Device setup in %llu usecs", duration);
  3248	
  3249		return 0;
  3250	}
  3251
kernel test robot Dec. 29, 2023, 5:06 a.m. UTC | #3
Hi Peter,

kernel test robot noticed the following build errors:

[auto build test ERROR on bluetooth/master]
[also build test ERROR on bluetooth-next/master linus/master v6.7-rc7 next-20231222]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Peter-Tsao/Bluetooth-btusb-Fix-MT7925-fail-to-send-download-patch-command/20231228-172328
base:   https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git master
patch link:    https://lore.kernel.org/r/20231228092014.23184-1-peter.tsao%40mediatek.com
patch subject: [PATCH] Bluetooth: btusb: Fix MT7925 fail to send download patch command
config: arm64-defconfig (https://download.01.org/0day-ci/archive/20231229/202312291253.5LoPimum-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231229/202312291253.5LoPimum-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202312291253.5LoPimum-lkp@intel.com/

All errors (new ones prefixed by >>):

   drivers/bluetooth/btusb.c: In function 'btusb_mtk_setup':
>> drivers/bluetooth/btusb.c:3122:63: error: 'val' undeclared (first use in this function)
    3122 |                 btusb_mtk_uhw_reg_read(data, MT7925_SLPPROT, &val);
         |                                                               ^~~
   drivers/bluetooth/btusb.c:3122:63: note: each undeclared identifier is reported only once for each function it appears in


vim +/val +3122 drivers/bluetooth/btusb.c

  3068	
  3069	static int btusb_mtk_setup(struct hci_dev *hdev)
  3070	{
  3071		struct btusb_data *data = hci_get_drvdata(hdev);
  3072		struct btmtk_hci_wmt_params wmt_params;
  3073		ktime_t calltime, delta, rettime;
  3074		struct btmtk_tci_sleep tci_sleep;
  3075		unsigned long long duration;
  3076		struct sk_buff *skb;
  3077		const char *fwname;
  3078		int err, status;
  3079		u32 dev_id = 0;
  3080		char fw_bin_name[64];
  3081		u32 fw_version = 0;
  3082		u8 param;
  3083		struct btmediatek_data *mediatek;
  3084	
  3085		calltime = ktime_get();
  3086	
  3087		err = btusb_mtk_id_get(data, 0x80000008, &dev_id);
  3088		if (err < 0) {
  3089			bt_dev_err(hdev, "Failed to get device id (%d)", err);
  3090			return err;
  3091		}
  3092	
  3093		if (!dev_id || dev_id != 0x7663) {
  3094			err = btusb_mtk_id_get(data, 0x70010200, &dev_id);
  3095			if (err < 0) {
  3096				bt_dev_err(hdev, "Failed to get device id (%d)", err);
  3097				return err;
  3098			}
  3099			err = btusb_mtk_id_get(data, 0x80021004, &fw_version);
  3100			if (err < 0) {
  3101				bt_dev_err(hdev, "Failed to get fw version (%d)", err);
  3102				return err;
  3103			}
  3104		}
  3105	
  3106		mediatek = hci_get_priv(hdev);
  3107		mediatek->dev_id = dev_id;
  3108		mediatek->reset_sync = btusb_mtk_reset;
  3109	
  3110		err = btmtk_register_coredump(hdev, btusb_driver.name, fw_version);
  3111		if (err < 0)
  3112			bt_dev_err(hdev, "Failed to register coredump (%d)", err);
  3113	
  3114		switch (dev_id) {
  3115		case 0x7663:
  3116			fwname = FIRMWARE_MT7663;
  3117			break;
  3118		case 0x7668:
  3119			fwname = FIRMWARE_MT7668;
  3120			break;
  3121		case 0x7925:
> 3122			btusb_mtk_uhw_reg_read(data, MT7925_SLPPROT, &val);
  3123			val |= SLPPROT_BYPASS;
  3124			btusb_mtk_uhw_reg_write(data, MT7925_SLPPROT, val);
  3125			fallthrough;
  3126		case 0x7922:
  3127		case 0x7961:
  3128			if (dev_id == 0x7925)
  3129				snprintf(fw_bin_name, sizeof(fw_bin_name),
  3130					 "mediatek/mt%04x/BT_RAM_CODE_MT%04x_1_%x_hdr.bin",
  3131					 dev_id & 0xffff, dev_id & 0xffff, (fw_version & 0xff) + 1);
  3132			else
  3133				snprintf(fw_bin_name, sizeof(fw_bin_name),
  3134					 "mediatek/BT_RAM_CODE_MT%04x_1_%x_hdr.bin",
  3135					 dev_id & 0xffff, (fw_version & 0xff) + 1);
  3136	
  3137			err = btmtk_setup_firmware_79xx(hdev, fw_bin_name,
  3138							btusb_mtk_hci_wmt_sync);
  3139			if (err < 0) {
  3140				bt_dev_err(hdev, "Failed to set up firmware (%d)", err);
  3141				return err;
  3142			}
  3143	
  3144			/* It's Device EndPoint Reset Option Register */
  3145			btusb_mtk_uhw_reg_write(data, MTK_EP_RST_OPT, MTK_EP_RST_IN_OUT_OPT);
  3146	
  3147			/* Enable Bluetooth protocol */
  3148			param = 1;
  3149			wmt_params.op = BTMTK_WMT_FUNC_CTRL;
  3150			wmt_params.flag = 0;
  3151			wmt_params.dlen = sizeof(param);
  3152			wmt_params.data = &param;
  3153			wmt_params.status = NULL;
  3154	
  3155			err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params);
  3156			if (err < 0) {
  3157				bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
  3158				return err;
  3159			}
  3160	
  3161			hci_set_msft_opcode(hdev, 0xFD30);
  3162			hci_set_aosp_capable(hdev);
  3163			goto done;
  3164		default:
  3165			bt_dev_err(hdev, "Unsupported hardware variant (%08x)",
  3166				   dev_id);
  3167			return -ENODEV;
  3168		}
  3169	
  3170		/* Query whether the firmware is already download */
  3171		wmt_params.op = BTMTK_WMT_SEMAPHORE;
  3172		wmt_params.flag = 1;
  3173		wmt_params.dlen = 0;
  3174		wmt_params.data = NULL;
  3175		wmt_params.status = &status;
  3176	
  3177		err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params);
  3178		if (err < 0) {
  3179			bt_dev_err(hdev, "Failed to query firmware status (%d)", err);
  3180			return err;
  3181		}
  3182	
  3183		if (status == BTMTK_WMT_PATCH_DONE) {
  3184			bt_dev_info(hdev, "firmware already downloaded");
  3185			goto ignore_setup_fw;
  3186		}
  3187	
  3188		/* Setup a firmware which the device definitely requires */
  3189		err = btmtk_setup_firmware(hdev, fwname,
  3190					   btusb_mtk_hci_wmt_sync);
  3191		if (err < 0)
  3192			return err;
  3193	
  3194	ignore_setup_fw:
  3195		err = readx_poll_timeout(btusb_mtk_func_query, hdev, status,
  3196					 status < 0 || status != BTMTK_WMT_ON_PROGRESS,
  3197					 2000, 5000000);
  3198		/* -ETIMEDOUT happens */
  3199		if (err < 0)
  3200			return err;
  3201	
  3202		/* The other errors happen in btusb_mtk_func_query */
  3203		if (status < 0)
  3204			return status;
  3205	
  3206		if (status == BTMTK_WMT_ON_DONE) {
  3207			bt_dev_info(hdev, "function already on");
  3208			goto ignore_func_on;
  3209		}
  3210	
  3211		/* Enable Bluetooth protocol */
  3212		param = 1;
  3213		wmt_params.op = BTMTK_WMT_FUNC_CTRL;
  3214		wmt_params.flag = 0;
  3215		wmt_params.dlen = sizeof(param);
  3216		wmt_params.data = &param;
  3217		wmt_params.status = NULL;
  3218	
  3219		err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params);
  3220		if (err < 0) {
  3221			bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
  3222			return err;
  3223		}
  3224	
  3225	ignore_func_on:
  3226		/* Apply the low power environment setup */
  3227		tci_sleep.mode = 0x5;
  3228		tci_sleep.duration = cpu_to_le16(0x640);
  3229		tci_sleep.host_duration = cpu_to_le16(0x640);
  3230		tci_sleep.host_wakeup_pin = 0;
  3231		tci_sleep.time_compensation = 0;
  3232	
  3233		skb = __hci_cmd_sync(hdev, 0xfc7a, sizeof(tci_sleep), &tci_sleep,
  3234				     HCI_INIT_TIMEOUT);
  3235		if (IS_ERR(skb)) {
  3236			err = PTR_ERR(skb);
  3237			bt_dev_err(hdev, "Failed to apply low power setting (%d)", err);
  3238			return err;
  3239		}
  3240		kfree_skb(skb);
  3241	
  3242	done:
  3243		rettime = ktime_get();
  3244		delta = ktime_sub(rettime, calltime);
  3245		duration = (unsigned long long)ktime_to_ns(delta) >> 10;
  3246	
  3247		bt_dev_info(hdev, "Device setup in %llu usecs", duration);
  3248	
  3249		return 0;
  3250	}
  3251
diff mbox series

Patch

diff --git a/drivers/bluetooth/btmtk.h b/drivers/bluetooth/btmtk.h
index 56f5502baadf..8b582077a01f 100644
--- a/drivers/bluetooth/btmtk.h
+++ b/drivers/bluetooth/btmtk.h
@@ -22,6 +22,9 @@ 
 #define MT7921_DLSTATUS 0x7c053c10
 #define BT_DL_STATE BIT(1)
 
+#define MT7925_SLPPROT 0x18011100
+#define SLPPROT_BYPASS BIT(1)
+
 #define MTK_COREDUMP_SIZE		(1024 * 1000)
 #define MTK_COREDUMP_END		"coredump end"
 #define MTK_COREDUMP_END_LEN		(sizeof(MTK_COREDUMP_END))
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 7835170b1d66..842fda0527db 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -3120,9 +3120,13 @@  static int btusb_mtk_setup(struct hci_dev *hdev)
 	case 0x7668:
 		fwname = FIRMWARE_MT7668;
 		break;
+	case 0x7925:
+		btusb_mtk_uhw_reg_read(data, MT7925_SLPPROT, &val);
+		val |= SLPPROT_BYPASS;
+		btusb_mtk_uhw_reg_write(data, MT7925_SLPPROT, val);
+		fallthrough;
 	case 0x7922:
 	case 0x7961:
-	case 0x7925:
 		if (dev_id == 0x7925)
 			snprintf(fw_bin_name, sizeof(fw_bin_name),
 				 "mediatek/mt%04x/BT_RAM_CODE_MT%04x_1_%x_hdr.bin",