Bluetooth: controller: Workaround CPR procedure collision at CPU instant
This is a workaround for IOP issue, where peer rejects LLCP Slave Connection Parameter Request with LMP Error Transaction Collision error code even if previous request is complete at the instant. Relates to #15366. Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl> Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
parent
f9e89e5532
commit
44739f4427
1 changed files with 10 additions and 13 deletions
|
@ -2064,29 +2064,26 @@ isr_rx_conn_pkt_ctrl_rej_conn_upd(struct radio_pdu_node_rx *node_rx,
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* Same Procedure or Different Procedure Collision */
|
/* FIXME: handle unsupported LL parameters error */
|
||||||
|
|
||||||
/* If not same procedure, stop procedure timeout, else
|
|
||||||
* continue timer until phy upd ind is received.
|
|
||||||
*/
|
|
||||||
else if (rej_ext_ind->error_code != BT_HCI_ERR_LL_PROC_COLLISION) {
|
else if (rej_ext_ind->error_code != BT_HCI_ERR_LL_PROC_COLLISION) {
|
||||||
|
/* update to next ticks offset */
|
||||||
|
if (conn->role) {
|
||||||
|
conn->slave.ticks_to_offset =
|
||||||
|
conn->llcp_conn_param.ticks_to_offset_next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (conn->llcp_conn_param.state == LLCP_CPR_STATE_RSP_WAIT) {
|
||||||
LL_ASSERT(_radio.conn_upd == conn);
|
LL_ASSERT(_radio.conn_upd == conn);
|
||||||
|
|
||||||
/* reset mutex */
|
/* reset mutex */
|
||||||
_radio.conn_upd = NULL;
|
_radio.conn_upd = NULL;
|
||||||
|
|
||||||
/* Procedure complete */
|
/* Procedure complete */
|
||||||
conn->llcp_conn_param.ack =
|
conn->llcp_conn_param.ack = conn->llcp_conn_param.req;
|
||||||
conn->llcp_conn_param.req;
|
|
||||||
|
|
||||||
/* Stop procedure timeout */
|
/* Stop procedure timeout */
|
||||||
conn->procedure_expire = 0U;
|
conn->procedure_expire = 0U;
|
||||||
|
|
||||||
/* update to next ticks offsets */
|
|
||||||
if (conn->role) {
|
|
||||||
conn->slave.ticks_to_offset =
|
|
||||||
conn->llcp_conn_param.ticks_to_offset_next;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* skip event generation if not cmd initiated */
|
/* skip event generation if not cmd initiated */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue