linux/arch/arm/mach-mvebu
Thomas Petazzoni 497a92308a ARM: mvebu: implement L2/PCIe deadlock workaround
The Marvell Armada 375 and Armada 38x SOCs, which use the Cortex-A9
CPU core, the PL310 cache and the Marvell PCIe hardware block are
affected a L2/PCIe deadlock caused by a system erratum when hardware
I/O coherency is used.

This deadlock can be avoided by mapping the PCIe memory areas as
strongly-ordered (note: MT_UNCACHED is strongly-ordered), and by
removing the outer cache sync done in software. This is implemented in
this patch by:

 * Registering a custom arch_ioremap_caller function that allows to
   make sure PCI memory regions are mapped MT_UNCACHED.

 * Adding at runtime the 'arm,io-coherent' property to the PL310 cache
   controller. This cannot be done permanently in the DT, because the
   hardware I/O coherency can only be enabled when CONFIG_SMP is
   enabled, in the current kernel situation.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Link: https://lkml.kernel.org/r/1400165974-9059-4-git-send-email-thomas.petazzoni@free-electrons.com
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
2014-05-22 14:07:18 +00:00
..
include/mach ARM: mvebu: Simplify headers and make local 2014-02-22 21:19:59 +00:00
armada-370-xp.h irqchip: irq-armada-370-xp: Use cpu notifier to initialize secondary CPUs 2014-05-08 14:42:00 +00:00
board-v7.c ARM: mvebu: fix thermal quirk SoC revision check 2014-05-08 16:40:13 +00:00
board.h ARM: Kirkwood: t5325: Remove platform device to instantiate audio 2014-05-08 16:23:28 +00:00
coherency_ll.S ARM: mvebu: Low level function to disable HW coherency support 2014-05-08 16:18:55 +00:00
coherency.c ARM: mvebu: implement L2/PCIe deadlock workaround 2014-05-22 14:07:18 +00:00
coherency.h ARM: mvebu: Remove the unused argument of set_cpu_coherent() 2014-05-08 16:18:52 +00:00
common.h ARM: mvebu: add function to set the resume boot address for Armada 375 2014-05-08 16:08:14 +00:00
cpu-reset.c ARM: mvebu: start using the CPU reset driver 2014-04-24 05:24:03 +00:00
dove.c bus: mvebu: pass the coherency availability information at init time 2014-04-24 05:00:36 +00:00
headsmp-a9.S ARM: mvebu: add workaround for SMP support for Armada 375 stepping Z1 2014-05-08 16:08:30 +00:00
headsmp.S ARM: mvebu: Split low level functions to manipulate HW coherency 2014-05-08 16:18:54 +00:00
hotplug.c ARM: mvebu: fix some sparse warnings 2013-11-24 03:27:54 +00:00
Kconfig ARM: Kirkwood: t5325: Remove platform device to instantiate audio 2014-05-08 16:23:28 +00:00
kirkwood-pm.c ARM: mvebu: Simplify headers and make local 2014-02-22 21:19:59 +00:00
kirkwood-pm.h ARM: mvebu: Move kirkwood DT boards into mach-mvebu 2014-02-22 21:19:55 +00:00
kirkwood.c ARM: Kirkwood: t5325: Remove platform device to instantiate audio 2014-05-08 16:23:28 +00:00
kirkwood.h ARM: mvebu: Simplify headers and make local 2014-02-22 21:19:59 +00:00
Makefile ARM: mvebu: Fix pmsu compilation when ARMv6 is selected 2014-05-08 16:55:55 +00:00
mvebu-soc-id.c ARM: mvebu: initialize mvebu-soc-id earlier 2014-05-08 16:40:13 +00:00
mvebu-soc-id.h ARM: mvebu: add Armada 375 A0 revision definition 2014-05-08 16:40:14 +00:00
platsmp-a9.c ARM: mvebu: conditionalize Armada 375 SMP workaround 2014-05-08 16:40:15 +00:00
platsmp.c ARM: mvebu: Remove the unused argument of set_cpu_coherent() 2014-05-08 16:18:52 +00:00
pmsu.c ARM: mvebu: register the cpuidle driver for the Armada XP SoCs 2014-05-08 16:19:03 +00:00
pmsu.h arm: mvebu: Add initial support for power managmement service unit 2012-11-21 16:49:36 +01:00
system-controller.c ARM: mvebu: add function to set the resume boot address for Armada 375 2014-05-08 16:08:14 +00:00