You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2022/08/02 17:23:04 UTC
[incubator-nuttx] 07/07: rptun: update rptun to openamp 2022.04.0
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 8c1fd1df817b7edd6fb7d529e90526da1bf66952
Author: ligd <li...@xiaomi.com>
AuthorDate: Thu Jul 21 22:26:51 2022 +0800
rptun: update rptun to openamp 2022.04.0
Signed-off-by: ligd <li...@xiaomi.com>
---
arch/risc-v/src/mpfs/mpfs_ihc.c | 4 +--
arch/sim/src/sim/up_rptun.c | 4 +--
drivers/rptun/rptun.c | 59 +++++++++++++++++++++++------------------
drivers/rptun/rptun_dump.c | 4 +--
4 files changed, 39 insertions(+), 32 deletions(-)
diff --git a/arch/risc-v/src/mpfs/mpfs_ihc.c b/arch/risc-v/src/mpfs/mpfs_ihc.c
index c8d3f08240..ac6bc15f00 100755
--- a/arch/risc-v/src/mpfs/mpfs_ihc.c
+++ b/arch/risc-v/src/mpfs/mpfs_ihc.c
@@ -958,8 +958,8 @@ mpfs_rptun_get_resource(struct rptun_dev_s *dev)
rsc->rpmsg_vring1.num = VRING_NR;
rsc->rpmsg_vring1.da = VRING1_DESCRIPTORS;
rsc->rpmsg_vring0.notifyid = 1;
- rsc->config.rxbuf_size = VRING_SIZE;
- rsc->config.txbuf_size = VRING_SIZE;
+ rsc->config.r2h_buf_size = VRING_SIZE;
+ rsc->config.h2r_buf_size = VRING_SIZE;
}
/* It might be tempting to set this at mpfs_rptun_start(), but it's only
diff --git a/arch/sim/src/sim/up_rptun.c b/arch/sim/src/sim/up_rptun.c
index 59209b6725..d5a7452426 100644
--- a/arch/sim/src/sim/up_rptun.c
+++ b/arch/sim/src/sim/up_rptun.c
@@ -117,8 +117,8 @@ sim_rptun_get_resource(struct rptun_dev_s *dev)
rsc->rpmsg_vring0.num = 8;
rsc->rpmsg_vring1.align = 8;
rsc->rpmsg_vring1.num = 8;
- rsc->config.rxbuf_size = 0x800;
- rsc->config.txbuf_size = 0x800;
+ rsc->config.r2h_buf_size = 0x800;
+ rsc->config.h2r_buf_size = 0x800;
priv->shmem->base = (uintptr_t)priv->shmem;
}
diff --git a/drivers/rptun/rptun.c b/drivers/rptun/rptun.c
index 61fc4782ad..4be04cd7ff 100644
--- a/drivers/rptun/rptun.c
+++ b/drivers/rptun/rptun.c
@@ -65,8 +65,7 @@ struct rptun_priv_s
FAR struct rptun_dev_s *dev;
struct remoteproc rproc;
struct rpmsg_virtio_device rvdev;
- struct rpmsg_virtio_shm_pool pooltx;
- struct rpmsg_virtio_shm_pool poolrx;
+ struct rpmsg_virtio_shm_pool pool[2];
struct metal_list bind;
rmutex_t lock;
struct metal_list node;
@@ -128,7 +127,7 @@ rptun_get_mem(FAR struct remoteproc *rproc,
metal_phys_addr_t da,
FAR void *va, size_t size,
FAR struct remoteproc_mem *buf);
-static int rptun_wait_tx(FAR struct remoteproc *rproc);
+static int rptun_notify_wait(FAR struct remoteproc *rproc, uint32_t id);
static void rptun_ns_bind(FAR struct rpmsg_device *rdev,
FAR const char *name, uint32_t dest);
@@ -160,14 +159,14 @@ static metal_phys_addr_t rptun_da_to_pa(FAR struct rptun_dev_s *dev,
static const struct remoteproc_ops g_rptun_ops =
{
- .init = rptun_init,
- .remove = rptun_remove,
- .config = rptun_config,
- .start = rptun_start,
- .stop = rptun_stop,
- .notify = rptun_notify,
- .get_mem = rptun_get_mem,
- .wait_tx_buffer = rptun_wait_tx,
+ .init = rptun_init,
+ .remove = rptun_remove,
+ .config = rptun_config,
+ .start = rptun_start,
+ .stop = rptun_stop,
+ .notify = rptun_notify,
+ .get_mem = rptun_get_mem,
+ .notify_wait = rptun_notify_wait,
};
static const struct file_operations g_rptun_devops =
@@ -446,7 +445,7 @@ rptun_get_mem(FAR struct remoteproc *rproc,
return buf;
}
-static int rptun_wait_tx(FAR struct remoteproc *rproc)
+static int rptun_notify_wait(FAR struct remoteproc *rproc, uint32_t id)
{
FAR struct rptun_priv_s *priv = rproc->priv;
@@ -656,27 +655,27 @@ static int rptun_dev_start(FAR struct remoteproc *rproc)
rsc->rpmsg_vring1.da = da1;
shbuf = (FAR char *)rsc + tbsz + v0sz + v1sz;
- shbufsz = rsc->config.txbuf_size * rsc->rpmsg_vring0.num +
- rsc->config.rxbuf_size * rsc->rpmsg_vring1.num;
+ shbufsz = rsc->config.r2h_buf_size * rsc->rpmsg_vring0.num +
+ rsc->config.h2r_buf_size * rsc->rpmsg_vring1.num;
- rpmsg_virtio_init_shm_pool(&priv->pooltx, shbuf, shbufsz);
+ rpmsg_virtio_init_shm_pool(priv->pool, shbuf, shbufsz);
}
else
{
da0 = rsc->rpmsg_vring0.da;
shbuf = (FAR char *)remoteproc_mmap(rproc, NULL, &da0,
v0sz, 0, NULL) + v0sz;
- shbufsz = rsc->config.rxbuf_size * rsc->rpmsg_vring0.num;
- rpmsg_virtio_init_shm_pool(&priv->poolrx, shbuf, shbufsz);
+ shbufsz = rsc->config.r2h_buf_size * rsc->rpmsg_vring0.num;
+ rpmsg_virtio_init_shm_pool(&priv->pool[0], shbuf, shbufsz);
da1 = rsc->rpmsg_vring1.da;
shbuf = (FAR char *)remoteproc_mmap(rproc, NULL, &da1,
v1sz, 0, NULL) + v1sz;
- shbufsz = rsc->config.txbuf_size * rsc->rpmsg_vring1.num;
- rpmsg_virtio_init_shm_pool(&priv->pooltx, shbuf, shbufsz);
+ shbufsz = rsc->config.h2r_buf_size * rsc->rpmsg_vring1.num;
+ rpmsg_virtio_init_shm_pool(&priv->pool[1], shbuf, shbufsz);
}
- role = RPMSG_MASTER;
+ role = RPMSG_HOST;
}
/* Remote proc create */
@@ -687,16 +686,24 @@ static int rptun_dev_start(FAR struct remoteproc *rproc)
return -ENOMEM;
}
- if (priv->poolrx.base)
+ if (priv->pool[1].base)
{
- ret = rpmsg_init_vdev_ext(&priv->rvdev, vdev, rptun_ns_bind,
- metal_io_get_region(),
- &priv->pooltx, &priv->poolrx);
+ struct rpmsg_virtio_config config =
+ {
+ RPMSG_BUFFER_SIZE,
+ RPMSG_BUFFER_SIZE,
+ true,
+ };
+
+ ret = rpmsg_init_vdev_with_config(&priv->rvdev, vdev, rptun_ns_bind,
+ metal_io_get_region(),
+ priv->pool,
+ &config);
}
else
{
ret = rpmsg_init_vdev(&priv->rvdev, vdev, rptun_ns_bind,
- metal_io_get_region(), &priv->pooltx);
+ metal_io_get_region(), priv->pool);
}
if (ret)
@@ -1264,7 +1271,7 @@ int rptun_buffer_nused(FAR struct rpmsg_virtio_device *rvdev, bool rx)
FAR struct virtqueue *vq = rx ? rvdev->rvq : rvdev->svq;
uint16_t nused = vq->vq_ring.avail->idx - vq->vq_ring.used->idx;
- if ((rpmsg_virtio_get_role(rvdev) == RPMSG_MASTER) ^ rx)
+ if ((rpmsg_virtio_get_role(rvdev) == RPMSG_HOST) ^ rx)
{
return nused;
}
diff --git a/drivers/rptun/rptun_dump.c b/drivers/rptun/rptun_dump.c
index aee87fb41c..c490603483 100644
--- a/drivers/rptun/rptun_dump.c
+++ b/drivers/rptun/rptun_dump.c
@@ -65,7 +65,7 @@ static void rptun_dump_buffer(FAR struct rpmsg_virtio_device *rvdev,
for (i = 0; i < num; i++)
{
- if ((rpmsg_virtio_get_role(rvdev) == RPMSG_MASTER) ^ rx)
+ if ((rpmsg_virtio_get_role(rvdev) == RPMSG_HOST) ^ rx)
{
desc_idx = (vq->vq_ring.used->idx + i) & (vq->vq_nentries - 1);
desc_idx = vq->vq_ring.avail->ring[desc_idx];
@@ -107,7 +107,7 @@ void rptun_dump(FAR struct rpmsg_virtio_device *rvdev)
metal_log(METAL_LOG_EMERGENCY,
"Dump rpmsg info between cpu (master: %s)%s <==> %s:\n",
- rpmsg_virtio_get_role(rvdev) == RPMSG_MASTER ? "yes" : "no",
+ rpmsg_virtio_get_role(rvdev) == RPMSG_HOST ? "yes" : "no",
CONFIG_RPTUN_LOCAL_CPUNAME, rpmsg_get_cpuname(rdev));
metal_log(METAL_LOG_EMERGENCY, "rpmsg vq RX:\n");