From: arnd@arndb.de (Arnd Bergmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [Linaro-acpi] [PATCH 2/2] ACPI / scan: Parse _CCA and setup device coherency
Date: Fri, 08 May 2015 16:08:53 +0200 [thread overview]
Message-ID: <2927907.rePQ55aASC@wuerfel> (raw)
In-Reply-To: <20150501110644.GF27755@e104818-lin.cambridge.arm.com>
On Friday 01 May 2015 12:06:44 Catalin Marinas wrote:
>
> > Note that there are lots of ways in which you could have noncoherent DMA:
> > the default on ARM32 is that it requires uncached access or explicit
> > cache flushes, but it's also possible to have an SMP system where a device
> > is only coherent with some of the CPUs and requires explicit synchronization
> > (not flushes) otherwise. In a multi-level cache hierarchy, there could be
> > all sorts of combinations of flushes and syncs you would need to do.
> >
> > With DT, we handle this using SoC-specific overrides for platforms that
> > are noncoherent in funny ways, see
> > http://lxr.free-electrons.com/source/arch/arm/mach-mvebu/coherency.c?v=3.18#L263
> > for instance.
>
> It looks like mach-mvebu no longer needs this, according to commit
> 1bd4d8a6de5c (ARM: mvebu: use arm_coherent_dma_ops and re-enable hardware
> I/O coherency).
Yes, Thomas Petazzoni found a way to configure that chip to essentially
provide PCI semantics where an MMIO read from a devices ensures that all
previous DMA has completed, which made the sync unnecessary. I believe
Marvell recommends against using that mode for performance reasons,
and they still use their own manual syncs in their vendor kernel.
> Even if some hardware needs this, it's usually because it has some
> broken assumptions about barriers which most likely are architecture
> non-compliant. We can work around it on a case by case basis (SoC
> quirks). One option would be to disable coherency altogether for that
> device, even if the performance is affected (e.g. no partial coherency).
> Another possibility may be to add a bus driver for that broken
> interconnect which installs its own dma ops for each device attached.
Whether the Armada XP example is broken or not is really a matter of
perspective. I would count it broken on the basis that is does not
match what the Linux DMA and MMIO APIs expect, but you can well build
an OS around their semantics.
> > If we just disallow DMA to devices that are marked with _CCA=0
> > in ACPI, we can avoid this case, or discuss it by the time someone has hardware
> > that wants it, and then make a more informed decision about it.
>
> I don't think we should disallow DMA to devices with _CCA == 0 (only to
> those that don't have a _CCA property at all) as long as _CCA == 0 has
> clear semantics like only architected cache maintenance required (and
> that's what the ARMv8 ARM requires from compliant system caches).
Even if we exclude all cases in which the behavior may be unexpected,
there is still the other point I raised initially:
what would that be good for?
Can you think of a case where a server system has a reason to use
a device in noncoherent mode? I think it's more likely to be a case
where a device got misconfigured accidentally by the firmware, and
we're better off warning about that in the kernel than trying to prepare
for an unknown hardware that might use an obscure feature of the spec.
Arnd
next prev parent reply other threads:[~2015-05-08 14:08 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-29 13:44 [PATCH 0/2] ACPI : Introduce support for _CCA object Suravee Suthikulpanit
2015-04-29 13:44 ` [PATCH 1/2] arm/arm64: ACPI: Introduce CONFIG_ACPI_MUST_HAVE_CCA Suravee Suthikulpanit
2015-04-29 14:04 ` Catalin Marinas
2015-04-29 14:31 ` Suravee Suthikulpanit
2015-04-29 14:42 ` Catalin Marinas
2015-04-29 14:44 ` Suravee Suthikulpanit
2015-04-30 13:47 ` Hanjun Guo
2015-04-30 13:50 ` Will Deacon
2015-04-30 14:14 ` Hanjun Guo
2015-04-30 15:01 ` Lorenzo Pieralisi
2015-04-29 13:44 ` [PATCH 2/2] ACPI / scan: Parse _CCA and setup device coherency Suravee Suthikulpanit
2015-04-29 14:03 ` Arnd Bergmann
2015-04-29 14:45 ` Suravee Suthikulpanit
2015-04-29 14:47 ` [Linaro-acpi] " Arnd Bergmann
2015-04-29 14:57 ` Suthikulpanit, Suravee
2015-04-29 15:39 ` Al Stone
2015-04-29 16:15 ` Arnd Bergmann
2015-04-29 15:54 ` Arnd Bergmann
2015-05-01 11:06 ` Catalin Marinas
2015-05-08 14:08 ` Arnd Bergmann [this message]
2015-05-11 17:10 ` Catalin Marinas
2015-05-11 17:24 ` Robin Murphy
2015-04-29 16:25 ` Arnd Bergmann
2015-04-29 21:53 ` Suravee Suthikulpanit
2015-04-30 8:23 ` [Linaro-acpi] " Arnd Bergmann
2015-04-30 10:41 ` Will Deacon
2015-04-30 10:47 ` Arnd Bergmann
2015-04-30 11:07 ` Will Deacon
2015-04-30 11:24 ` Arnd Bergmann
2015-04-30 11:46 ` Will Deacon
2015-04-30 13:03 ` Arnd Bergmann
2015-04-30 13:13 ` Will Deacon
2015-04-30 13:52 ` Arnd Bergmann
2015-04-30 15:55 ` Catalin Marinas
2015-05-08 14:01 ` Arnd Bergmann
2015-04-30 23:39 ` Suravee Suthikulanit
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2927907.rePQ55aASC@wuerfel \
--to=arnd@arndb.de \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).