mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-12 07:37:31 -04: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>
This commit is contained in:
parent
4b36c63809
commit
8b7e4d1fee
1 changed files with 7 additions and 0 deletions
|
|
@ -785,6 +785,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, gsi->prot_id,
|
||||
|
|
|
|||
Loading…
Reference in a new issue