nouveau: Stash supported sector layout in screen
authorJames Jones <jajones@nvidia.com>
Fri, 13 Sep 2019 21:08:27 +0000 (14:08 -0700)
committerMarge Bot <eric+marge@anholt.net>
Wed, 17 Feb 2021 03:52:53 +0000 (03:52 +0000)
Older Tegra GPUs use a different sector bit swizzling layout than desktop
and Xavier GPUs. Hence their format modifiers must be differentiated from
those of other GPUs.  As a precursor to supporting more expressive block
linear format modifiers, deduce the sector layout used for a given GPU from
its chipset and stash the layout in the nouveau screen structure.

Signed-off-by: James Jones <jajones@nvidia.com>
Tested-by: Karol Herbst <kherbst@redhat.com>
Tested-by: Simon Ser <contact@emersion.fr>
Reviewed-by: Karol Herbst <kherbst@redhat.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3724>

src/gallium/drivers/nouveau/nouveau_screen.c
src/gallium/drivers/nouveau/nouveau_screen.h

index 04d8e6f30d2a0e6bdbefdcd87d9c0f2b03dfb308..80ef7a12c44d56d2cb90a0b203a3a4d817843365 100644 (file)
@@ -275,6 +275,18 @@ nouveau_screen_init(struct nouveau_screen *screen, struct nouveau_device *dev)
       } while ((start + screen->svm_cutout_size) < BITFIELD64_MASK(limit_bit));
    }
 
+   switch (dev->chipset) {
+   case 0x0ea: /* TK1, GK20A */
+   case 0x12b: /* TX1, GM20B */
+   case 0x13b: /* TX2, GP10B */
+      screen->tegra_sector_layout = true;
+      break;
+   default:
+      /* Xavier's GPU and everything else */
+      screen->tegra_sector_layout = false;
+      break;
+   }
+
    /*
     * Set default VRAM domain if not overridden
     */
index 2eb6320b2ec350169293190e0b3627105ebae68d..1176c54db3d96624181e4fde0edbfd3b63d2da2f 100644 (file)
@@ -58,6 +58,7 @@ struct nouveau_screen {
    int64_t cpu_gpu_time_delta;
 
    bool hint_buf_keep_sysmem_copy;
+   bool tegra_sector_layout;
 
    unsigned vram_domain;