Skip to content

Commit

Permalink
mei: mei-me: resume device in prepare
Browse files Browse the repository at this point in the history
Asynchronous runtime resume is not possible while the system
is suspending.
The power management subsystem resumes the device only in the
suspend phase, not in the prepare phase.
Force resume device in prepare to allow drivers on mei bus
to communicate in their prepare callbacks.

Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com>
Signed-off-by: Alan Previn <alan.previn.teres.alexis@intel.com>
  • Loading branch information
ausyskin authored and intel-lab-lkp committed Jan 12, 2023
1 parent bf7f7c5 commit 2fba620
Showing 1 changed file with 19 additions and 1 deletion.
20 changes: 19 additions & 1 deletion drivers/misc/mei/pci-me.c
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,12 @@ static void mei_me_remove(struct pci_dev *pdev)
}

#ifdef CONFIG_PM_SLEEP
static int mei_me_pci_prepare(struct device *device)
{
pm_runtime_resume(device);
return 0;
}

static int mei_me_pci_suspend(struct device *device)
{
struct pci_dev *pdev = to_pci_dev(device);
Expand Down Expand Up @@ -396,7 +402,17 @@ static int mei_me_pci_resume(struct device *device)

return 0;
}
#endif /* CONFIG_PM_SLEEP */

static void mei_me_pci_complete(struct device *device)
{
pm_runtime_suspend(device);
}
#else /* CONFIG_PM_SLEEP */

#define mei_me_pci_prepare NULL
#define mei_me_pci_suspend NULL

#endif /* !CONFIG_PM_SLEEP */

#ifdef CONFIG_PM
static int mei_me_pm_runtime_idle(struct device *device)
Expand Down Expand Up @@ -499,6 +515,8 @@ static inline void mei_me_unset_pm_domain(struct mei_device *dev)
}

static const struct dev_pm_ops mei_me_pm_ops = {
.prepare = mei_me_pci_prepare,
.complete = mei_me_pci_complete,
SET_SYSTEM_SLEEP_PM_OPS(mei_me_pci_suspend,
mei_me_pci_resume)
SET_RUNTIME_PM_OPS(
Expand Down

0 comments on commit 2fba620

Please sign in to comment.