From nobody Tue Sep 29 08:22:31 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010011.outbound.protection.outlook.com [52.101.61.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2F3F33E1D02; Mon, 10 Aug 2026 13:57:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370273; cv=fail; b=ohVXa7XVKINmvNTLkZZrqQOM9/8vObOS8Q/CGeGIMek7OEPqNzK76K4rzx+5NbTmF+cJlbLD6wQSpwu9wlYhgqV41GRJ8xk2fiCN1bc/oBK/3C7eAK+mzPRnG4Qz38hexzh9BP90FiuoDEb3MUCWx9xH8u37LrqQQqsLCWAMMiI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370273; c=relaxed/simple; bh=cGTXif2ydB2jrNuPgfiTT/iupdTwr2fkKvZqMqAv8eA=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=iWhCvyhI8HsIYXghRY1gMJqQQ92+I52JR18YT1MknpGmvJ3Bk8JkShbEpLtB77R/ReibWmi2H0m5gveg3GsQCWoPHcAWqVhPijnjhx6ScPdYAyNeHySCrO1g8T2XoH7Nyw3pLXNKCgDQh25wqDDXo82Y6V0f9Z5ViJWlIro00VE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=Uy/0N1Wo; arc=fail smtp.client-ip=52.101.61.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Uy/0N1Wo" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eVuoJ9cnf+siHhXGRPFLfKQ3EitDmv0xoL9SvEkhHc6F9iopla7GjJBeDT7Kk33Xb74t6KpM9CFHzfZ1szcUbK4nwIO21M67g2SPirx6Jr+GAXzkZQHgHaRGxzIzFBu0Jx4c5HbMf7WX25nr1UoVy12EhQTCLjIV9iotDL+hbna2FApS3JQBcmVBqkJ+hv7j5jQ+qWAgdWgjrMXSi9AVSS37YZFl59SaUhZri1JUsE3urtlJS5A2WLUEGQtAtlVQBT9uTqBLJ2j1lVneKlL37/V3i7faEAYyLyRQ9KvgCjHK8DFzE0wmnioYCIQHSxQG3OAJdO8U4FnAmoYGZcYrwQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=5OEU9ssj0ixjoDI+9Hr/NYoH/pSw1QKw8a4/EbLXqT4=; b=gQ1Q/XqEm569Gjup/kijTRl4BSzjPTAb3hHVI23ZBfSy2jC2Gd8JUbxbJGVuVJJYCg2tlcQmWBpL4IIdYFtzVadXW9onCIx4wc9SoZwRqTvs0XCEwy0UT4cj+ZLiHzn2Jn5WT8fOqKHb7t+ky+a4y9MDTpOwn7ICHWu++1YHbVKD5lIt06Chp9GKPVGy4g1HN3BqLr7KZTEYrF1U//spXD1bTojhzVggrEfVHanWQC8FqjieDHrYB6a92HgX7thKRud+yTzgVaEffj6ztEtgbq6JRdEY1ymwe8qcRdP30Xb5UGv01XFfFwcM6xwrfrXwxpZ6mJY402fFAIWIH7zCdA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5OEU9ssj0ixjoDI+9Hr/NYoH/pSw1QKw8a4/EbLXqT4=; b=Uy/0N1Wo73UBpBFuRZc0A01wxI+f6IzZY5tkraZt3dywipcJAmkLkVPyNAKeYQBFzOlrlDxHk7PYgPrPksF2SsP0xxJFxQp8KvGQu6OYsNXusANO6DHxZEBcoxRuPELo4Q9qjELo+fdbCDcF0WLQVvR7c/YPc0x6lLnwwKV5osGWbKmNAbvM1owCGQVMaCN6k71NUcHowdRTns/Rw4aVpmMdZ1IJD+e3yceCapvoTYYihhajpplvTzr9rWh8srVdtT9CrDEWPabyy2pmYh/6Fn6AfFYgHaeupUyowBoFIK+X2B5DjzrS7FLFzQgruPXXO/u05RXWjDiQyuE4MJQ5lQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by DS0PR12MB7581.namprd12.prod.outlook.com (2603:10b6:8:13d::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.25; Mon, 10 Aug 2026 13:57:42 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0292.024; Mon, 10 Aug 2026 13:57:42 +0000 From: Eliot Courtney Date: Mon, 10 Aug 2026 22:55:23 +0900 Subject: [PATCH v2 01/12] rust: num: use const_assert! in Bounded Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-pramin-split-v2-1-65a00b3c7309@nvidia.com> References: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> In-Reply-To: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> To: Alexandre Courbot , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jonathan Corbet , Shuah Khan Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCP286CA0044.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:29d::17) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|DS0PR12MB7581:EE_ X-MS-Office365-Filtering-Correlation-Id: a6a0ea8b-eac0-4b13-a67e-08def6e758e4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|366016|23010399003|10070799003|18002099003|22082099003|11063799006|56012099006|6133799003|10067099003|921020; X-Microsoft-Antispam-Message-Info: 9t8JeuqGIM7dc8QL2nWB/M3jSti0BZzW+6V9t/MTY+vjjeqf8yw+lmQ3iVFErUzECHhDZjKPY+9P+enhjNnbAWLKhnZq0mqka4Y1Wen1TLI143fUmNLC2ZI41iF0sq5cuGNOwaV6c3l+HWzporV5LcpsCsrpitiyV4kL4x1289m8PfCNVAOyJYE66pWCVTLVgoWHRu5wtL6d78mkI/wnjMg726+xH6bSxVzU6gkQQ1ofB1GJwFcOh3e026c8mPYILqluDkrmEwsQKCCKCTrigsYr37U5UV6q+p4PcxitqwqoFyPkFX2F9n49QhEgE5BYBjG+5xBlxOpfoHq97i938EYC0L9NCwXOv07m5wlt50tlwb7b05c2gW/ncD67aAImbD4ALUgk3PbPDRaI7MndAnlEAsPsSd44HFiXVCEjNfyjgjqHMjAzk1PIguu7EIhIZ6M1yhCoE0XYS/UoOyjnOuKjIJ7hkhcVBBCZpnv+BEQDmmRYRjQljtxmE710K2bprnKr1P0Xva4hMvGjHYeYDeiG6U2HSbGFTP+kAIKFt8cEazXzZu9Tt6/Aan4lvcum6f+YyaPXdywr5CNz06WAVwznfx5zZhYTDK83425jF0/2W37H+I/+Sve6tIp+ul3fsYMxTMOjZhwdpujDbfbUaJe/YXuRxOaGa8joZ0cWPonMovHe+gUdOhgO8jNuFSHbAeMTCXOhWkCIr7xqHzYw2w== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(10070799003)(18002099003)(22082099003)(11063799006)(56012099006)(6133799003)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aXcvUC80Q01LQngwdXFzVlA2NVN6elV3TVBtVXpEVW5xWm5hdWdVL3Q0Vzdx?= =?utf-8?B?RmpOU3FtWENuNzgzR293NkhGbG85TTFmTVQ1dWRwM1RCNndWR2ZoY3RvQ0l1?= =?utf-8?B?OUI1REdmZmZpTTZZZWkyL1d6bG1OcWcwT3AvVzV2Sm1ER29va09qaHRWY0Rz?= =?utf-8?B?UnJ6MktQNjRMQXJDaHk5cnl4NDJoUGtzL0RPWHRaK2sybFgxY1NHem5yamth?= =?utf-8?B?bkN6TFBkUDFhcEl5MHNTelVzTGdHWGEzWUNpRWc4L3V2WmVOTFJwRW03a0kv?= =?utf-8?B?M1lLakEzMmtlWkFoVHR4NkFQckxrc294VTE5MlFieVhjTUticU51dTl0ZFNs?= =?utf-8?B?U003ZEhTaEtFS0xDR2hSK0xtRXZqQVlrRmRhNHpQcXFHOVY2MGJiUGlBZzNX?= =?utf-8?B?YVhDRnRmYkF1UUM0Y2pTY0h6c1gvMEN4dndIRkZBTUNzbzN5dEsxdWgyd0FC?= =?utf-8?B?QTVRMERHNUpId2tPRzA1Y00rTGptdit6Umw1Y2dLa0laNlJydXVNbGNIeXR6?= =?utf-8?B?S2ptdTJQUGF6TnR3c2RveS9pMVZqdmlxSmZMVmExN1haRFcwRkxBTFhJMjlw?= =?utf-8?B?Y1RvbmhUK0UvQlJtdkZWTngzVDNMY3dvRi8wS1ljQjU1bElDYUc1bi8yRW1X?= =?utf-8?B?dVRwZHF1bkMzRVNtVFVCOW9jUzliNTEydXYzS2xCNzFjUk5ZUFBJalZNYUtw?= =?utf-8?B?WFhvWmxKZktiSVVvSXR4K09OVHl6dmRxaHNNL1AvbTdLQi9ZWmlVUzZQUW5Z?= =?utf-8?B?RFduaUJ0Tk1QdFp4MzQ4REdYTFRKcFE5OVVyZDErRzBhN0ptbENZbUZoUzJo?= =?utf-8?B?NmpiUGQ3elBEL05EbnZ2ZndMOCs4Z3N6c3BoV3FEOUd2a3lJZHZGVEJGbnkw?= =?utf-8?B?RU0rV1hLbm1UTGQwVndTZ29YVlRESU5IN1Z3dDNlRGJ6cURXRWVaRzRRU3lz?= =?utf-8?B?TExIRENzVUFiczdEa2pQYTJuL3duaHlRSWpoNzFaejZzNU9ZcHcxVERxQ2Ev?= =?utf-8?B?djR3VkROZXUxSXRDejgrMEZleTNzZlNzZW45MFpqcWM4QjBpTm1NUVZuUXI1?= =?utf-8?B?SGJxeldWSzlqVlNnWFRSQkNHZm1kZEYzaDdKRXErTUpDRm1Wd3prUmp2V1Br?= =?utf-8?B?dUNyM0FHLy82Ymh6MTcrZXFWdEJxV3JHUUhueUI1dGY1Z3dNZTI2OEdZVGF0?= =?utf-8?B?Zm9ORHEwOHowZ2kyYklXV1dhUFA3YWE5RmRGQWFWa0JDbFdWN2tuUVpBRVVO?= =?utf-8?B?dGs3TDJ3dGxEMndmNy80VHhlSnY5M3Q2eXk1NG1Dc28zOWF1anpnSWFWc2ww?= =?utf-8?B?RTVxSHFUYXhDQkpEYWZURzZHaEVZZXBnMUF1QWloQlNmQWwyblY5eTBVa2ZW?= =?utf-8?B?S0pFRG1EOWVLQ1R2VE81RCtZNDRkT1JVOVJYOGFCdVVyNitsNG9zdGYvN1R4?= =?utf-8?B?VGJoMHE1NUlKdWg4MktyaXBJdVZ5R2ZiZU5xdmtlVzdhNmxDWnVVYnhmMWg0?= =?utf-8?B?R1o5dm9LRnBuZ3RDN0NzRHlFUW1ENG5mWXZnZE4rV1BDb2dkWjZFZG0xSXlE?= =?utf-8?B?Qmg5VWkxOTBpSVVjQ3Bhek9RZFNmYWtFeXlDQi9sb0ViVjZldzIxN0V5Y1Z1?= =?utf-8?B?TVdDQUovVGxvSXlIMUtzSzRURktmaUlRWVlYMEdhQVNVbE1halkyV1dOR3Fy?= =?utf-8?B?N0t5QldORDhUcHh4Z1FtU1orMkRja3NqR1VlcDFxYTRJRWxlVHU5dGZWQlVG?= =?utf-8?B?TXBnT25kWkFHQkpLdnVDWW5QUzFXZmVIMDRaLzlNNTlGdGZ6c0VJQitZU01K?= =?utf-8?B?K1k0RXdySGdlRnd4dHNTaWpWWVE0YmlKNDRqaWwzL1M3ekZLVjl0TmlhV2xV?= =?utf-8?B?UVNDdHdlUzdCdWJHZEp4SllJQm84bzNZcjdKZzFSQ0pCRzRoSERycnZDQlBy?= =?utf-8?B?NW50eUhySUJCVDBmbEVTeWRGOURYQUMra2djNmZMSTVGUU9CbnZrL1JMWEd5?= =?utf-8?B?dlpWNWtMNExwSHdIb3psYTZnOVlEdHJnNkFMVFNKdktjcHVxRkFuZTExZWZt?= =?utf-8?B?YjJ4OWxTVEFVeUVvZzNMa1FVblhDVXF4UTRobVVnTXhTYno2WFlWN21ka3JK?= =?utf-8?B?ZnRaUm5uSU9WdkZCWFlVNXlqY2lRbXdGZFN3aEJMdm51Zk1vRG13a3JOR2I5?= =?utf-8?B?Z0x0ZW5WanIvSllCZmovb1hzQWpSUHBwbWY3L0xCYlJzVTVDWEVzdVpTVmoz?= =?utf-8?B?V2x4cnN0SVA3SXA2Njd6NnpaSWw2TnQ4R09MMXo5TVhyNmRaWU9LNFRvQWsr?= =?utf-8?B?QVdUcjRYVDJIV25Zb0ZFbkxxM2xwSSs1dUhyTTBubFIvZlNpV0pvb0JJQVdl?= =?utf-8?Q?2ulEEtzXZONhHTlkfQHtMcTP0ydkaYpUwx5TFC6Y3eoUS?= X-MS-Exchange-AntiSpam-MessageData-1: 8JivVh5hW/d44Q== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: a6a0ea8b-eac0-4b13-a67e-08def6e758e4 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Aug 2026 13:57:42.3826 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: nR05NA2JRYVIm56f8rEaHecn7no1r5nfQsjPKpoW9ObHksR7kBZV9hXauo3Z80tAqmnDTK7U3qLfwsHfGs1Nfw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB7581 Convert the const-block asserts in bounded.rs to const_assert!, matching the rest of the file. Signed-off-by: Eliot Courtney Acked-by: Alexandre Courbot Reviewed-by: Danilo Krummrich Reviewed-by: Gary Guo --- rust/kernel/num/bounded.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/kernel/num/bounded.rs b/rust/kernel/num/bounded.rs index dafe77782d79..9ad7df1a243d 100644 --- a/rust/kernel/num/bounded.rs +++ b/rust/kernel/num/bounded.rs @@ -485,7 +485,7 @@ pub fn cast(self) -> Bounded /// assert_eq!(v_shifted.get(), 0xff); /// ``` pub fn shr(self) -> Bounded { - const { assert!(RES + SHIFT >=3D N) } + const_assert!(RES + SHIFT >=3D N); =20 // SAFETY: We shift the value right by `SHIFT`, reducing the numbe= r of bits needed to // represent the shifted value by as much, and just asserted that = `RES >=3D N - SHIFT`. @@ -506,7 +506,7 @@ pub fn shr(self) -> B= ounded { /// assert_eq!(v_shifted.get(), 0xff00); /// ``` pub fn shl(self) -> Bounded { - const { assert!(RES >=3D N + SHIFT) } + const_assert!(RES >=3D N + SHIFT); =20 // SAFETY: We shift the value left by `SHIFT`, augmenting the numb= er of bits needed to // represent the shifted value by as much, and just asserted that = `RES >=3D N + SHIFT`. --=20 2.55.0 From nobody Tue Sep 29 08:22:31 2026 Received: from SJ2PR03CU001.outbound.protection.outlook.com (mail-westusazon11012025.outbound.protection.outlook.com [52.101.43.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2A2393E1686; Mon, 10 Aug 2026 13:57:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.43.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370272; cv=fail; b=r/jDlm0Uo1GNYGukiZ60TwceVMluR4JEWt7+dWHDEL0ytPMAzF/FfsymOZ2M/Pel4zriJb6jECWpWUCZ62FSyioCqhzsAAubV4C9Xz8kGfTZVGguA8kWVQNTeoUX6tSVwUUX+YeBshCt6KL20R+xhEM+Ts9wcL0d6B5/HfbdZlk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370272; c=relaxed/simple; bh=AUqtR8VWo7dFMzFzrr8F2Z0BfDswv20mfR97hQ5i4W4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=LcN1OaSvvlguj/eBgbKqFvZC1RgTwBoIxL9LE23B8SueGQ5WicaKp6O2VofCzUcnjW96Sc690CD5hK78eJWGfrv5e5VFptQb9cF/EDKlEIkfxTGAn+1ah7tlnTo6fw8PLmcfuGFWXRLR5s16DXxHfzTjmWYeWgEuvRtlkShKck4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=X0Xgaypr; arc=fail smtp.client-ip=52.101.43.25 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="X0Xgaypr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ejZLXaZrc1PToTp42XJ+wZ0W2Ex/jc2lqm7+xX1B8ahofYq6nl2vanmuaK0yA68pqUbsjLQCdqnWPXKOz9hK7icAtxLtaq5+AGJutofR1Z6aRQRrcOFiNBMS3z55reXXy91HZ/dt29d0tv6D9QrPkeji5s1Dn844Bx7hXwc8E72x0eRj23YrXG2Utezy9qbF10sm/KOuxFXwE5ZXZIfIna3vEXzdFISfoJ784wYbdS5oM5/PM9TwkHH2WWJNYwphLhXi9npQoPV79KLB07j4niTgwZTmNbk767ziKorsjUIxttoehSLTTfRSvnw2rfEJG5QdfmqNfgLrIBJ7swap8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=lHrjkytmNGfxLFA2QKe/0x1XLL5ts8Zfg+RE/B3uD/s=; b=RNNCNARCkPO9rOivkIBm3iDawssUW0Zs2hnI4dN9ioY/EttY2MCk0taAsB7dSdgs04gK4XctB9zBPm/wxgo8xqgxKubWNmB8ANp0uqKh5uHSNmzqJT+eKgyyXA96qsCjTnli45bMGIaH6lClbE3Dv/PW85vrdcFt5eiB++4+SDisEmWWXu8RGjPiFEpDqenhDHe4Gpc9fSVxSN7w5c03sp4WsZRmRF+6Xvdjf+2zWFh79QhbW4nJ+78G6xoJiQ6zgyOSsq/usiIqgoicjs+lsooC2WqiZzOQo34vbynNyq04iZy4y0EBmRPz8vw27mzDAjclkm5iYnfAs+AYJ0A0Ow== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lHrjkytmNGfxLFA2QKe/0x1XLL5ts8Zfg+RE/B3uD/s=; b=X0Xgayprr+/Km1+7JpmG0yMFrltJdINvRy83T9bncEzFDENfn9EJyIIhiwvDBAW107EhzHWQ1cOhPfaEySzZdUrCXE3ushsmX0R4x9oOczGy/0OuScO2BiRU0EIr3bv5r9cmPp2IpS82Rhyj0XQAKR1ct1oBfqcQKMtQ3HhJtwvtNZsfdPLhN+VMo+J1NknyAX6zSLj/FUObj/4czjBsVhA1YQHrcypRFlRIoLpoxHZTWXBrHa+s7hCva2qxTH4XukGLmEHN40w8gyomWNNRmar4chLrBle+Y3vbWnpJztFViC11GKQXkLVZYiwbq+wIHkupG9FbYtj+rAD2/cWkFA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by IA0PR12MB8208.namprd12.prod.outlook.com (2603:10b6:208:409::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.25; Mon, 10 Aug 2026 13:57:47 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0292.024; Mon, 10 Aug 2026 13:57:46 +0000 From: Eliot Courtney Date: Mon, 10 Aug 2026 22:55:24 +0900 Subject: [PATCH v2 02/12] rust: num: reject Bounded::shr overshifts at build time Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-pramin-split-v2-2-65a00b3c7309@nvidia.com> References: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> In-Reply-To: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> To: Alexandre Courbot , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jonathan Corbet , Shuah Khan Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCP286CA0143.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:31b::19) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|IA0PR12MB8208:EE_ X-MS-Office365-Filtering-Correlation-Id: 88ff5ed4-7249-457f-2b85-08def6e75b90 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|366016|23010399003|10070799003|22082099003|18002099003|11063799006|56012099006|6133799003|10067099003|921020; X-Microsoft-Antispam-Message-Info: TcKqYW8C/OwAX8YBflaN7IH2YiASJ8RKRKmcn72UtrySjpgKfWj3B/TB+wzGUZp5iMDLOJ2baI0uSms7seurXFtx7YWeiFHhENAxuZ+XnlVm38X6oJysZ+MZ38UNZ+r/ZIQxOejJMUJ6Gfups6y+ucgMFxkMzOb4dr0ngv3Qd4r1dkAitwEFhaBp1ALjViBJzs5BWSRdSuzjZo05kw6m5E0NsCzbVdA7mtIn4G/FbvVSFIfWRVfzetn5ggLNXNIVtfnVBIyWijKmbBAtUMgrHrIQ+hzZuwT/+nTFUAz1VCEy5NR00aglVeLw8BIn9l3OeRipGF11+ppN2siVUHCPygY7wtrqSpyq6Vo4vAnWEwBdgfB5t1DCo9008xY00tBQezEEiL5d0aDNbLZr6YGJ/lhcUyinj4CrA6y6NmmsJk8PKyh2PiJqjx/7UoWcBrqM8xsWvW03e5S5g7FKaP4ZZU8BW4InAnIjOtIyGKA0utQlbF+0E5VDqL4m89Gmv2TP9F5xZPYAel+Sv//qPs8KNaYUenmfCxLpDGeXJpDyvjImBj+7vUY3NtnDHLQXmVPn8CA+Y7C8Q2I+5xJU5s4W0JttQQp/aEaFPgnN/mF9rc/5r3+O8jTNyk6d2T0YoGc6eEzf1Twj8RiMvda6jCILQEvAN9n9WPQPjoxyJK1II+S9xLkYguK2qpizH68Pux2Et+eh0RN0IliTK9Qwx6VtZA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(10070799003)(22082099003)(18002099003)(11063799006)(56012099006)(6133799003)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OXhXTVRiRUFPSHVlMGVYZmg5TFp3S0ltUlJUSy9Oeks1ZURVeGpsNXRQZUtJ?= =?utf-8?B?ZzRtTHBJREJmRFMxVUF3bm5hVGhsbWpNTTRWNUNKRFNLdXpHV3BCRk1CSmcx?= =?utf-8?B?Z2lNamZUcU9rUzMwVE9UOW5QMFl5bmt3NzVveHE4QVh6OFVQYzJnZDdhSTNr?= =?utf-8?B?TUdmU2Z1aFhDeTJHMVZ5TEtFWlFOTWpkWUxzeXdBVWNmMkhHNlgzcVdHYlJ5?= =?utf-8?B?U3NDOFNPVFdMdldvM0NQamUwR0pmLzd3c0RGU2ttcjhIdWtwWGU5emU5SUVN?= =?utf-8?B?QWJvQ0YvWHlCZUNvUTR2N0JPYjdvRGhSUVJaTWRTTUh4cEtrNUhBVGxvZXlq?= =?utf-8?B?a2NaQldnUWtTVndOcFBJOXNNcmd4RStVWUxNQ3ZrRERhRytsajFlT2hFZGQy?= =?utf-8?B?b09GTEJBZVVHa0ZxVm5RdHZNYXN5RUdIZzB0dU5hUUJKa1Q4aWpvS0tDWHI2?= =?utf-8?B?RllIWHlqeHpQYVRCRDdOTHNFanVTaFJ0aXJ3b0tJOEhSNnB0dTVnMG9zekVn?= =?utf-8?B?eXQrQzl3L2tQL2JzNWR1amlxSTcvUng1WDVVY1Z0MWFJcU9zWlFZSmpLQ3Y4?= =?utf-8?B?VFg5RGdQdVQ4cHdnZWloK2hzRW04NUxNODJPc0g2UkN6RVdMM3NFTzlhb0Zk?= =?utf-8?B?WDJXdFdqaXlxZmZteXlBaTZuOWFpK1pFT3plUDUra2NOQkQ0RTZwRGpqaEt1?= =?utf-8?B?UWFxT2VzemFMUEgvVGhPWWFsR2VlYzEzemtmSmFiVFZxSXBNakpuSmwwcFBn?= =?utf-8?B?Q2RCdDM1aVIvSFVtaVdhd25TV1AvYUFPN3cvU29oWWEzSFZ1TDZaaUNzUERz?= =?utf-8?B?d3VlTkxPRE5VWHMyZ1RWcWM0amkwbXlOMElVL2l0RVBhSkpoK1NlZ3FvSEN3?= =?utf-8?B?emUwTnQ4cE1qZWMrNnFjQ01QbFRUd01JY242ZHUvOFZ0UVFPNmluU09va3hl?= =?utf-8?B?VFh5R1lUNVFOMnZ5N0NsZlFKOUllVkVhRTJXai8rYlJnb3M4OC95dHVNOFUw?= =?utf-8?B?S2NkM0ZKWGZ4RE1wKzRPcGV5T2hPK2U2MVdibDdFaldBU3VFSEIvVktZRHgx?= =?utf-8?B?bXNUR0srVTc4bmpxZ05pd2F4VzFiR2x5MEJwRjdWOWs4by91bFNZL0lnYmo2?= =?utf-8?B?amlmTit2Q2l4YlRYOXgzdS8vUGtrcXo5MEs0T0ZGUDdHVWh4aG5tcFZ0MFVs?= =?utf-8?B?UFZWZ0luZUdNTk8rbFA2QjgzQVhZNFVWYW9lTCt3dG1EdGxEV3poRmhncU03?= =?utf-8?B?RXMwR3hKWDBrZUVYbmVHdVU5SVU5cGNLbUZiN3NrOElsdzd6akpyanRGc2VY?= =?utf-8?B?WnJ0V21PQWhPYnN5VVVmWlpkbUM4VEpHZVlYV3RVMDIyKzVjaGZtQlJqSkRz?= =?utf-8?B?VkNTcG1RZWV0b0R4TWczUmhDVVZjS1oxUSsrZGszTWxhTkgwOXpYMzNvdGFz?= =?utf-8?B?UE9XUnZqVVJ6SkpxM1c0bXpKNkZvVm5SOFBxNStBZUNwMFFHL3lpZFprd3c0?= =?utf-8?B?NU0wTEhpYVZyOU1BZ3ltNmkvand4akpNZ0dwV3ZlNUZrZ09QU3A4b1RPRUhn?= =?utf-8?B?VS9kTGNoUkpZbkZCN3lTalhlbXZNMStUcEs0cEgwdmJ2MjhaUzNZYnBaWmRV?= =?utf-8?B?ZHU1NDNOa0I3cXF2UjFJWjdVV0U0UXlYMWFFa2toM0xJSmxXdzlXQ1hwK2xG?= =?utf-8?B?TGxKTFdwT2JDNUNocXhsMzlaQ0xIU1Jrd09tZTRSZHdDYkVmeTQ3TEVDWStN?= =?utf-8?B?dGcwUVoyVmlxSmljK3h2a2tvMnNaYkNMUEVYMUhsVy8yZmUwQ2xjaHZBN2dS?= =?utf-8?B?aW9pTzdDcUJta29aRmhKUVY1Qk5qRlZlUnNhUzJiVndCdDNyVzEwS1ZmdXVs?= =?utf-8?B?YW52MGZwUmFIRFIxSEtpUmdTS2ZDNFZmbDh3alV5cm5uMmszbmpVajhKWm5M?= =?utf-8?B?SHBPc3JmVmNyOG5kV3dZcHd5OHJ3eVgwWERWb3h4V01NbjJyRG93MGFMSTAz?= =?utf-8?B?QVpjY1ZtdnIzQXFBSU0vemw4ZkU4eHJZSDJYYkwyRjVGeTFBU0piRSs2Ukd3?= =?utf-8?B?a3BQdWhYTTFpQnJXaUxxY1dSRmtVaGwwTDIvdU85UGtvd05VcnBISHgydzN1?= =?utf-8?B?RGNmNHNlMW1tMmR3TWtMTkNFMkk2Z2pOUnlnOG1Temx3alM3RVM0dmRaWGha?= =?utf-8?B?Rjd3T3BTUEpWenUyOGdPYkpubGpNazZkb3BzeW4xMElTT1g1OGU5SUdjbjc4?= =?utf-8?B?MnZJaTlSSDJsdFpDbTBIaDBzczFiMEtUdlBlbU96WlFtaXJPejRhdVZ4R0NK?= =?utf-8?B?WDFRMit6VjZQUjhsQ1lCdnJZUG9WOFRpVkNPZFdkS2UwcTdrQ1pTaWFkQ2Iz?= =?utf-8?Q?mizMYEajX0VGe/PS9AvDOfFi9mB49lMCXwBOvYrwAmmv8?= X-MS-Exchange-AntiSpam-MessageData-1: eCN0J4ohn7aSTA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 88ff5ed4-7249-457f-2b85-08def6e75b90 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Aug 2026 13:57:46.9209 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: mLUzl9uONPhDp0Ojf6hqXoKzFwpHNraQWVPiIZmvC1rHDeoC0zJ1UmxIfbTBdSpmgfQ0/FAdbHhHVdV4xRptJA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB8208 Make `shr` reject shifts of at least the type's bit width at build time, instead of panicking or masking the shift amount at runtime. Signed-off-by: Eliot Courtney Acked-by: Alexandre Courbot Reviewed-by: Danilo Krummrich Reviewed-by: Gary Guo --- rust/kernel/num/bounded.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/rust/kernel/num/bounded.rs b/rust/kernel/num/bounded.rs index 9ad7df1a243d..90483d2c5374 100644 --- a/rust/kernel/num/bounded.rs +++ b/rust/kernel/num/bounded.rs @@ -485,6 +485,7 @@ pub fn cast(self) -> Bounded /// assert_eq!(v_shifted.get(), 0xff); /// ``` pub fn shr(self) -> Bounded { + const_assert!(SHIFT < T::BITS); const_assert!(RES + SHIFT >=3D N); =20 // SAFETY: We shift the value right by `SHIFT`, reducing the numbe= r of bits needed to --=20 2.55.0 From nobody Tue Sep 29 08:22:31 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010049.outbound.protection.outlook.com [40.93.198.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5A8703E49FF; Mon, 10 Aug 2026 13:57:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.49 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370277; cv=fail; b=G0aYN/DT/TN/M97lFDZ56jsW+JtwFqljIYxQ9lBI1s9mqr4T/bMQUfKm2r8DFXljt9ga34EER7CtA/LOkquvXjKrVaFEZvOuzye883SK5EMPEb/RtC8Ewel/UWeBCx1JuVXZG1tnZIeY93Cwa2i4qXsHNuPek6/7UbOQpcBpHck= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370277; c=relaxed/simple; bh=RIFAvEk0BKn7Faac+fzBX3JvvrGDQVGA80WNQMhR48M=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=BJLRJ8hxWqrUXO1RnS/VhFN3smVs1ALbdocSUfhy7AcLKjzGLjBTnwOMWUkT+8UuTzELwzsJtab4FQdBz8ARklJ2wqHWpBGc+u2DAeDFpemNqsGH9fn5RSyoVyHPTW8b6pw7O+YaB5ZtAiYdOyICBEK+Q/XHTsNzMUWkLamDg90= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=oED6F4rT; arc=fail smtp.client-ip=40.93.198.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="oED6F4rT" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=efhw8R3Pw6DMhU1xVSh+7RHfzq5AClX409OIpPKKk6xJAtuAC7owYsVSM1qDGIJ2eZWXj1am+ZT6B9WDxPZcb7i4WrMLXBmtbUzyG3/uzJdDPJFXLHWQBQeQGvlrJa3Csz2j4+oYHyZcvc6w4caUylQBzQr8FET8AG6ZXrwxBMA4Ot7WyqRGT2E5ihFnwEuFZbjSJyFhYsj+4W39egfn3cPvq3+G91PBvdxCCBZlbduWiQOM0uKK7brfBQ9b91w7oOJ0Th070XwlY+yErejVF68fwLYczvelnTHTr05V7zb4kAuqyI52143q15iZsrNyXXjEQ3/BmRa7KO5NoxpgmQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=dM9kPxv+WNug2LPP1+XIOrneIPyMVyoHvHhoc6A+61g=; b=shSsSf6HoZ3kjMIDzdVq7bsbET64zWGJhRwiQgKs1FEn0RUYzxjKBBQMjOX1aFE9u6e3TzcQs/1cEMuItRQ1QQcp0sjBY1GCqb4ShFknB2QLMPHH3u9iifE/FJF8N1DcUSc4kcEv0YfSlLyjirJ0neoL562VQGo3FnU7PBTks8b3AS0yrGQCmIsH490wytnKvyWl2WaUKoVWWPIjNtGyqWy/vSGnGzsvH04g93Qn7TwB58+EYgySheGje+DKz3D6hH8qL3SUaYX7L8RaBdvFB2k79kILDdeXyMgBmEA0wvGV8K8hciCN2O9/26KYeKh6tX4fG94eBiyqvXkU3+HN5A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dM9kPxv+WNug2LPP1+XIOrneIPyMVyoHvHhoc6A+61g=; b=oED6F4rT1x3++fV1W8kYNJ5bFtZd4iWpuLlkfMCdHKhYq0hrFg1Wi4jnHNnvyV3gUoJRIOdKUKxUcPdfuo5TuD9cMydgu1mByYpwqwtQzUdgJN7Zdf04qDnh9HgkL9TfW4O+7KHTNkERtlqxleXTWte7AAY0gr+mAVRiBQLfLSo74vqrqzfRo08/gbrwNzgvQKH2wwfkKWCKGzLmUYDysn2iDHTVPhZWlotkA4ey2jOIbARd+SeoBwDSYyEjXVh5vpV8IeyOYnrWg33pS2W6uQYZBfgBPn4ZIC7g1ObmgT/AdWL5kW05aAT7cRsQ3djKw/aL/+mN2h4f6tReWuZnlQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by IA0PR12MB8208.namprd12.prod.outlook.com (2603:10b6:208:409::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.25; Mon, 10 Aug 2026 13:57:50 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0292.024; Mon, 10 Aug 2026 13:57:50 +0000 From: Eliot Courtney Date: Mon, 10 Aug 2026 22:55:25 +0900 Subject: [PATCH v2 03/12] rust: num: add Bounded::shr_exact Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-pramin-split-v2-3-65a00b3c7309@nvidia.com> References: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> In-Reply-To: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> To: Alexandre Courbot , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jonathan Corbet , Shuah Khan Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCP301CA0070.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:7d::12) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|IA0PR12MB8208:EE_ X-MS-Office365-Filtering-Correlation-Id: 60be9f68-6f6a-47f9-4e1c-08def6e75dd8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|366016|23010399003|10070799003|22082099003|18002099003|11063799006|56012099006|10067099003|921020; X-Microsoft-Antispam-Message-Info: QqLb9p29w++zj8/wx/YGJiMG2Ljwr11yLrt6LDAZuipdaZ6rLUh2LspgOALa3b5Ia7xxOURugxIioKnftQtdFNIfDJ1DcnZMiYabnC/oGRifemE0dD0LHsi05fcmqbkCUGmIWf1L3XPemQxHWpv1xNlSdYxGff8JnczMaq3nkPZlFZ+950KAlGFDjH6Xvqi9A6PykdcxgICDO6q24buToxgwd83XU7loWA5JxAn1xiNYNDx5ZZ/p+hhV0D6rgaG6Nm5DCyggGkQ4zMLzwcRB45ivqiRarUZK0RgWL4dCVZsN1at6mBMNpzheGRQJr6wzPbPYGiZPAjLIODHv7DLI/sB9xeGLHFnqgQsuSdPkvRODq4KVu5141Rns9AKklVkqZ1aKtGHKYzAcfMQBWmF7LXiOSxneToV42NpSZc/D5+7GwBtUh8YE4Xfo/wiyzBNGIgcpQK6wgIEGDZeO3w1qMme9F557bx9GKr4SKH8WAmkwuR198A6GzRnZSXKXnHt+JZOpvTG9GeAlAAeLdvi6VjpqMzxrDNv5gu0sZeV2WdWruvH/Te5RIwybd0z6kUWkmL9GDfYW9d6HLB8sPxe3zoRPGvuk9N7xWVVt1IFYbVRFCYlny8l725RZabcfe6snmzbuEMnfhTIU5oBdCR1iEWtt2kC6mJaJGcTI0BhX1UnrE7jUpDaa8G+ZGN2fa0ZzlcxqKHSm57ILBCDcjSh5EA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(10070799003)(22082099003)(18002099003)(11063799006)(56012099006)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Mm5qV3BxRnBuYnZrcFh4MUM2NzFWU0I1amJKdkZOaXN3Ni9sOExLcjJiSDNN?= =?utf-8?B?T29zK3liVFUrUXFWQjBSOEFTbDNON2RwZ1I1bG9GbVJTNmZjaFI3ZUFmbkZH?= =?utf-8?B?R3JkQ0xubEhyWVg4MFVKb3hhYmx2Y2Fyblp1RVhwMm1JOWZSdzB1YTRNK0V3?= =?utf-8?B?cnhtMWJZeG1CaWRLVE80MDVTOU1JN2xhM0JkbTJpNCtJQ3VOL3NVZnVUdUE1?= =?utf-8?B?MzBGcGxFTit0VnpJb3E3Tk1rVlM5MkFmRXNSWTlTYSt6ZnZRc2pHVUpyWWxL?= =?utf-8?B?dkoyR29JekRxbm1LcUV5RkRUVUFPK0c0cFBvamsrdzFKdlY1NDc0dGFlRVRj?= =?utf-8?B?Uko1R0NxNElFY3dLdHdlVTJHZ2RSZ2U1amc0WTdNTTdJL2UzaEFDcHVvOFRa?= =?utf-8?B?YUQvS2N6OFNvR29vdzlQVnhTRkFRcEJ5bXUzRjFmeksrcy84emliSHlWN0c1?= =?utf-8?B?MUxxYk0rME02VE1kZDNDOVY2RFNrOTN2MXJ5TDVnVDk1NzJ0WXoyc3pKOTRq?= =?utf-8?B?MmJsVEV0L1c0QWIxWVpqU0xhNEFhSTBjdHhmZnN6dUltT0ZuUDF0eHd2cmds?= =?utf-8?B?ZHNwVHFBUWhDa29XNGd5SVRPdUhTNmVBMDZWUmhUUWhVNkxjTnljdWRQVmRK?= =?utf-8?B?RHVHcmNsUS9PQ2oxdThOUlhUUUF6ZnIrMERNQS9vckFSelRGenZObXNvUktB?= =?utf-8?B?TTVPbi9mWHB4SUh1cXFBRnN2ME14aHR6RmU5YWZHZE9NSkdoN0s2ajdVQ0pO?= =?utf-8?B?V0xPTmo3MmM1RkRYNlJoak9YYnVzbkNkSDkyRWVud1QxbFMzOTlLYlhQZEth?= =?utf-8?B?cmU4SWppa051TmREU0VuNW9DandkV1VPRHErbVF0TjJnNGJJTGpvSDRTK0NU?= =?utf-8?B?OVFXQTF6U3RUUGxlVDBtMmVGQWpXRU9KUmp1TVJOaXNLZDRTSXRuUC90Vmtw?= =?utf-8?B?RUhqaWYyc0NFUFhMVHpOQUFvcXN2VUFJVXd3RXhWb3d5YSsxN1RIZkpCdCth?= =?utf-8?B?Y1QxaXA5RUZsaStLWjJ4L0thSXE5ckN2V3BvOTNVUlhjVDQ4WjU4cUlnaVEy?= =?utf-8?B?bGlSQ2lEYTAzZGNBQURwWGxWZUJQRDJJUllmZWRldFRlNFVOMGVnMUxBV0Zo?= =?utf-8?B?clBuVzl4d2RscDhIdXdRU2hYMW1pRmJZQStqMUZNcHRQKzF2bWtnMGJ6ZlVa?= =?utf-8?B?NGVUV0VpRGdtSTR5cmNGMmxJRVlKUmhKU0xxV1pPaHRHSVRTMkRSLzRCbFJj?= =?utf-8?B?RWQ2QWZQZm1DMWplOEpmZWkvUDBsU0JqNWlPQXltam5NeHd3ckc1ckE2TjI0?= =?utf-8?B?RWZIS1ZXTVF5Y3RFaDEveHNOaENCS0ZwM1RPcjg5a3c0ZjlLTGlkTE1lc0pk?= =?utf-8?B?V29oaFpxcUFMKzN4anRkQWIxVXVlRm8rM3JEK2o4blV2aGhPU2cweW1ZNTNw?= =?utf-8?B?VEFIUm5EQjJVazVxa1ZCaFlIbE52Mi94a2wrdks5M3lGdzZncWVXQzlVMmVo?= =?utf-8?B?ZUhYM0V3RE9hSTlGcFVyakJGMERYMC84eTFTTGxCTUhJRUJsaGNkb0VCVFRu?= =?utf-8?B?a0s4VzliTk5XazBNUUdmcmFzaTFVTFJ4a2tnQVIzMCtwYi8rZ1lqU0E1Z0ZF?= =?utf-8?B?TUNBNm84R0tWNVVuTGI5dUFzMGViME0xRUlObGo4bUdxeXVFdHI1R2lEc08v?= =?utf-8?B?SVhxL2ZuRkVHT0I3bEVUblN1MkZZSzk0ckExdWNSRVQwcmcxLzZtK1MwTThJ?= =?utf-8?B?SHN0YXRqQmtXZDE2NnBYQVhZK0JxdGNSREFGRHdHMHJRNVZkWk1JZzFUSTFY?= =?utf-8?B?bUFBZU1xblZpSm0vME90Rlp6Umo0d1B1YnZQYUpvTWV3WFNIVXkxOHBwdEpo?= =?utf-8?B?NWFBemRHM2xNWjcwc2xUdVJqSGhEMVRraWlDVlFiL2x3a0JkVHRvdzhWeHN0?= =?utf-8?B?Q1IxRldaT280STBKZUcxU3FyVnJEMzUrbWUwYkRPTFl4VWp1MXVmaE1PTFlM?= =?utf-8?B?WTNpaHRwbDZ2ZFFnbnQ5YjllaUhmbHduZ1NoMlM2bkJlK2IySFUyWVkvb2RM?= =?utf-8?B?L3dNS3VrN3RMNXN4WlVhZ0dRUjFxSWtBSFhCYSs2UVVLd1o0SWpZZ2M3Smtj?= =?utf-8?B?STJpZC9ISmJ6N01tL0phWUUrWERVelFKdGRHTGNDR3ViNWdFMU5qVHV5TDNx?= =?utf-8?B?Q2REcUV6T3RkWWI3cXp0Z2xQWkJQYTJneU1FL3ZpWjk5a2o3WmRKMFZDN2Ns?= =?utf-8?B?K1l5V3dCeXN1ZDlZVjJxQXBOVXNpMWExS2hhcHVmRE11YVZVNDJSTVhxTkgw?= =?utf-8?B?T0l2V1hLQk02U05EUmtwcWpPQ01xVTNDVFBONHJwUnY3REpRZ2xsN3JOSVkx?= =?utf-8?Q?d0BA21a296l9n6OPO6AOo9m+/C5VoCOy/CAk9ISbyK8Mk?= X-MS-Exchange-AntiSpam-MessageData-1: 5LnbF+D/MqSrqg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 60be9f68-6f6a-47f9-4e1c-08def6e75dd8 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Aug 2026 13:57:50.6706 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: N437PPddjsyOitadWFC7z+Bdx14nrcVYaufWFxj9HG8XbiyzvOnYbJazhyVH8VgAuk0TsWzs+FUoQgdoBAudgw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB8208 Add `shr_exact` in the vein of `try_shrink` which shifts a bounded right only if it loses no set bits. This is useful for getting a shifted down integer while simultaneously checking that it's aligned. Signed-off-by: Eliot Courtney Acked-by: Alexandre Courbot Reviewed-by: Danilo Krummrich --- rust/kernel/num/bounded.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/rust/kernel/num/bounded.rs b/rust/kernel/num/bounded.rs index 90483d2c5374..d192610a687d 100644 --- a/rust/kernel/num/bounded.rs +++ b/rust/kernel/num/bounded.rs @@ -493,6 +493,37 @@ pub fn shr(self) -> = Bounded { unsafe { Bounded::__new(self.0 >> SHIFT) } } =20 + /// Right-shifts `self` by `SHIFT` if that loses no set bits, and retu= rns the result as a + /// `Bounded<_, RES>`, where `RES >=3D N - SHIFT`. + /// + /// Returns [`None`] if any of the `SHIFT` least significant bits of `= self` is set. + /// + /// # Examples + /// + /// ``` + /// use kernel::num::Bounded; + /// + /// let v =3D Bounded::::new::<0xff00>(); + /// let v_shifted: Option> =3D v.shr_exact::<8, _>(); + /// + /// assert_eq!(v_shifted.map(|v| v.get()), Some(0xff)); + /// + /// // A set bit would be shifted out. + /// let v =3D Bounded::::new::<0xff01>(); + /// let v_shifted: Option> =3D v.shr_exact::<8, _>(); + /// + /// assert!(v_shifted.is_none()); + /// ``` + #[inline] + pub fn shr_exact(self) -> Option> { + let shifted =3D self.shr::(); + if shifted.get() << SHIFT =3D=3D self.0 { + Some(shifted) + } else { + None + } + } + /// Left-shifts `self` by `SHIFT` and returns the result as a `Bounded= <_, RES>`, where `RES >=3D /// N + SHIFT`. /// --=20 2.55.0 From nobody Tue Sep 29 08:22:31 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012052.outbound.protection.outlook.com [52.101.53.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9D04F3E9F93; Mon, 10 Aug 2026 13:57:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370286; cv=fail; b=fE1tHy4yEleJfMWh4xI3l78iwV0tu2hZ41m3Wxp4UKqD3XNhMP/gilKcGpKEeuE3j2qrKwQgH/OyjM/jMXxoIZ0CBCfXk9L0oZUj0BUQ1eT6jYDRVq+Rk0IRX8BPPXdemgNYI8fSmdMKRVvWxJY9aPdOAiDY9GAfmVMrycoDPhk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370286; c=relaxed/simple; bh=YCRJDu5iHxwYT0KT31JK+MlN2A8i4YhQg/7qCvaJE7w=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=m3xheERa8Nam+fg6It4DgY1ZcO3YVWSf8A5hzYkwE6dn0/mAK6AK6wze+wTGkWT1yWrcwde+ywJeSx4lBrlZLHcsaXE1cQa4WFU7sXuksP1D2GMasF7QE/Xzs4E3cqPIfffkCHxAinFBQZ07Wr/3WPTzjfLlCVRCfqVlHOVfLjk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=AadWmrlK; arc=fail smtp.client-ip=52.101.53.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="AadWmrlK" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Xscc0Zj4ygcdij+xn8LvaQHi8U/8ScfRi9rNzmKXIfbKjl/T4wjuZ8Nb95zqzViQhHvc8mr6GRaaaFNdMWZnbQ8FRPAGAZ5ac8r4/VbBBv40Poio6c5niOcBpauMgquRq4tgFwBbcAMJkgjwck4z2R5HMYaYqOdRT9Tg0J0PiH43zoHRpr1aX5RJC0SzeZfmLYSlDEbjJf1q8DvvvtM3EnLPqXl2KvpTbfNZkEFHnO7VqCJoYcjmqEL2EwodpgcJ7v17h9aTMcU18SP8r19re7XMLOwBfWzP3FndaxICU4EC7zxu+DsybNlFVQbsxXAGwtPTaxAcRe939/rV2BSmaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ySLHY1auqKK2L0EotcEpJEtnXPUV7Lv3gQcIpvXHnXc=; b=o33Q4JPwq9q18ZAIpp/jcqX7LMWGzIgTUI+AbxiXbxvjHpoMvUO2o1o5RLT6W0aKAO4HN2zomXU/ci4xUyEBfPwOQ4sC05guDARRodobjv79zL5nLxzKn2rJ6zLg2GScnKlxdCtnPf1u3GIQabl39iS8N7SNjXoN598eVCtyS8Nkj/P1EayXTmLlMRc20XBwiIzUi/hwCw7HCmixG14oV+F3a4jcCveuXBK/2NxOdXxzV53taELqB8dAzhV+tETpIKjwWbfphNx2BNElBre17XEQREcVhoTwxWtAnrJXYh1soYWmgt8vdZBYtCsvRA3lSHkxzhfHfPJSkmA9iDiVug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ySLHY1auqKK2L0EotcEpJEtnXPUV7Lv3gQcIpvXHnXc=; b=AadWmrlK7TIVCOdRzwNAJpgfs13yYg/2eAhlHvvvFBP2Z4phOmEggvy71Q5WRtD9FYBQn/4eh23dvecpGJwtufgFsjersUUpcBLuq62xP3q2Ejd2F2jQbjhsRqH9VmHiJLgWHU7W7YEBuadaTPjMz3qLH1J9OsVRGmIIE+nQZVUTykkp1ObU5Qy/zWWQTw5lMCDxB/CDEicn9FePvAruA7pBmituCebGOBv8MR69VNzhigusChbC0Qltx25ZOQLECXjHE6s20D0CQO4gbUekxiE9ZtqV7Tj0uIB63RCNlx+jC/GibSAYTKvPSHAKUMcZKtsJpRzsKFBbCPxPs9rYNA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by IA0PR12MB8208.namprd12.prod.outlook.com (2603:10b6:208:409::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.25; Mon, 10 Aug 2026 13:57:54 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0292.024; Mon, 10 Aug 2026 13:57:54 +0000 From: Eliot Courtney Date: Mon, 10 Aug 2026 22:55:26 +0900 Subject: [PATCH v2 04/12] gpu: nova-core: mm: Add VramAddress type Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-pramin-split-v2-4-65a00b3c7309@nvidia.com> References: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> In-Reply-To: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> To: Alexandre Courbot , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jonathan Corbet , Shuah Khan Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, Eliot Courtney , Joel Fernandes X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY4P301CA0011.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:26f::11) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|IA0PR12MB8208:EE_ X-MS-Office365-Filtering-Correlation-Id: 051a57ea-d684-4926-548b-08def6e75ff2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|366016|23010399003|10070799003|22082099003|18002099003|11063799006|56012099006|3023799007|10067099003|921020; X-Microsoft-Antispam-Message-Info: AzcFEIl3RBM97hIahAFp2D2cXWvqn5PCOMsnFugGqDjDM5VGU9o6CRo7jPtxq24kv6WBRpfTAJ1ZO4Eys8z9y/vWW2SEjCrB19IK2H6b8OGQp+nQ/wfpw7G/OFJ3OAcqMyqpzh2e1B845kddb9N/l9kcG/9HY/QEOCrkj5dvCHlSPHqR6xjr9uRg2y/I2Esf7fMtBFp/4TUmFBQYiY0Q9hCYwlpZd48A/UrIrLYXiFpPZ4nFHyDgws1VkepBHO++lqpz64eJL5zCQ6X/qNVbsmqo1QyZPbVVJq4Qs6CHkyMF7swMva63vp6SOTVTZKogymTZJerq97iYqjyDuYvCefJNbSQDta/dnepe0TeXItrpfURe3hY4YH1iObF90arAc+VIDBsTSRP70QK9YZXPpwgkw4w52VCLFo4Kto56GUDP08Tjrm5Zc/jHI9+kKZo2/v+Wfc1HfhSHF1FWDJIJj+Rr5bRXnMG8QK7rAclawijT+e2e53P1TLMUu+TtSra9XKy6xbPUkFrPwUNVjERfyq+G6m8q6bqqXB9v+a9YD01O/Yt/JeOVU4Wq6O+NG1KqegEDv5k+l57fwBFMlE7FWnL8LpKrnuel+3C35XNl6YJYHAGR6sRLsEDl/doKjqFLbxBIiZPdRRiQQu04K5me2vgw9Zk/ADaA/NuhzoRhwy1gdLhTgb4sI9pY1C7UyfjjNEhA2fVms8WhJtakeFqLhw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(10070799003)(22082099003)(18002099003)(11063799006)(56012099006)(3023799007)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VTNyK3FqazZ6TjlUT0lVblRPY1ZZa25zMGVvNEw1dmZCQ3N6Mnhvd3VqZFJk?= =?utf-8?B?M0ZmUGVhaVZpVEdTcmJUQ29ZaENJSHEvQlZodWJDc0loSFJ2OUM1UjlKZTgx?= =?utf-8?B?M3Q0TnMwYVFJVlNzamVrcnNBTytNQ1E1ajBMRjlBRVJvamtqZXliNjl6ZzRz?= =?utf-8?B?aW5od2dNbWhpQU5ibDNUTVQ5VE5OK2ZyUFpsUDNQZ05HNTdWRDNreVZudGU4?= =?utf-8?B?NjNjSjdDaVppTkRqRDhMMnloSVBySzBaUE9WVWE0MjlPQXVGd0w0NnBkRUpB?= =?utf-8?B?Y2VRVy94aHNIanpwQ0xCclkzRWgxQmZuSFhSbU5hbEp5bUZUL2Q0NFFnMTZZ?= =?utf-8?B?NWVMK1RycVRNcndwZmYwWk9iZkZ3dGxLQnV3cFk4dm5xdThUN0ZSeGw1bmVh?= =?utf-8?B?aDF5dTYzbmMyWFdxWlQ2UmlnNEpIeDh6RERMWlNFb1dxZWpMcjBMK0RvVzlW?= =?utf-8?B?RjVxSGVmMUhFenlHL1pxVTVhOEZjTHNMeDRIOWJ4UVFZV2FkdmE1czJkUVVy?= =?utf-8?B?dEVKa09MSkVwVWZxY3ZDUDFRTmhKR3RPS0RxYWpVWjRCTXZ4Y2lRMldiR1I2?= =?utf-8?B?dm1XSXFZMG9xUnBFNnM2SkZzZmRDYXF5K2YrQ1hLbjQwZ3BXZ2U3c2lzUm1m?= =?utf-8?B?djY2S3h3RkxRUU9LbC81ZW5ueHBiWCtkVlVVcUl6bjN0RTB0WUdremdSaXVi?= =?utf-8?B?Ry9Dd21RbldxbDI3cVFmMGxMUlM4Mm4vM2V6VjE3aXEya2FmTE1yT0owQkVk?= =?utf-8?B?eURNS2RSaHRiUm5PMWNsZG9SOUMzUVk1dlpteFVrNVNwYTg3a0dhelpCTUh2?= =?utf-8?B?U1o0YWMrVGRPbXB3alZtbmVXbmhNZkJCdS9RYUd4aGZiQUFpZU9IaDJVMEhw?= =?utf-8?B?KzkvS20wcEVLTE1WK3JRUHlBOFdJeTYwKzhRZlEwNHdGOXI0L243bGVmMnpV?= =?utf-8?B?czU5MmxLcDEraHkzcjlsT0lpS1pUV0ZTcUkvOUVzWGprbC9OUWxKdXRDMFRy?= =?utf-8?B?cDBOYVN2K0tZTlhGdHRCYzVBMFpsclA0djBxbzIxaGVTZ2poUWJoZ1VpNm9q?= =?utf-8?B?TzJ5OWVxSS8vMW1oNVlVRW5GaGtxVWxOM0kzZ3R0bnQ3WFhZdGJYd1dIVDRV?= =?utf-8?B?cjRmS1VHY2lWYkFqRDNQOG8wZkxxUDhkWGZpaXZSdHU3dGt4ZmNwdURtS0Z4?= =?utf-8?B?NzRnMlpYRXZxbFdvNldBZFVYb3NlaXdqclpabFJ3SSt4RVo2bjR0eUZVVmdT?= =?utf-8?B?d0V2UCtkQVpOcXMzY0lyTS9zVjlPOFdIN1FWWWN5MFdJYzI5VTFQTXREaFpa?= =?utf-8?B?RVBzcE9DSmdscHZpdGgxYnBsYTVpMDYvak5rT3I5NWMzKzV0VkNzZ1l6S3pp?= =?utf-8?B?ZjNIVGpGbVNVbzBIaU43UEpTTU9NWld5WG9FUUYvL2pHa1N2eUFTdDExa3Fl?= =?utf-8?B?Wm51MTlZdHhXVDl3WVpCZklJdlhPT0YwdFIwRWV0dnJ4VmxTbmswSDlsQzNo?= =?utf-8?B?dUdYT0tPRUhoVGJiVlk1cXU3c05MYjRzSGFrd0NpTlFSYXJrcEVHVTZCalRV?= =?utf-8?B?YkxDWVM2THU2T1YxdEtCUGt4OVpxTC8zT2FhM1dCTmNtL21UQ0ozUXhWcS9F?= =?utf-8?B?QUtXZzRvZXV4Vi85cThXVTlFRzA3VXBlTDFPSloxZlV3cXhPVzRGeHZJUFlh?= =?utf-8?B?akVTNElVT1ptREJvN01jSGw4L2pvTFN0RFN4ZldOblQzVCs0SDNIY2llZks5?= =?utf-8?B?WUlxU0hxUGpxN2hhTnEyRU5lMFZGNUlpZENvOVF1NkRTRU1iV0kvQmdjK2ZL?= =?utf-8?B?d082eG1KdkhVeW0xcWVFNWtKR2NsUHVoSG1HTU1kQ0lIRXZiVTRYRW91NC8w?= =?utf-8?B?SFhrdWpvK1lxSWtNVTU1M1hmYUYxYkV5SGJDbTIwNHh2Zml0eG96b1pONzVr?= =?utf-8?B?OUtEbGkrSzVDZE5pMTFhYlNFK0M5bE1GY1hxYm9UM1RIeTRBbkFiMjhJb2Rw?= =?utf-8?B?YzRoL1pQTkttWnV2YWd6L1FMMkc1ZHphd2hYV0xQMUFLTWlLMUdENjI0ZWxZ?= =?utf-8?B?Z0s2WldwUnFYVmFGR1hHR2RHRG4wRjI0dU9KaEtFM011Z1hZYmh3OXVnSHBi?= =?utf-8?B?Z0J1QlpaUGR1Rm02NDN2Q1paWTVpMzkzb1ZqbXg5TUtHUU9DUE1qaUxMQk90?= =?utf-8?B?M1ZnQ1lYK1NiMEpaRFRxK2hXcitxc1Mva3J1TU5NUDlnUG5YVTgxNFNmOHBT?= =?utf-8?B?OUxFek9UTXpoMVB1ZXdSNW5ud253dm1iVmNpRGNKTWJGLytqTlZtZFMvM1Uw?= =?utf-8?B?ZzgyRWVOSStNaHBDZGUrUkp6Qy9OV0c2UTF3eXRIR1MzVU1qdSs2aDFDTVB1?= =?utf-8?Q?nvl4rMiy+TtBCwzGk1a+/QlM9FHrkZfuv9AgpLOaDIBgv?= X-MS-Exchange-AntiSpam-MessageData-1: Cz46ZIYaxSvnQQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 051a57ea-d684-4926-548b-08def6e75ff2 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Aug 2026 13:57:54.3269 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: uxpKhuQTBym9AQJ8J5ZFFsFvIg7qTeERWT/Ur3sxkCBmlL6e3Qf+l23Qal++7Rss4FcAMNcAtQD2O6T9EmtaTA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB8208 From: Joel Fernandes Add the `VramAddress` type representing a physical address in VRAM. Also add an arithmetic helper, comparison, and operator overloads which are required in later patches for address arithmetic. Signed-off-by: Joel Fernandes [ecourtney: create mm.rs here, squashing in the arithmetic patch] [ecourtney: splice the two commit bodies] [ecourtney: drop the Pfn fields, open-coding what bitfield! generated] [ecourtney: drop align_down and the IntoVramOffset/IntoVramRange traits] [ecourtney: make checked_add() const over a plain u64, derive the ordering] [ecourtney: doc wording, header, import, and signature cleanups] Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/mm.rs | 60 ++++++++++++++++++++++++++++++++++= ++++ drivers/gpu/nova-core/nova_core.rs | 1 + 2 files changed, 61 insertions(+) diff --git a/drivers/gpu/nova-core/mm.rs b/drivers/gpu/nova-core/mm.rs new file mode 100644 index 000000000000..dcd5e5e919bf --- /dev/null +++ b/drivers/gpu/nova-core/mm.rs @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: GPL-2.0 +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIA= TES. All rights reserved. + +//! Memory management subsystems. + +#![expect(dead_code)] + +use core::{ + fmt::LowerHex, + ops, // +}; + +use kernel::fmt; + +/// Physical VRAM address in GPU video memory. +#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] +#[repr(transparent)] +pub(crate) struct VramAddress(u64); + +impl VramAddress { + /// Creates an address from a raw value. + pub(crate) const fn from_raw(addr: u64) -> Self { + Self(addr) + } + + /// Returns the address as a raw value. + pub(crate) const fn into_raw(self) -> u64 { + self.0 + } + + /// Adds `rhs` to this address, returning [`None`] on overflow. + pub(crate) const fn checked_add(self, rhs: u64) -> Option { + match self.into_raw().checked_add(rhs) { + Some(addr) =3D> Some(Self::from_raw(addr)), + None =3D> None, + } + } +} + +impl LowerHex for VramAddress { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + LowerHex::fmt(&self.into_raw(), f) + } +} + +impl ops::Add for VramAddress { + type Output =3D Self; + + fn add(self, rhs: u64) -> Self::Output { + Self::from_raw(self.into_raw() + rhs) + } +} + +impl ops::Sub for VramAddress { + type Output =3D u64; + + fn sub(self, rhs: Self) -> Self::Output { + self.into_raw() - rhs.into_raw() + } +} diff --git a/drivers/gpu/nova-core/nova_core.rs b/drivers/gpu/nova-core/nov= a_core.rs index 35a8b1214b0e..8f59cfa97017 100644 --- a/drivers/gpu/nova-core/nova_core.rs +++ b/drivers/gpu/nova-core/nova_core.rs @@ -18,6 +18,7 @@ mod gpu; mod gsp; mod mctp; +mod mm; #[macro_use] mod num; mod regs; --=20 2.55.0 From nobody Tue Sep 29 08:22:31 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012052.outbound.protection.outlook.com [52.101.53.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E5BF93E49EE; Mon, 10 Aug 2026 13:58:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370291; cv=fail; b=niXE8tf2Dm2/tm/AXHNrbF43/7APY4dD30U4q1j+fx475DwimDjRzFpMVG6SYMHq4j+idD7mv9SJmvNxUwP9HGmcMZbLu1iVOaNWwE5jBcFlEK1NPiRJBnf2e8fVweZGSZYg8TpzGQ1PEWp+EKpEj1lWqL/LC1OEVDQQBBJpEu8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370291; c=relaxed/simple; bh=B0SoJDAPkHUJdXL7r4Q58vnagRW0BzbIzIO0yrqCY3A=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ifiaCEz3SgyeGcM7yOcqLxGlYbFjze6DTJuFyuDcKGkFIoRA7yjZlMrJjjxDcerpeIzj5Pr9HWkITwcLkW1rq0qHe3txbD5yVy9gLvy3ZlyOP3cCg55dVW+FrzDmtmgUaiaLN+BguZ6qDETWBMmkRaUU0rnXS1ke5iwutzHW3FY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=Rh/22wo8; arc=fail smtp.client-ip=52.101.53.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Rh/22wo8" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=km2PPZYezwo53iYXh+E0lM0cOQKvDjDmEb2ojHYeiBI6wE41mhQuerzw/YZpeqtaf6MJYFPDpjnzVBmeIxb35z37yVSZ3TRpn6f1BMYEzvfbBnEYvSUk6dMi76WwnUApmdwLR8/Dxz7T0CliQTLaZBFfrHrxrbHDSfMhiUyQb9vYqos4V+xPESRs8Dlm5bOgZ10qd4rA5+JrSf1ibMm96ywretIbEMjkz7ycoImjvBhwwWnW0+qY5znNO0P7DgwUpeEf4/qrL+KNJnqGumRBSH2cdQ7bWLWy1tFRGanLxbKHfJgkgcQZ4NmucZJozKDs1sxUM2qok8mbxvrmHHyUSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=YGOBl5a/xNWCXmOTaWTF7DxH9KJC5yYDPccNRx+MRTQ=; b=bibfZ3ysdM/u2mssJwkqhG3y+KAa58K73fC8RJgc24lJgth8F3/gs5S3zufJpjICZ9gIshD8KO8h04Q0o7QGlSKR3k6tsEB4aakSae3kAr/IqIsYEfe7n0O9ID8DrKEd370zaTz1hBKJR/UGhcctt2rDYgGi4nuzB8XEpXl5qHUMMdJaDJPqq7trT2mwlEMXNI8LtAvnwdhpaMSLBf7u8LOBY6k3PIAYHi0hCo5aJjx3UyRUTKg88qVAnTg5TUN6u7J0KZOi86eEhcel+ZO7EB1QV/MiELhlyKqceWB38GrIFUHcdd8CWrahSOcfQQBm7cdWBWa7izPM9LUCl9l+TQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YGOBl5a/xNWCXmOTaWTF7DxH9KJC5yYDPccNRx+MRTQ=; b=Rh/22wo8CpdlzlVZTSBPW56vSoO/coigdVMqzk2+FJVS9r6Fik/LV3GT4w0oZP7ub3HNO+osQ+Y3pcyvMcfTGIarbHPeqEj3EkY3h/3gcpfDlLZld/Of8vtOuYXxzwhIATHffFfcfDYGeB7IETbLMoIKyx/tpzSANVHYEFJbtrIlkmJK+yv025N76L1ojpDTNXVC4Dh5sdfOtakpeglm9bFYOqw+fR/HevAfeb++h4f7nJdQRCLWmfaEUM68X7Z/53Zs3Vf3//Jzq5hukDCcIlTnK8i0RvA9i/9nV3IGYnGJ1DPKRUlAFl8y08t7xuC54e6q9xlnjmG1ibHrbaAw6Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by IA0PR12MB8208.namprd12.prod.outlook.com (2603:10b6:208:409::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.25; Mon, 10 Aug 2026 13:57:58 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0292.024; Mon, 10 Aug 2026 13:57:58 +0000 From: Eliot Courtney Date: Mon, 10 Aug 2026 22:55:27 +0900 Subject: [PATCH v2 05/12] gpu: nova-core: mm: Implement Alignable and Debug for VramAddress Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-pramin-split-v2-5-65a00b3c7309@nvidia.com> References: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> In-Reply-To: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> To: Alexandre Courbot , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jonathan Corbet , Shuah Khan Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY6P286CA0030.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:3b7::6) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|IA0PR12MB8208:EE_ X-MS-Office365-Filtering-Correlation-Id: 53f64588-5cbd-4347-a3f1-08def6e76268 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|366016|23010399003|10070799003|22082099003|18002099003|11063799006|56012099006|3023799007|10067099003|921020; X-Microsoft-Antispam-Message-Info: 52vTtfdNVXop07pdR0pEH/sqrZLBZOnIH04AFtvx0TmLT91/vtP5B85R7ReZcf5OTb3wqBZ0ZyDHuJvAj50mrYDbZrcqpCLgFwF4HcG6r63O1UEcvMKy+f9a93qXQFE+MAX+VoPMqi0gs8mRPl9Ch3FQi3HzZNK/SIEfTN+XESvK3Buk/eZ+peW3MYVKe1mgDeO6fenunFKtt2RoJdg8saCO6lfySU1y+QBcCJhUXMUHZieq7E5uB3lCRVbinGcwShZdjkiGfRmTPA8cz57l4jpplq2L43v5L1sa2cWB2dmUwZ8BOLSTpoJ8NhU3oaiKgO03FxNNvqEUBPueG7/BBc6J0JH2un6q8frm3Vu/kO9m/Fgs3zeh8v9sicP+xOVcBIMmxQO5bogAcGcOWqBHK6MhR8/mLVdtCGlWBKJ0hBBLZZYDiC/JKetbTTTf8vbDlK1JYS+L/2mvji2CwJCooSo00n6UbVd9hN9iTY1YVUSMme3jQ6i7yMdNDwLI19ZlxCNspNZmgVVdxzygAOtqptECBVyRzxAvKObdBoWr5a08Y/oBqSgO6GrB7rktk1Wr6rOJlEO1SrZiNbnOxYJ5T6tJ//+cOOTy6MyoldUL0Ec4GXJWd6NGhvUwc2YtL9EtMDjEADLcYeAbrw2xmHkt7Av3NEyu5pdFfM2Ypr6C2Miqzyk0VhvUMhUprxdUAnksPFdzt8jVz+36IFHOghn9dw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(10070799003)(22082099003)(18002099003)(11063799006)(56012099006)(3023799007)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Tk5Ha0FTRGM1ejV5S3JSR3dHUVlpRXlYV1VLbWNXTFZUYXlzeVZRWDAzNGVJ?= =?utf-8?B?RG5xVjArTjBIQVhFNGRCdVZMbHA3SVoyRTN2Nmd4YncrclozbjBsVnluQlYx?= =?utf-8?B?VVkwemRKdExNdFhORm9qZHc2L2hSblhkSWduRHd2L1N3eWRxdlNqdzBlTWRT?= =?utf-8?B?OHpsK2dPbUpUVmhMWmpoTzRmYnNxdFNZbGhBZm1QczMzemdJVHBFREI4OEhS?= =?utf-8?B?T21RbTVKRytVTFJjd1lLYlh5K2d4c201SzFvenp6eWZwWWRHMTZNWC9UNGY1?= =?utf-8?B?S3pqbXJ4S09ScDczM0Z0SjI0aHA5MkxaM1RHSGdBLzhvRVlRREo5TzNGbzdP?= =?utf-8?B?NUgrdkR4Qlk5cnNTS3FGeWx1TUsrVU1YVGs4bEh6eFQ4L2FOWnNwSFlvem5W?= =?utf-8?B?UzhrV0x4NUxrM0xtZTlwc2x3M2ZqRDluamw0dVhvblJzbldHU0Z1N1gzQnFa?= =?utf-8?B?RzNaVlFMSWlTQVBUeXI4VkgzaGltTnFmUmJiQmtZd0x5aG1vY250ZUZqS3F3?= =?utf-8?B?dnAxSmlRNmxZTFYwOXhndnNyUXpXR0Fpanc2NE9mNVpCMzJ5UmJuQVlIMWxw?= =?utf-8?B?TG8ycTlnMVlhWCtrKzJpbXViZXBQTmFVV1NRNXhiZm5JbnRFYjJQZmwwY1BF?= =?utf-8?B?UUh3QUJWcHpQb2svVmltMFBlUzM4d3Z3YzhrTGNHT2k0aE9aa1RqelcxUWZv?= =?utf-8?B?aVJSQTBWZDJVZW0rTHM5eWJGa3IrODN1MVpFbmJIMWJKcXI3T25KcTUxQVox?= =?utf-8?B?UHZBa1gzcUM3cXg2a004MzRnbXFSSmJKYmEyUEovNStQeHhxVFk4YmJWemZt?= =?utf-8?B?ZHl0TDdZMEwvS1I2OStVdS8zVXAzOFpSZ3ZTdGY1RDFVSmNWaXIzUVZKbmZh?= =?utf-8?B?QnRpTGZTQkM4MGdwb3lwdU5IL3ZnWGsxeU5wQWFNdEJoZk5iWFJqZVRTQm01?= =?utf-8?B?TytlMTgrYS9WWE5UN2tXa2pDM1B1Qng3L3c3K2hxUmFReDNMdzlyY2xoNHpy?= =?utf-8?B?bEtnUHJsMXR6Z1RqV3drWmViL0U3Z0RZTnUzeE1BbkFVZ3pJd1lGZnIxOE9U?= =?utf-8?B?QkV0Z0Q3UHpLc1ZydTh2SllpQlB6Qm9RNXgvaHZTcFAxZTF0MjhDVGRuZmVE?= =?utf-8?B?Sm9QUldhYlB5NXJrdEpheEExUUFRaEoyN0xUVGxTZ2gyUEdaWHlZMGl3bFNp?= =?utf-8?B?cHZ6MFJqeVVPWmVGYnppRXNHVURMcDQvckVUb05SbGEyNWRsMWNmV00xWXIz?= =?utf-8?B?NkVwRkdTR1RRNU5iUkZiZmRTTnlibVFtR28zK1l6aW90V3BNTHdoLzBpRERi?= =?utf-8?B?SWp5T2wxNW40N3lzKzlkdVZ4UDBSUUVjMUtzU0F6TDJxaUVJK0FqWGdORk5z?= =?utf-8?B?dDNNcTA4YUszaytLRFZNczNMaVBieTc0Wm1kR0IvVGUzWkFPdzRlOHlHdHBy?= =?utf-8?B?Nm4vMzQ3RnpPWmNORlowUDk3d0t5NlJHWTlIWVIrYnFGZkhDZkpDeE9kM0hO?= =?utf-8?B?ajZGY3pSZ3NlWHh3QUh0RDdPVXJ4TGc5bnU2NzVhMnlPUDhBSkJ1K1Z5ODVt?= =?utf-8?B?a0VtaENrR2dyamZuWFhKaTNCVktqRzZMTHVEem5YTVRnV1RlV1NGOUxkK3Fv?= =?utf-8?B?c3Q5M1BoRTk2NWlnOTVxSkc3VWZBWWJNb2JOSCtUNDQrZjg5Y3NQY3Z0a2Uz?= =?utf-8?B?Sy9XU1AyZXpXZ25ZNDJ1bXo0aXc3NHU5WVd3bWF4ZkdERklLVWFnYjNNcmdZ?= =?utf-8?B?MnlUNUdFWlhlVEFKNUtNbkVrREVxalplb0hITEZNQWdpSy9zbkNLT0JOUTBh?= =?utf-8?B?RkdFOTB1c1d3RnlXdG9DMXZ4Si8vdHQxWlBDZk5mYzZpNWwrUENJNUQzMFlQ?= =?utf-8?B?S2pvSnA0aUFaaW1qVkJkVVkwU0xoTUdZbE5wUGE1VkIwaVhFb0lvdllXbWlD?= =?utf-8?B?RUEvMVp1Qy9ncnZ3Vkg4Y0JYaXhWSVhtc1h3VUExMnFsM04vZ0VjSEdBb1A3?= =?utf-8?B?ZmdZaXN4Rk1pbzdlUzNDRlBuK3hyL2wxRmlTOWR4OUhtTERaWlEyellSUEt4?= =?utf-8?B?THFIZ1NJVEpHS0lVQmt4RTNaN0FaaU9VOHNuRnlXSmxoT1FIR3h4bndMN2lJ?= =?utf-8?B?dFhHZGgzSUVFNktoYWR1RHFTVnZBU1FiZlRtRXJoMGVrdzZNSnVJeWhvcmJu?= =?utf-8?B?TExTbWFXcTRIdlJIYWhZQVR5ekxBYUsvQVp1ZnYweUNHNCtLWCtTZkRNQzh6?= =?utf-8?B?dm9JeElmd2dIbTUzWklLNTU0RnZ5MFFBeGg4WXc4cElCMi9tS0cwNU9pcktB?= =?utf-8?B?RzkyQ25BYVRwOThjWUx3a1VYSHZYVGdKRmZTV0NGTHhmaE1xRWVJNWFzdTdS?= =?utf-8?Q?HP6yPXiZdZWYGuRScYAwQsIeUnnIjK73gx0TZWph/p7jR?= X-MS-Exchange-AntiSpam-MessageData-1: 83yVSePgeY2qTA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 53f64588-5cbd-4347-a3f1-08def6e76268 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Aug 2026 13:57:58.3878 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /1VlFTGqIDpH72PUpv+rHnvJf1C9Nnr6yhPKaM8oihphAy7tch1s7YhcxAcxSvMv3h+So2AjMw4+PfJoG1hrxg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB8208 Later patches align VRAM addresses down to the PRAMIN window. Implement `Alignable` trait for `VramAddress` and plus add a `ZERO` constant. Also print the address in hex under `{:?}`, so it reads well in debug output. Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/mm.rs | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/nova-core/mm.rs b/drivers/gpu/nova-core/mm.rs index dcd5e5e919bf..f9d80ffbe01d 100644 --- a/drivers/gpu/nova-core/mm.rs +++ b/drivers/gpu/nova-core/mm.rs @@ -10,7 +10,14 @@ ops, // }; =20 -use kernel::fmt; +use kernel::{ + fmt, + prelude::*, + ptr::{ + Alignable, + Alignment, // + }, +}; =20 /// Physical VRAM address in GPU video memory. #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] @@ -18,6 +25,9 @@ pub(crate) struct VramAddress(u64); =20 impl VramAddress { + /// The zero address. + pub(crate) const ZERO: Self =3D Self::from_raw(0); + /// Creates an address from a raw value. pub(crate) const fn from_raw(addr: u64) -> Self { Self(addr) @@ -37,12 +47,28 @@ pub(crate) const fn checked_add(self, rhs: u64) -> Opti= on { } } =20 +impl Alignable for VramAddress { + fn align_down(self, alignment: Alignment) -> Self { + Self::from_raw(self.into_raw().align_down(alignment)) + } + + fn align_up(self, alignment: Alignment) -> Option { + self.into_raw().align_up(alignment).map(Self::from_raw) + } +} + impl LowerHex for VramAddress { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { LowerHex::fmt(&self.into_raw(), f) } } =20 +impl fmt::Debug for VramAddress { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.write_fmt(fmt!("{:#x}", self)) + } +} + impl ops::Add for VramAddress { type Output =3D Self; =20 --=20 2.55.0 From nobody Tue Sep 29 08:22:31 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012052.outbound.protection.outlook.com [52.101.53.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4178D3E9F93; Mon, 10 Aug 2026 13:58:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370293; cv=fail; b=IDbEEAyuPHK2GWN3xoPAFnHVMSRnP5hZ3PwSOyWnAIJzOyRGqQTNWgdLqhVGpjGeQXqrWOdiS4nTI1l0+x37EFeTtHGGMjFIFsvb0NSKO6rB0xp42nn01JmbCuJNmhqOmcTRd2rZ5iGVkQYW8f19qFdw9Vv6enMxp0NBtDyfDKs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370293; c=relaxed/simple; bh=cfH2S3MHK4wLQ7e3oEL7VTjXEkrMiUhWjlUaeCaQuFQ=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=M1p7k+IToFdBa5eaaGWu69+FRObmJ7PCOx6cl1lovzX6BzjbbJgH93uwmNdckOKk00bt9r4gmMlmMpGa53x/bO5G8s6D2cauNxqHx1Vs5OAcZDQpNs6cAVCuoC1E9nI8K0mBJDcc42/huSzji/mZCFvwNqTwIf3GSmV6cGuvQ/o= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=RyCQJ5oG; arc=fail smtp.client-ip=52.101.53.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="RyCQJ5oG" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=d8uX3HAqtA+6OijM3S4D3JV0wsC+W9hLn9dRadQZhHLEr00lLOuZeUQzI1aBh2oll6qWTIhdC6pbUgRxJW1nB0evjNa/uuzTk7Il6zAi45CV0bA3S/0i/a0WdKgvy61RvO0SmQYajsv+wAnUTHYqJC5tUUNFyR3Sx/TZ09FUZpt/gLcerUG8MLIqLUXMxxq/cBgsvri26DuHU6EDtZ4NyiW+zC11RMkDhczez9qMD44CwfQR4p/1VtS6ezaFzcfF+5XCosQRtqPVEMUq+uk8kxSHzI5fgyHVTZR7f610qeUAneekgO6vmR/eXrLrLBQXP6Ntl3F319s0fdLXRA0ZOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xjFn8WncNZcNiijYDQqDtx8Sb1nRpzpUXQEdStempho=; b=isw4oO5q9xBqcnuqm6T9XY8Vs5xrQx3CqvvqJ3eB/+bpfuZChJ4l2mWklg8cFKVgm3t3HTF31hOMWybVtrvXFAb8Bso/CSI29GDCvlh1v2h7tLc5pVKF167ucFz5oi8MMbjg7AggRp7yK3c9sQ2EqW/UX1UFxUSTti+UWxUfU+qW4fNQkbcXiMI56olzN/uNztjMV365UjNZCotIITeGVdTcY+wVg5RSNJ1fw+CBc+yc5mwZMiGEWseOpYBJxGDAppYr9No714WU4EWdGQzDUHXp4PjmZPVXTi/xIIXgQTWekPCsFNVUsAqSRSgDQgHFeppBCj9daU7JkEDP8NQN3g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xjFn8WncNZcNiijYDQqDtx8Sb1nRpzpUXQEdStempho=; b=RyCQJ5oG0x2IImyTReX1izgdtvGR8UKGpy9yx+huxLWDnAvj3bW0Yz/u7SSNleIyt/Bg/nMdb7iE6vQABRp/1AJ4p2PzoJA4d4QDMJNPbGXZUCQYjJeNwmWdOZcEbWhsj9qQRKJoZrQTzch4ARDhQXRTt/IA0YrUTbxSDBKbN/95kZh+iNldxSptf/ODWRXkMOFIpUd8rsa5Q24X0uoNM/20UtpIH/dRUrD7kKIzFyqWM7vYYONDcV2GnuPuL1nvyKk9GmGRXtTpvohF0oQ8uE5mieIE8m7H7b8n73j9xwfFgtoUII1k3PAeWfURKF+3UOUVaqjhSto8QVEBfSPi7A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by IA0PR12MB8208.namprd12.prod.outlook.com (2603:10b6:208:409::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.25; Mon, 10 Aug 2026 13:58:02 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0292.024; Mon, 10 Aug 2026 13:58:02 +0000 From: Eliot Courtney Date: Mon, 10 Aug 2026 22:55:28 +0900 Subject: [PATCH v2 06/12] gpu: nova-core: mm: Add PRAMIN window registers Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-pramin-split-v2-6-65a00b3c7309@nvidia.com> References: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> In-Reply-To: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> To: Alexandre Courbot , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jonathan Corbet , Shuah Khan Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, Eliot Courtney , Joel Fernandes X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYWPR01CA0022.jpnprd01.prod.outlook.com (2603:1096:400:aa::9) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|IA0PR12MB8208:EE_ X-MS-Office365-Filtering-Correlation-Id: 5acf872f-c3b9-46a8-0a60-08def6e764a1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|366016|23010399003|10070799003|22082099003|18002099003|11063799006|56012099006|10067099003|921020; X-Microsoft-Antispam-Message-Info: LN+H3esgxFDdrFpuTx3MSnjIzJPM9Fvkucd6Et+3jpU6RgtLzPVZBCBHFCS2RbvItsYMiNDAM351e5jJYlVHSZ3v++2AthziQUM8hRbz5Efp2CjMO0087lXEIU7B9ZcuF3+fixV8r6hyt2WLOqbnkj45i8+HFqjEqOCuDbf7EbWvK5KoeZNWkH7Z+Fn4DOvB/wgwVQVDkedFYIuRBEqM0WqPcIdRN55LLJe7qCMehcwhy8oJsLtEgn5nC1BHSo5nyRvBYrV2YSTJIXwBWaDYklFTOs55kqekMrahwsFqdaswSsynvHI/8Wf49zCoN1rnnAebhC5L02sKaokvuxxPQ5TnW3rqTjZT/Xt72X6r/XuzMwlhY23++h/pubxQ4/9Yu9BtOE6rCQW4nPjyAoQuw8wUijhzLYXBATPP9Q+el4WUKg4BOwQFQO7cOFEa1GmIUFWHgC9Oo/YhJ9FQgkB4hVX/3cZRoRFdgVlhr5zJd6uT2Nc2b6Flip1sSA/4k2xR1ucsgz5cMlDYr53ma2CwGhYCfrsaf6yxwZ6LK7+2EKy7PD17I5pODYzSsB8ZkmxosifBPu+CgyIW0D7TdQonBZWpTSJP2hwxpG6WN7XjCC7bHHFo/zB4Qd0oskWs442NzWm+eI/rCznTP2yuFTJyAGQMDXla8JYHxFFnGsIhItfi7HW1Re64r/l+GpdQf0HZN3vaCWtjT4t4kVOkQIY9dA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(10070799003)(22082099003)(18002099003)(11063799006)(56012099006)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aHlJNGpHRXk1YUc2K29Xb2pZakM0bGVXV2V5TE5WOXhzdUx2RlEvTHd5NVlJ?= =?utf-8?B?c003QktVQ0ErZ0IyTUZmdnVKOHFBOW9WbFc4K2lZb2k5a3ppTmdDd2xRYmQv?= =?utf-8?B?WXlIdE50WXNDYkdLYkhEM25vVjgySnA5MHRSQ29YSEhJQzErWURjSW53VjI5?= =?utf-8?B?MjJrZHJaSzRWbTJQbzR5UjhmVkYrQUtDVzhTQmY2WjZJazU0dUZsWjNRZ1lj?= =?utf-8?B?Z2FmY1pDQS9xbmd3RHdOVlB3dVBHdGJPYjlBMEV0VjJUS3p1NjBiZENiZHZv?= =?utf-8?B?eXRzSWNzZlZxRVZjSGo1OGZtRCtRamlYQlBzdGg1bllkaG4xVEllTjhIMzJD?= =?utf-8?B?UXJSM1hpYXk3YnZFRDRQNW1UdEFIbDBNaWVyWk04cFNjR1E2eU9RM2dsL1lK?= =?utf-8?B?QUhneEI1dWRBNmV2eWVZZ2ZWbFBDeTRFelZEK0ZjbUI1VE9acXJYNDk3aDgw?= =?utf-8?B?UUV6aVgwc0NmSmJsSnE3bFpBR05nOThUeFNEL2I0amEwdWlEcytzOHk1K1hQ?= =?utf-8?B?NW9ualB6UGk0eExDaU5hSkt4Q3MrS3FwWU5LRUtCYkhmR1EybzhwLzR4Q1hz?= =?utf-8?B?ZmU3enJzYk5aMFQyNmN3Tm43YXUrNEF5ZEdwQm9vY1cwcXdEdUZoTUVoTXIz?= =?utf-8?B?eCtqMU5ZSGI2aHhxSFQ2UVF2MmE4aFExd2txVTJKSHhHbFJvT2JNVmNPSHpa?= =?utf-8?B?T0tvSUY0Y0dxcG1yblU2eTcxN3kxK1hBVWxERFlVbHh0WUVtWWduNDR0V3Mx?= =?utf-8?B?TldtVTB5bGIwWTJyS0x6TUVsa0g0c0lHRWJ5MVBZalg2YmM0THlMcWRQeTdC?= =?utf-8?B?Q21SUmlMVXhLMHRQNmdsYVBkdUNuc1c5eDVpbk1PLzQwWWdML0RwS2wwR2xl?= =?utf-8?B?MWh1SEE3Nkl4Q3ArQXRPSk5wSEJSVzBEU2JyZmpkZVJOSndGek13akI0K1B3?= =?utf-8?B?M3BRbytQN2tua0xnVW5NZWJOaWNZUFBkbkZLbGIvQVVpUHJiUTRBY2o5eXVa?= =?utf-8?B?TEs2d2NjeEczeWI0SERwdmV5MmY3em9wTG9FZzRuTjBTeDFwSklqTWV3SHNP?= =?utf-8?B?U3UzVXNRRXczbW5zYVFKeEZVV2dsYkM2bHI2QUNXNUYwMnp6cngySDg1bzVx?= =?utf-8?B?eTh2aHdQbVRLVXJJUDNFVm1rNWFOWE9FNnNlSm5BWUdFdDR0c1plOGJNOHdH?= =?utf-8?B?c2dyYU1RQ2RZdjdaMWQ0cmNEVXlwWCtFbjI5K3BWd3N4Z2tuM3NDdkZBWDRu?= =?utf-8?B?bVVxVGNaQ1VHZlJYcnpFam83RGJQTFVJZVBVdys3RGFWbTlSR3dRMHhNOURC?= =?utf-8?B?b0w1WFJ4MGtrM2llT2NsTVYxMHhFeUZ2djlBWEY1emdnSUV0YTY1Y29kU05z?= =?utf-8?B?aGtsMGM1QUFYRk5zL1FwcFZhVHhYRjhhMFZsN3lqWlQrWVQrYW01U29Gc0tJ?= =?utf-8?B?cTY0YjJra2FSQ2RjQmJMbW1yTUE0dU1hWTNuZzBCWUJpaFk5ck1lN2lzSUZO?= =?utf-8?B?dXpUNzdxMDhaT2xEaU1mdENPQlVjZzVScllhSFhadnNWdVBhSHpGRDVPRGhT?= =?utf-8?B?L09pMXYxOGdvTTJ4bCtWckZhbjR2M3RDZDhKK3dHNHI0WklTcEJXTVNDUVRI?= =?utf-8?B?aWRIdVNWdW5ZL0xGVFZFaUJMZHVLdjJKbjM3UmcyQUVHQ043MnkyRlN1OWJq?= =?utf-8?B?S0VSZGNUQlJtWnVNR2RhZitvcXVnbUN6SUhwcXNkcEljajg2STI4VzA0Y2cz?= =?utf-8?B?empRY2lwMW4wU2U5QW5Eb0lIRGdxb3Y4aWZJVG0zWDZZNW9VWFFicjdaK0N1?= =?utf-8?B?VjhsdE9iV3EyazVyUVI1c2JHc3FVZDB0ZzhsSW51UlRERm8rQWlycWFQQVBQ?= =?utf-8?B?ZzdHMUMvQXk5YTFqY1VUS3NuVUhXbnVqUjQ1OE5YbFhaZjUvdm5KYzJHWDFU?= =?utf-8?B?dEdZQWxnWWI0QzRiN2c0cWVZVkZlNnIwOXNWM3ZHd1lodUc3RUkyNjQ4TWhz?= =?utf-8?B?T091ak9kS3QwdFRDVDBsTS9wRkF5MXE0U2drdjU5alpaSVJrM2hDeElENTdz?= =?utf-8?B?bFhCZXJjdTNrUE9yRzJTSmtyZmY1RG5nb0FmWFM0ek4zd25raWUzTEpyTUtK?= =?utf-8?B?WmNYQkZxRnNscC9kN213TjF0YVE5MmROYndVTUNUUkJVOVkwRFBtR21WNGl5?= =?utf-8?B?cFczSGpVOGczcW53RzZCcUhTTS94aWVydUYvRi9FcC9GMW9YTzgyNzZrQWE4?= =?utf-8?B?cGtXYkdxTExTY05iaGRrRUlxcDR2b2t4eUFWNS9hWG1ieXlCSXVqUGdaRm40?= =?utf-8?B?R0xRdE9PNWhEM2Ira1Jsa3BmS3preWxobElrT2dyTGI3blBsOExjdlFyYkhS?= =?utf-8?Q?OafvFTj4CUsG99P21DdtS+GZbGiB9CX/aqBVp/MzUVEwr?= X-MS-Exchange-AntiSpam-MessageData-1: 7ehwTTTTWcFiBQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5acf872f-c3b9-46a8-0a60-08def6e764a1 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Aug 2026 13:58:02.1496 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: GA0nn4T+kXanpi0ybFlyLNK55yjqCIc3GIQgSN5T0kxq3RVxBAVr/J0Ci6wVhzXxZ4ETZVfFw2VVmjlKQfEDow== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB8208 From: Joel Fernandes PRAMIN apertures are a crucial mechanism for direct CPU read/write to VRAM. Add the BAR0 window registers that position the PRAMIN aperture on all supported GPU architectures: Turing, Ampere, Ada (via `NV_PBUS_BAR0_WINDOW`), Hopper (via `gh100::NV_XAL_EP_BAR0_WINDOW`), and Blackwell (via `gb100::NV_XAL_EP_BAR0_WINDOW`). Hopper/Blackwell window-base registers are based on Eliot Courtney's offlist reference patch. Signed-off-by: Joel Fernandes [ecourtney: split the registers out of the PRAMIN patch into mm/regs.rs] [ecourtney: drop the register read path] [ecourtney: reword the message for the split, narrow visibility to mm] [ecourtney: plain base fields, as the bitfield cast+shift patch is dropped] [ecourtney: rename the target to VidMem, fix derives, redo the target docs] [ecourtney: annotate the register base types] Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/mm.rs | 2 ++ drivers/gpu/nova-core/mm/regs.rs | 70 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 72 insertions(+) diff --git a/drivers/gpu/nova-core/mm.rs b/drivers/gpu/nova-core/mm.rs index f9d80ffbe01d..7d24ad790310 100644 --- a/drivers/gpu/nova-core/mm.rs +++ b/drivers/gpu/nova-core/mm.rs @@ -19,6 +19,8 @@ }, }; =20 +mod regs; + /// Physical VRAM address in GPU video memory. #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] #[repr(transparent)] diff --git a/drivers/gpu/nova-core/mm/regs.rs b/drivers/gpu/nova-core/mm/re= gs.rs new file mode 100644 index 000000000000..82de6dfa4e8b --- /dev/null +++ b/drivers/gpu/nova-core/mm/regs.rs @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: GPL-2.0 +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIA= TES. All rights reserved. + +//! Registers used by the memory management subsystems: the BAR0 PRAMIN wi= ndow. + +use kernel::io::register; + +use crate::{ + bounded_enum, + driver::NovaRegisters, // +}; + +// PRAMIN window + +bounded_enum! { + /// Target memory type for the BAR0 window register. + /// + /// Only VRAM is needed by the driver. Pre-Hopper window registers als= o define + /// system-memory targets that are unused here; Hopper+ uses a separat= e register + /// without a target field. + #[derive(Debug, Copy, Clone)] + pub(super) enum Bar0WindowTarget with TryFrom> { + /// Video memory (GPU framebuffer memory). + VidMem =3D 0, + } +} + +register! { + base: NovaRegisters; + + /// BAR0 window control for PRAMIN access. + pub(super) NV_PBUS_BAR0_WINDOW(u32) @ 0x00001700 { + /// Target memory aperture for the window. + 25:24 target ?=3D> Bar0WindowTarget; + /// PRAMIN window base bits 39:16. + 23:0 base; + } +} + +pub(super) mod gh100 { + use kernel::io::register; + + use crate::driver::NovaRegisters; + + register! { + base: NovaRegisters; + + /// Hopper register for PRAMIN window. + pub(crate) NV_XAL_EP_BAR0_WINDOW(u32) @ 0x0010fd40 { + /// PRAMIN window base bits 37:16. + 21:0 base; + } + } +} + +pub(super) mod gb100 { + use kernel::io::register; + + use crate::driver::NovaRegisters; + + register! { + base: NovaRegisters; + + /// Blackwell GB10x/GB20x register for PRAMIN window. + pub(crate) NV_XAL_EP_BAR0_WINDOW(u32) @ 0x0010fd40 { + /// PRAMIN window base bits 38:16. + 22:0 base; + } + } +} --=20 2.55.0 From nobody Tue Sep 29 08:22:31 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012052.outbound.protection.outlook.com [52.101.53.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9A2093ED3B2; Mon, 10 Aug 2026 13:58:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370296; cv=fail; b=XEl89XQMO9pogUqr6ME0UgYXsleDxAmH3mdQEk/0iCT8ZVR7NyM7xmMp7kS+e5T1kaDbA7Gh8CpROJn4Do2Aa+9rYWBImKKecDjpTbWgEMjmS14j/+6e7hbDsu0B9LEjmjvX/QnUSmxRhWsAE3g+uB5ckicJIeMkMf5VJb+ukOo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370296; c=relaxed/simple; bh=O+5BKyShuOHGZSxb+RhHTzppO/9MNpVfMsD6dneaNuw=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=BHHoplkVnprlvUaBIB97M20yIC6roh1lC0W1/uXKcqxGEpW2HRPj6Og86IYLlsNnlkXUprEc+TTV6Ugpiq1f82IofO1XXsecQ+j32HkXIpeDqy0foSk6H44yzvSb0KwJGmjCUx/oM80XIRq+VIIK3+JdGuEX5CyrgvbA40OEV3c= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=DteansIj; arc=fail smtp.client-ip=52.101.53.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="DteansIj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ka8F+mj0Ai43U6Fk2QGQGo5Dko566jtQNx0lrk1KDlZpaEwPe05EeOPUJnVumlfhYzySYUTcxIGGYqel2EdtyIaXWf8HWlBWaAetlJGRLrF/V9M9mx/1TXPBs2uChB4YfT4/bWpoVKeqGiMsSMg1Tji8xkTxzpv6ns/Hi53BhblN8VpflTMFrAzw0B2dDTnG9KTdEukpNYaxMwHeWh6tqdO0HkXOLZ/7UcZYVAOfhc3OIbxF9gOztOdX3dhq7mq/NPkJf7Cb4KfNBF+z+8NUXn7plSIguQHT/fxLYNfzrbJsYCkbnHovNDgbnreRksPcuImVskqdWqGhWUBU59V/uw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=GqfgYyU/GpaAmC3423pZOAtihrlCVfpnwE+RCGpNNVA=; b=KGFbL7m4/8Pxwgydv98L4Gh+oGI+J7qyOZhFMEauxkTTbKXJXAsICDa2aKVfaHKlv28SDeIiJTUwv1eiEDKA4N8bKzAGxwpERW7ZxeiiAYxxqs6awledTgLXy+nZxAMX43MtdGQMIZEUZMWqlv48Vh2Ne7AW77JlzE7zD6eTP8SODy69zJ71nN64aUFRNkqXHh3YeLQQPTAkL7zRGHWtWHlvDU0FjhDGzlX+NG7jhOMfxXefdjd1+y1qcGwyA1O7RhuAmQNSHNR0Qwdu9leuezf3pBnv6oJthMfHPhxrdMu0WqcR2W3efzHZ/qvyt3hgi12sWWkmGKHwSsMQAMC/2Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GqfgYyU/GpaAmC3423pZOAtihrlCVfpnwE+RCGpNNVA=; b=DteansIj/IV3cPelVNdbz50mC2n0pFIAdFE6oYLrPjVbHMsmMqu1Cc80seLCi0fpwwwmBy6+D+Pa2htWIQEQFCGJuIA1ZZhiRt2aBWMiXJuRVw+Men7Kr+Y5HjzKNYRPU8DbRklkr8bJhwNCWV3KvY8+UWU8Jm557OdC0hQaYe+CmEBbJhiYuCyYkMlt2gJJs28Rh7UBR8IrbW4pVT3HpH+NsX7sriNkK0HLBXfI6d/88PTv0VLwHrxhGuHO2wgxacLURrz/Rmuxu4pn7KmDpTdtRcE4tRGWmOAxzWqXacVP1Gxf4jjfhSPobdj+GmTVMATRtET2xUR2wbPsSdJusA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by IA0PR12MB8208.namprd12.prod.outlook.com (2603:10b6:208:409::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.25; Mon, 10 Aug 2026 13:58:06 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0292.024; Mon, 10 Aug 2026 13:58:06 +0000 From: Eliot Courtney Date: Mon, 10 Aug 2026 22:55:29 +0900 Subject: [PATCH v2 07/12] gpu: nova-core: mm: Add the memory management HAL Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-pramin-split-v2-7-65a00b3c7309@nvidia.com> References: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> In-Reply-To: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> To: Alexandre Courbot , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jonathan Corbet , Shuah Khan Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCP286CA0194.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:382::8) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|IA0PR12MB8208:EE_ X-MS-Office365-Filtering-Correlation-Id: d22eb374-18a5-4501-450f-08def6e7670d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|366016|23010399003|10070799003|22082099003|18002099003|11063799006|56012099006|10067099003|921020; X-Microsoft-Antispam-Message-Info: ThsyqD/BJ5iDSjlwNAJEpBrQMe1YQoE8VLx9SvYMAY2E4kPsuN2zgx0jYSefsAUuls7xRwc3OLPzuuXwGMT6l4o8uALOBfhc1q1gbSE85dLXUJ8cHBkUK8UxOIz9ClPvjmygOry9uKyGGcXgCOO8/amICjqC8gIu2+30WesqbP86RHhDkGg6UJypg6Nd/GWmtRhDilZhdDYqdRegcMSWiFGZRFv4C1X/ke4KFM4MhKoUSA+c60HTareIqc/OXcS5fv5PCvXAKfC8umcvbihsGYdyw3BjBHYD1p7jMv7KmUCh9/AdzNrV0Bzi10sLnIdF9eolj1fp0XL3g24qiEF6/ZeYKIxI2dAdsgguf0XMiYI2XcmlbJBpV0tgFERQBRFcPK3zU4Zbn1LdUVydWq1Ne+TxRWUlgrv4+KHiu1KwDY0IUTJQ4GLTiNtZRbfIPeTcy3JdLd+DI/GpJ7F5zRpUz5y2w0BBlxv85e5chl4ns4DjZ25Wf1sXJXeODLTQjGILa0DyO36k7I+C3OWhkdTS4LUYvQLyTLOfC3QCUtasHt5l4sMULSARuXuvQKKPzYZHaB9h+gfHhTWeQYnH6KrB9tFzFxue7QUruAMj1PAvzQ0rEmfyRsAHRQ8xRkJi1ZI0fGttC4H4Gff/N4gMD9RDEO0IhD0eRp+yTlMBAL6Lat7S3qEOR8P0YqntrzgheiMX/pjoD7Sxe129d/8k5nD7MQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(10070799003)(22082099003)(18002099003)(11063799006)(56012099006)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?T2VtRWFEQU9YdWdpVWxlcC8wTStxclRXMGFwcUZVSFVqU05mRnVkRlZwMmdn?= =?utf-8?B?NXhScTE1QlljK2hXaWd0U2l4cWJ3emVoUitETTNMT1ZxcW9lQm9mdnk4S1ds?= =?utf-8?B?Snc5anlkQ3A4ZGlRSGNMdnNBTUFkY1BZbllHV0diczlERnpOWVNPWGp0bHk2?= =?utf-8?B?QXduZ3NKMXVITmRUWmxwanhjRjdMNDFpL1poTTArUmtqeUhjV3BFK1VRYXA0?= =?utf-8?B?OWtoY0M2ZFZWaGtYZ0w3VHNFNGI4WHY1cVFwTk5hRzJwNm9lSW5MTTVVSGl1?= =?utf-8?B?UUlQcklBQldKQ2xscUkwbmhLMGUrbm9Cd3dPdFBaSkkxRU54dFdTeVc3bnN1?= =?utf-8?B?TGVpTFJPcXJ2VEUrTWV1aERYekxNSTZjR0pBWFVjT3lnS3cvZEJjdkpGQzhG?= =?utf-8?B?MEM2TnV1MytwYVBKM2hKT1ZpSDZQOW1Db0M5U0YydUZGYVNyS0pkSHNLMlRu?= =?utf-8?B?MXJyMFVwUzZXbTJYOVY2aHptcFhsdytYQ0pzTXJ1RnIxejRvRElNbHJ6MFhs?= =?utf-8?B?b0VyeFl1djZySS8rTnE5a1FUaTJpeU9GeGhONTNuZjVMRE1adVN3V1cyRnd0?= =?utf-8?B?U0R0RWRPcldORWRPelhGelhhcGw5OEkxbnBKWWkwb3hEODZoOGttSjMyV0V2?= =?utf-8?B?amtWd05JU2xhUGk3MzErRDdqNTdUVVQ2b1BrSGNoc3laZnYrMU1aYlNGd1BR?= =?utf-8?B?ZWgwdGx5Q05yUHE1VDExampRYVRKREJkQWplTS9ZMmZiRFIyUWpSdGlBQjNk?= =?utf-8?B?NEN4V0tMMGdCOTlkQ2xDd1dBNjJudVRIcElYYTg5Ym5RS3Bpa3JRV0xGcTdC?= =?utf-8?B?S1p4b3h2NkM2bHNpclU1UnpVWjRLSHllL3RuRk9oNUo0NEMyVTFjbkhjZFNG?= =?utf-8?B?OVlwOFNieHFRMjUwcjc4VXVZdWNPN0YwSlJ3eXI2bVJjVVdIWHRIa0hvNFhR?= =?utf-8?B?QVFwejhxYTZsQXk2SXhuNjMvVjI5cS84aHV5WERJTVFWUExsSEtIZ2VpdVls?= =?utf-8?B?UXFKUFVIRkpTUzk2QUhRaWtQOEVrSDN4YUlsU3FKL0JWbWlCWTdjNFdsME9F?= =?utf-8?B?cU9XUHN3bUVKWHlkMHRrVzB6RzkrbXFEdFZGNGd1a2d4Z3NXSDdoWm5WWG5F?= =?utf-8?B?ajZZclZnNnE0Qi9aeW8wL0lRZDFZMEJ6dXluaWt0ejBUWmZDd1ZDVWlQd1dR?= =?utf-8?B?WUlZNGxJallwb0ZIZ0hEYWdMa0IwV1dZR0pqVkFIeW55THRZUUVXc3Y0dGJR?= =?utf-8?B?U29YQloxNHVXd05RTDdvTmRZRVRZK2V6YkdKbGdoaStMdWh0T1V5dGJiaHFk?= =?utf-8?B?MjFpWVBVaDZVeXZEZzBYUlErM3BBTFpoMHphRWJhNFFocjdMd3lDVmpuWlZQ?= =?utf-8?B?TndWSmVQZTRpWXc2YXhqbk4vR2h0dXdFMHZFQ0pkeGdrTXdWdW8wV0tiMkZj?= =?utf-8?B?U2hLdTdlZ1R5b3Qxa3JhOWFKem1Sd3NqSDVmNllZaUllNHBTMkJkYWlod0RG?= =?utf-8?B?dUh4cmhaQTd2L3JFYmthbUcwWUdjQWYvTEJXNklLMWduTmdFdlQ2ZUppVDlC?= =?utf-8?B?ekNtd01SOEp4L083WmJEMzM4aUpHR3VJOWsxNXovdmIzTHpsRmZUbzlWblEr?= =?utf-8?B?aXgrUmxETVFUMFRuRzB6T0xYamxJZ003QkdqdnhxN05DZ3lPT0h1K21zOHo2?= =?utf-8?B?UzBwYnRPK09pdnhkSU1ZbWdER2RLWTZNbm1zUGNUWmFzQ09pMkRhNlBEZGVP?= =?utf-8?B?M2JhUEN1Z1VZYmhyQTgvNUczaE1MSFc3TXVVdkRZaVR5Z2hQRDZnU2FnNkZ1?= =?utf-8?B?RVI5VzhNRzJ1V0J3VXlQQ0s4VStyT1BjSVBrcE9Qc3Z3MUkxa3lhWGlEUnBW?= =?utf-8?B?aVhKMlRTZ1c4M2g4NERDa3c1Qmhpb0NRVkpXeDl2bzNCU1EwZGpXcnhEWHpT?= =?utf-8?B?enBvTUxRdWNySEEvMUY1SFVnUkMwZFlHdjB2SUR1clBWRmNrbVUvVzNQODU0?= =?utf-8?B?Vkc1R2FNSTRSZFE0dTl1ak9XNnRYcHpuNklLcERGN0MzVHYwMFBPRmZvM2w2?= =?utf-8?B?RGlTd0Y2OTIzODBkRHhISVcyUkxQVy9BVjRvVTFmZTB5Mkc1SnNzcDBydGx3?= =?utf-8?B?Yk9sYVFTWlJhSWF3WWxhS1cxM2RYSzFUVUVKNUNYOTl2YjZvcUVrZlRxSGhj?= =?utf-8?B?QU1lL2lSZk94MkYyZ0VKWkJ1UFJBa2NiNXNtdkFHTW1zdjY5Y09iZUJJTktB?= =?utf-8?B?ZUgrbXBMalBtZENtQStXM3grVXUvT0k1TUJ1WXE0cnlnV2plTVFmMS82bWwy?= =?utf-8?B?SVd5MG9HSnJKNnAzRkMzMkdMaXU2VC9oMlFlUUg5NXJCZnlORnQwcDVweHVp?= =?utf-8?Q?mDAW738NyOppipbFEZ6jwQmF+EJ8Vn8kSOl9cCI4O/r+Z?= X-MS-Exchange-AntiSpam-MessageData-1: EQkJeerFBPC7uA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d22eb374-18a5-4501-450f-08def6e7670d X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Aug 2026 13:58:06.3983 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /q7Kg/Htgu543OHadhKT41jfuejcEJnF7vaxmggDf8e4P72xGjY8QFZPkF+ugbwcvXB1NJVHzOfS48YP8vPCPw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB8208 Positioning the PRAMIN window requires writing an architecture-specific register: `NV_PBUS_BAR0_WINDOW` on Turing, Ampere and Ada, and `NV_XAL_EP_BAR0_WINDOW` with a different field width on Hopper and on Blackwell. A `MmHal` trait with one implementation per hardware family hides the register choice from the rest of the mm code, matching the layout of the driver's other HALs. Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/mm.rs | 1 + drivers/gpu/nova-core/mm/hal.rs | 56 +++++++++++++++++++++++++++++++= ++++ drivers/gpu/nova-core/mm/hal/gb100.rs | 35 ++++++++++++++++++++++ drivers/gpu/nova-core/mm/hal/gh100.rs | 35 ++++++++++++++++++++++ drivers/gpu/nova-core/mm/hal/tu102.rs | 37 +++++++++++++++++++++++ 5 files changed, 164 insertions(+) diff --git a/drivers/gpu/nova-core/mm.rs b/drivers/gpu/nova-core/mm.rs index 7d24ad790310..07dce4ce2473 100644 --- a/drivers/gpu/nova-core/mm.rs +++ b/drivers/gpu/nova-core/mm.rs @@ -19,6 +19,7 @@ }, }; =20 +mod hal; mod regs; =20 /// Physical VRAM address in GPU video memory. diff --git a/drivers/gpu/nova-core/mm/hal.rs b/drivers/gpu/nova-core/mm/hal= .rs new file mode 100644 index 000000000000..e7fd1e38bd38 --- /dev/null +++ b/drivers/gpu/nova-core/mm/hal.rs @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: GPL-2.0 +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIA= TES. All rights reserved. + +//! Memory management HAL. + +use kernel::{ + num::Bounded, + prelude::*, // +}; + +use crate::{ + driver::Bar0, + gpu::{ + Architecture, + Chipset, // + }, + mm::VramAddress, // +}; + +mod gb100; +mod gh100; +mod tu102; + +/// Trait implemented by per-architecture MM HALs. +/// +/// `Sync` is required so that the `&'static dyn MmHal` references can be = stored in `Send` +/// structures. +pub(super) trait MmHal: Sync { + /// Positions the PRAMIN window at `base`. + /// + /// This fails if `base` is not aligned to the 64 KiB window alignment= or is too large for + /// the receiving register. + fn write_pramin_window_base(&self, bar: Bar0<'_>, base: VramAddress) -= > Result; +} + +/// Returns the HAL corresponding to `chipset`. +pub(super) fn mm_hal(chipset: Chipset) -> &'static dyn MmHal { + match chipset.arch() { + Architecture::Turing | Architecture::Ampere | Architecture::Ada = =3D> tu102::TU102_HAL, + Architecture::Hopper =3D> gh100::GH100_HAL, + Architecture::BlackwellGB10x | Architecture::BlackwellGB20x =3D> g= b100::GB100_HAL, + } +} + +/// Converts `base` into the value of the window-base register field. +/// +/// Fails with [`EINVAL`] if `base` is not aligned to the window alignment= required by the register +/// field's shift, or if the shifted value does not fit within `RES` bits. +fn window_base(base: VramAddress) -> Result> { + const WINDOW_BASE_SHIFT: u32 =3D 16; + + Bounded::::from(base.into_raw()) + .shr_exact::() + .and_then(Bounded::try_shrink) + .ok_or(EINVAL) +} diff --git a/drivers/gpu/nova-core/mm/hal/gb100.rs b/drivers/gpu/nova-core/= mm/hal/gb100.rs new file mode 100644 index 000000000000..3781e143dea7 --- /dev/null +++ b/drivers/gpu/nova-core/mm/hal/gb100.rs @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-2.0 +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIA= TES. All rights reserved. + +//! Blackwell GB10x/GB20x memory management HAL. + +use kernel::{ + io::Io, + prelude::*, // +}; + +use crate::{ + driver::Bar0, + mm::{ + hal::{ + window_base, + MmHal, // + }, + regs, + VramAddress, // + }, +}; + +struct Gb100; + +impl MmHal for Gb100 { + fn write_pramin_window_base(&self, bar: Bar0<'_>, base: VramAddress) -= > Result { + bar.write_reg( + regs::gb100::NV_XAL_EP_BAR0_WINDOW::zeroed().with_base(window_= base(base)?.cast()), + ); + Ok(()) + } +} + +const GB100: Gb100 =3D Gb100; +pub(super) const GB100_HAL: &dyn MmHal =3D &GB100; diff --git a/drivers/gpu/nova-core/mm/hal/gh100.rs b/drivers/gpu/nova-core/= mm/hal/gh100.rs new file mode 100644 index 000000000000..8af384db2921 --- /dev/null +++ b/drivers/gpu/nova-core/mm/hal/gh100.rs @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-2.0 +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIA= TES. All rights reserved. + +//! Hopper memory management HAL. + +use kernel::{ + io::Io, + prelude::*, // +}; + +use crate::{ + driver::Bar0, + mm::{ + hal::{ + window_base, + MmHal, // + }, + regs, + VramAddress, // + }, +}; + +struct Gh100; + +impl MmHal for Gh100 { + fn write_pramin_window_base(&self, bar: Bar0<'_>, base: VramAddress) -= > Result { + bar.write_reg( + regs::gh100::NV_XAL_EP_BAR0_WINDOW::zeroed().with_base(window_= base(base)?.cast()), + ); + Ok(()) + } +} + +const GH100: Gh100 =3D Gh100; +pub(super) const GH100_HAL: &dyn MmHal =3D &GH100; diff --git a/drivers/gpu/nova-core/mm/hal/tu102.rs b/drivers/gpu/nova-core/= mm/hal/tu102.rs new file mode 100644 index 000000000000..e4fe7561223c --- /dev/null +++ b/drivers/gpu/nova-core/mm/hal/tu102.rs @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-2.0 +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIA= TES. All rights reserved. + +//! Turing, Ampere and Ada memory management HAL. + +use kernel::{ + io::Io, + prelude::*, // +}; + +use crate::{ + driver::Bar0, + mm::{ + hal::{ + window_base, + MmHal, // + }, + regs, + VramAddress, // + }, +}; + +struct Tu102; + +impl MmHal for Tu102 { + fn write_pramin_window_base(&self, bar: Bar0<'_>, base: VramAddress) -= > Result { + bar.write_reg( + regs::NV_PBUS_BAR0_WINDOW::zeroed() + .with_target(regs::Bar0WindowTarget::VidMem) + .with_base(window_base(base)?.cast()), + ); + Ok(()) + } +} + +const TU102: Tu102 =3D Tu102; +pub(super) const TU102_HAL: &dyn MmHal =3D &TU102; --=20 2.55.0 From nobody Tue Sep 29 08:22:31 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012052.outbound.protection.outlook.com [52.101.53.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 87D233E8695; Mon, 10 Aug 2026 13:58:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370299; cv=fail; b=gBS5oC3BRtHhuojkF5cHPFbzZCxd/7ZHzRa1HMXnXlBHP2SR5sDZwwq53Kz9s7la0GAsIrh4gj1y/jtZ+sXqLXrLJRWldoDfddPn0kqPSn3I9vxiojFRt6PUXlu4VtoyAM33MAQW7yhgZiFl5gEwMf6RAN4pV8QUc/ucTQN/TSg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370299; c=relaxed/simple; bh=ZcakkqAf+dxyphqHPPJb0r/MGC9TS4nk0J6L+LGWPz4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=DBtAITZgS6RXfhIJiGe2kkGh2geftlMYBzMq6HIpTb8TY1a1UQ8nwgsLGhAeF3xQUjW7DwJJcBG1XhFzN/g+A5vl1PLCa4u18IvvO1GoTBYPGDqG+yhRzJSaPNVSMl5d18yj0Cll7F3Mzo2h73DW+U2dm9F9aqXh+BPs5hACQDk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=I3mMVzP4; arc=fail smtp.client-ip=52.101.53.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="I3mMVzP4" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=L4qz6wAY/iVXNnykEHfTYQ/jtnuSgNeyD94gkTcfuNENGY8QGl4JFI5PcnhP5RmgAU5QCSetlZihqvW/VoyMVKTvVgKsCpSXnjXXMk0MKH4Mat8P/suT9rSettO/qFo8fxc+oC1oKWMOenhg+Uii5OqnhzsfKfLArWQlj1oX472J1iGxLwR/fnNCME8LJeI53zbont4K8ZnPchwiARhgslzCyHQk5Y9FTsoSZAQGEMYInT6SSWSGXK7pK+4LDKdUAwwiFMqDgv/dWuaKRKbCEsynhRSluLKYG3inrJl9p9jJpZJ065qS2A9JEKAyYrTvzoWCejVIdDHs6afu9KE8Kg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=aXZzEB1H83FqJAgguKXFF78FGyNwpUhRjgkG9hjDGx8=; b=i4WcQEyael+HqTLUvulF5Cwu+8WjMcLvsUUZx3mjHeg9dpcxGB49e/euPp1sdQfWhMGRyFe5c7ckCwTZ/N2xNcyGAiDKvwPvEGNOAXiJ0Ysc1ammvqoWv3M0miLVx6Skh/GhShOXnkVzOP1IEH9fUg9nk0DHPgurGAMJgoTYZj3XtdQV4WZvIDJTNqr2y7R7l4rhU5pRJYleEBsDX6QGurrDfZF3iRVEg4Oefw+aJ0vCxOlcADPI3B8NjJVZIT95go4CJe5QdoNatgiZNB9mBYiakLYiPT8CZtssZPwMjdtRwhraAqHF8hPFm92Jf+nyhRYAU+0BLvHhT/Gx4WyhIg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aXZzEB1H83FqJAgguKXFF78FGyNwpUhRjgkG9hjDGx8=; b=I3mMVzP4a6pDd867+wLUClSL0wemORB4jTvhW8sY3c5RJf9kmuob0AVFf6yKNGwWypVgnqEVY1Cx7TJ55K54mtkG4aJd1fY7RDedHw35hgFc1+2RF4piHzjawvtSEKwK28KnhTfWp8eqID37p6ovlVOZ2TSS9OzT0cFS7swxP65xUAxPD0arGK8JgE5IS+ScwcwbEhRCXNEUOH2twrYZz8jaeEVVqWkO8be2llHc226ebWW7KpV4UvCiRlEwRC43zLH7mmCzOy6VPADzxRw8AwrZhf8P7/z36VbGbxPoXpBICQN7ye/OgziGM3d2wTNwfe71T++Y9O5w1B/qJZ7vzw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by IA0PR12MB8208.namprd12.prod.outlook.com (2603:10b6:208:409::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.25; Mon, 10 Aug 2026 13:58:10 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0292.024; Mon, 10 Aug 2026 13:58:10 +0000 From: Eliot Courtney Date: Mon, 10 Aug 2026 22:55:30 +0900 Subject: [PATCH v2 08/12] gpu: nova-core: mm: Add support to use PRAMIN windows to write to VRAM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-pramin-split-v2-8-65a00b3c7309@nvidia.com> References: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> In-Reply-To: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> To: Alexandre Courbot , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jonathan Corbet , Shuah Khan Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, Eliot Courtney , Joel Fernandes X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCP286CA0095.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:2b4::18) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|IA0PR12MB8208:EE_ X-MS-Office365-Filtering-Correlation-Id: 296b1a21-9cc8-4269-a52a-08def6e769c8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|366016|23010399003|10070799003|22082099003|18002099003|11063799006|56012099006|3023799007|6133799003|10067099003|921020; X-Microsoft-Antispam-Message-Info: yQbLQsDnjOzEikJdS9kYRsUbXX/+jm5OrY5NlVb0tLj+WArSsNbngEUhDHbina624hgs3R6CS9QcGZ5aEt5JwsU3yvt7rhqrPQG24iW/TEdR0VD8STBV1HkfMcTHmr9mW104ujefR1+3LfW1DqdgKdVyM39edt2kJJ/bNp8SihGf/MIkffcuBEREAWkMy9cHEJnE9Qgs4NYtFLiSWInJzygvg2OjsFZTBBaYgGLnm+4gAPXKii5EvpSzn/mNtLx/lu5bQwd+PNr8K6VtMGrwlMLw8YojqWiMvxZkvoAbZN5DGgeJdheqYVnYrbhKjju6dOg4g/tv77Z+/vH08DRbD1epipkM7VhPd1SDKn4JepdMS/9FrmuBhBZ4wjFhIDJigKEnftAjy3NrkFeQI1yZDMg0pViO0ZwgZTuPb9iurx+PJTbtknRtRAADRnklAVUstICk9n83a9oe3xsNDiwufjI37nIXjXk4sX8eo9wPddg+cb8VzJ1sr8qNqM517xvdWJLVKNTAj2NiwD2KSBPz6b2m5utZcuEc+/lQszIDMUEkzrRSbUps0QkliM0BjMr2DMTz34O3gEng7gHRwoCOaXv/1uvmSZMyg1iH/9eN5NtlCb6XYgsAbpnCbOUkeLlLQsxmWcK852cFfnFWpAAnfuBUDGFXa+1NAYzE6GOwh6Hps7DCjIUUNPjVkZ7UskquWcuDNqgaSU045sGHXyj/0w== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(10070799003)(22082099003)(18002099003)(11063799006)(56012099006)(3023799007)(6133799003)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?T0lwRTJBZFlzVktibkpRZk1HZXgyL21pZ3FOT0dTNnVhbnlIQTdHQmpBTVBp?= =?utf-8?B?UFBTRTkxcENURzdicHJBUm00VVozRytMbFd0dlNZSzhyTE1jbUJ2NFlTTjhM?= =?utf-8?B?NHVoamNGbVA4ZDhJM2cvYXRhVEVvMG1uZVRMZDVZUVlkdkltZmFNaDJtYkkx?= =?utf-8?B?eDBpVFUySEF2OTNQcXNzNkxILzN4U1VBdWZvNXIwQTVyVFNoOEdlYkt1ZDVW?= =?utf-8?B?ZXhJbGdFMjdkcU5Pc3RtSEFjNldURFJ1Y1NST2lYa0g2MUUrR08vWktMcEFj?= =?utf-8?B?K0phMHJCd25pR2hBcDg3WkNBSXBMWVZSYXgvSnFXYm1YdFlRZTduOFVkenEx?= =?utf-8?B?VzI0ZDdNWGJvOUxLcFZQT2l0WVdKV25YSkkyLyt6WUE5V3pNQXplZ0l3enVM?= =?utf-8?B?aksxZTZLanpFWjJOSFkxN0VoN3ZIZ3pFRXJmZ0o4LzlpOSt4bkMwZ0lTTTV5?= =?utf-8?B?Rmh2THZZbUx5TGMrSkZidk1HTVQ4dzE2cnFsdWlON0JDY0lNRnRBWElaVThU?= =?utf-8?B?NUN5U1U1cFVEcTlicDdQblhEdjczV2VKZGFFRlJZRVBqa0RWelNtbDNvMVBT?= =?utf-8?B?SWc0ZkNwdWloUnQ2RzNYQ1JMWWo1ejRXaXgzNEdzS2NTU3Q0NzJ6a0RxTW5q?= =?utf-8?B?RjVZL0VoVGJpYjBaaFAxTXphVHAwcEZTaUJrSEs4RFcyVTdza3dHQjA4N0lB?= =?utf-8?B?RXZiazZ2Q0QralZWamRyV1VXTk94RG9QVTdTNG9IeEs5aUwweGUySmxMY0ZW?= =?utf-8?B?NTVDcjArQ01sdkJaeWZlc1hSQXZ5Q3JkNU1CK2NBMk9DTm85WDJTb0Z1UmhZ?= =?utf-8?B?QUdyeHZrMERHMGlFZzJmVzhUWTdMMDlwWVR5N2dLdkdUSFM4ZXZ6cDlEU1BF?= =?utf-8?B?Vm1Mcmc1VVRjWnFOS05KQ1NyakZCblBKaVdQN0JWUDlLOTlkc1UrKytFSTh2?= =?utf-8?B?N2JSMisxSFB1NElqL1BVaU5zVkdPd0Frd01pMVM3Q0Z4dGU1STN6UUFuYjJK?= =?utf-8?B?YXFYMVZsWW51NG1HOGkvLzRZQWEyWFRzMUZUSm4rRzBZalBBeDVzK3JPTnlz?= =?utf-8?B?QmR0SExFY1ZWOFEreG9nSXkrbVpVMG53MDU1TDUySW1lQnlJN1V5Mmx3MFpv?= =?utf-8?B?STYyQkNnZG9YejNkQjFEcnJEaS9yOENtWXM4YkhKeUJMZFlLUUV1Rldzdmdi?= =?utf-8?B?N3pua3V4UW9OYnpRcUswZTU4TEh6R2d3ZGppWk9MWHNKaE1VNjNQcHBBY2s4?= =?utf-8?B?VWg3RDNMeVJVYkEzVmxhRlRMVG11UmNuSTVmc1FhWGxnNHNuZDNBYm9peWRJ?= =?utf-8?B?d1JTODN4dm8zZkFXdlpHUTQ2UU84RFJKREpmaTlSVGFQZCtLOWM3QlVnOTN0?= =?utf-8?B?c3p6Sld2b3UrZ05hQXNBNDJHWlpyazRDbTFCd0oxUjhWTHFZTFVrLzNVUE5p?= =?utf-8?B?Q3g4dkFTeXhlUnNsbmo4L1dhRXo1SEdRN0VseDZpMHhSU0dEQ1pSMHU0SUNS?= =?utf-8?B?eUhDeWk2ZUs5MnVOU0pvN0FxUW1qUjIzYW1lemtBZ0JDZjdBM0d3OERiSkpV?= =?utf-8?B?Si9MK0hvcGVOejlENEYwbUJUZzFJeDMzejhTbmlyUU02OXcwNzdJMjZUZXYr?= =?utf-8?B?SThXRk44TUlmZlMxQUVyTkpqZ0JlakxvODdQUDdmRE5UMC9XNHNiMU9GOW9j?= =?utf-8?B?M3o3UzRCRkZjWXZuSWNZdzNUWmMvTmoxcW4wYkg4V2EwQnNRK0I4ajNkTDQr?= =?utf-8?B?UlQzZXo0eWhmM0wrVW44Vjd0N05pTS84L2R2Q1FDMVU4dVBqT3RuaG9CaE16?= =?utf-8?B?c3R0V045Y2VuVlZySlh5TlZiSGpRVjNlTnptb0xoWEtWVFZxMk43Q080ak9S?= =?utf-8?B?OVVPQXlHb1hSbGR1dUpVZ014LzFWYThNdkdrMEJydlI2eis2V05Lck1pTmo3?= =?utf-8?B?RStFM3lSd1JDb0hJNTlyN3h5Q2ZvdDRUVmY4OVVSVzd0cFFURDBIdjNQdFRU?= =?utf-8?B?bWhpQTN2Y2tVK01XaTloRDdzV2Y2WFlCd3E1REp1aGM3Yy9vbjg0NDcxTFJp?= =?utf-8?B?Y2pZN2xFUDBjVjVuQUIxUUV0Y1pBdXdVY1hoRDlvSmEyV0E0eEIvUG9VZ2py?= =?utf-8?B?UFBwSzVxV3BCVmlnQ1lSTjRZSjRqNHdZN3B5dWZobmhEMzliTmQrQ1RxN2Fo?= =?utf-8?B?WW00YnMyQUloaWhZZjFQWk13UkhiMU5GL0ZQRVJCT1gycXV1U1UzKzRxd2pB?= =?utf-8?B?Z3VCUm4reDByMmRZeEp3L1Y4YTJmeWV0Yis0azIvb2NMRUVmd3YwQkg2U1pI?= =?utf-8?B?MDlLTWJpRVNKOVJIUG82SDdEUHZTbjdPc3VrUmFqVjM4cy91TVF2UGgxWFNY?= =?utf-8?Q?/Oq/hsQ7F+jIG+vTCu+qXsF42XO+av3N1biyap2MKM0lY?= X-MS-Exchange-AntiSpam-MessageData-1: wU1eB9JqVWT57g== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 296b1a21-9cc8-4269-a52a-08def6e769c8 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Aug 2026 13:58:10.8795 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: AhMATUWfjRcc3Ru/KBf8GQybLhAETu2omn6oPIHrChqv/DEcM9qSivxmHKtWDrWsbmYiWazAUQ4qK9uPUm8lLQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB8208 From: Joel Fernandes PRAMIN apertures are a crucial mechanism for direct CPU read/write to VRAM. Add a `Pramin` manager whose `window_at()` returns a typed MMIO view of VRAM through the 1 MiB PRAMIN aperture in BAR0, validating the view against the VRAM region and repositioning the window as needed for the accessed address. A view borrows `Pramin` mutably, so the window cannot move while the view is in use, and it inserts an ordering point on Drop. Signed-off-by: Joel Fernandes [ecourtney: split the registers and HAL into the two preceding patches] [ecourtney: rebase w.r.t. Bar0 lifetime changes and register projections] [ecourtney: drop the window guard and mutex, use &mut self] [ecourtney: position at init to avoid reads, reposition in window_offset] [ecourtney: return typed MMIO views instead of read/write accessors] [ecourtney: insert an ordering read when a view drops] [ecourtney: declare the window location, drop the doc examples] [ecourtney: add the copyright header, doc and naming cleanups] [ecourtney: the pramin module is mm-internal] Co-developed-by: Eliot Courtney Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/mm.rs | 1 + drivers/gpu/nova-core/mm/pramin.rs | 178 +++++++++++++++++++++++++++++++++= ++++ 2 files changed, 179 insertions(+) diff --git a/drivers/gpu/nova-core/mm.rs b/drivers/gpu/nova-core/mm.rs index 07dce4ce2473..ef5b1cad56c3 100644 --- a/drivers/gpu/nova-core/mm.rs +++ b/drivers/gpu/nova-core/mm.rs @@ -20,6 +20,7 @@ }; =20 mod hal; +mod pramin; mod regs; =20 /// Physical VRAM address in GPU video memory. diff --git a/drivers/gpu/nova-core/mm/pramin.rs b/drivers/gpu/nova-core/mm/= pramin.rs new file mode 100644 index 000000000000..20be3fc471ba --- /dev/null +++ b/drivers/gpu/nova-core/mm/pramin.rs @@ -0,0 +1,178 @@ +// SPDX-License-Identifier: GPL-2.0 +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIA= TES. All rights reserved. + +//! Utilities for accessing VRAM through the PRAMIN window. + +use core::ops::Range; + +use kernel::{ + io::{ + io_project, + register, + register::OffsetLoc, + Io, + Mmio, // + }, + prelude::*, + ptr::{ + Alignable, + Alignment, // + }, + sizes::{ + SZ_1M, + SZ_64K, // + }, +}; + +use crate::{ + driver::{ + Bar0, + NovaRegisters, // + }, + gpu::Chipset, + mm::{ + hal::{ + self, + MmHal, // + }, + VramAddress, // + }, + num::IntoSafeCast, // +}; + +/// Size of the PRAMIN window (1 MiB). +const WINDOW_SIZE: usize =3D SZ_1M; + +/// The PRAMIN window, which is a 1 MiB window into VRAM at a fixed BAR0 o= ffset. +#[derive(FromBytes, IntoBytes)] +struct PraminWindow([u8; WINDOW_SIZE]); + +register! { + base: NovaRegisters; + + /// Location of the window inside BAR0. + PRAMIN: PraminWindow @ 0x700000; +} + +/// Owner of the PRAMIN window state. +/// +/// [`Pramin::window_at()`] repositions the window as needed and returns a= typed MMIO view into +/// it, holding the manager borrowed for the lifetime of the view. +pub(super) struct Pramin<'gpu> { + bar: Bar0<'gpu>, + hal: &'static dyn MmHal, + /// MMIO view of the PRAMIN window in BAR0. + window: Mmio<'gpu, PraminWindow>, + /// VRAM range to keep the PRAMIN window inside. + vram_range: Range, + /// Cached window position. + window_range: Range, +} + +/// Typed view of VRAM through the PRAMIN window. +/// +/// Inserts an ordering point after previous writes through the window on = drop. Views returned +/// by [`PraminAccess::view()`] cannot outlive this access, so the orderin= g point covers every +/// write made through them. +pub(super) struct PraminAccess<'a, T> +where + T: FromBytes + IntoBytes, +{ + view: Mmio<'a, T>, +} + +impl PraminAccess<'_, T> +where + T: FromBytes + IntoBytes, +{ + /// Returns the MMIO view of the accessed location. + pub(super) fn view(&self) -> Mmio<'_, T> { + self.view + } +} + +impl Drop for PraminAccess<'_, T> +where + T: FromBytes + IntoBytes, +{ + fn drop(&mut self) { + // Insert an ordering point after previous writes through this win= dow. + self.view.cast::().read_val(); + } +} + +impl<'gpu> Pramin<'gpu> { + /// Alignment required by the PRAMIN window. + const BASE_ALIGN: Alignment =3D Alignment::new::(); + + /// Creates the window manager for the given VRAM region. + pub(super) fn new( + bar: Bar0<'gpu>, + chipset: Chipset, + vram_range: Range, + ) -> Result { + let hal =3D hal::mm_hal(chipset); + let window =3D io_project!(bar, build: PRAMIN); + let base =3D vram_range.start.align_down(Self::BASE_ALIGN); + let window_range =3D Self::window_range(base)?; + hal.write_pramin_window_base(bar, base)?; + + Ok(Self { + bar, + hal, + window, + vram_range, + window_range, + }) + } + + /// Returns the VRAM range a window based at `base` exposes. + fn window_range(base: VramAddress) -> Result> { + let end =3D base + .checked_add(WINDOW_SIZE.into_safe_cast()) + .ok_or(EINVAL)?; + Ok(base..end) + } + + /// Check the window covers `len` bytes at `addr`, moving it if needed. + /// + /// Returns the window offset at which to perform the access. + fn window_offset(&mut self, addr: VramAddress, len: usize) -> Result { + let end =3D addr.checked_add(len.into_safe_cast()).ok_or(EINVAL)?; + + let inside =3D |r: &Range| r.contains(&addr) && end <= =3D r.end; + if !inside(&self.vram_range) { + return Err(EINVAL); + } + + // Reposition the window if the access falls outside it. + if !inside(&self.window_range) { + let base =3D addr.align_down(Self::BASE_ALIGN); + let window_range =3D Self::window_range(base)?; + if !inside(&window_range) { + return Err(EINVAL); + } + self.hal.write_pramin_window_base(self.bar, base)?; + self.window_range =3D window_range; + } + + Ok((addr - self.window_range.start).into_safe_cast()) + } + + /// Return a typed MMIO view of a `T` at `vram_addr`. + /// + /// Returns an error if `vram_addr` is not aligned to `T`'s alignment,= or if + /// a `T` at `vram_addr` does not fit within the VRAM region. + pub(super) fn window_at<'a, T>( + &'a mut self, + vram_addr: VramAddress, + ) -> Result> + where + T: FromBytes + IntoBytes, + { + let offset =3D self.window_offset(vram_addr, size_of::())?; + let view =3D io_project!(self.window, try: OffsetLoc::new(offset)); + + Ok(PraminAccess { view }) + } +} --=20 2.55.0 From nobody Tue Sep 29 08:22:31 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011001.outbound.protection.outlook.com [52.101.62.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C94763E3C73; Mon, 10 Aug 2026 13:58:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.1 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370306; cv=fail; b=FccLdz0b62qlZkc8jcwUDCb9LrQ+tES4bTBpM0ytPNLSwzoanwz4QjpNkRolXrZYPCCu2/ufH7PcUa3LfQIDxgGHdThK9KKA/DA0qKQZWEqfYYmh2UCYZK2o1lo0NG/Bs2N6QFzDkrNwPT22Be/a7AG3ylgKIP/ckwV4A6enNB4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370306; c=relaxed/simple; bh=qDe+bBnryJ8LX/jtt9JP6PFqolHDEim10Py/YwvznVU=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=HSV5q54pkSpH10ROSYe2xTdfxfNK4oCbGU6zge4OT20INThVcYyNJiOXMoaq/ngTT/srQa82WW2jnXYuQRjvGX7VbpldR8op6+Gl9QcPdnSnw7lGfQpFUVGgUh2dS8fiszdJwn9AK+KSa0dzJGfBi570cNf5oA7EV12jBSmtq84= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=TYNGvh6r; arc=fail smtp.client-ip=52.101.62.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="TYNGvh6r" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Z7xu0nBljICknhsk0XLKFwWSbUgMNRO0Vzfqg9NNXX4T3Pv0CJ5V3aE24bgIIElehv8249pLhDCpR9QPyg4K48XH+fJYzXACpmxZx8KXcXI4YgCdgTBl8Hyta9F4EFT3D/avOXl2gHmk0Ek7EXUhQOHTwG1Vx1dCng1W4Q5FsEx+Bsqs8gkgzNb2NXzo49gtRKeVl8ZZ7T65NSRqUcCscPnFkjuM5nYG1C17TIOVuszKlSehyLJJllt2eU69lJj3qoAfJLEN5SCnfYoZ5GIO6YJC2ssrn08Hu2UjcqU4BqcFkVMorLEqlEkYpeHEa/VPklftl2RkTjiylB4t5iChpQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=QrhQCq9TfB6+BQJFSUUUFXtQ5C7LOiyKKboARNboz4I=; b=xObvC7xaCWzj9TLc9wrkj+TMYyIPFqiuYmgr3wr4SyGL1V0OY+kUkCqYY+D1pMn0JENgL8fshYcuLiu+5eM78oz3OOa2tOqPyxX1gX8VmhJ/QQPY7ehgDkc27NJr5tdPqINndxE3W1/z5zwl4Y4Nkd2wBGLLgoyUn4eWgyhd5HZVc3rHBbTIMW7fVpsAqGMYKbBK2qEeb4Rk3mv1S7AE7R2Ih/5u2H3anLRXw69sa+Rzo5we9wQDHZwQZJxrQwMN4CXTFtfjjowXhPEMLXkeBlLGayg6Bkv1j4OFwE3zw+E5dXqZoZ61Mlb1LMZUD/8XsJVefbaD/gzUowdtrMVMGg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QrhQCq9TfB6+BQJFSUUUFXtQ5C7LOiyKKboARNboz4I=; b=TYNGvh6r9SQRYPrtpnB+pSKkTQvWexWm+sMiQQNH5knnK7/pGTP/GjOXSFyivUiLr+IJ4OHB0M1T/9iU/XD6BfbMLAL37AZ6XNK2DrnMumB3T/xcNENdsjLOZztvEQh0AJHyfuSYD/UtYXTunCnxcpDPOKpBiukuK6f8Q9lkxc8q6MDhqIP2TkxURDUoup9Uz9kcXHvKKJ1pEJM2qExEZu+FLh7V6FbbwMKBr0aendrkkJ/bYBmKQToneuZb1Jj9j5DCOPvg/JRgBHokEq1Sfy0E/v2KPleyhLkgrWEpdy6Aez+HW+/UwkySYNQu7J/AkEV+/eiBV8cu7rNKo9SD8Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by IA0PR12MB8208.namprd12.prod.outlook.com (2603:10b6:208:409::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.25; Mon, 10 Aug 2026 13:58:15 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0292.024; Mon, 10 Aug 2026 13:58:15 +0000 From: Eliot Courtney Date: Mon, 10 Aug 2026 22:55:31 +0900 Subject: [PATCH v2 09/12] docs: gpu: nova-core: Document the PRAMIN aperture mechanism Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-pramin-split-v2-9-65a00b3c7309@nvidia.com> References: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> In-Reply-To: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> To: Alexandre Courbot , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jonathan Corbet , Shuah Khan Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, Eliot Courtney , Joel Fernandes X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY4PR01CA0051.jpnprd01.prod.outlook.com (2603:1096:405:372::19) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|IA0PR12MB8208:EE_ X-MS-Office365-Filtering-Correlation-Id: 9ce2e68b-9110-4053-a2ae-08def6e76c7d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|366016|23010399003|10070799003|22082099003|18002099003|11063799006|56012099006|6133799003|10067099003|921020; X-Microsoft-Antispam-Message-Info: LDWkmRxoBB3ZIhe6Hv69I6E2jFGe2FAintHcMI0DfVHUUCfAKvzezjNEkZrGCHuQeJSJjHpbXMuVifKFXV6tz5tES7Vt2lYWv8MSmylmtSw9uFi9IR1A8c+u2LKhZhrJ1wf8oKqFyAUTaN4bxUhWH+ppsIpVCcI6Y/4yZLDEVZcldxluMVyXB+osdzr6BSbXRHG6oIahwOShNUxJSViOdJ7Yz38C35NWE0Hy0hfV+n0DR+mjtvjl5Vb2VZ54lSDXRG6g6x/MV+yLLeT5paInM2BxWQfD++T2PuXUhtP8ievHCVaZm6s4AWy2Rss7aLINxI5wymloeUZTc1ntQCBfpMN7/p9MtCGibi1cV2jGsmUkjFDFNNczQbKxndg6ADIyQqlKlVVg65rnGhmkjQZePYyf1zisQFz5pw4nPeZHuhMGuXfjVcYcHJiMx1AMX0Tec91gywEO+gz111TPuf7NtuClkk39Ob/BNjKaIxvpFUf7T8NmLADj01OljtUirfXCUK298gtaJOnRO2fu1U3vL8K8+xcOA8BuSN7dirEsubt9YI14AYETjuZKEozYSI2S+8S+2GegQmeAN5Xoma2DeJrgwH0ryo9arHI6fLzCbnUPdh9y3CQFhK4piOo4C70NTUqzP/Mqn0x1I8Gnu5m9+1OR2sC3+OkdrDF/itUKfqspmkTUmImBiGzGFAwCzuBWff34vaVXx4gY7aGYaZzRIA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(10070799003)(22082099003)(18002099003)(11063799006)(56012099006)(6133799003)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZXVUTyt5Q0lrT0ZWTC9FdjMxYVFwYTV1SzVOa1ZkaS9sM2ZyTUcxeG5KbmVR?= =?utf-8?B?dVRzUjFKekxkdnNPaTYxSFpuSGgzQ0xhVVJsZmVpakFTSStuVFl2VDV0alFh?= =?utf-8?B?ckJkc1R6cUVTTUhEUlk3UEVpM3VhZjlKbmhNSDA3SVZueFBYYW1XVXBqUTFt?= =?utf-8?B?Z1liRUI5b2VUdXM3c1ZsaGhVd0U0eENiN0JMQU1wTEcxYWwzaFVmbThaRmZ1?= =?utf-8?B?eVZKendrdWR1dGxCTDNqN3Zld3BHRktxQmNNWk9wemlVQnNIanJOVWdFOGlu?= =?utf-8?B?bkJiaysvdVQ3aW9xVWxWMGhjcnFlSlVhaktZUjVYMUhVb2kxNGJKSnU2R3BH?= =?utf-8?B?RzRmZEtBbGZHMlg3K3RQSXBidkN5ZWJiNkdGMlpmeC80b2NEbzFva1dOTWpZ?= =?utf-8?B?SlpxbW8wWnYrWU1ySTRWbG53TEc2elFsdE9LVFpxOGJPR3pLUmdFeXRyd2ZR?= =?utf-8?B?bit4UFhtOFZVU2UyYys1Qm81RVZLYlM3UWIzTDI2emd0ZHJXWlJFb0V0QW96?= =?utf-8?B?dTdhVkZueXhTVWgxOXZaM0p6MXRFd2NMNmZ0M1VtN0d0dCtxYTZKS1hoL0Nn?= =?utf-8?B?L2ZGYkxLNXRrY0ZRaHBiaFJObC94bVg1UHhrYUx1dWpCWHBjb000Z2xrMkdH?= =?utf-8?B?ZjRSeWwvbnNUT1dLQUlNM1hMdXR6bUluL1NKQVMxeE42aS8zUm9nUVFUbTBk?= =?utf-8?B?bEJKaTZYS0EzaFNqTkdmdmFTV1krSGQ0dGp6ZnpaMEpDS0FHR1k2NTE2c3U0?= =?utf-8?B?cFlVblJNMTl4enU5ZFg1Z3BCL0JFU0ZOcnp1bUJQdDZMVFd2VTBVMks2aExX?= =?utf-8?B?ejlVWVJ5NlJJU1BacEVCK0JBVy94Wm9CMDRYejZRZ1RXWnNxbFAwVXFpSHBp?= =?utf-8?B?NGVJNlBRLzI5Qjk5cHV5RXBLR1FaY0pzVmFPRnFUYWxkMG9relV2YTBMSGVE?= =?utf-8?B?VlRyZTlkdlkwZEhaV2lQMU4xM1YvcDBzRW4yVFVIc3lXWEhjWXZIOTdtamJh?= =?utf-8?B?b3FHQlNwMTRIOVZPR1VoQWJzejNPeHJPMitVSDBhNUhXdUNVd3lxeTZBR2pS?= =?utf-8?B?aVNRVHZDWldhRVJRWUt4WUhzSnhkVkpCd3ZhZU0wTjdwSE1hYUNIc3cwc1NE?= =?utf-8?B?WVJXdXgyRlRnWVFuUXdFaWZ4UXVic1VBWHRndWhxcDdvOXg0OUpMNU93T29U?= =?utf-8?B?M28wK01hM0xOcTlSYmRtSE9yQTkwd1RBNTcvM3dkRkNuT3FnblE1NGI4Yk1D?= =?utf-8?B?bVROeEJlYVIyRFgrU29ra05QZzJFSlBQMk9RRGN2WXl2VksxM2JQUHVUTlFm?= =?utf-8?B?S2FxQXU0KzI2OGRwQ2dyUWtvYS9oVks1NGRTLzJBWWJwSXk5L080aVhRUG5H?= =?utf-8?B?ODA3bEVIK29aUzlwTnhvM3lXc1VDRzVzYnREc04wdkFMZmlSY1BxWkN4Qk9S?= =?utf-8?B?TjY2eitCNkZFd1pteXFTQkpaRElDbnJJNTNPWm0vMHFtalZGTXRJMjdyMnFX?= =?utf-8?B?TWN4ZVlRdXdEVjIrSlQ4VGQzUDV0VVYxZDBjMDRJdDhIRHMrQjBNVjVISkZ4?= =?utf-8?B?cXYwOTJReS9LMW41Qy9EdU5rNVhPY3R1NXBQcEtqUThkcU1RMlYwRFVwMFJz?= =?utf-8?B?Uis0ZC9Mbzl0Rjc0MTgrMWNPRlJhNS9sTEs5T25RYWswcCtzMS9xT2sxUXJF?= =?utf-8?B?TWNWRytIYWNlRHNRNm1hS1FYamgyZ1JxYU9aUzZEdnZ0b1JYaVd5MVI5ekZx?= =?utf-8?B?OEkyUExaQnhvdlltTUs5WkFpWWRmTmttZEV1UGpuMy9sMklGWEhhQlprNGFn?= =?utf-8?B?clhJdU5pSHRQQzlQVTMzQzc5dDNIQWpUdjBYWXhPd0FlamZaZmQyZXVvdGVU?= =?utf-8?B?T05vaTg0c0JUKzV2TkZxWmhWMEJucHN4VG1aWXk4WG1UdDc4cGNSdzJZYmVa?= =?utf-8?B?TENkVE9QbVZONks5OWk3YVJkTzdZQWxNaTdRaGluY3d2eGQwSUxheTlHdzEy?= =?utf-8?B?NlI3SUlDemhvY3lSTzh6SjIydWlwNFVHdElyYlNoN09DZVVic3BON0Z1K09E?= =?utf-8?B?UUdCeXh5ZFhDZldOYWVBeTVBTVFvZUMyc0hLMTArVWRmbStjTGV2VTRFdDJm?= =?utf-8?B?L0tzQWphSjFvbzBpYlJFTER4WTY3SjJDcTc5TnpqVWI0czlReW9XZCtEakox?= =?utf-8?B?YTMxQTR3YkdQU2N3QXIzVnB6Z3hKWUpROGo0bU1UQmVDbmt6dzE3aVE4dU1E?= =?utf-8?B?S1ZXOTZxUEJQVmVZR0RVL2lobDRyUi9teElXTHduNU9rZmtrai8rVno0MmJj?= =?utf-8?B?WCtGeUVpZXpKc1ZmSnJjcy93WTAxUHBVTitXTEpkakVqRTRRVmFTWExMU2pU?= =?utf-8?Q?1HPtHqA5fnzIIOKWcjVKAUUP5VLk9jJ/daAvZ9DetGFnh?= X-MS-Exchange-AntiSpam-MessageData-1: uHYhTzwhwWHmNQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9ce2e68b-9110-4053-a2ae-08def6e76c7d X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Aug 2026 13:58:15.4266 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 4iifkAREE9hExfNWFPE6AIjCPr0pofQ6n4ES64JgXuQIgj4VqPHNwlgY+237ARQ68TI2zQ1hgpXLZb4LxsnBxg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB8208 From: Joel Fernandes Add documentation for the PRAMIN aperture mechanism used by nova-core for direct VRAM access. Nova only uses TARGET=3DVRAM for VRAM access. The SYS_MEM target values are documented for completeness but not used by the driver. Signed-off-by: Joel Fernandes [ecourtney: fix the TARGET encodings, KiB/MiB units, wording nits] [ecourtney: wrap at 80 columns] Signed-off-by: Eliot Courtney --- Documentation/gpu/nova/core/pramin.rst | 128 +++++++++++++++++++++++++++++= ++++ Documentation/gpu/nova/index.rst | 1 + 2 files changed, 129 insertions(+) diff --git a/Documentation/gpu/nova/core/pramin.rst b/Documentation/gpu/nov= a/core/pramin.rst new file mode 100644 index 000000000000..f50b052d73ba --- /dev/null +++ b/Documentation/gpu/nova/core/pramin.rst @@ -0,0 +1,128 @@ +.. SPDX-License-Identifier: GPL-2.0 + +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D +PRAMIN aperture mechanism +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D + +.. note:: + The following description is approximate and current as of the Ampere + family. It may change for future generations and is intended to assist = in + understanding the driver code. + +Introduction +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +PRAMIN is a hardware aperture mechanism that provides CPU access to GPU Vi= deo +RAM (VRAM) before the GPU's Memory Management Unit (MMU) and page tables a= re +initialized. This 1 MiB sliding window, located at a fixed offset within B= AR0, +is essential for setting up page tables and other critical GPU data struct= ures +without relying on the GPU's MMU. + +Architecture Overview +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +The PRAMIN aperture mechanism is logically implemented by the GPU's PBUS (= PCIe +Bus Controller Unit) and provides a CPU-accessible window into VRAM throug= h the +PCIe interface:: + + +-----------------+ PCIe +------------------------------+ + | CPU |<----------->| GPU | + +-----------------+ | | + | +----------------------+ | + | | PBUS | | + | | (Bus Controller) | | + | | | | + | | +--------------+ <------------ [= 1] + | | | PRAMIN | | | + | | | Window | | | + | | | (1 MiB) | | | + | | +--------------+ | | + | | | | | + | +---------|------------+ | + | | | + | v | + | +----------------------+ <------- [= 2] + | | VRAM | | + | | (Several GiB) | | + | | | | + | | FB[0x0000000000] | | + | | ... | | + | | FB[0xFFFFFFFFFF] | | + | +----------------------+ | + +------------------------------+ + + [1] Window starts at BAR0 + 0x700000. + [2] Program PRAMIN to any 64 KiB-aligned VRAM boundary. + +PBUS is responsible for, among other things, handling MMIO +accesses to the BAR registers. + +PRAMIN Window Operation +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +The PRAMIN window provides a 1 MiB sliding aperture that can be reposition= ed +over the entire VRAM address space using the ``NV_PBUS_BAR0_WINDOW`` regis= ter. + +Window Control Mechanism +------------------------- + +:: + + NV_PBUS_BAR0_WINDOW Register (0x1700): + +-------+--------+--------------------------------------+ + | 31:26 | 25:24 | 23:0 | + | RSVD | TARGET | BASE_ADDR | + | | | (bits 39:16 of VRAM address) | + +-------+--------+--------------------------------------+ + + The 24-bit BASE_ADDR field encodes bits [39:16] of the target VRAM add= ress, + providing 40-bit (1 TiB) address space coverage with 64 KiB alignment. + + TARGET field (bits 25:24): + - 0x0: VRAM (Video Memory) + - 0x1: Reserved (unused) + - 0x2: SYS_MEM_COH (Coherent System Memory) + - 0x3: SYS_MEM_NONCOH (Non-coherent System Memory) + +.. note:: + Nova only uses TARGET=3DVRAM (0x0) for video memory access. The SYS_MEM + target values are documented here for hardware completeness but are + not used by the driver. + +64 KiB Alignment Requirement +---------------------------- + +The PRAMIN window must be aligned to 64 KiB boundaries in VRAM. This is en= forced +by the ``BASE_ADDR`` field representing bits [39:16] of the target address= :: + + VRAM Address Calculation: + actual_vram_addr =3D (BASE_ADDR << 16) + pramin_offset + Where: + - BASE_ADDR: 24-bit value from NV_PBUS_BAR0_WINDOW[23:0] + - pramin_offset: 20-bit offset within the PRAMIN window [0x00000-0xFFF= FF] + + Example Window Positioning: + +---------------------------------------------------------+ + | VRAM Space | + | | + | 0x0000000000 +-----------------+ <-- 64 KiB aligned | + | | PRAMIN Window | | + | | (1 MiB) | | + | 0x00000FFFFF +-----------------+ | + | | + | | ^ | + | | | Window can slide | + | v | to any 64 KiB-aligned boundary | + | | + | 0x0123400000 +-----------------+ <-- 64 KiB aligned | + | | PRAMIN Window | | + | | (1 MiB) | | + | 0x01234FFFFF +-----------------+ | + | | + | ... | + | | + | 0xFFFFF00000 +-----------------+ <-- 64 KiB aligned | + | | PRAMIN Window | | + | | (1 MiB) | | + | 0xFFFFFFFFFF +-----------------+ | + +---------------------------------------------------------+ diff --git a/Documentation/gpu/nova/index.rst b/Documentation/gpu/nova/inde= x.rst index 2afa58e8f08d..59b206238498 100644 --- a/Documentation/gpu/nova/index.rst +++ b/Documentation/gpu/nova/index.rst @@ -34,3 +34,4 @@ vGPU manager VFIO driver and the nova-drm driver. core/fwsec core/falcon core/tlv + core/pramin --=20 2.55.0 From nobody Tue Sep 29 08:22:31 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011001.outbound.protection.outlook.com [52.101.62.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C02853F12F9; Mon, 10 Aug 2026 13:58:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.1 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370310; cv=fail; b=rzK1DIvt7tKctPSC1gmYmKylS/A83YCb3pr+1qz1TfKPpNPigS9oI2VCsG9C7DmI7ozAWWFEefebgF2yoa5BzzG/yd2/5+rTEIhgKrHCiB/a7Kki0PcBw8nwLsHSDZyzQkmaivjeJrLOYgfuohLufHAvTjHM3ErufDCx39G1l5E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370310; c=relaxed/simple; bh=gUaGrX8GFBmLWErDoDpY94dZf7YBHUEH+8GAovUci/M=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=JzhuK7STi0YacjCenidccIW+5mTJLWEvlcDeHTWVvJTUbvJuVP2o0emKV+03riTK7bEMfv917vpMp8igKDhcNrfB8eH9CY/vbgFsMr/N60VG49HQiFsohOY8zi6WLP0Rs7iPDrnXiwgojKrKz6jPfWNRGCY2pxYRb40lGS7qKJ8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=Nxuu18EG; arc=fail smtp.client-ip=52.101.62.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Nxuu18EG" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XBMVhWMRlRLa2ZzLrKJKQ62CTBHZmYPne/sWpUOva6lVvKzVOM7UJ/cYiaraktdLpnI1q9TkckoGtZUzC52l7MSZk7XLwP5f44P6rhvamYmFAE56k6wRF5Ddzz9UiI6ewno8UKWi+LKgCVq2n59rxcV0W4hpC+miHu/+oD6DtaX06lZ2sXExDtBmUNSsCVQeazNzfFi3aeiO93YZnDuZV7ANla8YoUEXZUJrIWy56MLPZi+KJmKLjMIf+RxRPU/LJR3hz2+Al5yH/68SLilG3OXLKDJwuy6j79KGjfHTLvC8hWlxsfACUkllRmmd9qQZjFRPoawVfQcmUjg7f2R29w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=qHvlATAeu0qkPCZ5AX8NUgZP6iYc8IERZT3DSyy1WpE=; b=M5V+lU7HXpQJQ6rqT3OiDsDn/GrESxirpMSJpnnoB7RGauu/81Lpra1xJBGQoPPhftJD7BJhcNr5WxkzWILBqmBN3hRzX9Ye/svNNox81vZhoUbI96QnZVnExaPOfa6SIGeztUHbQN54WCauVbH5kIXd09gwcIP2QwqbvPh9GyILX9A4XZwUxzC7As3nlWl76nUuAfTloXx2ONjsHJWTSwtuBtp3AcfTBB7tK62A7VyH0YgsoDR/GuuGgPz1WcgNi9MgPgtT0MVzXNViBP70/ETz9VQGHXuEkY77EZBonoOW9MV/ttuACSF40bEIPObC7HSfwtM/vLZoSGliYWTSNQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qHvlATAeu0qkPCZ5AX8NUgZP6iYc8IERZT3DSyy1WpE=; b=Nxuu18EGP6bSxULVQdvp1UYdKEX3oKGB8+QWiOvPRqvukAi074/Ct5W8KkYoia+1SKZ3zLU+XaTk+2GGzyBdAyTUv9qZphmXlQawi7CVW4pa+nqKv/TTDubgiFs3kZoUrhXoPmq2zoi8VPx+r7Swii5y7vxXq3z5dWZ6VmL9m2/9ya22OZbE/saOzAgrTbb9lgD6vYa3QfIQV50OPJB1gEZdwRYRwnZx6HIn525G0vBB+xyhSpF7bOvMkr48IlxSfL5Lve03+uEljLBbPtSrgEvyE44qVXVxYe5U62ZuZpVVw6c5TAEOruEMbQoz5agOPsGNwNVJrXol0B0XtDqm8w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by IA0PR12MB8208.namprd12.prod.outlook.com (2603:10b6:208:409::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.25; Mon, 10 Aug 2026 13:58:19 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0292.024; Mon, 10 Aug 2026 13:58:19 +0000 From: Eliot Courtney Date: Mon, 10 Aug 2026 22:55:32 +0900 Subject: [PATCH v2 10/12] gpu: nova-core: mm: Add GpuMm centralized memory manager Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-pramin-split-v2-10-65a00b3c7309@nvidia.com> References: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> In-Reply-To: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> To: Alexandre Courbot , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jonathan Corbet , Shuah Khan Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, Eliot Courtney , Joel Fernandes X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYWP286CA0008.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:178::11) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|IA0PR12MB8208:EE_ X-MS-Office365-Filtering-Correlation-Id: 77b0316c-4b7f-4347-a499-08def6e76f22 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|366016|23010399003|10070799003|22082099003|18002099003|11063799006|56012099006|3023799007|6133799003|10067099003|921020; X-Microsoft-Antispam-Message-Info: H3d0ksIq+7LLyvhT5hoWw4sFe1xeYDN9QqQ0euC67E/86cI0mUE6RTDI5PNJzb6uiHpZ8uv9eZn8cdWJz7BsK8AMxSihys6kNVU3xW1nhi8WuJFRrjG9vQv9nLSkfZXA/7VmLuQhgBn3zwKXcaCOwU68g5gpXjSiXLfLXB7MRyluHytAH5sETqInYrmNp6f72fh0ccd4+P/BtQLxmRbrcEl7I3Gn7GSbstrnsdb3OSvgkFSFXpoW0hM6uEyEkxJol9BvLB5V5++xs8t+qmS9RRN5jDeRqHLVz4PExr+NxzqBJa/7iO1ZzU5qox8sy3K+bEh9DWrumqn+9UiXEB+iDKw9/fSDeb3iUapHxl8JtJogSsfMEQH4q3t9s+KI1U94xpQM35a+N/V8PNIq0bCTZIC9Zd5IuKhY1yfFzN8hLrAHNogESN+wUA7Dr0iszLmdRCcCMiyFyTM7ksgZCy9UBnHoTiLCn2oXnlM2b9n2V/yKFdoxIys6frBF8jmWUp4Ejq9+QXqq7wIqKRm3CpSE/Yrh3a2KIVPhTRAn4ylccWQpumyrh2EwwvBUu97eztDtAhZfHz20jkDq0HyR/JCy3boTXEKkI21K+OcANgprz6X9+a/Uy1zZDgnKFt9Pk5bpkq2xUGozwtqtudERiGirgZf5OwafbT+Zgjt4w6IOKQIpz9IFOZkkr5h5LS13ovl3fNXHse1XDRKwu6eCWNMPBA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(10070799003)(22082099003)(18002099003)(11063799006)(56012099006)(3023799007)(6133799003)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R0tmTjNwMUFLYjZZcXBxTWMzY2RweWhNRlhNMlJYcWdsRDltK2hvSTJlK015?= =?utf-8?B?K3Q5VjY1dGpCcFZRQWthWWZSZnVNSmtUYnJCVVczV3c3K2EwbTIvNlhPVm5K?= =?utf-8?B?SS9wa3N2KzdiM0pNb0JwLzVrcXBycUVLV1pLK1ljeG1CUksvdzFSQ3lZbnhv?= =?utf-8?B?UFZGMDFmNWNzc2tQY0FMeDVycmtNWTR0MEhCQ0dtTTdzbFZ3cnpvUWdSMW8r?= =?utf-8?B?aFYyQXZTK2tsM2ZoSkRmOVJ6b3N3bng0bUdUaHp3Ui80VHhNZ2JDRm1OUUpK?= =?utf-8?B?RDJTZ3VaNzhDUXZIV0VrejdNRnpIbS9IL1ZEVEYwelk0N2FHNlQ3b05BY01u?= =?utf-8?B?VG4xQnJzNlN0SDF6MDB1b1dMNDVwc0V2QzEvb1BPZzRYaEhFWlJRdVM3eFRZ?= =?utf-8?B?SzdJRDR5cDlQUGV3SENSakF5R0MxQ3pBZVMyTTRpT1VBWHo4cmVwUE5OOFhT?= =?utf-8?B?aWdnbzFJeC9xWHNadnFFMFNKZVVFaU9ZNlNhN29aQUZmcTFVekh5TFN1WlFk?= =?utf-8?B?ZVRjRE5oNkFKVG5JRXg0N0k0K252ZW1Oa3pLQU83MmV1VnJ0MFo4RlhNT3FQ?= =?utf-8?B?c3N2QURycTFjRnB3dUM3UTEvaWRGaWt6SW9xWTJQTnBFU3ZtKzF5YXh6Q3FZ?= =?utf-8?B?ZldpbCtxQ25QV2JUQlNLdGZFaWg5dFBHZ0ZvdVQvU09BWnRmaWJzR2hHRWJi?= =?utf-8?B?RWozK2xaVncvMktTYWVvdmhYdWRUTUo3TytBWFNJWHRFVjRXU0VUWjhNNnd4?= =?utf-8?B?MEdGSkFpRExlQ3RQc0ZuMFBPa2FrUjk1S1Zob3hFU21DL0VRRjJIeHIxMmg2?= =?utf-8?B?eUJUT0oxbTBGcFluK1BXa1ViYmlvSkF6Vm5uV1ZPRFRRYkpST3ZiTFhWNnlS?= =?utf-8?B?WS9MUXQzajFqc0Z3djVtVUluSWpPMWdKMzJsT1NUV3N6bmxUMVNHSTR3cE5O?= =?utf-8?B?allIRGpMSkptUkVEVHhjU2RjeThnYm53YmFOMWFPcTBxVE81dFpGQmRmODRO?= =?utf-8?B?R1dodE1SQ295b1lZeUFUMmVuTDFkNTNQTjNZU3NCbkpxU2Z5OWhpYnUveko2?= =?utf-8?B?TDRKSUlzUW5TNUtjT3VON3RxdjRzY1dIeWtNUGw4REJISXU2bmU2eEhGaEs1?= =?utf-8?B?b1RvbmNkc1lTMDRTVzNUMXk0WCswS2h1SmhrZXN0SHJPZmtJM2k2cGRnOTJa?= =?utf-8?B?KzBrS3gxbEk5VkExRFo1UHJTeFlNUldYV043d1FRaDBubzJtalA2WVNMS21r?= =?utf-8?B?TFFzazVXalo0NEorS3BqakhiQldGK1l2cDEzY2xEdUdOSGVFalVpb29xbWp2?= =?utf-8?B?UVh5Qld5bmZtd2U1ZDdpeTBtYUZyajNxdEwvbzZnLzE5dXNvZ1dhS3QxMktB?= =?utf-8?B?RUN1VHpWbXhnL2c0WC9LWTVaQU03eDRJOXZOMXNsejBUY2xVOGJhUFNoczdr?= =?utf-8?B?RGhXOFlWckhmZjA5cFZ2aVpyTGU2cUt6OGtYYVNHZW83aXZNbWpXSmJ1azBL?= =?utf-8?B?cVJabW4xVzE0TnZ6Ym1aeVdRN2J5UWxVTjRkNzBzZEcwcW9kWW5TQVRuV3pE?= =?utf-8?B?TlJJN05JQ0szWlJ5NEVCb3Y4K1dpVUJSRkF5OVZJb09RTnlQT3BxZ2I4cHlR?= =?utf-8?B?bm4vaWxETmdFelFJY3JtaVdlc0wvYVMyTDFaUG1US2dMcVZxdHoxZldUeWhU?= =?utf-8?B?aGRQN3BSVlE3Wkdqb2lkTzJHUFhIUURBSTNVcTFVRk1wbGUzWGJrSVFSMUdq?= =?utf-8?B?aSs1SlV4dCtUYTV5eXMydldoVklCeDVUTVE5cStrWFJab2RBVDI5eVowYXhk?= =?utf-8?B?ZkVOV2pFSFdyM25hRE1iMDhBRXBId2x5VVlPUVJkY1d2ODZwaXRYMll5SlJs?= =?utf-8?B?c3dKd0tEYUpBQW5ZUEgwWHIwNmVPYkp2SnFZTXBiTTJnK0xvNVVpcTZXRkkw?= =?utf-8?B?ZkNyS1M4TjRsdWhvVDB2Z2tZRng4cGYvU3Jza0h0bkhqU0c1Z25sMEF6VDNO?= =?utf-8?B?VlYvZ2FOeVZQdEF3bGE3YjVXQWFrdHphckRwU3BnVU45djE1WUVZZjZHSmhr?= =?utf-8?B?ZFNxZkltNXgvMVJkZ1JXODZvTVZ0U1Iyb3gzN09zVnAxZnNWTGliRDNFZlBL?= =?utf-8?B?QzVTZlFFN0xSYUpJMHdzdFhlUkU3cUxTb1UwZDVVZVRNbXNVTVNPaTRHUWpT?= =?utf-8?B?NGJvRzFjbndBcUsrUE04RWpZNHBqVUxKbU54MHZMRkc2bUlRZkNtWHVaWjJl?= =?utf-8?B?bXlWU1VHbTBabU15TkpDL2F0UVdVbEdDZVRFZCtEUHFMYWpYNkJUaCszMzVM?= =?utf-8?B?UDVHdWlkbXJ4MjZrN2Y1Q0JPeklIVTJlZmFNdjIwN1d4M3YvMnE1aVQzWXJR?= =?utf-8?Q?yZAP2q6FjH9NVtmV0MUEE6HcxVCX9xFtTQ0wFmAQGY86X?= X-MS-Exchange-AntiSpam-MessageData-1: xoSViyz98W9lXQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 77b0316c-4b7f-4347-a499-08def6e76f22 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Aug 2026 13:58:19.7438 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: PBwrMdW18faHTQZaq/zkDyevrEgg2k5QQAGO+CSLwgMfxRxL+WRmwqJ6OsYv7iVZUevP31ydPtc3z3gJhOnBjw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB8208 From: Joel Fernandes Introduce GpuMm as the centralized GPU memory manager. At this point in the series, GpuMm only owns the PRAMIN window for direct VRAM access; the buddy allocator and TLB manager are added later when those backing types become available. This provides a clean ownership model where GpuMm provides accessor methods for its components that can be used for memory management operations, and lets follow-on patches (such as the PRAMIN aperture self-tests) reference `pramin_mut()` cleanly. Signed-off-by: Joel Fernandes [ecourtney: squash the total VRAM end patch, drop its dev_info print] [ecourtney: take the maximum FB limit before adding one, fail with EINVAL] [ecourtney: rebase for the Bar0 lifetime and ownership changes, drop Arcs] [ecourtney: source the chipset through gsp_resources] [ecourtney: build the VRAM region in new(), pramin() becomes pramin_mut()] [ecourtney: declare mm before gsp_resources, doc wording cleanups] Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/gpu.rs | 18 +++++++++++++++- drivers/gpu/nova-core/gsp/commands.rs | 4 ++++ drivers/gpu/nova-core/gsp/fw/commands.rs | 5 +++++ drivers/gpu/nova-core/mm.rs | 35 ++++++++++++++++++++++++++++= ++++ 4 files changed, 61 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index 42a4cd7971fa..e29e07488e78 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -29,6 +29,10 @@ Gsp, GspBootContext, // }, + mm::{ + GpuMm, + VramAddress, // + }, regs, vgpu::VgpuManager, // }; @@ -283,6 +287,11 @@ pub(crate) struct Gpu<'gpu> { spec: Spec, /// Static GPU information as provided by the GSP. gsp_static_info: GetGspStaticInfoReply, + /// GPU memory manager owning memory management resources. + /// + /// Must be kept declared *before* `gsp_resources`, so that its compon= ents are dropped while + /// the GSP is still operational. + mm: GpuMm<'gpu>, /// GSP and its resources. #[pin] gsp_resources: GspResources<'gpu>, @@ -410,7 +419,14 @@ pub(crate) fn new( } =20 info - } + }, + + // Create GPU memory manager owning memory management resource= s. + mm: GpuMm::new( + bar, + gsp_resources.spec.chipset, + VramAddress::from_raw(gsp_static_info.total_fb_end), + )?, }) } } diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/= gsp/commands.rs index ffc25fd8c47b..eea1c9ed4684 100644 --- a/drivers/gpu/nova-core/gsp/commands.rs +++ b/drivers/gpu/nova-core/gsp/commands.rs @@ -216,6 +216,8 @@ pub(crate) struct GetGspStaticInfoReply { gpu_name: [u8; 64], /// Usable FB (VRAM) regions for driver memory allocation. pub(crate) usable_fb_regions: KVec>, + /// Exclusive end of the FB physical address space. + pub(crate) total_fb_end: u64, } =20 impl MessageFromGsp for GetGspStaticInfoReply { @@ -231,10 +233,12 @@ fn read( for region in msg.usable_fb_regions() { usable_fb_regions.push(region, GFP_KERNEL)?; } + let total_fb_end =3D msg.total_fb_end().ok_or(EINVAL)?; =20 Ok(GetGspStaticInfoReply { gpu_name: msg.gpu_name_str(), usable_fb_regions, + total_fb_end, }) } } diff --git a/drivers/gpu/nova-core/gsp/fw/commands.rs b/drivers/gpu/nova-co= re/gsp/fw/commands.rs index 6dc31d1bf5ae..6e85442a4b13 100644 --- a/drivers/gpu/nova-core/gsp/fw/commands.rs +++ b/drivers/gpu/nova-core/gsp/fw/commands.rs @@ -165,6 +165,11 @@ pub(crate) fn usable_fb_regions(&self) -> impl Iterato= r> + '_ } }) } + + /// Computes the exclusive end of the FB physical address space. + pub(crate) fn total_fb_end(&self) -> Option { + self.fb_regions().map(|reg| reg.limit).max()?.checked_add(1) + } } =20 // SAFETY: Padding is explicit and will not contain uninitialized data. diff --git a/drivers/gpu/nova-core/mm.rs b/drivers/gpu/nova-core/mm.rs index ef5b1cad56c3..58dce211a337 100644 --- a/drivers/gpu/nova-core/mm.rs +++ b/drivers/gpu/nova-core/mm.rs @@ -19,10 +19,45 @@ }, }; =20 +use crate::{ + driver::Bar0, + gpu::Chipset, // +}; + mod hal; mod pramin; mod regs; =20 +/// GPU Memory Manager - owns all core MM components. +/// +/// Provides centralized ownership of memory management resources: +/// - [`pramin::Pramin`] for direct VRAM access. +pub(crate) struct GpuMm<'gpu> { + pramin: pramin::Pramin<'gpu>, +} + +impl<'gpu> GpuMm<'gpu> { + /// Creates the GPU memory manager. + pub(crate) fn new( + bar: Bar0<'gpu>, + chipset: Chipset, + total_fb_end: VramAddress, + ) -> Result { + // PRAMIN covers all physical VRAM (including GSP-reserved areas + // above the usable region, e.g. the BAR1 page directory). + let vram_region =3D VramAddress::ZERO..total_fb_end; + + Ok(Self { + pramin: pramin::Pramin::new(bar, chipset, vram_region)?, + }) + } + + /// Access the [`pramin::Pramin`]. + fn pramin_mut(&mut self) -> &mut pramin::Pramin<'gpu> { + &mut self.pramin + } +} + /// Physical VRAM address in GPU video memory. #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] #[repr(transparent)] --=20 2.55.0 From nobody Tue Sep 29 08:22:31 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011001.outbound.protection.outlook.com [52.101.62.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 698763F1ABF; Mon, 10 Aug 2026 13:58:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.1 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370312; cv=fail; b=HKu+GcX1ht1vuLYr3GJfIi1kxPx13TzlDWf+YUZbuuunaNhm5aG5AFj+2Z4KphLt0KnxEozcLwTOEzRkbHNMwqp7gAbcNmTT9HPYF5BkScEwk0EtWyrdTXk1YDY2WBxDmnHpTGemrNvVzQgJ7bQlHOyVcfrIVZTO9tZrSzNizek= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370312; c=relaxed/simple; bh=wHBEAaJuh+iwpnS3RC3VpHn5/V0n0LNNiAeW0RbtL4M=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=R88FthFwEk6LjtKdN2PJ1e9itIyHI7G6bdHpr0mmHxnN/BgXPiNB+DgWsuNMnTQzE+PfGOIoOlw9Z2075KbpnGJhagmWvwCu7TQN9Vvspg5vNBt4Wva7a5o5f3QpSze+OQYYVH0VGgkCrSePtUQskNYG5lJ0HwlZO+jTdFCXNmU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=Don6a/ox; arc=fail smtp.client-ip=52.101.62.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Don6a/ox" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FDQAM5+XFlKPt/Yc6X/vykVzK3GA4qWjdAu/c5NkginkyiyJcneNdP0RIaVuhGv6GKpmiYauC8/6NShid1Yux7Y5CBWMm9rBVrmnJyD34D5okfYlDzFtzXELYs+bC15brmx1jNzFKJvf6mccOtsp9cwDsZxcRYbh2dzc7vDBT7vF9Eyihkp3o2lelcwH3KLwtqoC6e49TLDlTWddF0ycgc6KfT0CO6vO5q9tFa3VIGyYb9I3f4Z76hKZZHqF/0ZNw3FaI7HppW03iDq4bX+Sa8qwE70QUliwrRlU89eCKRkpzf2/+HXhu1YqtNLRRxiZDtchn8zvhLrTUZYgvfE+EA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gigmGCIOVqvxs2914t+WF719FvdRl53yUroWkDzyx70=; b=GfxbcJatFg71mpmzJav2kYwYkgtiBapeCSncYtGlo/SVdoeirrM2qKFAkID+V8ErC7W5/DKMVWP1s1oMEp0awDRnm+93MguPXi/Wd8QOPGXhFAkLT+eIMF9wuJOQNOfgFdZgMLNJkVjiY4q9JFx3rG4whDbWVFGjyTHcsRBqsbpZCz9/q7TythurspV7BMde1iFoObQssS2fGHR9SNgB7Ue7DWAF4MiV9xHHDr4A600xdfrFjFQ76PQACBQJThjkRVGLww50dR1iYsDtmyd8580+/2NXXtzTofudDrVm/R/U6ChTF5cVomKZqeAXc47/+1daAXzAxXowRxfoW2TXqw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gigmGCIOVqvxs2914t+WF719FvdRl53yUroWkDzyx70=; b=Don6a/oxmNv6nha7yZ5fYcnmnINbj5zQ/FiJcVWt7BWwV638TWvqKJyy7fST1flDw23DCu9z9KnVih3EQen3y9DIQfzC5g50NUYReX3Q+WwOwHFEncB8ipjOAQL1vHy0sUJCFHNxwiD7UqVSG7RbQINrq6NLhxHmDOzNizHh8Wzp2E1KQy8uSEQR79XrQyYS0YNdrwRu1+nDim4U0zKRWkbeFSW+B7IS9OVLd5uO6Fjgte9Zuv9K5RysRf7Y+ieTvCV3KLkMaNHbqIrIzX9a6XGjnRSHaXsXgZtcjOUc3g91SzUhPfPbxQlIj/CagYUfuaEV2ShetfgE0ZlvcINKow== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by IA0PR12MB8208.namprd12.prod.outlook.com (2603:10b6:208:409::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.25; Mon, 10 Aug 2026 13:58:22 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0292.024; Mon, 10 Aug 2026 13:58:22 +0000 From: Eliot Courtney Date: Mon, 10 Aug 2026 22:55:33 +0900 Subject: [PATCH v2 11/12] gpu: nova-core: Add self-test assertion macros and config option Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-pramin-split-v2-11-65a00b3c7309@nvidia.com> References: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> In-Reply-To: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> To: Alexandre Courbot , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jonathan Corbet , Shuah Khan Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY6P286CA0030.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:3b7::6) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|IA0PR12MB8208:EE_ X-MS-Office365-Filtering-Correlation-Id: 6a94a08d-da1c-44bd-883a-08def6e770e9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|366016|23010399003|10070799003|22082099003|18002099003|11063799006|56012099006|10067099003|921020; X-Microsoft-Antispam-Message-Info: L+2wvCYc3KSZuPpir7AmyNg9bowxF/EGQjYNkFzTBmSclzPqp6ObecSzoWX/g0gJCqv9WvVv8DA8NNF/JVIdkxORWPlbUR0drAEd3j2QTvXZsT9Cnia2DbodHyIR/mpUY7fzCvpx9EOxfc5amIFkh9k83uSYy7YfI/ecWndd3zCjpaTtI+6k68EkYcY//Bzg5g6iqUbwTBuMFfk7fTJNjpIzIh4gG8mPDP9Hf44HXhI4cUvuD2zZeekfC1fkbKK4g2HZeok5wWbczTANm0PxzqBHBawIhWskxvlA9KIxunmI470WctPKlVPLv0FsE63M+RonJ7LT+Kk/IHdQEZpgzdL9pHofEgWz80QMD0rwa0I5DrFNd2wqwheVnlArN8XG2ju4wfH1pIGJof0wNh9Ep9s/yPS50/hsEMofw82MUTs+xO4KDzjoirpxIkEBHJTlDNlk/XZC7owJBCQi3BRncUZS2ViZk7v9ruaiDvt+PGd3cHh9QzHtdOGl2vV2xckIihEUEq/kkRhVN9He/yUr/kXH+M28GbhuPKl8ibVMn29msQWKNbQdhlFVdl6C5w/VtjlQCABk8A2MK4AJLXKY7tF6gLnJk3WRk5+Dq63937BCMioY4TDTD0vYpX52gs4j4YlUt369xItG8N9iIcsu6FODXdGIaRNnFBWT1+1XuXysGAS32ramdG4huV4dsasxgdHGZnnI6CRmcc3sFoZBuw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(10070799003)(22082099003)(18002099003)(11063799006)(56012099006)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RTYyVGc3bGl1SDVnNXoxenlFTDd3akNmUG1qN0ZwMDVUMUNBN21mcGlPSitC?= =?utf-8?B?ZHJMN1NyYVc5R3pNOWYxK2p0bzlWZUVubFkwdk1KamZXcDBmOHduOWFrZHpa?= =?utf-8?B?bGFteGVTKytScy9sSmpEaGtuSmFCMENiVmVkbVFTOGUzYXlpS2N1OFRreGhJ?= =?utf-8?B?S0tlNmpWbXl5Q040UkdhZ0xITnh1OXZXWFhQWU9qY3kxU2Y1TDdVcHp5YWVy?= =?utf-8?B?OGVTeUp6bVI5OXVpTWo3YVFnaXNvdmdwcG9kNlFac2NLVTVIZjVJbU96bzJ1?= =?utf-8?B?M0I0RUh5Y3JkQkhxSmFSNHBrVGI0NkhyQnM1Q3ZSOExlRFFOZll0V1VsZ0o5?= =?utf-8?B?V2JKdkRuZld3WTJSZ1BZcmZ5QkpzTlRoaTNmUmNwMmV4eXhCclJlNWR4YXd3?= =?utf-8?B?dWpOaWF5dVBxU3NEMGMybitaT1BxblJZZFk5TkVLZURMTElUNVg3QzNLUUpn?= =?utf-8?B?eW0zNDd4cUhISWtPZEdodkJqS2FuUjQzUVVETCtYU243MUVTUVkvZ3VmMDd1?= =?utf-8?B?ZGMxbTRKcWtQNXRPY2J5bElPYkpLWS9ZMHFOTklrcnJ6UWtsT3Z3SFhNMFEz?= =?utf-8?B?amhzMzdIeEU3ems3QVlNTG4yMVU4dWpnVENUZGd5L1dzZDJBWWgvWVBQOFBx?= =?utf-8?B?NCtwUDJCNklPR1BaWHpBQ1Z1Vmt3SUVxT0M3V2NYTlJPZnF5ZmE2L1dNVmtN?= =?utf-8?B?QVNtN0hXM0JiVHB2R0pOTk9haW4vTElQejJhVGE0NCs1Rm9RNjBGaWQvRklv?= =?utf-8?B?cWhmSEhTRDhVdFFUQUhCWk5lS1VYRmpvZWFOcWRpR2lBVGFnTDRmVkpnR013?= =?utf-8?B?MmpNTVZaak1wb0xjK1dKY1JzaDBMQTAzaVBnOGpscWpldE9OUzIwQnluRTgw?= =?utf-8?B?ZG5vbXYxT2dLZXZVQThjL203d2J5VmlDMy95L290aEJMQ05wMmhSb25IcVBG?= =?utf-8?B?M2tweVVrRk9tZXBNOUdnOHpxTTBramdPcCtZdWp6S0p3aXp6NzJnT1BiSyta?= =?utf-8?B?RmtTRFl3T0VFM0NzN01sUU9VY3hqMnRPNDFOWlVQU0lpYUJMQnpmSDhsdDdW?= =?utf-8?B?alZiUTZKQnVjOWg1T2RTcFBJbHc2WjdXVFNaNklYSnpZSWtlVUUxaS9qNEtB?= =?utf-8?B?R241STJneHBBNFg4djJ6d3l5Y3BGeE5tQjVtckRycFMwZ2xabUY1aDdpdnpu?= =?utf-8?B?Ky9sRlZ2RXNJSC9DVi9HS3BJQVVoQ2xPQlpORnlZVlRNVGNFWGh5ZlNlQzd0?= =?utf-8?B?UkV4aVBnNkdwK0tYV3BEeEEzYWI2TmVDemp3SG5BVE5tSkcvdTV0M0s2VzYx?= =?utf-8?B?aFBSYldDdnQ5OW9TaXlvQUhkckpMTW9VSHQ0bXRhYlUyRVhsT09EcDYxMUF1?= =?utf-8?B?NWUzOG12NlhOcHRRa0E3UmdpTmxsNlNKRnlEZTRzaDRtbkw0ejRDYUJSVWF1?= =?utf-8?B?dVJEMlhmemQ3eFJQNWhmU2pkTHZ0ZE5oQkdvU2VmMm1Oc1Z6WnlNMTdvMmUy?= =?utf-8?B?dTd3YkVxUzdVUFlKMnQ3aGZGaWQ3WUdOclcwNURJZG9ObnBTY01idS9DcDhn?= =?utf-8?B?M1RHVFZIdkJwakM4WitPMEVWeE9IalJFdmczRCt3YndXQnZiRnlrR0k2Vi9m?= =?utf-8?B?RXFWU0h2dVlVMU1Pc0lGcEwwalkyeWRLTGsxSVJGYlVoZ3hBcmRtUVNWLzZ4?= =?utf-8?B?ZjdiMCtvT2lONm01VldzRGNZQ0NFV0VqQzZkaUdZRDdvMHVGK3dOMC9SYkVF?= =?utf-8?B?anFVcUI5R3REeXNTOE5GeG1SRWhmSFQrdE9NeE80MVEzM1QybHJjVHp5dDQv?= =?utf-8?B?NGhVSGc0eDBrQkt5dEJrdlhDUDVsVmlFUmNnMTk2NUQyTEcvSnJ3MURmMWZR?= =?utf-8?B?K0hSRVJuYmdKNTk4WUg5cmFjeUUvOXVLZTFncGc0SlVtakxRTzdjS2tob3JW?= =?utf-8?B?WUIxd0NYUUVHTHpCUDV4d2tnMXJLN0w3RmZkT2UvdkdQSnpPcXZLRHQwTEZB?= =?utf-8?B?UHRCM1lMWjJJdjdFV2VGclNXcFlrb2Z6S3VWdm10RnRxaDI4WllmZHA5ME9U?= =?utf-8?B?cFNIWmhTSmZJRkxIbG16bzJOdy91R2lnL0hqUzlxYzRRNUhOYWFkb29ZVXRo?= =?utf-8?B?L3VzMDJTK0t0OE1DNS9zNlRKbWRuSTh5U0UzbGFYbUlqbUl6dXRaNzdydk5u?= =?utf-8?B?T0FScW15NXRYSWdnSTRTS3pmZk4xUUYwTlFrcVp3SDZUcVBtSEpFZERZMFRx?= =?utf-8?B?cEI4SE5aMXoyUHc0dG9PQ0VhTXduOTcvOUNzOFBjbDErT1VzMTU2alJpY1lj?= =?utf-8?B?a2RWOVZHWlJSNVA4a0w3VncwL0cwMmFsT3pKYmg3RkFHMWIrY3VHWHRUYXY3?= =?utf-8?Q?SwRjOPfW8bcC0hUjNBYJSTI9cfUMktrQEV/Zpwn5yzBph?= X-MS-Exchange-AntiSpam-MessageData-1: 3dfYtO7AWZMIug== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6a94a08d-da1c-44bd-883a-08def6e770e9 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Aug 2026 13:58:22.7252 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: kq0D+Q8RiBlaNs491GHbOrTU2IEemJVeXBs3o0rhQrZvG03ImkK/8vCULojEecbLicvE2GCudrX92H276Y+WSQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB8208 The existing assert! and assert_eq! macros cause a panic. For self tests in nova-core, it's inconvenient to cause a panic since these need to be run on actual hardware. Instead, define similar macros that log an error then return an Err. Also add the NOVA_CORE_SELFTESTS Kconfig option that gates the driver self-tests. Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/Kconfig | 9 ++++++ drivers/gpu/nova-core/nova_core.rs | 2 ++ drivers/gpu/nova-core/selftest.rs | 64 ++++++++++++++++++++++++++++++++++= ++++ 3 files changed, 75 insertions(+) diff --git a/drivers/gpu/nova-core/Kconfig b/drivers/gpu/nova-core/Kconfig index f918f69e0599..cb7f0b00f796 100644 --- a/drivers/gpu/nova-core/Kconfig +++ b/drivers/gpu/nova-core/Kconfig @@ -15,3 +15,12 @@ config NOVA_CORE This driver is work in progress and may not be functional. =20 If M is selected, the module will be called nova-core. + +config NOVA_CORE_SELFTESTS + bool "Nova Core driver self-tests" + depends on NOVA_CORE + default n + help + Build the driver self-tests and run them when the GPU is probed. + + If unsure, say N. diff --git a/drivers/gpu/nova-core/nova_core.rs b/drivers/gpu/nova-core/nov= a_core.rs index 8f59cfa97017..1133c6ce5c55 100644 --- a/drivers/gpu/nova-core/nova_core.rs +++ b/drivers/gpu/nova-core/nova_core.rs @@ -23,6 +23,8 @@ mod num; mod regs; mod sbuffer; +#[cfg(CONFIG_NOVA_CORE_SELFTESTS)] +mod selftest; mod vbios; mod vgpu; =20 diff --git a/drivers/gpu/nova-core/selftest.rs b/drivers/gpu/nova-core/self= test.rs new file mode 100644 index 000000000000..f5b5965b7e6a --- /dev/null +++ b/drivers/gpu/nova-core/selftest.rs @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: GPL-2.0 +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIA= TES. All rights reserved. + +//! Assertion macros for driver self-tests. +//! +//! Self-tests run against live hardware during probe, so a failed asserti= on should not panic. These +//! macros log the failure on the device and fail the enclosing test by re= turning +//! [`EIO`](kernel::error::code::EIO) instead. + +/// Like [`assert!`], but logs the failure via `dev` and fails the enclosi= ng test instead of +/// panicking. +/// +/// As with [`assert!`], a custom message with format arguments can follow= the condition. +#[macro_export] +macro_rules! selftest_assert { + ($dev:expr, $cond:expr $(,)?) =3D> { + $crate::selftest_assert!($dev, $cond, "assertion failed: {}", ::co= re::stringify!($cond)) + }; + ($dev:expr, $cond:expr, $($arg:tt)+) =3D> {{ + if !$cond { + ::kernel::dev_err!( + $dev, + "Selftest: {}:{}: {}\n", + ::core::file!(), + ::core::line!(), + ::kernel::prelude::fmt!($($arg)+) + ); + return Err(::kernel::error::code::EIO); + } + }}; +} + +/// Like [`assert_eq!`], but logs the failure via `dev` and fails the encl= osing test instead of +/// panicking. +/// +/// As with [`assert_eq!`], a custom message with format arguments can fol= low the compared values. +#[macro_export] +macro_rules! selftest_assert_eq { + ($dev:expr, $left:expr, $right:expr $(,)?) =3D> { + match (&$left, &$right) { + (left, right) =3D> $crate::selftest_assert!( + $dev, + left =3D=3D right, + "assertion `{} =3D=3D {}` failed: left {:?}, right {:?}", + ::core::stringify!($left), + ::core::stringify!($right), + left, + right + ), + } + }; + ($dev:expr, $left:expr, $right:expr, $($arg:tt)+) =3D> { + match (&$left, &$right) { + (left, right) =3D> $crate::selftest_assert!( + $dev, + left =3D=3D right, + "assertion `left =3D=3D right` failed: {}: left {:?}, righ= t {:?}", + ::kernel::prelude::fmt!($($arg)+), + left, + right + ), + } + }; +} --=20 2.55.0 From nobody Tue Sep 29 08:22:31 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012027.outbound.protection.outlook.com [52.101.53.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D9F673EC2D1; Mon, 10 Aug 2026 13:58:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.27 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370320; cv=fail; b=YJ7fOWBHJZO9gHJh0uPAmfVRd4Ou9qEtoNe8JUuaJshgztKgJLGPVzfE7DYusKzEXVJvrjaSPEbxT00BIjx6dwuNTtfB2yNJuoqbVNN8mz053KIoNuz1dV2jkao0orFsG1/0XO4TzC92NY7+o18EneEiChgmPDkcLG7Nh7AP1g0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786370320; c=relaxed/simple; bh=FdC8ItEzIa4+dwoaGdlraxFo9I14b4ypc3uwf/CS5HM=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=iUoKdw/rT680rhJP9nVtbGXejkHqOQlY1FBYW/Aas4S5XCkH+JMd0lShk0M0kmXAVI0fMxkcbudy0eU+fXOlAN3k1rES6z1fvYEvKQFDDKnCLDaflbtal3By2oPWFSHGUz94BsPQSsqKa4n9Ug27AGyTvCAwvv3OBKm1Fo5C5tQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=pmzv5Dka; arc=fail smtp.client-ip=52.101.53.27 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="pmzv5Dka" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wQ4HJaLbq0C5lSmg6otADdQxKL1BFSCeuTQHhSL6PLrCb+tz559cCZTQSCMUYLuQx2LTNlTMW7XZrcFYztEUi8lBUQWeLiAnt2MBDVNn2G0HlMLiSU16fBKan1328JInfv8p10IZpvWDI/AFF4jwzoVptgNgNfaitZt8cB41HTAkvZ3Nf44uSESQmFqVt/MCuCTtf1g9KRSy5qACJniQsSy9PYfCNnfv/7GL+sd8LdrubJ1KlYnvLIZMu0cEHBtsEIRZJCcRCYd8WFymy2B+7JsFxcGb4BLn1dbBdpxRBS1X1KoDBdPKsaEB2VPJuIU6dbvjMbAD8itK2+WR7GXLWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JyGPrfWcyJv2cbMFbyYEkNhfOtxFnDgi/DBuXyBKCgI=; b=S5/qH7JwGfENT1PQVxxjpIkcHeUsCFTRv2q8ORjVKqcr2NFsruKKTeLdC7NdQLpVPGbrIV3O5B3K+f7/8LFRukQi4WjYyNY9RcbWh3zgfTzA8qxfdjpmc7bL3Mi1rMtr53lXIjPuhnbrADFpe2FM8t9mnpF9So7lSv53cUy+dddbyBvoQont0yCX4LswTXx9WM1HVuq85g9WoLDzHQHcFmz+SrrPLfWV0WOkSUdHzleoPwaTwhYYZZxjO45qI+aW+aCKQdTS5XazK8ajNrYlUl7S85Vcm69LjElJGAiO9xfw/kVrEMaprRJFgaMjf4YLL+OJ5doNMCVsD9pG0Rf/6w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JyGPrfWcyJv2cbMFbyYEkNhfOtxFnDgi/DBuXyBKCgI=; b=pmzv5DkaoIMIAOEgJB5uwz8HLES38DA2CAEHIykWTP2kfyOLANq7+geAQpYMlsDfnJ7xZahV4hnbkhfLXDR5vyf6Uy5NTA8zYkMoRyfQZ5FdcP/RdqoLJmzcPXjwrtdlPqVDD64u91KexWJC6RIvQ8Tyf0Ndd4nw+cVCfkdXMlvTOZaJJ0ZKLxnHW/i4GmPtidkT3teyTS+RNRKyfBEpaXqT4bIZsXP7zPK80DeMIWUqP+R6GPFyudnLJLXIqK+7QSGuWfYizdZ13fByM82y/o22kS55GLgo6WOxmmfUGwB5gAplf9eXWKMXjzuBouTL2QCxgL/AYTDE8rKj/IYVsQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by DS0PR12MB7581.namprd12.prod.outlook.com (2603:10b6:8:13d::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.25; Mon, 10 Aug 2026 13:58:27 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0292.024; Mon, 10 Aug 2026 13:58:26 +0000 From: Eliot Courtney Date: Mon, 10 Aug 2026 22:55:34 +0900 Subject: [PATCH v2 12/12] gpu: nova-core: mm: Add PRAMIN aperture self-tests Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-pramin-split-v2-12-65a00b3c7309@nvidia.com> References: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> In-Reply-To: <20260810-pramin-split-v2-0-65a00b3c7309@nvidia.com> To: Alexandre Courbot , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jonathan Corbet , Shuah Khan Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, Eliot Courtney , Joel Fernandes X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCP301CA0048.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:384::17) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|DS0PR12MB7581:EE_ X-MS-Office365-Filtering-Correlation-Id: 905dbdd1-2df6-4c0b-87a1-08def6e7731c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|366016|23010399003|10070799003|11062099010|18002099003|22082099003|11063799006|56012099006|3023799007|7136999003|10067099003|921020; X-Microsoft-Antispam-Message-Info: MLvOfuiHBVFqS5PGUNkGGjATk1j8lbMDKPX2ss6dwigZJUJBEzEbDhtN/2kbFyNzNEsS08DPg9PwpjlQhFfCZsYNFUcrZjjr9g9j9rNsTIZ8Eaupqcgfx3fPHf5B3jtSP0ba/kJubONXIngYRVfkJrx1+5D+qKYNNBxI6xRcSYCmBJYcMg8qqxIN/Z6KJZYc5ZoJ4VRKC6SwGANUilxqxxL20XWl+9f71vSGned673ykqak9EZoqNMp8gBaFuwVedH65SzqXNCHoNbJzX8RbF/ryyrszWzpzzkARb5r7i/rRTGNE4VAbvqh7RDnk86OcEhVrWKUHssRxO/pSm0Nv/V3c2OkadbdDnG86IdsR6KbI1E4a80iXwWb9cGJXVyHZcwq02qUmV/7Y3ACGFajkcCj9W6nKiBeTsJrYDYQ9fXHpiOvop1XQ1cLw8m/Tu2Qp9QNcfQh4GUj8uEoaQ4VMk2p2jrXMT2DIR6CVLvXenOmPbzyR+dRnMAnuXKAafhdX0Cmd3ryrZQKUtKnblJAp91xZZBHXeeDq4Q8n248rN4qtFvesqF49xv2vLIaP7kUQZpJEJZxUt8lRn8p1UenC9ZAbohybk3Bgyzjh1hdqXi3iVH+9h99YGbDHKgp48G8wF7ZD1eQMb8iqdkdd3zwRC6Te3aGJVHlo9kv0iitYssH4bJUJjZZtKWrmvHrWSTymH4E5Ojv0uOQxJvIvKdmMKw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(366016)(23010399003)(10070799003)(11062099010)(18002099003)(22082099003)(11063799006)(56012099006)(3023799007)(7136999003)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TU9rNklzVjZRMnMrM1IvNFJ2M2pCNXVnM2JUaVF6QkxWbnNpUkczT2tjOGVN?= =?utf-8?B?MWwvbDUzRUF6R3J0M3N6dTBmYUFjSXpuUWV6UGZkZlJETjdETTFSbW4xWWpD?= =?utf-8?B?MUU5MmlVRE9TTXJMOHcremNTT1RtUm1yYURyOVROUVl4SU41YnZFUEcvWnNV?= =?utf-8?B?aC95bkVFWG1KTGYwdUZobnliM1loYkhTRkxvZTRlMlVpM1huMjdUbmZWN3pR?= =?utf-8?B?N3BxSVBwYkFhbjRONHc1WjR0ZmdmZWhlbVdRQ3BTNlp2UmM2dndZMDB5N1VB?= =?utf-8?B?NzFHbVlsNHRqSFJQOHpRY0dPUkhNZXk3ZXlNdG9DeWdINDRsT2FJTU4xRnRO?= =?utf-8?B?REhwa1VKQmF4Vk04cldQUGVRamxDa1JGU0lBZEVXemdoZTFROHNmS2pxcEx0?= =?utf-8?B?YVNObWFtNGQ2YjlrNHNFaW1FR0t3WGsrRXU5Sjg0cHdZdUZHbnk0WlFrbStx?= =?utf-8?B?cXFlSGJRWEwrbHdlbFJHL0VzR2s4QzBBZG1sZkx3TDBMMWtCUSsrbTMvUDlu?= =?utf-8?B?Qk1DSk9KYnZWRERlZlg0Z1ZGaXU3cFZ4bC94UGRtMHB5K1VTSHYwakc1OEZl?= =?utf-8?B?T1p5YWk4amxONzc2bW4yRTVUTFFvYzBrSEV4ZXlyQXpPYVVKWVF0KzVVVTgx?= =?utf-8?B?MnowYk4yZjRqSzU2WCthTUV3ZDcva0dReWErc1hFcWdiU3NlZit6bmxvajhZ?= =?utf-8?B?aVJLRWtkR1ZMSFRuT0JObEN0ZFl2SjBBUE9iUjU3SE9BdkJuTk5GS0cvTEl3?= =?utf-8?B?MitLM2Z6QndtY0FIWDlZUWNFcys5S1RvOUJaRlBrZ2gwRmtpMXVTbWlVSVJ4?= =?utf-8?B?czBDejExYWF3NXZYd1QwZU5KaE8rSXpZc2FOWWs0TjJhTTFPRzEvdlRSbXZ5?= =?utf-8?B?UDVuSXFaTG9vOHZCSVpWaDhXZ3BUQkJKSnZCQVFaREFEUHBSUWhPOFowaGQz?= =?utf-8?B?aGMyYkw3UmR3UWpnbGNHNEc5MXhMRldCL3JyRnRycG9aWExCaU5IMjJBMHkx?= =?utf-8?B?ZFR4enhSVC83UTVHVzF0TzhyQ3pncGx5SndHaXZrZlhSNy9xZm5acjAyUWQv?= =?utf-8?B?UlEzYjVENUkyaldaRG9ISXpWUEhvOVlMaklPRlBLa0d4OEEvR2tWYlIweFZR?= =?utf-8?B?anBEaHZEWGtYRC9PZW9aMXdUUlhUZ3FjRzBRQ29nU0RxWndHaFZDeGdKV2lY?= =?utf-8?B?UlhwQ1lOYTV5Wi94bkh1Wm9KNmNTY2JPZ1M2ZE8rbWJQZWJ3T0xMK1d0bGxm?= =?utf-8?B?NnpSTzFHSlRudjR0YnpvRmtmQ211MmdZYkswMXA2V29XR1JGNXkzNDcvaTIz?= =?utf-8?B?L2tVQllyM3lXWVorOFNyQ2RHZHdWZGxZeVV1bUxZa3Z5Y2xIbnF3VFN3MFps?= =?utf-8?B?VFIycU9IbFZrRnBYWWppZnNqNXZxL1Y2KzcyeGcyUXRCL29Lc0xEUGc5SDNw?= =?utf-8?B?aFFjODRTMTB5cVdTQys2QkxYNmRXSlZGWXJ6cFVML3VycjJ5Y2R1aDFzNDFD?= =?utf-8?B?cUx3Zm1obFo4R2dIVS9raS9qYUpNVE05bXB1RmQxQ21HblhqbXAwSXA3YlBz?= =?utf-8?B?U2hlNjlwRVhTR21aS2JFVm95SGRSVTlCdTBNbUU1NUlqU093cWlKTUs1eFVL?= =?utf-8?B?WFZwcytHSE5xeDBKcnJING9DemdUNE4xeDRJcXJDOGk2dk0xb09IQkRrWmM5?= =?utf-8?B?QWl6d1FlSzdVa0szYk1nM0pqeGRGMTE1UHExMFRSak5iRXI4dW9HUkdibnVx?= =?utf-8?B?bzB4cnA4Z1lOUmFxMkpPc1loMlBYSGYxM2Juem80anIwQWUvMTFBb3RiTlpR?= =?utf-8?B?akF4bHp0QXd0OFYxaXZJdlpHdXlBbzRZMG91WGRLNDFSQTFvTXpjV0FueWhk?= =?utf-8?B?S0pJYUZlVkdlaXFsV1lPUHNaMUNzM2plMUllV3g4ckw2NFRKZHZhNkJXc1Rr?= =?utf-8?B?ZEplOGw5ZGpxNndhbXIxVUFzaTZyeW8yc3lUdEdJSmF3eWdGY2JsaXV5Q2J5?= =?utf-8?B?TEVMRlVqZk9vK3d4WVVLOGZuaTRKR3B5R3VuU1VYTEZIc09IS2VlT2pMbWw5?= =?utf-8?B?RHlUMklnVEFpaTJHaWhidko4SlZVaTV1UTAzc0lHSHFGcnpDQmNNT2JVV2Vl?= =?utf-8?B?WFpLUVN2elJxblppaUJNRGRuTXB0aktpbDgreXJzMHVqNVZNQUZ3NkRMOHJC?= =?utf-8?B?TDFQRWpWVU5JZDJUQTcvc2o5MGltV3g0eE9VcG05RUJvWDZrZmZhcUF4dWI1?= =?utf-8?B?ZitYSmxvRitVZVMvMkoyY1BDTUV4SkU1ZUt3cnp3QldoUzk0ZHowNGNvWDVu?= =?utf-8?B?eFl6U1hhS1RENVdEN2ttNUpqOWpUSkFqbEVBQ0N4OGErZlMydHVnN0ppazh5?= =?utf-8?Q?P8n3V7Zwow8qA+aj5iyoNStE1KzARmPvv8RD0zjoeZvXl?= X-MS-Exchange-AntiSpam-MessageData-1: Si9oQ4WvgyyfjA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 905dbdd1-2df6-4c0b-87a1-08def6e7731c X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Aug 2026 13:58:26.3572 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: vqvIgAICH1oRyLkdy7p2LSQ1MUvjFVQ4g3fUMO9DA5Szp65pwLz7vaN/6FNte3Ey9pXGEZMFQUhqUmM6C3XoJw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB7581 From: Joel Fernandes Add self-tests for the PRAMIN aperture mechanism to verify correct operation during GPU probe. The tests validate various alignment requirements and corner cases. The tests are default disabled and behind CONFIG_NOVA_CORE_SELFTESTS. When enabled, tests run after GSP boot during probe. Signed-off-by: Joel Fernandes [ecourtney: convert the tests to window_at(), macros, and the new types] [ecourtney: cfg-gate the tests and expect(dead_code), not a runtime no-op] [ecourtney: run the self-tests on all architectures, drop the chipset arg] [ecourtney: test within a usable FB region, skip when none is large enough] [ecourtney: report failures without failing probe, start banner at dev_dbg] [ecourtney: removed the mm-specific Kconfig option] Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/driver.rs | 3 + drivers/gpu/nova-core/gpu.rs | 12 ++++ drivers/gpu/nova-core/mm.rs | 40 ++++++++++- drivers/gpu/nova-core/mm/pramin.rs | 134 +++++++++++++++++++++++++++++++++= ++++ 4 files changed, 188 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/nova-core/driver.rs b/drivers/gpu/nova-core/driver= .rs index eddd5e7aeec8..f012bea2b5bf 100644 --- a/drivers/gpu/nova-core/driver.rs +++ b/drivers/gpu/nova-core/driver.rs @@ -87,6 +87,9 @@ fn probe<'bound>( // (`try_pin_init!()` initializes fields in declaration or= der), lives at a pinned // stable address, and is dropped after `gpu` (struct fiel= d drop order). gpu <- Gpu::new(pdev, unsafe { &*core::ptr::from_ref(bar) = }), + // Run optional GPU selftests. + #[cfg(CONFIG_NOVA_CORE_SELFTESTS)] + _: { gpu.run_selftests(pdev) }, _reg: auxiliary::Registration::new( pdev.as_ref(), c"nova-drm", diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index e29e07488e78..04e1e30eeed7 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -429,4 +429,16 @@ pub(crate) fn new( )?, }) } + + /// Runs self-tests on the constructed [`Gpu`], logging failures witho= ut failing probe. + #[cfg(CONFIG_NOVA_CORE_SELFTESTS)] + pub(crate) fn run_selftests(self: Pin<&mut Self>, pdev: &pci::Device) { + let this =3D self.project(); + let dev =3D pdev.as_ref(); + let regions =3D &this.gsp_static_info.usable_fb_regions; + + if let Err(err) =3D crate::mm::selftest::run(dev, this.mm, regions= ) { + dev_err!(dev, "self-tests failed: {:?}\n", err); + } + } } diff --git a/drivers/gpu/nova-core/mm.rs b/drivers/gpu/nova-core/mm.rs index 58dce211a337..9e4338c7c393 100644 --- a/drivers/gpu/nova-core/mm.rs +++ b/drivers/gpu/nova-core/mm.rs @@ -3,7 +3,7 @@ =20 //! Memory management subsystems. =20 -#![expect(dead_code)] +#![cfg_attr(not(CONFIG_NOVA_CORE_SELFTESTS), expect(dead_code))] =20 use core::{ fmt::LowerHex, @@ -123,3 +123,41 @@ fn sub(self, rhs: Self) -> Self::Output { self.into_raw() - rhs.into_raw() } } + +#[cfg(CONFIG_NOVA_CORE_SELFTESTS)] +pub(crate) mod selftest { + use core::ops::Range; + + use kernel::{ + device, + sizes::SizeConstants, // + }; + + use super::*; + + /// Run MM subsystem self-tests during probe. + pub(crate) fn run( + dev: &device::Device, + mm: &mut GpuMm<'_>, + usable_fb_regions: &[Range], + ) -> Result { + // VRAM span the self-tests are free to overwrite, from the chosen= test base. + const SELFTEST_SPAN: u64 =3D u64::SZ_64M; + + let base =3D usable_fb_regions.iter().find_map(|region| { + // Tests rely on this being 8 byte aligned for checking misali= gnment handling. + let base =3D region.start.align_up(Alignment::new::<8>())?; + (base.checked_add(SELFTEST_SPAN)? <=3D region.end).then_some(b= ase) + }); + let Some(base) =3D base else { + dev_warn!( + dev, + "PRAMIN: skipping self-tests, no usable VRAM region of {:#= x} bytes\n", + SELFTEST_SPAN + ); + return Ok(()); + }; + + pramin::selftest::run(dev, mm.pramin_mut(), VramAddress::from_raw(= base)) + } +} diff --git a/drivers/gpu/nova-core/mm/pramin.rs b/drivers/gpu/nova-core/mm/= pramin.rs index 20be3fc471ba..7f89c093d591 100644 --- a/drivers/gpu/nova-core/mm/pramin.rs +++ b/drivers/gpu/nova-core/mm/pramin.rs @@ -176,3 +176,137 @@ pub(super) fn window_at<'a, T>( Ok(PraminAccess { view }) } } + +#[cfg(CONFIG_NOVA_CORE_SELFTESTS)] +pub(super) mod selftest { + use kernel::{ + device, + io::io_read, + sizes::SizeConstants, // + }; + + use super::*; + use crate::{ + selftest_assert, + selftest_assert_eq, // + }; + + /// Test read/write at byte granularity, at unaligned addresses. + fn test_byte_readwrite( + dev: &device::Device, + pramin: &mut Pramin<'_>, + base: VramAddress, + ) -> Result { + for i in 0u8..4 { + let addr =3D base + 1 + u64::from(i); + pramin.window_at::(addr)?.view().write_val(0xA0 + i); + } + + for i in 0u8..4 { + let addr =3D base + 1 + u64::from(i); + selftest_assert_eq!( + dev, + pramin.window_at::(addr)?.view().read_val(), + 0xA0 + i + ); + } + Ok(()) + } + + /// Test writing a `u32` and reading back as individual `u8`s. + fn test_u32_as_bytes( + dev: &device::Device, + pramin: &mut Pramin<'_>, + base: VramAddress, + ) -> Result { + let addr =3D base + 0x10; + let val: u32 =3D 0xDEADBEEF; + pramin.window_at::(addr)?.view().write_val(val); + + let window =3D pramin.window_at::<[u8; 4]>(addr)?; + for (i, &expected) in val.to_le_bytes().iter().enumerate() { + selftest_assert_eq!(dev, io_read!(window.view(), [build: i]), = expected); + } + Ok(()) + } + + /// Test window repositioning across 1 MiB boundaries. + fn test_window_reposition( + dev: &device::Device, + pramin: &mut Pramin<'_>, + base: VramAddress, + ) -> Result { + let addr_a =3D base; + let addr_b =3D base + u64::SZ_2M; // base + 2 MiB (different 1 MiB= region). + let val_a: u32 =3D 0x11111111; + let val_b: u32 =3D 0x22222222; + + pramin.window_at::(addr_a)?.view().write_val(val_a); + pramin.window_at::(addr_b)?.view().write_val(val_b); + + selftest_assert_eq!( + dev, + pramin.window_at::(addr_a)?.view().read_val(), + val_a + ); + selftest_assert_eq!( + dev, + pramin.window_at::(addr_b)?.view().read_val(), + val_b + ); + Ok(()) + } + + /// Test that offsets outside the VRAM region are rejected. + fn test_invalid_offset( + dev: &device::Device, + pramin: &mut Pramin<'_>, + vram_end: VramAddress, + ) -> Result { + selftest_assert!(dev, pramin.window_at::(vram_end).is_err()); + Ok(()) + } + + /// Test that misaligned accesses are rejected. + fn test_misaligned_access( + dev: &device::Device, + pramin: &mut Pramin<'_>, + base: VramAddress, + ) -> Result { + // `u16` at odd offset (not 2-byte aligned). + selftest_assert!(dev, pramin.window_at::(base + 0x21).is_err(= )); + + // `u32` at 2-byte-aligned (not 4-byte-aligned) offset. + selftest_assert!(dev, pramin.window_at::(base + 2).is_err()); + + // `u64` at a 4-byte-aligned (not 8-byte-aligned) address. + selftest_assert!(dev, pramin.window_at::(base + 0x44).is_err(= )); + + // A `u16` view at an even address is allowed. + pramin.window_at::(base + 0x22)?; + Ok(()) + } + + /// Run PRAMIN self-tests during probe. + /// + /// `base` is the start of a driver-usable VRAM span that the tests ar= e free to + /// overwrite. + pub(crate) fn run( + dev: &device::Device, + pramin: &mut Pramin<'_>, + base: VramAddress, + ) -> Result { + dev_dbg!(dev, "PRAMIN: starting self-tests\n"); + + let vram_end =3D pramin.vram_range.end; + + test_byte_readwrite(dev, pramin, base)?; + test_u32_as_bytes(dev, pramin, base)?; + test_window_reposition(dev, pramin, base)?; + test_invalid_offset(dev, pramin, vram_end)?; + test_misaligned_access(dev, pramin, base)?; + + dev_info!(dev, "PRAMIN: self-tests passed\n"); + Ok(()) + } +} --=20 2.55.0