lkml.org 
[lkml]   [2021]   [Feb]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH v4 00/16] introduce a generic IOCTL interface for RPMsg channels management
    Date
    This series restructures the RPMsg char driver to decorrelate the control part and to
    create a generic RPMsg ioctl interface compatible with other RPMsg services.

    The V4 fixes compilation issue reported by the kernel test robot <lkp@intel.com>

    The V3 is based on the guideline proposed by Mathieu Poirier to keep as much as possible
    the legacy implementation of the rpmsg_char used by the GLINK and SMD platforms.

    Objectives of the series:
    - Allow to create a service from Linux user application:
    - with a specific name
    - with or without name service announcement.
    - Allow to probe the same service by receiving either a NS announcement from the remote firmware
    or a Linux user application request.
    - Use these services independently of the RPMsg transport implementation (e.g be able to use
    RPMSg char with the RPMsg virtio bus).

    Steps in the series:
    - Extract the control part of the char dev and create the rpmsg_ctrl.c file (patches 1 to 5)
    - Enable the use of the chardev with the virtio backend (patches 6 to 10)
    - Introduce the RPMSG_CREATE_DEV_IOCTL 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.
    - Instantiate the /dev/rpmsg interface on remote NS announcement (patches 12 to 15)

    In this revision, I do not divide the series into several parts in order to show a complete
    picture of the proposed evolution. To simplify the review, as a next step, I can send it in
    several steps listed above.

    Known current Limitations:
    - Tested only with virtio RPMsg bus. The glink and smd drivers adaptations have not been tested
    (not able to test it).
    - For the virtio backend: No NS announcement is sent to the remote processor if the source
    address is set to RPMSG_ADDR_ANY.
    - For the virtio backend: the existing RPMSG_CREATE_EPT_IOCTL is working but the endpoints are
    not attached to an exiting channel.
    - to limit patches the pending RPMSG_DESTROY_DEV_IOCTL has not ben implemented. This will be
    proposed in a second step.

    This series can be applied on git/andersson/remoteproc.git for-next branch (d9ff3a5789cb).

    This series can be tested using rpmsgexport, rpmsgcreatedev and ping tools available here:
    https://github.com/arnopo/rpmsgexport.git

    Reference to the V3 discussion thread: https://lkml.org/lkml/2021/2/4/194

    Arnaud Pouliquen (16):
    rpmsg: char: rename rpmsg_char_init to rpmsg_chrdev_init
    rpmsg: move RPMSG_ADDR_ANY in user API
    rpmsg: add short description of the IOCTL defined in UAPI.
    rpmsg: char: export eptdev create an destroy functions
    rpmsg: char: dissociate the control device from the rpmsg class
    rpmsg: move the rpmsg control device from rpmsg_char to rpmsg_ctrl
    rpmsg: update rpmsg_chrdev_register_device function
    rpmsg: glink: add sendto and trysendto ops
    rpmsg: smd: add sendto and trysendto ops
    rpmsg: char: use sendto to specify the message destination address
    rpmsg: virtio: register the rpmsg_ctrl device
    rpmsg: ctrl: introduce RPMSG_CREATE_DEV_IOCTL
    rpmsg: char: introduce __rpmsg_chrdev_create_eptdev function
    rpmsg: char: introduce a RPMsg driver for the RPMsg char device
    rpmsg: char: no dynamic endpoint management for the default one
    rpmsg: char: return an error if device already open

    drivers/rpmsg/Kconfig | 9 ++
    drivers/rpmsg/Makefile | 1 +
    drivers/rpmsg/qcom_glink_native.c | 18 ++-
    drivers/rpmsg/qcom_smd.c | 18 ++-
    drivers/rpmsg/rpmsg_char.c | 237 +++++++++++-------------------
    drivers/rpmsg/rpmsg_char.h | 51 +++++++
    drivers/rpmsg/rpmsg_ctrl.c | 229 +++++++++++++++++++++++++++++
    drivers/rpmsg/rpmsg_internal.h | 10 +-
    drivers/rpmsg/virtio_rpmsg_bus.c | 37 ++++-
    include/linux/rpmsg.h | 3 +-
    include/uapi/linux/rpmsg.h | 18 ++-
    11 files changed, 469 insertions(+), 162 deletions(-)
    create mode 100644 drivers/rpmsg/rpmsg_char.h
    create mode 100644 drivers/rpmsg/rpmsg_ctrl.c

    --
    2.17.1

    \
     
     \ /
      Last update: 2021-02-17 14:38    [W:3.427 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site