Commit f892a21f authored by Vaibhav Gupta's avatar Vaibhav Gupta Committed by Herbert Xu

crypto: ccp - use generic power management

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: default avatarVaibhav Gupta <vaibhavgupta40@gmail.com>
Acked-by: default avatarJohn Allen <john.allen@amd.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 958ea4e0
...@@ -531,7 +531,6 @@ int ccp_trng_read(struct hwrng *rng, void *data, size_t max, bool wait) ...@@ -531,7 +531,6 @@ int ccp_trng_read(struct hwrng *rng, void *data, size_t max, bool wait)
return len; return len;
} }
#ifdef CONFIG_PM
bool ccp_queues_suspended(struct ccp_device *ccp) bool ccp_queues_suspended(struct ccp_device *ccp)
{ {
unsigned int suspended = 0; unsigned int suspended = 0;
...@@ -549,7 +548,7 @@ bool ccp_queues_suspended(struct ccp_device *ccp) ...@@ -549,7 +548,7 @@ bool ccp_queues_suspended(struct ccp_device *ccp)
return ccp->cmd_q_count == suspended; return ccp->cmd_q_count == suspended;
} }
int ccp_dev_suspend(struct sp_device *sp, pm_message_t state) int ccp_dev_suspend(struct sp_device *sp)
{ {
struct ccp_device *ccp = sp->ccp_data; struct ccp_device *ccp = sp->ccp_data;
unsigned long flags; unsigned long flags;
...@@ -601,7 +600,6 @@ int ccp_dev_resume(struct sp_device *sp) ...@@ -601,7 +600,6 @@ int ccp_dev_resume(struct sp_device *sp)
return 0; return 0;
} }
#endif
int ccp_dev_init(struct sp_device *sp) int ccp_dev_init(struct sp_device *sp)
{ {
......
...@@ -211,13 +211,12 @@ void sp_destroy(struct sp_device *sp) ...@@ -211,13 +211,12 @@ void sp_destroy(struct sp_device *sp)
sp_del_device(sp); sp_del_device(sp);
} }
#ifdef CONFIG_PM int sp_suspend(struct sp_device *sp)
int sp_suspend(struct sp_device *sp, pm_message_t state)
{ {
int ret; int ret;
if (sp->dev_vdata->ccp_vdata) { if (sp->dev_vdata->ccp_vdata) {
ret = ccp_dev_suspend(sp, state); ret = ccp_dev_suspend(sp);
if (ret) if (ret)
return ret; return ret;
} }
...@@ -237,7 +236,6 @@ int sp_resume(struct sp_device *sp) ...@@ -237,7 +236,6 @@ int sp_resume(struct sp_device *sp)
return 0; return 0;
} }
#endif
struct sp_device *sp_get_psp_master_device(void) struct sp_device *sp_get_psp_master_device(void)
{ {
......
...@@ -119,7 +119,7 @@ int sp_init(struct sp_device *sp); ...@@ -119,7 +119,7 @@ int sp_init(struct sp_device *sp);
void sp_destroy(struct sp_device *sp); void sp_destroy(struct sp_device *sp);
struct sp_device *sp_get_master(void); 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_resume(struct sp_device *sp);
int sp_request_ccp_irq(struct sp_device *sp, irq_handler_t handler, int sp_request_ccp_irq(struct sp_device *sp, irq_handler_t handler,
const char *name, void *data); const char *name, void *data);
...@@ -134,7 +134,7 @@ struct sp_device *sp_get_psp_master_device(void); ...@@ -134,7 +134,7 @@ struct sp_device *sp_get_psp_master_device(void);
int ccp_dev_init(struct sp_device *sp); int ccp_dev_init(struct sp_device *sp);
void ccp_dev_destroy(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); int ccp_dev_resume(struct sp_device *sp);
#else /* !CONFIG_CRYPTO_DEV_SP_CCP */ #else /* !CONFIG_CRYPTO_DEV_SP_CCP */
...@@ -145,7 +145,7 @@ static inline int ccp_dev_init(struct sp_device *sp) ...@@ -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 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; return 0;
} }
......
...@@ -252,23 +252,19 @@ static void sp_pci_remove(struct pci_dev *pdev) ...@@ -252,23 +252,19 @@ static void sp_pci_remove(struct pci_dev *pdev)
sp_free_irqs(sp); sp_free_irqs(sp);
} }
#ifdef CONFIG_PM static int __maybe_unused sp_pci_suspend(struct device *dev)
static int sp_pci_suspend(struct pci_dev *pdev, pm_message_t state)
{ {
struct device *dev = &pdev->dev;
struct sp_device *sp = dev_get_drvdata(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); struct sp_device *sp = dev_get_drvdata(dev);
return sp_resume(sp); return sp_resume(sp);
} }
#endif
#ifdef CONFIG_CRYPTO_DEV_SP_PSP #ifdef CONFIG_CRYPTO_DEV_SP_PSP
static const struct sev_vdata sevv1 = { static const struct sev_vdata sevv1 = {
...@@ -365,15 +361,14 @@ static const struct pci_device_id sp_pci_table[] = { ...@@ -365,15 +361,14 @@ static const struct pci_device_id sp_pci_table[] = {
}; };
MODULE_DEVICE_TABLE(pci, 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 = { static struct pci_driver sp_pci_driver = {
.name = "ccp", .name = "ccp",
.id_table = sp_pci_table, .id_table = sp_pci_table,
.probe = sp_pci_probe, .probe = sp_pci_probe,
.remove = sp_pci_remove, .remove = sp_pci_remove,
#ifdef CONFIG_PM .driver.pm = &sp_pci_pm_ops,
.suspend = sp_pci_suspend,
.resume = sp_pci_resume,
#endif
}; };
int sp_pci_init(void) int sp_pci_init(void)
......
...@@ -207,7 +207,7 @@ static int sp_platform_suspend(struct platform_device *pdev, ...@@ -207,7 +207,7 @@ static int sp_platform_suspend(struct platform_device *pdev,
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct sp_device *sp = dev_get_drvdata(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) static int sp_platform_resume(struct platform_device *pdev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment