• Grygorii Strashko's avatar
    soc: ti: k3: add navss ringacc driver · 3277e8aa
    Grygorii Strashko authored
    The Ring Accelerator (RINGACC or RA) provides hardware acceleration to
    enable straightforward passing of work between a producer and a consumer.
    There is one RINGACC module per NAVSS on TI AM65x SoCs.
    
    The RINGACC converts constant-address read and write accesses to equivalent
    read or write accesses to a circular data structure in memory. The RINGACC
    eliminates the need for each DMA controller which needs to access ring
    elements from having to know the current state of the ring (base address,
    current offset). The DMA controller performs a read or write access to a
    specific address range (which maps to the source interface on the RINGACC)
    and the RINGACC replaces the address for the transaction with a new address
    which corresponds to the head or tail element of the ring (head for reads,
    tail for writes). Since the RINGACC maintains the state, multiple DMA
    controllers or channels are allowed to coherently share the same rings as
    applicable. The RINGACC is able to place data which is destined towards
    software into cached memory directly.
    
    Supported ring modes:
    - Ring Mode
    - Messaging Mode
    - Credentials Mode
    - Queue Manager Mode
    
    TI-SCI integration:
    
    Texas Instrument's System Control Interface (TI-SCI) Message Protocol now
    has control over Ringacc module resources management (RM) and Rings
    configuration.
    
    The corresponding support of TI-SCI Ringacc module RM protocol
    introduced as option through DT parameters:
    - ti,sci: phandle on TI-SCI firmware controller DT node
    - ti,sci-dev-id: TI-SCI device identifier as per TI-SCI firmware spec
    
    if both parameters present - Ringacc driver will configure/free/reset Rings
    using TI-SCI Message Ringacc RM Protocol.
    
    The Ringacc driver manages Rings allocation by itself now and requests
    TI-SCI firmware to allocate and configure specific Rings only. It's done
    this way because, Linux driver implements two stage Rings allocation and
    configuration (allocate ring and configure ring) while TI-SCI Message
    Protocol supports only one combined operation (allocate+configure).
    Signed-off-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
    Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@ti.com>
    Reviewed-by: default avatarTero Kristo <t-kristo@ti.com>
    Tested-by: default avatarKeerthy <j-keerthy@ti.com>
    Signed-off-by: default avatarSantosh Shilimkar <santosh.shilimkar@oracle.com>
    3277e8aa
k3-ringacc.c 29.2 KB