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