@@ -22,6 +22,7 @@ config SOC_STARFIVE
bool "StarFive SoCs"
select PINCTRL
select RESET_CONTROLLER
+ select SIFIVE_L2
select SIFIVE_PLIC
help
This enables support for StarFive SoC platform hardware.
@@ -26,7 +26,7 @@ obj-y += qcom/
obj-y += renesas/
obj-y += rockchip/
obj-$(CONFIG_SOC_SAMSUNG) += samsung/
-obj-$(CONFIG_SOC_SIFIVE) += sifive/
+obj-y += sifive/
obj-y += sunxi/
obj-$(CONFIG_ARCH_TEGRA) += tegra/
obj-y += ti/
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: GPL-2.0
-if SOC_SIFIVE
+if SOC_SIFIVE || SOC_STARFIVE
config SIFIVE_L2
bool "Sifive L2 Cache controller"
@@ -10,6 +10,7 @@
#include <linux/io.h>
#include <linux/mod_devicetable.h>
#include <linux/platform_device.h>
+#include <linux/property.h>
#include <asm/cacheinfo.h>
#include <soc/sifive/sifive_l2_cache.h>
@@ -189,6 +190,7 @@ static irqreturn_t l2_int_handler(int irq, void *device)
static int __init sifive_l2_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
+ unsigned long quirks = (uintptr_t)device_get_match_data(dev);
int nirqs;
int ret;
int i;
@@ -206,6 +208,9 @@ static int __init sifive_l2_probe(struct platform_device *pdev)
if (g_irq[i] < 0)
return g_irq[i];
+ if (quirks & BIT(i))
+ continue;
+
ret = devm_request_irq(dev, g_irq[i], l2_int_handler, 0, pdev->name, NULL);
if (ret)
return dev_err_probe(dev, ret, "Could not request IRQ %d\n", g_irq[i]);
@@ -225,6 +230,8 @@ static int __init sifive_l2_probe(struct platform_device *pdev)
static const struct of_device_id sifive_l2_match[] = {
{ .compatible = "sifive,fu540-c000-ccache" },
{ .compatible = "sifive,fu740-c000-ccache" },
+ { .compatible = "starfive,jh7100-ccache", .data = (void *)BIT(DATA_UNCORR) },
+ { .compatible = "starfive,jh7110-ccache" },
{ /* sentinel */ }
};