From nobody Mon Dec 8 01:18:13 2025 Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.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 3EF0B254AE4 for ; Mon, 10 Nov 2025 15:33:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762788787; cv=none; b=ESkLkl7OXPoJwlDCMRwjCXajW3Ra+muJ5jueKzzl05l2kz6QdE6y1ASpv7OFDWFKLhmcJFOgFSwEz6LA/aQDMSm2di3TJWMi5G7g1LgVfUnCcgQQ2cYNAcGdWSrZ4xmz5zEzohCivYoRjDNpDddL1qCCedfF4zUgE+GHGuTpIKY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762788787; c=relaxed/simple; bh=7szRnvDXRClX30TM/OIP1tdILUm5mNjOW0/aqx1c1HM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JhXBvk5pZqyXhLbSUSOXVKjtMW3vmC8pY1xTZrwgjYJQqiaDZfjFTgsFFdJP86hT9zj15vD8UbA/wE50S6r8HCgYXNqc4ziFmfCI+VfrewPWLB3OeWWTGW18pOwGJ2x3BlTmltTwZtoTxIIBcz2Jf/OJeSqCV1th3wV/uCl078k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=mary.zone; spf=none smtp.mailfrom=mary.zone; dkim=pass (2048-bit key) header.d=mary.zone header.i=@mary.zone header.b=Dr7NecRP; arc=none smtp.client-ip=209.85.218.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=mary.zone Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=mary.zone Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=mary.zone header.i=@mary.zone header.b="Dr7NecRP" Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-b727f330dd2so537395566b.2 for ; Mon, 10 Nov 2025 07:33:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mary.zone; s=google; t=1762788782; x=1763393582; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=BRP34ynAc/7hi14dXs+NgfdoIivClYQMM5FEDBipMJE=; b=Dr7NecRP/RklVJC5C+xmJF+IgyQ4HCDiXHnN3sbk2TKQIK0uJEA1p3HvJTdebLV/Vo 4do1GJBOriKAY4WbQqQcxlKvLElYjAqu8+E/uXDDYF0EE617UbtTNHk8ko14VbUo3LoX IzNMwKZhOJVt7LyLTDHZCgsDGsK6AoCHCajOwqQ104Hdx7vlUjPfKgFTVKoUTZljaQTh LNLeiAtJ2mwS/qKbrxaev0nvN+Us0c6QZpQus3DECAN4+2vcUJmWBOtMGLISlWjMu50y 461lPGtG2OFLCytY6VnLV/yuCPcpB5eDFqm2rFJKoVQea10ky+coam8LsAXXeVVOc1Sc jI+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762788782; x=1763393582; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=BRP34ynAc/7hi14dXs+NgfdoIivClYQMM5FEDBipMJE=; b=TI2lk7zzMQWV2Merx7vcqXA9VJDrv7V9BNG0R9i6JRjPuKgD7+/wbcpB4IkpwbXBiJ oepW3FSMjtJMIbGUxv/huk/fNFv0ZvlqXAbQvGxs2SILbxOmUupZPWcr5L58VXdlscPk 7wzE5WA8IVcN7qjS146iFOoej8SSFljx2m9cDd3FUdbFOMEp9HtqCq70A0Wd3ZDOReFE CpZkK/UMiWTWYKJzKygt3ZjY7ZPaUdu2LElmmGDWy1NV1HSSyi8Q49MR+sGFjNDGl7m2 PXfRCJ7zaIn0xQBX7erZkJ0SxizZnuNA84tcoMA1eCCVkj0bbvB4z192jK1EmsGK1nK+ EtKg== X-Forwarded-Encrypted: i=1; AJvYcCXCI8CmqiyUgbuPks2sKKtSIOnkcQZqH6a7suwKFfsEN4gmggBtQuk55osPoawfNexc6N6RFdDGVqI4rHA=@vger.kernel.org X-Gm-Message-State: AOJu0YyuPQjjneA2afEQtmR21wPDiw1WnkNRtlGnSGEL7KQpOj+aTGil MAiuVxBIpjnapVPynB51zV9M9Pl3e4UklpC12wHovuyU3EUHMAKFXXMe0b8qQQPyrRs= X-Gm-Gg: ASbGncuGqEajPBkX+ugUvbVthMVvtNUyNOsRWm/Enb9OBmBCgSOaTpHGajoK3HLLxep 5IkBNIoqzqf+j+aOzeKxX1sBcM9/eHio8kM1pM1Pa61EwtbJPM5qq1+nB0VNXK4Xa7vHrQG1vvI ZeRVylDahAAYTlBXp5stzQoTzatu4gwWE2jZUy8NUkFLqgblWYzd1JNV8TYGvHWdM/s3vRLRh04 Zq9Z7FnIj2kfVzIrVOx0jdmpxqoW/ASiCojdzFypo/dfU042+UF8oi+Y3RX9J2ct5by+Z0QIjMF PbzuRp2bpvDy86TVhWCfGwgcWKQb+zZWuMAVRviPftMKHUZZZqUJSrN/dnmvo8MzY8693zwAsgk nVYi/yEtPGtDYpnjBH+t2d2LxN9Pv94RdnZBBTwImneUUxWM4j6xSxVXUmFIK/skz2YbDTcJowb PPNT0vaNiCzm4YHRhJD2eHrmfcLQDOPt0+LOyk4UbnP4O2Qg+H1ZPvIKZYA/knjpwBtHNshDM= X-Google-Smtp-Source: AGHT+IHMJVqiZ5lOq86QnXg9J71+0KT8IUuz+GUymC/UorVBujVugU4imA46tP3Lef8TLSkE7bsnOA== X-Received: by 2002:a17:907:3c91:b0:b3c:193:820e with SMTP id a640c23a62f3a-b72e02ca102mr850800266b.13.1762788782413; Mon, 10 Nov 2025 07:33:02 -0800 (PST) Received: from [192.168.1.42] (2a01cb0405e83a000cb38cfe29807c1e.ipv6.abo.wanadoo.fr. [2a01:cb04:5e8:3a00:cb3:8cfe:2980:7c1e]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b72bf7231dcsm1115978466b.31.2025.11.10.07.33.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Nov 2025 07:33:02 -0800 (PST) From: Mary Guillemard Date: Mon, 10 Nov 2025 16:32:56 +0100 Subject: [PATCH v6 1/5] drm/nouveau/uvmm: Prepare for larger pages Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251110-nouveau-compv6-v6-1-83b05475f57c@mary.zone> References: <20251110-nouveau-compv6-v6-0-83b05475f57c@mary.zone> In-Reply-To: <20251110-nouveau-compv6-v6-0-83b05475f57c@mary.zone> To: Mohamed Ahmed , James Jones , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mary Guillemard X-Mailer: b4 0.14.3 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 Mon Dec 8 01:18:13 2025 Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.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 3C471184 for ; Mon, 10 Nov 2025 15:33:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762788786; cv=none; b=SjUmH7bXsyoCECAMqFueG8tSaxOEdOUtEyw1HIO4US58G6A8vOrgjD+WcdkUDvEGYHrwGgRGKXk3V3iHdi75m3YryZ5BOQwQy4VDacHLcOwfnc0/xhkaLnmYLJ/ZnnCw8Vngohdax++RXxh07GAiHO2VIgj1qndR8gd6U5pL24E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762788786; c=relaxed/simple; bh=T6q1ZsIoH/X7ckcjucX48+upMCdXpdZQUc+m9qvG0T4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CJJglPL0fED7Qe4m4iagRJhYosXPJeIVG3nqYUrEE9WByF7b6MU1P4uVjj9y88d7yFSLFXYXKzzm3Gigk/yjuvCTrQRz+zzSc9fPvFS1zicM+L17O9bGYBJtCFUFH9jl8gkvdu0aYncK3iiGZ2mzXAW2dgQKSacW4iY4yPp9ot8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=mary.zone; spf=none smtp.mailfrom=mary.zone; dkim=pass (2048-bit key) header.d=mary.zone header.i=@mary.zone header.b=IThJIqmR; arc=none smtp.client-ip=209.85.208.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=mary.zone Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=mary.zone Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=mary.zone header.i=@mary.zone header.b="IThJIqmR" Received: by mail-ed1-f45.google.com with SMTP id 4fb4d7f45d1cf-6419e6dab7fso1293693a12.2 for ; Mon, 10 Nov 2025 07:33:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mary.zone; s=google; t=1762788783; x=1763393583; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=R8anBBbHESquXQhbkwtAuSkGAXh7jPk8kuEQGrPhUcY=; b=IThJIqmROwGZnDApKDnWO6//NcJO/PpW+u1y7HvgDEi3Z7P7+qoKKsTZHZ0buQ0mLZ Unfi/e3wEMh52aZsGz9Un9hXGDDIJNx/LBT9JArs2w5BhLiog3PrlIUAhQjgqNSnCQNs cqogHLSwLlpLoxvWQCFQhuXFVuvpqvjFSn2OG6TbJ68jdpcenc3PM08ntSrypCimF+p7 Yvojh0jG0lld/680LIx64vvrBGG+PwNad28uiGJEI/VE61ImT6qUQpDZGwB1+6iGr0P5 /OIqx/GAiEUw/9bBmRasAogO5L2F2zI1p2Xc7i3hmnDsKSZ3HcjrUV/z5XbCwZ26nHHj 3/xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762788783; x=1763393583; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=R8anBBbHESquXQhbkwtAuSkGAXh7jPk8kuEQGrPhUcY=; b=OAo7UJYNYkwVrcZq9YZj/zOqt5YrdiwRyOybNY/0gMSMuwW9E4cLst1HQNhig3c8FD ptJ1J1PA2XadKQjhu4pl4Woi2Ws7uAr4Un9yO+ZvbzcDJrgt1aGgNjfmucPhp46QVQj7 /Si9Bb3pz1TRizbe9ZkMpjsrbCONjZab6CNkUt5rBnhrWYUhm5InO6MrtVRfxz51+Ag8 Z+4pdNb03pPPrRKbceDJrvUh720Kx/EIyHLd24NXwzxrPcVxFELMwg10JnbMrgmkppno KXNXxwRvmfHhPVHsSM9J9XVFMu1Dzdt7fvcsvK81S0SX/57PYaKz5bsPW2Z5IbpsrySW 8fwA== X-Forwarded-Encrypted: i=1; AJvYcCU9MYp/Fdmo/MlUE1FjK+5FeMk7CnzB/oeq+OtWU2MEPrPZ05ilTqCRPUmQtsGCF4ZLPjdY8TDzsKDqM7g=@vger.kernel.org X-Gm-Message-State: AOJu0Ywvvr7K7//EuulYnZsf144Giv5yp7vuSYgfX7g9dHLiVVuqClm+ kMG/JQDgJHnTLHxn8i/iwoke5WthsOt7UKiNZOjvkS/0oCjAb3VFzvf9HCiPrr17El4= X-Gm-Gg: ASbGncviJLD7WLZi6exIecKry4Z7czSetfxxiB5FnykL+Y1TCU7Qryiy0Isck7UUqha mD26llfHB4B9m8hYWktmOgSbVbNb5rEonGYQjuj5eVTQbb7/aP2ZE0USKWYttFnHDFcWdB7RwbH 9kklpWLfA9RqsYzEsl7cf/EtaipSATcts3u7lPpAbA/nIYns7bDI6IPiF9ZJLHzbj2GgwOcJgqk McoKkLCOYbm+r8DecdKJKG8CTz+gd+ZxzIM1o/hvGNbkazkDWFi5Y1/jvb8MIhTWnKkOTj920bk mlT4NumTO0HJ3QKXR+E7Mf7KkcWqcHLPZC9ehUQz3MpJM/O0pxb/h+ML/rQ6mlKfCD3kmbJWkC/ zjE2Sj9d965xlLMjjZNSkVHvIabcxSv6M61xjAkF+Yy6VVJTRwQmuWydryaO/ynEvEh68QirYr9 80eEqbirfXtvIVN3hh9YHD84VbQnlERTHm3qE0XzfGdbdc9Sca4AKEsmDSwkPyo1q4PJJoBrk= X-Google-Smtp-Source: AGHT+IGLnUb5JAPQPO72VTewXJyhQbqwXbtomELs4bxH7l4C0hn/3i6G7eKjJQqBAuCg+Rqn79a5JA== X-Received: by 2002:a17:907:c1f:b0:b6d:565f:7862 with SMTP id a640c23a62f3a-b72e02d3b95mr919506966b.14.1762788783332; Mon, 10 Nov 2025 07:33:03 -0800 (PST) Received: from [192.168.1.42] (2a01cb0405e83a000cb38cfe29807c1e.ipv6.abo.wanadoo.fr. [2a01:cb04:5e8:3a00:cb3:8cfe:2980:7c1e]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b72bf7231dcsm1115978466b.31.2025.11.10.07.33.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Nov 2025 07:33:02 -0800 (PST) From: Mary Guillemard Date: Mon, 10 Nov 2025 16:32:57 +0100 Subject: [PATCH v6 2/5] drm/nouveau/uvmm: Allow larger pages Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251110-nouveau-compv6-v6-2-83b05475f57c@mary.zone> References: <20251110-nouveau-compv6-v6-0-83b05475f57c@mary.zone> In-Reply-To: <20251110-nouveau-compv6-v6-0-83b05475f57c@mary.zone> To: Mohamed Ahmed , James Jones , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mary Guillemard X-Mailer: b4 0.14.3 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..f10809115c56 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. + */ + drm_WARN_ONCE(op->gem.obj->dev, 1, "Could not find an appropriate page si= ze.\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 Mon Dec 8 01:18:13 2025 Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) (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 09BAF23D7DB for ; Mon, 10 Nov 2025 15:33:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762788788; cv=none; b=lU1EnIxn7rS/YVj9jV12joJITUahqw2BaaQMIiQowdOZwBGTgculAp8Pu3V5pgsMu5GHuPWNd+gg96lTIvLKa5twtFA+PNROjLKPRJrxvUtu4n2Ovg1a97rmH/6+4zWd6D5P9rofRtlB9nA+FclqNPq30ohM1Nn/LBladxr5G/U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762788788; c=relaxed/simple; bh=oj+/7ZKp13/wE7+I0q9U+i1FJpHSZG5ujs5ZMwbspGc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AqX2C/hSLEe3hs+CsjS3mD9taLVOSAUflk/VHsVGXCwOM1GoktAFDfiiIpn2IZWBqiN6ZtnbnBC9dVsO/87+lViKXdoHy5bduZxTF4bUll/PNF6o2TQ5lxEv2ZZ6KqQ7Qt3SSV06VUceY4umVcfem6ev4R2oznTzrsR59K/gH0k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=mary.zone; spf=none smtp.mailfrom=mary.zone; dkim=pass (2048-bit key) header.d=mary.zone header.i=@mary.zone header.b=hQ+61P9V; arc=none smtp.client-ip=209.85.208.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=mary.zone Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=mary.zone Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=mary.zone header.i=@mary.zone header.b="hQ+61P9V" Received: by mail-ed1-f51.google.com with SMTP id 4fb4d7f45d1cf-64162c04f90so3692956a12.0 for ; Mon, 10 Nov 2025 07:33:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mary.zone; s=google; t=1762788784; x=1763393584; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=dV8HTrWRbKTwEKdId5EYrcLWXepKsv72Ez8s7uKyCdc=; b=hQ+61P9V1sUhh+Y1NsOsnCj4yA48KCsVSvLB0ZHxHQlUNAbpkuCYdJJ784OSucNq4O kLb5n7igM7aaipr7yDyrijPOXivgPkBptiI1ueWbK4YqrCdC1WLfaE/WC5VW6+ynA1im HMbcepdsO2w+Id9Bm7DDAB7AkVE8E0sJhL/ueJ7rjkAmtvRn6+cs2u7/RmtDUDK8LjxR sO9TXGg0YSGQXCAgsU9h03dQYt2bxJLMu1gvxYp79gw5VGxlDENKdIv20UqtG5Ngfv2y njgZHGPt9jdlWOB8tSFn//IvD1DUnU4pljD3ipSldWZcv2CjV+Q4PFCdpVcwSzlihkoM FC8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762788784; x=1763393584; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=dV8HTrWRbKTwEKdId5EYrcLWXepKsv72Ez8s7uKyCdc=; b=aGtcTJgrH1j6txhd5ig1jKlkeIlxtYDB9wTEyP6FFTJXwBtv7FGaQ6xBqbwk3EnJSR i8lXxpNoqArrf5srhtvf1DGz7HgT4PyZNSmGCDqf4q/flmapZneq/7YqbRT+ccQv4bVM /rpNSOg7ypDniPh0GSsGZoPa3VThVetS4w4CxyerP/L4PV+LcfcPbChMlY9+Yhm+jhOz zcqCfaIbAyJcKQtFsFH0m/mpJ5vtJSY4DRSXmQvTDavOEHQ/lvPln8tC3UF9K8Sim0sY ZMjIFZVRO3YEWIa6l+E6HGFTkhD3mnXvMatvOElbfEcdszPQ7RVb6UurX88ngP7swkm7 KXJQ== X-Forwarded-Encrypted: i=1; AJvYcCUtGCHPc5FyWYVO9Fsy0rZa8iE41+nF0DgvpTvwpmy6Q23lCMO+UOaMhqPdlGrvKWmxao6kQMvru5CWaws=@vger.kernel.org X-Gm-Message-State: AOJu0YyHPDpp+/dGV4xk2Q2x/8LOIL5h4Iaxi6h1rjeUGkNcApwRu63+ PXylYqqmALmaE5MfU226o0NVzg+lfP8eLvyZmJVsEb+hj5568SwdUBK/8VWdyaD2Iyg= X-Gm-Gg: ASbGncuoRnSGUH+hTckH/8km6TENL7D12pYz/JtVg7c1IaRx6pQtCh3FcU68+bHRouN eX09wGPN0B392gpqlYaaAjSovHzkLGd+GrgsiNSi+1rXaq5CNY2/TsZIOeourOniL/KE0fiyWxZ pqkQHNFLu7q1mSlLCCPEbl2YaQUo3sKuO/WTdmEhUe0D81h6z5cd6lR/0zz67fC5lbKLJYY0hXJ ej6i9UgS+19IPu0dMu+U2ENMYjNioP+5LstDJjYdGxBb0K7n6kyKQHO6M9eVv7BXyyhTrXKqH2t 3X4o6jaNkyN+xqyHyLMv7dRgivJf/HVACAFvHAxXw5ufVANvuq1vvVweAiW7fLPMbkzLxtXG+b5 /tNpj222e4KrPpF1FmRsOduGhcpaxthP33YZ/H+9TW94hfPolJ2h2kEVGvmcWzDZGr7IHjg5Qnf PdrhRTK0D5LKZ/QqeLwauYdzzpxiCNWjyuCQe8TaLTZtDyt7s8+wGnKEgCVVC8 X-Google-Smtp-Source: AGHT+IH1eO/pAsWGf3irlTOolQfuNePb26vDKwUgGAjxaSNbydnFYBUagX4wozVeTRQgUFJmawwuYQ== X-Received: by 2002:a17:907:9619:b0:b72:5d08:486c with SMTP id a640c23a62f3a-b72e0476fa5mr966079566b.27.1762788784221; Mon, 10 Nov 2025 07:33:04 -0800 (PST) Received: from [192.168.1.42] (2a01cb0405e83a000cb38cfe29807c1e.ipv6.abo.wanadoo.fr. [2a01:cb04:5e8:3a00:cb3:8cfe:2980:7c1e]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b72bf7231dcsm1115978466b.31.2025.11.10.07.33.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Nov 2025 07:33:03 -0800 (PST) From: Mary Guillemard Date: Mon, 10 Nov 2025 16:32:58 +0100 Subject: [PATCH v6 3/5] drm/nouveau/mmu/gp100: Remove unused/broken support for compression Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251110-nouveau-compv6-v6-3-83b05475f57c@mary.zone> References: <20251110-nouveau-compv6-v6-0-83b05475f57c@mary.zone> In-Reply-To: <20251110-nouveau-compv6-v6-0-83b05475f57c@mary.zone> To: Mohamed Ahmed , James Jones , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mary Guillemard , Ben Skeggs X-Mailer: b4 0.14.3 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 Signed-off-by: Mary Guillemard Reviewed-by: Lyude Paul Reviewed-by: James Jones --- drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp100.c | 39 +++---------------= ---- drivers/gpu/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 Dec 8 01:18:13 2025 Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) (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 0478B258CD7 for ; Mon, 10 Nov 2025 15:33:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762788788; cv=none; b=XgqboulxILy+Yqj3rVHjJBYv0ASFVcOdGnRQEom0CG4mTtO5JyIeF6ECU8t8QtgHDyeB+zAB808JQnsA5UEV+PktKRQFe1LaxQ6ZGTVXOh3EawenCd9Kc5Y3v0JyU6fBGNth4T8sCPdCSfsj7Ow0LzfRcOgAprawKgzzjg8kjN4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762788788; c=relaxed/simple; bh=1t/XeZGSz7klYVmp8UNRLZxTGb1MDqM4Sp4fGb+4iBo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nPn+VeSDidsMvKGDj9opEaZtSpPfi3sBZTVA9ZHOCvkWeYedAHUoXRNbWqVowbEfNXPln6px8RI+kOR8QNTz0J4Sf4YCLmaOyh+vOM5YWKzbj7wtLsrBxgE37bIc5NdgrzuZeDxutiIxU77aMB1fZ506fbk9NDGhpmlABf6B0ms= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=mary.zone; spf=none smtp.mailfrom=mary.zone; dkim=pass (2048-bit key) header.d=mary.zone header.i=@mary.zone header.b=DVcN4RTL; arc=none smtp.client-ip=209.85.218.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=mary.zone Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=mary.zone Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=mary.zone header.i=@mary.zone header.b="DVcN4RTL" Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-b64cdbb949cso545040266b.1 for ; Mon, 10 Nov 2025 07:33:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mary.zone; s=google; t=1762788785; x=1763393585; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=lphwm18lHOH8GUN+4yFjFjzr4xIhvT5dzK4hQnRKziE=; b=DVcN4RTLbnH5X65cPcoQwd2CW1eFigmtyuQgIUIvNcTSfEDIDd4YhO0G3XBc2raIkd Qa5AkBgln82nzwOrXbIfg0dlpu7z/ygx2ATGxqhxQE6aR+n7p8uDPUBxxpo05xyZN/Ls zb8DUsv/NXgjdebOKB3zptjA1yTybfBjxM56IJR2UlrfYfSX7O69AyKGaVo4Y8F1Z9/C Tk3ie2k7Hxq0+UblUtBnRKK49b8EXO6oIuS3sCLHposfq192NWCY/BqPWgAZuVrOx/nE ESXtsY7STx4kmDRVOjwYIps4ouJt90cvp/8ppQlLi7+iEvIkAFi2sndQXwM+M/J/cuEt zarA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762788785; x=1763393585; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=lphwm18lHOH8GUN+4yFjFjzr4xIhvT5dzK4hQnRKziE=; b=N20ST4b49ij4yRUltiq/uNpsC6dyzYy4BiVlBeO3ITKhC9Hfn+yy1Rn+drjy2XOHfd AoV2HYgLkF1qA9WoUzOTs0ZGrnEklnas0BI+N5GajD1j0rbseWxp16TbRi9fFbdQT6ox 2Zxx++4GY0qnBEqcjvR01UbXLNlCkEKcUc1ePC0OHl2SqpZS15VLYh0yO3U6ecpbQzpU AfRJTfxRYWwR1Eeg3PsKyYFUdQyCJbehLKK/0Hv8fWo5uHWJZKQdN70pS1F1fbKTJN6h 5iftZ0j3ThBKIGUtUJ48N7e2wF/DVXElgxKVIF4s+W/bct2t5NqQQIumroQWggAdXfdb TpGw== X-Forwarded-Encrypted: i=1; AJvYcCWkb4YTXzuWe9SSXD6hvj6nkF2B5fd/t7KXczdCpYVtrflGDqTy+ehva1pwV2kMz5elV0Z5rd5MVG70f1A=@vger.kernel.org X-Gm-Message-State: AOJu0Yw/klJpn3DIP5Y2idfS8zuPK691K9ps6CSAW/LnzWWYHWI8+hAY Yqjjaq/nlqB0TvxNVZVSXAC0uh8vaw2W58OvByp5lLT7EMnjhzhN8FNlfEXgvDkNy6o= X-Gm-Gg: ASbGncvTJiKfUdP9R/xZxUjF2Hwkpti48R8NJmCXX2ZudEWoA+cGXHAsdarD3hyedI9 kfjKqDSHls9Bt04u2uXTqIt5bjEPsZ+OHoHLGpqEMNOrK5nqW1cNoc2Gtdb2ENx/GGI4bMsrYZH 8UBcIEG9uVs0MWRGk6vXAVkZebDn7ERQGqXp0oNCbN3u5rasQh//+op87adjiBJ0asz6JByxItM BzYcS1U9SioVtKUkj1gdVwoxVBSfpMhT2AuMF3osfGQrc445IBO7GfdprHV9eGT/qVw1bvjluXa jDEYrU9CKXTi2Go0+SWIQNSz8MKmcXMOBcd+4fUxAukxIHr4O/IL6B3eeaKLd0/8w/iAU1kHLCb Siz3DI7L42DEbTOanfmDWF+mjduj2a1wCIQFPmk/2gyXocf2PF6eGhAlrPRjkeBxnRNK0Zha5xs j/DFGNFI159i2wLccODy9LvMdUCqqGPj0srmSatUasct4puBYwm/fTN6UDrh12d3j97D6FyWg= X-Google-Smtp-Source: AGHT+IG70p62xu1Iuwa33zY/SzOofNGuNdD0jOrfLb2TRpLg/LojF9DWIwzRCiYu+VP8gJxW9BMb4A== X-Received: by 2002:a17:907:9807:b0:b6d:2b14:4aa4 with SMTP id a640c23a62f3a-b72e05ac909mr786170366b.63.1762788785220; Mon, 10 Nov 2025 07:33:05 -0800 (PST) Received: from [192.168.1.42] (2a01cb0405e83a000cb38cfe29807c1e.ipv6.abo.wanadoo.fr. [2a01:cb04:5e8:3a00:cb3:8cfe:2980:7c1e]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b72bf7231dcsm1115978466b.31.2025.11.10.07.33.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Nov 2025 07:33:04 -0800 (PST) From: Mary Guillemard Date: Mon, 10 Nov 2025 16:32:59 +0100 Subject: [PATCH v6 4/5] drm/nouveau/mmu/tu102: Add support for compressed kinds Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251110-nouveau-compv6-v6-4-83b05475f57c@mary.zone> References: <20251110-nouveau-compv6-v6-0-83b05475f57c@mary.zone> In-Reply-To: <20251110-nouveau-compv6-v6-0-83b05475f57c@mary.zone> To: Mohamed Ahmed , James Jones , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mary Guillemard , Ben Skeggs X-Mailer: b4 0.14.3 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 Signed-off-by: Mary Guillemard Reviewed-by: Lyude Paul Reviewed-by: James Jones --- drivers/gpu/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 Dec 8 01:18:13 2025 Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.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 DEF4D260578 for ; Mon, 10 Nov 2025 15:33:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762788789; cv=none; b=t92HKfSSZ8EyJQzgDBTwKxZMuao+CP5xmgaD2pF9DXRhVKjLWxPczOOBNLfyvm9KiYCEomLsdGJxzIvyWewvr5LppPZL9g2m3ktgpZ2USxubho++5uSaiOl+eFXQ/i2pmOV+qx2t9gUa/nf+z/qAsCrPXas/ZWhpVTlKLdGkKa4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762788789; c=relaxed/simple; bh=WX0BeKRqqoqX5Vz6JdrGMG9EsGgjvEElvI9dByZWdD4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QCIlFxcmwlqeTNdjW/polruEOPz6+v9wF5Q5eij4bWag5hEewMTSEA+qV3IPsIP54FBJOsspXNgyTLn+Y1y4rIXhwNnx2kGuOg1mETqmW8T5q9rbXkRGRB8poK1qQCyNOs1gBW6Y35L3l1dZMFNPbLw+zLkSIYfeT2ODn5Kn8UQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=mary.zone; spf=none smtp.mailfrom=mary.zone; dkim=pass (2048-bit key) header.d=mary.zone header.i=@mary.zone header.b=XPBJ//qL; arc=none smtp.client-ip=209.85.208.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=mary.zone Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=mary.zone Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=mary.zone header.i=@mary.zone header.b="XPBJ//qL" Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-640c6577120so5784807a12.1 for ; Mon, 10 Nov 2025 07:33:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mary.zone; s=google; t=1762788786; x=1763393586; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=MhhZbSaUsVQtnfyfSsZMoa+Z0ZmaAqoEvexpVHXnJtU=; b=XPBJ//qLWIAuCdZW+XAErkgpONyXftJUvo9C1b6jN2PO3gyRJK5JAki/oaEFh0FFRp khjXEMDIScp78MzditPLZL1zAU5Etuq2zxzqmLhC/Casv4UqF044OHUinqHDOofcvXpI obm1AaRNtiYnt75GGfGV+HUDG/4gSki+HBzG2ATzWQV4P73vbwL+yuyYihlnMH/Vo9+H kwzUZwGfyG9jxC5U+6Miog8s/b6RAbSeR5DWELXmDjxQkEFn9qEfBju6vuCZi1TLmd/L i055CdSQlbp1AwpglCdnt8JVhOeFPqI82iQMV0OMHNLvc9ezdfK/mVTLAlAMBTuxckt6 9gnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762788786; x=1763393586; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=MhhZbSaUsVQtnfyfSsZMoa+Z0ZmaAqoEvexpVHXnJtU=; b=LYvOJGMtpUk/xZK88OfF2ZI16wg1sCXP+hat3gGshSr4+Y89G7N1OM5MWsT+XDPfbc 2Cu6+UxdjAiQqlH+EiXdNvk9MG9x2D+YzuJy4l/95yH91yP8sxnY32hHP+yvK8ZFtMNo aSFShDm397Ew6pbKrL0VgirxOKC5s9oQs4z6KDMEmQ4O4KPYbu4ZXG748G0yY1lowV8F k0+XAGxwl1x3P+bOCUMlDli38mnuMfOT7WV7520M8TdR1TRqUnPQsG2D6Jae4EkJtK4Y YiyyeO52wwZbPUH7Toy/BljkdcIH8KYfRlcTK4tUEgOZiwd1Npk9ucmuRYB+6SP7Z4zL ezgw== X-Forwarded-Encrypted: i=1; AJvYcCVbmS03uPRoslxH09RBN/bfxtQ3TOOPOnudxiOcSJXsihFB18VkIG+wBa/qioQL6+NPzYgQPRb7AbppU54=@vger.kernel.org X-Gm-Message-State: AOJu0Yy1BwabM1+u0coXpNHMijr7zeromzipTuZe1hXbktKxio8su23T IwyZFWanh6eeywZqbWgswoPqAZGqhC3msNSRz1aI+kI4B9r+8SwmwJ+lTuvDSBAyhYQ= X-Gm-Gg: ASbGnctXWGwmJC27XUk/S0WThZX+zB16vFHo2Mdqk9aGiAkuEY6/v4QeIs2SCt1eV+l PrIs9C9u1tU7f9j14jAfKqRgN5t5ywp/t1Fo0p/VIMVPNsb1GJKtVfQUwZmNoWny8f1EDSnhRSp oU2XCMEN7YnDY5QwM9syjVu9zbqb3BLN+fet8cRrq25/87lHZ6i3dOGpr8j/TBPbaWMkR5c2kNZ lkLy2pGfKvPjru5RYkCTQhysgmd9yRNl1HYciKS9gu6d1b+jm4Ko+i60Et9uoaF9Bn+AqKU2kvO 2NKKK8O37FGBrZpWVkIf3kmMv+gNH0mZeZw/4cU+vvsTuLbEQVRrr0b4rDhj6jvdCGN5qQxHCUk iTsmig95GqpSLDvYGFV+4AIMWH83TUKqoE1a1ZNErOiE664gUBgaHg7onqIeqJL8KQPSRrwW7y+ /84bims6vLT0G2/tyCSNoHGNV0QVALuerDM61Bt3H00Ej20FBvE/GAhgmDRTP0 X-Google-Smtp-Source: AGHT+IGuCDl8/NKwayI0umUFRt4zezOzmyPdXdzg64sqFdiOt0b+BRNMtdKq/wRK1BA8tF9mTTYKDA== X-Received: by 2002:a17:907:7fa6:b0:b70:c6ee:894b with SMTP id a640c23a62f3a-b72e055ffe0mr832947066b.51.1762788786091; Mon, 10 Nov 2025 07:33:06 -0800 (PST) Received: from [192.168.1.42] (2a01cb0405e83a000cb38cfe29807c1e.ipv6.abo.wanadoo.fr. [2a01:cb04:5e8:3a00:cb3:8cfe:2980:7c1e]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b72bf7231dcsm1115978466b.31.2025.11.10.07.33.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Nov 2025 07:33:05 -0800 (PST) From: Mary Guillemard Date: Mon, 10 Nov 2025 16:33:00 +0100 Subject: [PATCH v6 5/5] drm/nouveau/drm: Bump the driver version to 1.4.1 to report new features Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251110-nouveau-compv6-v6-5-83b05475f57c@mary.zone> References: <20251110-nouveau-compv6-v6-0-83b05475f57c@mary.zone> In-Reply-To: <20251110-nouveau-compv6-v6-0-83b05475f57c@mary.zone> To: Mohamed Ahmed , James Jones , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mary Guillemard X-Mailer: b4 0.14.3 From: Mohamed Ahmed 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 Signed-off-by: Mary Guillemard 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 84a275b06295..0e409414f44d 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