|
@@ -41,11 +41,14 @@ static void __iomem *coherency_cpu_base;
|
|
|
enum {
|
|
|
COHERENCY_FABRIC_TYPE_NONE,
|
|
|
COHERENCY_FABRIC_TYPE_ARMADA_370_XP,
|
|
|
+ COHERENCY_FABRIC_TYPE_ARMADA_375,
|
|
|
};
|
|
|
|
|
|
static struct of_device_id of_coherency_table[] = {
|
|
|
{.compatible = "marvell,coherency-fabric",
|
|
|
.data = (void *) COHERENCY_FABRIC_TYPE_ARMADA_370_XP },
|
|
|
+ {.compatible = "marvell,armada-375-coherency-fabric",
|
|
|
+ .data = (void *) COHERENCY_FABRIC_TYPE_ARMADA_375 },
|
|
|
{ /* end of list */ },
|
|
|
};
|
|
|
|
|
@@ -145,6 +148,11 @@ static void __init armada_370_coherency_init(struct device_node *np)
|
|
|
set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0);
|
|
|
}
|
|
|
|
|
|
+static void __init armada_375_coherency_init(struct device_node *np)
|
|
|
+{
|
|
|
+ coherency_cpu_base = of_iomap(np, 0);
|
|
|
+}
|
|
|
+
|
|
|
static int coherency_type(void)
|
|
|
{
|
|
|
struct device_node *np;
|
|
@@ -158,6 +166,10 @@ static int coherency_type(void)
|
|
|
if (type == COHERENCY_FABRIC_TYPE_ARMADA_370_XP)
|
|
|
return type;
|
|
|
|
|
|
+ /* Armada 375 coherency works only on SMP */
|
|
|
+ else if (type == COHERENCY_FABRIC_TYPE_ARMADA_375 && is_smp())
|
|
|
+ return type;
|
|
|
+
|
|
|
of_node_put(np);
|
|
|
}
|
|
|
|
|
@@ -178,6 +190,8 @@ int __init coherency_init(void)
|
|
|
|
|
|
if (type == COHERENCY_FABRIC_TYPE_ARMADA_370_XP)
|
|
|
armada_370_coherency_init(np);
|
|
|
+ else if (type == COHERENCY_FABRIC_TYPE_ARMADA_375)
|
|
|
+ armada_375_coherency_init(np);
|
|
|
|
|
|
return 0;
|
|
|
}
|