From nobody Fri Dec 19 21:55:52 2025 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 1883B1BFE00 for ; Sat, 8 Nov 2025 19:49:59 +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=1762631402; cv=none; b=Ns3VlZ1LK0BzoYOTmiSMGxb+xrIj4UqH7RLBId89iQ2lujdRm77b+BcCjHkidYGMCkuj+8q9tRXzbIlZ3MM85IXw+XScL/VyNd2+rl3C5YWosxOy4hVzVAIstMO4NzS6tvC5VFOgT9SYbr3rF2rg9h68Xw2f1rN++dVHNjWBnCE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762631402; c=relaxed/simple; bh=rVWdWmYwATTCWH+YV3TN6fgUASD5QTFhdEauTYh4pY0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=j/bbmqt8uoAPofSPWAAzzsUNKSxxJuC8lUB3ilLQGwzf5A4cl1DwKKOwng/DHsq8F8wRECbzEHV4FAihdO5mlAFKiKnztui1h0qfT9K2VsvBE5hL11n7+jJYxoQl3zGA9qN4SKmtpeyU3gsr7JYnb/BwlMdR8DCL81qres3Lnpw= 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=NFOgJ4lo; 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="NFOgJ4lo" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-47755de027eso12758015e9.0 for ; Sat, 08 Nov 2025 11:49:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762631398; x=1763236198; 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=tC6CcFDtB9h0jZt5MH9nV4+dpNMBEY/OO1REMIcE6dc=; b=NFOgJ4lognr/1WSHH6B9UXOTFkHboXhMSjbesQrL6X9MrNgWXxEs1+KltpPdTC1Mh7 O1Frj34saWjVCFagpdOHzS4sdacVlh0QlkP7tPRufO8ZpXTCDL2p/DYO6Ywk+ThGvHsG VhiGFUjiE3tTu6eMl3/LCiiy5pQpK/PQQ4RKqDtEKzsxgm/pLe2ukyT0hQhgQG4cRygj FLPo/E07v0eOL0M+6Ba7VN+sKjlxhYur0UujJAO1s7Ju4wveM+uP1PxV3k37rDwXRvSR carZtpS/1y7wT9pTlO7XaQUEwjDvi9xd4j+E0YvXIbKEUoPLH1EKXvPNGBRP5lq/9y6t EUCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762631398; x=1763236198; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=tC6CcFDtB9h0jZt5MH9nV4+dpNMBEY/OO1REMIcE6dc=; b=Mkq39/SQzTa7cvtyNd0rYocIwGnKWXGyuYVcwj1uC633OzUNwneDMU7/tcrBkdO2mr Src0FZp1MSTXsTgQOG2ZvxUSGyQ/Gn9DvtwyqF/Ye6vL/n4UHBH9g3gOfG7xrn3Q03TM vzjJRmqmUJ52wrKJQdd2HnL/7xvJjkjt9OiodSH/6MtnP2Q796W/E1SVqn2u2gzIvRN6 Tk5FYIkl2mW8siVkMk18aDrw0INLl65kd3sM4CMZ0+43QWu0FRYIv4kZL9hjnpRe04+0 EUsYoBWq4Ne3JXIqg87aDQZiZtRE2IQQTmdt368qKY0obozAm+K/mBMvAjrLDn9Rw25n FkxQ== X-Gm-Message-State: AOJu0Yy+L66xJnZ8SHV114+IjulT7Uu5wug9Ad2JvuChp4D5Y0P4YU5p 2aTCx4RSnoyJC+hepo0L/IFZQoYZMLV4i2Hv07D0bn4UtPBQN63UeTtAXBDhIg== X-Gm-Gg: ASbGncuojT5VWRIQYBhGeAgIcKOJqI5wYtUy93A83rd/o3ooFiwDVztA3okHdgELDez mStXJRCpB7RXFiJGUXzrkj1e2XMNIALxsIh6DJKN5LQ1GtGcFCysFSUxsxGz28ygxU+ZBL61HVV QHIuYscfMfqVaEokiBJlyYi3VGkd4RTyc/hXi7ewjPi470RONJQoL277gL8Ql4mjPElvptcfsHN P1k+92NWDTjLg/rEvdcthiXiV2EB9o40SFN/LvIa0+NLsTnbVapCpI05IytE/4HstQN1oAg/D8u ZAq7YQ44lxVyoqth6pRPj5TaV3KX0v0RXXbKJaIL808S+B0T0ireYnJ90DJSKHoG0V798Lg+5NO GReVoFu9LP4dfvUjhwMc2XOPvJRJTnPe1CTmINQTWMooq7DKxlObYMdncqzmmTLpfQLPg7t4fkt 4rcyrH2RRo+w== X-Google-Smtp-Source: AGHT+IF/+3+SUkojh3Q/ztfASRycevQZ9mrL6CnFlh8YCnITjDaQVoH9rXfdZTj0M9ykzZfqI+PgLg== X-Received: by 2002:a05:600c:22ce:b0:477:76bf:e1fb with SMTP id 5b1f17b1804b1-47776bfe447mr9951605e9.16.1762631397945; Sat, 08 Nov 2025 11:49:57 -0800 (PST) Received: from fedora ([156.208.73.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4775cdc33bdsm233461435e9.1.2025.11.08.11.49.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Nov 2025 11:49:57 -0800 (PST) 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 , James Jones Subject: [PATCH v5 1/5] drm/nouveau/uvmm: Prepare for larger pages Date: Sat, 8 Nov 2025 21:49:15 +0200 Message-ID: <20251108194919.68754-2-mohamedahmedegypt2001@gmail.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251108194919.68754-1-mohamedahmedegypt2001@gmail.com> References: <20251108194919.68754-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 Reviewed-by: James Jones --- 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 Fri Dec 19 21:55:52 2025 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 7D41D280A5B for ; Sat, 8 Nov 2025 19:50:04 +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=1762631406; cv=none; b=tqkzB99BwuNIj1+4VBrYmzpU28xbm68uUX4xCZmRkA/E5O7nE984TnQ6FEE96CVQzmuaWSrOs1TYoRucRW5xAbGsTgfEgKi5PZWjXTLw3d2ZRNk+hS2RNS4vAwvyVFbsEziTVy7sQGiSNxx2gWW2CkFpRK/E2YRnMFYIepYlwTk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762631406; c=relaxed/simple; bh=PX9MC8HmNl1liASH03zyFsQnq6qIkxE5oSyXIPHw1cc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k5wGuiHLb6YHIsvjHOhY42vJvGcyFlqr3bFUppqvFwWZgFpltaEU+vPLCCccFBLmJA+lypVpDHQKSKODUFcybNeXAc3H4rUUkbWlweMin/qK97vMN+sQsc5pRTV/BFPm/7x6fPa29y8f+nqRS9jViEPWXGJXywUF7mvbBxuUA38= 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=EWZQzF81; 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="EWZQzF81" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-47728f914a4so10683785e9.1 for ; Sat, 08 Nov 2025 11:50:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762631402; x=1763236202; 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=YzVBO3wygi8AtPeTVGw8SAvM16hukiPubsoP12gEgLs=; b=EWZQzF817Jk+PVjaSOObi9uhj/Q5bpxcscppEwkmGAY/zcChvf1Du7EO9TxBcKdUUv 1N16Sv1btmf9uba4SAcSRL5pzQDN5IbE4eXKEZCHZbA9Cv1+iFvoNGa/4kBVsR8QfOKz FJZLdG/eZkKaeM7SCTwDq6qjXsc/ClDbcGlaAv8L2j3ndZJwYSX6K47BOkC+EH9s3Knd sj93TBnb6YgJjIBpU0CZjls4gh25xyzsLsTAZqxhqMdJmhXcFH/zRKJoG+hGmhdMUFh/ b50URJjAiEMHQ5X7XTx4/uPkszhYCqQ71vye2wvS+EmeAIs5dViTc3OUHC1upYTxptsv Z6gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762631402; x=1763236202; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=YzVBO3wygi8AtPeTVGw8SAvM16hukiPubsoP12gEgLs=; b=a35L/v78TyBkxM1lUXQe5eFtKmDgb4RfmAZDqiMovF/KXgnGKX9FpLN57OZWbSfcuo NHnQwlavFQ9s72AxftUihoeWhcrVYKvGzEHpenQbgwBiiJ6I+vD6ZZfxIE4eidn+WTj9 3ugjra4gDmMT3vkmg6NlE2NMxAGOuLhnCRWp93V5jdCHbhsazykAJuZtDefi5Yje5J1g kDroWP9Nwm/qGSz26l98uOXVtqrrCgy0x3AO104Ud1piyh0RSsrGvGpG1HShV7CmSZxH CJc/zuflCZCwvrG/z/3NX1Nm7FDW2uHeOxoVzdXOWkL4nkE28wS+Ejn1WXKrK/p2GZnn ig2A== X-Gm-Message-State: AOJu0YyndjeOsWdjXBUqMkNgaAgPfgeYCGtvrk6lJciAugHkPyKWLLYI DG9kEbLzfgVugPGApdl8Q/kVB8jIRE9KPA60SnUVVuS/RSp4X5jcMA8MKW+cXg== X-Gm-Gg: ASbGncvewT3Mw4qZXOGKUPfBgs40UMbS585r5EM6KzD8N5iwOMkLOhqOMUAizBzOg3l pAn5tE3tiIgZYiystRwAVlBrlML4/PmRBkwm+3bH1ZIl6vnjs5rBsACREACj7/g3aZceThFxHiL aUhCyDjedFlmuWaa9oh6Lxclf9JnZeGZT6cebH/d9dzKWKlvYl7/kra6C+2KtgYJ3S9IC1LoD6M Kb/lXE+VGc6T5ghGV/lCFmliSGkMUNfqssdoMiJVv9jmvnqSL47rBnFYVb08NcaWXqpkkS/jdk1 irA0unMzvImCz+E3keaNLYTyIxz7ceK4q4I1vF0l7ObJlOpm8sRmvD8Vbvh5deyXWOjLaHLdEw2 x+cE7vf2wBTCPaKsCSzgteZhbrNIk1l5NdtJNDTQnJuEKy/pFDwbFxQekgR/Ig22IJd9F1+uKQ/ wZzIS9p/1W8A== X-Google-Smtp-Source: AGHT+IFKRtnzr6h/yDOoNnlfXZI3TwwKRMvaZxn/CG3D9oz1Xwc15sQ3+kUt+r2cqQSOgU1wH0tHyw== X-Received: by 2002:a05:600c:46d5:b0:477:4345:7c5c with SMTP id 5b1f17b1804b1-47773297851mr27813065e9.38.1762631402423; Sat, 08 Nov 2025 11:50:02 -0800 (PST) Received: from fedora ([156.208.73.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4775cdc33bdsm233461435e9.1.2025.11.08.11.49.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Nov 2025 11:50:01 -0800 (PST) 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 , James Jones Subject: [PATCH v5 2/5] drm/nouveau/uvmm: Allow larger pages Date: Sat, 8 Nov 2025 21:49:16 +0200 Message-ID: <20251108194919.68754-3-mohamedahmedegypt2001@gmail.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251108194919.68754-1-mohamedahmedegypt2001@gmail.com> References: <20251108194919.68754-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 Reviewed-by: James Jones --- 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..acc1556d1ef4 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. + */ + dev_warn_once(op->gem.obj->dev, "Could not find an appropriate page size.= \n"); + + 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 Fri Dec 19 21:55:52 2025 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 E84A1279334 for ; Sat, 8 Nov 2025 19:50:11 +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=1762631414; cv=none; b=NrIYUhve0i9ozQK5YunBcYV+IrPFCU6i8vcjj5qIq0wctYU58CxkyDD/sxBUdJYpsxiCVTWYcgt49O6GlEG+gjnrIHKQ+XHa/DRWM+i2aoX+Q6Vplbq55V2wQERQv8uo5uCQpnUkx+aViS9ikJgF7XhYW1og1Lq56hWHyngJ6u4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762631414; c=relaxed/simple; bh=k2k72cLXvWLqSlJ9i7wjju9Hv2ObXwadGjokiPjmX30=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=J32nzZIVeuFr0mFj6MthlEVjJvX+0wkplyvG+IGPrfirjTIyB3QCXNo3K8tE+XwUBLVQgms3NFPJxbAtq2hKJj3cjGvWmH6JOXIbbWgkCL85GY0r6tmLrPxWQe4GBe6iFriXUBJ39Gb33HIJj2XZXfNJB1lvTaIsxIKzCeaSmW4= 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=PTf6+bxr; 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="PTf6+bxr" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-47758595eecso8788055e9.0 for ; Sat, 08 Nov 2025 11:50:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762631410; x=1763236210; 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=qi8xQlvzBSlmsDVPhecyLavK8NOYFA3LF8oQkJrVx+g=; b=PTf6+bxrCQIsaCCteWKwGsByMfHEaOo3ydAVEMp4DrIW+D0V3yc/qEH9Mr/dgNGLnk kuz2zaoouwYvLSK6W3BLfDyYpIMGZEJhotXAD+Gq+t5r2gMMjYf4p8yy+uxodmpzKJaj 5i820jUD8P7Z9vU/oQipCBO4XMkUEPcDBN1teXDc/LerShFGSJmM90GeESF8AZGuc0bV 9dS+GashuJqAF6eVE8g9fCU/JK2FO78vL3V9W0CNSM5VFS3v63CACjCCa5IitmgxK7rE 3S7rssoJ8VgkD3c/UsG3ZUO0yIyAM+agXMOAQhfeJq3jrTy+seydDfEXNepRnDXlOZXZ IrWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762631410; x=1763236210; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=qi8xQlvzBSlmsDVPhecyLavK8NOYFA3LF8oQkJrVx+g=; b=rCOTJFBscbAKwq1800T2diQMDBtLIA6Nzcv+Ln1aJpdrgJ54AFS3K7oyromgeaaenB SOFsY7T4qkbJo23yL5+bdXghkrUdjcqlIbeHg0v0K4e+G1TXLx6LykfxG0UhcnMza1zg BthxlTDK9sUhAVnshmGf7EI2GgjuQFmZ2Qa/O3wMmh4/95Sm2ulVojOM6j8zjEze2gx3 FUirtel+ldrsirpecOLqLsBGiRqtUy3X2dr7XO8oBm6cOMt4tBQENFvuyy7s1aISK3mY EnqiAeq331Vh+MoclAntTXFG1rzH+xem1HT9yqS5jhJ59Cth7dvSrFFZKdNG70zr4VAs Z9Aw== X-Gm-Message-State: AOJu0YxD/bh4USEeWkxiuCBoLt0s39nIEhTK3WrF78KeXB5VjTIQXsHx U17rhT1Wq8cDvhAtQf25xETam93aR3CBqaAO91nOVbkRyWCEJybdmYJuqKonQQ== X-Gm-Gg: ASbGnctqF7t5CZL9mmoqzGAF/IuNaq5YbJ/to43dgtlSFqhmas6CUSl0JQL11xM5V1r BFJRD9IaVyhHD6mfvV3+W42WKqZCBj97LTJtO7anwET5nsZ66f4HrpsyinS/SoYBhDRXlYjj6bC KmvGH5/EKb7huWCFWU634dlGJbZ0ygAAg+lRA84MV9zf9mqISMUc+2jsuHzqvB5J7zGZ6/E/Uar aRh+FAIKUMui1+G7lUdT/e9bkJGn/a/ykqwX1U+Z6NGXlNolGTmlYvpVEvi45A15zGwdc/vIk/z aStmElIKtE2tmjnuBgqPuRb4zMsMMSAdVB3Gcd94/j9FqY6il865ME3/NUpkGzHrD7HRkgxTYbE 68H3YRQjL9aMBuU3ZAi87bcv0p5roGmm05MPpZ97+RiTUUuz+gFmBHAbBntDy3uxZlvO5J90B+1 Zu96ZuzsgmxIUKJqVFI9GY X-Google-Smtp-Source: AGHT+IGJ0mquGZTUHobdRtGScO/j12gECXAEL4G/mW7xZCyE1L9MtsLoPR7OPQcLTRH+LMInpSE23A== X-Received: by 2002:a05:600c:138b:b0:475:ddf7:995e with SMTP id 5b1f17b1804b1-477732341demr30177645e9.12.1762631409686; Sat, 08 Nov 2025 11:50:09 -0800 (PST) Received: from fedora ([156.208.73.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4775cdc33bdsm233461435e9.1.2025.11.08.11.50.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Nov 2025 11:50:09 -0800 (PST) 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 , James Jones Subject: [PATCH v5 3/5] drm/nouveau/mmu/gp100: Remove unused/broken support for compression Date: Sat, 8 Nov 2025 21:49:17 +0200 Message-ID: <20251108194919.68754-4-mohamedahmedegypt2001@gmail.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251108194919.68754-1-mohamedahmedegypt2001@gmail.com> References: <20251108194919.68754-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 Reviewed-by: James Jones --- .../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 Fri Dec 19 21:55:52 2025 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 A5F462836BE for ; Sat, 8 Nov 2025 19:50:15 +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=1762631417; cv=none; b=lx8aJtNpvuYtBgdKm/BaQUetkRkQh+s+6JHX2c8JSjpyUIK6tWMPzxb4qf04j69Zt3otFMDlMc4clamZ4w0Ob7ugPT5xJ+USSiUZ0M2X3ySaIXrIRwfFO3Xu0LphXZVOtOzQjn3FA+NNLI4iqxypX2tDleUy0MrZ5iv6S5MPJn0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762631417; c=relaxed/simple; bh=pNgwOBgBk2wMiFrukjS9HtqBAxX5pCWg75gT1vVjMXM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uob4fI6lcYleP+OdCf5oJg22+U9H5V9MlreOwEia7G1koKbC92a1w4OQVdkQyWn30I5VT+z5DGEoFnyAEKwXN0bu3w8jKf6EVKFpkf+zlHvSTqXx19u6hXfDkkkgf9FTCe7OJ+PSxgfICbvoO2hUwH2dPtE3zWzLc8MJw4jbLEo= 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=O54T8x01; 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="O54T8x01" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-471191ac79dso19215875e9.3 for ; Sat, 08 Nov 2025 11:50:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762631414; x=1763236214; 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=vtdKmJcqO9zaIwqI/14ufG9W4yGZnpTrnplEsPvtN6c=; b=O54T8x01mNAI0TmPw4n/PNVMdbrv3/kQq6TPnpTzd9UdRqX+yeUgjJeZQ6looC4Bsz fAueCBxWkPfm0vK9wy4d98Ed8Jxu63R0tBwXmmlFrSZ+15sJwnRWDFYUVR5+oqFf5b5S R9T/DtQqYwSq3RwhqBMl6jLV9qHe0nvQ3/ilcIwgPFVT5YaB9ptvyhkZ/WYWpU/4xr4b Y/1E0FGBmtx5ui95Dp/S1iTbstuVzg7n3S6zOW3I4jReTO9akrA4GIH1+UDIjDrBu0qn jDvRBLqmbWVm7UtDraQ5f24+bL+0B+2uVXOtvGaqor0ovfWBn+9xvawokBONAhPIWlbP 0aZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762631414; x=1763236214; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=vtdKmJcqO9zaIwqI/14ufG9W4yGZnpTrnplEsPvtN6c=; b=eemRVWRYs+6NqoP5ZPSuEcMjSVKTMcXMuwG0zBKR07GX5PolbqajcZlej1kVoPIgyv 5g3Hb/I04dwBZx77Ur4PpLnzXOYRPIuZ46FEHJPt9j84HhljMWqyLqyIZx5sBX8ekhur qWNm5goOQJAjuqBq9FhMI6yb6JkKCeKGuXuMiYEexsHatFMxAGb29qWDuZ+6kmG3SprH jWPmGvX5yQxnqpbTYtq9lzmhcO5bX9QHoDiUfsZ2FS/PSgofCBwPuJKXCQodpM4oM5VY jHUDDCb9G0oJ8m8cemk0Swza4fx98WDWZQqPjFtvB9fu1zHf6yKq0aB4+VXWRGPBRwJ9 N9Sw== X-Gm-Message-State: AOJu0Yyamf1XblIrUJUgT0T/lk52Enc5s9VVlU3KHYJhrgHm1/uAkGU8 LzJL+ZiPeWWp13V/jaIK1McvXey3hC4dR7YWnl6Pa/xjp8oiEcvR60upOWTVOg== X-Gm-Gg: ASbGncvohZNWMWpXuUdfNORyauTDwCv5pyoIuh2G7CaOe9601VR5m2J+jb5TaRFJKe1 O0CewlVENwuTVBmrTTcinid1XAbJfWgA1FbyIoLDROMifvThaLdUqKjFOjea/PfxhR1YFP/AP44 upWie8TagbchscbMJ+DvalDUbNJY4ORgHdIrenXc/uXjcCNXbiXhPb0rYDwoGzdIsw2Z/zRTQpX 830TXB7SWX8tNWassowsbbjm94KpZ3MCJuTB37OkvJ/MJSE4SpCglvYJznG0GfHMhbLPtvN0IT4 beZsxrSa0j+OHVGVDfeq1m7UrxRHHUpONfxskO48DMSP03HyyjFPZP8H8Kac0YRjHfpBVl+Xbff tUZC2Pdi21faVZgb8y8G2pIY9f2qSMwV7hGfx2LiXLkE8mLGn+L2PIq0OJJ0+6eiF73KgzP7Z5v WzSkkdzi3ThNKHwh7VlWlS X-Google-Smtp-Source: AGHT+IHLDsB59QWASihliDj9gIsX+r8OWcAsgYDGHKKuet7SX9VhC3x8d+fQ/Gzbhl5mk70HXHn1uw== X-Received: by 2002:a05:600c:608d:b0:477:73cc:82c3 with SMTP id 5b1f17b1804b1-47773cc8453mr18802295e9.26.1762631413614; Sat, 08 Nov 2025 11:50:13 -0800 (PST) Received: from fedora ([156.208.73.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4775cdc33bdsm233461435e9.1.2025.11.08.11.50.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Nov 2025 11:50:13 -0800 (PST) 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 , James Jones Subject: [PATCH v5 4/5] drm/nouveau/mmu/tu102: Add support for compressed kinds Date: Sat, 8 Nov 2025 21:49:18 +0200 Message-ID: <20251108194919.68754-5-mohamedahmedegypt2001@gmail.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251108194919.68754-1-mohamedahmedegypt2001@gmail.com> References: <20251108194919.68754-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 Reviewed-by: James Jones --- .../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 Fri Dec 19 21:55:52 2025 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (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 0230928489E for ; Sat, 8 Nov 2025 19:50:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762631421; cv=none; b=FcBvDdkbvnbG8FzhgZAcEvo2JrbUzAYTI6EtyG/62hi0XutCMcr78x6kj1aMwiE2JXaArg6YHTqutsdxbC8yvT9d9q+GA3YQryb5qYIOivF/cJ3X54v8x8VmwqD+ONkG3Yknm8g7QAfjfG3ehFsOCIcSH46mG0IGv4dwtvML2dg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762631421; c=relaxed/simple; bh=2StCs3EURjKPyD1NJdn+eRFh+P0L0raQMR+9SDN0Mf4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hZlHJCcIkHG/cp3TWWeuHdKCluL7V7ufI70wksyZCuGp6NtW1Fuv+y3FK9vj0wJJDkjElxd6SecjCPWwYOOMTvjaNKeaDv7G3wslJfEISDvQaYbQ0ETSDx9xS4Du/wpxTCLP3n/qoVpIgDN4qMrJDAGHMVsTkERM7wXLYYL8m/c= 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=X1PmW/JV; arc=none smtp.client-ip=209.85.128.41 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="X1PmW/JV" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-4775e891b5eso9004965e9.2 for ; Sat, 08 Nov 2025 11:50:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762631418; x=1763236218; 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=wTErcnYX+Ce1Mb0cQ/tmSFUfGgG0iezGcfWDSHlRH28=; b=X1PmW/JV4eHOp1om6OpEYUkIqia9ca1fIeulPqR3idqtH0KYcsWcE/ho2YxXeMTHCK /JKpj+pgguHj17oV7wyCToQBC/Vu5a+1SgiXrSb3HrwAXAT/I+LnxVyNVDz8l5fjsKJw 51gOgHH+8ZQ4unBcvxM0jfziMkQm8/cPZ24FBwiyfGhtGpAXWFl8sK99kqHS4b9392eI C8caNk15Xg98ndeLQkGfZsS7ev7IYIUARz33ZgOPxPjadFUY0Rt9FghzVGAiwtdHz+W1 16RdB23pLso9SClZDc/5jW4zCBmk+uSwwhwiwyx6yzklC9r56BKTOXloRNX6YJ2nFzsD WRsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762631418; x=1763236218; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=wTErcnYX+Ce1Mb0cQ/tmSFUfGgG0iezGcfWDSHlRH28=; b=el+esPbbmR0itoYv9NdJXLgu+Zgu6+c5jN0dPfJgcJgxC2rz2Wz3cHrGvYPQue7YKF g5cvYnx+IDXNCpJ0xATUOb5odXWKdi1tsji8SEv11LFLRRNG+A/HPQLKc9MfXh+mM6Ax DkSyjtu+BvkRw6ee/jesiNNtwF2f5IFghK4/ysvlUsgXSGABAGahS6q/APiN+xIty6qw 3fosTfxb2QLg/Y/QbBVclqKKId2hqMcclY4riWlkwNxVUmIx0+xyX+cIO+U2E/9W5z5/ uzhm//5juPyBgD0Y1g5cwM4e4us1RIyw+L5hxQop7j1LYwsGktXHr5QMBy4qsQasXZ9n 1vug== X-Gm-Message-State: AOJu0Yzt1c9j5U7Qq19gyRwMy/GS7S02pD8tiVorTlXz+JU/31o2rTWR tblB76PmESLjEnNUrLdl2vC51KkoiMZEgHPDfVHfxPWQJ2Yx5zBelz2O2T614A== X-Gm-Gg: ASbGncshirmCqn8qEWXSUinLrZxqbHaCUNZrmvUZOaLaXMaGYDqZG3dZkdptRZdZTtO 99Iedo78pogXnylgGQQovYfe1so/zjhhgIazLWpZGSHfxnWaITNLezNwGmW2e2cgh/WojSjn6Ob 50b3rr1srK3SZsaBURbiMMRtNy6IYPnVvX23W9yoGprmDTRP1vA+33ZBs+IGQZAOvnYTgEUhJXW Dv/rbqyTKxT3IousXYR8HEKSIUJztD9ZWRYz3/ZzV7fOlZ/oKoM27c+GHulFY0niLG08TCnQGXN 7+gqx7yQ0G71PM8pZgMfV1TAv9DIvL6V/01BP1MPXqta3s/G7b/VIhIYd0kWegFqo1Md9oxZJrT vYjGlF1RDb37of7lMc2EV+dzhqP3baZ3E6+e9B2kEmjbKhcCdOQ/9BuKHfX2TrwBVHSPNfTh2GI 6pt1vKy8cJwBc6lbgCm7U7 X-Google-Smtp-Source: AGHT+IEH/b7pHKnY1anHYgYBmHLRygxIbG7U8tQjG1nHRxCMqpqETqU/RlUFAKuvVjweQbQ7cR35GQ== X-Received: by 2002:a05:600c:1912:b0:477:7946:dcf4 with SMTP id 5b1f17b1804b1-4777946df44mr499715e9.24.1762631417554; Sat, 08 Nov 2025 11:50:17 -0800 (PST) Received: from fedora ([156.208.73.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4775cdc33bdsm233461435e9.1.2025.11.08.11.50.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Nov 2025 11:50:17 -0800 (PST) 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 , James Jones Subject: [PATCH v5 5/5] drm/nouveau/drm: Bump the driver version to 1.4.1 to report new features Date: Sat, 8 Nov 2025 21:49:19 +0200 Message-ID: <20251108194919.68754-6-mohamedahmedegypt2001@gmail.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251108194919.68754-1-mohamedahmedegypt2001@gmail.com> References: <20251108194919.68754-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 Reviewed-by: James Jones --- 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