This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Unsig DMA with USB interface

Other Parts Discussed in Thread: DM3730

We’re developing an application under DM3730 Torpedo Module with the Linux
3.0 kernel that reads data from a USB based board (class ACM) at a rate of
200.000 bytes/second. We've observed that a 'kworker' thread consumes many
CPU and we are looking which are the possibilities to optimize the code. One
of the things we want to improve is communication process, so we’d like to
ask you some questions:

- Do you know if linux use DMA to receive/send data from/to a USB device? If
so how can we activate it?

- The memory reserved for DMA buffers could be increased using a linux
parameter?

- Any other suggestion to reduce the consume of CPU? Could be possible to
make DSP to carry directly this task? Could you send us some information
(some doc, example project, DSP driver, etc… ) that can help us?

Thank you and best regards

 

  • DM3730 hsusb0 does have DMA and same is available at drivers/usb/musb/musbhsdma.c. You should enable this in kernel config.

    Ajay

  • Ajay,

    With hsusb0, are you referring to ISP1760? How I should enable? the current configuration is:

    CONFIG_NEED_DMA_MAP_STATE=y
    CONFIG_HAVE_DMA_API_DEBUG=y
    CONFIG_HAVE_GENERIC_DMA_COHERENT=y
    CONFIG_ARM_DMA_MEM_BUFFERABLE=y
    CONFIG_ZONE_DMA_FLAG=0
    CONFIG_SCSI_DMA=y
    CONFIG_VIDEOBUF_DMA_CONTIG=y
    CONFIG_USB_INVENTRA_DMA=y
    CONFIG_MUSB_USE_SYSTEM_DMA_WORKAROUND=y
    # CONFIG_USB_TI_CPPI_DMA is not set
    # CONFIG_DMADEVICES is not set
    # CONFIG_DMA_API_DEBUG is not set
    CONFIG_HAS_DMA=y

    Any help is appreciated.


    Joaquim Duran 


     

  • Duran,

    The config is CONFIG_USB_INVENTRA_DMA which can be enabeld from Drivers->USB support-> Inventra and let "Disable DMA" to be not selected.

    Ajay

  • Ajay,

    I've tested in the kernel that the changes that you suggested ware already done:

    CONFIG_USB_MUSB_HDRC_HCD=y
    # CONFIG_MUSB_PIO_ONLY is not set
    # CONFIG_USB_UX500_DMA is not set
    CONFIG_USB_INVENTRA_DMA=y
    CONFIG_MUSB_USE_SYSTEM_DMA_WORKAROUND=y
    # CONFIG_USB_TI_CPPI_DMA is not set

    The problem here is that when I connect the acquisition board to the OMAP board, it is connected using a USB connector, no the mini-USB of the OTG, so the USB root is ISP1763 processor and not the MUSB. ISP1763 is the replacement to ISP1507 from OMAP reference board. The ISP1763 has no option about DMA in the linux kernel.

    I'll connect the acquisition board to the OTG and I'll test if it improves the performance.

    Joaquim Duran