xref: /aosp_15_r20/external/arm-trusted-firmware/include/drivers/marvell/cache_llc.h (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (C) 2018-2020 Marvell International Ltd.
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier:     BSD-3-Clause
5*54fd6939SJiyong Park  * https://spdx.org/licenses
6*54fd6939SJiyong Park  */
7*54fd6939SJiyong Park 
8*54fd6939SJiyong Park /* LLC driver is the Last Level Cache (L3C) driver
9*54fd6939SJiyong Park  * for Marvell SoCs in AP806, AP807, and AP810
10*54fd6939SJiyong Park  */
11*54fd6939SJiyong Park 
12*54fd6939SJiyong Park #ifndef CACHE_LLC_H
13*54fd6939SJiyong Park #define CACHE_LLC_H
14*54fd6939SJiyong Park 
15*54fd6939SJiyong Park #define LLC_CTRL(ap)			(MVEBU_LLC_BASE(ap) + 0x100)
16*54fd6939SJiyong Park #define LLC_SECURE_CTRL(ap)		(MVEBU_LLC_BASE(ap) + 0x10C)
17*54fd6939SJiyong Park #define LLC_SYNC(ap)			(MVEBU_LLC_BASE(ap) + 0x700)
18*54fd6939SJiyong Park #define LLC_BANKED_MNT_AHR(ap)		(MVEBU_LLC_BASE(ap) + 0x724)
19*54fd6939SJiyong Park #define LLC_INV_WAY(ap)			(MVEBU_LLC_BASE(ap) + 0x77C)
20*54fd6939SJiyong Park #define LLC_BLK_ALOC(ap)		(MVEBU_LLC_BASE(ap) + 0x78c)
21*54fd6939SJiyong Park #define LLC_CLEAN_WAY(ap)		(MVEBU_LLC_BASE(ap) + 0x7BC)
22*54fd6939SJiyong Park #define LLC_CLEAN_INV_WAY(ap)		(MVEBU_LLC_BASE(ap) + 0x7FC)
23*54fd6939SJiyong Park #define LLC_TCN_LOCK(ap, tc)		(MVEBU_LLC_BASE(ap) + 0x920 + 4 * (tc))
24*54fd6939SJiyong Park 
25*54fd6939SJiyong Park #define MASTER_LLC_CTRL			LLC_CTRL(MVEBU_AP0)
26*54fd6939SJiyong Park #define MASTER_LLC_INV_WAY		LLC_INV_WAY(MVEBU_AP0)
27*54fd6939SJiyong Park #define MASTER_LLC_TC0_LOCK		LLC_TCN_LOCK(MVEBU_AP0, 0)
28*54fd6939SJiyong Park 
29*54fd6939SJiyong Park #define LLC_CTRL_EN			1
30*54fd6939SJiyong Park #define LLC_EXCLUSIVE_EN		0x100
31*54fd6939SJiyong Park #define LLC_ALL_WAYS_MASK		0xFFFFFFFF
32*54fd6939SJiyong Park 
33*54fd6939SJiyong Park /* AP806/AP807 - 1MB 8-ways LLC */
34*54fd6939SJiyong Park #define LLC_WAYS			8
35*54fd6939SJiyong Park #define LLC_WAY_MASK			((1 << LLC_WAYS) - 1)
36*54fd6939SJiyong Park #define LLC_SIZE			(1024 * 1024)
37*54fd6939SJiyong Park #define LLC_WAY_SIZE			(LLC_SIZE / LLC_WAYS)
38*54fd6939SJiyong Park #define LLC_TC_NUM			15
39*54fd6939SJiyong Park 
40*54fd6939SJiyong Park #define LLC_BLK_ALOC_WAY_ID(way)	((way) & 0x1f)
41*54fd6939SJiyong Park #define LLC_BLK_ALOC_WAY_DATA_DSBL	(0x0 << 6)
42*54fd6939SJiyong Park #define LLC_BLK_ALOC_WAY_DATA_CLR	(0x1 << 6)
43*54fd6939SJiyong Park #define LLC_BLK_ALOC_WAY_DATA_SET	(0x3 << 6)
44*54fd6939SJiyong Park #define LLC_BLK_ALOC_BASE_ADDR(addr)	((addr) & ~(LLC_WAY_SIZE - 1))
45*54fd6939SJiyong Park 
46*54fd6939SJiyong Park #ifndef __ASSEMBLER__
47*54fd6939SJiyong Park void llc_cache_sync(int ap_index);
48*54fd6939SJiyong Park void llc_flush_all(int ap_index);
49*54fd6939SJiyong Park void llc_clean_all(int ap_index);
50*54fd6939SJiyong Park void llc_inv_all(int ap_index);
51*54fd6939SJiyong Park void llc_disable(int ap_index);
52*54fd6939SJiyong Park void llc_enable(int ap_index, int excl_mode);
53*54fd6939SJiyong Park int llc_is_exclusive(int ap_index);
54*54fd6939SJiyong Park void llc_runtime_enable(int ap_index);
55*54fd6939SJiyong Park #if LLC_SRAM
56*54fd6939SJiyong Park int llc_sram_enable(int ap_index, int size);
57*54fd6939SJiyong Park void llc_sram_disable(int ap_index);
58*54fd6939SJiyong Park int llc_sram_test(int ap_index, int size, char *msg);
59*54fd6939SJiyong Park #endif /* LLC_SRAM */
60*54fd6939SJiyong Park #endif /* __ASSEMBLER__ */
61*54fd6939SJiyong Park 
62*54fd6939SJiyong Park #endif /* CACHE_LLC_H */
63