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");