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