mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
usb: gadget: gsi: Ensure the doorbell is blocked before suspend
The doorbell is blocked as part of gsi_suspend, but a continuous resume and suspend calls can cause a race where resume handling overwrites the blocking of doorbell leading to the controller accessing IPA doorbell after suspend. Here are the series of events that is causing the issue. gsi_resume queue_work with EVT_RESUME gsi_suspend Block the doorbell queue_work with EVT_SUSPEND resume_work_handler xdci_resume Unblock the doorbell suspend_work_handler xdci_suspend Fix this by ensuring that the doorbell is blocked before suspend call to IPA as part of suspend handling. Change-Id: I4d0254c88ed3bec6338d040480b5df2e3f81251e Signed-off-by: Sriharsha Allenki <sallenki@codeaurora.org> Signed-off-by: UtsavBalar1231 <utsavbalar1231@gmail.com> Signed-off-by: Forenche <prahul2003@gmail.com> Signed-off-by: azrim <mirzaspc@gmail.com>
This commit is contained in:
parent
940cd6e121
commit
e112c0491c
@ -875,6 +875,13 @@ static int ipa_suspend_work_handler(struct gsi_data_port *d_port)
|
||||
goto done;
|
||||
}
|
||||
|
||||
/*
|
||||
* Ensure that the DBL is blocked before suspend.
|
||||
*/
|
||||
block_db = true;
|
||||
usb_gsi_ep_op(gsi->d_port.in_ep, (void *)&block_db,
|
||||
GSI_EP_OP_SET_CLR_BLOCK_DBL);
|
||||
|
||||
log_event_dbg("%s: Calling xdci_suspend", __func__);
|
||||
ret = ipa_usb_xdci_suspend(gsi->d_port.out_channel_handle,
|
||||
gsi->d_port.in_channel_handle,
|
||||
|
Loading…
x
Reference in New Issue
Block a user