From nobody Mon Feb 9 07:56:01 2026 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 30F782E4257 for ; Thu, 30 Oct 2025 23:04:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761865465; cv=none; b=RIJDuFzwK5CAegec789W8BkTYn47K1bmHmMCg+0gbG1ISLmQFor5av9EmLJBp9rv3ZIsMzY/svxvJINluJc0QP7VX8E4BC1DZSgcUd5KnF/RScXZzue18X5rtPHlNMSr4U8Dk1C0HpreMlyK6Ghysjwl5zFgFUaPe4YmRUv/F8o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761865465; c=relaxed/simple; bh=RyudmJXPWxWDQI94X+73YWpu+3qoRpwAgYxRsvc+kyA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AuhsmEJVODoEMFljULi8g+PWVHkk9bVf6dGVyDeShP6yIdZPdZEv9gab2waX98fCir62r7QZBtns+hjmlYKFk3dUH19bbtxbXnFL5YVOrEqdK6SoVWszk9B1w8yh7Uu70I/w/m5TwaXjlVym4sU74KddG+3/rxwT85nBUXcewWs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=KPsqzox5; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KPsqzox5" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4711b95226dso20561615e9.0 for ; Thu, 30 Oct 2025 16:04:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761865461; x=1762470261; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=AKZ8AsjriREu28KWguGoIt9B8lVGieRdwO7NRV/7JlQ=; b=KPsqzox5RQMvZOGblVkNfGNo/8KXIf/9/633/0iqec/5KeFCjnnSu3PbbTP31BFFs0 wZWNTPV2XQyVecc0jmzjgJWY7aOBJpLkHxjlMz1w/0+8tKchEUdcDd1mH71INZsnjVeu QLi7DBs18NCbTGtLKQhj72l9ULVqKhl196A6wWdkZ8yRuE9XZr01B9rBJE9CXyo/Rx6N 3tIyvyxN7ZjLIcwEd4iF5yx87rl7tRjDSnhJZaDZEi/YL/wQxJvPjeOJE6ETUo+L0k64 Ho8DftlMMAWy9xG6RXSv+6uKQgYwYWI7BtbulAhXPioFZAgCliqV5FBGXtreOuMqAXX4 99Gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761865461; x=1762470261; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AKZ8AsjriREu28KWguGoIt9B8lVGieRdwO7NRV/7JlQ=; b=fqhQo60yadkTzpmXzP0LENFdqxruXyUPFahnyb+4dyq+5I3WnkRznlVNNawG0aovmJ 5o+sIrmdpKEra6KUotg1AJR7ScMSGECIgcRekU0ngZpLJ7CvLlZxE6rEgTKp5jYX/0qk hAPvD+QscexrE+iRG7NCF1y6NPIs1krqZVQM5u9MyuC718MdoD/9F1vGch5nn1ZyC9uu 4TAzLUe4yBZUvLwFAXv8SJWnpqOODhwuEGNSALuAj0+NP9l/RXvUcq4B3oj33txeOT5e svmWuqCkJtHSC2WkrScphmdZ4GCsgV9QN5JbR4AztjRGbIpbJ7ezTnkgUKB64z7d+1oT eecw== X-Gm-Message-State: AOJu0YztGwt5JoDwv5DGUXFZyQIYRFwEVSdv1Y41oF70fiOUTbWL8aE6 q8z1+o+zZZVpfzwEFVBpIcdnuayCFIr4fuQvgkMNXGBKgxBoRUoTYafPOCEYpAFz X-Gm-Gg: ASbGnctZWtfles6KoYkXp42DfUfLj9ifj3TnpFaDU8TmzcZx9NjCw0Owqp1oQKw0Ex7 eGMWXWYk552w8SH64ocsGPEWVpbL3aJqwA/OMNRDw9ogUK4d9vA5EG0HvTluDwenZKlPzvl4Q9O QotvlkunYSy/qQ4qYOKse8eicmlO5kPjEuAm1ih8AL6EssgKzHxNlW+IO9HRl9uDbcNguDXmCT5 ePMw2kggx6k6dnW+72jjAHDzBeO2TAmdtDNoSFWZCVgiNEN1X9kQ5ZU1iJDclYAdD0J1c+7puB8 YAJoGUoEcEjDI7xx9LePauzXsashwod5c2tUB8xCurtrigzARll3TVVsjLQxXfpPepatCHhkYJa 8MyMilm/vI5gYp8LK1bayeHAQINUIhf67AFnE4B51VhZ1MaKnnH8wffvpZgb2VeGpfmOP/NMFOz aOgVvS9NhM5W4= X-Google-Smtp-Source: AGHT+IGvqeYE+ZtasL202hzyMcJJ4edAKilBbNz44Q/Nk6YXiZiyYpDoMiNbTD4qbZkcLZ1eELhQyg== X-Received: by 2002:a05:6000:2c0b:b0:429:b8f9:a887 with SMTP id ffacd0b85a97d-429bd672390mr953743f8f.6.1761865460869; Thu, 30 Oct 2025 16:04:20 -0700 (PDT) Received: from fedora ([154.182.161.198]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47732ff8235sm2227025e9.14.2025.10.30.16.04.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Oct 2025 16:04:19 -0700 (PDT) From: Mohamed Ahmed To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Mary Guillemard , Faith Ekstrand , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , nouveau@lists.freedesktop.org, Mohamed Ahmed Subject: [PATCH v3 1/5] drm/nouveau/uvmm: Prepare for larger pages Date: Fri, 31 Oct 2025 01:03:53 +0200 Message-ID: <20251030230357.45070-2-mohamedahmedegypt2001@gmail.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251030230357.45070-1-mohamedahmedegypt2001@gmail.com> References: <20251030230357.45070-1-mohamedahmedegypt2001@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Mary Guillemard Currently memory allocated by VM_BIND uAPI can only have a granuality matching PAGE_SIZE (4KiB in common case) To have a better memory management and to allow big (64KiB) and huge (2MiB) pages later in the series, we are now passing the page shift all around the internals of UVMM. Signed-off-by: Mary Guillemard Co-developed-by: Mohamed Ahmed Signed-off-by: Mohamed Ahmed Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/nouveau_uvmm.c | 46 ++++++++++++++++---------- drivers/gpu/drm/nouveau/nouveau_uvmm.h | 1 + 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_uvmm.c b/drivers/gpu/drm/nouve= au/nouveau_uvmm.c index 79eefdfd08a2..2cd0835b05e8 100644 --- a/drivers/gpu/drm/nouveau/nouveau_uvmm.c +++ b/drivers/gpu/drm/nouveau/nouveau_uvmm.c @@ -107,34 +107,34 @@ nouveau_uvmm_vmm_sparse_unref(struct nouveau_uvmm *uv= mm, =20 static int nouveau_uvmm_vmm_get(struct nouveau_uvmm *uvmm, - u64 addr, u64 range) + u64 addr, u64 range, u8 page_shift) { struct nvif_vmm *vmm =3D &uvmm->vmm.vmm; =20 - return nvif_vmm_raw_get(vmm, addr, range, PAGE_SHIFT); + return nvif_vmm_raw_get(vmm, addr, range, page_shift); } =20 static int nouveau_uvmm_vmm_put(struct nouveau_uvmm *uvmm, - u64 addr, u64 range) + u64 addr, u64 range, u8 page_shift) { struct nvif_vmm *vmm =3D &uvmm->vmm.vmm; =20 - return nvif_vmm_raw_put(vmm, addr, range, PAGE_SHIFT); + return nvif_vmm_raw_put(vmm, addr, range, page_shift); } =20 static int nouveau_uvmm_vmm_unmap(struct nouveau_uvmm *uvmm, - u64 addr, u64 range, bool sparse) + u64 addr, u64 range, u8 page_shift, bool sparse) { struct nvif_vmm *vmm =3D &uvmm->vmm.vmm; =20 - return nvif_vmm_raw_unmap(vmm, addr, range, PAGE_SHIFT, sparse); + return nvif_vmm_raw_unmap(vmm, addr, range, page_shift, sparse); } =20 static int nouveau_uvmm_vmm_map(struct nouveau_uvmm *uvmm, - u64 addr, u64 range, + u64 addr, u64 range, u8 page_shift, u64 bo_offset, u8 kind, struct nouveau_mem *mem) { @@ -163,7 +163,7 @@ nouveau_uvmm_vmm_map(struct nouveau_uvmm *uvmm, return -ENOSYS; } =20 - return nvif_vmm_raw_map(vmm, addr, range, PAGE_SHIFT, + return nvif_vmm_raw_map(vmm, addr, range, page_shift, &args, argc, &mem->mem, bo_offset); } @@ -182,8 +182,9 @@ nouveau_uvma_vmm_put(struct nouveau_uvma *uvma) { u64 addr =3D uvma->va.va.addr; u64 range =3D uvma->va.va.range; + u8 page_shift =3D uvma->page_shift; =20 - return nouveau_uvmm_vmm_put(to_uvmm(uvma), addr, range); + return nouveau_uvmm_vmm_put(to_uvmm(uvma), addr, range, page_shift); } =20 static int @@ -193,9 +194,11 @@ nouveau_uvma_map(struct nouveau_uvma *uvma, u64 addr =3D uvma->va.va.addr; u64 offset =3D uvma->va.gem.offset; u64 range =3D uvma->va.va.range; + u8 page_shift =3D uvma->page_shift; =20 return nouveau_uvmm_vmm_map(to_uvmm(uvma), addr, range, - offset, uvma->kind, mem); + page_shift, offset, uvma->kind, + mem); } =20 static int @@ -203,12 +206,13 @@ nouveau_uvma_unmap(struct nouveau_uvma *uvma) { u64 addr =3D uvma->va.va.addr; u64 range =3D uvma->va.va.range; + u8 page_shift =3D uvma->page_shift; bool sparse =3D !!uvma->region; =20 if (drm_gpuva_invalidated(&uvma->va)) return 0; =20 - return nouveau_uvmm_vmm_unmap(to_uvmm(uvma), addr, range, sparse); + return nouveau_uvmm_vmm_unmap(to_uvmm(uvma), addr, range, page_shift, spa= rse); } =20 static int @@ -501,7 +505,8 @@ nouveau_uvmm_sm_prepare_unwind(struct nouveau_uvmm *uvm= m, =20 if (vmm_get_range) nouveau_uvmm_vmm_put(uvmm, vmm_get_start, - vmm_get_range); + vmm_get_range, + PAGE_SHIFT); break; } case DRM_GPUVA_OP_REMAP: { @@ -528,6 +533,7 @@ nouveau_uvmm_sm_prepare_unwind(struct nouveau_uvmm *uvm= m, u64 ustart =3D va->va.addr; u64 urange =3D va->va.range; u64 uend =3D ustart + urange; + u8 page_shift =3D uvma_from_va(va)->page_shift; =20 /* Nothing to do for mappings we merge with. */ if (uend =3D=3D vmm_get_start || @@ -538,7 +544,8 @@ nouveau_uvmm_sm_prepare_unwind(struct nouveau_uvmm *uvm= m, u64 vmm_get_range =3D ustart - vmm_get_start; =20 nouveau_uvmm_vmm_put(uvmm, vmm_get_start, - vmm_get_range); + vmm_get_range, + page_shift); } vmm_get_start =3D uend; break; @@ -592,6 +599,7 @@ op_map_prepare(struct nouveau_uvmm *uvmm, =20 uvma->region =3D args->region; uvma->kind =3D args->kind; + uvma->page_shift =3D PAGE_SHIFT; =20 drm_gpuva_map(&uvmm->base, &uvma->va, op); =20 @@ -633,7 +641,8 @@ nouveau_uvmm_sm_prepare(struct nouveau_uvmm *uvmm, =20 if (vmm_get_range) { ret =3D nouveau_uvmm_vmm_get(uvmm, vmm_get_start, - vmm_get_range); + vmm_get_range, + new->map->page_shift); if (ret) { op_map_prepare_unwind(new->map); goto unwind; @@ -689,6 +698,7 @@ nouveau_uvmm_sm_prepare(struct nouveau_uvmm *uvmm, u64 ustart =3D va->va.addr; u64 urange =3D va->va.range; u64 uend =3D ustart + urange; + u8 page_shift =3D uvma_from_va(va)->page_shift; =20 op_unmap_prepare(u); =20 @@ -704,7 +714,7 @@ nouveau_uvmm_sm_prepare(struct nouveau_uvmm *uvmm, u64 vmm_get_range =3D ustart - vmm_get_start; =20 ret =3D nouveau_uvmm_vmm_get(uvmm, vmm_get_start, - vmm_get_range); + vmm_get_range, page_shift); if (ret) { op_unmap_prepare_unwind(va); goto unwind; @@ -799,10 +809,11 @@ op_unmap_range(struct drm_gpuva_op_unmap *u, u64 addr, u64 range) { struct nouveau_uvma *uvma =3D uvma_from_va(u->va); + u8 page_shift =3D uvma->page_shift; bool sparse =3D !!uvma->region; =20 if (!drm_gpuva_invalidated(u->va)) - nouveau_uvmm_vmm_unmap(to_uvmm(uvma), addr, range, sparse); + nouveau_uvmm_vmm_unmap(to_uvmm(uvma), addr, range, page_shift, sparse); } =20 static void @@ -882,6 +893,7 @@ nouveau_uvmm_sm_cleanup(struct nouveau_uvmm *uvmm, struct drm_gpuva_op_map *n =3D r->next; struct drm_gpuva *va =3D r->unmap->va; struct nouveau_uvma *uvma =3D uvma_from_va(va); + u8 page_shift =3D uvma->page_shift; =20 if (unmap) { u64 addr =3D va->va.addr; @@ -893,7 +905,7 @@ nouveau_uvmm_sm_cleanup(struct nouveau_uvmm *uvmm, if (n) end =3D n->va.addr; =20 - nouveau_uvmm_vmm_put(uvmm, addr, end - addr); + nouveau_uvmm_vmm_put(uvmm, addr, end - addr, page_shift); } =20 nouveau_uvma_gem_put(uvma); diff --git a/drivers/gpu/drm/nouveau/nouveau_uvmm.h b/drivers/gpu/drm/nouve= au/nouveau_uvmm.h index 9d3c348581eb..51925711ae90 100644 --- a/drivers/gpu/drm/nouveau/nouveau_uvmm.h +++ b/drivers/gpu/drm/nouveau/nouveau_uvmm.h @@ -33,6 +33,7 @@ struct nouveau_uvma { =20 struct nouveau_uvma_region *region; u8 kind; + u8 page_shift; }; =20 #define uvmm_from_gpuvm(x) container_of((x), struct nouveau_uvmm, base) --=20 2.51.1 From nobody Mon Feb 9 07:56:01 2026 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8CD0C33BBBA for ; Thu, 30 Oct 2025 23:04:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761865470; cv=none; b=NIpf3K8FS4CYNYJhkcJZrAzhxmxSPM6CUDEkgvq8bZuHv/ija/W90ACO6BkygDZSLRSEK34Kdo0Isg+1U+fHL7A5UTGht46H15na+IKiQ9hwFYY3DP68OSOeEa/8XU9rLXeQwlZXMBAksBq2DgJ4/W0PUoqLdiLA0QL8UzxDftY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761865470; c=relaxed/simple; bh=bzMv81MW/FPDpuuGp43OP9la5hOXCKPFu7eUNrVEOmY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Yhdx7Mh0jGwzGCZ/KhgJs9PIbC6zxFLJnrhvxPyAGKfnOMPQ7NvLAdTJhzRmP9A5Myrovvkyy04Yr5m+XgmyEXvnMgBEvtZN/asVEC4XfeqIRphcHSfwr11lE340cVz2I2RxEfoaytCdLIvZO1GuwxCb+kOa98VszvKnYkT30MI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=JUU9kbWD; arc=none smtp.client-ip=209.85.128.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JUU9kbWD" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-47117f92e32so13795795e9.1 for ; Thu, 30 Oct 2025 16:04:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761865466; x=1762470266; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=46N0aWvp8oKX6Nu5qfDL/f1CreothHImB8SyXqy9PMU=; b=JUU9kbWDWjyMyKR5akgukWUAUan7Cy/JO4yUcizJT+b1jRnGxS9NkznVxaxJsiW7Wt COXfmxlW9xAK29GQacHNKiVPsXwya5x3jQ1/4jOU89UgIuSUs+H4SXH4dw/yWeUNgr8l DzYg5sXH4wQMRErdZ+MbwTu3SAL04W68Nmyl9z7m9GK1oFL8FskRWFOzM8MOONkrTM04 wLUx/xrnFQORMT4TCFyI8uk7McjVZ3I+lrFIB3Qt03iloJlbwPwE8x8xRVPyIuYQVd+s D0oKXFqGKfA+CR7FbXUP7pfZRwHQ9UFgW49+DOHZJxRaZ9YGjaf2iR5TE9K8sZykhrgp /RhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761865466; x=1762470266; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=46N0aWvp8oKX6Nu5qfDL/f1CreothHImB8SyXqy9PMU=; b=tILIFSuLN2YqXVmfpBfY9AGAmMszfC9z+VECtEJzSfeMOV5m1beJcbwrbZS2YCJKA3 x4q4nXvyOkUe/Hj9HI+KpMn22C40FJ3uN57p5UAh/pO4l3iyeDv4gE5D0TpUfbYJ1d3O vwrZ4wOCtHsTzmjhBCo8v1o/WzFIdzXv+KxI4ViqAVjOSpUsv3FP0uSJIgnrtHqxQx1w dd9JWEjP9O8OtLsxaie5SHoj39Iry7tnHhnWB/bNOWMGpbsLo4KEXm1bU3gfu3ysb332 wnr9iiKbR+t9pJAvE2sTSTgrMrNIDLgi02oqBoRADXPYaruefT4VS8ZChO01ltG3iuub nf6w== X-Gm-Message-State: AOJu0Ywmb/qt2Mb4EbcOIcPMUNTFgkvJqPQgsSDpVgLpyQVRhIcAWAh9 0u/XV+2rQ3i6D3m+Mg6NU3VHlVpR2FKesJuFOIH08RgNmvoyclnfSFCinnoZ4A== X-Gm-Gg: ASbGncswRnLYGDNaptZCa1Hr2w7senZSslNCXJ2USFrjtyu1M/eBnxI8R4TTwjLmC/3 tXKI9p1vIePsxz+5jnTglCSXqk9mdiFC4inkjuu5yrR4vaEa3MQuljUSLwsDjHGHvP4gwnEhqSB e6VLcLfarX1G2KG2YwAXCCm51cBVBO5qtMVhtZ1+PR5v+QVkmLUlZUUa5rup/xx3UxIwIjhZhsv GqHUkeBEueID/JNjx2b9raVhEjiED8oFUVrvESkFHTMK5gXk45sRYK8nXMNjpdf+JpxroUUlWAA 6NHG8lSoyW093pmwCpUnBJJr9GqOgVejHRFrS4BnUdGNc/oSQv6yKeFCI6VIltcfmpYxtgYKvm+ gkMa+OvfNYWxWrZPN2V6NpoqPNb443DVv8/sskML/kyxyX/HNwYW4PKOwvHNXSTEliJSfbQR77q uBrNFnSXyKBN0= X-Google-Smtp-Source: AGHT+IF3V0g/eQ/lGtV/ew84nrHC/EHi1TJv4zNBhbsESiTddZuJ6+lmPFHjfgPrS32IKMq22nTyGg== X-Received: by 2002:a05:600c:83ce:b0:471:989:9d85 with SMTP id 5b1f17b1804b1-47730871fa6mr13632455e9.19.1761865466296; Thu, 30 Oct 2025 16:04:26 -0700 (PDT) Received: from fedora ([154.182.161.198]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47732ff8235sm2227025e9.14.2025.10.30.16.04.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Oct 2025 16:04:25 -0700 (PDT) From: Mohamed Ahmed To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Mary Guillemard , Faith Ekstrand , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , nouveau@lists.freedesktop.org, Mohamed Ahmed Subject: [PATCH v3 2/5] drm/nouveau/uvmm: Allow larger pages Date: Fri, 31 Oct 2025 01:03:54 +0200 Message-ID: <20251030230357.45070-3-mohamedahmedegypt2001@gmail.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251030230357.45070-1-mohamedahmedegypt2001@gmail.com> References: <20251030230357.45070-1-mohamedahmedegypt2001@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Mary Guillemard Now that everything in UVMM knows about the variable page shift, we can select larger values. The proposed approach relies on nouveau_bo::page unless if it would cause alignment issues (in which case we fall back to searching for an appropriate shift) Signed-off-by: Mary Guillemard Co-developed-by: Mohamed Ahmed Signed-off-by: Mohamed Ahmed Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/nouveau_uvmm.c | 60 +++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_uvmm.c b/drivers/gpu/drm/nouve= au/nouveau_uvmm.c index 2cd0835b05e8..f2d032f665e8 100644 --- a/drivers/gpu/drm/nouveau/nouveau_uvmm.c +++ b/drivers/gpu/drm/nouveau/nouveau_uvmm.c @@ -454,6 +454,62 @@ op_unmap_prepare_unwind(struct drm_gpuva *va) drm_gpuva_insert(va->vm, va); } =20 +static bool +op_map_aligned_to_page_shift(const struct drm_gpuva_op_map *op, u8 page_sh= ift) +{ + u64 non_page_bits =3D (1ULL << page_shift) - 1; + + return op->va.addr & non_page_bits =3D=3D 0 && + op->va.range & non_page_bits =3D=3D 0 && + op->gem.offset & non_page_bits =3D=3D 0; +} + +static u8 +select_page_shift(struct nouveau_uvmm *uvmm, struct drm_gpuva_op_map *op) +{ + struct nouveau_bo *nvbo =3D nouveau_gem_object(op->gem.obj); + + /* nouveau_bo_fixup_align() guarantees that the page size will be aligned + * for most cases, but it can't handle cases where userspace allocates wi= th + * a size and then binds with a smaller granularity. So in order to avoid + * breaking old userspace, we need to ensure that the VA is actually + * aligned before using it, and if it isn't, then we downgrade to the fir= st + * granularity that will fit, which is optimal from a correctness and + * performance perspective. + */ + if (op_map_aligned_to_page_shift(op, nvbo->page)) + return nvbo->page; + + struct nouveau_mem *mem =3D nouveau_mem(nvbo->bo.resource); + struct nvif_vmm *vmm =3D &uvmm->vmm.vmm; + int i; + + /* If the given granularity doesn't fit, let's find one that will fit. */ + for (i =3D 0; i < vmm->page_nr; i++) { + /* Ignore anything that is bigger or identical to the BO preference. */ + if (vmm->page[i].shift >=3D nvbo->page) + continue; + + /* Skip incompatible domains. */ + if ((mem->mem.type & NVIF_MEM_VRAM) && !vmm->page[i].vram) + continue; + if ((mem->mem.type & NVIF_MEM_HOST) && + (!vmm->page[i].host || vmm->page[i].shift > PAGE_SHIFT)) + continue; + + /* If it fits, return the proposed shift. */ + if (op_map_aligned_to_page_shift(op, vmm->page[i].shift)) + return vmm->page[i].shift; + } + + /* If we get here then nothing can reconcile the requirements. This shoul= d never + * happen. + */ + WARN_ON(1); + + return PAGE_SHIFT; +} + static void nouveau_uvmm_sm_prepare_unwind(struct nouveau_uvmm *uvmm, struct nouveau_uvma_prealloc *new, @@ -506,7 +562,7 @@ nouveau_uvmm_sm_prepare_unwind(struct nouveau_uvmm *uvm= m, if (vmm_get_range) nouveau_uvmm_vmm_put(uvmm, vmm_get_start, vmm_get_range, - PAGE_SHIFT); + select_page_shift(uvmm, &op->map)); break; } case DRM_GPUVA_OP_REMAP: { @@ -599,7 +655,7 @@ op_map_prepare(struct nouveau_uvmm *uvmm, =20 uvma->region =3D args->region; uvma->kind =3D args->kind; - uvma->page_shift =3D PAGE_SHIFT; + uvma->page_shift =3D select_page_shift(uvmm, op); =20 drm_gpuva_map(&uvmm->base, &uvma->va, op); =20 --=20 2.51.1 From nobody Mon Feb 9 07:56:01 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1C7D633BBC9 for ; Thu, 30 Oct 2025 23:04:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761865476; cv=none; b=SyXwQwhIxWin4fxK+d8JWSL5DtxKBE2ZLmHrR1b0iYl2Kni6V1ukwLv/Y8v3bJejWkQbiVS8DKdB2CwVGY9BEXxF2RoPdtdyKqDSKYcpeORCOdi/66U7MqxGwcTrFPVAlyaHKLUdO6f+/2E/k3yysLC/N3h7jbWfvw0Ln5wmUbg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761865476; c=relaxed/simple; bh=6nn2VeqdLzRcwL7AKTuuXeR8rESQolA47ksnBgHsmQw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=s14ClKClJQMgS5nz6Cx9XhCZccTN5/WQKQBP179tx/wUEggCooreEh6fabN9SIj2dUVuT7is4/gL7M74HEDanq2Fs7dBHtiNUhpdTeKBw4s/AJLrkWghCbdWBJYaec5iIzMARMU+EKgLFvkYO5jMoHNrPaK5GmNeMkG10DIA8h4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gWWzE2j6; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gWWzE2j6" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-4711b95226dso20562975e9.0 for ; Thu, 30 Oct 2025 16:04:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761865472; x=1762470272; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ultisk0LTvrj8uqMnV5HKpTwdWn+r1ljzwjarHhGTc0=; b=gWWzE2j6TnYkxwahZzLhSDTPIfhieXwwCNQZ93lAfp56pZ95KcPn/X3F6m7wd4gEw9 WBNzcVf/0jec2DWHuYhSc/2nudagdFg3rwSOf/4Nq84PED5TfxKMWVx8PqmlHzRwiJso om4LjyAEcb0Z+9JZLD1XHZx8dInMBHqGP1H6+lGIYIJj7pNkcoby30yZfX1wRm60XX74 SV2fpSXyM5Xiz9tWyU+wqLF+DGwSWnppRgdUhSKEEh31XOdEzn1xl6wiGcS/HAxB5Obj JZNeWrhxvrcuhryhUn2LczyRSukznAZSa+Krzv0YxsxKZZ0Z0+LSXZePbdaKeW6U9mb7 faTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761865472; x=1762470272; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ultisk0LTvrj8uqMnV5HKpTwdWn+r1ljzwjarHhGTc0=; b=lE31Jz42ucJv36fcWDpzVCJ3KCL2LRq9GdShsv9Se/zjXW4tT93tpV7F17dYn5W/LE O0N/om2r5tWbbKk+F5u05mXGdzx6stmc/sYvgiwp6RfJ6tA8YgwsE9dZ1SWipHNdgVBe y4i/Q0gKfmdsfqtkH0QIwAXY6gJGvBy30NswYkd3QtMAOiZrhpzx/AtBRNFrAQq0lBKw 9fD8A88/g7luxIzqTNtPiexqjL+89TOVLjNVjYbbp2+2tGwk853jWUbfdZ4diqkl1qLp n6A8yZRrhBSaH0bYjX9SC1xwYuDBVlxtR5GDn8owL+Je1yhJyb/YZPyW9U7J53h634oH pV7Q== X-Gm-Message-State: AOJu0YzmGQ2iKFuOAW4G7eROYevFIVh4UilBU3hGRPBh/g/JLxwTfdPc xB67Tl8RM1JzWB9BPQW7wahAlbe9jn2obY1Elo/k8pimnHbsoOwp9G2pFcrg1NtZ X-Gm-Gg: ASbGncvHPaPhfGXZ6Ykh8pWWT6CRUZ7PRO2WeifW8vqPCOVvBQJ3gRU1lhm0R63V14u KSlGjbu4rc9Ja5wNLJkzJ9xpfs0kMkd3K8/yw9C4PefpMe92NyCBE9VnXlS+bMFvOOKRqSA/VCD jAVTy7hnn8VpubREdfrrdbN9vLQ3Mabe0mmN+NnLphmg5jDkxUwEHwjn1TIVtl7TO81rVplBqEq UC+7ZFVv+WbDwjOhBINn3aKo5l/GLshlYWA7/WMPjoq8nvTxAN/LW378j5Po9vUvJ3bSM7CaERp yULWhnhMN8Rar7zSipSJJTF4y3BP+PRdysSk/gf0UV2bGk/9z5xRFHnaPfvNZZP/PBWVyc/qZHG fo6zSH7VZhsuTFQ7bVnEZwLeDo6kYLnYzCM0X1gfj+uSO97fFROrzx7M37kzFpi1vNpTpJ9Z3T8 SUPJClKjatI6jFlimeI1BKcrhTQci8f1Lk X-Google-Smtp-Source: AGHT+IFlWust8iq3x6eNp1+tkDyEzKkeBYIiGz+XhjWpGCSMYnkzi9Rvv4VNhEjjagfH257BWjyiZA== X-Received: by 2002:a05:600c:83c8:b0:477:1ae1:fa5d with SMTP id 5b1f17b1804b1-4773087b0d0mr10710235e9.20.1761865471717; Thu, 30 Oct 2025 16:04:31 -0700 (PDT) Received: from fedora ([154.182.161.198]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47732ff8235sm2227025e9.14.2025.10.30.16.04.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Oct 2025 16:04:29 -0700 (PDT) From: Mohamed Ahmed To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Mary Guillemard , Faith Ekstrand , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , nouveau@lists.freedesktop.org, Ben Skeggs , Mohamed Ahmed Subject: [PATCH v3 3/5] drm/nouveau/mmu/gp100: Remove unused/broken support for compression Date: Fri, 31 Oct 2025 01:03:55 +0200 Message-ID: <20251030230357.45070-4-mohamedahmedegypt2001@gmail.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251030230357.45070-1-mohamedahmedegypt2001@gmail.com> References: <20251030230357.45070-1-mohamedahmedegypt2001@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ben Skeggs From GP100 onwards it's not possible to initialise comptag RAM without PMU firmware, which nouveau has no support for. As such, this code is essentially a no-op and will always revert to the equivalent non-compressed kind due to comptag allocation failure. It's also broken for the needs of VM_BIND/Vulkan. Remove the code entirely to make way for supporting compression on GPUs that support GSM-RM. Signed-off-by: Ben Skeggs Signed-off-by: Mohamed Ahmed Reviewed-by: Lyude Paul --- .../drm/nouveau/nvkm/subdev/mmu/vmmgp100.c | 39 ++----------------- .../drm/nouveau/nvkm/subdev/mmu/vmmgp10b.c | 4 +- 2 files changed, 6 insertions(+), 37 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp100.c b/drivers/g= pu/drm/nouveau/nvkm/subdev/mmu/vmmgp100.c index 851fd847a2a9..ecff1096a1bb 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp100.c @@ -21,9 +21,7 @@ */ #include "vmm.h" =20 -#include #include -#include #include #include =20 @@ -117,8 +115,6 @@ gp100_vmm_pgt_pte(struct nvkm_vmm *vmm, struct nvkm_mmu= _pt *pt, { u64 data =3D (addr >> 4) | map->type; =20 - map->type +=3D ptes * map->ctag; - while (ptes--) { VMM_WO064(pt, vmm, ptei++ * 8, data); data +=3D map->next; @@ -142,7 +138,6 @@ gp100_vmm_pgt_dma(struct nvkm_vmm *vmm, struct nvkm_mmu= _pt *pt, while (ptes--) { const u64 data =3D (*map->dma++ >> 4) | map->type; VMM_WO064(pt, vmm, ptei++ * 8, data); - map->type +=3D map->ctag; } nvkm_done(pt->memory); return; @@ -200,8 +195,6 @@ gp100_vmm_pd0_pte(struct nvkm_vmm *vmm, struct nvkm_mmu= _pt *pt, { u64 data =3D (addr >> 4) | map->type; =20 - map->type +=3D ptes * map->ctag; - while (ptes--) { VMM_WO128(pt, vmm, ptei++ * 0x10, data, 0ULL); data +=3D map->next; @@ -411,8 +404,6 @@ gp100_vmm_valid(struct nvkm_vmm *vmm, void *argv, u32 a= rgc, struct gp100_vmm_map_vn vn; struct gp100_vmm_map_v0 v0; } *args =3D argv; - struct nvkm_device *device =3D vmm->mmu->subdev.device; - struct nvkm_memory *memory =3D map->memory; u8 kind, kind_inv, priv, ro, vol; int kindn, aper, ret =3D -ENOSYS; const u8 *kindm; @@ -450,30 +441,8 @@ gp100_vmm_valid(struct nvkm_vmm *vmm, void *argv, u32 = argc, } =20 if (kindm[kind] !=3D kind) { - u64 tags =3D nvkm_memory_size(memory) >> 16; - if (aper !=3D 0 || !(page->type & NVKM_VMM_PAGE_COMP)) { - VMM_DEBUG(vmm, "comp %d %02x", aper, page->type); - return -EINVAL; - } - - if (!map->no_comp) { - ret =3D nvkm_memory_tags_get(memory, device, tags, - nvkm_ltc_tags_clear, - &map->tags); - if (ret) { - VMM_DEBUG(vmm, "comp %d", ret); - return ret; - } - } - - if (!map->no_comp && map->tags->mn) { - tags =3D map->tags->mn->offset + (map->offset >> 16); - map->ctag |=3D ((1ULL << page->shift) >> 16) << 36; - map->type |=3D tags << 36; - map->next |=3D map->ctag; - } else { - kind =3D kindm[kind]; - } + /* Revert to non-compressed kind. */ + kind =3D kindm[kind]; } =20 map->type |=3D BIT(0); @@ -592,8 +561,8 @@ gp100_vmm =3D { { 47, &gp100_vmm_desc_16[4], NVKM_VMM_PAGE_Sxxx }, { 38, &gp100_vmm_desc_16[3], NVKM_VMM_PAGE_Sxxx }, { 29, &gp100_vmm_desc_16[2], NVKM_VMM_PAGE_Sxxx }, - { 21, &gp100_vmm_desc_16[1], NVKM_VMM_PAGE_SVxC }, - { 16, &gp100_vmm_desc_16[0], NVKM_VMM_PAGE_SVxC }, + { 21, &gp100_vmm_desc_16[1], NVKM_VMM_PAGE_SVxx }, + { 16, &gp100_vmm_desc_16[0], NVKM_VMM_PAGE_SVxx }, { 12, &gp100_vmm_desc_12[0], NVKM_VMM_PAGE_SVHx }, {} } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp10b.c b/drivers/g= pu/drm/nouveau/nvkm/subdev/mmu/vmmgp10b.c index e081239afe58..5791d134962b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp10b.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp10b.c @@ -34,8 +34,8 @@ gp10b_vmm =3D { { 47, &gp100_vmm_desc_16[4], NVKM_VMM_PAGE_Sxxx }, { 38, &gp100_vmm_desc_16[3], NVKM_VMM_PAGE_Sxxx }, { 29, &gp100_vmm_desc_16[2], NVKM_VMM_PAGE_Sxxx }, - { 21, &gp100_vmm_desc_16[1], NVKM_VMM_PAGE_SxHC }, - { 16, &gp100_vmm_desc_16[0], NVKM_VMM_PAGE_SxHC }, + { 21, &gp100_vmm_desc_16[1], NVKM_VMM_PAGE_SxHx }, + { 16, &gp100_vmm_desc_16[0], NVKM_VMM_PAGE_SxHx }, { 12, &gp100_vmm_desc_12[0], NVKM_VMM_PAGE_SxHx }, {} } --=20 2.51.1 From nobody Mon Feb 9 07:56:01 2026 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1DB0733BBC2 for ; Thu, 30 Oct 2025 23:04:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761865479; cv=none; b=n5RV1tYc15YcR5o2Is68Zk82nk76UN5okJHnzyNGc8wmt4bnvbRnWoISAKrN7PBvrtnRjiV0LJ8xwAy9+JSKlc8HRyK5oNPn/5sEaVX/ffkn7sNpPb2nJEEF9LAXxQjjjhLo9u+DOlH9wbccFrhH7C1obyuTL3oiF/bo2d2XwYk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761865479; c=relaxed/simple; bh=0SFro9VCn/x/43W8JdCw6cLRCKyjciSmHIPP9nWwbSI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DIS0wNZaEKAv13As9i3HlnxGG9LHlivjTwPBH8WF+G7thuoqT7KJ7sGcbbn3gDsUI5X1AEVXnSkihMpy7JYSeZWA/ufEgikx1M/HMZZmujRJeEIzJ/QUx/hik2uvxv+fRXfc7CkBDk3Ab+CXPxG3YklnEPBCM9iy0Jw678uD5l4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=hkaMNaZQ; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hkaMNaZQ" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-47721743fd0so8741635e9.2 for ; Thu, 30 Oct 2025 16:04:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761865476; x=1762470276; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Zzdi8nfSSs1sZofLN+Os1wqi0upcCWxbMTjLpxylR+I=; b=hkaMNaZQg5B9bwJUZCeuV2hMEU0Uw7hPNQwsVtYGhGc28Ad5fLw4ww7QtKZNjaXvWE W3A5ACplXzLIwMjZhM2liUIoz5fNqvbqUnJiog+jM28l/etnT4bTf6RBpjh1Dw7qtk9C BglbntWD7Rd4hrrRemdjTz4EnOj4lpuqyEIGiy+ZBpvm6qN4gafuKNvf6crQkNdvT49R KAZLdBMHG0jD67UY0pzlJGaRsVr1k9AyG7iUcRTCYtq6qvPSkoYgc3lpi2fCqXy8hHTn J6tLXedgLBk/NgdZZT6B0P6imS0gZrJvoXE+xhQGHuUpEjZLq7EOpeyG6hEvxZiKgUUv 8QUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761865476; x=1762470276; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Zzdi8nfSSs1sZofLN+Os1wqi0upcCWxbMTjLpxylR+I=; b=Kh3Z51aSCHWABKHw4PSsfTPjfW1pDDWtr1I6ylY8QbthCK7xzYHwoTLYVL9NzBYE4Q bTfoXMoyDqIHKRPyqVcYmM8QVzAre552ZBFaBnWBrUrdjSFKbVrcINROPMpBHJgHT/dh KV2hRGKYQkzpZhUVahKPNlrCeRHhtFuasqKVp82CkrsPvlClMLNOgqY1WPaK/7w4wEHa CWTlKAnv8qgaBTHxBmZ9VfAWHL/39ZDcYjvoMByeih+nzsWrEatgS8HjUCJy4MTpdGKm KCqlbgMY+SW7bnrzE0a2ol2CDoeN8KrXZ/7jyXBf41LGyjx1YAIkNyUMAHoAY28boMF9 9+NA== X-Gm-Message-State: AOJu0YzLfEeVo7Xp5zABli5LOewcPjXJz32CFmyEXjoiN5vDV/ACbWFn EupkY05qLNCn2MUowsR2at6WIm15dMLKk9vF0kQt5n0zdwdOiBkGFGBf5sCmJ3S/ X-Gm-Gg: ASbGncu1WEdNlw+1uagNi0Njl+ibkwhyI08hIiW8imsv8ktmMV0gnzqAj+IgBghInAq YGwPtX0jE1BvynWuzYlkyrSSqjbhuRGiyubvH3Ut9sIXiWJuLzy7KOQ5WdcIW7BeNaU/3qv4aeF 3r9lIIkOrdvlsX0d+ZVfb/gqSLte5MQDhFbNh4ps7Z4G7yXugWl2Q8Hq21HbGz/hzZMaURq4lPA zt4W864NqSC4Lhd9Ce50j6ue4GEhGBsx2ceBk0zMRGsirdjQHUs2iAWoBOm7Qd6aKlsR7ZAfQEb 1naaK7CIQSPqjikBFKizqD/VC4PES8sND4+4uVfb3en1UoRORV46VBvdIFFrVAFr3i0ldzwrZLt 9j3rooKoIe9nIlTUZg1sjEktbE4Y9hA6FaNlaDt72HHM6iHT9nhjCOfj+3COQprDrCSwuW1yWDk BVz8XXhbssyr0= X-Google-Smtp-Source: AGHT+IF1so7IsZ9CcfqAXskg5gm7+8a7SRpdoFYm2WfU1UNPEHE0EN5YGGHblVJH7Zxh/5bqtSuH+Q== X-Received: by 2002:a05:600c:8706:b0:45f:2922:2aef with SMTP id 5b1f17b1804b1-477308b0a8bmr14151015e9.28.1761865475936; Thu, 30 Oct 2025 16:04:35 -0700 (PDT) Received: from fedora ([154.182.161.198]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47732ff8235sm2227025e9.14.2025.10.30.16.04.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Oct 2025 16:04:35 -0700 (PDT) From: Mohamed Ahmed To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Mary Guillemard , Faith Ekstrand , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , nouveau@lists.freedesktop.org, Ben Skeggs , Mohamed Ahmed Subject: [PATCH v3 4/5] drm/nouveau/mmu/tu102: Add support for compressed kinds Date: Fri, 31 Oct 2025 01:03:56 +0200 Message-ID: <20251030230357.45070-5-mohamedahmedegypt2001@gmail.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251030230357.45070-1-mohamedahmedegypt2001@gmail.com> References: <20251030230357.45070-1-mohamedahmedegypt2001@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ben Skeggs Allow compressed PTE kinds to be written into PTEs when GSP-RM is present, rather than reverting to their non-compressed versions. Signed-off-by: Ben Skeggs Signed-off-by: Mohamed Ahmed Reviewed-by: Lyude Paul --- .../drm/nouveau/nvkm/subdev/mmu/vmmgp100.c | 46 ++++++++++++++++++- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp100.c b/drivers/g= pu/drm/nouveau/nvkm/subdev/mmu/vmmgp100.c index ecff1096a1bb..ed15a4475181 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp100.c @@ -109,12 +109,34 @@ gp100_vmm_pgt_pfn(struct nvkm_vmm *vmm, struct nvkm_m= mu_pt *pt, nvkm_done(pt->memory); } =20 +static inline u64 +gp100_vmm_comptag_nr(u64 size) +{ + return size >> 16; /* One comptag per 64KiB VRAM. */ +} + +static inline u64 +gp100_vmm_pte_comptagline_base(u64 addr) +{ + /* RM allocates enough comptags for all of VRAM, so use a 1:1 mapping. */ + return (1 + gp100_vmm_comptag_nr(addr)) << 36; /* NV_MMU_VER2_PTE_COMPTAG= LINE */ +} + +static inline u64 +gp100_vmm_pte_comptagline_incr(u32 page_size) +{ + return gp100_vmm_comptag_nr(page_size) << 36; /* NV_MMU_VER2_PTE_COMPTAGL= INE */ +} + static inline void gp100_vmm_pgt_pte(struct nvkm_vmm *vmm, struct nvkm_mmu_pt *pt, u32 ptei, u32 ptes, struct nvkm_vmm_map *map, u64 addr) { u64 data =3D (addr >> 4) | map->type; =20 + if (map->ctag) + data |=3D gp100_vmm_pte_comptagline_base(addr); + while (ptes--) { VMM_WO064(pt, vmm, ptei++ * 8, data); data +=3D map->next; @@ -195,6 +217,9 @@ gp100_vmm_pd0_pte(struct nvkm_vmm *vmm, struct nvkm_mmu= _pt *pt, { u64 data =3D (addr >> 4) | map->type; =20 + if (map->ctag) + data |=3D gp100_vmm_pte_comptagline_base(addr); + while (ptes--) { VMM_WO128(pt, vmm, ptei++ * 0x10, data, 0ULL); data +=3D map->next; @@ -440,9 +465,26 @@ gp100_vmm_valid(struct nvkm_vmm *vmm, void *argv, u32 = argc, return -EINVAL; } =20 + /* Handle compression. */ if (kindm[kind] !=3D kind) { - /* Revert to non-compressed kind. */ - kind =3D kindm[kind]; + struct nvkm_device *device =3D vmm->mmu->subdev.device; + + /* Compression is only supported when using GSP-RM, as + * PMU firmware is required in order to initialise the + * compbit backing store. + */ + if (nvkm_gsp_rm(device->gsp)) { + /* Turing GPUs require PTE_COMPTAGLINE to be filled, + * in addition to specifying a compressed kind. + */ + if (device->card_type < GA100) { + map->ctag =3D gp100_vmm_pte_comptagline_incr(1 << map->page->shift); + map->next |=3D map->ctag; + } + } else { + /* Revert to non-compressed kind. */ + kind =3D kindm[kind]; + } } =20 map->type |=3D BIT(0); --=20 2.51.1 From nobody Mon Feb 9 07:56:01 2026 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4D095331A6F for ; Thu, 30 Oct 2025 23:04:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761865486; cv=none; b=gkC6v+mTBo7WR4SxfgYsvVbtdO4PFN8aTqGc9U02OH/x0xrV32cLQdlPPjqC2s3lILWrt9OHlnM217ycWZa1v6QsGKYcdtH+cuKpL/Y5WomSUEkC6spNQb0crLWwc5NFODDPHCSbx9nw9zOmHUtW8g60UKHKFw1E4bpKf07ZFaw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761865486; c=relaxed/simple; bh=TcMYHxAFSNQU8rzO3HWwSoxbbFQbT4iycTi1gAH8IEI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ockGbMe30giP9iUyo9Ze1ndTqTQg4ghVOHzthnsOzNXMDQdrIE2lniovdEg/vzFj5La3MzYGZSApPTWU4Rd80R42vQeZwn6S7HqQ9DeXMpIOWZUG1Eu5jGThFFv0YoUOic4lz7CnBUwkoAlOOx2YYckPNm9LqreO3oPTjMTrfmY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dFe85QEO; arc=none smtp.client-ip=209.85.128.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dFe85QEO" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-47112edf9f7so13152575e9.0 for ; Thu, 30 Oct 2025 16:04:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761865482; x=1762470282; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4dA6vbryG5FJTzOnmpJ+a7K24uQqVYeU0GUEiTTytsg=; b=dFe85QEOSl3jtD3G7PswmMfTRB2yrzqMTqWNikM0M6wJQMF91pl6Z6zPShcpA2JLYk g4W7EhlUJfGLSexdIgJz19loNHRBzETU/PzPCDnkLopIvqOmY3ptXFd7LxdjlVGpBOUu vQJKaYN449gs5Lmm2tqFvTfLQadWn4AlQopsmN51oOPrkCkU3EwWPfpEaxp5HlCNx9cl PXtBo9ysilbe19vL3EwH/YrfSQouDJ7yB3w4CAiTD6Dz7g0HepQOLq+6zkGOlquT8hKa z699BKnK/H5ekeg2pPN6j7zUEX7nM8E3rsVCZFpbPJX3kpyq8si3P9/4QELeYc9idSk4 1o6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761865482; x=1762470282; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4dA6vbryG5FJTzOnmpJ+a7K24uQqVYeU0GUEiTTytsg=; b=o9kLYn7Lj2HMJD/3NkeE0HpUAlTLzICa8MVJOIK4Og8kR/ZR51QeOzQdsHLpPhLXTQ ESSpfz0ujokbqxNYK7wUPmDQVeRaeWrvKs+niYtk7+BalQXfd/6Owm4In1Wi1bdVVJJD YNgVMaEKz66wMJnfuOBLMs0iNNDid6nxTOk+oPHCivIXWleGfhgThC7DAkVtdUF2uTms LF0256Zq2a1LkpY2uFw7gkFHVRjVWP0HKqefs6kuGgxT2ZawkHFvKadG9nrUcU1wiZdM t1/jsKSFc/BuYNQJrrv5e1Oe5PT5BtYWWraMyjNWN/pDLRkdyMZD9QgcflhILFMKYUeF 8qtw== X-Gm-Message-State: AOJu0YzrxbEm97OkWillFkT2GBHoZEmy3EKZ8zsCBKk6C3kl+ltK7oYs q8eJr/o72AJRMCti9n+2ziMGjHWBRGrrbY6/87nuplksD8DmW5OzJypsXgaKb5v8 X-Gm-Gg: ASbGncvf8XUB9rwiURpy2vHNR+k1C3ieBCEZdKSzzuFVEoh+K+GM3v2fJDyTKyx5UoK FJHDkk6XbhkaH+XSmApdCT4Qd5hgSo8Sj2yfEFjLo0iEl1o6YR6NWX3ARRT1ODsPWOYozkBUdI2 QC6W5uGzoqQ7cl0gwDLQOPgeZaP7+OXI/r70Q09XON2wPshdD7QRHfDqIFjg9XChOpL22+MTX8j 3nSxLl+ne+Ckz4zRCE6Yf9jpzteD9dM+ToUybCdC/J0X+78uXlTS2TxmqGOP0ZoDng/61K9pmyN gkw1VuihHkiiEfDUaRb8h2SRn4M12ClApKZGG5jQT/DLLVV/jSeAV62sOKFPe32DYtB7SPIS0kO +5P0AL61C8zLkQ442WOYw/Pl1zDvdi8VO7ecLp5as9NrFkQcNSybPz+uTeGJkZtLdxpuav3iLwo kTDDSEERLKbSxaBuvg2nW4KA== X-Google-Smtp-Source: AGHT+IGyCOmFhRjPi1dA9EmPXnKmiW9faJgiGLkzd27O/GNIxvB0MswqzLd3bUuGjgqJLB4E+1ldgQ== X-Received: by 2002:a05:600c:1c1d:b0:46e:39e1:fc27 with SMTP id 5b1f17b1804b1-477307d740cmr11913775e9.5.1761865481989; Thu, 30 Oct 2025 16:04:41 -0700 (PDT) Received: from fedora ([154.182.161.198]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47732ff8235sm2227025e9.14.2025.10.30.16.04.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Oct 2025 16:04:39 -0700 (PDT) From: Mohamed Ahmed To: linux-kernel@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Mary Guillemard , Faith Ekstrand , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , nouveau@lists.freedesktop.org, Mohamed Ahmed Subject: [PATCH v3 5/5] drm/nouveau/drm: Bump the driver version to 1.4.1 to report new features Date: Fri, 31 Oct 2025 01:03:57 +0200 Message-ID: <20251030230357.45070-6-mohamedahmedegypt2001@gmail.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251030230357.45070-1-mohamedahmedegypt2001@gmail.com> References: <20251030230357.45070-1-mohamedahmedegypt2001@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The HW can only do compression on large and huge pages, and enabling it on 4K pages leads to a MMU fault. Compression also needs kernel support for handling the compressed kinds and managing the compression tags. This increments the nouveau version number which allows NVK to enable it only when the kernel actually supports both features and avoid breaking the system if a newer mesa version is paired with an older kernel version. For the associated userspace MR, please see !36450: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36450 Signed-off-by: Mohamed Ahmed Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/nouveau_drv.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouvea= u/nouveau_drv.h index 55abc510067b..e5de4367e2cc 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drv.h +++ b/drivers/gpu/drm/nouveau/nouveau_drv.h @@ -10,7 +10,7 @@ =20 #define DRIVER_MAJOR 1 #define DRIVER_MINOR 4 -#define DRIVER_PATCHLEVEL 0 +#define DRIVER_PATCHLEVEL 1 =20 /* * 1.1.1: @@ -35,6 +35,8 @@ * programs that get directly linked with NVKM. * 1.3.1: * - implemented limited ABI16/NVIF interop + * 1.4.1: + * - add variable page sizes and compression for Turing+ */ =20 #include --=20 2.51.1