Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Skip to content
Commit 060e1db0 authored by Mayank Rana's avatar Mayank Rana
Browse files

f_gsi: Make usb ipa wq as freezable workqueue



USB function driver uses usb_gadget_autopm_get() API to increments
USB controller device's PM runtime usage and child count, and also
expects that USB controller is resumed. Late suspend disables USB
controller device's PM runtime functionality by incrementing
disable_depth count and early resume enables it back once system is
resumed. This results into pm_runtime_get_sync() returning -EACCESS
when APPS is power collapsed and it is resuming due to USB bus resume
case. usb_gadget_autopm_get() API is decrementing device's PM runtime
usage count if it receives error value from pm_runtime_get_sync() API.
USB function driver doesn't check return value which results into
continuing USB operation. On next bus suspend, it decrements usage count
although it was not incremented in previous resume case which makes PM
runtime usage count negative. This can cause multiple issues as below:
1. USB bus resume may take more time causing host re-enumerating USB
gadget device
2. Unclock register access on remote wakeup case
3. USB host mode enumeration may fail due to dwc3 device usage count
is negative.

Fix this issue by making usb ipa wq as freezable workqueue which will
make sure that ipa_work_handler() work is executed only after system is
resumed and USB controller device's PM runtime is enabled.

CRs-Fixed: 1075002, 1074383
Change-Id: I300d1a0081fafcbef3c00c63cddd49be54a651e5
Signed-off-by: default avatarMayank Rana <mrana@codeaurora.org>
parent 78b44644
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment