IP mSGDMA Linux Driver


Hi everybody,
I would like to ask if somebody has used a Linux driver for Intel (Altera) IP for modular Scatter-Gather Direct Memory Access Controller? The source code could be found at https://github.com/altera-opensource/linux-socfpga/blob/813835028e9ae1f18cd11bb0ec591d0f0577d96a/drivers/dma/altera-msgdma.c.
I have been studing and trying to use it with Linux DMA Engine for some weeks but I am not successful. It seem me to be a quite non-standard driver which is not meant for general usage. I am asking in case I do not understand something basic and important.
Following things seem me strange:

  1. The driver is a platform driver, but there is no compatibility property. So the driver could not co-operate with DeviceTree. I am able to probe it only in case I add the compatibility string to it.
  2. Three registres are needed named csr, desc and resp in DeviceTree according to the driver code. However, if the mSGDMA IP is configured to have a streaming input or output, it has not the response port, so resp register does not exist. Moreover, the read data from resp are always droped (according to function msgdma_tasklet).
  3. The sopc2dtc tool creates a node with different register names at DeviceTree.
  4. There is no documentation for this driver at Linux kernel source code nor for its DeviceTree binding.
  5. The device is not registered as dma-controller (function of_dma_controller_register is not used), so no device could point to its node at DeviceTree via dmas property.

Could somebody explain these points to me?
Thanks in advance for any response or just idea.
Jan Konečný.


Hi Jan,

I had similar problems trying to figure out how to use this driver. Since the mSGDMA interface is fairly strait-forward I ended up implementing a user-space driver plus a generic UIO driver to handle device interrupts.



Hello @yromano,
thanks for assurance, it is a worth information. I might have to do it in a similar way.
Jan Konečný.