• P
    dmaengine: edma: New device tree binding · 1be5336b
    Peter Ujfalusi 提交于
    With the old binding and driver architecture we had many issues:
    No way to assign eDMA channels to event queues, thus not able to tune the
    system by moving specific DMA channels to low/high priority servicing. We
    moved the cyclic channels to high priority within the code, but that was
    just a workaround to this issue.
    Memcopy was fundamentally broken: even if the driver scanned the DT/devices
    in the booted system for direct DMA users (which is not effective when the
    events are going through a crossbar) and created a map of 'used' channels,
    this information was not really usable. Since via dmaengien API the eDMA
    driver will be called with _some_ channel number, we would try to request
    this channel when any channel is requested for memcpy. By luck we got
    channel which is not used by any device most of the time so things worked,
    but if a device would have been using the given channel, but not requested
    it, the memcpy channel would have been waiting for HW event.
    The old code had the am33xx/am43xx DMA event router handling embedded. This
    should have been done in a separate driver since it is not part of the
    actual eDMA IP.
    There were no way to 'lock' PaRAM slots to be used by the DSP for example
    when booting with DT.
    In DT boot the edma node used more than one hwmod which is not a good
    practice and the kernel prints warning because of this.
    
    With the new bindings and the changes in the driver we can:
    - No regression with Legacy binding and non DT boot
    - DMA channels can be assigned to any TC (to set priority)
    - PaRAM slots can be reserved for other cores to use
    - Dynamic power management for CC and TCs, if only TC0 is used all other TC
      can be powered down for example
    Signed-off-by: NPeter Ujfalusi <peter.ujfalusi@ti.com>
    Signed-off-by: NVinod Koul <vinod.koul@intel.com>
    1be5336b
edma.c 62.8 KB