Re: [PATCH v9 00/11] Restructure the rpmsg_char driver and introduce rpmsg_ctrl driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Arnaud,

thanks for working on this! I'm currently testing/using this patch series on my imx7d project because it adds the capability that the remote processor can register it's endpoints dynamically (as mentioned in the objectives).

After a few tests, debugging, and checking the openamp specification [1] I think that you missed the second ns_announcement that should be sent from linux master to the slave after it created the channel/endpoint. Without this second announcement the remote processor is not able to send messages to the linux master because it doesn't know the destination address until it receives a message from the linux master.

Cheers,
Philipp


[1]: https://github.com/OpenAMP/open-amp/blob/main/docs/img/coprocessor-rpmsg-ns.png

On 24.01.22 11:25, Arnaud Pouliquen wrote:
Updates from V8 [1]:
- rebase on 5.17-rc1 + rpmsg char cdev release fixes[2][3]
- updates based on Bjorn Andersson's comments:
   - remove rpmsg_create_default_ept API, set directly the ept->priv in rpmsg_chrdev_probe
     function.
   - rework commit message in [8/9]rpmsg: char: Introduce the "rpmsg-raw" channel

Patchset description:

The current rpmsg_char module implements a /dev/rpmsg_ctrl interface that provides the ability to
instantiate char devices (/dev/rpmsgX) associated with an rpmsg endpoint for communication with the
remote processor.
This implementation fits with QCOM rpmsg backend but not with the magement by chanel implemented
in the generic rpmsg virtio backend.
This series restructures the rpmsg_char driver to decorrelate the control part from the data part
in order to improve its compatible with the rpmsg virtio backend.

Objective:
- Expose a /dev/rpmsg_ctrlX interface for the application that is no longer dedicated to the
   rpmsg_char but generalized to all rpmsg services. This offers capability to create and destroy
   rpmsg channels from a user's application initiative (using the new RPMSG_CREATE_DEV_IOCTL and
   RPMSG_DESTROY_DEV_IOCTL controls).
   An application will be able to create/establish an rpmsg communication channel to communicate
   with the remote processor, and not only wait the remote processor initiative.
   This is interesting for example to establish a temporary communication link for diagnosis,
   calibration, debugging... or instantiate  new data flows on some user actions.
- Add capability to probe the rpmsg_char device at the initiative of the remote processor
  (rpmsg service announcement mechanism).
   This allows platforms based on the rpmsg virtio backend to create the /dev/rpmgX interface with
   a rpmsg name service announcement.

Subsets:
   - Extract the control part of the char dev and create the rpmsg_ctrl.c file (patches 1 to 6)
   - Introduce the "rpmsg-raw" channel in rpmsg_char(patches 7 to 10)
   - Introduce the RPMSG_CREATE_DEV_IOCTL IOCTL and RPMSG_DESTROY_DEV_IOCTL to instantiate RPMsg
     devices (patch 11)
     The application can then create or release a channel by specifying:
        - the name service of the device to instantiate.
        - the source address.
        - the destination address.

This series has be applied and tested on 'commit e783362eb54c ("Linux 5.17-rc1") +
rpmsg_char cdev release fixes [2][3]

[1] https://lkml.org/lkml/2021/12/7/186
[2] https://lkml.org/lkml/2022/1/10/1129
[3] https://lkml.org/lkml/2022/1/10/1130

Arnaud Pouliquen (11):
   rpmsg: char: Export eptdev create and destroy functions
   rpmsg: Create the rpmsg class in core instead of in rpmsg char
   rpmsg: Move the rpmsg control device from rpmsg_char to rpmsg_ctrl
   arm: configs: Configs that had RPMSG_CHAR now get RPMSG_CTRL
   RISC-V: configs: Configs that had RPMSG_CHAR now get RPMSG_CTRL
   arm64: defconfig: Config that had RPMSG_CHAR now gets RPMSG_CTRL
   rpmsg: Update rpmsg_chrdev_register_device function
   rpmsg: char: Refactor rpmsg_chrdev_eptdev_create function
   rpmsg: char: Add possibility to use default endpoint of the rpmsg
     device
   rpmsg: char: Introduce the "rpmsg-raw" channel
   rpmsg: ctrl: Introduce new RPMSG_CREATE/RELEASE_DEV_IOCTL controls

  arch/arm/configs/qcom_defconfig   |   1 +
  arch/arm64/configs/defconfig      |   1 +
  arch/riscv/configs/defconfig      |   1 +
  arch/riscv/configs/rv32_defconfig |   1 +
  drivers/rpmsg/Kconfig             |   8 +
  drivers/rpmsg/Makefile            |   1 +
  drivers/rpmsg/qcom_glink_native.c |   2 +-
  drivers/rpmsg/qcom_smd.c          |   2 +-
  drivers/rpmsg/rpmsg_char.c        | 231 +++++++++++-----------------
  drivers/rpmsg/rpmsg_char.h        |  46 ++++++
  drivers/rpmsg/rpmsg_core.c        |  15 +-
  drivers/rpmsg/rpmsg_ctrl.c        | 243 ++++++++++++++++++++++++++++++
  drivers/rpmsg/rpmsg_internal.h    |  10 +-
  drivers/rpmsg/virtio_rpmsg_bus.c  |   2 +-
  include/uapi/linux/rpmsg.h        |  10 ++
  15 files changed, 419 insertions(+), 155 deletions(-)
  create mode 100644 drivers/rpmsg/rpmsg_char.h
  create mode 100644 drivers/rpmsg/rpmsg_ctrl.c




[Index of Archives]     [Linux Sound]     [ALSA Users]     [ALSA Devel]     [Linux Audio Users]     [Linux Media]     [Kernel]     [Photo Sharing]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux