]> git.karo-electronics.de Git - linux-beck.git/commitdiff
ARM: mvebu: add Armada 38x support to the coherency code
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Mon, 14 Apr 2014 13:47:06 +0000 (15:47 +0200)
committerJason Cooper <jason@lakedaemon.net>
Thu, 24 Apr 2014 05:00:38 +0000 (05:00 +0000)
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: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Link: https://lkml.kernel.org/r/1397483228-25625-9-git-send-email-thomas.petazzoni@free-electrons.com
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
Documentation/devicetree/bindings/arm/coherency-fabric.txt
arch/arm/mach-mvebu/coherency.c

index dcd80d6e04719166c7e9eac73235bfdfee3bf024..8dd46617c889afa3f05f1e578ddc34bc76d94cc8 100644 (file)
@@ -1,6 +1,6 @@
 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:
 
@@ -12,6 +12,9 @@ Required properties:
  * "marvell,armada-375-coherency-fabric", for the Armada 375 coherency
    fabric.
 
+ * "marvell,armada-380-coherency-fabric", for the Armada 38x coherency
+   fabric.
+
 - reg: Should contain coherency fabric registers location and
   length.
 
@@ -21,6 +24,8 @@ Required properties:
  * For "marvell,armada-375-coherency-fabric", only one pair is needed
    for the per-CPU fabric registers.
 
+ * For "marvell,armada-380-coherency-fabric", only one pair is needed
+   for the per-CPU fabric registers.
 
 Examples:
 
index 75db33ef93ee0da954cc96797754d64920b7c6a5..489edd157cfb8f0bce3dc8b3323da832fc1103dd 100644 (file)
@@ -47,6 +47,7 @@ enum {
        COHERENCY_FABRIC_TYPE_NONE,
        COHERENCY_FABRIC_TYPE_ARMADA_370_XP,
        COHERENCY_FABRIC_TYPE_ARMADA_375,
+       COHERENCY_FABRIC_TYPE_ARMADA_380,
 };
 
 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 },
        {.compatible = "marvell,armada-375-coherency-fabric",
         .data = (void *) COHERENCY_FABRIC_TYPE_ARMADA_375 },
+       {.compatible = "marvell,armada-380-coherency-fabric",
+        .data = (void *) COHERENCY_FABRIC_TYPE_ARMADA_380 },
        { /* end of list */ },
 };
 
@@ -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);
 }
 
-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);
 }
@@ -324,6 +327,10 @@ static int coherency_type(void)
                else if (type == COHERENCY_FABRIC_TYPE_ARMADA_375 && is_smp())
                        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);
        }
 
@@ -344,8 +351,9 @@ 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);
+       else if (type == COHERENCY_FABRIC_TYPE_ARMADA_375 ||
+                type == COHERENCY_FABRIC_TYPE_ARMADA_380)
+               armada_375_380_coherency_init(np);
 
        return 0;
 }