From: Arnaud Pouliquen <arnaud.pouliquen@st.com>
To: Bjorn Andersson <bjorn.andersson@linaro.org>,
Ohad Ben-Cohen <ohad@wizery.com>,
Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: <linux-remoteproc@vger.kernel.org>,
<linux-kernel@vger.kernel.org>,
<linux-stm32@st-md-mailman.stormreply.com>,
<arnaud.pouliquen@st.com>
Subject: [RFC 12/18] remoteproc: Support of pre-registered virtio device
Date: Thu, 16 Apr 2020 18:13:25 +0200 [thread overview]
Message-ID: <20200416161331.7606-13-arnaud.pouliquen@st.com> (raw)
In-Reply-To: <20200416161331.7606-1-arnaud.pouliquen@st.com>
Management of the virtio device declared in the devicetree as
a sub device of the remoteproc.
Instead of creating a new platform device, we parse first the
rvdevs list to look for a pre-registered rvdev with an index, that
matches with the vdev instance of the resource table.
If no pre-registered vdev is found a new platform device is created.
Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@st.com>
---
drivers/remoteproc/remoteproc_core.c | 51 +++++++++++++++++-----------
1 file changed, 32 insertions(+), 19 deletions(-)
diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
index ecb36f64b1a0..9238aa292644 100644
--- a/drivers/remoteproc/remoteproc_core.c
+++ b/drivers/remoteproc/remoteproc_core.c
@@ -383,8 +383,8 @@ static int rproc_handle_vdev(struct rproc *rproc, struct fw_rsc_vdev *rsc,
{
struct device *dev = &rproc->dev;
struct rproc_vdev_data vdev_data;
+ struct rproc_vdev *rvdev = NULL, *tmp_rvdev;
struct platform_device *pdev;
- int ret;
/* make sure resource isn't truncated */
if (struct_size(rsc, vring, rsc->num_of_vrings) + rsc->config_len >
@@ -399,27 +399,40 @@ static int rproc_handle_vdev(struct rproc *rproc, struct fw_rsc_vdev *rsc,
return -EINVAL;
}
- vdev_data.rsc_offset = offset;
- vdev_data.rsc = rsc;
- vdev_data.id = rsc->id;
- vdev_data.index = rproc->nb_vdev;
+ /* Try to find a pre-registered rproc virtio device */
+ list_for_each_entry(tmp_rvdev, &rproc->rvdevs, node) {
+ if (tmp_rvdev->index == rproc->nb_vdev) {
+ rvdev = tmp_rvdev;
+ break;
+ }
+ }
- dev_dbg(dev, "%s: rsc_offset = %d rsc = %p id = %d\n",
- __func__, vdev_data.rsc_offset, vdev_data.rsc, vdev_data.id);
+ if (rvdev) {
+ /* assign the resource offset */
+ rvdev->rsc_offset = offset;
+ rvdev->rsc = rsc;
+ rvdev->id = rsc->id;
- pdev = platform_device_register_data(dev, "rproc-virtio",
- rproc->nb_vdev, &vdev_data,
- sizeof(vdev_data));
- ret = PTR_ERR_OR_ZERO(pdev);
- if (ret) {
- dev_err(rproc->dev.parent,
- "failed to create rproc-virtio device\n");
- return ret;
+ } else {
+ /* no rproc vdev found, register one */
+ vdev_data.rsc_offset = offset;
+ vdev_data.rsc = rsc;
+ vdev_data.id = rsc->id;
+ vdev_data.index = rproc->nb_vdev;
+
+ pdev = platform_device_register_data(dev, "rproc-virtio",
+ rproc->nb_vdev, &vdev_data,
+ sizeof(vdev_data));
+ if (PTR_ERR_OR_ZERO(pdev)) {
+ dev_err(rproc->dev.parent,
+ "failed to create rproc-virtio device\n");
+ return PTR_ERR_OR_ZERO(pdev);
+ }
+ /* register a component associated to the virtio platform */
+ component_match_add_release(&pdev->dev, &rproc->match,
+ rproc_release_of, rproc_compare_of,
+ &pdev->dev);
}
- /* register a component associated to the virtio platform */
- component_match_add_release(&pdev->dev, &rproc->match,
- rproc_release_of, rproc_compare_of,
- &pdev->dev);
rproc->nb_vdev++;
return 0;
--
2.17.1
next prev parent reply other threads:[~2020-04-16 16:14 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-16 16:13 [RFC 00/18] remoteproc: Decorelate virtio from core Arnaud Pouliquen
2020-04-16 16:13 ` [RFC 01/18] remoteproc: Store resource table address in rvdev Arnaud Pouliquen
2020-04-16 16:13 ` [RFC 02/18] remoteproc: Introduce virtio device add/remove functions in core Arnaud Pouliquen
2020-04-21 20:41 ` Mathieu Poirier
2020-04-22 12:30 ` Arnaud POULIQUEN
2020-04-22 16:57 ` Mathieu Poirier
2020-04-16 16:13 ` [RFC 03/18] remoteproc: Move rvdev management in rproc_virtio Arnaud Pouliquen
2020-04-21 22:18 ` Mathieu Poirier
2020-04-22 17:26 ` Mathieu Poirier
2020-04-16 16:13 ` [RFC 04/18] remoteproc: Add rproc_get_by_node helper Arnaud Pouliquen
2020-04-16 16:13 ` [RFC 05/18] remoteproc: Create platform device for vdev Arnaud Pouliquen
2020-04-16 16:13 ` [RFC 06/18] remoteproc: Add component in core for child devices synchronization Arnaud Pouliquen
2020-04-16 16:13 ` [RFC 07/18] remoteproc: Add component bind/unbind for virtio platform Arnaud Pouliquen
2020-04-16 16:13 ` [RFC 08/18] remoteproc: Externalize carveout functions Arnaud Pouliquen
2020-04-16 16:13 ` [RFC 09/18] remoteproc: Move vring management from core to virtio Arnaud Pouliquen
2020-04-16 16:13 ` [RFC 10/18] remoteproc: Add capability to populate rproc subnode devices Arnaud Pouliquen
2020-04-16 16:13 ` [RFC 11/18] remoteproc: Add child node component in rproc match list Arnaud Pouliquen
2020-04-16 16:13 ` Arnaud Pouliquen [this message]
2020-04-16 16:13 ` [RFC 13/18] remoteproc: Add memory default allocator helper Arnaud Pouliquen
2020-04-16 16:13 ` [RFC 14/18] remoteproc: Add pa to da translation API Arnaud Pouliquen
2020-04-16 16:13 ` [RFC 15/18] remoteproc: associate memory entry to a device Arnaud Pouliquen
2020-04-16 16:13 ` [RFC 16/18] remoteproc: Parse virtio node for memory region Arnaud Pouliquen
2020-04-16 16:13 ` [RFC 17/18] remoteproc: stm32: Add the pa to da ops Arnaud Pouliquen
2020-04-16 16:13 ` [RFC 18/18] ARM: dts: stm32: Declare a virtio device Arnaud Pouliquen
2020-04-23 17:26 ` [RFC 00/18] remoteproc: Decorelate virtio from core Mathieu Poirier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200416161331.7606-13-arnaud.pouliquen@st.com \
--to=arnaud.pouliquen@st.com \
--cc=bjorn.andersson@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-remoteproc@vger.kernel.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=mathieu.poirier@linaro.org \
--cc=ohad@wizery.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).