mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 22:14:03 +02:00
arm64: mm: Treat all devices as dma-coherent when CLIDR_EL1.LoC == 0
On systems where CLIDR_EL1.LoC == 0, no cache maintenance is required when cleaning or invalidating to the Point of Coherency and therefore all DMA agents can be treated as coherent. Extend arch_setup_dma_ops() to take CLIDR_EL1.LoC into account when setting the DMA ops for a device, emitting a warning message if the firmware advertises a non-coherent device on a fully coherent system. Cc: Steffen Eiden <seiden@linux.ibm.com> Cc: Andreas Grapentin <gra@linux.ibm.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Marc Zyngier <maz@kernel.org> Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
parent
a13c140cc2
commit
233b5554e0
|
|
@ -42,6 +42,11 @@ void arch_setup_dma_ops(struct device *dev, bool coherent)
|
|||
{
|
||||
int cls = cache_line_size_of_cpu();
|
||||
|
||||
if (!coherent && !CLIDR_LOC(read_sysreg(clidr_el1))) {
|
||||
dev_warn(dev, "CLIDR_EL1.LoC == 0, treating as coherent\n");
|
||||
coherent = true;
|
||||
}
|
||||
|
||||
WARN_TAINT(!coherent && cls > ARCH_DMA_MINALIGN,
|
||||
TAINT_CPU_OUT_OF_SPEC,
|
||||
"%s %s: ARCH_DMA_MINALIGN smaller than CTR_EL0.CWG (%d < %d)",
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user