Message ID | 20230113011850.1463965-2-alan.previn.teres.alexis@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/i915/pxp: Add missing cleanup steps for PXP global-teardown | expand |
> > From: Alexander Usyskin <alexander.usyskin@intel.com> > > 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> Reviewed-by: Tomas Winkler <tomas.winkler@intel.com> > --- > drivers/misc/mei/pci-me.c | 20 +++++++++++++++++++- > 1 file changed, 19 insertions(+), 1 deletion(-) > > diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c index > 704cd0caa172..9f6ff06a94fd 100644 > --- a/drivers/misc/mei/pci-me.c > +++ b/drivers/misc/mei/pci-me.c > @@ -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); @@ -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_complete NULL > + > +#endif /* !CONFIG_PM_SLEEP */ > > #ifdef CONFIG_PM > static int mei_me_pm_runtime_idle(struct device *device) @@ -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( > -- > 2.39.0
diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c index 704cd0caa172..9f6ff06a94fd 100644 --- a/drivers/misc/mei/pci-me.c +++ b/drivers/misc/mei/pci-me.c @@ -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); @@ -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_complete NULL + +#endif /* !CONFIG_PM_SLEEP */ #ifdef CONFIG_PM static int mei_me_pm_runtime_idle(struct device *device) @@ -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(