RE: DSP/IOMMU needs 128-byte alignment from user-space buffers?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Felipe,

> So if I'm understanding correctly there's no problem with 
> unaligned DMM buffers if the DSP software is just reading; 
> the problem is when writing data back to ARM.

--- That is my understanding too. For read only buffer there shouldn't be an issue with data corruption.

I heard that some folks at TI are working on documenting this cache alignement issues to share with you. Please hold on.

Thank you,
Best regards,
Hari
 

> -----Original Message-----
> From: Felipe Contreras [mailto:felipe.contreras@xxxxxxxxx] 
> Sent: Wednesday, December 17, 2008 3:21 PM
> To: Kanigeri, Hari
> Cc: linux-omap@xxxxxxxxxxxxxxx; Hiroshi DOYU
> Subject: Re: DSP/IOMMU needs 128-byte alignment from 
> user-space buffers?
> 
> On Wed, Dec 17, 2008 at 10:37 PM, Kanigeri, Hari 
> <h-kanigeri2@xxxxxx> wrote:
> > Hi Felipe,
> >
> >> I received information from TI saying that user-space 
> buffers need to 
> >> be 128-byte aligned for the DSP to work properly.
> >>
> >> Is this true or is it some kind of limitation on their MMU 
> code that 
> >> might be solved by Hiroshi's iommu?
> >>
> >> This impacts quite drastically user-space applications 
> like GStreamer 
> >> since a memory copy would be required to achieve that 128-byte 
> >> alignment.
> >>
> >> They also claim that adding 128-byte padding at the 
> beginning and at 
> >> the end achieves the same purpose.
> >
> > This is to address the memory corruption that might arise 
> when using DMM (Dynamic memory mapping) feature.
> > When the DSP processes data, the DSP cache controller loads 
> 128-Byte chunks (lines) from SDRAM and writes the data back 
> in 128-Byte chunks. If a DMM buffer does not start and end on 
> a 128-Byte boundary, the data preceding the start address 
> from the 128-Byte boundary to the Start Address and the data 
> at addresses trailing the end address from the End Address to 
> the next 128-Byte boundary will be loaded and written back as 
> well. If the DMM buffer was allocated on the heap of a 
> process running on the ARM, the preceding and trailing data, 
> if modified by the ARM (or other non-DSP entity) during DSP 
> processing, will be overwritten by the DSP cache controller, 
> when the 128-Byte chunks are written back to SDRAM. This can 
> lead to heap corruption.
> 
> Thanks for the explanation. So it doesn't have anything to do 
> with IOMMU; it's the software running on the DSP that has 
> this limitation.
> 
> > I think if you request the buffer from OMX component, this 
> issue will be taken as there is an additional 256 bytes padding.
> 
> Yes, but in that case a memcpy would be unavoidable in many 
> cases, like trying to render the result of video decoding on 
> Xv. If the Xv buffer is unaligned; a dedicated DMM would need 
> to be allocated, and then the data coming from DSP would need 
> to be copied to the Xv buffer. That has a huge performance penalty.
> 
> So if I'm understanding correctly there's no problem with 
> unaligned DMM buffers if the DSP software is just reading; 
> the problem is when writing data back to ARM.
> 
> --
> Felipe Contreras
> 
> --
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux