[PATCH v4] drm/nouveau: use tile_mode and pte_kind for VM_BIND bo allocations

Mohamed Ahmed mohamedahmedegypt2001 at gmail.com
Mon May 13 21:15:20 UTC 2024


Hey,

Understood. Thanks a lot and sorry for any inconvenience.

Mohamed

On Mon, May 13, 2024 at 11:28 PM Danilo Krummrich <dakr at redhat.com> wrote:

> Hi Mohamed,
>
> Thank you for fixing this up!
>
> On 5/9/24 22:43, Mohamed Ahmed wrote:
> > Allows PTE kind and tile mode on BO create with VM_BIND,
> > and adds a GETPARAM to indicate this change. This is needed to support
>
> It's usually better to use imperative verb form for commit messages. No
> need to send a new version though.
>
> > modifiers in NVK and ensure correctness when dealing with the nouveau
> > GL driver.
> >
> > The userspace modifiers implementation this is for can be found here:
> > https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24795
> >
> > Fixes: b88baab82871 ("drm/nouveau: implement new VM_BIND uAPI")
> > Signed-off-by: Mohamed Ahmed <mohamedahmedegypt2001 at gmail.com>
>
> Applied to drm-misc-next-fixes.
>
> Generally, please make sure to use scripts/get_maintainer.pl before
> sending
> patches.
>
> - Danilo
>
> > ---
> >   drivers/gpu/drm/nouveau/nouveau_abi16.c |  3 ++
> >   drivers/gpu/drm/nouveau/nouveau_bo.c    | 44 +++++++++++--------------
> >   include/uapi/drm/nouveau_drm.h          |  7 ++++
> >   3 files changed, 29 insertions(+), 25 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/nouveau/nouveau_abi16.c
> b/drivers/gpu/drm/nouveau/nouveau_abi16.c
> > index 80f74ee0f..47e53e17b 100644
> > --- a/drivers/gpu/drm/nouveau/nouveau_abi16.c
> > +++ b/drivers/gpu/drm/nouveau/nouveau_abi16.c
> > @@ -272,6 +272,9 @@ nouveau_abi16_ioctl_getparam(ABI16_IOCTL_ARGS)
> >               getparam->value =
> (u64)ttm_resource_manager_usage(vram_mgr);
> >               break;
> >       }
> > +     case NOUVEAU_GETPARAM_HAS_VMA_TILEMODE:
> > +             getparam->value = 1;
> > +             break;
> >       default:
> >               NV_PRINTK(dbg, cli, "unknown parameter %lld\n",
> getparam->param);
> >               return -EINVAL;
> > diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c
> b/drivers/gpu/drm/nouveau/nouveau_bo.c
> > index db8cbf615..186add400 100644
> > --- a/drivers/gpu/drm/nouveau/nouveau_bo.c
> > +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
> > @@ -241,28 +241,28 @@ nouveau_bo_alloc(struct nouveau_cli *cli, u64
> *size, int *align, u32 domain,
> >       }
> >
> >       nvbo->contig = !(tile_flags & NOUVEAU_GEM_TILE_NONCONTIG);
> > -     if (!nouveau_cli_uvmm(cli) || internal) {
> > -             /* for BO noVM allocs, don't assign kinds */
> > -             if (cli->device.info.family >= NV_DEVICE_INFO_V0_FERMI) {
> > -                     nvbo->kind = (tile_flags & 0x0000ff00) >> 8;
> > -                     if (!nvif_mmu_kind_valid(mmu, nvbo->kind)) {
> > -                             kfree(nvbo);
> > -                             return ERR_PTR(-EINVAL);
> > -                     }
> >
> > -                     nvbo->comp = mmu->kind[nvbo->kind] != nvbo->kind;
> > -             } else if (cli->device.info.family >=
> NV_DEVICE_INFO_V0_TESLA) {
> > -                     nvbo->kind = (tile_flags & 0x00007f00) >> 8;
> > -                     nvbo->comp = (tile_flags & 0x00030000) >> 16;
> > -                     if (!nvif_mmu_kind_valid(mmu, nvbo->kind)) {
> > -                             kfree(nvbo);
> > -                             return ERR_PTR(-EINVAL);
> > -                     }
> > -             } else {
> > -                     nvbo->zeta = (tile_flags & 0x00000007);
> > +     if (cli->device.info.family >= NV_DEVICE_INFO_V0_FERMI) {
> > +             nvbo->kind = (tile_flags & 0x0000ff00) >> 8;
> > +             if (!nvif_mmu_kind_valid(mmu, nvbo->kind)) {
> > +                     kfree(nvbo);
> > +                     return ERR_PTR(-EINVAL);
> > +             }
> > +
> > +             nvbo->comp = mmu->kind[nvbo->kind] != nvbo->kind;
> > +     } else if (cli->device.info.family >= NV_DEVICE_INFO_V0_TESLA) {
> > +             nvbo->kind = (tile_flags & 0x00007f00) >> 8;
> > +             nvbo->comp = (tile_flags & 0x00030000) >> 16;
> > +             if (!nvif_mmu_kind_valid(mmu, nvbo->kind)) {
> > +                     kfree(nvbo);
> > +                     return ERR_PTR(-EINVAL);
> >               }
> > -             nvbo->mode = tile_mode;
> > +     } else {
> > +             nvbo->zeta = (tile_flags & 0x00000007);
> > +     }
> > +     nvbo->mode = tile_mode;
> >
> > +     if (!nouveau_cli_uvmm(cli) || internal) {
> >               /* Determine the desirable target GPU page size for the
> buffer. */
> >               for (i = 0; i < vmm->page_nr; i++) {
> >                       /* Because we cannot currently allow VMM maps to
> fail
> > @@ -304,12 +304,6 @@ nouveau_bo_alloc(struct nouveau_cli *cli, u64
> *size, int *align, u32 domain,
> >               }
> >               nvbo->page = vmm->page[pi].shift;
> >       } else {
> > -             /* reject other tile flags when in VM mode. */
> > -             if (tile_mode)
> > -                     return ERR_PTR(-EINVAL);
> > -             if (tile_flags & ~NOUVEAU_GEM_TILE_NONCONTIG)
> > -                     return ERR_PTR(-EINVAL);
> > -
> >               /* Determine the desirable target GPU page size for the
> buffer. */
> >               for (i = 0; i < vmm->page_nr; i++) {
> >                       /* Because we cannot currently allow VMM maps to
> fail
> > diff --git a/include/uapi/drm/nouveau_drm.h
> b/include/uapi/drm/nouveau_drm.h
> > index cd84227f1..5402f77ee 100644
> > --- a/include/uapi/drm/nouveau_drm.h
> > +++ b/include/uapi/drm/nouveau_drm.h
> > @@ -68,6 +68,13 @@ extern "C" {
> >    */
> >   #define NOUVEAU_GETPARAM_VRAM_USED 19
> >
> > +/*
> > + * NOUVEAU_GETPARAM_HAS_VMA_TILEMODE
> > + *
> > + * Query whether tile mode and PTE kind are accepted with VM allocs or
> not.
> > + */
> > +#define NOUVEAU_GETPARAM_HAS_VMA_TILEMODE 20
> > +
> >   struct drm_nouveau_getparam {
> >       __u64 param;
> >       __u64 value;
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20240514/9a0df765/attachment-0001.htm>


More information about the dri-devel mailing list