Two questions about streaming DMA flushing
Li Haifeng
omycle at gmail.com
Wed Oct 31 05:42:01 EDT 2012
2012/10/31 Russell King - ARM Linux <linux at arm.linux.org.uk>:
> On Wed, Oct 31, 2012 at 10:15:04AM +0800, Li Haifeng wrote:
>> Sorry to disturb you.
>>
>> I have two questions for streaming DMA flushing @ arch/arm/mm/cache-v7.S.
>>
>> 1.
>> 332 ENTRY(v7_dma_map_area)
>> 333 add r1, r1, r0
>> 334 teq r2, #DMA_FROM_DEVICE
>> 335 beq v7_dma_inv_range
>> 336 b v7_dma_clean_range
>> 337 ENDPROC(v7_dma_map_area)
>>
>> The function of v7_dma_map_area will invalidate corresponding cache line
>> firstly and then clean the cache for “DMA_FROM_DEVICE”. I am confused the
>> sequence of the operations. IMO, the invalidate should be followed by the
>> clean action. Is it right?
>
> Wrong. beq is not a function call.
Yes, It's my wrong. sorry for my careless.
>
>> 2.
>> 345 ENTRY(v7_dma_unmap_area)
>> 346 add r1, r1, r0
>> 347 teq r2, #DMA_TO_DEVICE
>> 348 bne v7_dma_inv_range
>> 349 mov pc, lr
>> 350 ENDPROC(v7_dma_unmap_area)
>>
>> v7_dma_unmap_area, will invalidate corresponding cache line for
>> “DMA_FROM_DEVICE”. But, at v7_dma_map_area, the invalidate has been done.
>> Why do this again?
>
> Cache prefetching.
Thanks!
More information about the linux-arm-kernel
mailing list