[PATCH] nouveau: add coherent BO attribute

Ilia Mirkin imirkin at alum.mit.edu
Thu Mar 12 23:36:28 PDT 2015


Doesn't this require a kernel version that has your other patch? What
happens when this runs on an older kernel? Does it get silently
ignored, or does it end up erroring out? If it errors out, that's
fine. Otherwise some sort of version check should be put in, no?

On Fri, Mar 13, 2015 at 2:27 AM, Alexandre Courbot <acourbot at nvidia.com> wrote:
> Add a flag allowing Nouveau to specify that an object should be coherent
> at allocation time. This is required for some class of objects like
> fences which are randomly-accessed by both the CPU and GPU. This flag
> instructs the kernel driver to make sure the object remains coherent
> even on architectures for which coherency is not guaranteed by the bus.
>
> Signed-off-by: Alexandre Courbot <acourbot at nvidia.com>
> ---
>  include/drm/nouveau_drm.h | 1 +
>  nouveau/abi16.c           | 3 +++
>  nouveau/nouveau.h         | 1 +
>  3 files changed, 5 insertions(+)
>
> diff --git a/include/drm/nouveau_drm.h b/include/drm/nouveau_drm.h
> index b18cad02419b..87aefc5e9d2f 100644
> --- a/include/drm/nouveau_drm.h
> +++ b/include/drm/nouveau_drm.h
> @@ -96,6 +96,7 @@ struct drm_nouveau_setparam {
>  #define NOUVEAU_GEM_DOMAIN_VRAM      (1 << 1)
>  #define NOUVEAU_GEM_DOMAIN_GART      (1 << 2)
>  #define NOUVEAU_GEM_DOMAIN_MAPPABLE  (1 << 3)
> +#define NOUVEAU_GEM_DOMAIN_COHERENT  (1 << 4)
>
>  #define NOUVEAU_GEM_TILE_LAYOUT_MASK 0x0000ff00
>  #define NOUVEAU_GEM_TILE_16BPP       0x00000001
> diff --git a/nouveau/abi16.c b/nouveau/abi16.c
> index ae13821bc0cc..d2d1d0d1942d 100644
> --- a/nouveau/abi16.c
> +++ b/nouveau/abi16.c
> @@ -195,6 +195,9 @@ abi16_bo_init(struct nouveau_bo *bo, uint32_t alignment,
>         if (bo->flags & NOUVEAU_BO_MAP)
>                 info->domain |= NOUVEAU_GEM_DOMAIN_MAPPABLE;
>
> +       if (bo->flags & NOUVEAU_BO_COHERENT)
> +               info->domain |= NOUVEAU_GEM_DOMAIN_COHERENT;
> +
>         if (!(bo->flags & NOUVEAU_BO_CONTIG))
>                 info->tile_flags = NOUVEAU_GEM_TILE_NONCONTIG;
>
> diff --git a/nouveau/nouveau.h b/nouveau/nouveau.h
> index a55e2b020778..4adda0e3594c 100644
> --- a/nouveau/nouveau.h
> +++ b/nouveau/nouveau.h
> @@ -127,6 +127,7 @@ union nouveau_bo_config {
>  #define NOUVEAU_BO_MAP     0x80000000
>  #define NOUVEAU_BO_CONTIG  0x40000000
>  #define NOUVEAU_BO_NOSNOOP 0x20000000
> +#define NOUVEAU_BO_COHERENT 0x10000000
>
>  struct nouveau_bo {
>         struct nouveau_device *device;
> --
> 2.3.2
>


More information about the dri-devel mailing list