mirror of
				https://source.denx.de/u-boot/u-boot.git
				synced 2025-10-27 06:21:25 +01:00 
			
		
		
		
	This patch defines the 2 flush_dcache_range and invalidate_dcache_range functions for all the powerpc architecture. Their implementation is borrowed from the kernel's misc_32.S file and replace the ones from mpc86xx and ppc4xx since they were equivalent. This is a fix for the problem introduced by this patch: http://patchwork.ozlabs.org/patch/448849/ Signed-off-by: Valentin Longchamp <valentin.longchamp@keymile.com> Reviewed-by: Tom Rini <trini@konsulko.com> Reviewed-by: York Sun <yorksun@freescale.com>
		
			
				
	
	
		
			105 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /*
 | |
|  * Copyright (C) 1998  Dan Malek <dmalek@jlc.net>
 | |
|  * Copyright (C) 1999  Magnus Damm <kieraypc01.p.y.kie.era.ericsson.se>
 | |
|  * Copyright (C) 2000, 2001,2002 Wolfgang Denk <wd@denx.de>
 | |
|  * Copyright Freescale Semiconductor, Inc. 2004, 2006.
 | |
|  *
 | |
|  * SPDX-License-Identifier:	GPL-2.0+
 | |
|  */
 | |
| 
 | |
| #include <config.h>
 | |
| #include <ppc_asm.tmpl>
 | |
| #include <ppc_defs.h>
 | |
| 
 | |
| #include <asm/cache.h>
 | |
| 
 | |
| /*------------------------------------------------------------------------------- */
 | |
| /* Function:	 ppcDcbf */
 | |
| /* Description:	 Data Cache block flush */
 | |
| /* Input:	 r3 = effective address */
 | |
| /* Output:	 none. */
 | |
| /*------------------------------------------------------------------------------- */
 | |
| 	.globl	ppcDcbf
 | |
| ppcDcbf:
 | |
| 	dcbf	r0,r3
 | |
| 	blr
 | |
| 
 | |
| /*------------------------------------------------------------------------------- */
 | |
| /* Function:	 ppcDcbi */
 | |
| /* Description:	 Data Cache block Invalidate */
 | |
| /* Input:	 r3 = effective address */
 | |
| /* Output:	 none. */
 | |
| /*------------------------------------------------------------------------------- */
 | |
| 	.globl	ppcDcbi
 | |
| ppcDcbi:
 | |
| 	dcbi	r0,r3
 | |
| 	blr
 | |
| 
 | |
| /*--------------------------------------------------------------------------
 | |
|  * Function:	 ppcDcbz
 | |
|  * Description:	 Data Cache block zero.
 | |
|  * Input:	 r3 = effective address
 | |
|  * Output:	 none.
 | |
|  *-------------------------------------------------------------------------- */
 | |
| 
 | |
| 	.globl	ppcDcbz
 | |
| ppcDcbz:
 | |
| 	dcbz	r0,r3
 | |
| 	blr
 | |
| 
 | |
| /*------------------------------------------------------------------------------- */
 | |
| /* Function:	 ppcSync */
 | |
| /* Description:	 Processor Synchronize */
 | |
| /* Input:	 none. */
 | |
| /* Output:	 none. */
 | |
| /*------------------------------------------------------------------------------- */
 | |
| 	.globl	ppcSync
 | |
| ppcSync:
 | |
| 	sync
 | |
| 	blr
 | |
| 
 | |
| /*
 | |
|  * Write any modified data cache blocks out to memory and invalidate them.
 | |
|  * Does not invalidate the corresponding instruction cache blocks.
 | |
|  *
 | |
|  * flush_dcache_range(unsigned long start, unsigned long stop)
 | |
|  */
 | |
| _GLOBAL(flush_dcache_range)
 | |
| 	li	r5,L1_CACHE_BYTES-1
 | |
| 	andc	r3,r3,r5
 | |
| 	subf	r4,r3,r4
 | |
| 	add	r4,r4,r5
 | |
| 	srwi.	r4,r4,L1_CACHE_SHIFT
 | |
| 	beqlr
 | |
| 	mtctr	r4
 | |
| 
 | |
| 1:	dcbf	0,r3
 | |
| 	addi	r3,r3,L1_CACHE_BYTES
 | |
| 	bdnz	1b
 | |
| 	sync				/* wait for dcbst's to get to ram */
 | |
| 	blr
 | |
| 
 | |
| /*
 | |
|  * Like above, but invalidate the D-cache.  This is used by the 8xx
 | |
|  * to invalidate the cache so the PPC core doesn't get stale data
 | |
|  * from the CPM (no cache snooping here :-).
 | |
|  *
 | |
|  * invalidate_dcache_range(unsigned long start, unsigned long stop)
 | |
|  */
 | |
| _GLOBAL(invalidate_dcache_range)
 | |
| 	li	r5,L1_CACHE_BYTES-1
 | |
| 	andc	r3,r3,r5
 | |
| 	subf	r4,r3,r4
 | |
| 	add	r4,r4,r5
 | |
| 	srwi.	r4,r4,L1_CACHE_SHIFT
 | |
| 	beqlr
 | |
| 	mtctr	r4
 | |
| 
 | |
| 	sync
 | |
| 1:	dcbi	0,r3
 | |
| 	addi	r3,r3,L1_CACHE_BYTES
 | |
| 	bdnz	1b
 | |
| 	sync				/* wait for dcbi's to get to ram */
 | |
| 	blr
 | |
| 
 |