Commit d0de9323 authored by Thomas Petazzoni's avatar Thomas Petazzoni Committed by Jason Cooper

ARM: mvebu: add Armada 38x support to the coherency code

The Armada 38x has a coherency unit that is similar to the one of the
Armada 375 SoC, except that it does not have the bug of the Armada 375
coherency unit that requires the XOR based workaround.

This commit therefore extends the Marvell EBU coherency code with a
new compatible string to support the Armada 38x coherency unit.
Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Link: https://lkml.kernel.org/r/1397483228-25625-9-git-send-email-thomas.petazzoni@free-electrons.comSigned-off-by: default avatarJason Cooper <jason@lakedaemon.net>
parent 5ab5afd8
Coherency fabric Coherency fabric
---------------- ----------------
Available on Marvell SOCs: Armada 370, Armada 375 and Armada XP Available on Marvell SOCs: Armada 370, Armada 375, Armada 38x and Armada XP
Required properties: Required properties:
...@@ -12,6 +12,9 @@ Required properties: ...@@ -12,6 +12,9 @@ Required properties:
* "marvell,armada-375-coherency-fabric", for the Armada 375 coherency * "marvell,armada-375-coherency-fabric", for the Armada 375 coherency
fabric. fabric.
* "marvell,armada-380-coherency-fabric", for the Armada 38x coherency
fabric.
- reg: Should contain coherency fabric registers location and - reg: Should contain coherency fabric registers location and
length. length.
...@@ -21,6 +24,8 @@ Required properties: ...@@ -21,6 +24,8 @@ Required properties:
* For "marvell,armada-375-coherency-fabric", only one pair is needed * For "marvell,armada-375-coherency-fabric", only one pair is needed
for the per-CPU fabric registers. for the per-CPU fabric registers.
* For "marvell,armada-380-coherency-fabric", only one pair is needed
for the per-CPU fabric registers.
Examples: Examples:
......
...@@ -47,6 +47,7 @@ enum { ...@@ -47,6 +47,7 @@ enum {
COHERENCY_FABRIC_TYPE_NONE, COHERENCY_FABRIC_TYPE_NONE,
COHERENCY_FABRIC_TYPE_ARMADA_370_XP, COHERENCY_FABRIC_TYPE_ARMADA_370_XP,
COHERENCY_FABRIC_TYPE_ARMADA_375, COHERENCY_FABRIC_TYPE_ARMADA_375,
COHERENCY_FABRIC_TYPE_ARMADA_380,
}; };
static struct of_device_id of_coherency_table[] = { static struct of_device_id of_coherency_table[] = {
...@@ -54,6 +55,8 @@ static struct of_device_id of_coherency_table[] = { ...@@ -54,6 +55,8 @@ static struct of_device_id of_coherency_table[] = {
.data = (void *) COHERENCY_FABRIC_TYPE_ARMADA_370_XP }, .data = (void *) COHERENCY_FABRIC_TYPE_ARMADA_370_XP },
{.compatible = "marvell,armada-375-coherency-fabric", {.compatible = "marvell,armada-375-coherency-fabric",
.data = (void *) COHERENCY_FABRIC_TYPE_ARMADA_375 }, .data = (void *) COHERENCY_FABRIC_TYPE_ARMADA_375 },
{.compatible = "marvell,armada-380-coherency-fabric",
.data = (void *) COHERENCY_FABRIC_TYPE_ARMADA_380 },
{ /* end of list */ }, { /* end of list */ },
}; };
...@@ -302,7 +305,7 @@ static void __init armada_370_coherency_init(struct device_node *np) ...@@ -302,7 +305,7 @@ static void __init armada_370_coherency_init(struct device_node *np)
set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0); set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0);
} }
static void __init armada_375_coherency_init(struct device_node *np) static void __init armada_375_380_coherency_init(struct device_node *np)
{ {
coherency_cpu_base = of_iomap(np, 0); coherency_cpu_base = of_iomap(np, 0);
} }
...@@ -324,6 +327,10 @@ static int coherency_type(void) ...@@ -324,6 +327,10 @@ static int coherency_type(void)
else if (type == COHERENCY_FABRIC_TYPE_ARMADA_375 && is_smp()) else if (type == COHERENCY_FABRIC_TYPE_ARMADA_375 && is_smp())
return type; return type;
/* Armada 380 coherency works only on SMP */
else if (type == COHERENCY_FABRIC_TYPE_ARMADA_380 && is_smp())
return type;
of_node_put(np); of_node_put(np);
} }
...@@ -344,8 +351,9 @@ int __init coherency_init(void) ...@@ -344,8 +351,9 @@ int __init coherency_init(void)
if (type == COHERENCY_FABRIC_TYPE_ARMADA_370_XP) if (type == COHERENCY_FABRIC_TYPE_ARMADA_370_XP)
armada_370_coherency_init(np); armada_370_coherency_init(np);
else if (type == COHERENCY_FABRIC_TYPE_ARMADA_375) else if (type == COHERENCY_FABRIC_TYPE_ARMADA_375 ||
armada_375_coherency_init(np); type == COHERENCY_FABRIC_TYPE_ARMADA_380)
armada_375_380_coherency_init(np);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment