Skip to content

Commit

Permalink
ARM: mvebu: add Armada 38x support to the coherency code
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Thomas Petazzoni authored and Jason Cooper committed Apr 24, 2014
1 parent 5ab5afd commit d0de932
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 4 deletions.
7 changes: 6 additions & 1 deletion Documentation/devicetree/bindings/arm/coherency-fabric.txt
Original file line number Diff line number Diff line change
@@ -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:

Expand All @@ -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.

Expand All @@ -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:

Expand Down
14 changes: 11 additions & 3 deletions arch/arm/mach-mvebu/coherency.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,16 @@ 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[] = {
{.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 },
{.compatible = "marvell,armada-380-coherency-fabric",
.data = (void *) COHERENCY_FABRIC_TYPE_ARMADA_380 },
{ /* end of list */ },
};

Expand Down Expand Up @@ -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);
}
Expand All @@ -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);
}

Expand All @@ -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;
}
Expand Down

0 comments on commit d0de932

Please sign in to comment.