From nobody Mon Feb 9 00:06:26 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (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 15A3333E359 for ; Fri, 31 Oct 2025 10:49:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761907792; cv=none; b=SlEI9X0LSxwqkc+6KhO4XlhuzViU8gV5OWPf31w/ekT4XhOdIER3XsBEY9QjLOH2ER6LepJWrS0pTogDz1+W4J8DzV+D6dQSe/i433pxYXruDGmDfeD403RolwOqvLOtWPhg3H08sESW5BBssJipKu/kbdIS67q4erRUw0WgQjI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761907792; c=relaxed/simple; bh=RyudmJXPWxWDQI94X+73YWpu+3qoRpwAgYxRsvc+kyA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HvE6w7xUpZGbL3JZe8hBS+GsAhwdy4+lhhZP1Q/IJ6N4zqzDvGxssIw05diNoz7t0FbGsA5hkhSz3w5cvfhOcyB2HumSkuQy+e+v/GNfc9XNO2sRdLJSeVCMfIUjbfiN3o5Ae/Vz53vvFnrHNp6xp4YbfzofDCBffmU22cnu5NU= 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=LxkLVagH; arc=none smtp.client-ip=209.85.128.47 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="LxkLVagH" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-47719ad0c7dso18915855e9.0 for ; Fri, 31 Oct 2025 03:49:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761907787; x=1762512587; 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=LxkLVagH3gHZCdXH89jVPTHOfje2fco/+bBIXMgoXVcjIK6l+xVRXmHzxwX+Wg7MSk GXFq0TAIVCqmRxNdMQACSBwR16hr+9mypXgC1z7dBGzImQzG3uOiJfNZq98z3xSL0wTo oCVFbLJQ//IBp3V7uBfZPu/rFmNHcAQjq5RM2GXofKbY4z5Z4YcRyL25I+kNNtzxOUlM BOcifp4sEq9/q0JVJM3ZHnNWH2YD4f4Fa2lb2ieHC4qLtMi9H6rKdVKlBq0b3EKcmnk3 KjQssrJB68OCnNCBod6X8it5YE3ZwlZDP39jKgzvqCGUARkrJt9YvvirS4pslUSd2CyV CUCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761907787; x=1762512587; 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=pfYxDeWfJPe2sUvOwl0ub/9qSHwVZFZTBC8oHhgyF92qsOb5mdUgo4DS8mK2ic45Gq CFkKyopmxfF70XUjtcmIKWZZy8GTCE+VoV6KfnekfAMY7RYGoLnXg0WM+a8aC5JfsFb0 osFY7dSjnrVGXAdn/pUaeGwtZKVWu0431PcE7P7Spxya3VfHiQp6S3RvS6xSC4Wib60B rbRWW1YsUkgwqD6wldilIyTBTVRn9vkqe5Ndne4IyA4ezFNeAHSbxiHNEdgNvsQjiYUt jVZA8XxZ8wb+mprw22r0zFh5hu65MGP4rAZED3J6VzwHgRE9ETtufZyMjKYpc9DucklQ Fs5w== X-Gm-Message-State: AOJu0Yz8nnbQ6NOW6UbSzW0sEsFvDnIu1R09cpB6r1AtTSMPP2VdohlP P34MECHwcklRLkkcSdwWeocILoLx5J4jbVqF6H7WqVIIcviVbR49LlrIZLHU2BLm X-Gm-Gg: ASbGncspWKDbFbqDs7R/cfpcLaDhIJywm/VNLACmn2QfXSB45tSYDkm6oMb2PyNhS6f ab1uCeiL/yNNCEn3K8eth176uIinuH8Zd5eN+GUODcFX22loaQ+3oEaYCQwewITPrEWypylBlyS w2CBiXtEjuAa4JjKfFJ01eLOzZohGHyxooAq1VscIQGtOmVlEriRzHnp033rFQANbG4Irr5ffMm 0rXK7etqZvy5VvD+lXSvq6KbkN7fV+k3MaS2j2hButL8NbWGv9WukvTrXWs3luu6n3wf3YDbx3Z rvi9UjktdmZA6kGg30oYQ/e8rCCwwRUTZ2p0BPvDWtvZ26eWTZQGCy1018mS5cdD+zJ08g8N/aJ aCt5o5119vsdaF7iAdlfewte+PIT+S1/tuDYxgPob2yFHFHXRJlVxaZ5kN6aDSzSiTvp3bTDq3Q bsttGo/JhziXg= X-Google-Smtp-Source: AGHT+IEwrR4/shL2x0jicpBYzzqQxpF11HLPedOgiUJnqB3r7gXRnwTtN/eZMYE80mxS/8IA6tVTaw== X-Received: by 2002:a05:600c:468e:b0:475:dd59:d8d8 with SMTP id 5b1f17b1804b1-47730793c2amr33909065e9.8.1761907786569; Fri, 31 Oct 2025 03:49:46 -0700 (PDT) Received: from fedora ([154.182.161.198]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4772fcf7d07sm19498025e9.9.2025.10.31.03.49.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Oct 2025 03:49:45 -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 v4 1/5] drm/nouveau/uvmm: Prepare for larger pages Date: Fri, 31 Oct 2025 12:49:20 +0200 Message-ID: <20251031104924.10631-2-mohamedahmedegypt2001@gmail.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251031104924.10631-1-mohamedahmedegypt2001@gmail.com> References: <20251031104924.10631-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 Tested-by: Mary Guillemard --- 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 00:06:26 2026 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (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 0C8C934164A for ; Fri, 31 Oct 2025 10:49:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761907795; cv=none; b=aN/gJs7hQoJL6p5Ttxs8g8+sLHLbacMkEGs21iUsLMKhFo3ciH53M+rNBy4bppt3IheFifZiirWHTApWvyCNsmqSabB8b7czb36dpBEcMMECqrxW3O6PlLzGVFeh4AJLHRp7gr3Lo7xff4uZ41y1vzM6jwz7pgSOg/DlfUhez/o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761907795; c=relaxed/simple; bh=tyec8/1apPbyr9npNAl6QwVVhZO/TjN27vXKVA5iE/g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IZ7ZfUhrLZJvbEwsFKB7WextNf1x4LlL4ww9Nn6DenIsRn1jtaU0UXsTARAVWqtwPitsz0/8/5cddenmbk6282U38FvscvEWJEwinXYQqCwVaj3vj6jbEDX/M8Ko4nm+fWx+qo1yBivCmDrPiRtEFIHz3poamzJ6sVEs5zqav3Q= 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=YeVleNMO; arc=none smtp.client-ip=209.85.128.52 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="YeVleNMO" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-47112edf9f7so16745025e9.0 for ; Fri, 31 Oct 2025 03:49:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761907791; x=1762512591; 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=ytESlltqRxcX4R1jrclfkLL9qc0CSP/KNMvJhvbH8BE=; b=YeVleNMOnH62BkBSuErt6YTRDK5pJus7SQ2docRGi9MObNY1PFCgzy/LquWZwuKSeo UtlvSiPjiu1ZrUpoS+W2Y6MZ/GJnFKXmrW+kRJAbYzus+cQw7drpywLwbbusi+b8rbnr +HCckilKaMWRO29XPxwrMuDqlog2J0fAMAee5vR6uYQMAYPhRXNOdYAyNLBkrObo126K txODyfIFbFGXLud3pj68xLcWSNWAgYuUZiJ0rkUGEyuYbCCEZvvUBTT5KUExByFuL+xD +AEowxBj8nAxaJkWVReZ+liryJUnaSqADf+62LHv0EvjLXDp6MO9hliiZQuSJup0FaVi KSRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761907791; x=1762512591; 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=ytESlltqRxcX4R1jrclfkLL9qc0CSP/KNMvJhvbH8BE=; b=otPF4e/IbtOB0IvL+I2h/fCbnSENMwqyqz1thJn7BhkoE+eADCcnoG5xhqHt/nUec6 dADTQ+Te8bEMfSnexfzvNWAXfSWY544AH5OJRCo4PBZYR1/EfvAs/14HEMXzrImhvxIT 6O9qSWN6bITuQQpXUoh1tozt7nOkWCI0Jk1UqLQniBPV2RDdQDB3s6BkKsGs4/L1jg/q rP8U5UxLhP1b0pyDlUazhgXSE8bPuSS/l80sz5vcc9puMX9m1tQKvuhKC9Zo9iNq+FAI UMr7Zv21Ab4TXgRQmUz7QahIE46B3mZ4sUgVpVWx6vSSC/xIvGxHjNy0oK9XRROHemNf f+vg== X-Gm-Message-State: AOJu0YzDmNT2zgn9g0E73QM5tZNwoGjyokCWkQXqve6Rl0eOQ07dqsOV LPj0faaLZY6FOtfw+5BYlGBCiTi4HGE5JPsnbJq1l3AyfP+Y1myS5Rv/1EJpRKPq X-Gm-Gg: ASbGncvPxXyav7Avu/ROqRJV4nd8nYXHbaMcWXmWwi6WfrIs5Vdg1Q16rJJG6BChfj6 Cdzp6LXxlzFD0IvHN82TmcboPdh5v3hNjXPi0itUY3jWvm+qhrUc9FeNF2jM1P7L2PK8PRlGOa4 pS+Rqew0OwohveKQ9WWbTdI9xiwWaRsUcZ3Fh/6zsA1TSgHNH9yhrnWAaK1poi4CrgjcG4MUzAb 7thXBXAN/UOJxStaQTSq6ZoT4/kOzsfysnmQhSi7HXobYvRp3+E6q8hzu9gDOBMKzyar/RXOGW1 rE5R+fBN1XeKntUPczYS3X7EcnCAZ/A1VzqD9r0RqBmIDtFQnxsk13r27kouro8u4riuthI2ECh nW5H2oqNU7yQTRkKbxGYN7V9G3JKRoa/5gVpawtvgdmPY5t3dCKhcvssrYq4Q92zNYNK9s7kQ/H WgYhgg4nZUuZs= X-Google-Smtp-Source: AGHT+IEOFyWQviAB5WzOHqdnu6OhTfkzRX9usv/bSGoYjbNq2l0qgpNuGqp+EDuIzC2/qXoWeByspw== X-Received: by 2002:a05:600c:1e19:b0:46e:711c:efeb with SMTP id 5b1f17b1804b1-477308aa8acmr27643765e9.25.1761907790763; Fri, 31 Oct 2025 03:49:50 -0700 (PDT) Received: from fedora ([154.182.161.198]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4772fcf7d07sm19498025e9.9.2025.10.31.03.49.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Oct 2025 03:49:50 -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 v4 2/5] drm/nouveau/uvmm: Allow larger pages Date: Fri, 31 Oct 2025 12:49:21 +0200 Message-ID: <20251031104924.10631-3-mohamedahmedegypt2001@gmail.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251031104924.10631-1-mohamedahmedegypt2001@gmail.com> References: <20251031104924.10631-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: James Jones Tested-by: Mary Guillemard --- 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..ab8933b88337 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 00:06:26 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (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 3EE30340A67 for ; Fri, 31 Oct 2025 10:49:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761907798; cv=none; b=qockGPdjdq43ch8upZfefENPQ96AJa8aYkEspnmo/1Tl5Y8kh7dVD/nHXsh/COwKLoDM/UdH+NhPiRPDDzssVNDcrjoPWiZ2g3A9Lihaa1SGSjbqPe3qlTNcmD4DKInxbHVdFdSUxeB/GpAdoEbdFwXrkWmcRnKznYENApYdc0g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761907798; c=relaxed/simple; bh=6nn2VeqdLzRcwL7AKTuuXeR8rESQolA47ksnBgHsmQw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=m5pfruyT1rCgX/ss1yZjzWgy6maLmvazE9CmxJuKsmhhza6b3pNrht6SxJY9iOli7Ln0/1cugplU5ylXa2g4PMH/5Mf3RqpfbWbXOHbcLBe5ZVK36WSbJGG/MZpdtGPuqD48Vc5XDG+SWMqKr54Hp/w6mN+oqoN6w9XSiGRwfgk= 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=FZUMkV/h; arc=none smtp.client-ip=209.85.128.44 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="FZUMkV/h" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-47112edf9f7so16745505e9.0 for ; Fri, 31 Oct 2025 03:49:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761907794; x=1762512594; 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=FZUMkV/h3a/HV8SLPsC8Y0UBdhGmokcfUUjXTAcSXDbx2NjaHvxVM0+QRDTZCI1r5x YYlq/mzlA+4qxMToWDcR/14Q+hPAEFhsZpFkUHFC6WLQe72Jily4o9rilAVnhd2QH8NC dNAJD9QUFJTdTSJ1CSxmbs35v7cP56jQVQ67d/oMOfWbaxW5Hw1iwo30fbNC8eDU5kCh HsJ7MYMHIHOGBm2mSVtSXJCck/1E3aX1di6c0Uhi5vBzVsretoLYOwDMTpBhxUjqV9cZ r8GKq3MbRaYDx1Vp/GP/tP4ookHk6/WxpXovcUQeGX/YhoEkeZm5z84QuyGOXOLHe9d3 Vbaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761907794; x=1762512594; 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=gnODwmNDI0YQ7x2SyKLIKTlIg7EZnvPz52sFasdEOtwM+1dP8Fv0wz7cgfL/H7Gm33 EVk42119+EO0mQYKbZ3j7cAu8OhW87jQWv8nZg2cUTxn6xIo15rl9asGixddknCGxh/t RN5t1lSpJEjvJMq4uMeSMEOB2hYhIWTlX2eSSBOBdINpD0rIx6EyjdbqTTLOBDGh2IYz UvfPErUOxtTkXqrMlSMuoelGSvZSHzMDE1VTaCT4GHwBB4TVsnaUxDsFRHOE1lKwup52 MA+U5zre+1Mv8vcw7rxat9JT9UKgbzAMsIFPEDPo72wL+3qZvqEXqqpgs0UJCvjuIpV2 H63g== X-Gm-Message-State: AOJu0Yw/KPPiFw9BswbUkpuBldHz0FRUgU3kfphd9UP4neVzDXQSL3Xs Ef4G3UXxScAQkV0SFHUahyqW4fd+eW24EIDfJHLA3FL7Z6SdeFcwX6oWmowOmcIS X-Gm-Gg: ASbGnctC4mC5zlP7yxVkIFsMsWJYyD/rEP32ewXKQOjHB7vJlB9RWdqP1C/wQvXyWVs OsuKDto9SjWZSDws8MRA2fW+tF3adGNRRwEmDjH+UqYHhYe+8zzzwo3LYkyOtMhJxN5z901h+6w PU3uaTbgNHitBVolqp7Ndh8w7W87yaxFHoZQy9KFtu9skK6WyrprcYgHfDDJ7JSVAM7WnUz/bWd d68KNFPyOVl8Jo/1QWWMzhYDykWc7CIkOaNyN2Ua6WTJAAddLIKCZjtg+/N9u91mfCkr51EqnU+ uCHsaHw/MIJ4Zpk7uQW1mVBkDt7+BLoQ9Y4aclJk9MsPAE5GQfmL1NuSk5rmr/NpdX7eMYepL9S PmAiarVDn1VN3Hoa8qEp1/O4/uNkmhX9OtK3YBS10QdqFLs6BONVXV02VqfWmkKZURVzWDqL4oY LcBQeddWz+knL2L0nNaYHLTw== X-Google-Smtp-Source: AGHT+IEHSKHsiRZqynSqJrt3dPUmRM03bePpniQMubUnp99Gzx7fJ+iI2PEvs2CkE9jbxNq/Xbd7UQ== X-Received: by 2002:a05:600c:4695:b0:471:1774:3003 with SMTP id 5b1f17b1804b1-477308be7b3mr31572655e9.29.1761907794096; Fri, 31 Oct 2025 03:49:54 -0700 (PDT) Received: from fedora ([154.182.161.198]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4772fcf7d07sm19498025e9.9.2025.10.31.03.49.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Oct 2025 03:49:53 -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 v4 3/5] drm/nouveau/mmu/gp100: Remove unused/broken support for compression Date: Fri, 31 Oct 2025 12:49:22 +0200 Message-ID: <20251031104924.10631-4-mohamedahmedegypt2001@gmail.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251031104924.10631-1-mohamedahmedegypt2001@gmail.com> References: <20251031104924.10631-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 Tested-by: Mary Guillemard --- .../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 00:06:26 2026 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (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 4518A341677 for ; Fri, 31 Oct 2025 10:49:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761907802; cv=none; b=dPOCwE8v4xGHUQPJzbV6ejJNxIh2gQARw2TCsXNCDyi6ogQg9XSIEBn8O3GgZvTgmMlC+EGuJpe5Pi3PCZiJox6nA0a1dNMNWkhfoai3/ql6W3mgASBVqdprhh5rqw6VG98BAl6G/4yWGrzoQfEERgImq1bgCK9oz5g4XzyTkZ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761907802; c=relaxed/simple; bh=0SFro9VCn/x/43W8JdCw6cLRCKyjciSmHIPP9nWwbSI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NbwZGIJZgDm1u6LSprGPY0mEq2zDRM1J6+xKnPBUTRHw0Oq7wFEGazVaPveV/f5SwLg3nSgTg4u1L0vXgWt0kzejg3qTzDjTKr27itpaFHHqiEzJPHV08RmUX/SRWRuwCyfpcQtaNDXSCrOvP4UN6/+oagIbjocVFy1mPtl3xqE= 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=E5b23FJM; arc=none smtp.client-ip=209.85.128.46 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="E5b23FJM" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-471191ac79dso23213805e9.3 for ; Fri, 31 Oct 2025 03:49:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761907797; x=1762512597; 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=E5b23FJM+BQH6tiUaq2VkUwaz087S/n3fSrpSC++mvjQi1p7kilh6kAotmd5eCekkY Cfh5etr1mSucYSAZiH0fWiuWgwncP7DYURGQ5DF4W93rgctogBOZpceL5zUVzdUYcVpc i/IRmk30eIg9rVDZlt1Fcfv25shbnRnN2A+nQKY1P8Lg81C1T1v+5nmxuFmjXk6ljZU/ A3/4n4lqEW6fN/bFx6xWMWbipTNIyWbETD61aVOtzNFXHgJR2HjXl4pUmBYPDT6Bf0Zz 6nkLqJmsPwvJ/YzOFfwEM/vm2TwUgzAdYdg6xtOw8ZKQVQdCy+dOe7bnpqSF7+LFQN9C wtWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761907797; x=1762512597; 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=BSgPpWoGcKa4qN+kCdp2iEqqalIHuSLZLUiEW4vBlYRZYRxtawdta9rrMj/146qtVX mjhc6fMMB81Qe9aumfAO6klWUfXRVikVrEsD/zNi05kLNC4z99b68cTN2ozjInuz34Yb +rK0u0XO6rJChcn3yF6hVMx0H1DdZpY7399J3Q8l/Hw7D1I/yH+bkiRABzCqYtOXMn2k XnpBPbXnX/IrOD7bCY1Uc6cdsViOqepyZFf5AHybFzKSMh9qH7zZve1XBlZyOUqV/di4 LgY9JLcCUq7QgbjP4kDoY5Bmin+F+9ieCpoXe1e4883qlNyVw42UgBlIyXrR37kvesru 58pQ== X-Gm-Message-State: AOJu0YxY3n3+N0dDTyYiO5DxFuG7XMvsP2Cjlmj3JQ4M+rSJhEQGq2mR ryxJr1mi44VlPr0bgNRLk/8gglkN9EwE0W1yQVuqNUKQo4T3AQnKhBS/iIesusqq X-Gm-Gg: ASbGncuzAmu5ZC7APhddkYL99FDbMyHwx6SYCz+749XopyjMU6IR7DllwJ+hRl1sx9/ ijMaa2ifrrqwObeXG7oHzOLXO/KvRbGq9pZlLWsOo9dAS9Fy45ynnYYTXBBx4oI8G84uumMFMuK lPd/Q+5Avs2nSMkP9X6VgPgYIW2gHvlpUTSCyl0bLc7YkNcYKtspR8krHSw1vHQup9On09/bOIf VJE3Qalr6vBlpLu6qCagss7vywD1vll5hW96+m0xmXAmA0HN/SVsKviCrC+67N17eLAXFKEbf6p 4Qmbx4/NmzV6UyIvLDlCwDUaX3rGMYuRh3mbHINLd3iD1k2GwwLdTlE3C4l36wyerM3UZalLkHm rI8hxuOsrqh/qxc3vwtbkWVdyRkEKB2U0LB0zP+8EeA4QXAGTDj2V0i4gB6c2l2nFFtt2z/6YFP r1WOLB5HR1KnbeW6dCFO03WA== X-Google-Smtp-Source: AGHT+IExqiXaV3tY1QYgyp3Vb/lFXZy9Ed+LjlywLCtsIPMBbB1MZkrDAGvWrVtUBRa7sksEKHFBPg== X-Received: by 2002:a05:600c:4e44:b0:45f:2cb5:ecff with SMTP id 5b1f17b1804b1-477308ce7b2mr30226905e9.31.1761907796910; Fri, 31 Oct 2025 03:49:56 -0700 (PDT) Received: from fedora ([154.182.161.198]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4772fcf7d07sm19498025e9.9.2025.10.31.03.49.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Oct 2025 03:49:56 -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 v4 4/5] drm/nouveau/mmu/tu102: Add support for compressed kinds Date: Fri, 31 Oct 2025 12:49:23 +0200 Message-ID: <20251031104924.10631-5-mohamedahmedegypt2001@gmail.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251031104924.10631-1-mohamedahmedegypt2001@gmail.com> References: <20251031104924.10631-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 Tested-by: Mary Guillemard --- .../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 00:06:26 2026 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (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 3463C341650 for ; Fri, 31 Oct 2025 10:50:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761907805; cv=none; b=C6oueJnosF1sGF+WPKyzVNh2I25yX7BlawuqevFcMaCJp8pGBbM4koxkCZJla8ppqHc3f3mWkhf4643Vtz8q0d/ksRTZppe6WDQLecqM7bnZKdl1el4PMwIH9kD7/CruoHp2ndjd2HBpCQ3a9BS1KYfXLuwMvFfkF+LZMFoYbUM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761907805; c=relaxed/simple; bh=TcMYHxAFSNQU8rzO3HWwSoxbbFQbT4iycTi1gAH8IEI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MMj4rn0oyAi+DyCBXFu3I+zixW/ZOzMEoonbtfQANPzjYvbZneD5ZotuU9p7/0JW35pa7zgRyPL3JJ98fRE7VwSbLxrgVX9djGcewOEs5xGEdk7bWdtGzBHRIlTs4cpbvYJQFh/nDL1T0xOwpjWpgGN3uRueqCds5DBDcSAgppc= 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=FLF7zQCu; arc=none smtp.client-ip=209.85.128.42 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="FLF7zQCu" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-477365fbdf9so1910355e9.1 for ; Fri, 31 Oct 2025 03:50:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761907801; x=1762512601; 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=FLF7zQCur6/PsyFTIt5RRxj4D1mvXdGyXIYuuzkq//egpXbTefCh2y14xJTfxkG1bO 9G2m06NWdGNykNp5SZEIA4gCmYrwgR6cpB9IIYeZuKrNb0yFbFNW0WAFaIwe1siZ3LU4 SPYJclN4VoeqI8gwm2XEgq1XCtnAIwF9Kgn5XuhYXFdgiBmNIpw9JbTdX/kp32oy7MZ1 API+GKi8fy24+qwniQlevnu/iVfQSL9vDsgt3mKewed+puNGwkrNX50UkvbbuW6SuwQa OvDz4RoRn5EVzwf5JaZq9GO4yug2UXvrKOQHcYMRmG/khjeU2Jg8SSaqifVixZot6goj MhbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761907801; x=1762512601; 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=tBF7PjbaRn/mu+pGL4pNRAMa3jstgKmdRDIFidc1zC/HFxEV6vrhEXhF+YQpZHXXRm 6qcetSyQ8F/g4vSxDqqUzVgtVgNgAOp3bxU13xliJheYk8mJEwyiEH91CEXfAvbK33jW rOPCZicm0y2nO20yCBq7WQdr4WuhCFeHcGjSdNCXyXWZ1rpt9h2UEOmHmAzxC6LbmmwI DjrwmFxAPneZr2JRngMMmcoDvNhvUVGXt4E/4m4QeVUKBVs/V1dj2FdjNipLszalVNd7 8wVhBBDRx7t4kLqvdYriZd2HeXxWM/XV5/vp2Kz/cFQLNzDl/PoMCIUc3XO2RSbLs7CX d6tg== X-Gm-Message-State: AOJu0YyW71Y6q/qxrzzC+AL7K8DmmFGGwA3XYfZIL/3xTsnoZMeBwTLx yNcKUBxXeS5IZVBPmTA6iG42Gu/N5pLAdUEPltQ1gsUSOpJtqpUdDjJWC4WKcC4+ X-Gm-Gg: ASbGnct4oGY+yuDTnltXwZx1INMHOjlJAlcoCAuJ+8nxU2CGPepZCSAQD1vZs/l8Olr J+v9x7CnP40RLk/qHTtU59WM2ipb2IuAGBIjqoh/ST7tb/wWgDL7rs9kB//bMjlh3FYnw3+QOYf 0a1h9QA/m8sgIQvNebZr0HzmbOgcTftK131jRxyayFw/Ux1hM5Kh10sIx3gbGq456MdqfGOAhII ZfXnOKwnwwE90q4dJWPj5K3g5eBXX167enbpirqiQqHRNb3uEpWuukP5IRlgzexpnJJ7KxDogGJ 0cHYdg48WTRmyYKIoM6xNxQpqc10BS24aeNGOyhj42F8mMac0ZKJSHbpQPEzbXmZDsw3lJ0IGjQ WLnYh6boKSD+9a4SkyvxeAQa6CXts4nxjvD1RvTWC9jW7mXhv0HMjPaUNNFivISuuW75RVa2aD7 edoIu//J9s06k= X-Google-Smtp-Source: AGHT+IH/r8r9Jm7r+3RjWu3MCytnOGOVgf0e0BCmGVPobUnq/iGDiuY9nhgRfW9d1lM1G2bqZQoWNQ== X-Received: by 2002:a05:600c:4591:b0:471:9da:5248 with SMTP id 5b1f17b1804b1-4773087b19bmr24942025e9.26.1761907800917; Fri, 31 Oct 2025 03:50:00 -0700 (PDT) Received: from fedora ([154.182.161.198]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4772fcf7d07sm19498025e9.9.2025.10.31.03.49.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Oct 2025 03:50:00 -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 v4 5/5] drm/nouveau/drm: Bump the driver version to 1.4.1 to report new features Date: Fri, 31 Oct 2025 12:49:24 +0200 Message-ID: <20251031104924.10631-6-mohamedahmedegypt2001@gmail.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251031104924.10631-1-mohamedahmedegypt2001@gmail.com> References: <20251031104924.10631-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 Tested-by: Mary Guillemard --- 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