blob: d6dd65382f52963bde639a89ae25d579f944cb66 [file] [log] [blame]
Konstantin Porotchkin402fcf12018-02-26 16:04:25 +02001/*
2 * Copyright (C) 2018 Marvell International Ltd.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 * https://spdx.org/licenses
6 */
7
8/* LLC driver is the Last Level Cache (L3C) driver
9 * for Marvell SoCs in AP806, AP807, and AP810
10 */
11
Antonio Nino Diaz5eb88372018-11-08 10:20:19 +000012#ifndef CACHE_LLC_H
13#define CACHE_LLC_H
Konstantin Porotchkin402fcf12018-02-26 16:04:25 +020014
15#define LLC_CTRL(ap) (MVEBU_LLC_BASE(ap) + 0x100)
Konstantin Porotchkin2ef36a32019-03-31 16:58:11 +030016#define LLC_SECURE_CTRL(ap) (MVEBU_LLC_BASE(ap) + 0x10C)
Konstantin Porotchkin402fcf12018-02-26 16:04:25 +020017#define LLC_SYNC(ap) (MVEBU_LLC_BASE(ap) + 0x700)
Konstantin Porotchkinfa8c1302019-03-25 15:35:41 +020018#define LLC_BANKED_MNT_AHR(ap) (MVEBU_LLC_BASE(ap) + 0x724)
19#define LLC_INV_WAY(ap) (MVEBU_LLC_BASE(ap) + 0x77C)
20#define LLC_BLK_ALOC(ap) (MVEBU_LLC_BASE(ap) + 0x78c)
21#define LLC_CLEAN_WAY(ap) (MVEBU_LLC_BASE(ap) + 0x7BC)
22#define LLC_CLEAN_INV_WAY(ap) (MVEBU_LLC_BASE(ap) + 0x7FC)
Konstantin Porotchkin2ef36a32019-03-31 16:58:11 +030023#define LLC_TCN_LOCK(ap, tc) (MVEBU_LLC_BASE(ap) + 0x920 + 4 * (tc))
Konstantin Porotchkin402fcf12018-02-26 16:04:25 +020024
25#define MASTER_LLC_CTRL LLC_CTRL(MVEBU_AP0)
Konstantin Porotchkinfa8c1302019-03-25 15:35:41 +020026#define MASTER_LLC_INV_WAY LLC_INV_WAY(MVEBU_AP0)
Konstantin Porotchkin2ef36a32019-03-31 16:58:11 +030027#define MASTER_LLC_TC0_LOCK LLC_TCN_LOCK(MVEBU_AP0, 0)
Konstantin Porotchkin402fcf12018-02-26 16:04:25 +020028
29#define LLC_CTRL_EN 1
30#define LLC_EXCLUSIVE_EN 0x100
Konstantin Porotchkinfa8c1302019-03-25 15:35:41 +020031#define LLC_ALL_WAYS_MASK 0xFFFFFFFF
32
33/* AP806/AP807 - 1MB 8-ways LLC */
34#define LLC_WAYS 8
35#define LLC_WAY_MASK ((1 << LLC_WAYS) - 1)
36#define LLC_SIZE (1024 * 1024)
37#define LLC_WAY_SIZE (LLC_SIZE / LLC_WAYS)
Konstantin Porotchkin2ef36a32019-03-31 16:58:11 +030038#define LLC_TC_NUM 15
Konstantin Porotchkinfa8c1302019-03-25 15:35:41 +020039
Konstantin Porotchkin2ef36a32019-03-31 16:58:11 +030040#define LLC_BLK_ALOC_WAY_ID(way) ((way) & 0x1f)
41#define LLC_BLK_ALOC_WAY_DATA_DSBL (0x0 << 6)
42#define LLC_BLK_ALOC_WAY_DATA_CLR (0x1 << 6)
43#define LLC_BLK_ALOC_WAY_DATA_SET (0x3 << 6)
Konstantin Porotchkin1e1ab1d2019-04-04 10:02:20 +030044#define LLC_BLK_ALOC_BASE_ADDR(addr) ((addr) & ~(LLC_WAY_SIZE - 1))
Konstantin Porotchkin402fcf12018-02-26 16:04:25 +020045
Julius Werner53456fc2019-07-09 13:49:11 -070046#ifndef __ASSEMBLER__
Konstantin Porotchkin402fcf12018-02-26 16:04:25 +020047void llc_cache_sync(int ap_index);
48void llc_flush_all(int ap_index);
49void llc_clean_all(int ap_index);
50void llc_inv_all(int ap_index);
51void llc_disable(int ap_index);
52void llc_enable(int ap_index, int excl_mode);
53int llc_is_exclusive(int ap_index);
54void llc_runtime_enable(int ap_index);
Konstantin Porotchkin2ef36a32019-03-31 16:58:11 +030055#if LLC_SRAM
Konstantin Porotchkin1e1ab1d2019-04-04 10:02:20 +030056int llc_sram_enable(int ap_index, int size);
Konstantin Porotchkin2ef36a32019-03-31 16:58:11 +030057void llc_sram_disable(int ap_index);
Konstantin Porotchkin1e1ab1d2019-04-04 10:02:20 +030058int llc_sram_test(int ap_index, int size, char *msg);
Konstantin Porotchkin2ef36a32019-03-31 16:58:11 +030059#endif /* LLC_SRAM */
60#endif /* __ASSEMBLY__ */
Konstantin Porotchkin402fcf12018-02-26 16:04:25 +020061
Antonio Nino Diaz5eb88372018-11-08 10:20:19 +000062#endif /* CACHE_LLC_H */