From: Daniel Vetter <daniel@ffwll.ch>
To: "Christian König" <christian.koenig@amd.com>
Cc: linux-media <linux-media@vger.kernel.org>,
dri-devel <dri-devel@lists.freedesktop.org>,
linaro-mm-sig@lists.linaro.org,
lkml <linux-kernel@vger.kernel.org>,
Sumit Semwal <sumit.semwal@linaro.org>,
Daniel Vetter <daniel@ffwll.ch>,
"Sharma, Shashank" <Shashank.Sharma@amd.com>
Subject: Re: DMA-buf and uncached system memory
Date: Tue, 16 Feb 2021 10:25:24 +0100 [thread overview]
Message-ID: <YCuPhOT4GhY3RR/6@phenom.ffwll.local> (raw)
In-Reply-To: <91ff0bbb-ea3a-2663-3453-dea96ccd6dd8@amd.com>
On Mon, Feb 15, 2021 at 09:58:08AM +0100, Christian König wrote:
> Hi guys,
>
> we are currently working an Freesync and direct scan out from system memory
> on AMD APUs in A+A laptops.
>
> On problem we stumbled over is that our display hardware needs to scan out
> from uncached system memory and we currently don't have a way to communicate
> that through DMA-buf.
>
> For our specific use case at hand we are going to implement something driver
> specific, but the question is should we have something more generic for
> this?
>
> After all the system memory access pattern is a PCIe extension and as such
> something generic.
Yes it's a problem, and it's a complete mess. So the defacto rules are:
1. importer has to do coherent transactions to snoop cpu caches.
This way both modes work:
- if the buffer is cached, we're fine
- if the buffer is not cached, but the exporter has flushed all the
caches, you're mostly just wasting time on inefficient bus cycles. Also
this doesn't work if your CPU doesn't just drop clean cachelines. Like I
thing some ARM are prone to do, not idea about AMD, Intel is guaranteed
to drop them which is why the uncached scanout for integrated Intel +
amd discrete "works".
2. exporters picks the mode freely, and can even change it at runtime
(i915 does this, since we don't have an "allocate for scanout" flag wired
through consistently). This doesn't work on arm, there the rule is "all
devices in the same system must use the same mode".
3. This should be solved at the dma-buf layer, but the dma-api refuses to
tell you this information (at least for dma_alloc_coherent). And I'm not
going to deal with the bikeshed that would bring into my inbox. Or at
least there's always been screaming that drivers shouldn't peek behind the
abstraction.
So I think if AMD also guarantees to drop clean cachelines just do the
same thing we do right now for intel integrated + discrete amd, but in
reserve. It's fragile, but it does work.
What we imo shouldn't do is driver private interfaces here, that's just
going to make the problem worse long term. Or at least driver-private
interfaces that spawn across drivers behind dma-buf, because imo this is
really a problem that dma-buf should solve.
If you do want to solve this at the dma-buf level I can try and point you
at the respective i915 and amdgpu code that makes the magic work - I've
had to fix it a few times in the past. I'm not sure whether we'd need to
pass the dynamic nature through though, i.e. whether we want to be able to
scan out imported dma-buf and hence request they be used in uncached mode.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
next prev parent reply other threads:[~2021-02-16 9:26 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-15 8:58 DMA-buf and uncached system memory Christian König
2021-02-15 9:06 ` Simon Ser
2021-02-15 9:34 ` Christian König
2021-02-15 11:53 ` Lucas Stach
2021-02-15 12:04 ` Christian König
2021-02-15 12:16 ` Lucas Stach
2021-02-15 12:25 ` Christian König
2021-02-15 14:41 ` David Laight
2021-02-15 14:54 ` [Linaro-mm-sig] " Christian König
2021-02-15 9:49 ` Thomas Zimmermann
2021-02-15 12:00 ` Thomas Zimmermann
2021-02-15 12:10 ` Christian König
2021-02-15 20:46 ` Nicolas Dufresne
2021-02-15 20:39 ` Nicolas Dufresne
[not found] ` <5822b325-766e-ce3c-50eb-d7f54f14fd0b@mediatek.com>
[not found] ` <39f7f41a-af8d-4700-37da-9401455afb98@amd.com>
2022-06-21 15:42 ` Nicolas Dufresne
2022-06-22 9:05 ` [Linaro-mm-sig] " Christian König
2021-02-16 9:25 ` Daniel Vetter [this message]
2022-06-22 19:39 ` Nicolas Dufresne
2022-06-22 23:34 ` Daniel Stone
2022-06-23 6:59 ` Christian König
2022-06-23 7:13 ` Pekka Paalanen
2022-06-23 7:26 ` Christian König
2022-06-23 8:04 ` Lucas Stach
2022-06-23 8:14 ` Christian König
2022-06-23 8:58 ` Lucas Stach
2022-06-23 9:09 ` Christian König
2022-06-23 9:33 ` Lucas Stach
2022-06-23 9:46 ` Christian König
2022-06-23 10:13 ` Lucas Stach
2022-06-23 11:10 ` Christian König
2022-06-23 11:27 ` Daniel Stone
2022-06-23 11:32 ` Christian König
2022-06-24 22:02 ` [Linaro-mm-sig] " Daniel Vetter
2022-07-04 13:48 ` Christian König
2022-08-09 14:46 ` Daniel Vetter
2022-08-10 5:55 ` Christian König
2022-06-23 11:29 ` Lucas Stach
2022-06-23 11:54 ` Christian König
2022-06-23 12:14 ` Lucas Stach
2022-06-23 12:52 ` Christian König
2022-06-23 15:26 ` Lucas Stach
2022-06-24 6:54 ` Christian König
2022-06-24 8:10 ` Lucas Stach
2022-06-27 13:54 ` Nicolas Dufresne
2022-06-27 14:06 ` Lucas Stach
2022-06-27 14:30 ` Nicolas Dufresne
2022-06-27 13:51 ` Nicolas Dufresne
2022-06-23 8:13 ` Thomas Zimmermann
2022-06-23 8:26 ` Christian König
2022-06-23 8:42 ` Thomas Zimmermann
2022-08-09 15:01 ` Rob Clark
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=YCuPhOT4GhY3RR/6@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=Shashank.Sharma@amd.com \
--cc=christian.koenig@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=linaro-mm-sig@lists.linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=sumit.semwal@linaro.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