diff options
Diffstat (limited to 'arch/arm/mm/cache-v6.S')
| -rw-r--r-- | arch/arm/mm/cache-v6.S | 17 | 
1 files changed, 13 insertions, 4 deletions
diff --git a/arch/arm/mm/cache-v6.S b/arch/arm/mm/cache-v6.S index 9d89c67a1cc..e46ecd84713 100644 --- a/arch/arm/mm/cache-v6.S +++ b/arch/arm/mm/cache-v6.S @@ -211,6 +211,9 @@ v6_dma_inv_range:  	mcrne	p15, 0, r1, c7, c15, 1		@ clean & invalidate unified line  #endif  1: +#ifdef CONFIG_SMP +	str	r0, [r0]			@ write for ownership +#endif  #ifdef HARVARD_CACHE  	mcr	p15, 0, r0, c7, c6, 1		@ invalidate D line  #else @@ -231,6 +234,9 @@ v6_dma_inv_range:  v6_dma_clean_range:  	bic	r0, r0, #D_CACHE_LINE_SIZE - 1  1: +#ifdef CONFIG_SMP +	ldr	r2, [r0]			@ read for ownership +#endif  #ifdef HARVARD_CACHE  	mcr	p15, 0, r0, c7, c10, 1		@ clean D line  #else @@ -251,6 +257,10 @@ v6_dma_clean_range:  ENTRY(v6_dma_flush_range)  	bic	r0, r0, #D_CACHE_LINE_SIZE - 1  1: +#ifdef CONFIG_SMP +	ldr	r2, [r0]			@ read for ownership +	str	r2, [r0]			@ write for ownership +#endif  #ifdef HARVARD_CACHE  	mcr	p15, 0, r0, c7, c14, 1		@ clean & invalidate D line  #else @@ -273,7 +283,9 @@ ENTRY(v6_dma_map_area)  	add	r1, r1, r0  	teq	r2, #DMA_FROM_DEVICE  	beq	v6_dma_inv_range -	b	v6_dma_clean_range +	teq	r2, #DMA_TO_DEVICE +	beq	v6_dma_clean_range +	b	v6_dma_flush_range  ENDPROC(v6_dma_map_area)  /* @@ -283,9 +295,6 @@ ENDPROC(v6_dma_map_area)   *	- dir	- DMA direction   */  ENTRY(v6_dma_unmap_area) -	add	r1, r1, r0 -	teq	r2, #DMA_TO_DEVICE -	bne	v6_dma_inv_range  	mov	pc, lr  ENDPROC(v6_dma_unmap_area)  |