On 7/21/20 7:31 AM, Vaibhav Gupta wrote: > Drivers using legacy power management .suspen()/.resume() callbacks > have to manage PCI states and device's PM states themselves. They also > need to take care of standard configuration registers. > > Switch to generic power management framework using a single > "struct dev_pm_ops" variable to take the unnecessary load from the driver. > This also avoids the need for the driver to directly call most of the PCI > helper functions and device power state control functions as through > the generic framework, PCI Core takes care of the necessary operations, > and drivers are required to do only device-specific jobs. > > Signed-off-by: Vaibhav Gupta <vaibhavgupta40@xxxxxxxxx> > --- > drivers/crypto/ccp/ccp-dev.c | 8 +++----- > drivers/crypto/ccp/sp-dev.c | 6 ++---- > drivers/crypto/ccp/sp-dev.h | 6 +++--- > drivers/crypto/ccp/sp-pci.c | 17 ++++++----------- > drivers/crypto/ccp/sp-platform.c | 2 +- > 5 files changed, 15 insertions(+), 24 deletions(-) > > diff --git a/drivers/crypto/ccp/ccp-dev.c b/drivers/crypto/ccp/ccp-dev.c > index 19ac509ed76e..8ae26d3cffff 100644 > --- a/drivers/crypto/ccp/ccp-dev.c > +++ b/drivers/crypto/ccp/ccp-dev.c > @@ -531,8 +531,7 @@ int ccp_trng_read(struct hwrng *rng, void *data, size_t max, bool wait) > return len; > } > > -#ifdef CONFIG_PM > -bool ccp_queues_suspended(struct ccp_device *ccp) > +bool __maybe_unused ccp_queues_suspended(struct ccp_device *ccp) These aren't static functions, so is the __maybe_unused necessary? (Same comment on the other non-static functions changed below) > { > unsigned int suspended = 0; > unsigned long flags; > @@ -549,7 +548,7 @@ bool ccp_queues_suspended(struct ccp_device *ccp) > return ccp->cmd_q_count == suspended; > } > > -int ccp_dev_suspend(struct sp_device *sp, pm_message_t state) > +int __maybe_unused ccp_dev_suspend(struct sp_device *sp) > { > struct ccp_device *ccp = sp->ccp_data; > unsigned long flags; > @@ -577,7 +576,7 @@ int ccp_dev_suspend(struct sp_device *sp, pm_message_t state) > return 0; > } > > -int ccp_dev_resume(struct sp_device *sp) > +int __maybe_unused ccp_dev_resume(struct sp_device *sp) > { > struct ccp_device *ccp = sp->ccp_data; > unsigned long flags; > @@ -601,7 +600,6 @@ int ccp_dev_resume(struct sp_device *sp) > > return 0; > } > -#endif > > int ccp_dev_init(struct sp_device *sp) > { > diff --git a/drivers/crypto/ccp/sp-dev.c b/drivers/crypto/ccp/sp-dev.c > index ce42675d3274..6284a15e5047 100644 > --- a/drivers/crypto/ccp/sp-dev.c > +++ b/drivers/crypto/ccp/sp-dev.c > @@ -211,13 +211,12 @@ void sp_destroy(struct sp_device *sp) > sp_del_device(sp); > } > > -#ifdef CONFIG_PM > -int sp_suspend(struct sp_device *sp, pm_message_t state) > +int sp_suspend(struct sp_device *sp) > { > int ret; > > if (sp->dev_vdata->ccp_vdata) { > - ret = ccp_dev_suspend(sp, state); > + ret = ccp_dev_suspend(sp); > if (ret) > return ret; > } > @@ -237,7 +236,6 @@ int sp_resume(struct sp_device *sp) > > return 0; > } > -#endif > > struct sp_device *sp_get_psp_master_device(void) > { > diff --git a/drivers/crypto/ccp/sp-dev.h b/drivers/crypto/ccp/sp-dev.h > index f913f1494af9..0218d0670eee 100644 > --- a/drivers/crypto/ccp/sp-dev.h > +++ b/drivers/crypto/ccp/sp-dev.h > @@ -119,7 +119,7 @@ int sp_init(struct sp_device *sp); > void sp_destroy(struct sp_device *sp); > struct sp_device *sp_get_master(void); > > -int sp_suspend(struct sp_device *sp, pm_message_t state); > +int sp_suspend(struct sp_device *sp); > int sp_resume(struct sp_device *sp); > int sp_request_ccp_irq(struct sp_device *sp, irq_handler_t handler, > const char *name, void *data); > @@ -134,7 +134,7 @@ struct sp_device *sp_get_psp_master_device(void); > int ccp_dev_init(struct sp_device *sp); > void ccp_dev_destroy(struct sp_device *sp); > > -int ccp_dev_suspend(struct sp_device *sp, pm_message_t state); > +int ccp_dev_suspend(struct sp_device *sp); > int ccp_dev_resume(struct sp_device *sp); > > #else /* !CONFIG_CRYPTO_DEV_SP_CCP */ > @@ -145,7 +145,7 @@ static inline int ccp_dev_init(struct sp_device *sp) > } > static inline void ccp_dev_destroy(struct sp_device *sp) { } > > -static inline int ccp_dev_suspend(struct sp_device *sp, pm_message_t state) > +static inline int ccp_dev_suspend(struct sp_device *sp) > { > return 0; > } > diff --git a/drivers/crypto/ccp/sp-pci.c b/drivers/crypto/ccp/sp-pci.c > index cb6cb47053f4..f471dbaef1fb 100644 > --- a/drivers/crypto/ccp/sp-pci.c > +++ b/drivers/crypto/ccp/sp-pci.c > @@ -252,23 +252,19 @@ static void sp_pci_remove(struct pci_dev *pdev) > sp_free_irqs(sp); > } > > -#ifdef CONFIG_PM > -static int sp_pci_suspend(struct pci_dev *pdev, pm_message_t state) > +static int __maybe_unused sp_pci_suspend(struct device *dev) > { > - struct device *dev = &pdev->dev; > struct sp_device *sp = dev_get_drvdata(dev); > > - return sp_suspend(sp, state); > + return sp_suspend(sp); > } > > -static int sp_pci_resume(struct pci_dev *pdev) > +static int __maybe_unused sp_pci_resume(struct device *dev) > { > - struct device *dev = &pdev->dev; > struct sp_device *sp = dev_get_drvdata(dev); > > return sp_resume(sp); > } > -#endif > > #ifdef CONFIG_CRYPTO_DEV_SP_PSP > static const struct sev_vdata sevv1 = { > @@ -365,15 +361,14 @@ static const struct pci_device_id sp_pci_table[] = { > }; > MODULE_DEVICE_TABLE(pci, sp_pci_table); > > +static SIMPLE_DEV_PM_OPS(sp_pci_pm_ops, sp_pci_suspend, sp_pci_resume); > + > static struct pci_driver sp_pci_driver = { > .name = "ccp", > .id_table = sp_pci_table, > .probe = sp_pci_probe, > .remove = sp_pci_remove, > -#ifdef CONFIG_PM > - .suspend = sp_pci_suspend, > - .resume = sp_pci_resume, > -#endif > + .driver.pm = &sp_pci_pm_ops, > }; > > int sp_pci_init(void) > diff --git a/drivers/crypto/ccp/sp-platform.c b/drivers/crypto/ccp/sp-platform.c > index 831aac1393a2..9dba52fbee99 100644 > --- a/drivers/crypto/ccp/sp-platform.c > +++ b/drivers/crypto/ccp/sp-platform.c This file use the same "#ifdef CONFIG_PM" to define the suspend and resume functions (see sp_platform_driver variable). Doesn't that need to be updated similar to sp-pci.c? Not sure how this compile tested successfully unless your kernel config didn't have CONFIG_PM defined? Thanks, Tom > @@ -207,7 +207,7 @@ static int sp_platform_suspend(struct platform_device *pdev, > struct device *dev = &pdev->dev; > struct sp_device *sp = dev_get_drvdata(dev); > > - return sp_suspend(sp, state); > + return sp_suspend(sp); > } > > static int sp_platform_resume(struct platform_device *pdev) >