xref: /rk3399_rockchip-uboot/arch/arm/lib/cache.c (revision cba4b1809f043bf85c806e5a4e342f62bd5ded45)
1ea0364f1SPeter Tyser /*
2ea0364f1SPeter Tyser  * (C) Copyright 2002
3ea0364f1SPeter Tyser  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4ea0364f1SPeter Tyser  *
5ea0364f1SPeter Tyser  * See file CREDITS for list of people who contributed to this
6ea0364f1SPeter Tyser  * project.
7ea0364f1SPeter Tyser  *
8ea0364f1SPeter Tyser  * This program is free software; you can redistribute it and/or
9ea0364f1SPeter Tyser  * modify it under the terms of the GNU General Public License as
10ea0364f1SPeter Tyser  * published by the Free Software Foundation; either version 2 of
11ea0364f1SPeter Tyser  * the License, or (at your option) any later version.
12ea0364f1SPeter Tyser  *
13ea0364f1SPeter Tyser  * This program is distributed in the hope that it will be useful,
14ea0364f1SPeter Tyser  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15ea0364f1SPeter Tyser  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16ea0364f1SPeter Tyser  * GNU General Public License for more details.
17ea0364f1SPeter Tyser  *
18ea0364f1SPeter Tyser  * You should have received a copy of the GNU General Public License
19ea0364f1SPeter Tyser  * along with this program; if not, write to the Free Software
20ea0364f1SPeter Tyser  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21ea0364f1SPeter Tyser  * MA 02111-1307 USA
22ea0364f1SPeter Tyser  */
23ea0364f1SPeter Tyser 
24ea0364f1SPeter Tyser /* for now: just dummy functions to satisfy the linker */
25ea0364f1SPeter Tyser 
26ea0364f1SPeter Tyser #include <common.h>
27ea0364f1SPeter Tyser 
284c93da7cSAneesh V void  __flush_cache(unsigned long start, unsigned long size)
29ea0364f1SPeter Tyser {
307e4a9e6dSHeiko Schocher #if defined(CONFIG_OMAP2420) || defined(CONFIG_ARM1136)
31ea0364f1SPeter Tyser 	void arm1136_cache_flush(void);
32ea0364f1SPeter Tyser 
33ea0364f1SPeter Tyser 	arm1136_cache_flush();
34ea0364f1SPeter Tyser #endif
35c3330e9dSHeiko Schocher #ifdef CONFIG_ARM926EJS
36c3330e9dSHeiko Schocher 	/* test and clean, page 2-23 of arm926ejs manual */
37c3330e9dSHeiko Schocher 	asm("0: mrc p15, 0, r15, c7, c10, 3\n\t" "bne 0b\n" : : : "memory");
38c3330e9dSHeiko Schocher 	/* disable write buffer as well (page 2-22) */
39c3330e9dSHeiko Schocher 	asm("mcr p15, 0, %0, c7, c10, 4" : : "r" (0));
40c3330e9dSHeiko Schocher #endif
41ea0364f1SPeter Tyser 	return;
42ea0364f1SPeter Tyser }
434c93da7cSAneesh V void  flush_cache(unsigned long start, unsigned long size)
444c93da7cSAneesh V 	__attribute__((weak, alias("__flush_cache")));
45e05f0079SAneesh V 
46e05f0079SAneesh V /*
47e05f0079SAneesh V  * Default implementation:
48e05f0079SAneesh V  * do a range flush for the entire range
49e05f0079SAneesh V  */
50e05f0079SAneesh V void	__flush_dcache_all(void)
51e05f0079SAneesh V {
52e05f0079SAneesh V 	flush_cache(0, ~0);
53e05f0079SAneesh V }
54e05f0079SAneesh V void	flush_dcache_all(void)
55e05f0079SAneesh V 	__attribute__((weak, alias("__flush_dcache_all")));
56*cba4b180SAneesh V 
57*cba4b180SAneesh V 
58*cba4b180SAneesh V /*
59*cba4b180SAneesh V  * Default implementation of enable_caches()
60*cba4b180SAneesh V  * Real implementation should be in platform code
61*cba4b180SAneesh V  */
62*cba4b180SAneesh V void __enable_caches(void)
63*cba4b180SAneesh V {
64*cba4b180SAneesh V 	puts("WARNING: Caches not enabled\n");
65*cba4b180SAneesh V }
66*cba4b180SAneesh V void enable_caches(void)
67*cba4b180SAneesh V 	__attribute__((weak, alias("__enable_caches")));
68