1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+ 284ad6884SPeter Tyser /* 384ad6884SPeter Tyser * (C) Copyright 2002 484ad6884SPeter Tyser * Sysgo Real-Time Solutions, GmbH <www.elinos.com> 584ad6884SPeter Tyser * Marius Groeger <mgroeger@sysgo.de> 684ad6884SPeter Tyser * 784ad6884SPeter Tyser * (C) Copyright 2002 884ad6884SPeter Tyser * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de> 984ad6884SPeter Tyser */ 1084ad6884SPeter Tyser 1184ad6884SPeter Tyser /* 1284ad6884SPeter Tyser * CPU specific code 1384ad6884SPeter Tyser */ 1484ad6884SPeter Tyser 1584ad6884SPeter Tyser #include <common.h> 1684ad6884SPeter Tyser #include <command.h> 1784ad6884SPeter Tyser #include <asm/system.h> 1884ad6884SPeter Tyser 1984ad6884SPeter Tyser static void cache_flush(void); 2084ad6884SPeter Tyser cleanup_before_linux(void)2184ad6884SPeter Tyserint cleanup_before_linux (void) 2284ad6884SPeter Tyser { 2384ad6884SPeter Tyser /* 2484ad6884SPeter Tyser * this function is called just before we call linux 2584ad6884SPeter Tyser * it prepares the processor for linux 2684ad6884SPeter Tyser * 2784ad6884SPeter Tyser * we turn off caches etc ... 2884ad6884SPeter Tyser */ 2984ad6884SPeter Tyser 3084ad6884SPeter Tyser disable_interrupts (); 3184ad6884SPeter Tyser 3284ad6884SPeter Tyser /* turn off I/D-cache */ 3384ad6884SPeter Tyser icache_disable(); 3484ad6884SPeter Tyser dcache_disable(); 3584ad6884SPeter Tyser /* flush I/D-cache */ 3684ad6884SPeter Tyser cache_flush(); 3784ad6884SPeter Tyser 3884ad6884SPeter Tyser return 0; 3984ad6884SPeter Tyser } 4084ad6884SPeter Tyser 4184ad6884SPeter Tyser /* flush I/D-cache */ cache_flush(void)4284ad6884SPeter Tyserstatic void cache_flush (void) 4384ad6884SPeter Tyser { 4484ad6884SPeter Tyser unsigned long i = 0; 4584ad6884SPeter Tyser 4684ad6884SPeter Tyser asm ("mcr p15, 0, %0, c7, c7, 0": :"r" (i)); 4784ad6884SPeter Tyser } 48