summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/cache/Kconfig12
-rw-r--r--drivers/cache/cache-sifive-ccache.c4
2 files changed, 16 insertions, 0 deletions
diff --git a/drivers/cache/Kconfig b/drivers/cache/Kconfig
index 40f41a817c..c9b5fd3d5e 100644
--- a/drivers/cache/Kconfig
+++ b/drivers/cache/Kconfig
@@ -46,4 +46,16 @@ config SIFIVE_CCACHE
This driver is for SiFive Composable L2/L3 cache. It enables cache
ways of composable cache.
+config SIFIVE_CCACHE_WAYENABLE_OPT
+ bool "SiFive composable cache: customized the largest way enabled."
+ depends on SIFIVE_CCACHE
+
+config SIFIVE_CCACHE_WAYENABLE_NUM
+ int "SiFive composable cache: the largest way which will be enabled"
+ depends on SIFIVE_CCACHE_WAYENABLE_OPT
+ default 1
+ range 0 255
+ help
+ Range[0, 255]. The index of the largest way which will be enabled.
+
endmenu
diff --git a/drivers/cache/cache-sifive-ccache.c b/drivers/cache/cache-sifive-ccache.c
index 60b8ac122f..cf45cc9a82 100644
--- a/drivers/cache/cache-sifive-ccache.c
+++ b/drivers/cache/cache-sifive-ccache.c
@@ -35,6 +35,10 @@ static int sifive_ccache_enable(struct udevice *dev)
config = readl(priv->base + SIFIVE_CCACHE_CONFIG);
ways = FIELD_GET(SIFIVE_CCACHE_CONFIG_WAYS, config);
+#if CONFIG_IS_ENABLED(SIFIVE_CCACHE_WAYENABLE_OPT)
+ if (CONFIG_SIFIVE_CCACHE_WAYENABLE_NUM < ways)
+ ways = CONFIG_SIFIVE_CCACHE_WAYENABLE_NUM;
+#endif
writel(ways - 1, priv->base + SIFIVE_CCACHE_WAY_ENABLE);
return 0;