Re: [PATCH v2 2/3] Bluetooth: btnxpuart: Handle bootloader error during cmd5 and cmd7

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Neeraj,

kernel test robot noticed the following build warnings:

[auto build test WARNING on bluetooth/master]
[also build test WARNING on linus/master v6.14-rc5 next-20250307]
[cannot apply to bluetooth-next/master]
[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/Neeraj-Sanjay-Kale/Bluetooth-btnxpuart-Handle-bootloader-error-during-cmd5-and-cmd7/20250307-021228
base:   https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git master
patch link:    https://lore.kernel.org/r/20250306180931.57705-2-neeraj.sanjaykale%40nxp.com
patch subject: [PATCH v2 2/3] Bluetooth: btnxpuart: Handle bootloader error during cmd5 and cmd7
config: microblaze-randconfig-r123-20250309 (https://download.01.org/0day-ci/archive/20250309/202503091936.x9Evtskg-lkp@xxxxxxxxx/config)
compiler: microblaze-linux-gcc (GCC) 14.2.0
reproduce: (https://download.01.org/0day-ci/archive/20250309/202503091936.x9Evtskg-lkp@xxxxxxxxx/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@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202503091936.x9Evtskg-lkp@xxxxxxxxx/

sparse warnings: (new ones prefixed by >>)
>> drivers/bluetooth/btnxpuart.c:1113:24: sparse: sparse: restricted __le16 degrades to integer
   drivers/bluetooth/btnxpuart.c:1119:24: sparse: sparse: restricted __le16 degrades to integer

vim +1113 drivers/bluetooth/btnxpuart.c

  1089	
  1090	static int nxp_recv_fw_req_v3(struct hci_dev *hdev, struct sk_buff *skb)
  1091	{
  1092		struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  1093		struct v3_data_req *req;
  1094		__u16 len = 0;
  1095		__u32 offset;
  1096	
  1097		if (!process_boot_signature(nxpdev))
  1098			goto free_skb;
  1099	
  1100		req = skb_pull_data(skb, sizeof(*req));
  1101		if (!req || !nxpdev->fw)
  1102			goto free_skb;
  1103	
  1104		if (!req->error) {
  1105			nxp_send_ack(NXP_ACK_V3, hdev);
  1106			if (nxpdev->timeout_changed == cmd_sent)
  1107				nxpdev->timeout_changed = changed;
  1108			if (nxpdev->baudrate_changed == cmd_sent)
  1109				nxpdev->baudrate_changed = changed;
  1110		} else {
  1111			nxp_handle_fw_download_error(hdev, req);
  1112			if (nxpdev->timeout_changed == cmd_sent &&
> 1113			    req->error == NXP_CRC_RX_ERROR) {
  1114				nxpdev->fw_v3_offset_correction -= nxpdev->fw_v3_prev_sent;
  1115				nxpdev->timeout_changed = not_changed;
  1116			}
  1117			/* After baudrate change, it is normal to get ACK Timeout error */
  1118			if (nxpdev->baudrate_changed == cmd_sent &&
  1119			    req->error == NXP_CRC_RX_ERROR) {
  1120				nxpdev->fw_v3_offset_correction -= nxpdev->fw_v3_prev_sent;
  1121				nxpdev->baudrate_changed = not_changed;
  1122			}
  1123			goto free_skb;
  1124		}
  1125	
  1126		len = __le16_to_cpu(req->len);
  1127	
  1128		if (nxpdev->timeout_changed != changed) {
  1129			nxp_fw_change_timeout(hdev, len);
  1130			nxpdev->timeout_changed = cmd_sent;
  1131			goto free_skb;
  1132		}
  1133	
  1134		if (nxpdev->baudrate_changed != changed) {
  1135			if (nxp_fw_change_baudrate(hdev, len)) {
  1136				nxpdev->baudrate_changed = cmd_sent;
  1137				serdev_device_set_baudrate(nxpdev->serdev,
  1138							   HCI_NXP_SEC_BAUDRATE);
  1139				serdev_device_set_flow_control(nxpdev->serdev, true);
  1140				nxpdev->current_baudrate = HCI_NXP_SEC_BAUDRATE;
  1141			}
  1142			goto free_skb;
  1143		}
  1144	
  1145		if (req->len == 0) {
  1146			bt_dev_info(hdev, "FW Download Complete: %zu bytes",
  1147				   nxpdev->fw->size);
  1148			clear_bit(BTNXPUART_FW_DOWNLOADING, &nxpdev->tx_state);
  1149			wake_up_interruptible(&nxpdev->fw_dnld_done_wait_q);
  1150			goto free_skb;
  1151		}
  1152	
  1153		offset = __le32_to_cpu(req->offset);
  1154		if (offset < nxpdev->fw_v3_offset_correction) {
  1155			/* This scenario should ideally never occur. But if it ever does,
  1156			 * FW is out of sync and needs a power cycle.
  1157			 */
  1158			bt_dev_err(hdev, "Something went wrong during FW download");
  1159			bt_dev_err(hdev, "Please power cycle and try again");
  1160			goto free_skb;
  1161		}
  1162	
  1163		nxpdev->fw_dnld_v3_offset = offset - nxpdev->fw_v3_offset_correction;
  1164		serdev_device_write_buf(nxpdev->serdev, nxpdev->fw->data +
  1165					nxpdev->fw_dnld_v3_offset, len);
  1166	
  1167	free_skb:
  1168		nxpdev->fw_v3_prev_sent = len;
  1169		kfree_skb(skb);
  1170		return 0;
  1171	}
  1172	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux