Commit 4902676f authored by Bjorn Andersson's avatar Bjorn Andersson

remoteproc: Make client initialize ops in rproc_subdev

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: default avatarFabien Dessenne <fabien.dessenne@st.com>
Signed-off-by: default avatarBjorn 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: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
parent be37b1e0
...@@ -64,7 +64,10 @@ void qcom_add_glink_subdev(struct rproc *rproc, struct qcom_rproc_glink *glink) ...@@ -64,7 +64,10 @@ void qcom_add_glink_subdev(struct rproc *rproc, struct qcom_rproc_glink *glink)
return; return;
glink->dev = dev; 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); EXPORT_SYMBOL_GPL(qcom_add_glink_subdev);
...@@ -157,7 +160,10 @@ void qcom_add_smd_subdev(struct rproc *rproc, struct qcom_rproc_subdev *smd) ...@@ -157,7 +160,10 @@ void qcom_add_smd_subdev(struct rproc *rproc, struct qcom_rproc_subdev *smd)
return; return;
smd->dev = dev; 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); EXPORT_SYMBOL_GPL(qcom_add_smd_subdev);
...@@ -202,11 +208,6 @@ void qcom_unregister_ssr_notifier(struct notifier_block *nb) ...@@ -202,11 +208,6 @@ void qcom_unregister_ssr_notifier(struct notifier_block *nb)
} }
EXPORT_SYMBOL_GPL(qcom_unregister_ssr_notifier); 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) static void ssr_notify_stop(struct rproc_subdev *subdev, bool crashed)
{ {
struct qcom_rproc_ssr *ssr = to_ssr_subdev(subdev); 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, ...@@ -227,8 +228,9 @@ void qcom_add_ssr_subdev(struct rproc *rproc, struct qcom_rproc_ssr *ssr,
const char *ssr_name) const char *ssr_name)
{ {
ssr->name = 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); EXPORT_SYMBOL_GPL(qcom_add_ssr_subdev);
......
...@@ -469,7 +469,10 @@ struct qcom_sysmon *qcom_add_sysmon_subdev(struct rproc *rproc, ...@@ -469,7 +469,10 @@ struct qcom_sysmon *qcom_add_sysmon_subdev(struct rproc *rproc,
qmi_add_lookup(&sysmon->qmi, 43, 0, 0); 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; sysmon->nb.notifier_call = sysmon_notify;
blocking_notifier_chain_register(&sysmon_notifiers, &sysmon->nb); blocking_notifier_chain_register(&sysmon_notifiers, &sysmon->nb);
......
...@@ -399,8 +399,10 @@ static int rproc_handle_vdev(struct rproc *rproc, struct fw_rsc_vdev *rsc, ...@@ -399,8 +399,10 @@ static int rproc_handle_vdev(struct rproc *rproc, struct fw_rsc_vdev *rsc,
list_add_tail(&rvdev->node, &rproc->rvdevs); list_add_tail(&rvdev->node, &rproc->rvdevs);
rproc_add_subdev(rproc, &rvdev->subdev, rvdev->subdev.start = rproc_vdev_do_probe;
rproc_vdev_do_probe, rproc_vdev_do_remove); rvdev->subdev.stop = rproc_vdev_do_remove;
rproc_add_subdev(rproc, &rvdev->subdev);
return 0; return 0;
...@@ -1663,17 +1665,11 @@ EXPORT_SYMBOL(rproc_del); ...@@ -1663,17 +1665,11 @@ EXPORT_SYMBOL(rproc_del);
* rproc_add_subdev() - add a subdevice to a remoteproc * rproc_add_subdev() - add a subdevice to a remoteproc
* @rproc: rproc handle to add the subdevice to * @rproc: rproc handle to add the subdevice to
* @subdev: subdev handle to register * @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, void rproc_add_subdev(struct rproc *rproc, struct rproc_subdev *subdev)
struct rproc_subdev *subdev,
int (*start)(struct rproc_subdev *subdev),
void (*stop)(struct rproc_subdev *subdev, bool crashed))
{ {
subdev->start = start;
subdev->stop = stop;
list_add_tail(&subdev->node, &rproc->subdevs); list_add_tail(&subdev->node, &rproc->subdevs);
} }
EXPORT_SYMBOL(rproc_add_subdev); EXPORT_SYMBOL(rproc_add_subdev);
......
...@@ -566,10 +566,7 @@ static inline struct rproc *vdev_to_rproc(struct virtio_device *vdev) ...@@ -566,10 +566,7 @@ static inline struct rproc *vdev_to_rproc(struct virtio_device *vdev)
return rvdev->rproc; return rvdev->rproc;
} }
void rproc_add_subdev(struct rproc *rproc, void rproc_add_subdev(struct rproc *rproc, struct rproc_subdev *subdev);
struct rproc_subdev *subdev,
int (*start)(struct rproc_subdev *subdev),
void (*stop)(struct rproc_subdev *subdev, bool crashed));
void rproc_remove_subdev(struct rproc *rproc, struct rproc_subdev *subdev); void rproc_remove_subdev(struct rproc *rproc, struct rproc_subdev *subdev);
......
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