mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 21:44:27 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			42 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- a/arch/arm/mm/cache-fa.S
 | |
| +++ b/arch/arm/mm/cache-fa.S
 | |
| @@ -24,7 +24,8 @@
 | |
|  /*
 | |
|   * The size of one data cache line.
 | |
|   */
 | |
| -#define CACHE_DLINESIZE	16
 | |
| +#define CACHE_DLINESIZE		16
 | |
| +#define CACHE_DLINESHIFT	4
 | |
|  
 | |
|  /*
 | |
|   * The total size of the data cache.
 | |
| @@ -169,7 +170,17 @@ ENTRY(fa_flush_kern_dcache_area)
 | |
|   *	- start  - virtual start address
 | |
|   *	- end	 - virtual end address
 | |
|   */
 | |
| +__flush_whole_dcache:
 | |
| +	mcr	p15, 0, r0, c7, c14, 0		@ clean/invalidate D cache
 | |
| +	mov	r0, #0
 | |
| +	mcr	p15, 0, r0, c7, c10, 4		@ drain write buffer
 | |
| +	mov	pc, lr
 | |
| +
 | |
|  fa_dma_inv_range:
 | |
| +	sub	r3, r1, r0			@ calculate total size
 | |
| +	cmp	r3, #CACHE_DLIMIT		@ total size >= limit?
 | |
| +	bhs	__flush_whole_dcache		@ flush whole D cache
 | |
| +
 | |
|  	tst	r0, #CACHE_DLINESIZE - 1
 | |
|  	bic	r0, r0, #CACHE_DLINESIZE - 1
 | |
|  	mcrne	p15, 0, r0, c7, c14, 1		@ clean & invalidate D entry
 | |
| @@ -193,6 +204,10 @@ fa_dma_inv_range:
 | |
|   *	- end	 - virtual end address
 | |
|   */
 | |
|  fa_dma_clean_range:
 | |
| +	sub	r3, r1, r0			@ calculate total size
 | |
| +	cmp	r3, #CACHE_DLIMIT		@ total size >= limit?
 | |
| +	bhs	__flush_whole_dcache		@ flush whole D cache
 | |
| +
 | |
|  	bic	r0, r0, #CACHE_DLINESIZE - 1
 | |
|  1:	mcr	p15, 0, r0, c7, c10, 1		@ clean D entry
 | |
|  	add	r0, r0, #CACHE_DLINESIZE
 |