RE: [PATCH v1 1/2] Bluetooth: btintel_pcie: Make driver wait for alive interrupt

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

 



Hi Paul,

>Subject: Re: [PATCH v1 1/2] Bluetooth: btintel_pcie: Make driver wait for alive
>interrupt
>
>Dear Kiran,
>
>
>Am 08.07.25 um 14:23 schrieb K, Kiran:
>
>>> Subject: Re: [PATCH v1 1/2] Bluetooth: btintel_pcie: Make driver wait
>>> for alive interrupt
>
>>> Am 07.07.25 um 05:46 schrieb Kiran K:
>>>> Firmware raises an alive interrupt upon receiving the 0xfc01 (Intel
>>>> reset) command. This change fixes the driver to properly wait for
>>>> the alive interrupt.
>>>
>>> What is the consequence of not waiting?
>>
>> This is an alignment between driver and firmware. If driver doesn’t
>> wait for alive interrupt, then there is chance of stack sending
>> commands before the firmware is ready to accept.
>
>Thank you for elaborating. It’d be great if you added it to the commit message,
>when you resend.
Ack.

>
>>>> Signed-off-by: Sai Teja Aluvala <aluvala.sai.teja@xxxxxxxxx>
>>>> Signed-off-by: Kiran K <kiran.k@xxxxxxxxx>
>>>> Fixes: 05c200c8f029 ("Bluetooth: btintel_pcie: Add handshake between
>>>> driver and firmware")
>
>I would also put the Fixes: tag above the Signed-off-by line.
Ack.

>
>>>> ---
>>>>    drivers/bluetooth/btintel_pcie.c | 27 ++++++++++++++-------------
>>>>    1 file changed, 14 insertions(+), 13 deletions(-)
>>>>
>>>> diff --git a/drivers/bluetooth/btintel_pcie.c
>>>> b/drivers/bluetooth/btintel_pcie.c
>>>> index 1113a6310bd0..f893ad6fc87a 100644
>>>> --- a/drivers/bluetooth/btintel_pcie.c
>>>> +++ b/drivers/bluetooth/btintel_pcie.c
>>>> @@ -947,11 +947,13 @@ static void btintel_pcie_msix_gp0_handler(struct
>btintel_pcie_data *data)
>>>>    	case BTINTEL_PCIE_INTEL_HCI_RESET1:
>>>>    		if (btintel_pcie_in_op(data)) {
>>>>    			submit_rx = true;
>>>> +			signal_waitq = true;
>>>>    			break;
>>>>    		}
>>>>
>>>>    		if (btintel_pcie_in_iml(data)) {
>>>>    			submit_rx = true;
>>>> +			signal_waitq = true;
>>>>    			data->alive_intr_ctxt = BTINTEL_PCIE_FW_DL;
>>>>    			break;
>>>>    		}
>>>> @@ -1985,8 +1987,9 @@ static int btintel_pcie_send_frame(struct hci_dev
>*hdev,
>>>>    			if (opcode == 0xfc01)
>>>>    				btintel_pcie_inject_cmd_complete(hdev,
>opcode);
>>>>    		}
>>>> -		/* Firmware raises alive interrupt on HCI_OP_RESET */
>>>> -		if (opcode == HCI_OP_RESET)
>>>> +
>>>> +		/* Firmware raises alive interrupt on HCI_OP_RESET or
>0xfc01*/
>>>
>>> A space is missing before */.
>> Ack.
>>
>>>> +		if (opcode == HCI_OP_RESET || opcode == 0xfc01)
>>>
>>> Please define a macro for the magic number.
>>
>> This is vendor specific opcode and is also shared across btintel.c,
>> btusb.c and hci_intel.c. Would it be acceptable to submit a separate
>> patch for this change alone?
>
>Sure. Fine by me.
Thanks.

>
>>>>    			data->gp0_received = false;
>>>>
>>>>    		hdev->stat.cmd_tx++;
>>>> @@ -2025,17 +2028,15 @@ static int btintel_pcie_send_frame(struct
>hci_dev *hdev,
>>>>    		bt_dev_dbg(data->hdev, "sent cmd: 0x%4.4x alive context
>changed: %s  ->  %s",
>>>>    			   opcode, btintel_pcie_alivectxt_state2str(old_ctxt),
>>>>    			   btintel_pcie_alivectxt_state2str(data -
>alive_intr_ctxt));
>>>> -		if (opcode == HCI_OP_RESET) {
>>>> -			ret = wait_event_timeout(data->gp0_wait_q,
>>>> -						 data->gp0_received,
>>>> -
>msecs_to_jiffies(BTINTEL_DEFAULT_INTR_TIMEOUT_MS));
>>>> -			if (!ret) {
>>>> -				hdev->stat.err_tx++;
>>>> -				bt_dev_err(hdev, "No alive interrupt received
>for %s",
>>>> -					   btintel_pcie_alivectxt_state2str(data-
>>alive_intr_ctxt));
>>>> -				ret = -ETIME;
>>>> -				goto exit_error;
>>>> -			}
>>>> +		ret = wait_event_timeout(data->gp0_wait_q,
>>>> +					 data->gp0_received,
>>>> +
>msecs_to_jiffies(BTINTEL_DEFAULT_INTR_TIMEOUT_MS));
>>>> +		if (!ret) {
>>>> +			hdev->stat.err_tx++;
>>>> +			bt_dev_err(hdev, "No alive interrupt received for %s",
>>>> +				   btintel_pcie_alivectxt_state2str(data-
>>alive_intr_ctxt));
>>>
>>> In a follow-up patch, the log message could be improved by also
>>> adding the timeout value to it.
>> Ack.
>>
>>>> +			ret = -ETIME;
>>>> +			goto exit_error;
>>>>    		}
>>>>    	}
>>>>    	hdev->stat.byte_tx += skb->len;
>
>Kind regards,
>
>Paul

Regards,
Kiran





[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