Displaying 20 results from an estimated 49 matches for "ttm_dma_tt".
2018 Feb 27
4
[PATCH 4/5] drm/ttm: add ttm_sg_tt_init
Hi guys,
at least on amdgpu and radeon the page array allocated by
ttm_dma_tt_init is completely unused in the case of DMA-buf sharing. So
I'm trying to get rid of that by only allocating the DMA address array.
Now the only other user of DMA-buf together with ttm_dma_tt_init is
Nouveau. So my question is are you guys using the page array anywhere in
your kernel drive...
2018 Mar 05
0
[PATCH 4/5] drm/ttm: add ttm_sg_tt_init
Ping?
Am 27.02.2018 um 13:07 schrieb Christian König:
> Hi guys,
>
> at least on amdgpu and radeon the page array allocated by
> ttm_dma_tt_init is completely unused in the case of DMA-buf sharing.
> So I'm trying to get rid of that by only allocating the DMA address
> array.
>
> Now the only other user of DMA-buf together with ttm_dma_tt_init is
> Nouveau. So my question is are you guys using the page array anywh...
2014 May 19
0
[PATCH 2/4] drm/ttm: introduce dma cache sync helpers
...ttm/ttm_tt.c
@@ -38,6 +38,7 @@
#include <linux/swap.h>
#include <linux/slab.h>
#include <linux/export.h>
+#include <linux/dma-mapping.h>
#include <drm/drm_cache.h>
#include <drm/drm_mem_util.h>
#include <drm/ttm/ttm_module.h>
@@ -248,6 +249,30 @@ void ttm_dma_tt_fini(struct ttm_dma_tt *ttm_dma)
}
EXPORT_SYMBOL(ttm_dma_tt_fini);
+void ttm_dma_tt_cache_sync_for_device(struct ttm_dma_tt *ttm_dma,
+ struct device *dev)
+{
+ int i;
+
+ for (i = 0; i < ttm_dma->ttm.num_pages; i++) {
+ dma_sync_single_for_device(dev, ttm_dma->dma_address[i]...
2014 Jun 24
0
[PATCH v2 2/3] drm/ttm: introduce dma cache sync helpers
...ttm/ttm_tt.c
@@ -38,6 +38,7 @@
#include <linux/swap.h>
#include <linux/slab.h>
#include <linux/export.h>
+#include <linux/dma-mapping.h>
#include <drm/drm_cache.h>
#include <drm/drm_mem_util.h>
#include <drm/ttm/ttm_module.h>
@@ -248,6 +249,30 @@ void ttm_dma_tt_fini(struct ttm_dma_tt *ttm_dma)
}
EXPORT_SYMBOL(ttm_dma_tt_fini);
+void ttm_dma_tt_cache_sync_for_device(struct ttm_dma_tt *ttm_dma,
+ struct device *dev)
+{
+ unsigned long i;
+
+ for (i = 0; i < ttm_dma->ttm.num_pages; i++) {
+ dma_sync_single_for_device(dev, ttm_dma->dma_...
2014 Jul 10
2
[PATCH v4 4/6] drm/nouveau: synchronize BOs when required
...ct nouveau_bo *nvbo)
> ttm_bo_kunmap(&nvbo->kmap);
> }
>
> +void
> +nouveau_bo_sync_for_device(struct nouveau_bo *nvbo)
> +{
> + struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev);
> + struct nouveau_device *device = nouveau_dev(drm->dev);
> + struct ttm_dma_tt *ttm_dma = (struct ttm_dma_tt *)nvbo->bo.ttm;
> + int i;
> +
> + if (!ttm_dma)
> + return;
> +
> + if (nv_device_is_cpu_coherent(device) || nvbo->force_coherent)
> + return;
Is the is_cpu_coherent check really required? On coherent platforms the
sync_for_foo should be...
2014 Jul 08
8
[PATCH v4 0/6] drm: nouveau: memory coherency on ARM
Another revision of this patchset critical for GK20A to operate.
Previous attempts were exclusively using either TTM's regular page allocator or
the DMA API one. Both have their advantages and drawbacks: the page allocator is
fast but requires explicit synchronization on non-coherent architectures,
whereas the DMA allocator always returns coherent memory, but is also slower,
creates a
2013 Aug 28
2
[PATCH 3/6] drm/nouveau: hook up cache sync functions
...drivers/gpu/drm/nouveau/nouveau_bo.c
> @@ -411,6 +411,10 @@ nouveau_bo_validate(struct nouveau_bo *nvbo, bool interruptible,
> {
> int ret;
>
> + if (nvbo->bo.ttm && nvbo->bo.ttm->caching_state == tt_cached)
You don't want to do it also for tt_wc ?
> + ttm_dma_tt_cache_sync_for_device((struct ttm_dma_tt *)nvbo->bo.ttm,
> + &nouveau_bdev(nvbo->bo.ttm->bdev)->dev->pdev->dev);
> +
> ret = ttm_bo_validate(&nvbo->bo, &nvbo->placement,
> interruptible, no_wait_gpu);
> if (ret)
> diff --git a/dr...
2014 May 19
2
[PATCH 3/4] drm/nouveau: hook up cache sync functions
...nc_for_cpu(struct nouveau_bo *nvbo)
> +{
> + struct nouveau_device *device;
> + struct ttm_tt *ttm = nvbo->bo.ttm;
> +
> + device = nouveau_dev(nouveau_bdev(ttm->bdev)->dev);
> +
> + if (nvbo->bo.ttm && nvbo->bo.ttm->caching_state == tt_cached)
> + ttm_dma_tt_cache_sync_for_cpu((struct ttm_dma_tt *)nvbo->bo.ttm,
> + nv_device_base(device));
Can we be certain at this point that the struct ttm_tt is in fact a
struct ttm_dma_tt?
> diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.h b/drivers/gpu/drm/nouveau/nouveau_bo.h
[...]
> +#if I...
2014 May 19
8
[PATCH 0/4] drm/ttm: nouveau: memory coherency fixes for ARM
This small series introduces TTM helper functions as well as Nouveau hooks that
are needed to ensure buffer coherency on ARM. Most of this series is a
forward-port of some patches Lucas Stach sent last year and that are also
needed for Nouveau GK20A support:
http://lists.freedesktop.org/archives/nouveau/2013-August/014026.html
Another patch takes care of flushing the CPU write-buffer when
2014 Jul 08
0
[PATCH v4 4/6] drm/nouveau: synchronize BOs when required
....c
@@ -402,6 +402,60 @@ nouveau_bo_unmap(struct nouveau_bo *nvbo)
ttm_bo_kunmap(&nvbo->kmap);
}
+void
+nouveau_bo_sync_for_device(struct nouveau_bo *nvbo)
+{
+ struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev);
+ struct nouveau_device *device = nouveau_dev(drm->dev);
+ struct ttm_dma_tt *ttm_dma = (struct ttm_dma_tt *)nvbo->bo.ttm;
+ int i;
+
+ if (!ttm_dma)
+ return;
+
+ if (nv_device_is_cpu_coherent(device) || nvbo->force_coherent)
+ return;
+
+ if (nv_device_is_pci(device)) {
+ for (i = 0; i < ttm_dma->ttm.num_pages; i++)
+ pci_dma_sync_single_for_device(device...
2014 Jun 24
4
[PATCH v2 0/3] drm/ttm: nouveau: memory coherency for ARM
For this v2 I have fixed the patches that are non-controversial (all Lucas' :))
and am resubmitting them in the hope that they will get merged. This will
just leave the issue of Nouveau system-memory buffers mapping to be solved.
This issue is quite complex, so let me summarize the situation and the data
I have at hand. ARM caching is like a quantum world where Murphy's law
constantly
2014 Oct 27
4
[PATCH v5 0/4] drm: nouveau: memory coherency on ARM
...a problem for nouveau_ttm_tt_populate()
since we need to rely on a purely TTM-based heuristic to decide how to
allocate the memory. The heuristic we are using works, but it makes the
code harder to understand than if we could just access the nouveau_bo.
nouveau_sgdma_create_ttm() always allocates a ttm_dma_tt structure,
which is wrong but happens to suit us for now. Still, this part of the
code could be rewritten much more cleanly if only we could access the
nouveau_bo instance in these functions.
I proposed some time ago to address this by making the ttm_tt_create
hook take a pointer to a ttm_bo_objec...
2013 Aug 28
11
[PATCH 0/6] Nouveau on ARM fixes
This is the first set of patches to make Nouveau work
on Tegra. Those are only the obvious correctness fixes,
a lot of optimization work remains to be done, but at least
it's enough to get accel working and let the machine survive
a piglit run.
A new BO flag is introduced to allow userspace to hint the
kernel about possible optimizations.
Lucas Stach (6):
drm/ttm: recognize ARM arch in
2014 Jul 11
1
[PATCH v4 4/6] drm/nouveau: synchronize BOs when required
...> >> }
> >>
> >>+void
> >>+nouveau_bo_sync_for_device(struct nouveau_bo *nvbo)
> >>+{
> >>+ struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev);
> >>+ struct nouveau_device *device = nouveau_dev(drm->dev);
> >>+ struct ttm_dma_tt *ttm_dma = (struct ttm_dma_tt *)nvbo->bo.ttm;
> >>+ int i;
> >>+
> >>+ if (!ttm_dma)
> >>+ return;
> >>+
> >>+ if (nv_device_is_cpu_coherent(device) || nvbo->force_coherent)
> >>+ return;
> >
> >Is the is_cpu_coheren...
2018 Nov 07
0
[PATCH] drm/qxl: use ttm_tt
qxl device will not dma, so we don't need ttm_dma_tt. Go use ttm_tt
instead, to avoid wasting resources (swiotlb bounce buffers for
example).
Signed-off-by: Gerd Hoffmann <kraxel at redhat.com>
---
drivers/gpu/drm/qxl/qxl_ttm.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/driv...
2013 Aug 28
0
[PATCH 3/6] drm/nouveau: hook up cache sync functions
...o do it also for tt_wc ?
>
No the point of using writecombined memory for BOs is to explicitly
avoid the need for this cache sync. An uncached MMIO read from the
device should already flush out all writecombining buffers and this read
is always happening when submitting a pushbuf.
> > + ttm_dma_tt_cache_sync_for_device((struct ttm_dma_tt *)nvbo->bo.ttm,
> > + &nouveau_bdev(nvbo->bo.ttm->bdev)->dev->pdev->dev);
> > +
> > ret = ttm_bo_validate(&nvbo->bo, &nvbo->placement,
> > interruptible, no_wait_gpu);
> > if (...
2013 Aug 28
0
[PATCH 3/6] drm/nouveau: hook up cache sync functions
...dex af20fba..f4a2eb9 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -411,6 +411,10 @@ nouveau_bo_validate(struct nouveau_bo *nvbo, bool interruptible,
{
int ret;
+ if (nvbo->bo.ttm && nvbo->bo.ttm->caching_state == tt_cached)
+ ttm_dma_tt_cache_sync_for_device((struct ttm_dma_tt *)nvbo->bo.ttm,
+ &nouveau_bdev(nvbo->bo.ttm->bdev)->dev->pdev->dev);
+
ret = ttm_bo_validate(&nvbo->bo, &nvbo->placement,
interruptible, no_wait_gpu);
if (ret)
diff --git a/drivers/gpu/drm/nouveau/nouveau_...
2014 Jul 11
0
[PATCH v4 4/6] drm/nouveau: synchronize BOs when required
...m_bo_kunmap(&nvbo->kmap);
>> }
>>
>> +void
>> +nouveau_bo_sync_for_device(struct nouveau_bo *nvbo)
>> +{
>> + struct nouveau_drm *drm = nouveau_bdev(nvbo->bo.bdev);
>> + struct nouveau_device *device = nouveau_dev(drm->dev);
>> + struct ttm_dma_tt *ttm_dma = (struct ttm_dma_tt *)nvbo->bo.ttm;
>> + int i;
>> +
>> + if (!ttm_dma)
>> + return;
>> +
>> + if (nv_device_is_cpu_coherent(device) || nvbo->force_coherent)
>> + return;
>
> Is the is_cpu_coherent check really required? On coherent...
2014 May 19
0
[PATCH 3/4] drm/nouveau: hook up cache sync functions
...EAU_NEED_CACHE_SYNC
+void
+nouveau_bo_sync_for_cpu(struct nouveau_bo *nvbo)
+{
+ struct nouveau_device *device;
+ struct ttm_tt *ttm = nvbo->bo.ttm;
+
+ device = nouveau_dev(nouveau_bdev(ttm->bdev)->dev);
+
+ if (nvbo->bo.ttm && nvbo->bo.ttm->caching_state == tt_cached)
+ ttm_dma_tt_cache_sync_for_cpu((struct ttm_dma_tt *)nvbo->bo.ttm,
+ nv_device_base(device));
+}
+
+void
+nouveau_bo_sync_for_device(struct nouveau_bo *nvbo)
+{
+ struct ttm_tt *ttm = nvbo->bo.ttm;
+
+ if (ttm && ttm->caching_state == tt_cached) {
+ struct nouveau_device *device;
+
+...
2014 May 19
2
[PATCH 2/4] drm/ttm: introduce dma cache sync helpers
....com>
> ---
> drivers/gpu/drm/ttm/ttm_tt.c | 25 +++++++++++++++++++++++++
> include/drm/ttm/ttm_bo_driver.h | 28 ++++++++++++++++++++++++++++
> 2 files changed, 53 insertions(+)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c
[...]
> +void ttm_dma_tt_cache_sync_for_device(struct ttm_dma_tt *ttm_dma,
> + struct device *dev)
> +{
> + int i;
This should probably be unsigned long to match the type of
ttm_dma->ttm.num_pages.
Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not availab...