mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-14 08:36:12 -04:00
Merge "mhi: core: Extend mhi_device_get_sync_atomic() for panic cases"
This commit is contained in:
commit
f6afabd1e2
3 changed files with 23 additions and 8 deletions
|
|
@ -1675,7 +1675,8 @@ int mhi_device_get_sync(struct mhi_device *mhi_dev, int vote)
|
|||
}
|
||||
EXPORT_SYMBOL(mhi_device_get_sync);
|
||||
|
||||
int mhi_device_get_sync_atomic(struct mhi_device *mhi_dev, int timeout_us)
|
||||
int mhi_device_get_sync_atomic(struct mhi_device *mhi_dev, int timeout_us,
|
||||
bool in_panic)
|
||||
{
|
||||
struct mhi_controller *mhi_cntrl = mhi_dev->mhi_cntrl;
|
||||
|
||||
|
|
@ -1701,11 +1702,20 @@ int mhi_device_get_sync_atomic(struct mhi_device *mhi_dev, int timeout_us)
|
|||
return 0;
|
||||
}
|
||||
|
||||
while (mhi_cntrl->pm_state != MHI_PM_M0 &&
|
||||
!MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state) &&
|
||||
timeout_us > 0) {
|
||||
udelay(MHI_FORCE_WAKE_DELAY_US);
|
||||
timeout_us -= MHI_FORCE_WAKE_DELAY_US;
|
||||
if (in_panic) {
|
||||
while (mhi_get_mhi_state(mhi_cntrl) != MHI_STATE_M0 &&
|
||||
!MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state) &&
|
||||
timeout_us > 0) {
|
||||
udelay(MHI_FORCE_WAKE_DELAY_US);
|
||||
timeout_us -= MHI_FORCE_WAKE_DELAY_US;
|
||||
}
|
||||
} else {
|
||||
while (mhi_cntrl->pm_state != MHI_PM_M0 &&
|
||||
!MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state) &&
|
||||
timeout_us > 0) {
|
||||
udelay(MHI_FORCE_WAKE_DELAY_US);
|
||||
timeout_us -= MHI_FORCE_WAKE_DELAY_US;
|
||||
}
|
||||
}
|
||||
|
||||
if (MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state) || timeout_us <= 0) {
|
||||
|
|
|
|||
|
|
@ -3045,7 +3045,7 @@ int cnss_pci_force_wake_request_sync(struct device *dev, int timeout_us)
|
|||
if (test_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state))
|
||||
return -EAGAIN;
|
||||
|
||||
return mhi_device_get_sync_atomic(mhi_ctrl->mhi_dev, timeout_us);
|
||||
return mhi_device_get_sync_atomic(mhi_ctrl->mhi_dev, timeout_us, false);
|
||||
}
|
||||
EXPORT_SYMBOL(cnss_pci_force_wake_request_sync);
|
||||
|
||||
|
|
|
|||
|
|
@ -618,6 +618,7 @@ int mhi_device_get_sync(struct mhi_device *mhi_dev, int vote);
|
|||
* mhi_device_get_sync_atomic - Asserts device_wait and moves device to M0
|
||||
* @mhi_dev: Device associated with the channels
|
||||
* @timeout_us: timeout, in micro-seconds
|
||||
* @in_panic: If requested while kernel is in panic state and no ISRs expected
|
||||
*
|
||||
* The device_wake is asserted to keep device in M0 or bring it to M0.
|
||||
* If device is not in M0 state, then this function will wait for device to
|
||||
|
|
@ -629,6 +630,8 @@ int mhi_device_get_sync(struct mhi_device *mhi_dev, int vote);
|
|||
* Clients can ignore that transition after this function returns as the device
|
||||
* is expected to immediately move from M2 to M0 as wake is asserted and
|
||||
* wouldn't enter low power state.
|
||||
* If in_panic boolean is set, no ISRs are expected, hence this API will have to
|
||||
* resort to reading the MHI status register and poll on M0 state change.
|
||||
*
|
||||
* Returns:
|
||||
* 0 if operation was successful (however, M0 -> M2 -> M0 is possible later) as
|
||||
|
|
@ -636,7 +639,9 @@ int mhi_device_get_sync(struct mhi_device *mhi_dev, int vote);
|
|||
* -ETIMEDOUT is device faled to move to M0 before @timeout_us elapsed
|
||||
* -EIO if the MHI state is one of the ERROR states.
|
||||
*/
|
||||
int mhi_device_get_sync_atomic(struct mhi_device *mhi_dev, int timeout_us);
|
||||
int mhi_device_get_sync_atomic(struct mhi_device *mhi_dev,
|
||||
int timeout_us,
|
||||
bool in_panic);
|
||||
|
||||
/**
|
||||
* mhi_device_put - re-enable low power modes
|
||||
|
|
|
|||
Loading…
Reference in a new issue