[RFC] drm/nouveau: use tile_mode and pte_kind for VM_BIND bo allocations
Dave Airlie
airlied at gmail.com
Sun Apr 28 20:22:51 UTC 2024
This looks like a good start, though I wonder can we just refactor out
the common code from the vma and non-vma paths easier.
Also I wonder should we add a new GETPARAM so userspace can know this
change is available.
Of course we also need a pointer to the userspace implementation to
move forward.
Thanks,
Dave.
On Sun, 28 Apr 2024 at 19:32, Mohamed Ahmed
<mohamedahmedegypt2001 at gmail.com> wrote:
>
> Allows PTE kind and tile mode on BO create with VM_BIND. This is needed to support modifiers in NVK and ensure correctness when dealing with the nouveau GL driver.
>
> Signed-off-by: Mohamed Ahmed <mohamedahmedegypt2001 at gmail.com>
> ---
> drivers/gpu/drm/nouveau/nouveau_bo.c | 24 +++++++++++++++++++-----
> 1 file changed, 19 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
> index db8cbf615..0da0b5286 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_bo.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
> @@ -304,11 +304,25 @@ 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);
> + 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);
> + }
> + nvbo->mode = tile_mode;
>
> /* Determine the desirable target GPU page size for the buffer. */
> for (i = 0; i < vmm->page_nr; i++) {
> --
> 2.44.0
>
More information about the dri-devel
mailing list