xref: /rk3399_ARM-atf/plat/mediatek/common/cache_ops.c (revision 06f3c7058c42a9f1a9f7df75ea2de71a000855e8)
1 /*
2  * Copyright (c) 2025, MediaTek Inc. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include <arch_helpers.h>
8 #include <lib/mmio.h>
9 
10 #include <cache_ops.h>
11 #include <mcucfg.h>
12 
13 #define L3_SHARE_EN	9
14 #define L3_SHARE_PRE_EN	8
15 
16 void disable_cache_as_ram(void)
17 {
18 	unsigned long v;
19 
20 	mmio_clrbits_32(MP0_CLUSTER_CFG0, 1 << L3_SHARE_EN);
21 	dsb();
22 
23 	__asm__ volatile ("mrs %0, S3_0_C15_C3_5" : "=r" (v));
24 	v |= (0xf << 4);
25 	__asm__ volatile ("msr S3_0_C15_C3_5, %0" : : "r" (v));
26 	dsb();
27 
28 	do {
29 		__asm__ volatile ("mrs %0, S3_0_C15_C3_7" : "=r" (v));
30 	} while (((v >> 0x4) & 0xf) != 0xf);
31 
32 	mmio_clrbits_32(MP0_CLUSTER_CFG0, 1 << L3_SHARE_PRE_EN);
33 	dsb();
34 }
35