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 2026/03/05 04:39:20 UTC

(nuttx) branch master updated (440ad137b8f -> 6b139407974)

This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


    from 440ad137b8f wireless/cc1101: Add standard RF IOCTL support.
     new 621da5bc5c9 drivers/rpmsg_virtio: Add VIRTIO_RPMSG_F_BUFADDR to support specify the address
     new 6b139407974 openamp: add patch for VIRTIO_RPMSG_F_BUFADDR buffer address support

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 drivers/rpmsg/rpmsg_virtio.c                       | 54 +++++++++++++++++++--
 ...IRTIO_RPMSG_F_BUFADDR-to-support-specify-.patch | 55 ++++++++++++++++++++++
 openamp/open-amp.cmake                             |  2 +
 openamp/open-amp.defs                              |  1 +
 4 files changed, 109 insertions(+), 3 deletions(-)
 create mode 100644 openamp/0019-rpmsg-Add-VIRTIO_RPMSG_F_BUFADDR-to-support-specify-.patch


(nuttx) 02/02: openamp: add patch for VIRTIO_RPMSG_F_BUFADDR buffer address support

Posted by xi...@apache.org.
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/nuttx.git

commit 6b139407974d026b25be1d5fc9ffba46ced81576
Author: Bowen Wang <wa...@xiaomi.com>
AuthorDate: Wed Mar 4 20:21:50 2026 +0800

    openamp: add patch for VIRTIO_RPMSG_F_BUFADDR buffer address support
    
    Add open-amp patch 0019 to extend fw_rsc_config with h2r_buf_addr
    and r2h_buf_addr fields, allowing the host and remote sides to
    specify buffer physical addresses through the resource table.
    This enables splitting the shared memory pool into separate regions.
    
    Also update open-amp.defs and open-amp.cmake to apply the new patch
    during the open-amp build process.
    
    Signed-off-by: Bowen Wang <wa...@xiaomi.com>
---
 ...IRTIO_RPMSG_F_BUFADDR-to-support-specify-.patch | 55 ++++++++++++++++++++++
 openamp/open-amp.cmake                             |  2 +
 openamp/open-amp.defs                              |  1 +
 3 files changed, 58 insertions(+)

diff --git a/openamp/0019-rpmsg-Add-VIRTIO_RPMSG_F_BUFADDR-to-support-specify-.patch b/openamp/0019-rpmsg-Add-VIRTIO_RPMSG_F_BUFADDR-to-support-specify-.patch
new file mode 100644
index 00000000000..1b41ec7d3aa
--- /dev/null
+++ b/openamp/0019-rpmsg-Add-VIRTIO_RPMSG_F_BUFADDR-to-support-specify-.patch
@@ -0,0 +1,55 @@
+From a01c2ad26ec50cc480933a2b92017a9287909af8 Mon Sep 17 00:00:00 2001
+From: yintao <yi...@xiaomi.com>
+Date: Fri, 11 Apr 2025 15:23:07 +0800
+Subject: [PATCH 19/19] rpmsg: Add VIRTIO_RPMSG_F_BUFADDR to support specify
+ the address
+
+add h2r_buf_addr and r2h_buf_addr at fw_rsc_config to support specify the address
+
+Signed-off-by: yintao <yi...@xiaomi.com>
+---
+ lib/include/openamp/remoteproc.h   | 8 +++++++-
+ lib/include/openamp/rpmsg_virtio.h | 1 +
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/lib/include/openamp/remoteproc.h open-amp/lib/include/openamp/remoteproc.h
+index ea2c39ecfe..62ae76a380 100644
+--- a/lib/include/openamp/remoteproc.h
++++ open-amp/lib/include/openamp/remoteproc.h
+@@ -372,6 +372,12 @@ struct fw_rsc_config {
+ 	/** The remote to host buffer size (if VIRTIO_RPMSG_F_BUFSZ) */
+ 	uint32_t r2h_buf_size;
+ 
++	/** The host physical address (if VIRTIO_RPMSG_F_BUFADDR) */
++	uint64_t h2r_buf_addr;
++
++	/** The remote physical address (if VIRTIO_RPMSG_F_BUFADDR) */
++	uint64_t r2h_buf_addr;
++
+ 	/* The host side cpu name (if VIRTIO_RPMSG_F_CPUNAME) */
+ 
+ 	uint8_t host_cpuname[VIRTIO_RPMSG_CPUNAME_SIZE];
+@@ -382,7 +388,7 @@ struct fw_rsc_config {
+ 
+ 	/* Reserve for the future use */
+ 
+-	uint32_t reserved[10];
++	uint32_t reserved[6];
+ 
+ 	/** Put the customize config here */
+ } METAL_PACKED_END;
+diff --git a/lib/include/openamp/rpmsg_virtio.h open-amp/lib/include/openamp/rpmsg_virtio.h
+index 8d686f72f1..5eef8b7c6a 100644
+--- a/lib/include/openamp/rpmsg_virtio.h
++++ open-amp/lib/include/openamp/rpmsg_virtio.h
+@@ -32,6 +32,7 @@ extern "C" {
+ #define VIRTIO_RPMSG_F_ACK	1 /* RP supports name service acknowledge */
+ #define VIRTIO_RPMSG_F_BUFSZ	2 /* RP supports get buffer size from config space */
+ #define VIRTIO_RPMSG_F_CPUNAME	3 /* RP supports get local and peer cpu name */
++#define VIRTIO_RPMSG_F_BUFADDR	4 /* RP supports get buffer address from config space */
+ 
+ #if defined(VIRTIO_USE_DCACHE)
+ #define BUFFER_FLUSH(x, s)		metal_cache_flush(x, s)
+-- 
+2.34.1
+
diff --git a/openamp/open-amp.cmake b/openamp/open-amp.cmake
index 1ca7dfb7990..668d854a81e 100644
--- a/openamp/open-amp.cmake
+++ b/openamp/open-amp.cmake
@@ -74,6 +74,8 @@ if(NOT EXISTS ${CMAKE_CURRENT_LIST_DIR}/open-amp)
       ${CMAKE_CURRENT_LIST_DIR}/0017-lib-virtio-virtqueue-change-the-virtqueue-dump-log-l.patch
       && patch -p0 -d ${CMAKE_CURRENT_LIST_DIR} <
       ${CMAKE_CURRENT_LIST_DIR}/0018-lib-rpmsg-add-priority-support-for-rpmsg-endpoint.patch
+      && patch -p0 -d ${CMAKE_CURRENT_LIST_DIR} <
+      ${CMAKE_CURRENT_LIST_DIR}/0019-rpmsg-Add-VIRTIO_RPMSG_F_BUFADDR-to-support-specify-.patch
     DOWNLOAD_NO_PROGRESS true
     TIMEOUT 30)
 
diff --git a/openamp/open-amp.defs b/openamp/open-amp.defs
index 20268f10c1e..36c81fed13d 100644
--- a/openamp/open-amp.defs
+++ b/openamp/open-amp.defs
@@ -84,6 +84,7 @@ open-amp.zip:
 	$(Q) patch -p0 < 0016-lib-rpmsg_virtio-support-release-the-name-service-me.patch
 	$(Q) patch -p0 < 0017-lib-virtio-virtqueue-change-the-virtqueue-dump-log-l.patch
 	$(Q) patch -p0 < 0018-lib-rpmsg-add-priority-support-for-rpmsg-endpoint.patch
+	$(Q) patch -p0 < 0019-rpmsg-Add-VIRTIO_RPMSG_F_BUFADDR-to-support-specify-.patch
 
 .openamp_headers: open-amp.zip
 else


(nuttx) 01/02: drivers/rpmsg_virtio: Add VIRTIO_RPMSG_F_BUFADDR to support specify the address

Posted by xi...@apache.org.
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/nuttx.git

commit 621da5bc5c9b33bb1d4aceebe0ece03f2e881fa7
Author: yintao <yi...@xiaomi.com>
AuthorDate: Tue Apr 15 17:53:24 2025 +0800

    drivers/rpmsg_virtio: Add VIRTIO_RPMSG_F_BUFADDR to support specify the address
    
    support specify the address by h2r_buf_addr and r2h_buf_addr
    so is can split shared memory pool
    
    Signed-off-by: yintao <yi...@xiaomi.com>
    Signed-off-by: Bowen Wang <wa...@xiaomi.com>
---
 drivers/rpmsg/rpmsg_virtio.c | 54 +++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 51 insertions(+), 3 deletions(-)

diff --git a/drivers/rpmsg/rpmsg_virtio.c b/drivers/rpmsg/rpmsg_virtio.c
index 7f1f5cc9bc3..628f68c84d6 100644
--- a/drivers/rpmsg/rpmsg_virtio.c
+++ b/drivers/rpmsg/rpmsg_virtio.c
@@ -49,7 +49,8 @@
 #define RPMSG_VIRTIO_FEATURES        (1 << VIRTIO_RPMSG_F_NS | \
                                       1 << VIRTIO_RPMSG_F_ACK | \
                                       1 << VIRTIO_RPMSG_F_BUFSZ | \
-                                      1 << VIRTIO_RPMSG_F_CPUNAME)
+                                      1 << VIRTIO_RPMSG_F_CPUNAME | \
+                                      1 << VIRTIO_RPMSG_F_BUFADDR)
 
 #ifdef CONFIG_OPENAMP_CACHE
 #  define RPMSG_VIRTIO_INVALIDATE(x) metal_cache_invalidate(&x, sizeof(x))
@@ -541,10 +542,57 @@ static int rpmsg_virtio_notify_wait(FAR struct rpmsg_device *rdev,
 static int rpmsg_virtio_start(FAR struct rpmsg_virtio_priv_s *priv)
 {
   FAR struct virtio_device *vdev = priv->vdev;
+  struct rpmsg_virtio_config config =
+  {
+    RPMSG_BUFFER_SIZE,
+    RPMSG_BUFFER_SIZE,
+    false,
+  };
+
   int ret;
 
-  ret = rpmsg_init_vdev(&priv->rvdev, vdev, rpmsg_ns_bind,
-                        metal_io_get_region(), priv->pool);
+  if (virtio_has_feature(vdev, VIRTIO_RPMSG_F_BUFSZ))
+    {
+      virtio_read_config_member(vdev, struct fw_rsc_config, h2r_buf_size,
+                                &config.h2r_buf_size)
+      virtio_read_config_member(vdev, struct fw_rsc_config, r2h_buf_size,
+                                &config.r2h_buf_size);
+    }
+
+  if (vdev->role == VIRTIO_DEV_DRIVER &&
+      virtio_has_feature(vdev, VIRTIO_RPMSG_F_BUFADDR))
+    {
+      FAR void *shmbuf_va0;
+      FAR void *shmbuf_va1;
+      uint64_t shmbuf_pa0;
+      uint64_t shmbuf_pa1;
+
+      /* In OpenAMP, priv->pool[0] is the RX share memory pool, should use
+       * r2h_buf_addr and r2h_buf_size
+       */
+
+      virtio_read_config_member(vdev, struct fw_rsc_config, r2h_buf_addr,
+                                &shmbuf_pa0);
+      shmbuf_va0 = up_addrenv_pa_to_va((uintptr_t)shmbuf_pa0);
+      rpmsg_virtio_init_shm_pool(&priv->pool[0], shmbuf_va0,
+              config.r2h_buf_size * vdev->vrings_info[0].info.num_descs);
+
+      /* In OpenAMP, priv->pool[1] is the TX share memory pool, should use
+       * h2r_buf_addr and h2r_buf_size
+       */
+
+      virtio_read_config_member(vdev, struct fw_rsc_config, h2r_buf_addr,
+                                &shmbuf_pa1);
+      shmbuf_va1 = up_addrenv_pa_to_va((uintptr_t)shmbuf_pa1);
+      rpmsg_virtio_init_shm_pool(&priv->pool[1], shmbuf_va1,
+              config.h2r_buf_size * vdev->vrings_info[1].info.num_descs);
+
+      config.split_shpool = true;
+    }
+
+  ret = rpmsg_init_vdev_with_config(&priv->rvdev, vdev, rpmsg_ns_bind,
+                                    metal_io_get_region(),
+                                    priv->pool, &config);
   if (ret < 0)
     {
       rpmsgerr("rpmsg_init_vdev failed, ret=%d\n", ret);