[PATCH 2/2] remoteproc: k3: Abstract ti_sci_handle's dev_ops calls through pm_runtime
From: Siddharth Karanam
Date: Tue Sep 22 2026 - 15:15:54 EST
Instead of directly invoking ti_sci_handle->dev_ops.get_device /
put_device (that is direct firmware logic), it is better to abstract it
through linux/pm_runtime.h's pm_runtime_put/get_sync which will call
the vendor's specific firmware logic automatically. The rationale here
being better code quality and reduced scope for refactoring in case of
any changes to the ti_sci protocol.
Signed-off-by: Siddharth Karanam <sid9.karanam@xxxxxxxxx>
---
drivers/remoteproc/ti_sci_dev.h | 23 +++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/drivers/remoteproc/ti_sci_dev.h b/drivers/remoteproc/ti_sci_dev.h
index 897998a97d7f..ec17af3ebf5e 100644
--- a/drivers/remoteproc/ti_sci_dev.h
+++ b/drivers/remoteproc/ti_sci_dev.h
@@ -59,23 +59,30 @@ static inline int ti_sci_dev_is_on(struct ti_sci_dev *tsd, bool *r_state,
return ret;
}
+/* Request power on to rproc through the TI-SCI PM domain */
static inline int ti_sci_dev_get_device(struct ti_sci_dev *tsd)
{
- int ret;
+ int ret = 0;
+
+ ret = pm_runtime_get_sync(tsd->dev);
+ if (ret < 0) {
+ dev_err(tsd->dev, "pm_runtime_get_sync failed, ret = %d\n", ret);
+ pm_runtime_put_noidle(tsd->dev);
+ }
- ret = tsd->ops->get_device(tsd->sci, tsd->dev_id);
- if (ret)
- dev_err(tsd->dev, "ti-sci device get failed: %d\n", ret);
return ret;
}
+/* Request power off to a rproc through the TI-SCI PM domain */
static inline int ti_sci_dev_put_device(struct ti_sci_dev *tsd)
{
- int ret;
+ int ret = 0;
+
+ ret = pm_runtime_put_sync(tsd->dev);
+
+ if (ret < 0)
+ dev_err(tsd->dev, "pm_runtime_put_sync failed, ret = %d\n", ret);
- ret = tsd->ops->put_device(tsd->sci, tsd->dev_id);
- if (ret)
- dev_err(tsd->dev, "ti-sci device put failed: %d\n", ret);
return ret;
}
--
2.55.0