Message ID | 20250606105808.2119280-1-quic_utiwari@quicinc.com |
---|---|
State | New |
Headers | show |
Series | crypto: qce - Add suspend and resume support | expand |
On Fri, Jun 06, 2025 at 04:28:08PM +0530, quic_utiwari@quicinc.com wrote: > From: Udit Tiwari <quic_utiwari@quicinc.com> > > Add basic suspend and resume callbacks to the QCE platform driver to > manage interconnect bandwidth during system sleep and wake-up cycles. > > Signed-off-by: Udit Tiwari <quic_utiwari@quicinc.com> Can you add runtime PM support instead, so we can also reduce the bandwidth/power consumption at runtime when QCE is not used? Also, what about the clocks? They should also be disabled, not just the bandwidth. Thanks, Stephan > --- > drivers/crypto/qce/core.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/drivers/crypto/qce/core.c b/drivers/crypto/qce/core.c > index e95e84486d9a..2566bdad5d4a 100644 > --- a/drivers/crypto/qce/core.c > +++ b/drivers/crypto/qce/core.c > @@ -249,6 +249,21 @@ static int qce_crypto_probe(struct platform_device *pdev) > return devm_qce_register_algs(qce); > } > > +static int qce_crypto_suspend(struct platform_device *pdev, pm_message_t state) > +{ > + struct qce_device *qce = platform_get_drvdata(pdev); > + > + return icc_set_bw(qce->mem_path, 0, 0); > +} > + > +static int qce_crypto_resume(struct platform_device *pdev) > +{ > + struct qce_device *qce = platform_get_drvdata(pdev); > + > + return icc_set_bw(qce->mem_path, QCE_DEFAULT_MEM_BANDWIDTH, > + QCE_DEFAULT_MEM_BANDWIDTH); > +} > + > static const struct of_device_id qce_crypto_of_match[] = { > { .compatible = "qcom,crypto-v5.1", }, > { .compatible = "qcom,crypto-v5.4", }, > @@ -259,6 +274,8 @@ MODULE_DEVICE_TABLE(of, qce_crypto_of_match); > > static struct platform_driver qce_crypto_driver = { > .probe = qce_crypto_probe, > + .suspend = qce_crypto_suspend, > + .resume = qce_crypto_resume, > .driver = { > .name = KBUILD_MODNAME, > .of_match_table = qce_crypto_of_match, > -- > 2.34.1 >
On Fri, Jun 06, 2025 at 04:28:08PM +0530, quic_utiwari@quicinc.com wrote: > From: Udit Tiwari <quic_utiwari@quicinc.com> > > Add basic suspend and resume callbacks to the QCE platform driver to > manage interconnect bandwidth during system sleep and wake-up cycles. Please follow https://docs.kernel.org/process/submitting-patches.html#describe-your-changes and start your commit message with a problem description. Why do we want to "manage interconnect bandwidth"? > > Signed-off-by: Udit Tiwari <quic_utiwari@quicinc.com> > --- > drivers/crypto/qce/core.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/drivers/crypto/qce/core.c b/drivers/crypto/qce/core.c > index e95e84486d9a..2566bdad5d4a 100644 > --- a/drivers/crypto/qce/core.c > +++ b/drivers/crypto/qce/core.c > @@ -249,6 +249,21 @@ static int qce_crypto_probe(struct platform_device *pdev) > return devm_qce_register_algs(qce); > } > > +static int qce_crypto_suspend(struct platform_device *pdev, pm_message_t state) > +{ > + struct qce_device *qce = platform_get_drvdata(pdev); > + > + return icc_set_bw(qce->mem_path, 0, 0); Couldn't you be using icc_disable(); here? > +} > + > +static int qce_crypto_resume(struct platform_device *pdev) > +{ > + struct qce_device *qce = platform_get_drvdata(pdev); > + > + return icc_set_bw(qce->mem_path, QCE_DEFAULT_MEM_BANDWIDTH, > + QCE_DEFAULT_MEM_BANDWIDTH); icc_enable(); That said, as already requested, please also drop these votes at runtime when the block is unused. > +} > + > static const struct of_device_id qce_crypto_of_match[] = { > { .compatible = "qcom,crypto-v5.1", }, > { .compatible = "qcom,crypto-v5.4", }, > @@ -259,6 +274,8 @@ MODULE_DEVICE_TABLE(of, qce_crypto_of_match); > > static struct platform_driver qce_crypto_driver = { > .probe = qce_crypto_probe, > + .suspend = qce_crypto_suspend, > + .resume = qce_crypto_resume, Please implement .driver.pm instead. Regards, Bjorn > .driver = { > .name = KBUILD_MODNAME, > .of_match_table = qce_crypto_of_match, > -- > 2.34.1 >
diff --git a/drivers/crypto/qce/core.c b/drivers/crypto/qce/core.c index e95e84486d9a..2566bdad5d4a 100644 --- a/drivers/crypto/qce/core.c +++ b/drivers/crypto/qce/core.c @@ -249,6 +249,21 @@ static int qce_crypto_probe(struct platform_device *pdev) return devm_qce_register_algs(qce); } +static int qce_crypto_suspend(struct platform_device *pdev, pm_message_t state) +{ + struct qce_device *qce = platform_get_drvdata(pdev); + + return icc_set_bw(qce->mem_path, 0, 0); +} + +static int qce_crypto_resume(struct platform_device *pdev) +{ + struct qce_device *qce = platform_get_drvdata(pdev); + + return icc_set_bw(qce->mem_path, QCE_DEFAULT_MEM_BANDWIDTH, + QCE_DEFAULT_MEM_BANDWIDTH); +} + static const struct of_device_id qce_crypto_of_match[] = { { .compatible = "qcom,crypto-v5.1", }, { .compatible = "qcom,crypto-v5.4", }, @@ -259,6 +274,8 @@ MODULE_DEVICE_TABLE(of, qce_crypto_of_match); static struct platform_driver qce_crypto_driver = { .probe = qce_crypto_probe, + .suspend = qce_crypto_suspend, + .resume = qce_crypto_resume, .driver = { .name = KBUILD_MODNAME, .of_match_table = qce_crypto_of_match,