15 Feb, 2023

3 commits

  • The code is peeking into the buffers, not peaking. Fix this throughout
    the glink drivers.

    Signed-off-by: Bjorn Andersson
    Reviewed-by: Chris Lew
    Signed-off-by: Bjorn Andersson
    Link: https://lore.kernel.org/r/20230214224746.1996130-1-quic_bjorande@quicinc.com

    Bjorn Andersson
     
  • Not all GLINK transports uses an interrupt and a mailbox instance. The
    interrupt for RPM needs to be IRQF_NOSUSPEND, while it seems reasonable
    for the SMEM interrupt to use irq_set_wake. The glink struct device is
    constructed in the SMEM and RPM drivers but torn down in the core
    driver.

    Move the interrupt and kick handling into the SMEM and RPM driver, to
    improve this and facilitate further improvements.

    Signed-off-by: Bjorn Andersson
    Reviewed-by: Chris Lew
    Signed-off-by: Bjorn Andersson
    Link: https://lore.kernel.org/r/20230213155215.1237059-5-quic_bjorande@quicinc.com

    Bjorn Andersson
     
  • The Glink SMEM driver allocates a struct device and hangs two
    devres-allocated pipe objects thereon. To facilitate the move of
    interrupt and mailbox handling to the driver, introduce a wrapper object
    capturing the device, glink reference and remote processor id.

    The type of the remoteproc reference is updated, as these are
    specifically targeting the SMEM implementation.

    Signed-off-by: Bjorn Andersson
    Reviewed-by: Chris Lew
    Signed-off-by: Bjorn Andersson
    Link: https://lore.kernel.org/r/20230213155215.1237059-3-quic_bjorande@quicinc.com

    Bjorn Andersson
     

12 Oct, 2019

1 commit

  • When wrapping around the FIFO, the remote expects the tail pointer to
    be reset to 0 on the edge case where the tail equals the FIFO length.

    Fixes: caf989c350e8 ("rpmsg: glink: Introduce glink smem based transport")
    Cc: stable@vger.kernel.org
    Signed-off-by: Chris Lew
    Signed-off-by: Bjorn Andersson

    Chris Lew
     

18 Sep, 2019

1 commit

  • Naming the glink edge device on the parent of_node short name causes
    collisions when multiple remoteproc instances with only different unit
    address are described on the platform_bus in DeviceTree.

    Base the edge's name on the parent remoteproc's name instead, to ensure
    that it's unique.

    Reviewed-by: Niklas Cassel
    Signed-off-by: Bjorn Andersson

    Bjorn Andersson
     

04 Oct, 2018

1 commit


28 Aug, 2018

1 commit


04 Jun, 2018

1 commit


18 Mar, 2018

1 commit


19 Dec, 2017

1 commit


07 Dec, 2017

1 commit


30 Aug, 2017

4 commits

  • To fully read the received rx data from FIFO both the command and data
    has to be read. Currently we read command, data separately and process
    them. By adding an offset parameter to RX FIFO peak accessor, command
    and data can be read together, simplifying things. So introduce this.

    Acked-by: Arun Kumar Neelakantam
    Signed-off-by: Sricharan R
    Signed-off-by: Bjorn Andersson

    Bjorn Andersson
     
  • Intents are nothing but pre-allocated buffers of appropriate size that
    are allocated on the local side and communicated to the remote side and
    the remote stores the list of intent ids that it is informed.

    Later when remote side is intenting to send data, it picks up a right
    intent (based on the size) and sends the data buffer and the intent id.
    Local side receives the data and copies it to the local intent buffer.

    The whole idea is to avoid stalls on the transport for allocating
    memory, used for copy based transports.

    When the remote request to allocate buffers using CMD_RX_INTENT_REQ, we
    allocate buffers of requested size, store the buffer id locally and also
    communicate the intent id to the remote.

    Acked-by: Arun Kumar Neelakantam
    Signed-off-by: Sricharan R
    Signed-off-by: Bjorn Andersson

    Sricharan R
     
  • G-link supports a version number and feature flags for each transport.
    A combination of the version number and feature flags enable/disable:

    (*) G-Link software updates for each edge
    (*) Individual features for each edge

    Endpoints negotiate both the version and the supported flags when
    the transport is opened and they cannot be changed after negotiation has
    been completed.

    Each full implementation of G-Link must support a minimum of the current
    version, the previous version, and the base negotiation version called v0.

    Acked-by: Arun Kumar Neelakantam
    Signed-off-by: Sricharan R
    Signed-off-by: Bjorn Andersson

    Sricharan R
     
  • The glink protocol supports different types of transports (shared
    memory). With the core protocol remaining the same, the way the
    transport's memory is probed and accessed is different. So add support
    for glink's smem based transports.

    Adding a new smem transport register function and the fifo accessors for
    the same.

    Acked-by: Arun Kumar Neelakantam
    Signed-off-by: Sricharan R
    Signed-off-by: Bjorn Andersson

    Bjorn Andersson