xref: /rk3399_rockchip-uboot/arch/arm/cpu/armv8/cpu.c (revision 0ae7653128c80a4f2920cbe9b124792c2fd9d9e0)
1*0ae76531SDavid Feng /*
2*0ae76531SDavid Feng  * (C) Copyright 2008 Texas Insturments
3*0ae76531SDavid Feng  *
4*0ae76531SDavid Feng  * (C) Copyright 2002
5*0ae76531SDavid Feng  * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
6*0ae76531SDavid Feng  * Marius Groeger <mgroeger@sysgo.de>
7*0ae76531SDavid Feng  *
8*0ae76531SDavid Feng  * (C) Copyright 2002
9*0ae76531SDavid Feng  * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
10*0ae76531SDavid Feng  *
11*0ae76531SDavid Feng  * SPDX-License-Identifier:	GPL-2.0+
12*0ae76531SDavid Feng  */
13*0ae76531SDavid Feng 
14*0ae76531SDavid Feng #include <common.h>
15*0ae76531SDavid Feng #include <command.h>
16*0ae76531SDavid Feng #include <asm/system.h>
17*0ae76531SDavid Feng #include <linux/compiler.h>
18*0ae76531SDavid Feng 
19*0ae76531SDavid Feng int cleanup_before_linux(void)
20*0ae76531SDavid Feng {
21*0ae76531SDavid Feng 	/*
22*0ae76531SDavid Feng 	 * this function is called just before we call linux
23*0ae76531SDavid Feng 	 * it prepares the processor for linux
24*0ae76531SDavid Feng 	 *
25*0ae76531SDavid Feng 	 * disable interrupt and turn off caches etc ...
26*0ae76531SDavid Feng 	 */
27*0ae76531SDavid Feng 	disable_interrupts();
28*0ae76531SDavid Feng 
29*0ae76531SDavid Feng 	/*
30*0ae76531SDavid Feng 	 * Turn off I-cache and invalidate it
31*0ae76531SDavid Feng 	 */
32*0ae76531SDavid Feng 	icache_disable();
33*0ae76531SDavid Feng 	invalidate_icache_all();
34*0ae76531SDavid Feng 
35*0ae76531SDavid Feng 	/*
36*0ae76531SDavid Feng 	 * turn off D-cache
37*0ae76531SDavid Feng 	 * dcache_disable() in turn flushes the d-cache and disables MMU
38*0ae76531SDavid Feng 	 */
39*0ae76531SDavid Feng 	dcache_disable();
40*0ae76531SDavid Feng 	invalidate_dcache_all();
41*0ae76531SDavid Feng 
42*0ae76531SDavid Feng 	return 0;
43*0ae76531SDavid Feng }
44