remoteproc: Make client initialize ops in rproc_subdev
authorBjorn Andersson <bjorn.andersson@linaro.org>
Tue, 26 Jun 2018 12:11:57 +0000 (07:11 -0500)
committerBjorn Andersson <bjorn.andersson@linaro.org>
Tue, 26 Jun 2018 20:53:07 +0000 (13:53 -0700)
In preparation of adding the additional prepare and unprepare operations
make the client responsible for filling out the function pointers of the
rproc_subdev. This makes the arguments to rproc_add_subdev() more
manageable, in particular when some of the functions are left out.

Tested-by: Fabien Dessenne <fabien.dessenne@st.com>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
[elder@linaro.org: added comment about assigning function pointers]
Signed-off-by Alex Elder <elder@linaro.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
drivers/remoteproc/qcom_common.c
drivers/remoteproc/qcom_sysmon.c
drivers/remoteproc/remoteproc_core.c
include/linux/remoteproc.h

index acfc99f..4ae87c5 100644 (file)
@@ -64,7 +64,10 @@ void qcom_add_glink_subdev(struct rproc *rproc, struct qcom_rproc_glink *glink)
                return;
 
        glink->dev = dev;
-       rproc_add_subdev(rproc, &glink->subdev, glink_subdev_probe, glink_subdev_remove);
+       glink->subdev.start = glink_subdev_probe;
+       glink->subdev.stop = glink_subdev_remove;
+
+       rproc_add_subdev(rproc, &glink->subdev);
 }
 EXPORT_SYMBOL_GPL(qcom_add_glink_subdev);
 
@@ -157,7 +160,10 @@ void qcom_add_smd_subdev(struct rproc *rproc, struct qcom_rproc_subdev *smd)
                return;
 
        smd->dev = dev;
-       rproc_add_subdev(rproc, &smd->subdev, smd_subdev_probe, smd_subdev_remove);
+       smd->subdev.start = smd_subdev_probe;
+       smd->subdev.stop = smd_subdev_remove;
+
+       rproc_add_subdev(rproc, &smd->subdev);
 }
 EXPORT_SYMBOL_GPL(qcom_add_smd_subdev);
 
@@ -202,11 +208,6 @@ void qcom_unregister_ssr_notifier(struct notifier_block *nb)
 }
 EXPORT_SYMBOL_GPL(qcom_unregister_ssr_notifier);
 
-static int ssr_notify_start(struct rproc_subdev *subdev)
-{
-       return  0;
-}
-
 static void ssr_notify_stop(struct rproc_subdev *subdev, bool crashed)
 {
        struct qcom_rproc_ssr *ssr = to_ssr_subdev(subdev);
@@ -227,8 +228,9 @@ void qcom_add_ssr_subdev(struct rproc *rproc, struct qcom_rproc_ssr *ssr,
                         const char *ssr_name)
 {
        ssr->name = ssr_name;
+       ssr->subdev.stop = ssr_notify_stop;
 
-       rproc_add_subdev(rproc, &ssr->subdev, ssr_notify_start, ssr_notify_stop);
+       rproc_add_subdev(rproc, &ssr->subdev);
 }
 EXPORT_SYMBOL_GPL(qcom_add_ssr_subdev);
 
index f085545..e976a60 100644 (file)
@@ -469,7 +469,10 @@ struct qcom_sysmon *qcom_add_sysmon_subdev(struct rproc *rproc,
 
        qmi_add_lookup(&sysmon->qmi, 43, 0, 0);
 
-       rproc_add_subdev(rproc, &sysmon->subdev, sysmon_start, sysmon_stop);
+       sysmon->subdev.start = sysmon_start;
+       sysmon->subdev.stop = sysmon_stop;
+
+       rproc_add_subdev(rproc, &sysmon->subdev);
 
        sysmon->nb.notifier_call = sysmon_notify;
        blocking_notifier_chain_register(&sysmon_notifiers, &sysmon->nb);
index 981ae6d..ca39fad 100644 (file)
@@ -399,8 +399,10 @@ static int rproc_handle_vdev(struct rproc *rproc, struct fw_rsc_vdev *rsc,
 
        list_add_tail(&rvdev->node, &rproc->rvdevs);
 
-       rproc_add_subdev(rproc, &rvdev->subdev,
-                        rproc_vdev_do_probe, rproc_vdev_do_remove);
+       rvdev->subdev.start = rproc_vdev_do_probe;
+       rvdev->subdev.stop = rproc_vdev_do_remove;
+
+       rproc_add_subdev(rproc, &rvdev->subdev);
 
        return 0;
 
@@ -1663,17 +1665,11 @@ EXPORT_SYMBOL(rproc_del);
  * rproc_add_subdev() - add a subdevice to a remoteproc
  * @rproc: rproc handle to add the subdevice to
  * @subdev: subdev handle to register
- * @start: function to call after the rproc is started
- * @stop: function to call before the rproc is stopped
+ *
+ * Caller is responsible for populating optional subdevice function pointers.
  */
-void rproc_add_subdev(struct rproc *rproc,
-                     struct rproc_subdev *subdev,
-                     int (*start)(struct rproc_subdev *subdev),
-                     void (*stop)(struct rproc_subdev *subdev, bool crashed))
+void rproc_add_subdev(struct rproc *rproc, struct rproc_subdev *subdev)
 {
-       subdev->start = start;
-       subdev->stop = stop;
-
        list_add_tail(&subdev->node, &rproc->subdevs);
 }
 EXPORT_SYMBOL(rproc_add_subdev);
index bf55bf2..8f14263 100644 (file)
@@ -566,10 +566,7 @@ static inline struct rproc *vdev_to_rproc(struct virtio_device *vdev)
        return rvdev->rproc;
 }
 
-void rproc_add_subdev(struct rproc *rproc,
-                     struct rproc_subdev *subdev,
-                     int (*start)(struct rproc_subdev *subdev),
-                     void (*stop)(struct rproc_subdev *subdev, bool crashed));
+void rproc_add_subdev(struct rproc *rproc, struct rproc_subdev *subdev);
 
 void rproc_remove_subdev(struct rproc *rproc, struct rproc_subdev *subdev);