From nobody Sun Feb 8 02:08:33 2026 Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azon11011060.outbound.protection.outlook.com [40.107.208.60]) (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 1301524CEEA; Sun, 26 Oct 2025 14:39:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.208.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761489591; cv=fail; b=QIW24tB4QRi3EocSe9760STAHeDtVvyz3PoE/6Wc3RFhwsOwqDDLSTvlHMM6njlQHJLiGecQ6rLQ5ZFQp+j2biIaOzdOxEp6Pt8kF1f+pV/rb1fX6+EOkEdBGNK771BcMGS6940odU9a40HR8MJG0KPSQGyexHRnpYBFQVbzl1M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761489591; c=relaxed/simple; bh=DoAaAiKM83HEk06XSvcQyHEpBaXXU87RAO/+hi82mBc=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=fJt+nc5nqfaWeMvS4n/VZWOeXiJppWVC+vcedKcPPWLsaIS5S9S7123b2YQiJmn181dUjkyx62dgAivLdEEB+L3DMRM92UMiiLWHdK9mmbtKdhUULLW8a/JTz0lEMxS76fBAJ++O1IE6OYRspZ43r65DzqmXDg+uxvVgwA05E04= 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=twUaClUj; arc=fail smtp.client-ip=40.107.208.60 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="twUaClUj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=G5qp6q9Z5t3mhFzNdAbUuHNNkxYTkssk5H1BWIltuqhru+zHZAEFmW1lGi0cdINC2g0sJp5yXHR/kBzlHMxbbExDds2pm7Fo0L2djIpNsEyxZURuLy5ftTHWPB0xDDJYTgIoJkNzcL6X03Z6I+XBWXW1kUSmJ91QanPLG8Ze5Jgh5rB01lr0YBZGDcpjBnaIvMKyG++hLLUNHlWlExQJ5UN8Nw3ugU6mKld5B4YfMTqvGBQKrtSaD4jJ9Etg8j3x7EHMooAVUcinsWDOOyuGjwqXjtbC/BV+7O4FYidBKABDbttSXG8eK/cVXqzaIRSEWnqO7Y+Q18mmlqcWVO/xag== 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=kYyRCNEZkE/qfv1fqPlth2gZyrlls4WcGAvc4KRx3KY=; b=rH5NVYi8bX1iNkkU5qSVwO04VPQFe8vX6l+DS2gLic5iQ1rc7BNUfmO6C++mC3RZTKAxi0nUeD44sq731MFQrT2XfmiE7Sl08M8gM0U8LP7wJ8VK1builF9L/IrpPh6XGkJMwza84wq39l6FeKmmsx2qXLC4UnDIUw/jdMZ5N6RGenbXaAXqC1NgSzTQWRUNuIAuHRDKSObuIQEBJ+1+Gr31I+ncldN33x0hUzXOz3UHqMLn03UkT+5+Pbg7YPv9dz3qfpzcT/KZ5oGsexZyCL19N3YqMs8ij9D5pYA0leQYd+wy4YLMCp2sHqaIn8IQex0CVID1B5GTlQbx32xxNw== 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=kYyRCNEZkE/qfv1fqPlth2gZyrlls4WcGAvc4KRx3KY=; b=twUaClUjdg+C489D8N9SMs1vK1Jn2Gm9M+fwtuGRtHLhcSbRyr4c0hUK/PE6mqzDSAKI3YuvRhgEO1eyZpEJSS2Z/R4fZ0BA2x4iieVPNnGfq6tD5Ctwe/3OxPLuGOD7h209Pk3tFluIiDHy0JhrfMAaHcXS3V4E38XSoDzCSA3rgRxtsJKpVZjKVsxrDXjNKn8A9Sck4Qlxqgp38r0+dwVVzuOftQ3kduuvaII+1WXPGjMp0FwNt1G2Rp0VpsGZpUXi0BQL6P7uWbFjWjt5OmMcA1KXd7+KSxB8Ob/5S5P5P/njJHYapVdeih4KD5PzbmU2A1IY9iz4nQ3/j3E5FA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from MN2PR12MB3997.namprd12.prod.outlook.com (2603:10b6:208:161::11) by CH2PR12MB4168.namprd12.prod.outlook.com (2603:10b6:610:a8::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.12; Sun, 26 Oct 2025 14:39:47 +0000 Received: from MN2PR12MB3997.namprd12.prod.outlook.com ([fe80::d161:329:fdd3:e316]) by MN2PR12MB3997.namprd12.prod.outlook.com ([fe80::d161:329:fdd3:e316%4]) with mapi id 15.20.9253.017; Sun, 26 Oct 2025 14:39:47 +0000 From: Alexandre Courbot Date: Sun, 26 Oct 2025 23:39:06 +0900 Subject: [PATCH 1/7] gpu: nova-core: replace `as` with `from` conversions where possible Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251026-nova-as-v1-1-60c78726462d@nvidia.com> References: <20251026-nova-as-v1-0-60c78726462d@nvidia.com> In-Reply-To: <20251026-nova-as-v1-0-60c78726462d@nvidia.com> To: Alice Ryhl , David Airlie , Simona Vetter , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Danilo Krummrich , Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: TYCPR01CA0084.jpnprd01.prod.outlook.com (2603:1096:405:3::24) To BY5PR12MB3986.namprd12.prod.outlook.com (2603:10b6:a03:195::27) 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: MN2PR12MB3997:EE_|CH2PR12MB4168:EE_ X-MS-Office365-Filtering-Correlation-Id: 2e40712c-df61-4af6-eeae-08de149d8082 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|10070799003|7416014|366016|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?MmExL2oxQlQwU3hTMGxNVWFWUWxMNkg0K2s0ekJDcmV6bk1sNnIwNkpCUTBr?= =?utf-8?B?SGo0NEZlaE5ZVTBSZ24wTGE2RGdwVzQraVFFM1JJODErbzIzWUdFRHBZeWRw?= =?utf-8?B?NFQzTThSQnBJemltSndId2pNVy85bnhiaFd2aGJVMlpHUHNTSVhvUkxRKzd4?= =?utf-8?B?LzZMOFdSc0VHOEYwVDZ6ZDVnUVpad29HN3BnS0YrR0o1SDU0WTltaGYyUnhV?= =?utf-8?B?Y1dsWTdwN2xrUVUzSk40eUY0V2dwdFhKcCtqUmo4SUJrOXlxMkhNM2Y5S1FB?= =?utf-8?B?d2dlV1ZKaFZsUjRtRHA0MVdISWtpNHI1L1o2WHEvLzdobXdBTmpYNEVqTExt?= =?utf-8?B?THk4enFjMzFxSDVaL0tTSlRoOUpaVlBmR2ZCakxQTlpQVnFwQjhMR1NSMTJT?= =?utf-8?B?ME1mT0k3WkxkQXJuL3pjL3FMcWUxdEhGbUtVNEtxQllIT0RRbkxqTmF5bEtq?= =?utf-8?B?a3A4YkpUcTdhOTZXQTlYcENsZTlacWJmQlNmRjVaOWhCNXduRG5jZ1pTalJ3?= =?utf-8?B?KysrUjNVdW5XOE14b2NhMFFpbW5kbHJBSlZLYU5sQktnOFBMK0Z1YkZmWEp3?= =?utf-8?B?RWZPSnYxN2dicHI0TDFxN3Fia1JwTzRzNTdVSmRTNzRtL3ZmNW1EYTdFKzBw?= =?utf-8?B?Z0lVTk94NG16d2tqb0Z5RGd2cVJDRWVGNlhJK0ZyMVdUc0xUTEZvdkxsOERm?= =?utf-8?B?eGUzRHlMU1gwR2pYT1hzMHNQM3laeUY5SS9GVWFXanZibjZtZkNWdEhURENV?= =?utf-8?B?RXg1d3lud2tDc3dncjYrUzFCZUpVbU14TFB5NjYyUko4eFBNQ3VrQ3VpYVRt?= =?utf-8?B?TkVhZWdOVEhyRUI2dGhnQ0FmSUk2MXU2M2txRk9ST3ZiRlpvdUtSbkZaczd1?= =?utf-8?B?eTNYV2NzTDVaTmR6NWlZRytpYUhpaDV1QWtDQjNTK25uYWpMdFJFUlZJcWdo?= =?utf-8?B?aWVkVWtrTi96RFVJdmdzTWpzUk02WHRrbHJQbytHQ0VpVDREbFJNVWR2UzBQ?= =?utf-8?B?emdWU3Zidm9BWEV2TXpxejFQa1FLdytmZUJxcW5KdkViV285K3pWbDZjc2Nz?= =?utf-8?B?TW5ybm1RNTVyTDloRWh4K2t6R1IwZjdTV1dPT0RyK1pxRDBQU2NTZW9DVnFz?= =?utf-8?B?KzhzN0RHeEwrODI3UlFQYUdJQzFTK25oZTFPbW5TQ0xCSENYRTUyMkZwd0tS?= =?utf-8?B?TnRob1crMVhTUkZUSkV5a29WWkN1MnY1RXR2NDNWUWtzSUZBOHQzUEgrUGpO?= =?utf-8?B?WS92TUVkNUtDeldwTHNJbzJSWVEyTi9nQ2JDSFp3eDdyNnVEcWIxbjE1MTMy?= =?utf-8?B?RTA2U0xCMGYwa281WVBaZU90cUJTRVI1R2NQdVVhUk1tOUdJS2ZFdXdwTmpu?= =?utf-8?B?L0pla0Ezb2hjZ2pIS0dzOE15aWQvMmo1Q2FWcGtYSG9PUWxlWHl3d1Ixa1lQ?= =?utf-8?B?dER6akJLQkdmSVIxZ2huT0EvMDdlakZYM3JKVlIzNGdFSno1U0xRMXJxTU1l?= =?utf-8?B?YmM2Skw5UWdtb1o2SkxLN0lJRXhFUDVQWXNrU3UzMzJOZ0lLV1NEbEtMQUs5?= =?utf-8?B?ZDVTZ2M3ZXRGZnFtSUJpdTBGMjMyeFgrK29ZRmtPYTVIMXV2YUlWLzNGZHd6?= =?utf-8?B?OXJUOVU0aTdaVSsrZXd4WVdUK0trVWkyMVdKU3E3Y1lMckI3RWVBR0hNS2FN?= =?utf-8?B?dDM5OUl4M3hYeitwajRZN2VpekpzRXFZQkhvMkFVcXRDZ2JaaEp0eG1OWHBo?= =?utf-8?B?enpTL1dXWEJzcDJCVXRjNkpzQWF3UkJ6MjE3VExwWlUxUlgzZFNRdWlZTGFk?= =?utf-8?B?blMrbHArU240b0pWNzhFaUd6dU0rUHZvRGpRSzhsTWZuNnBwWEp2QzcrdUhP?= =?utf-8?B?Nnd4V1Y1d2R3a1ZQWUpNUnJFUlBXeUd0YlA5Q2xYb1Zsd2cra3B1YWl2T3gz?= =?utf-8?B?clk0Y3lzc2FUNy9SaDQ0dC90SGhOc3JQSnZ2UkxDVmpGWk10c0txVklPN1ox?= =?utf-8?Q?6SL4M2+nESIodmgeO6N7+RRzqpcCwY=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3997.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(10070799003)(7416014)(366016)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a1pmZDNXYmhkVEpHNUNPallubjBWZmQ5emk5ek9mRVF5RnVnUFhXTmpLb2pR?= =?utf-8?B?MkRxMjZvc3dNais3cmhEZzdhTXdMUTFoVzRzcU1TWDdQZVRPTG1nb09uQ3pq?= =?utf-8?B?YVhzY2I1L20xdzRYcG9MTWJ1Vzl2WXhoeGZhUkhVdXRvYXFaUGFZYngyamxv?= =?utf-8?B?eHI2aXdIZUZCcGJiMFVNaS9YRjhuY0NpWnNXbGI3UHh3RTVCSWdoV251cUFl?= =?utf-8?B?K0UrVE5Beks1ZlN4UnJXYThlSCt3RExYcU1vMStlZXNWQ09JVFVXM3orWXl5?= =?utf-8?B?UkJKRlgvZER6eHE0a2JRS2pqcHFIeDRCNE5zOU8ySkovTzJnZWNTVVZVZXk4?= =?utf-8?B?Z2dUV0lITUJWdzRwL09rUHlQR2NZTFpObUNoYytmWXJ1bitZYkVzTFpPZkZJ?= =?utf-8?B?N29ReVI0cUJsTGtLY3RWM3RqZXJNQlV6YnZzOEJtOTNHamFGQk1hSzFFNFp3?= =?utf-8?B?T0FhRWN5Qll6YnBESE5RVmNwNXZ4WGpUWTJXbE5nK1Q4S1J2bnZwWW0rclVZ?= =?utf-8?B?Ry9GZ21NOVVtckE3TUMzQ3NMVFh0UTlUK2dIOElCdjZqQ1NnUlJlQitFWi9m?= =?utf-8?B?NFkrdGtFZW1uYU9xeXhxV3QyQzJrNE9wNFdaZWI2UFkycDl5MklvbTQrR244?= =?utf-8?B?RW5zZUxXUEIzam92Vm96R3E1LzlzczhFTlAzcllVUndKSTMyNTZFMmxRUWoz?= =?utf-8?B?SkdYTUN1RGpNNkR2SHZGUkxIditNNnMwTkJaVmh3Y2szRzBHSExNT1d6YUc5?= =?utf-8?B?d2VpRWRaQzlINmh6ckZjalVlZEx4aVAwajFqUjlmMzl3QXgwTUxhdjRiS2Jv?= =?utf-8?B?L2JJUGE0MWZZNVR5K2NybEZTVUcyZHRPN2loeWQvTmJRTVdVMzkrR1ZjMitk?= =?utf-8?B?RDFKQUVUeWZsWDVyY2VVL3VWUUVHTzZmWXNETDlVZjBsREVmZFBLMDFMTENp?= =?utf-8?B?NW9UaVBXNUY3WlJDMGRYT0NpMWs4UUJLVU02ZzRidUpsOUZKdEQrZitncXZw?= =?utf-8?B?NDBSSTN1cUtHWEx3VGtHUjJ0a0FtQmoweXlHaWdaMWs1TS9SVVkvK3JickFm?= =?utf-8?B?cHpQL2dtZDZiZ010NjF0NkJoUmdmSGwyaGxrSHU0UlJFVnVKLzlEZlY1QnlM?= =?utf-8?B?QWxwdEdteHZPYkJxbU8yOVRuTWp4bFpOd2ZSdWp6RW5IbFA0ZkxFb0E4cW4v?= =?utf-8?B?MUxqU1IrWDVyZFZubERYTEw4VTJGY2tkTm5mNnRTd1dITzRrZFowUXczOTlF?= =?utf-8?B?N3N5OGFVWVpwT3Nwd0RkSDIxQ1VWNXJKQUVGdjJNcXRraE1mUnJvMEpGMUNU?= =?utf-8?B?MVZwbDh3cEdpbm51SGdXU1E5dG1kRXJSSnZLTXM1ZEhWOHY2R0tGdjZTQy9k?= =?utf-8?B?TGRlL25XTHdWcWsxend4cm9Gd0xRMFBSKzlrY2NNWFJ3ME1jSkU0czF4cml2?= =?utf-8?B?dnZpZ05vTkVIbHpqWmtsSCsrUG1WdXkxcXdUQU5tUE9tcnZGdVdCRURDdVhw?= =?utf-8?B?MEZqQ2tpMjFxMmk2RTdqYUYrUlBMUEZIUDZGN0FQbjFsSmdFKy9oQW0rOTli?= =?utf-8?B?MHBubEFld2E4akdEZzBkdGhTOHZHM2NsV2VEdElMaXByL0ZBK1dBWlRzYml3?= =?utf-8?B?SkU5QWVyWDdiU2dSSVRCY3RaZWR6a0lQcjB0NmY5TDZ5eVQrN3ZlMkc4Wldi?= =?utf-8?B?VzBSS2RsSzF4eEhpZk5iMkc2MnlNN2s1NmVPYzhENVNXSlFkblpoV3VwRmY1?= =?utf-8?B?N2IyYmlRWjVITkRtMWVlTUZDSHdxWG1JQnh5cExKZldIQUlMTjV0cHpRTUJO?= =?utf-8?B?TlVXUmtCZkNjQXd1bDZLVHJpeXJOTGxrekVFQXRrL3ZHZGVkaWhvNFl3TnE4?= =?utf-8?B?WTAvRlRZUFg2K3BqK1BYVXYwTGpQbW5TUjhaWDEwaXNTMW1nYkRYbkdSUTBL?= =?utf-8?B?L3VYbTAyYXlRaXZ4Y1JpUW02dDN3b1JES3BsRkpIcHdKQnE4d0VlVmhPMlc4?= =?utf-8?B?Y0RRdTlTWW9NTWg2ZDdGbCtaMEYwMFZpZGxnT1B2U21GZTU0aXpGeE1LNWw4?= =?utf-8?B?V0MwNkh6Vlhzd1kyaURacHBMTCtraDJFMXZTMmg3TUo0UXlaNVgvZjA0c0pX?= =?utf-8?B?NzVhMkRsNDhkalhTWGlQRUxtTGdiWGI0dEdLYlRYaXovOUNyMWlRRS9EOXVy?= =?utf-8?Q?ynz3OscOtT1OjDircyMIWEqCZJgVvgbzVdrA/TzVtSjF?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2e40712c-df61-4af6-eeae-08de149d8082 X-MS-Exchange-CrossTenant-AuthSource: BY5PR12MB3986.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Oct 2025 14:39:47.1390 (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: jjsaR+GFwVDGwZGDCWjdw/XGTii2NMXMOf3mu32UxHxVNGcuU2+oN5xjfOevSsJuCsQVXw2IxeoWqnxHUxKxDw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4168 The `as` operator is best avoided as it silently drops bits if the destination type is smaller that the source. For data types where this is clearly not the case, use `from` to unambiguously signal that these conversions are lossless. Signed-off-by: Alexandre Courbot Acked-by: Danilo Krummrich Suggested-by: Danilo Krummrich --- drivers/gpu/nova-core/falcon/hal/ga102.rs | 6 ++--- drivers/gpu/nova-core/firmware/fwsec.rs | 4 ++-- drivers/gpu/nova-core/vbios.rs | 38 +++++++++++++++------------= ---- 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/drivers/gpu/nova-core/falcon/hal/ga102.rs b/drivers/gpu/nova-c= ore/falcon/hal/ga102.rs index f2ae9537321d..afed353b24d2 100644 --- a/drivers/gpu/nova-core/falcon/hal/ga102.rs +++ b/drivers/gpu/nova-core/falcon/hal/ga102.rs @@ -40,11 +40,9 @@ fn signature_reg_fuse_version_ga102( engine_id_mask: u16, ucode_id: u8, ) -> Result { - const NV_FUSE_OPT_FPF_SIZE: u8 =3D regs::NV_FUSE_OPT_FPF_SIZE as u8; - // Each engine has 16 ucode version registers numbered from 1 to 16. - let ucode_idx =3D match ucode_id { - 1..=3DNV_FUSE_OPT_FPF_SIZE =3D> (ucode_id - 1) as usize, + let ucode_idx =3D match usize::from(ucode_id) { + ucode_id @ 1..=3Dregs::NV_FUSE_OPT_FPF_SIZE =3D> ucode_id - 1, _ =3D> { dev_err!(dev, "invalid ucode id {:#x}", ucode_id); return Err(EINVAL); diff --git a/drivers/gpu/nova-core/firmware/fwsec.rs b/drivers/gpu/nova-cor= e/firmware/fwsec.rs index 8edbb5c0572c..dd3420aaa2bf 100644 --- a/drivers/gpu/nova-core/firmware/fwsec.rs +++ b/drivers/gpu/nova-core/firmware/fwsec.rs @@ -259,13 +259,13 @@ fn new_fwsec(dev: &Device, bios: &Vbio= s, cmd: FwsecCommand) -> Re } =20 // Find the DMEM mapper section in the firmware. - for i in 0..hdr.entry_count as usize { + for i in 0..usize::from(hdr.entry_count) { let app: &FalconAppifV1 =3D // SAFETY: we have exclusive access to `dma_object`. unsafe { transmute( &dma_object, - hdr_offset + hdr.header_size as usize + i * hdr.entry_= size as usize + hdr_offset + usize::from(hdr.header_size) + i * usize:= :from(hdr.entry_size) ) }?; =20 diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index ad070a0420ca..943b0dac31df 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -361,7 +361,7 @@ fn is_last(&self) -> bool { =20 /// Calculate image size in bytes from 512-byte blocks. fn image_size_bytes(&self) -> usize { - self.image_len as usize * 512 + usize::from(self.image_len) * 512 } } =20 @@ -439,13 +439,13 @@ fn from_id(image: &PciAtBiosImage, token_id: u8) -> R= esult { let header =3D &image.bit_header; =20 // Offset to the first token entry - let tokens_start =3D image.bit_offset + header.header_size as usiz= e; + let tokens_start =3D image.bit_offset + usize::from(header.header_= size); =20 - for i in 0..header.token_entries as usize { - let entry_offset =3D tokens_start + (i * header.token_size as = usize); + for i in 0..usize::from(header.token_entries) { + let entry_offset =3D tokens_start + (i * usize::from(header.to= ken_size)); =20 // Make sure we don't go out of bounds - if entry_offset + header.token_size as usize > image.base.data= .len() { + if entry_offset + usize::from(header.token_size) > image.base.= data.len() { return Err(EINVAL); } =20 @@ -601,7 +601,7 @@ fn is_last(&self) -> bool { =20 /// Calculate image size in bytes from 512-byte blocks. fn image_size_bytes(&self) -> usize { - self.subimage_len as usize * 512 + usize::from(self.subimage_len) * 512 } =20 /// Try to find NPDE in the data, the NPDE is right after the PCIR. @@ -613,8 +613,8 @@ fn find_in_data( ) -> Option { // Calculate the offset where NPDE might be located // NPDE should be right after the PCIR structure, aligned to 16 by= tes - let pcir_offset =3D rom_header.pci_data_struct_offset as usize; - let npde_start =3D (pcir_offset + pcir.pci_data_struct_len as usiz= e + 0x0F) & !0x0F; + let pcir_offset =3D usize::from(rom_header.pci_data_struct_offset); + let npde_start =3D (pcir_offset + usize::from(pcir.pci_data_struct= _len) + 0x0F) & !0x0F; =20 // Check if we have enough data if npde_start + core::mem::size_of::() > data.len() { @@ -737,7 +737,7 @@ fn new(dev: &device::Device, data: &[u8]) -> Result { .inspect_err(|e| dev_err!(dev, "Failed to create PciRomHeader:= {:?}\n", e))?; =20 // Get the PCI Data Structure using the pointer from the ROM heade= r. - let pcir_offset =3D rom_header.pci_data_struct_offset as usize; + let pcir_offset =3D usize::from(rom_header.pci_data_struct_offset); let pcir_data =3D data .get(pcir_offset..pcir_offset + core::mem::size_of::()) .ok_or(EINVAL) @@ -805,12 +805,12 @@ fn falcon_data_ptr(&self) -> Result { let token =3D self.get_bit_token(BIT_TOKEN_ID_FALCON_DATA)?; =20 // Make sure we don't go out of bounds - if token.data_offset as usize + 4 > self.base.data.len() { + if usize::from(token.data_offset) + 4 > self.base.data.len() { return Err(EINVAL); } =20 // read the 4 bytes at the offset specified in the token - let offset =3D token.data_offset as usize; + let offset =3D usize::from(token.data_offset); let bytes: [u8; 4] =3D self.base.data[offset..offset + 4].try_into= ().map_err(|_| { dev_err!(self.base.dev, "Failed to convert data slice to array= "); EINVAL @@ -818,7 +818,7 @@ fn falcon_data_ptr(&self) -> Result { =20 let data_ptr =3D u32::from_le_bytes(bytes); =20 - if (data_ptr as usize) < self.base.data.len() { + if (usize::from_u32(data_ptr)) < self.base.data.len() { dev_err!(self.base.dev, "Falcon data pointer out of bounds\n"); return Err(EINVAL); } @@ -886,9 +886,9 @@ fn new(dev: &device::Device, data: &[u8]) -> Result { return Err(EINVAL); } =20 - let header_len =3D data[1] as usize; - let entry_len =3D data[2] as usize; - let entry_count =3D data[3] as usize; + let header_len =3D usize::from(data[1]); + let entry_len =3D usize::from(data[2]); + let entry_count =3D usize::from(data[3]); =20 let required_bytes =3D header_len + (entry_count * entry_len); =20 @@ -923,7 +923,7 @@ fn lookup_index(&self, idx: u8) -> Result { return Err(EINVAL); } =20 - let index =3D (idx as usize) * self.entry_len as usize; + let index =3D (usize::from(idx)) * usize::from(self.entry_len); PmuLookupTableEntry::new(&self.table_data[index..]) } =20 @@ -1092,8 +1092,8 @@ pub(crate) fn ucode(&self, desc: &FalconUCodeDescV3) = -> Result<&[u8]> { pub(crate) fn sigs(&self, desc: &FalconUCodeDescV3) -> Result<&[Bcrt30= Rsa3kSignature]> { // The signatures data follows the descriptor. let sigs_data_offset =3D self.falcon_ucode_offset + core::mem::siz= e_of::(); - let sigs_size =3D - desc.signature_count as usize * core::mem::size_of::(); + let sigs_count =3D usize::from(desc.signature_count); + let sigs_size =3D sigs_count * core::mem::size_of::(); =20 // Make sure the data is within bounds. if sigs_data_offset + sigs_size > self.base.data.len() { @@ -1113,7 +1113,7 @@ pub(crate) fn sigs(&self, desc: &FalconUCodeDescV3) -= > Result<&[Bcrt30Rsa3kSigna .as_ptr() .add(sigs_data_offset) .cast::(), - desc.signature_count as usize, + sigs_count, ) }) } --=20 2.51.0 From nobody Sun Feb 8 02:08:33 2026 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11011061.outbound.protection.outlook.com [52.101.52.61]) (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 E483A2264B0; Sun, 26 Oct 2025 14:40:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761489609; cv=fail; b=Zy4F2a6yT4u/ip4K8L3Xzmn9/yw03kHqM3MGXyko/pe2pCkFuH4oLuDP7mA47kAp2UtxVy3LTQUGGfq+uxRzSyllAS+zpwqY1P31crPsKstSRPH+FgmeyqooJORc8Q+U4AZuu9Iy9oO3bMsbAyplKUnxtxBhPklFlW66GqmgVlw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761489609; c=relaxed/simple; bh=xxB6NT09s6TrMkdhGF/Rt7AOZ9AwY/VWmUVxGkpF7Yg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=YESKsoekwuVRSLkSuhSahtZA/z1YPM8BaAKy+TGCZ9K+f3UHTfKKdlxlYL2itRQYAwnXUopLMPG50alFbo58q1EH+0ysY5DwlsRdwHvWA2OQ2IIC9s+jCoFHoq/9KHBuLgs64MzhyvOAVc1lqfe29ZPKFNa+f7ToWwG9N8P8HBU= 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=e+00Afct; arc=fail smtp.client-ip=52.101.52.61 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="e+00Afct" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yX8u4U0mnlwbs3hA1lhouKuAV4DJX5N159sisZnFnIrIfwhmIRA1U3y13L4QrnZTU/YEthUFfN5jyLTwsxqOa3tRAgpWv6EdS4yJX0g1khOhFltz7uOmNAd5HqrPyaNllgirv6SQslJa/JH6892wRIHi7HJraJmQxJAUIvnvFk09cKoIv/yFQTpYTuJ2XPViMnPLDVSi+tQf38M8/X4ZfRw47FHkN4U89ZI0BNJj+nIqZh9gNashReRUL6xbZrdJkw91HDprpEGRXKwS7PaB6kp3RnjhhwSrCWC19WKCFbC153jnzqO1tz1zKHZasoWsd48tl3bxCvF7gdJ+lRA2qQ== 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=DdNpl/3hATbKDSDOYnLZ+PPxhm79OueeoHqXbz88CoE=; b=rdjpYBDO2+hrJKX+cKbjijuX45LaB5o4grrpZ1COGGXCraeT8KGB7MVbm+OUHNJQ7dCbDRUJ/IFUNeqApGqga32lZixHVTD4AnuyeY96ecpQDMsiYo+1b9CCwnrBNUOwbY6Q6d/Jj/kqagJKwEa6DEGfxGw+kvciMdQzL2wtxxbF3JoD37cqgh7zXGv6oRskZr+ycgO1eWwxS4yqNebiUxGaXP0dR0gPsFOpLL87GokheTLCf/ugcJG2B/3aboyZAxXWuT7hs/NxCqf/E8BQ6Ixw8McXMkjL5IlcT4HHf5pqUlKoCi/2L6dOQCujrw3WYCgT+FN6ZCPTqlvzLJXZUA== 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=DdNpl/3hATbKDSDOYnLZ+PPxhm79OueeoHqXbz88CoE=; b=e+00Afct1jBtiKPzhpEX6r1BzVNURelhNOuX1kfix3iiB2q1ctsNnFkE/bpUZsMZ9EGa9xYJfAsBeNkQoubI+mGCA1jtyMVcY7hikIWGKw/8y8TOpZNcjiv+wtwDuvQFh6+3ufh5P+Cz45WJAQezUOKZM4WABfhcBi6OXSA5xDqRPff8qamKtY8vZEm5ub5JOkFg3pV2J50a5kLQLkwT/zC1NEgPeAdaDP+uBDcgebxtHHvolL45Znta95W1yEU4kTG6qCZts45qhXpGYcsJv31rrdjkwUmG5yPiooIdyLOP+sOzIfBwzAMVT7lv1L/ixkpyQOBxUYcaBrCrtAkacQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from MN2PR12MB3997.namprd12.prod.outlook.com (2603:10b6:208:161::11) by CH2PR12MB4168.namprd12.prod.outlook.com (2603:10b6:610:a8::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.12; Sun, 26 Oct 2025 14:40:05 +0000 Received: from MN2PR12MB3997.namprd12.prod.outlook.com ([fe80::d161:329:fdd3:e316]) by MN2PR12MB3997.namprd12.prod.outlook.com ([fe80::d161:329:fdd3:e316%4]) with mapi id 15.20.9253.017; Sun, 26 Oct 2025 14:40:05 +0000 From: Alexandre Courbot Date: Sun, 26 Oct 2025 23:39:07 +0900 Subject: [PATCH 2/7] gpu: nova-core: vbios: remove unneeded u8 conversions Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251026-nova-as-v1-2-60c78726462d@nvidia.com> References: <20251026-nova-as-v1-0-60c78726462d@nvidia.com> In-Reply-To: <20251026-nova-as-v1-0-60c78726462d@nvidia.com> To: Alice Ryhl , David Airlie , Simona Vetter , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Danilo Krummrich , Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: TY4P286CA0102.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:380::16) To BY5PR12MB3986.namprd12.prod.outlook.com (2603:10b6:a03:195::27) 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: MN2PR12MB3997:EE_|CH2PR12MB4168:EE_ X-MS-Office365-Filtering-Correlation-Id: 078701c9-dd6d-4938-7903-08de149d8d1c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|10070799003|7416014|366016|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?aXk1VDJYZlBVZ1hhMy9rS1F0WWJrN3Btd09zMEh3bEJIYS9oN0xNTTMwcTlL?= =?utf-8?B?YXhWK1dtSUFIamZZSHc1MWVFc1JvemFJMVIvYUJiZzNCcXRBUStla09Iejlz?= =?utf-8?B?TmtsTTFXZjJtUllYbDJMaEFoUjVzdkxUYVJBQ294UTV6cVpSMjBiaWtFVGk5?= =?utf-8?B?cVhickVvN2dsZFRReWVOUG1Vd01QNElnbXExc2tsVlB1b2MxYm42Znc2MjFo?= =?utf-8?B?eXhKVHprNUptUzBjSUFKZzdBQ1FhUC9lYVBKNXU4TG4wWmtpajcwNWNFcm0z?= =?utf-8?B?cmdWWjMyRDY0WjREdFVnSW01N0Y5RUsybzNlY0UyQXE2aklZKzRtUFVTUHpL?= =?utf-8?B?RHNPRzdlY0VFVGdhdFlXY3A2WTVBU2FLVDhScDNoSmFWcVQvQUcwQXd0Vklx?= =?utf-8?B?SC9NSzBRMVQrc3BYWTVSZ2hpeTVSMU5kUURwQlJQVWZmRnkvTWpCdkRzaUJ4?= =?utf-8?B?dXFVTFBRdzNiZ1FUUS9IUXF2anRCcTdoT0NYcnlxbzlpTlNxcENPUjAxVXZq?= =?utf-8?B?N0QvQW9qcm5pWnpjWnRYY1JlcXFNSDZ0ZGR1VC8xSnFlOEpoTUY5blFJMVFZ?= =?utf-8?B?cjlINWRQWWliTVh6bnZ1UnBjU3FsM2x5K0pvMGhQcEpUVzFpWG84YjNKLzFh?= =?utf-8?B?THNZRHRRMkhkcVB5UEJmVWJQY2h1QWhsNkNycDI2SCtFWDNXY1VIVUgxbmhT?= =?utf-8?B?cnVHK0J4Z3d5MXhaWGxqbGN0VUNtTjdCMWNmZEh3WHlMa0twRFk3Tzk0VGR5?= =?utf-8?B?L2FiMDdLMEhaWm1aSXphZStvME9kRFQzTFBOZkRqZWxFQWxNaWtpekwwV1JF?= =?utf-8?B?RXV0VVdIMUxLT1NWV2FIYlpjU1IzbWc5Y2lHSVVib0dHK25MaEdrSllDbGNl?= =?utf-8?B?bzEzM1lCS1p4cGM4U3JiLzk0WDJQUkg3elNqVU9DeHR5N3FiMEFqaStnQzVn?= =?utf-8?B?Y3kvTlZ5cnFoRktmaGdadGVRbFlZR1Z0KzhFck9VeXlJQkVtNXI3bHJpb0FJ?= =?utf-8?B?dFpuUEcvbnVLNWJoV2IyZUl0VHBmM1R2dHlzd2N4SkY2WkRkWkF3b21idG1o?= =?utf-8?B?SDhIai9xUTZzSVg5L1dRQkxEL3I5OWl1TGs5cktmRVB0TVRZN28yNTNWSFM4?= =?utf-8?B?TUVHUk9WNlJFQUt4aVNLZWFqZnRLc0JCM0VkeGxXVnNuYVpxeGlva0kySEpH?= =?utf-8?B?amtFOW5EVHRaTDJXSVRXR25sWFN6VWVET0pUZTJQS21aL2tlVkxjYWgrc1VG?= =?utf-8?B?ZWRYOTJ5VFZiNTUyRlFZbnBkVkdFa0d1eWVZV1VVWTBjdkJvL2lLS0hjQlFz?= =?utf-8?B?WVc5dzQ5QXhBY0dEK00xbWRXZmVkWU9NVTNvM1ZwL012YTBXamYxamVlTWhZ?= =?utf-8?B?OU1ZSFRXV21RTG9kd05lZm8xVTNCRGJhK3IrK2xxUjVGRTRuTG5Db1NQVVNJ?= =?utf-8?B?b1JHYWNHcTI5ZlJYY2plUmpUSXlzOFZhM2hpU2ZZQ0NtN1M0cktZSERSQUtN?= =?utf-8?B?Nk8yeWtNdjNoL0tjc2tFdUZ6WjNnc1RybThOZHNKTmVpeGY3SXNwODFVUU9Q?= =?utf-8?B?Snd5M000MUZ0ZG9GZnhJNTI3bEtpalpLMmdZUnlYMlBQM2ZwWlN1MHhJUjha?= =?utf-8?B?VURCa2ttRXh3U2J3OE16eGcxMFpsMzdSRFZhRytaR1FJOGw2UE1ZZjBpWjJL?= =?utf-8?B?amkrdS9MVGtmQUZhSy8zcWRIY0R0cUFzelQ5cmVZc2Q5Q0huUDloU1p2OGlY?= =?utf-8?B?elo1eTZMN083VUlWbnh5bWNhbHh0d2d1SzZHSm02eGlZeThGUUMwWGlwUDFG?= =?utf-8?B?Z25NVzFKZkd6OXp0SWRhTmZEUFZFbDFrdTRXaU1SQmhZK3hWZFBuZkZVY0Fs?= =?utf-8?B?dHBtR2twRnh1NldXQkpkTzdMdXd6L0JwQW5ydFdLcG14QnYvTjFTQ0hGbjZL?= =?utf-8?B?d0pFMlBIOFBOclMvN2pXYlAwYW5jL1pKMnI5QnNzRHExWlFlS3FlRVJDb1Fh?= =?utf-8?Q?wx9KYca4P+PaEfyivAVAKLlV/qgc5g=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3997.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(10070799003)(7416014)(366016)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZHMzbTNtNkJQR3NiOWFqL29UbXFycEIyemdESHIra3ZEaVFsZWQ1ckVhVWRH?= =?utf-8?B?QmpPSmZBQkpZRTZVUzhXWjRrL3hxNUhMVE9CVkJsRlgvemxjZUx2NS9iK1NF?= =?utf-8?B?NGhNVzFUSGRSM3ZyK2J2SXVybEJ0ck54L0pXaTkxLy9SU1dCdTlMYWtxUmMr?= =?utf-8?B?RnhBUjQ0bU9lWDZHdXBYcTJXd3lBRmRJT2x4TXpVWXh3c2pZNXJtdmpUdGV2?= =?utf-8?B?VTNtei95NS9ZMjFIMU1tbnZMUEN1OHZIMzlZYnNhbk5pK1kyTW8xem5aalN0?= =?utf-8?B?dzFCQitqV0lVZTYzejE2QVNDYWpwN1hSY3locnhlWk1SaWJwcTdaZUYrRCtG?= =?utf-8?B?NE15Y0JaUjZEV2tOcU5rc0NLVnN6SXZzUW81SEttMWE5THF1Tm05ZDlUaTNn?= =?utf-8?B?RlhiTjU2TDJrWEJ4UlVITlZYM3g5MTg1RkxmeXhMVEV2WGpvU3krZE5OYzI0?= =?utf-8?B?aU1MTW5NMzNXVnRyL0hsaSt5ckhJYkNEQ0RHYnQ5aENHRVBYZWtPLzRON0dJ?= =?utf-8?B?SEVMZ2R4NjBHclBmd1VnRnNMVVF3S0VwdGVKMkJzdi9lVkFxOHROOTlzSzRZ?= =?utf-8?B?WjJ2d0FaSmRxdG9nbTBXZmd3T0ZJa0NCQXN1Q2xRbndWZGE0Z1M2ZXc3NEdJ?= =?utf-8?B?QWtaY05CQmVoZmQrL1NncDk4SGg5V0ZSTzh1KzVIQjhaYitNeisySm1iRkJk?= =?utf-8?B?a0ZFSmVRTzF5ZDhBRjJieGszcVYwT1JtYy9oRWNpWWkzZ3NvY0FTTWZ0bkxL?= =?utf-8?B?Zmpvckt5VUpOZmovWFQ4dlBLSGthQXIzR1l0a2YzbXFJcWVndHJoVGU2NHNS?= =?utf-8?B?MEZtVkN3WGhsMGcrNVBMRVNwQU9wSUpYYi9SMUVac0xxcE5TUkRHYkc3Z3kz?= =?utf-8?B?WWxqakxJWUw4WHVGWFJWSVVXTmtOZld6ZEl3bWlZeE5BOEV4YnJaNm40NVdL?= =?utf-8?B?WlFxbFZPV1l5a0YvMC9ZQXNWOG5GdEFoVnducytkckV6Q0NzbHNqMXZPY3li?= =?utf-8?B?dUJ3QTFsSG1jL3c0UUphZmZoeGN4UnlNOFN5ZXdENW9zL0Rad3B5cmt5NHd3?= =?utf-8?B?U3hzMjczWHZpdVlqNjI0WmdhRVF1em1XSWJiK1h6bkQ0amI5TEI5ZDFLZnVp?= =?utf-8?B?UDZvMXVnVDBvYjlJVFhIUTlnNU9vYzhKb2pFRlo5MzV1Qk82MDYzUHA0Q0Zh?= =?utf-8?B?NFpucGl0a0JjVEs4UVdxbnk2YmlyUjIzdG9KS3JDV1hNaVZFZkU2UHJaZ2Ew?= =?utf-8?B?cTMvc0RaaUFlOE11L3RKVDc2aDZTem5DRHV4OU9TSm5Kdmp4dU11UDdWK0pj?= =?utf-8?B?SW5NQUo4R1ZwcXhoUmo5eTFXakpCa0Q1WCtwZU8xSlNYaDdxY29LaVNVWnA1?= =?utf-8?B?anVvQzI1clV4VlFwNkJSWGZDNWZKVHErTWtSSGt1T1VlU1pBa1BnS1g4aG04?= =?utf-8?B?YlFtc01IT3BXUVg3UVJkU2ZUeGVFY2o4NGl5MnlqN0EzS0JXZ0xUTmdLN3A1?= =?utf-8?B?M1RHLy9TNklpUTVmYm9LNUsweUhycmZGRjFhSlJYM0F6b1ZBclp2eWpNUC9M?= =?utf-8?B?LzNLYTJndGhnMHB2YTdOTGJlRE91MW8yZTBQSFRzRXkxaUlsRWJ4aUx3M282?= =?utf-8?B?YWhhSkEvbEhhM1E1dkdxNUZjTVk5YUI5b0tXazFKc2V3YktMV1N5L0hwQlg0?= =?utf-8?B?cFRNcHVkcFE3cGJ0R0RyRDRLNnJvWDFuZFFzbWN6YW9nY3hpU1JvOEhMaXhr?= =?utf-8?B?V2NyRFl4TVNtcXpreDJTQmhHVEtpRHJKN3pRaUt0L2U4YmJWeVhYNkVid1Nq?= =?utf-8?B?SDdObGg5OWlzdDMvWFFsOTRrUGt3K0pRV1BnRGtPeUNmaUpUOXY3V2JPWE8y?= =?utf-8?B?WTdUdWZ2TldyMXBSbTMwWVZ1ZEVKQU1HQXA3cU9hT1BURzdXNERaK1B1MDdT?= =?utf-8?B?M2Y1OVphMEppTGpXdmtoSzJwcWdhVWpLZGJWSFhlYmFCTVFxZjZZN3Y0THpl?= =?utf-8?B?N3R4M2tnVkVkaktYYTJ3c2J5TkNVVU15R3FNMGpra21Xd1gwTXZKVGFZMVJI?= =?utf-8?B?Q2p4djFqby8rUDdoQ0tneVgwdHZIN24zTHdKeGpMSm5rRnNxMnkyWHcxOWJJ?= =?utf-8?B?b0NCODhSSzZlM3luaVNibXF2VUkyMWc2UVFmb2RCZThzOXM5bG55OExtK1Uy?= =?utf-8?Q?z83lBwHNIuXz9bPSTzKQKRDXOsPJ4EdKL/KtZTAYPVTz?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 078701c9-dd6d-4938-7903-08de149d8d1c X-MS-Exchange-CrossTenant-AuthSource: BY5PR12MB3986.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Oct 2025 14:40:05.3666 (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: KR5U1APulowSTJy+KRAfHBkCZ8CLPGEJ1pz7AYKk9FoQ0wcf9c06DFny29UixK6aHSvmFkthAOU/sRhfpVUD2w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4168 These variables were read from the u8 array `data` and converted to a `usize`, before being converted back to a `u8`. Just re-read them from the source to avoid using `as`. Signed-off-by: Alexandre Courbot Acked-by: Danilo Krummrich Suggested-by: Danilo Krummrich --- drivers/gpu/nova-core/vbios.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 943b0dac31df..dbe0d6e4a015 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -911,9 +911,9 @@ fn new(dev: &device::Device, data: &[u8]) -> Result { =20 Ok(PmuLookupTable { version: data[0], - header_len: header_len as u8, - entry_len: entry_len as u8, - entry_count: entry_count as u8, + header_len: data[1], + entry_len: data[2], + entry_count: data[3], table_data, }) } --=20 2.51.0 From nobody Sun Feb 8 02:08:33 2026 Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azon11011049.outbound.protection.outlook.com [40.107.208.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 5A4F2245028; Sun, 26 Oct 2025 14:40:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.208.49 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761489618; cv=fail; b=gFZ9ksJvRqKM8hG3HV/qLN7R8+tnxRmDRI/F1PLIFkHRNjWyuV+g77YxTTI1RoSBrrj6q3C8N7vOn6l7q1tq95K0pbDanwxTwXBh6LdbpWBr2CBCY5lKE5fNEYvOglo7Gusf1rPX9qTSJ2xUCOI+UYX41evT+zxz0MUIb44jDEM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761489618; c=relaxed/simple; bh=mrbpQMjJ0Pi/dAG58sWxQpTK+y+chUvnRb1tPC8YP5g=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=lzHdRVroeQ5zQfkENUVj2Xd4Nystkofj14kLLgFpjXTW8aK1mj2Dd+iUUFzQir2y1Cs5pU+5E3jEDv2kkobvWveIiIgdDNx6N+1sGNf3JfIMUauemQRyRorDYAo0tkTJQXJzqO3Jn9UAy42VEbT5kpDMohQ+QX/QsohmFS197A0= 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=deFjAz3I; arc=fail smtp.client-ip=40.107.208.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="deFjAz3I" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zV9HRwe3yxz1y6vbJ7KMqu3Jaa03WMpweerBbrNegratxUV8W1s9bSd8j5Irr9nvEQhfPP49LsD66vVjhtj4NIieQRQMHzHs5VbH39++J46mpvrQHGXzIWU9otFI0hPZJXr6gAIZLmBYzzsiUZsaYB8MhJw3tw0uT1pSukDzL4DZSty/mn23WpXhMeQfoqUItyvmqQ0HPuOax/MDlixl/KVJxnCuVyhrTnPkbhW03i2yq5Gf+9DT105tKIiIc71rRUjv5NRiimhys8QvS7+rU1qfO+gkBinJ6h5XXbJWt+SCzhcbRVNiVJBoTahYwtkf8FAwrJubGusJq+5IqlMAYg== 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=2awSFNrIWzqvkLKFSDgZK8UM0seFeut1b3TjnjChETI=; b=EvhvnfkP9i4OsrvEjnl1bbHK03zYLeGBxsoDaMaOLTbIZ9laULs36qwit+dC7Ob3eyZhHEy4rqgjAGK9HttVTYjgM17pdhGPkDjtskLhwzj19AltfAQe4lZod/GYwHKnw8xzho3JAiUhum/YVINlKIkhARtipsEIZ2lGcI8SDj9RwrS/Ddp7ZHfd8bfVSQnJo3qk/I7urXnxjR/m9+egfj7oVNGdYLCE3Pp1cmMLXc/XxRU1PhWf/mMtUJVmob9bcg9JiPxqtJJHCxTAg1yeVKjDQ9aDKg/sImatUpNCzHIojROe90HHsSj7n/xvFTNftXAaRlguCg/V19i2LtIYgA== 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=2awSFNrIWzqvkLKFSDgZK8UM0seFeut1b3TjnjChETI=; b=deFjAz3IWwrd9xEdkPbgYRURqGlW0ZijgA0XdkUM6vvIpOP4yhVV9dqTchL05HYJq5A0tk5Cl+k89PVP+pHIIXWcXWvssjnR3e/ExStjFFmvh4T20SxalMjF57qLIAjAWRhUUFi5+3UWRjnaDgUtQSOOOkLRPsjHYnHmP8WfcBffw7XJOD6PECchem3FJTZSGn4gtlnIUBfpWgdql/NF1wtHeyRpnh8Fth6d91dL8RSaxBx0HMRjd7ZH9HZGjV5HPicDMZrkHzA0SVEj4fI5xA0XGA3jhLnnvQQyI2L+eH7efnhza+NHt3+ite5h1lyBj5kCXgnZbUYamJmxElyJvg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from MN2PR12MB3997.namprd12.prod.outlook.com (2603:10b6:208:161::11) by CH2PR12MB4168.namprd12.prod.outlook.com (2603:10b6:610:a8::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.12; Sun, 26 Oct 2025 14:40:15 +0000 Received: from MN2PR12MB3997.namprd12.prod.outlook.com ([fe80::d161:329:fdd3:e316]) by MN2PR12MB3997.namprd12.prod.outlook.com ([fe80::d161:329:fdd3:e316%4]) with mapi id 15.20.9253.017; Sun, 26 Oct 2025 14:40:15 +0000 From: Alexandre Courbot Date: Sun, 26 Oct 2025 23:39:08 +0900 Subject: [PATCH 3/7] gpu: nova-core: vbios: add conversion to u8 for BiosImageType Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251026-nova-as-v1-3-60c78726462d@nvidia.com> References: <20251026-nova-as-v1-0-60c78726462d@nvidia.com> In-Reply-To: <20251026-nova-as-v1-0-60c78726462d@nvidia.com> To: Alice Ryhl , David Airlie , Simona Vetter , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Danilo Krummrich , Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: TYCP301CA0032.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:380::15) To BY5PR12MB3986.namprd12.prod.outlook.com (2603:10b6:a03:195::27) 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: MN2PR12MB3997:EE_|CH2PR12MB4168:EE_ X-MS-Office365-Filtering-Correlation-Id: d04d2ad2-ec33-46e1-a2ff-08de149d92da X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|10070799003|7416014|366016|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?bWpqRk9WNmU4d3NSTTFHTERSZll0SHRNUFZUSTcxdC9VdmpJTWNSckVWL2tU?= =?utf-8?B?SUNzVk03aGF0a0ExVlhaWm5mMEJibWxySFFyUkFTQ09ERmIwdTZZWUJac25E?= =?utf-8?B?U1JpVmFSNXZaeFpKeFRKRUpXbmExTE5LLzR6Mm54QVFpYjYxZm1YQ1dkelpq?= =?utf-8?B?c28yZUR6Wm45TDFYS2UwRVdYaGlHWUlBVyt6WE4ra0hnbEVMcFlVcER5YmJ4?= =?utf-8?B?OW1lWE92WW5udU02V0lDbGhtNWJIMXBkcTcvODZnaDdIalZXZlpCMFlnUTRI?= =?utf-8?B?WmlJMDZZb09nU0VYdHEyYnc1M2diVW52QkxtQkRHMVFFYXd1dFNXSDZrVThm?= =?utf-8?B?enRyV1BMYlZpTTUxMnFMSjgxZ2NSVUVuZURtQjYxUXdIVGl5MWl3VjlCWS9O?= =?utf-8?B?YlhLNTRPTnBBOGRyaEtPamt2ZE02WEVWNmxmTFJHd3NQTnFNZ1BMNWxPakpQ?= =?utf-8?B?a25jM0NaTEFtUGFFaFZTelA5ejE0VkZ6Nm9pdGIxT052TVlkcXl5Nmo0dStT?= =?utf-8?B?YmVpZTBNajhXU2xTRnVRY0FBa1kzNWk2M2dHM25GNXNoUmdnbXYxK1VtaVI5?= =?utf-8?B?NXdQc3JpRDM0MDczS0YwbytTYWZITnBTb3gzRVQzWVl5QUVDNG53QU01UUQy?= =?utf-8?B?N1Z5TEVPejNNODFReTZudll3dkpneEtqVVNxQ3hjSGNWVXA0eTdIcUJUb3Er?= =?utf-8?B?bjhvQmp6Vms4MmxiVWlGN1FxYm5KMEpIODRWTTZvYUpERzEzWXpPZi9YOGhh?= =?utf-8?B?S1JZb0JRSGFKWXkwVjJ4eEx2R0I3QTJaSFI3MzNDOGowM3A5S1dRY1p2eGVE?= =?utf-8?B?VWVVK1F0dUZBdUM5bDd0UXNnNGZPQi9pR2lDT3FvQi9xV2Q1Z0p0N1piQVRy?= =?utf-8?B?QktqbHhSVlBqL3hVa2ZWMmxmQ2dMQklobGJqb0t6b1lGSHcrVjZFL3VtK2ln?= =?utf-8?B?Kzk3R3FiWTJaMUtWT0RSbmV1aU16b3NaWjJXUmxoM0JVRVRROFpjMHZoMXFP?= =?utf-8?B?clIwcm14dDh5RlcvbG5rUUVXRHRGUDdybkJHQ2VTNklEbE1LaFZLNkUvcVZV?= =?utf-8?B?N2Q0Ym1YYi9Ba2daSFFMM0EyVmxRcUx2UWh1dW5UWEt4VjJacWVDaVk3Ky9a?= =?utf-8?B?bngyS2F6N2VmbVZqenlWanY2ZWhSd2ZvMDB2VmRUM0wzYWp6R2E2ZUZLTGcx?= =?utf-8?B?cUs3U0daTG52c2U5dDdiTFdSR0ROUmhHZ1krZWpwWUlNZ0MwZ0VmRkg2NjNB?= =?utf-8?B?NE5qVnYyU3VwTk9oQmFBbnhqbWVoMFBOYnovM2tsbmNXMHkrSGtuY1kvSzZS?= =?utf-8?B?VFk0dFVjaGkzRFhIek0vMmlzck1iSmlKRm5yZzYzWndRT2gxUzlBZnNEQ3I0?= =?utf-8?B?bVdoU0Vsa0syK0ZVOUF4S3h4Y2tNdkVoVjFGVGY5NGdQWXc3Q0dyTDhsMmtF?= =?utf-8?B?bUxyWmJWQkFkKy9TNFp6SkQrbFlFc3ZrTmlPbmxaaUNuRlEwV09vN3J0eUJV?= =?utf-8?B?L050Vkl5QUNlc0NUdkxZS3VWQ1pYUUw0R2luSWxxWldzTFBuT1hxdGVRdE5I?= =?utf-8?B?dkZ1dDFML0F3bUtDdDAzcDB1T2VOQlRaR1hXWXFHNHdvZkNJRmpjMjdVL1lp?= =?utf-8?B?c0FNNVkvKzRzNlhxTCtnTXZ3azRPNGxIdFZDTEsyRlEwczYxUGNDRTVleTcz?= =?utf-8?B?MkV6SHVyMTBrTkVlODN6bW1qbnVkSGswUXZvelV3RzlsQU40SkJEV3BrTUZq?= =?utf-8?B?RkxMZ2VZWFVEWnZTSGowZEF6RGhkbkVMVVczRE5CaEpWZnBqSDR3cjJKWmpP?= =?utf-8?B?R3dicGsyc0x5VlJpODJXTUE4Njc2VWEzdFNFaDhVZTJFd21POFU5dWcyZllj?= =?utf-8?B?SG4vbDVZY0ZoSFVXeWprVVFIV1VGak5EZHg4MGF5YlNtcHNrSWgrQ2NzcktK?= =?utf-8?B?ckhOSTF1RVlCVnNpUjMreUhZb3hjSVBHeUw0c3g2eVZCeWQzdFBuZGdnbDZK?= =?utf-8?Q?WNrwH7J8a9zcHq9WPdpDRgNwcewxGI=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3997.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(10070799003)(7416014)(366016)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bXJpSEJUb20rY3J0K0pxT3JRazc3dVpIWW5iMmprMndoWmZtWG1YdzN5MTRI?= =?utf-8?B?NjRad2ZIaURjS014NHpiM1pjVHpMQ1lYcWFvbUdhQzZVbm1Qb2lPUlhiR1JZ?= =?utf-8?B?Qi9SeVlNdjMvblduQ1RHcXZrZlRGQ3hpOHFjQi9jYnE5SEtNMEhEZEEyWktV?= =?utf-8?B?N1dhT1lrd1ZsVndYdlZGNHEySklkckEvLzM2SzBrdlN1bXpmc29lVFZzd3dG?= =?utf-8?B?OTVSK1FvMGVBbTRmL0J1OE91bGV2U0plbUp0R3gzNnZiVVA3a0hMbE5VVWQ3?= =?utf-8?B?SVd4bDd0ajVlSnZzdlBhNXVZQjZ5TUJtVStpRjVtVlVTcFppWklIZXJBQlNu?= =?utf-8?B?TVFWUTZUKzM0dWs1Vk96bkpLSVVyUHYzL2FudHFCSVRJL0dER1RVN3BXYUFD?= =?utf-8?B?OEFEeW9QM2hzWkZLL3dBMnBHaFF6WlBHMkszYlBXLytKcVpHTUswTTFsWDZY?= =?utf-8?B?TDJVRTExMFM0ekNNbnQyZ0Z0cndTcHBhdFBESFFTNm9obC9VL0hhTm4rejh4?= =?utf-8?B?L0Fra1h1Q2tpOTVDdEZZM082N0lXR0hqNlRtUWRoZDRFSEFRa1NXTHVhQzB5?= =?utf-8?B?SS9NTWx5OUs5c3k1a0dObVkrM1o2YXhoekhWajNRd1Z1SW9VQ0QyL29mejRC?= =?utf-8?B?Z1ZadkVuTXpRTlUwZmdKT3B1Y2xKdUljREpIVkRtRGphaGdmcjJxc25qMEph?= =?utf-8?B?a3RDb05pMG9vblFSWVBENlh2alhIVEc5ZisrZUFKTmswSDFJUzc1bzFXcEdZ?= =?utf-8?B?aEUyMlBmOEs3NEVvS2FnbWZmMnFzendYUjJyTGJQMk55cGFLczVSc1FybDlO?= =?utf-8?B?M28xajljd0FCQjNKbjN6d0xsQ01UQzU1aFlWR2szUktPcklpQTQ2eVo2YkZI?= =?utf-8?B?azZpSGNVS2xMam5zRlFIWDJqZ3p3cCtaaUxGeU1UckdGbWxZWTdvQ0k0VnlD?= =?utf-8?B?THllamt4NW9xTDd5ZVg4TlNUVlpqV01CSHBBb2dDVVJyRWlYNmVNbmJ0MS92?= =?utf-8?B?WE8xNWJaL2hJdWg0ejVMNXlnWEJxMjVQM3NlUmVuUGhic3B4VGxoVG96cU5w?= =?utf-8?B?SjFzekI2ckdkam9CN2dBcjdHQlFaYmZaK2wxY29wVUNBc3htM1N1aFo1Zjk2?= =?utf-8?B?YlVkcjZjbTB4ajBmR2UrMFZnWTF2dzB3cW5CakpiNm8wZ2tyaGR0Ky96Zjcx?= =?utf-8?B?aHhXMmNhekphaWRtVWdRRDdZdU82Qm04Z0RUTTlhODZEV2owQVJWYXllZ0Ns?= =?utf-8?B?MTBDVzRiemhZTUVzY1ZZR1l4QnkzQnMrMEc2SStnZ1V4ZVZmdnpEVm9zNDVz?= =?utf-8?B?ejF4dTVNNEN4WXI1a0NQUHhzNzRmWkY1S3FYb3BHNjJCLzY3Y2wvZzZxR3JR?= =?utf-8?B?NHBld3oxUmFyb2VlQVZ3YllYaVVlaFFDUThHaytkdXFGTTJtTk1CR3I3eEpE?= =?utf-8?B?VkQ1d2VjaHlxWkc4L1F0YjBvQ3JtYjk4Tnp0Z01xK2VnZFJGZUdGcGVDVHNU?= =?utf-8?B?RGdseFU0YXhlYUpxbTFCQWFrQ1JDNjFSZWlQa0RyeFlkR3ZjbmM2YVJRTGZo?= =?utf-8?B?cUhHNW9hdVNmNU03dlRvVnY5WW5ER3hvd3FvMTZBd1g0RHQyczFVK2xaL0Mw?= =?utf-8?B?YitySXBNbmVHZGFNWFRST05QK0d3UUc4RWJNNWtCb29iZ3VjQTZMSGsyUWR5?= =?utf-8?B?VjhVM3hacHFQU0RrYUx2ZWhWUmpPUzFKd0RIQmM2ODhyNCtoZ013bFlzWGt1?= =?utf-8?B?eGx0bVFrNGZuZ0poalRDQVhLME1aeFJMREpzNUZmU1RUckpGb3c5cXNDbFY1?= =?utf-8?B?bU5aR3ZTM3ZzVUVYclVJc1ZKSEl3S1Z6M2JURnBURXQ2OW9qTVo0YngxMTJh?= =?utf-8?B?SWE0UUQ3MDduRnVBNEpSQ1pZaXIwOUFTczY4QlJ0N2FXdkpubzd3OElKWE82?= =?utf-8?B?dXA5N0tYWWV2eGdqYkFnNHNHOGlkVmJhVE13MStnZndRVFlxMnlwL3loSktH?= =?utf-8?B?M1pEZkt6YXUxbHV1SkRUYUhLUHlKWmV3RHI0b2ZxWU5YZ082V0VLdGFWWHI1?= =?utf-8?B?Q3VxTTVaUmVIVCtwNUNzWlhJRVFmeVErc3VtazFtU1kwSTdrc3RIclo5SmJN?= =?utf-8?B?eThsU3FWanBOM2xJTnlDaE1uZ3JaOG5HV3M1NTlRWUhXVStFQVkrQkZFWjIz?= =?utf-8?Q?ziK5vuguodpnBD1EjW/rtb3G7+aFICaGC0ieRen6y0xf?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d04d2ad2-ec33-46e1-a2ff-08de149d92da X-MS-Exchange-CrossTenant-AuthSource: BY5PR12MB3986.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Oct 2025 14:40:15.0155 (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: cZVgIcEDUKyt8P83yxk8FxUgWGABtZLsXVxR9Nc216P1nPjQle7xwURfyGMhiUnWE8Mb0371x9JeX7wxgOkqEQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4168 Since `BiosImageType` is `repr(u8)`, if can safely be converted into a `u8` but this is not obvious when doing this in the code. Instead, implement `From` for `u8` so the cast can be done in a single place, with a justifying comment. Signed-off-by: Alexandre Courbot Acked-by: Danilo Krummrich Suggested-by: Danilo Krummrich --- drivers/gpu/nova-core/vbios.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index dbe0d6e4a015..a521c0a4df0f 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -50,6 +50,13 @@ fn try_from(code: u8) -> Result { } } =20 +impl From for u8 { + fn from(value: BiosImageType) -> Self { + // `BiosImageType` is `repr(u8)` and thus convertible without loss. + value as u8 + } +} + // PMU lookup table entry types. Used to locate PMU table entries // in the Fwsec image, corresponding to falcon ucodes. #[expect(dead_code)] @@ -711,7 +718,7 @@ fn image_type(&self) -> Result { fn is_last(&self) -> bool { // For NBSI images (type =3D=3D 0x70), return true as they're // considered the last image - if self.pcir.code_type =3D=3D BiosImageType::Nbsi as u8 { + if self.pcir.code_type =3D=3D BiosImageType::Nbsi.into() { return true; } =20 --=20 2.51.0 From nobody Sun Feb 8 02:08:33 2026 Received: from CH4PR04CU002.outbound.protection.outlook.com (mail-northcentralusazon11013064.outbound.protection.outlook.com [40.107.201.64]) (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 15060245028; Sun, 26 Oct 2025 14:40:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.201.64 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761489630; cv=fail; b=hrMammHRzeQM6NtYzRmKDb8x+7zO6TykVmqidq4ASO2IHxsAKNlmi7ZXXRh2HlyuefRe1lIm6ruqFVhR4skVu3w+ERpZ/UN6BkwJUSeSoxJTjKZHCgutk41afsmoOVloKph0SV2y0UR9Oo6kQw169sOf71t7M3FrE3g58aUngug= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761489630; c=relaxed/simple; bh=akroRbzNg0Wob5QpjJn+h+XBtKkudIxFqS77qpoA15I=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=bYbPo/VaLlgUjserJkQryS4/HYfc1B84EUCm/gEiFLNEB6DGfVkfaug+KeyWZdhD/4bfV5d22c4C9eROMpJ5MmFgGJXyoMU6lTG3akiISF91pWXbq03iiXoQuoDdCuwJkea+ankou9icKnFM50HtmDgzJoU6gTQG8R0N4RgHMls= 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=eBG3K6n7; arc=fail smtp.client-ip=40.107.201.64 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="eBG3K6n7" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eKRpVpPwDrQ+dnfeEkUY95Vj3/NNb7ZTSDSDxjX1uUV+YZPMOqJzowc/mE1XMFd/bD9x+veg6adqArcjxwDV5qAteLObiPAQOzmikx1L6Gs+omK0UqzPaJUiUklNTSl8YAkL7TAYUmHvmd4x6ZeUEnLm5+nLsI/RYDzKVBDLXpw7hmZldqthZwoLHa/YTKQmWLrFuwDacV5pM6UuWPDjxfMlNRsy3YS/R9NpmgiCPhOjRA37NrRLT/6Pr8lS714Pwv8kR1V4KWEz8s0Ug5kv82eB/uTa6U6Nfp+ZgSKFhuCBjEQ5BzUo0ndkQzJXPZyulkJOlF6lQZpLn8osUpxHFA== 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=VPvXrVS7Sw4XnMtGmyawHTKyPyppaK6cUDOIlBhlYWU=; b=eWQ7OZ0vS6E7jX3sZ9j8FaeovuPs+wFd27V0G7jdcW7XkE51JIEFM39xVfFUXuy61N8gh1nhSbw/BXeMv69Twt8s7SAcrTR0tLy4ojYHPwXWiCYCBg8jPxe0ZkYYZbOmuThYgxQm/1K0AvovvZYzjfpkQBdHfchZyapuQLB5022WdMaTWQ/tR63jByVANBSxrUzX2tqxICMm8XqMQDZ0eanYojl0P1sQ3CwVkdAuyQHUewkj6voyzoqNXKKDZxCJphNyDYggYtyYdyBhGZVh1UjloEJKnw1w3mbqJ3j17jSYDaQgKZ5vWq4rE56h2BvC8J3L1XDFngMD1hD6+NazsA== 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=VPvXrVS7Sw4XnMtGmyawHTKyPyppaK6cUDOIlBhlYWU=; b=eBG3K6n7LHRhUKCWhrSrlQ2hT9VAchqIY68L9StFE63LV0WCouh2Zg1S6/gjhIOTo12XVwT1TBtvWpwOwq8fi/7xJKtp//Z6VVR0LhKjBkuwuQoFzc4yAQAe6xT90D7VM9KzCr3LSAUL70DQ1CnM0VwznBEkUZObONK7Myfb567UBk/0qO9qzQmbLcaUw6RDcIbEbRFcPEKCkYguSjDtJDcOeLIickpoEoTMCJc5SwPNtgQQlbPT93yiO27eG093hX/bOX5+AS58kmgBE9ZUyMjOWXDqWdfJHYUE1Ilmx/blZKG/OARYe54Z0NZ04TIQlFzsgZ86nmfTYqN1tbQ/bQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from MN2PR12MB3997.namprd12.prod.outlook.com (2603:10b6:208:161::11) by SN7PR12MB7833.namprd12.prod.outlook.com (2603:10b6:806:344::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9228.15; Sun, 26 Oct 2025 14:40:26 +0000 Received: from MN2PR12MB3997.namprd12.prod.outlook.com ([fe80::d161:329:fdd3:e316]) by MN2PR12MB3997.namprd12.prod.outlook.com ([fe80::d161:329:fdd3:e316%4]) with mapi id 15.20.9253.017; Sun, 26 Oct 2025 14:40:24 +0000 From: Alexandre Courbot Date: Sun, 26 Oct 2025 23:39:09 +0900 Subject: [PATCH 4/7] gpu: nova-core: use `try_from` instead of `as` for u32 conversions Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251026-nova-as-v1-4-60c78726462d@nvidia.com> References: <20251026-nova-as-v1-0-60c78726462d@nvidia.com> In-Reply-To: <20251026-nova-as-v1-0-60c78726462d@nvidia.com> To: Alice Ryhl , David Airlie , Simona Vetter , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Danilo Krummrich , Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: TYCP286CA0257.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:455::8) To MN2PR12MB3997.namprd12.prod.outlook.com (2603:10b6:208:161::11) 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: MN2PR12MB3997:EE_|SN7PR12MB7833:EE_ X-MS-Office365-Filtering-Correlation-Id: c7975188-25a3-4513-6ef4-08de149d9945 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|10070799003|1800799024|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?UzhFOWprejNnd3lIWTFLbFFzRHFiWXhDWkJBdUVtb1lkWkJ0Q1MzdFdndkUr?= =?utf-8?B?Qm12SERseU93MGs3NHFweVZtOUR3N01BN0doYWxMVVBKSVNkM1lCb3ZuL3g3?= =?utf-8?B?aFB5Q2RzS0NOTTY2TjFmVmV0RGJYQXp6Y1pRTFZ0S25lTUNYaEk5azFKWnlL?= =?utf-8?B?K0JIemNkRm9uczNMZ0hNNXAxMXBDYzNpNExPNzZuUmFmWFE0NFFicnpsQUFF?= =?utf-8?B?bjhLQnpYa0JlV3JRVVllckpXQ2UvQmFxd3JWMXl3cHFQcXl5UVRPQnhHeG5X?= =?utf-8?B?dTIzVjAzYTE3L2JIaFkvaXJWYXpoYktwbHVsNE8rbG0xdzZZUEFyM2FEVEhM?= =?utf-8?B?aENrRmdrV0UwdGViTEtBS2k5VUl6RkJhbThnYnFMUVhTMGpQaTRIbVJnUDJm?= =?utf-8?B?K1JyK3BNMWlSM2U5Z3FtQUhLcEFLOVpqbW9rOXRsYW1kN0srRmt4SW16U0d0?= =?utf-8?B?WU1FdlZ2VHpjY2trb0pnQXFSV1cxY01ZSjZrNThyZFkrUjdTZDVKeFh3RUVa?= =?utf-8?B?aVlGS1NhZ0RPbDdjVUV6UzZFS0pkYTJqejNSMjg4dTVBNkVGYzQvK08zSXh3?= =?utf-8?B?d2pIczhDWnozVGxhSkpvQ002VWRXYTY4R1NGZ2pBYTgwUzZpUm40VkZFOEFx?= =?utf-8?B?cEZVSFdWWE9VbEt3QXY0TUNUZVZoUnZCa2V1ODluVlhNL0YvMkZQSXN1SjRD?= =?utf-8?B?YU85M1VCK05ieTZxOGFCQUFYYlE0Sk54Rjlld2dQOW5CdnRSK2gyZkZLbUV2?= =?utf-8?B?NU5sbXRUeTNLUmNiT05yOUhtd3NDeW5UbURqQ3NCU2NLdXBwZGJ2YTdCN1pB?= =?utf-8?B?VzdZV2ZDR3lNcGFhbDdMZmRpQzZQOEJ1NHdtVld4ZnZkTXk1RS80WDdpWTdQ?= =?utf-8?B?blU1emJmbW15S3dHYWI2YnhVRHNRN0NXdkZJT0JQVXY4UnNPZXZYTUFCdzh5?= =?utf-8?B?enZTaDltSWRxdU4rUk45ZWE3akRmUmwrbjd6T2ZuNUM2dTNpb29MSy9heDhQ?= =?utf-8?B?OGMxeDhNcFMwT0w2WTBrZ29jVzVPNEdiTE1ickhLY3FKRUJEN2RrWTJMbzFv?= =?utf-8?B?cnFCc0hGM0ovN3AzQVliUFRXN3p2SEJaQUlybWxUVDRjaEdtU1F5eGUrWVR5?= =?utf-8?B?L1VRcHh6QUpUaEtneUk3YitJbG1TZUMrVllwbEUvZGFzTlNnNEt6bEdXNFlW?= =?utf-8?B?UVV5dHBvM3Y2QUFSOUVLSWJRRUFoMURNZlhiQjd5bHNTdjdhMTJXREZ6NFQx?= =?utf-8?B?MjhJWnVOUzNoYlY3NllHWWF0OG9PL0EzY3FpK2h6Q2pzQW1rUWpFWVZ6dEpU?= =?utf-8?B?cWRjSXRod1B6T1V6dm5xRlZKVkYzM2VudktHRHFaaE1pYVZXTFpHSmxzRW96?= =?utf-8?B?YVBCbVUwU2tDWmxEQ2FxVytiZjJQWEpoem5abVZySDYzSElqYTVXNUV5OE8z?= =?utf-8?B?WkhQZlVhOVY4QmRodk1icjRYS1NFeTQySEhKb3pKeTNlYWpibzZrWlpxSjUr?= =?utf-8?B?ZnpoZ2VwZlNDWjdGeTZuYUdtcTgvc0tWYVFQRHp2cEFVTzRNYUVRQ1crY2Rx?= =?utf-8?B?cldlQXJkYk5xcHJ2cUNIeWJOckxYT0ZPaHI4ZTBPd0lxMUVsUFcwckR0K2FX?= =?utf-8?B?VGozaEZHOHFvWUFubmJUbzNIZXlNNWsvdUZteWVFc3FXYjdZc3NHaWtwNnNl?= =?utf-8?B?anBhcittKzNra3NUbUg4TnhEaW1GdjBvYjdpeC96alNaRGUremZLdEtQNUZq?= =?utf-8?B?c3N4ZU1pL3lndVZTakJDUmNqRWJuUWtidUpTdUI5Z1puRjhrV1VocFpNclIr?= =?utf-8?B?bGExTlR0bXRIUGxFWjViMWluVm0raXBNTThFUDcvMzVlVWJHL3hJclVPdlBO?= =?utf-8?B?OVpvcnFUNjVsR2ExNXVRTkdTcmNZdGFETTk4WDZVVkZLeTZGRXBrUHBHNytS?= =?utf-8?B?bTZueG1udjRkVEplYkdkZlJocGt5bkdRR0Qyb3R3ZDZwMFZqamUvZS9oUmZ6?= =?utf-8?Q?LaBud0Sj7OXR0gw05uqCbvk2SYW6ek=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3997.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(10070799003)(1800799024)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Rk9hV3V3MnhSMzZtOCtmQ0Nwbm9TYi9oclFWakV3dlFKLzNiRjJsU1MzaXFG?= =?utf-8?B?elBSK2U1OWYrdlJYaHdOaHhrbDh1NmNkcWt5L3EyODJ2bERSY2t1REpBR3V1?= =?utf-8?B?SE9ESVJheWdzbDhTZDJTRXd4QjRDbjlTSk1JUVVqRGNDWWlRUS90byt2M2pP?= =?utf-8?B?N2NxMThMUXBuVVYxZnJJaWJCWHl6Q1ZqaDhmWGs5c205K0pYS1JLZEN4QlpK?= =?utf-8?B?SlQ5Q01xZTB5QUpZUWhwUndDenZKMzZFMTZUWXRiQ2tFNlpYcnFlejFMY01q?= =?utf-8?B?SS9lVG1KcTM0YTZKZTBnK3FXUUpFbXdpSGo1STFCYjNlWWhGOElSbFFWQnVD?= =?utf-8?B?am5zQ09sVmtUN2Q5K0FIYnQrNzVQSVE5RDdLRXFFZFovQktGazNwOXdXdjcx?= =?utf-8?B?aDN1NjlKRU5lVXZNazBBVnVnazFDZDNMVTM1U0dURWxjNUZ3d0lMSkJLa1N3?= =?utf-8?B?blhwWlBGSDAvYS83T2UrZVBmN054aWtER21tSWJsdE9yblFGQ1JES2QvOHRS?= =?utf-8?B?NzNDcmhkamFWZE9jZklHa24vdFBTckk5RmVuNTJRaXA1Sy92ekpmdXg3T1JS?= =?utf-8?B?Uk9CQW9VbGlTK3QveEYxcWl1MW8xbjNvQXZQV3dwa0xzd0NVNkhVdkhZeXdF?= =?utf-8?B?Q3FRK095YmNiaTd1NlBFQlNmcXp0T1QwQWpIRzZrQkJiNmkvVlk1WTRvanBO?= =?utf-8?B?RGR6RXpyK1Bqc2JER0l2aU9RNkpRNnRFazVLYTNraDAzSzhlVlF3RGVqLy95?= =?utf-8?B?Rlh5b3hZMkZOVmh6S3krNml6MWs4L0NNZHJqVS9BTnNucGV6emZCRHBZeXJY?= =?utf-8?B?YXZUMHdjZ1loY09HNFlLMXVwUk5PNjdmbWorNFZxWWQrWFBmeGdLNkxVcVVT?= =?utf-8?B?ZVp4S1A2cGdrUjJQWUxGdG5QeVZDRjFYaXlYaHp0V1lXZnZBRlJyWk01NitF?= =?utf-8?B?RERWN0NpUUJ4eGs3bVJraUJDT3hINStpVC9EOVFHaFczaHRYdHNZSzdBQW1Z?= =?utf-8?B?S3dyVzdWaHkrUEwzUUNrUk9WQUkrMFNCYm84VEVUWm5mNmZldkNWb2hWMWVC?= =?utf-8?B?R1I0TjVvQ2JkRTRmZGJXZy9ZSU1QS1VoNXI1dXl5V1JyeDhWQ2dSU2h1VGNF?= =?utf-8?B?SXl0Mk5kdWhUSVhXekkrT0VSUGRiN1hYb3NwajdKcFl3YTJiTUpkYVc3VkN3?= =?utf-8?B?dHlLVjFQdXVtLytYSWtJcUNwdThwUFNxdURJbFROZHBzb3loTVJPaU9ZNmhy?= =?utf-8?B?SUNCajlxbVZmMU5ndjJuSzVxNC9CNDNvb0ErQ0FZenI2amZxQ1RyTlhTeTJv?= =?utf-8?B?RlljOGhrblB6Nis4UGl4eE1aWk9KbDFsRkNsazBTZkxYK3dBbnFvSWl6REpN?= =?utf-8?B?b3lSKzJjN0FPUTA1anhsdXdpa29XOFhLZW94M0t5d1ZKOTlzUkhiZHlvbVFE?= =?utf-8?B?NWNZNVRIb1ozZE40alhOZkd2NUpyUFRRTlVaTXRmSk1oSHhSWWU0NDJra1Vk?= =?utf-8?B?QXJPYlpHWmhTaHR2WjhYWmhGT0Vvck94TXV5THBMUGZua3hJQkdvUE5LMUJ1?= =?utf-8?B?ZmtKWEF0RXk1bithQTNuV1dEcDV2ZkduWlFXMFQxMUIyemU2bzF6ZDRSRk1R?= =?utf-8?B?dDBXNWw0akdpSFZSYzlNRzVrS2ExcmVFZkVHbEJyQWdReTFwc3JrTHEvMEpI?= =?utf-8?B?TjY4SUVyUTFDZHVsdEtLSnQvOVVNaFdHZCt2WkxMb2o4V2hVUzhtWXhiZG5i?= =?utf-8?B?eHZ6YlFDdjAyVFNNZDlTUEg2UUhUcFczRzJtVWkrRDgxZzFuUm9yYW1GUUgz?= =?utf-8?B?QWtrZFJKdGRXVVdwREFQK0FBUTFjN2JRcGl3c2gzbmgyM1ZGVUtpd0sybXZ0?= =?utf-8?B?eU90RE01NStLLzlhTkNCMHplTHB3dXFLSHlWUUVzakNVQXI5Vzhuejl2UUZp?= =?utf-8?B?SkhPRDlxRHFCSld1d2s2bGFtdzZOR1QzY0NtMG9mM2xaZngwbXowNXlDNUQv?= =?utf-8?B?ZndldGlVb2lEUC9EMHMvN0RsUlR0OFRxV3V4WSt1b0VqWk5XWndwWGNzMGtx?= =?utf-8?B?a2VmaWlaMnJTSFE1YUoycFdwR1BTM0V5cUNJdlNpNldvQlBOVHh5ZGt4MDVW?= =?utf-8?B?WkljR0ZRQWR4WEJMcUxndTB1MlJleFh3M2F2VGNjMnZxNWkxOHFaTjkvWWE4?= =?utf-8?Q?eZHC0RzkT0OmCN+wX3WdLNiBg9F9i42E3TnrXnaf7bCK?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: c7975188-25a3-4513-6ef4-08de149d9945 X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3997.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Oct 2025 14:40:24.8253 (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: /cx+xDKl4jq3xOJa/y+gjftd79pBk1Wgni5Ub3S6ANBXpAEl4NqRI54FB0WyuEW/mA69OZN1IGBYbmovz4MLhw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7833 There are a few situations in the driver where we convert a `usize` into a `u32` using `as`. Even though most of these are obviously correct, use `try_from` and let the compiler optimize wherever it is safe to do so. Signed-off-by: Alexandre Courbot Acked-by: Danilo Krummrich Suggested-by: Danilo Krummrich --- drivers/gpu/nova-core/fb/hal/tu102.rs | 16 +++++++--------- drivers/gpu/nova-core/firmware/fwsec.rs | 8 ++++---- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/nova-core/fb/hal/tu102.rs b/drivers/gpu/nova-core/= fb/hal/tu102.rs index b022c781caf4..32114c3b3686 100644 --- a/drivers/gpu/nova-core/fb/hal/tu102.rs +++ b/drivers/gpu/nova-core/fb/hal/tu102.rs @@ -15,15 +15,13 @@ pub(super) fn read_sysmem_flush_page_gm107(bar: &Bar0) = -> u64 { =20 pub(super) fn write_sysmem_flush_page_gm107(bar: &Bar0, addr: u64) -> Resu= lt { // Check that the address doesn't overflow the receiving 32-bit regist= er. - if addr >> (u32::BITS + FLUSH_SYSMEM_ADDR_SHIFT) =3D=3D 0 { - regs::NV_PFB_NISO_FLUSH_SYSMEM_ADDR::default() - .set_adr_39_08((addr >> FLUSH_SYSMEM_ADDR_SHIFT) as u32) - .write(bar); - - Ok(()) - } else { - Err(EINVAL) - } + u32::try_from(addr >> FLUSH_SYSMEM_ADDR_SHIFT) + .map_err(|_| EINVAL) + .map(|addr| { + regs::NV_PFB_NISO_FLUSH_SYSMEM_ADDR::default() + .set_adr_39_08(addr) + .write(bar) + }) } =20 pub(super) fn display_enabled_gm107(bar: &Bar0) -> bool { diff --git a/drivers/gpu/nova-core/firmware/fwsec.rs b/drivers/gpu/nova-cor= e/firmware/fwsec.rs index dd3420aaa2bf..ce78c1563754 100644 --- a/drivers/gpu/nova-core/firmware/fwsec.rs +++ b/drivers/gpu/nova-core/firmware/fwsec.rs @@ -291,7 +291,7 @@ fn new_fwsec(dev: &Device, bios: &Vbios,= cmd: FwsecCommand) -> Re =20 frts_cmd.read_vbios =3D ReadVbios { ver: 1, - hdr: size_of::() as u32, + hdr: u32::try_from(size_of::())?, addr: 0, size: 0, flags: 2, @@ -304,9 +304,9 @@ fn new_fwsec(dev: &Device, bios: &Vbios,= cmd: FwsecCommand) -> Re } =3D> { frts_cmd.frts_region =3D FrtsRegion { ver: 1, - hdr: size_of::() as u32, - addr: (frts_addr >> 12) as u32, - size: (frts_size >> 12) as u32, + hdr: u32::try_from(size_of::())?, + addr: u32::try_from(frts_addr >> 12)?, + size: u32::try_from(frts_size >> 12)?, ftype: NVFW_FRTS_CMD_REGION_TYPE_FB, }; =20 --=20 2.51.0 From nobody Sun Feb 8 02:08:33 2026 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010025.outbound.protection.outlook.com [52.101.201.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 C4E32245028; Sun, 26 Oct 2025 14:40:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761489638; cv=fail; b=e+C/bGGb24iUnTjLYh370b0sitFjSXCyJ7b3oF2p3TgS4CmrudOc/Su3e2jnD17SG1uGFP3DDW4LU05H8aMLFuVqWnkn06CWn/3zG7Id3sEkV7vlW346BIwWQRr+3dLgz0CknoNFXT1PupwCtZUGmV1V+t8PFKPCNo7ZRJ+y/Co= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761489638; c=relaxed/simple; bh=F57ghhL054eaQa43swUuMzYBv0M48ZXNqBXl63EaQ7A=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=R99DSwS1rKTiHN085N5X5g7f+6U2Y7ljz21aftbaxkCE1Lx7BQLH88OJDyziPvJYmCa4cNjT8zMtLiipZtMYANqYomWDI3JtAQ5HEbFuIzkDEdnkCoiOKLf4n/gh960J090M9MxzY99Rq/EHcyHDft3lRr2Gywt7NxHZLqYMvi0= 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=tIu88vv3; arc=fail smtp.client-ip=52.101.201.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="tIu88vv3" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SL5CNNN9IC89EAJ+d7kkVWshsn3XXEaj/yzP9mucJn8ieTKXT0n3n9URYRQoPUVIj4R6oKwL2X5KJZyNdHhjuyPHXBxg84FdFPnwqbzaHU1hV0A9tCEjYKSWGZtorOxP+GdXxIx/zRylcTSJ4SYcHfAohmWeG4fgwsSBLXeVdZKuNWRjBXwjkceoPYAcQvtDzt8DVLhmapw+HaDftbtPecK1UY+vNfB7pPkNqGcjHCPieF26aOaImu2OJTT/YMoMLNiW+MMqtG9Bo4ntKG5XD+SDgqh1S2g3vpo+gNvKuiAKeLYvUdm8CZzBLDRmJbic9fj20Z0FPLLFGL0yL9G4Cg== 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=XG/xXq8FWgubj/qHAWCy2PnSABaqpIoyLMJwIYE3c9E=; b=vts3yBZ4Rbr+XVUd/avF2Ji8Uh7epI3HHaK3zsarOZ9Rp8/BR4/tkmhv42IMX9K4j82ym+zvtZBzQ+sAqqPgjW+dfnZUGyBFWigM0oqfhyNwBf7lrfz96ZX7qAmSZAXbPoRt6Q+r867zfTyHxR2E72fen2BvCTkeoRHq/xPPDDFzXAkix4JP0axuaG1gQ/UaRi/NwegrFrNg0vKMso+EJJQTmyG9OwVtjKOo/07Qj0X0CTuHm0jY1TZLEpWlUboLL41++kXOu4CNYYkUwX/sqWy+jYm+VtULPfXpOkTc4tGXYUWU6dmclp00RtjCZQvcjSOgNAm6SLJuRfRgqSPaww== 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=XG/xXq8FWgubj/qHAWCy2PnSABaqpIoyLMJwIYE3c9E=; b=tIu88vv3mkCco/GswjgwZmFxrAGJe+3vz7aUaE7s4NOXbnm5hVZjOPkazduFgr2w+7XR3WtgYp2R9Pnk4USFsLp7djUfu+3ziGNfmrPEslEUUNGP/3meYvO5hfXQ8KzXNJD4xZdeZlaqBAfbDl2vjNH1YujjYo8p7/e5ZF3sPpFiz/nI9i/DGaxkIX3HYPbVbRU1JO/b2JmWnVMwl2KJa7q5GH536WbKrmM2dQv0ZOkEFVCNnRZZIP2udsZ5lcNqPqE0hOK0K4lTjKkb6RUT+SX5j0DVKBnw88S+v3hLytvLPIC0m6Komdg06BFfv2DSomdoUz5z2rMjjiw4oqu+yg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from MN2PR12MB3997.namprd12.prod.outlook.com (2603:10b6:208:161::11) by SN7PR12MB7833.namprd12.prod.outlook.com (2603:10b6:806:344::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9228.15; Sun, 26 Oct 2025 14:40:34 +0000 Received: from MN2PR12MB3997.namprd12.prod.outlook.com ([fe80::d161:329:fdd3:e316]) by MN2PR12MB3997.namprd12.prod.outlook.com ([fe80::d161:329:fdd3:e316%4]) with mapi id 15.20.9253.017; Sun, 26 Oct 2025 14:40:34 +0000 From: Alexandre Courbot Date: Sun, 26 Oct 2025 23:39:10 +0900 Subject: [PATCH 5/7] gpu: nova-core: add extra conversion functions and traits Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251026-nova-as-v1-5-60c78726462d@nvidia.com> References: <20251026-nova-as-v1-0-60c78726462d@nvidia.com> In-Reply-To: <20251026-nova-as-v1-0-60c78726462d@nvidia.com> To: Alice Ryhl , David Airlie , Simona Vetter , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Danilo Krummrich , Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: TYCPR01CA0081.jpnprd01.prod.outlook.com (2603:1096:405:3::21) To BY5PR12MB3986.namprd12.prod.outlook.com (2603:10b6:a03:195::27) 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: MN2PR12MB3997:EE_|SN7PR12MB7833:EE_ X-MS-Office365-Filtering-Correlation-Id: 905e7404-2073-4ccd-f2e9-08de149d9e29 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|10070799003|1800799024|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?WEt3Y08zRW9XZW5YMGdmbmVBOStERjkwUFNWN2Y0V1NiQUN5NkdlNnBXbm1u?= =?utf-8?B?OHJ0MXc2cVJsSDVCaDNzSEsxZGR1ZlV1QmNrTEl1ZWJ1ZjBTaWIxOXRXbkVO?= =?utf-8?B?ZE9OWWFsQ1AvRFV2SHprUHhGS0dyRU1hNVY5d1Y2dFlCNW44TTJhMUdlYzVq?= =?utf-8?B?ZWVvMkh2VDNxdTZPUlBWbTVLc3h2WC9veW5IRTRxbFpFdTdINnozODZLSitL?= =?utf-8?B?dlEvK2NaL1lGbTdCVzRTd1JzV043NEt4V21OTHJWWEhHWU0vYWc4eFJxc3hI?= =?utf-8?B?WUJFV0JRajV0T0E0ZEVPZzkwTFUvZ2Ztdi9rU3YwREVmMUxBT2lOaktFNXh4?= =?utf-8?B?bUl0YVQzSHFybDFMbFJYaERudVBPMUMwS3Vsa1BDWTBsWFpxRzY0VXd6RGFx?= =?utf-8?B?L04rUnJGUTZMdU11UC9BMEhLYVQ5ejJaK2NBUmI5V1dUb1pmWXFVTW9DWVRr?= =?utf-8?B?YnlFOHBhNzh6cmh2K2JlRFYyWFdiWlMzeEc5TDl1d2xRcTJGS1Fsc1BXVDdK?= =?utf-8?B?S0FmazRQMTV4bVZLamJ1NVhISGExeTJyS0dKT1p5KzRGL0FqNUc0cWlvNUNU?= =?utf-8?B?NXRnQUMvOWhrMjlCei9JUnh5SzF0VmhsditEQ2JlM3IxZjAySndrTVhDUUxW?= =?utf-8?B?Q0k4ZzRsdUswL3JkMEk1SkhqZGtFRG1SaUpqbStBNm10b1Y5a1FXbjBHTklK?= =?utf-8?B?ZnNkbWx1Q1FiaU51N05YR0tWSDRjcmtJT2krMEE4WTVWMnR5bkhnb092b2lN?= =?utf-8?B?dnB1UWJxeGtZam5TYWgyOTdFNHBTSFU5TDdrYmJueEJQNVczTFlsYlpvbGo3?= =?utf-8?B?cWxaYTNPbGlaUTQ4UWMvTDRkQVdMWkZXd0JHREplK3dXZFBMWG5XR1NiZHhY?= =?utf-8?B?WWdxTmdYQTZBU0preXVQRVZCTHdxQkwybXBQQ2JoL0xxN3puRFdTR1ByZU9E?= =?utf-8?B?NXh2dHJaQVpKbkJJeEtkM0dvdnA3TE5mU3o4bDllWUROS3hNMXpzSUZUOXVL?= =?utf-8?B?NFB4UWN0SzY4UDIwRkpxalUybW84SE9ySW5HNjd2OE1lQzJPcngvcnMyR0xV?= =?utf-8?B?WGlTODdwMzVCMlJGYWdjbFRNd2tyNUdCMHlFbHhqaEl3S2xmcWdqNUJoWXow?= =?utf-8?B?WWlTcCsyV2ZxaU94YXhoTlZTdW96OFhHRlFFQ1IvTlhDZUs3aWdDRnJhWC9P?= =?utf-8?B?STZpYWl0bHdwUk5adlg2Ulg3UGIySE1YM2hOaUNZYm44T1dUVlRPaGZmakkr?= =?utf-8?B?UXBjVzNtZEVheEhwcFRrbTdJM1ZsNEszRU9IOWNwenlFUHdFMFpOVzNFQXBX?= =?utf-8?B?aTRyQXBLZ3c5NEVIZ2RWL3NZd3RBWTRxbVJlSmUrc0Z4WTBhbE1QcVVTYWJK?= =?utf-8?B?TU8rTC93YjFwV0NESHZXVzB2aUd0STVuenROVVRDUnV1Z2RWM0cybXFlc3Av?= =?utf-8?B?T09mTHovSDZTZHRKQ2dBT2l0RmdpMU5heFoxZnlQMlhtZ2JNZ0s2QnZIaWVr?= =?utf-8?B?UWpHVlFaK25QUXk4NEhRY2lPMk1oS2RRZ3llNHh4OEhPbURHVFlHdXRoS3lt?= =?utf-8?B?VlhjQ042dnRUZmFFOXdsQktuelZyM3ZPR3U4ZTFKM2hKUzhhV2cwUFE4K0NO?= =?utf-8?B?eVN0bWswakQ1OTd0aDZUQlpET3pKdkI2NS9uU0NML2tKZkl6TUZGdFJ6ZzFB?= =?utf-8?B?a2ZwTnpPZFZzVlN3UFkxUGNOZnJjbVNPb2d4YnViRThGNDlTMTI0WnJGV3ZC?= =?utf-8?B?T3JyTm1WaEJwTU1rdktmOU1OT1hTU3NaTW1NYWxpNWk2eW1ZbU15ZWNhRjQv?= =?utf-8?B?SExoY3RuckF5SEdxV21PUEF1ZFlnaHhmdHM3bXQ4U01ZcXBjZmYrRlBoZEsr?= =?utf-8?B?VTdoQ0IwYmdUbEpIZEExZENRV1F1dy9DSmUwSEg0d21hM2tkcEt4R2xLSEJr?= =?utf-8?B?a0FQSVZsSDlYQWwrT2MreWdJeTRGOWRPLytIb21CUW0yK3c3ZStPZHV2Nzla?= =?utf-8?B?ZnBYanJ3bUJpbkYwUTd2UzJWbUd5d0g0TXBmRUxSdzJOSzRWaHZ2MUVGN2pN?= =?utf-8?Q?eFDoRv?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3997.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(10070799003)(1800799024)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NnNXQVZmUStMM1l1R014VGJaK01JTUYyZWh2bkRISWlWOVJaaHpEbkVyWGow?= =?utf-8?B?U3dOaThKcU9SSnpQVEdnMmwzM0VyV1huUE1SZzRDb01YcElybFJ2VENYTjc4?= =?utf-8?B?MTUyd0hFU29JUmpLeWpHTUJ4YlBvYWplV2lJQkhNUG1XVU14OUt0RmdUaDh6?= =?utf-8?B?UTA1cytjUFJxdFNPZXpzOUlSMHRmR3FQK3N3ZXVUNTNsVDRUUzZkVVNLRTEw?= =?utf-8?B?RElDWHFqN0FkUmtLN3J6aENKUVRnYWh2aGJaeFVuM1ZFcmVoRTRLenpPZmFT?= =?utf-8?B?d2JTUTczbUJkbDhpdXhzNlY3SG0zWExPdUo5MGJ2aTBqbmxHUEIrVWVCRUpo?= =?utf-8?B?VmYxVlRuUEkvR2tQNVpteTd1NEdnVS9lTVF4dDJFR0dtd1dCQkx0djZQdTF0?= =?utf-8?B?TkJUUWJHZ2xITmVXaUJuM1JBSmRVRXVYdE9ydWNPVTRodElKMTY1RXhjWk1z?= =?utf-8?B?RzdDWTJpMk0vODZDVW1GWUZKcVY1MVRURzJYV3pFUmZVREJMUzlqdnFNM20y?= =?utf-8?B?dytBYjJkV0dzS1kxQ0N5MG15RTgrbkMvVmplYmxWSGdWTDhTWGl3c2p1TTUw?= =?utf-8?B?dzRnbUpydXZwekwvY1BJSzBFbmtXNVpLckQ1bDNHVzl2akthbGFmZEcwNm5O?= =?utf-8?B?d1Z6T3JTUDhXN09KdjcyeHZmN2lXcktJb0tZVlFrSW9EcGlJaWZsYm9La2t1?= =?utf-8?B?d2xnYVJ5VFRINy9ucmZCR1lMUElvcXlaVG9wRUsrcUE1YzlmUFg5ZjFiM1hO?= =?utf-8?B?WUZDbmFNRmR5WFlWQUZWL2lOQm1RU3ZxaG9pelU2azJPU01zY1FOeFZ0UElD?= =?utf-8?B?M3ZGRi9zZWQyS1ZPbkNsanpQN3Q5V0FVY0N5SnpNNFFmQi9tNkpHblIybmRL?= =?utf-8?B?ekN5WWJIZ0ZCQnZvME9Zcm5ybGxiRndtZVRmaERWRGF0Rk53NzBkU21qQ2Fk?= =?utf-8?B?a0NuNUNlclpERkNNK3BnWTM1cFNmd21LVFZPYTV5Qmk1TXc2Mm10YWNTVzNL?= =?utf-8?B?T3NMNUd2UHcxQkNNendDZ0orbXh3bzZTNFFUaGJFd0Q3RzFjT0dJN0pvSWdZ?= =?utf-8?B?YTMrTHhaSlk2eC9DWHMwNFkyWHBWc1drZmdUNjNSajJ4c1Joam00ZzJTVW5R?= =?utf-8?B?VmQvSU5USXRFeDRLaHZrNzBHMnB0QWR0UHRSbWpzTkpjcllnUUYxZDcxQkFh?= =?utf-8?B?R0c4WlRTNVlFdzdRRHB5eFlaYlFJU2lQOFUveUJ1L2dCeDlpRXIwbjE1WVlR?= =?utf-8?B?ek05OTI0TThWaW1ITndmODJSZ2cxa01rVnprQk1WSWpNcWw1ZzVCNm84R0lH?= =?utf-8?B?ZDY2bVV2YW5wV05hQlVmS0VTMitkTkhkc0U0b0Jvekt0NmN4eDgraXJGTTNL?= =?utf-8?B?ZHVKQW9pVGVxcVdJVXVCbTZuYThQSE0vUmpBSEgwRjRHZHY0aUh3Z0sxbkFp?= =?utf-8?B?NDlrV2NrbC9KR21Icm9SMFhRcUdFM3JCMUZVcjBLM2ZGWCt3cTJUMjhiZmoz?= =?utf-8?B?WnlZeloxYlZ0dHFYeVFUdjY5K2VuMVplczhpZ0NmRFVZN0l2VlBkb1N6eVpD?= =?utf-8?B?SWkzbHRkTkI1aDVvY2hXU2VGUGhyeUFiWGxaL1FNcFNTTWdLQXVJUjdJejEv?= =?utf-8?B?Z3YwcW44S3BuYVBUUXdVVDdrbzZzcStOWmgxcHE1d3hVaTJaQkgvTytDL25M?= =?utf-8?B?TXlYUGYraGJkaDU0KzN3elVBMUt0b08wWmNHallTZ29ZaUIybHhLSm96bXBo?= =?utf-8?B?REhPUXc4RUpkWDlDSGFHc2RtZVlJUzlXQnB1emRzTTBRUGEzRGwzU2FJNmVZ?= =?utf-8?B?TmJBYWY5K1RHekUwRkU5eVY0MDhjQ0VRTGZORkgrT083Q3JoOGtZeGxSMWI5?= =?utf-8?B?RVF1ZU1DQXh5dk80NTJ2VFdHUHBzKy8zVmVPSkpLdkJVanFtWkNhUVkrZnIw?= =?utf-8?B?eXpMS0VFVVNrK09LdlQwUWFXWXFvcDJGUDRDZlhsVWpHTnRnUmN2dldwUnRO?= =?utf-8?B?QXR5d1dNcHlBcjFDR1JaV2V6RUhnejNBRjdNNVR1WCtaU1c4dSsxY0RxRmJU?= =?utf-8?B?QTFoYWE4T2tKMnhaeEVBTE1mQmFNS3N3M0dkMmRPMzl6eklsY0NoUnVyd0oz?= =?utf-8?B?d0FsOUlMTXIvNmVUMGZNblJyRDZleENBU1Vta1pwOEJWSEFpNmFEazJOdkZQ?= =?utf-8?Q?f9lFWc2tTpjaoz80hrlORlxUAccfPfTw6ZyYRnxx3+XO?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 905e7404-2073-4ccd-f2e9-08de149d9e29 X-MS-Exchange-CrossTenant-AuthSource: BY5PR12MB3986.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Oct 2025 14:40:34.1082 (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: 2zJPPpAA0K4OWpnd2ZtKwBPtgJWEkzpq57fhIeTt7fjG5gghsEIfSJXvKW8SM9m9bLO2az9ELazZR64PD691yQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7833 The core library's `From` implementations do not cover conversions that are not portable or future-proof. For instance, even though it is safe today, `From` is not implemented for `u64` because of the possibility to support larger-than-64bit architectures in the future. However, the kernel supports a narrower set of architectures, and in the case of Nova we only support 64-bit. This makes it helpful and desirable to provide more infallible conversions, lest we need to rely on the `as` keyword and carry the risk of silently losing data. Thus, introduce a new module `num` that provides safe const functions performing more conversions allowed by the build target, as well as `FromAs` and `IntoAs` traits that are just extensions of `From` and `Into` to conversions that are known to be lossless. Suggested-by: Danilo Krummrich Link: https://lore.kernel.org/rust-for-linux/DDK4KADWJHMG.1FUPL3SDR26XF@ker= nel.org/ Signed-off-by: Alexandre Courbot Acked-by: Danilo Krummrich --- drivers/gpu/nova-core/nova_core.rs | 1 + drivers/gpu/nova-core/num.rs | 159 +++++++++++++++++++++++++++++++++= ++++ 2 files changed, 160 insertions(+) diff --git a/drivers/gpu/nova-core/nova_core.rs b/drivers/gpu/nova-core/nov= a_core.rs index e130166c1086..9180ec9c27ef 100644 --- a/drivers/gpu/nova-core/nova_core.rs +++ b/drivers/gpu/nova-core/nova_core.rs @@ -13,6 +13,7 @@ mod gfw; mod gpu; mod gsp; +mod num; mod regs; mod vbios; =20 diff --git a/drivers/gpu/nova-core/num.rs b/drivers/gpu/nova-core/num.rs new file mode 100644 index 000000000000..6b9d4e89dbf5 --- /dev/null +++ b/drivers/gpu/nova-core/num.rs @@ -0,0 +1,159 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! Numerical helpers functions and traits. +//! +//! This is essentially a staging module for code to mature until it can b= e moved to the `kernel` +//! crate. + +/// Infallibly converts a `usize` to `u64`. +/// +/// This conversion is always lossless as Linux only supports 32-bit and 6= 4-bit platforms, thus a +/// `usize` is always smaller than or of the same size as a `u64`. +/// +/// Prefer this over the `as` keyword to ensure no lossy conversions are p= erformed. +/// +/// This is for use from a `const` context. For non `const` use, prefer th= e [`FromAs`] and +/// [`IntoAs`] traits. +pub(crate) const fn usize_as_u64(value: usize) -> u64 { + kernel::static_assert!(size_of::() >=3D size_of::()); + + value as u64 +} + +#[cfg(CONFIG_32BIT)] +/// Infallibly converts a `usize` to `u32` on 32-bit platforms. +/// +/// This conversion is always lossless on 32-bit platforms, where a `usize= ` is the same size as a +/// `u32`. +/// +/// Prefer this over the `as` keyword to ensure no lossy conversions are p= erformed. +/// +/// This is for use from a `const` context. For non `const` use, prefer th= e [`FromAs`] and +/// [`IntoAs`] traits. +pub(crate) const fn usize_as_u32(value: usize) -> u32 { + kernel::static_assert!(size_of::() >=3D size_of::()); + + value as u32 +} + +/// Infallibly converts a `u32` to `usize`. +/// +/// This conversion is always lossless as Linux only supports 32-bit and 6= 4-bit platforms, thus a +/// `u32` is always smaller than or of the same size as a `usize`. +/// +/// Prefer this over the `as` keyword to ensure no lossy conversions are p= erformed. +/// +/// This is for use from a `const` context. For non `const` use, prefer th= e [`FromAs`] and +/// [`IntoAs`] traits. +pub(crate) const fn u32_as_usize(value: u32) -> usize { + kernel::static_assert!(size_of::() >=3D size_of::()); + + value as usize +} + +#[cfg(CONFIG_64BIT)] +/// Infallibly converts a `u64` to `usize` on 64-bit platforms. +/// +/// This conversion is always lossless on 64-bit platforms, where a `usize= ` is the same size as a +/// `u64`. +/// +/// Prefer this over the `as` keyword to ensure no lossy conversions are p= erformed. +/// +/// This is for use from a `const` context. For non `const` use, prefer th= e [`FromAs`] and +/// [`IntoAs`] traits. +pub(crate) const fn u64_as_usize(value: u64) -> usize { + kernel::static_assert!(size_of::() >=3D size_of::()); + + value as usize +} + +/// Extension trait providing guaranteed lossless conversion to `Self` fro= m `T`. +/// +/// The standard library's `From` implementations do not cover conversions= that are not portable or +/// future-proof. For instance, even though it is safe today, `From= ` is not implemented for +/// `u64` because of the possibility to support larger-than-64bit architec= tures in the future. +/// +/// The workaround is to either deal with the error handling of `TryFrom` = for an operation that +/// technically cannot fail, or to use the `as` keyword, which can silentl= y strip data if the +/// destination type is smaller than the source. +/// +/// Both options are hardly acceptable for the kernel. It is also a much m= ore architecture +/// dependent environment, supporting only 32 and 64 bit architectures, wi= th some modules +/// explicitly depending on a specific bus witdth that could greatly benef= it from infallible +/// conversion operations. +/// +/// Thus this extension trait that provides, for the architecture the kern= el is built for, safe +/// conversion between types for which such conversion is lossless. +/// +/// In other words, this trait is implemented if, for the current build ta= rget and with `t: T`, the +/// `t as Self` operation is completely lossless. +/// +/// Prefer this over the `as` keyword to ensure no lossy conversions are p= erformed. +/// +/// If you need to perform a conversion in `const` context, use [`u64_as_u= size`], +/// [`u32_as_usize`], [`usize_as_u64`], or [`usize_as_u32`]. +/// +/// # Examples +/// +/// ``` +/// use crate::num::FromAs; +/// +/// assert_eq!(usize::from_as(0xf00u32), 0xf00u32 as usize); +/// ``` +pub(crate) trait FromAs { + /// Create a `Self` from `value`. This operation is guaranteed to be l= ossless. + fn from_as(value: T) -> Self; +} + +impl FromAs for u64 { + fn from_as(value: usize) -> Self { + usize_as_u64(value) + } +} + +#[cfg(CONFIG_32BIT)] +impl FromAs for u32 { + fn from_as(value: usize) -> Self { + usize_as_u32(value) + } +} + +impl FromAs for usize { + fn from_as(value: u32) -> Self { + u32_as_usize(value) + } +} + +#[cfg(CONFIG_64BIT)] +impl FromAs for usize { + fn from_as(value: u64) -> Self { + u64_as_usize(value) + } +} + +/// Counterpart to the [`FromAs`] trait, i.e. this trait is to [`FromAs`] = what [`Into`] is to +/// [`From`]. +/// +/// See the documentation of [`FromAs`] for the motivation. +/// +/// # Examples +/// +/// ``` +/// use crate::num::IntoAs; +/// +/// assert_eq!(0xf00u32.into_as(), 0xf00u32 as usize); +/// ``` +pub(crate) trait IntoAs { + /// Convert `self` into a `T`. This operation is guaranteed to be loss= less. + fn into_as(self) -> T; +} + +/// Reverse operation for types implementing [`FromAs`]. +impl IntoAs for S +where + T: FromAs, +{ + fn into_as(self) -> T { + T::from_as(self) + } +} --=20 2.51.0 From nobody Sun Feb 8 02:08:33 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010057.outbound.protection.outlook.com [52.101.56.57]) (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 D90D42264B0; Sun, 26 Oct 2025 14:40:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.57 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761489652; cv=fail; b=Fsr8wvzwvwMuBNQKIbTNYeo+j4aVZb3rc8jNWfFRt6xchOJlgsn1dKEinlCIa0zZywNFvIq2yaX9EWGqxpKtcU7dJZ60f+kVZYCmVEeWXpNh+pBpH6tYVrTFLZELak2NjiNnUi23jO3DqveMwswLFGozMbMM/2Qb4q+wERQGhIk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761489652; c=relaxed/simple; bh=kFL8zineTfDk1R/fOKYjhqtj10+2bqRLJ0JEF/0uOpo=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=LbKGSRujWveHEBkLKUF3CFJwX2h2bvGaL8ZMbnZGE3mAttCnIUn/WyzsjZpue4rFlkDpQasN/SYXjOPlCoak04g5vY5YFOXNF6Vd4o0LjkXS6dz7wAdKzVUEMvlxyO+cGRVOJuy8yOqGtTff/Hf8euGwonUXNJRLNGu7qEUKp+4= 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=co/P/pGl; arc=fail smtp.client-ip=52.101.56.57 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="co/P/pGl" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wNURrNdHRgsRCogfCetshBGSToDZaoL1/mB0MvT3CPmOa63ICCcK4moQ90lsJYZUTuwa59WhP+PVMXq8cyj87DCznlAD4qV0LSojRg+nx4V3EuhNAkajRa9PVaV/GgiUM1T4JCQ7OBLiUlw/GtZ8UrvkmFJ0H0UubQmycHYel2ODocxqfNEv/CWTraN4e+6nWGKLv5yJSH3Xn7DuoxmYap4SESKOJTIOYv7WQsUdHqNFNXAeW7MZN4EgyEhTdMEYoirisKK+JAvpCoYp/KZieSqH4NLF4pwil7pcnzotSL/uJCvrsVCT4YAuZVkdxTtgHQproFKS2N1j73H7xurgXQ== 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=S1khKbouI16UTktIIKzNZf7MuZDwrsQb2QDv8M6cc/g=; b=Ic1HBljQ90W0gqR51cjFiIJGhcFOi5RyegHhZS7a0oXel0JH4exAESk4Xt45211KnbdokwH1k96JKajvhNA9PIzaFmD8FspNBIBJworM1slOjnYn52/+U/Hko6poSIXUDW5p1MI8wKT+ImApeCez0dhMdqWudmtBWQxmO4wWayEc0hO9pCZgNbyG3U+9XRZLbn0WYDCY+uqhy63MLFzbKc523dcvvljwo+CvXNFQt11lNhFHmfH8IhOs18AFbZa+OAYfQhDIAW5mJlu0L5eck31zw3YT6+mngu8php2QWx9Z00TKB7ixf4FilUnHo3MHsLvTCSRFlOhKon5aQFrejw== 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=S1khKbouI16UTktIIKzNZf7MuZDwrsQb2QDv8M6cc/g=; b=co/P/pGle56V7L52SRTq9/fjbHXbDufS80Z/7CJIGlnljeEKpj8SVi6ygPkKz/7JEnC8ZJ7AT2ZPALeOx3pfG/MhwtOilblAgonVZow5NqjZyz2wbGhsQ54/lmeLTER+8TtBsrDuInZ7OJgArxEkqIrrrpjEwurhztHyNersGT3FXKmuwGdHG2nMAjp5FGOH7+gQW830tS7MOVfhJh1HPl/DozlxD1uBrxcO5l/t4P54P9k1ZCdvbAXXk9Y4k00VpCRQc+SPLvWmJYk9RcfyJGW1Qytr+RplzU9OIjY/1rL4zEmL0p3+zCj3yp2cx2WpcQVM44sgmzJvixH5cacgew== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from MN2PR12MB3997.namprd12.prod.outlook.com (2603:10b6:208:161::11) by SN7PR12MB7833.namprd12.prod.outlook.com (2603:10b6:806:344::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9228.15; Sun, 26 Oct 2025 14:40:45 +0000 Received: from MN2PR12MB3997.namprd12.prod.outlook.com ([fe80::d161:329:fdd3:e316]) by MN2PR12MB3997.namprd12.prod.outlook.com ([fe80::d161:329:fdd3:e316%4]) with mapi id 15.20.9253.017; Sun, 26 Oct 2025 14:40:45 +0000 From: Alexandre Courbot Date: Sun, 26 Oct 2025 23:39:11 +0900 Subject: [PATCH 6/7] gpu: nova-core: replace use of `as` with functions from `num` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251026-nova-as-v1-6-60c78726462d@nvidia.com> References: <20251026-nova-as-v1-0-60c78726462d@nvidia.com> In-Reply-To: <20251026-nova-as-v1-0-60c78726462d@nvidia.com> To: Alice Ryhl , David Airlie , Simona Vetter , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Danilo Krummrich , Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: TYCP286CA0346.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:7c::14) To BY5PR12MB3986.namprd12.prod.outlook.com (2603:10b6:a03:195::27) 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: MN2PR12MB3997:EE_|SN7PR12MB7833:EE_ X-MS-Office365-Filtering-Correlation-Id: f238165f-fb5b-4d69-b1c8-08de149da442 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|10070799003|1800799024|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?UCt4YkNJMmk1ZTJFb0tUUDFPeU9vdnExUzBKOWhVUE5FK05kM1VGTkxEL08x?= =?utf-8?B?RnhLUjJPd3Z3RElQcVRVSUI3bTV1TGNSRlZVbGthL2ZlM1hINUVCblMzZStV?= =?utf-8?B?MVJ1Y3lQV3V1aXFqdVVObkRyVWFRMUxoNmlxaWVHZlI1SDRhWTJSN0JmRXls?= =?utf-8?B?QkEyWGs0eDdCNmROMC9wV2NuajNmcGluWHprczBMdm8rRVppYkFHb3BDajdE?= =?utf-8?B?dHJCQlkyT1p2TDV6MkVwVU9NZWpudFlVUmFlanRhK29qNC96a1p0aDdHMXdC?= =?utf-8?B?NWdvcEVGRzZsUHMrUGc1c1BwOFgvZW4yWVFYc3hvc3l3ZmV3THd0OVJ0K1Nz?= =?utf-8?B?aUVpQThYcytuY0lGSEJkV2tUY25ULzJsSkZlWDBVeGJ2b1N6N2FOL2xtNERT?= =?utf-8?B?MzhwL1ZpMENqTENHeGVXQ3hUb0dEOThpN3ltZlNUbXNaMWFVMzFpWUdJTGFz?= =?utf-8?B?djE4VXY4dVI3bi9mUE5kaXY3bW1UT1NHU1J4RW9qZlV5cjBjNk9RUEtFaUFP?= =?utf-8?B?Mktua3JqQmV2Z3FGT05GL3NvNGhWcXNzNVZLYTBDUnBXbkd3ZDBmSGZUL1ZH?= =?utf-8?B?dXlEakV5OVE5cGFVQTk2czZoczJZbmhEVjg0R3MvNjNnY1NNRnZxSU1McllG?= =?utf-8?B?Si9OUHEvYXBnOUlvak9wTkpFTkVvNVA5bkgya2xuYmwrd1FsRWt3QnMvNzNF?= =?utf-8?B?eVJ5QVZ3RTlvaE4zcmMramx2UnlZMWZ2VWxSbE1TRUlia2doMG80SzI1alNl?= =?utf-8?B?VmZZcVZ4LzJ6Z04zR1JKaVJNbFU4bFBjcUZHVVJFWFJEK0ZhK092U3o4a0ZR?= =?utf-8?B?NzJuSjZnalRETjgxN3dPVkxPa3ZDcmVCQ3RWNy85SDBtSTdpQzhqRFVSNmhG?= =?utf-8?B?UXFtaEY3Rkx3ZVZTUVExWHQvaDArcTlNOVRyeFloNXY1b1F2QlJOMVRCQi9k?= =?utf-8?B?Ujh4Wk5KSkpzMVNRK3hVNExyU3Fyd25NZmN4ZnVVeDdiczhCMi91MDh1T2FR?= =?utf-8?B?anJHM2VDTEtDMFJRZ1dVS0krb1EybEVFL1BldU44dXIrZ09JekllT3VMRHQw?= =?utf-8?B?TVNIVVV0YThWK2w5WU1oMjFUNHh4amlMVEV5VDE1WmQ5eXYycUJyTzgxdnN5?= =?utf-8?B?VkJwYllOUkVXR3VvMmx6MWNUa3BFc2YwRzZBNTZrZFhzbVZjQlZxUS9iTWZX?= =?utf-8?B?S29MRThxMy9RNGxQUHBGeGVqb1ozQkJ5OEFGYWpIdTJCUGVPR1JkSnNROExO?= =?utf-8?B?TzVpWWFCWHFUUU8ydXdIQUZBQVBiYnIrSktheEgyWlM5Smw1cTR2a1EvcTlL?= =?utf-8?B?TmJZZ0l5RHBWalBrVzEyQVlFS1BldkNhZG5KRjhVYVdvOXNNUlAwcEgvbkZk?= =?utf-8?B?S3lhN0htNHhqdjlTaTRiOS9RcHN5UnlkQW1ESnJId2d4amxOL0tMdkgxNk5Q?= =?utf-8?B?dk5tZVRkcEtLMFQ4bVVKUnZXVThpcDdSSmw2RVdtWkU3ZkVhVkFSQWt6ZzRB?= =?utf-8?B?REdmRGYySjlidHBJWlpPVWsvYXBnSHN4TTR5M3JFaVpiTlUxdUJvL2c0K2dq?= =?utf-8?B?VW5CV1RRN0xhUEp1RWJIRnJuenVPTVljQXgyYUVkRCtOZFU2bS9FTjVRbDd5?= =?utf-8?B?aXd3UnVoVFlPejBoUW5BK0QxVGV2cDYyUlAxMHlkU2pVUUEvWnRoMktFSlAw?= =?utf-8?B?WW9PQzR6dXRHSzNnQ1hXRUpDdXhVZWViN2dJY09RaVFoSUFTRVlycFdreVpN?= =?utf-8?B?OFRyVHh5clppWXRoTjVhRVNIVDRVUWpaVWtDeFpCVXRRMDJSN3M1TEpsc2tp?= =?utf-8?B?TnFYMG40dW1wUTlRL0tINWxLNG1SU1hTVVErZ1BIKzA1dVFIOUEzbzYrVUZu?= =?utf-8?B?YjVRMEhHVmVEL1Z5ZnloQVRuNVdJUDBzdEJxWlBRa1NLV3JiK0djeXdTWDIr?= =?utf-8?B?R21qNVNJVE9qcS95RHNMTUI0Y2h0YU9seGdoalQ0SUlIdmpOd2NGMDkrUnNT?= =?utf-8?Q?uJca1dYOvV7mVn9LqnsQboQO5fKjfQ=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3997.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(10070799003)(1800799024)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R2hjeFNqSW5yNmlXenlzUWMxY1RraWtiY1RtSEVMZU5XclZlVXFCUGxtbG45?= =?utf-8?B?bS9OOWdoTE1rWWs4cDJMaTQ4OWNZdjdNSE5HckN0Zm9VdURyTzZ3WEliN3dK?= =?utf-8?B?cmljTVZvUm9aZklXSG5lbWJCeG9lNFpXYjJiMXh5elNGbHBIeDBjMk9KRm5h?= =?utf-8?B?enFjZmh4QlJ3QXV6anlhV2lyZDJTVXdHakVQZlVQYXEvSDlQanNuQlNUaEFG?= =?utf-8?B?Rm1uZ1ZaeWpGNG96Z3lRZjhxSGo5bjhLSkZPY3JDZUg2WE5uNkU4TFg1S0Nj?= =?utf-8?B?bGlYN1p5UEVGdnM5QWZYb0E1dDF2UER4WDJVYXlBd0h4QzBsR0ZSWUQ3Tk1R?= =?utf-8?B?S2lqRE40WnlvY01McC90RDlyaWNlMUo3SWpMNkszcnNTSGFEdExpR0gyaUto?= =?utf-8?B?UTV3WGxMUk1OdkdFY1k4VStQeVYrYUloZ1dxeVU3Szg3RGZLSVpjbHkrMlpw?= =?utf-8?B?WjRFVlcvalMvbW9jcmcvZlhjSE53WjJnZEdsR2o3NEJQa3VLa0NKNkd3TklG?= =?utf-8?B?YjdlMng0NjcxMk9GOFJwTkpiVFlqbUlYM0x0SFIremxTdHE0ZmJqM1VkS0xX?= =?utf-8?B?SjlxNU1OVHlDL0J2VTFHdldQY3dvVXF4aDArSy9tUytONUduSnhIU0h2ckZt?= =?utf-8?B?Sjh2VVVzYzgwZ095eVhXRzJ4Y3orUm5hNGhjUkFadjh1QVlrazAzd2t6c1l6?= =?utf-8?B?dCtxdld3ZThpR0l1Nm5ab2tOdGlwdEpFK1VxWDEvcFF5MEhiTWZyOXJIazdy?= =?utf-8?B?TnV4YnRrcG9mSnZxTnRTVFlJbjlkQ0xiWllwY1J2cFJJZ3dvdVF6UFQreFhO?= =?utf-8?B?dG11QStabFBvd29iYnk0dGZzMjRUT09RM1FEeFFRN1VNL1BwWWNkWFYzMHZS?= =?utf-8?B?TFlLNXpLVVZFOFpKQUlBNG9FcVhqbWh5dXhIeVo5Q2h3N3dlWmhwcXkwRE5C?= =?utf-8?B?clVRc3V5RmNlaS9kSFRoNmdtcTg3emJaYWp4cFpIcXVLUThYSjZYYWlNZnJZ?= =?utf-8?B?cXRIWjUrbS8xTExwNHRDODY2Wk9EUmRiTmlmTmd0STluVVZoT0VPZzJnYmJU?= =?utf-8?B?cHMzRHRLZFVCeWtMR0RJRFNUdXlHKys0NHdvNThKdUY4RUZSWU9oSGMzZzBB?= =?utf-8?B?RjJCaVNCUm1oaWpYYSt2ZDFGbmNQM2xSZEFBemtkU2xiTlp2K1V0M0pGYVhQ?= =?utf-8?B?clNPa3h4V1UzRXJMeDdpWlYzbzN2bEdpbUwwaW1CYk5GVmxJY2VwNVQ4UHc2?= =?utf-8?B?cHZjV3lCVXplaWM2SFRHcklNRGNJWHFyMTR0ZDFGc1dzY1hwK29Ga0UwM0pM?= =?utf-8?B?MUpzR01QanovNjRrcWIvY3NnYUMrMnJlSWtvaEVudVVqYVRoTHF6SndBTGZJ?= =?utf-8?B?aFZmWXVrMGd2OVFaRjJiNEN0dHQrSWJUSkJSbnB6OXYvUU83QkF4d2hCaXJO?= =?utf-8?B?RkxMa25MR1o3OVExcFkzTWwwYVd3T3l1NHNoMnpIZWNIcVRiNDhUMVZuRDFp?= =?utf-8?B?V0Z5Qi9NQmZUS3M0MXN5TzV4elZmNklRYks3MktuNVFtN0hBQzA2WVhUNHIy?= =?utf-8?B?QW9QaW8zcHVUcitET0tacHNvTkZEbGQyOUFZR1czeEpSTFV0WmtjV1R5Unow?= =?utf-8?B?OUplZTVtZVlFM1RYZVkrdEEyRWpmV1RXVnM3eFlXWTMvcWdqUUVEcjRjOWpZ?= =?utf-8?B?QktHYXVaMlFRWEsybmRFWmFEMXVyMFRwS250WXBlcE9vU0NRTWZZZHA2WFNl?= =?utf-8?B?eFk1RkdoaHhyV0MyTmV0NzcvY1pRRkhoOWpPMlVUUFRNU0hkTlA2RXNrc1kr?= =?utf-8?B?YlZpd0RsbFEyOXpnTmwyR1QwNnFiYUd3YXNXY0gycDFtTkp4elZ4WlZqeXVF?= =?utf-8?B?Qm1RUEMwdHhURjkxamFqSmVBWUNvelY4VlpONG95M1hYMHo4bFBPbDhxTTVD?= =?utf-8?B?OE41UDZaRHY4UFk1YlJ4VExtQ29FZ0xoUmtxSU1WQmlGb29kaCtiL0lubERj?= =?utf-8?B?ODd5citSNW4wbGdkbStPM1J1ckZMTmZpTmd4NHV0L0RldXRyeXBIWTRUWjVu?= =?utf-8?B?WDRMY0Y0TjNpdU8yNk1idWtjMXBJVjhWQjVEVTVQVDZBZUFYRzUvc1Q3V1JN?= =?utf-8?B?eHIvUTh6eXFVcGZpTXk0a0RBMnBpU3g2Slo4WVZ4L3NKZVl6QWplekJocWti?= =?utf-8?Q?NUs29HweLcwIcedi61t+GIFwBjOB1trCDAj8xLHPBv5z?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f238165f-fb5b-4d69-b1c8-08de149da442 X-MS-Exchange-CrossTenant-AuthSource: BY5PR12MB3986.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Oct 2025 14:40:45.2136 (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: WM+CWmQelZaCgIVtfATz90VLZVh666W5KZmMYEma+Rx0c2NjfDmatMRqmc92bxWEka2RZD03uB16WqBkiUwPiA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7833 Use the newly-introduced `num` module to replace the use of `as` wherever it is safe to do. This ensures that a given conversion cannot lose data if its source or destination type ever changes. Signed-off-by: Alexandre Courbot Acked-by: Danilo Krummrich Suggested-by: Danilo Krummrich --- drivers/gpu/nova-core/falcon.rs | 5 +++-- drivers/gpu/nova-core/fb.rs | 7 ++++--- drivers/gpu/nova-core/firmware.rs | 7 ++++--- drivers/gpu/nova-core/firmware/booter.rs | 31 +++++++++++++++++-----------= --- drivers/gpu/nova-core/firmware/fwsec.rs | 11 ++++++----- drivers/gpu/nova-core/firmware/gsp.rs | 5 +++-- drivers/gpu/nova-core/firmware/riscv.rs | 7 ++++--- drivers/gpu/nova-core/regs.rs | 5 +++-- drivers/gpu/nova-core/vbios.rs | 9 +++++---- 9 files changed, 49 insertions(+), 38 deletions(-) diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon= .rs index fb3561cc9746..a44df1ac8873 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -15,6 +15,7 @@ use crate::dma::DmaObject; use crate::driver::Bar0; use crate::gpu::Chipset; +use crate::num::{FromAs, IntoAs}; use crate::regs; use crate::regs::macros::RegisterBase; =20 @@ -442,7 +443,7 @@ fn dma_wr>( FalconMem::Imem =3D> (load_offsets.src_start, fw.dma_handle()), FalconMem::Dmem =3D> ( 0, - fw.dma_handle_with_offset(load_offsets.src_start as usize)= ?, + fw.dma_handle_with_offset(load_offsets.src_start.into_as()= )?, ), }; if dma_start % DmaAddress::from(DMA_LEN) > 0 { @@ -468,7 +469,7 @@ fn dma_wr>( dev_err!(self.dev, "DMA transfer length overflow"); return Err(EOVERFLOW); } - Some(upper_bound) if upper_bound as usize > fw.size() =3D> { + Some(upper_bound) if usize::from_as(upper_bound) > fw.size() = =3D> { dev_err!(self.dev, "DMA transfer goes beyond range of DMA = object"); return Err(EINVAL); } diff --git a/drivers/gpu/nova-core/fb.rs b/drivers/gpu/nova-core/fb.rs index 27d9edab8347..1461dd643cae 100644 --- a/drivers/gpu/nova-core/fb.rs +++ b/drivers/gpu/nova-core/fb.rs @@ -11,6 +11,7 @@ use crate::dma::DmaObject; use crate::driver::Bar0; use crate::gpu::Chipset; +use crate::num::usize_as_u64; use crate::regs; =20 mod hal; @@ -105,14 +106,14 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0) -> Re= sult { =20 let vga_workspace =3D { let vga_base =3D { - const NV_PRAMIN_SIZE: u64 =3D SZ_1M as u64; + const NV_PRAMIN_SIZE: u64 =3D usize_as_u64(SZ_1M); let base =3D fb.end - NV_PRAMIN_SIZE; =20 if hal.supports_display(bar) { match regs::NV_PDISP_VGA_WORKSPACE_BASE::read(bar).vga= _workspace_addr() { Some(addr) =3D> { if addr < base { - const VBIOS_WORKSPACE_SIZE: u64 =3D SZ_128= K as u64; + const VBIOS_WORKSPACE_SIZE: u64 =3D usize_= as_u64(SZ_128K); =20 // Point workspace address to end of frame= buffer. fb.end - VBIOS_WORKSPACE_SIZE @@ -132,7 +133,7 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0) -> Resu= lt { =20 let frts =3D { const FRTS_DOWN_ALIGN: Alignment =3D Alignment::new::= (); - const FRTS_SIZE: u64 =3D SZ_1M as u64; + const FRTS_SIZE: u64 =3D usize_as_u64(SZ_1M); let frts_base =3D vga_workspace.start.align_down(FRTS_DOWN_ALI= GN) - FRTS_SIZE; =20 frts_base..frts_base + FRTS_SIZE diff --git a/drivers/gpu/nova-core/firmware.rs b/drivers/gpu/nova-core/firm= ware.rs index 4179a74a2342..ae6dbefd9e5a 100644 --- a/drivers/gpu/nova-core/firmware.rs +++ b/drivers/gpu/nova-core/firmware.rs @@ -15,6 +15,7 @@ use crate::dma::DmaObject; use crate::falcon::FalconFirmware; use crate::gpu; +use crate::num::{FromAs, IntoAs}; =20 pub(crate) mod booter; pub(crate) mod fwsec; @@ -75,7 +76,7 @@ pub(crate) fn size(&self) -> usize { const HDR_SIZE_SHIFT: u32 =3D 16; const HDR_SIZE_MASK: u32 =3D 0xffff0000; =20 - ((self.hdr & HDR_SIZE_MASK) >> HDR_SIZE_SHIFT) as usize + ((self.hdr & HDR_SIZE_MASK) >> HDR_SIZE_SHIFT).into_as() } } =20 @@ -190,8 +191,8 @@ fn new(fw: &'a firmware::Firmware) -> Result { /// Returns the data payload of the firmware, or `None` if the data ra= nge is out of bounds of /// the firmware image. fn data(&self) -> Option<&[u8]> { - let fw_start =3D self.hdr.data_offset as usize; - let fw_size =3D self.hdr.data_size as usize; + let fw_start =3D usize::from_as(self.hdr.data_offset); + let fw_size =3D usize::from_as(self.hdr.data_size); =20 self.fw.get(fw_start..fw_start + fw_size) } diff --git a/drivers/gpu/nova-core/firmware/booter.rs b/drivers/gpu/nova-co= re/firmware/booter.rs index b4ff1b17e4a0..bab66ed85f10 100644 --- a/drivers/gpu/nova-core/firmware/booter.rs +++ b/drivers/gpu/nova-core/firmware/booter.rs @@ -18,6 +18,7 @@ use crate::falcon::{Falcon, FalconBromParams, FalconFirmware, FalconLoadPa= rams, FalconLoadTarget}; use crate::firmware::{BinFirmware, FirmwareDmaObject, FirmwareSignature, S= igned, Unsigned}; use crate::gpu::Chipset; +use crate::num::{FromAs, IntoAs}; =20 /// Local convenience function to return a copy of `S` by reinterpreting t= he bytes starting at /// `offset` in `slice`. @@ -74,7 +75,7 @@ impl<'a> HsFirmwareV2<'a> { /// /// Fails if the header pointed at by `bin_fw` is not within the bound= s of the firmware image. fn new(bin_fw: &BinFirmware<'a>) -> Result { - frombytes_at::(bin_fw.fw, bin_fw.hdr.header_offset as = usize) + frombytes_at::(bin_fw.fw, bin_fw.hdr.header_offset.int= o_as()) .map(|hdr| Self { hdr, fw: bin_fw.fw }) } =20 @@ -83,7 +84,7 @@ fn new(bin_fw: &BinFirmware<'a>) -> Result { /// Fails if the offset of the patch location is outside the bounds of= the firmware /// image. fn patch_location(&self) -> Result { - frombytes_at::(self.fw, self.hdr.patch_loc_offset as usize) + frombytes_at::(self.fw, self.hdr.patch_loc_offset.into_as()) } =20 /// Returns an iterator to the signatures of the firmware. The iterato= r can be empty if the @@ -91,19 +92,21 @@ fn patch_location(&self) -> Result { /// /// Fails if the pointed signatures are outside the bounds of the firm= ware image. fn signatures_iter(&'a self) -> Result>> { - let num_sig =3D frombytes_at::(self.fw, self.hdr.num_sig_offs= et as usize)?; + let num_sig =3D frombytes_at::(self.fw, self.hdr.num_sig_offs= et.into_as())?; let iter =3D match self.hdr.sig_prod_size.checked_div(num_sig) { // If there are no signatures, return an iterator that will yi= eld zero elements. None =3D> (&[] as &[u8]).chunks_exact(1), Some(sig_size) =3D> { - let patch_sig =3D frombytes_at::(self.fw, self.hdr.pa= tch_sig_offset as usize)?; - let signatures_start =3D (self.hdr.sig_prod_offset + patch= _sig) as usize; + let patch_sig =3D frombytes_at::(self.fw, self.hdr.pa= tch_sig_offset.into_as())?; + let signatures_start =3D usize::from_as(self.hdr.sig_prod_= offset + patch_sig); =20 self.fw // Get signatures range. - .get(signatures_start..signatures_start + self.hdr.sig= _prod_size as usize) + .get( + signatures_start..signatures_start + usize::from_a= s(self.hdr.sig_prod_size), + ) .ok_or(EINVAL)? - .chunks_exact(sig_size as usize) + .chunks_exact(sig_size.into_as()) } }; =20 @@ -132,9 +135,9 @@ impl HsSignatureParams { /// Fails if the meta data parameter of `hs_fw` is outside the bounds = of the firmware image, or /// if its size doesn't match that of [`HsSignatureParams`]. fn new(hs_fw: &HsFirmwareV2<'_>) -> Result { - let start =3D hs_fw.hdr.meta_data_offset as usize; + let start =3D usize::from_as(hs_fw.hdr.meta_data_offset); let end =3D start - .checked_add(hs_fw.hdr.meta_data_size as usize) + .checked_add(hs_fw.hdr.meta_data_size.into_as()) .ok_or(EINVAL)?; =20 hs_fw @@ -169,7 +172,7 @@ impl HsLoadHeaderV2 { /// /// Fails if the header pointed at by `hs_fw` is not within the bounds= of the firmware image. fn new(hs_fw: &HsFirmwareV2<'_>) -> Result { - frombytes_at::(hs_fw.fw, hs_fw.hdr.header_offset as usize) + frombytes_at::(hs_fw.fw, hs_fw.hdr.header_offset.into_as()) } } =20 @@ -198,12 +201,12 @@ fn new(hs_fw: &HsFirmwareV2<'_>, idx: u32) -> Result<= Self> { } else { frombytes_at::( hs_fw.fw, - (hs_fw.hdr.header_offset as usize) + usize::from_as(hs_fw.hdr.header_offset) // Skip the load header... .checked_add(size_of::()) // ... and jump to app header `idx`. .and_then(|offset| { - offset.checked_add((idx as usize).checked_mul(size= _of::())?) + offset.checked_add(usize::from_as(idx).checked_mul= (size_of::())?) }) .ok_or(EINVAL)?, ) @@ -318,12 +321,12 @@ pub(crate) fn new( dev_err!(dev, "invalid fuse version for Booter= firmware\n"); return Err(EINVAL); }; - signatures.nth(idx as usize) + signatures.nth(idx.into_as()) } } .ok_or(EINVAL)?; =20 - ucode.patch_signature(&signature, patch_loc as usize)? + ucode.patch_signature(&signature, patch_loc.into_as())? } }; =20 diff --git a/drivers/gpu/nova-core/firmware/fwsec.rs b/drivers/gpu/nova-cor= e/firmware/fwsec.rs index ce78c1563754..ed82e74ccdc9 100644 --- a/drivers/gpu/nova-core/firmware/fwsec.rs +++ b/drivers/gpu/nova-core/firmware/fwsec.rs @@ -23,6 +23,7 @@ use crate::falcon::gsp::Gsp; use crate::falcon::{Falcon, FalconBromParams, FalconFirmware, FalconLoadPa= rams, FalconLoadTarget}; use crate::firmware::{FalconUCodeDescV3, FirmwareDmaObject, FirmwareSignat= ure, Signed, Unsigned}; +use crate::num::{FromAs, IntoAs}; use crate::vbios::Vbios; =20 const NVFW_FALCON_APPIF_ID_DMEMMAPPER: u32 =3D 0x4; @@ -250,7 +251,7 @@ fn new_fwsec(dev: &Device, bios: &Vbios,= cmd: FwsecCommand) -> Re let ucode =3D bios.fwsec_image().ucode(desc)?; let mut dma_object =3D DmaObject::from_data(dev, ucode)?; =20 - let hdr_offset =3D (desc.imem_load_size + desc.interface_offset) a= s usize; + let hdr_offset =3D usize::from_as(desc.imem_load_size + desc.inter= face_offset); // SAFETY: we have exclusive access to `dma_object`. let hdr: &FalconAppifHdrV1 =3D unsafe { transmute(&dma_object, hdr= _offset) }?; =20 @@ -277,7 +278,7 @@ fn new_fwsec(dev: &Device, bios: &Vbios,= cmd: FwsecCommand) -> Re let dmem_mapper: &mut FalconAppifDmemmapperV3 =3D unsafe { transmute_mut( &mut dma_object, - (desc.imem_load_size + app.dmem_base) as usize, + (desc.imem_load_size + app.dmem_base).into_as(), ) }?; =20 @@ -285,7 +286,7 @@ fn new_fwsec(dev: &Device, bios: &Vbios,= cmd: FwsecCommand) -> Re let frts_cmd: &mut FrtsCmd =3D unsafe { transmute_mut( &mut dma_object, - (desc.imem_load_size + dmem_mapper.cmd_in_buffer_offse= t) as usize, + (desc.imem_load_size + dmem_mapper.cmd_in_buffer_offse= t).into_as(), ) }?; =20 @@ -338,7 +339,7 @@ pub(crate) fn new( // Patch signature if needed. let desc =3D bios.fwsec_image().header()?; let ucode_signed =3D if desc.signature_count !=3D 0 { - let sig_base_img =3D (desc.imem_load_size + desc.pkc_data_offs= et) as usize; + let sig_base_img =3D usize::from_as(desc.imem_load_size + desc= .pkc_data_offset); let desc_sig_versions =3D u32::from(desc.signature_versions); let reg_fuse_version =3D falcon.signature_reg_fuse_version(bar, desc.engine_id_mask= , desc.ucode_id)?; @@ -369,7 +370,7 @@ pub(crate) fn new( // Mask of the bits of `desc_sig_versions` to preserve. let reg_fuse_version_mask =3D reg_fuse_version_bit.wrappin= g_sub(1); =20 - (desc_sig_versions & reg_fuse_version_mask).count_ones() a= s usize + usize::from_as((desc_sig_versions & reg_fuse_version_mask)= .count_ones()) }; =20 dev_dbg!(dev, "patching signature with index {}\n", signature_= idx); diff --git a/drivers/gpu/nova-core/firmware/gsp.rs b/drivers/gpu/nova-core/= firmware/gsp.rs index 24c3ea698940..637adf989ee8 100644 --- a/drivers/gpu/nova-core/firmware/gsp.rs +++ b/drivers/gpu/nova-core/firmware/gsp.rs @@ -12,6 +12,7 @@ use crate::firmware::riscv::RiscvFirmware; use crate::gpu::{Architecture, Chipset}; use crate::gsp::GSP_PAGE_SIZE; +use crate::num::FromAs; =20 /// Ad-hoc and temporary module to extract sections from ELF images. /// @@ -232,10 +233,10 @@ pub(crate) fn radix3_dma_handle(&self) -> DmaAddress { fn map_into_lvl(sg_table: &SGTable>>, mut dst: VVec) ->= Result> { for sg_entry in sg_table.iter() { // Number of pages we need to map. - let num_pages =3D (sg_entry.dma_len() as usize).div_ceil(GSP_PAGE_= SIZE); + let num_pages =3D usize::from_as(sg_entry.dma_len()).div_ceil(GSP_= PAGE_SIZE); =20 for i in 0..num_pages { - let entry =3D sg_entry.dma_address() + (i as u64 * GSP_PAGE_SI= ZE as u64); + let entry =3D sg_entry.dma_address() + (u64::from_as(i) * u64:= :from_as(GSP_PAGE_SIZE)); dst.extend_from_slice(&entry.to_le_bytes(), GFP_KERNEL)?; } } diff --git a/drivers/gpu/nova-core/firmware/riscv.rs b/drivers/gpu/nova-cor= e/firmware/riscv.rs index afb08f5bc4ba..fabb38fa8c55 100644 --- a/drivers/gpu/nova-core/firmware/riscv.rs +++ b/drivers/gpu/nova-core/firmware/riscv.rs @@ -12,6 +12,7 @@ =20 use crate::dma::DmaObject; use crate::firmware::BinFirmware; +use crate::num::FromAs; =20 /// Descriptor for microcode running on a RISC-V core. #[repr(C)] @@ -41,7 +42,7 @@ impl RmRiscvUCodeDesc { /// /// Fails if the header pointed at by `bin_fw` is not within the bound= s of the firmware image. fn new(bin_fw: &BinFirmware<'_>) -> Result { - let offset =3D bin_fw.hdr.header_offset as usize; + let offset =3D usize::from_as(bin_fw.hdr.header_offset); =20 bin_fw .fw @@ -74,8 +75,8 @@ pub(crate) fn new(dev: &device::Device, fw= : &Firmware) -> Result< let riscv_desc =3D RmRiscvUCodeDesc::new(&bin_fw)?; =20 let ucode =3D { - let start =3D bin_fw.hdr.data_offset as usize; - let len =3D bin_fw.hdr.data_size as usize; + let start =3D usize::from_as(bin_fw.hdr.data_offset); + let len =3D usize::from_as(bin_fw.hdr.data_size); =20 DmaObject::from_data(dev, fw.data().get(start..start + len).ok= _or(EINVAL)?)? }; diff --git a/drivers/gpu/nova-core/regs.rs b/drivers/gpu/nova-core/regs.rs index 206dab2e1335..b3ed164aa2ac 100644 --- a/drivers/gpu/nova-core/regs.rs +++ b/drivers/gpu/nova-core/regs.rs @@ -12,6 +12,7 @@ FalconModSelAlgo, FalconSecurityModel, PFalcon2Base, PFalconBase, Pere= grineCoreSelect, }; use crate::gpu::{Architecture, Chipset}; +use crate::num::FromAs; use kernel::prelude::*; =20 // PMC @@ -75,7 +76,7 @@ impl NV_PFB_PRI_MMU_LOCAL_MEMORY_RANGE { /// Returns the usable framebuffer size, in bytes. pub(crate) fn usable_fb_size(self) -> u64 { let size =3D (u64::from(self.lower_mag()) << u64::from(self.lower_= scale())) - * kernel::sizes::SZ_1M as u64; + * u64::from_as(kernel::sizes::SZ_1M); =20 if self.ecc_mode_enabled() { // Remove the amount of memory reserved for ECC (one per 16 un= its). @@ -158,7 +159,7 @@ pub(crate) fn completed(self) -> bool { impl NV_USABLE_FB_SIZE_IN_MB { /// Returns the usable framebuffer size, in bytes. pub(crate) fn usable_fb_size(self) -> u64 { - u64::from(self.value()) * kernel::sizes::SZ_1M as u64 + u64::from(self.value()) * u64::from_as(kernel::sizes::SZ_1M) } } =20 diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index a521c0a4df0f..234a9f29787b 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -5,6 +5,7 @@ use crate::driver::Bar0; use crate::firmware::fwsec::Bcrt30Rsa3kSignature; use crate::firmware::FalconUCodeDescV3; +use crate::num::FromAs; use core::convert::TryFrom; use kernel::device; use kernel::error::Result; @@ -825,7 +826,7 @@ fn falcon_data_ptr(&self) -> Result { =20 let data_ptr =3D u32::from_le_bytes(bytes); =20 - if (usize::from_u32(data_ptr)) < self.base.data.len() { + if (usize::from_as(data_ptr)) < self.base.data.len() { dev_err!(self.base.dev, "Falcon data pointer out of bounds\n"); return Err(EINVAL); } @@ -953,7 +954,7 @@ fn setup_falcon_data( pci_at_image: &PciAtBiosImage, first_fwsec: &FwSecBiosBuilder, ) -> Result { - let mut offset =3D pci_at_image.falcon_data_ptr()? as usize; + let mut offset =3D usize::from_as(pci_at_image.falcon_data_ptr()?); let mut pmu_in_first_fwsec =3D false; =20 // The falcon data pointer assumes that the PciAt and FWSEC images @@ -994,7 +995,7 @@ fn setup_falcon_data( .find_entry_by_type(FALCON_UCODE_ENTRY_APPID_FWSEC_PROD) { Ok(entry) =3D> { - let mut ucode_offset =3D entry.data as usize; + let mut ucode_offset =3D usize::from_as(entry.data); ucode_offset -=3D pci_at_image.base.data.len(); if ucode_offset < first_fwsec.base.data.len() { dev_err!(self.base.dev, "Falcon Ucode offset not in se= cond Fwsec.\n"); @@ -1080,7 +1081,7 @@ pub(crate) fn ucode(&self, desc: &FalconUCodeDescV3) = -> Result<&[u8]> { =20 // The ucode data follows the descriptor. let ucode_data_offset =3D falcon_ucode_offset + desc.size(); - let size =3D (desc.imem_load_size + desc.dmem_load_size) as usize; + let size =3D usize::from_as(desc.imem_load_size + desc.dmem_load_s= ize); =20 // Get the data slice, checking bounds in a single operation. self.base --=20 2.51.0 From nobody Sun Feb 8 02:08:33 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013060.outbound.protection.outlook.com [40.93.201.60]) (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 B7E6E27AC21; Sun, 26 Oct 2025 14:40:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761489659; cv=fail; b=pOiFhMYzQJEc5IgbHHfGPctVXmmYGI4W0LKNsUlhTulSL4AF4rJHIoOUhtQwmCLeR2R19LqhBmn4s8yXQK40/tAgoEgJRt4YS7BcEqjwkVburOAIEnk2U8AWjqoI0o3nmTDw0uHR2MYa/tm4IGx719dK8oidYyb+AC6+peNWELM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761489659; c=relaxed/simple; bh=EjkL0BKwtQAj6KT2/OyVH+qUCSaSUPL5nMmfPJLG8sQ=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ZIQXpYHVse4FK38ri6XN4cMrYjNJjdOR5WCb4fcq+gl685XiyTc7O+yieml2vnL6F9uq/6T3r8rZMdGKr1rNJggH8UWDs3wn/9JhlcpX2EHwlx+yUMgAjEjWCbaWtv3lG8lkhOZwjWIQhhbtPnViHI59EhkH8gCtjbHa32aZ1IQ= 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=FbjKJCy1; arc=fail smtp.client-ip=40.93.201.60 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="FbjKJCy1" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rXHcb1HMdSaZ6AcHhe3ZLBij7Nh5GmRlPDdNMG0Wbp87tLxRH8g50nXnQA247x1qPwMGGvZ9HnbYqoetXd348ctvwXtAUO95p8cPw3jYB3RsDChw3q3wfMDYe6mTMRs86HzdTQnW+ilIcNfbs0uhk7JF5hci1vqlKUewwfsXthR0b22vyDboAeawfbI+Nb4dsXx2hOk+uzZ5uPQ6NlbognLDeJwzhCukUf/pxzXDOBRnjnN0cvktgu410nBUtLEszclK1Wndo8Vhg1uKx7xM8bPleBOvGypcwjypR/Z5CLlsDvJCdCInz27LIisX5LYR8mgdZu2G56A1Hg7Dalj+sw== 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=QnIaJsEPGTUTuXBSmWKDJHljGUENt+Nkuvu853RU/Pc=; b=gxbaLjDlEOuAIwkJL5siWDXYPQVFlqLXNINB9KnCBp4TWmo1yLpXu0ddmzb89cnPvYa1eR58fXAgAfTAogeC2VpOQXi4lw7+g2y5FVtGQd+O3EwgtiCkj8FBMVS7P48x4WpRIRMsrj4h9DSvoNW652sTd2tq6eDBbrENCl3JU+Xk71psm6zXcUe4iIM8BFo9G9JqWJJwCZW23EyMa4fthvuNhaeVlzoTQPQnyN7pANW+Gp/s0AUWjL6RTnr2wf6iMPxiWA6qbHklF03XG/UUDSBjB2VL2m3VwDcDmB1uVTHrNuRwDteZON832xdZbHAYwr9yjEgODru548dYMaHUVQ== 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=QnIaJsEPGTUTuXBSmWKDJHljGUENt+Nkuvu853RU/Pc=; b=FbjKJCy1hxhHrH+hmeaBLELKStNvmMJSj5S54JCWaO6Di+ic2peMImQb8DaAj+L1X+fq3K8Y5j5hdGXnpEjt5n9je7D7X1nk67wCFia+8DFYJv3PQFWZAbzz+IrGv2WHjdSt7pXNu+FRCaEyXRIFNfFOV/vWoFPKQMC/c27CqxYdS5oQrF/5IAwZ82VNGWrKWKN6tg7qEr0tzyeemiW0CimzGl5Ab0TZ3LwXm7owsYn8zY26uAdTrmDyr3fntJcyx6opGMy5qSXTr2YNvvEjV047WGAbA1tUEQn91MhggN/sivPYtYUKjROjKx5Zl3+1acI7mO/Qds8Pn7Y+HUEksQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from MN2PR12MB3997.namprd12.prod.outlook.com (2603:10b6:208:161::11) by SN7PR12MB7833.namprd12.prod.outlook.com (2603:10b6:806:344::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9228.15; Sun, 26 Oct 2025 14:40:55 +0000 Received: from MN2PR12MB3997.namprd12.prod.outlook.com ([fe80::d161:329:fdd3:e316]) by MN2PR12MB3997.namprd12.prod.outlook.com ([fe80::d161:329:fdd3:e316%4]) with mapi id 15.20.9253.017; Sun, 26 Oct 2025 14:40:55 +0000 From: Alexandre Courbot Date: Sun, 26 Oct 2025 23:39:12 +0900 Subject: [PATCH 7/7] gpu: nova-core: justify remaining uses of `as` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251026-nova-as-v1-7-60c78726462d@nvidia.com> References: <20251026-nova-as-v1-0-60c78726462d@nvidia.com> In-Reply-To: <20251026-nova-as-v1-0-60c78726462d@nvidia.com> To: Alice Ryhl , David Airlie , Simona Vetter , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Danilo Krummrich , Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: TYCP286CA0357.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:7c::15) To MN2PR12MB3997.namprd12.prod.outlook.com (2603:10b6:208:161::11) 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: MN2PR12MB3997:EE_|SN7PR12MB7833:EE_ X-MS-Office365-Filtering-Correlation-Id: 508e69ac-841e-4ae0-d010-08de149dab72 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|10070799003|1800799024|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?NGhPWkJjQzVobmtva2NTdUw2bHZESUJXaS83SkkxQVFDMmx4ejdyOGR0eFVv?= =?utf-8?B?aEx6ckV2MGNQS2VHaGhsM3JJTzZMUy9KbzVlM2pYdEpPaHJwRzhCNW5KTXlL?= =?utf-8?B?WHFmMXJaazZhcEg2L3VDU1NuMm5VY1g0and5SUYrUDdqOFpMbXBrVTZWMW9r?= =?utf-8?B?UGhnTkNUWjBCdmdaR1NKUG5ZenNqQ3FDb3FKWnBucXFxMUFlT1RrM3crRnZi?= =?utf-8?B?ZDNIS1duSmw2Vk1NQWthNVVYOGMzQ250UENHNlhmTCttZnc0V0U4VGx4eUtJ?= =?utf-8?B?cHFmNDY1aUN4SUpTSFRLaGFDS1RUbTVpQjJzV0plakRpbXNGVG1CNTllaTZs?= =?utf-8?B?dVlpOWdlNFkxL2FwTi8xZUxxcTBPeTQxeEdJRGtvYWg1OURCRE9VeUY4RlQr?= =?utf-8?B?amIxb2Vxb0NjcWltNjZOSm12aTFzSnZDamY3TlE3N1N6L3lUbStyYVNxN2hP?= =?utf-8?B?cXFMbWIwM3lUZjcvMWhOc1h0VmRvWmowWFBIM2srMzdoODAzVjdCa0Y0ajBu?= =?utf-8?B?UVNSb09mKzQ1SzZaT3VHVGJtU29vZFNuRURMS1BLdVAzK04wRXFGbzBWdnl5?= =?utf-8?B?ZzhKbG16U0RaODZDZE91cE5nM0NLVWoxQnVnVE5YOGJOdXFRYjRpU0NGaW1D?= =?utf-8?B?MVZ6YklleitSb2F4cXJiczI3TEpMWEJpMTVhNldodW81S21NQ1VEWVBRV1JJ?= =?utf-8?B?d1lFNG04VTJwakhnaGhuZEZycEdMd29vVkFhZC9rdzgyVi90K1UyVDc1RHFr?= =?utf-8?B?dzV3ekE2aDZXVDlIbE9RcVVobFlKU28rVWljd0xXTkxKUkk2TFdrMGVlUUtY?= =?utf-8?B?aHZjLyt6eU1ReUV4ODhkTWNsNWp4Z2piRERzMDU0bGVMREh3VTlJU3ZSeGEv?= =?utf-8?B?VTBDcmxVZXN2aUx5NitsckJRTURyelF2cFNmM3dWbWFLOU1pTStjWEJXYy9M?= =?utf-8?B?YmZDT1FRZ3I3bUZ2SDh3amhWL1NTUnRFdmRtUVB2Z0owdUtWRHlNdXlYcFJa?= =?utf-8?B?RkZCTXNRQnM4a1gzeWdvS2Zib05valNhV2RpT2FGdksyNWh1NnI4am1YNVhS?= =?utf-8?B?YVFhSzlpTzRkUXdnRS9zWU8wZUFOMVY2dzB6ZE1CNFdWeHM2dm1PMGMwSFY0?= =?utf-8?B?dGpRclh0YUFtemMyTUt2SUF1dzc0QUJ0aEJCQTdLcVd0bGFhYnJRbGFlZmkr?= =?utf-8?B?NGN0cGlUekhLN3dGWlJzRzBSc0wwekt1T0RCTUF3QnFrNTB4a2V6N2hpdmVO?= =?utf-8?B?WWx4ZTdkRGR4NEJyejhYb3VWZTZVaUxtV3dkM1o1dWxmWXkzb2gvaFkvWlFN?= =?utf-8?B?cFI5U2EvbU0xZmZIZ3JmT2lndWIvSXlUTTVqVUNBVFJ0LytjamM3Sm8wUjcv?= =?utf-8?B?UVl5ZWZTRXM2NHBabEN6NCs3VXFjN3Q1cG55TlAwUjJkSGZ4K2xYQUo4dFV0?= =?utf-8?B?NHFlanVPNmJwekNXb0VnZnFHNHBYcXROdE9TdzRKYzd2VHZ0V2JjQWoxc2xW?= =?utf-8?B?Sm1LZ2tFdDE3eVZxZTZ2SW9rVzNHOUVwbVpjb0U4VytRR0lZVDErS1ZNR0t4?= =?utf-8?B?ZnYzM1RRY0ZzNlpIRnduNGtLd1g4S3JzT2F2cFNqclYvanJIdGVWbWx3bmxO?= =?utf-8?B?ZTdzREwyUkN5Qjd0VWxzVFQwek5NRzhMRDI3Z3BFV2xRdzF2YmEvVk9qL1pE?= =?utf-8?B?TWhsYTlLanYySTdra3JQSVUwWGNPQjRuUnFJNkpvR2djOEo0YUtDNFhIWVIz?= =?utf-8?B?WUtSR0JPRHRjS05YQWxFdThLZmFtazJxRTJYbUZQZktNODlUK3Y1Ums1T1RS?= =?utf-8?B?RUZEWVNhdCtJSFJmM1dnV0xWTFZVVSs3WGxJOTRRUUFab3YzSGZwaHBZRHF5?= =?utf-8?B?UjNLczJsbWdnSklSU1JWNWp1bzJoaTRSb2oxWHZGYmtsUlA4NFRPQUQ3WGZz?= =?utf-8?B?d0Jvditna3dFRzBNUExUK0xPakI2SEVldDNnRU9nSUh6SDB5Z1lCanh0R084?= =?utf-8?Q?Q2yCoQh8uig6ItCYqHzA6kLBgooSeY=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3997.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(10070799003)(1800799024)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cld4YytOUldhUzlwWHdmWGNlT2U2a2pKaFdmSlZzcWFjUFBzTTkyR0NoQWRy?= =?utf-8?B?TTlCN25adTgxZWdvY2wvR21sRVVVUnV4bFZkZDhNazZ2dDRXUnowS25sVk9H?= =?utf-8?B?YWg4RW9haHB4OENpak02aEEvUDNXVkhSRTBIVVRwaFQ3SVlNTTdLYW9Wa2Qx?= =?utf-8?B?SzRzd1cxYW9iSTNKUktTRGNYZVdDUkhQMHZNeVVCWUNGR1g0ZVUzU0xXTG44?= =?utf-8?B?dHB6NFhyOWRFVy8wN2QrY1RpTldudkpVRkRjZDkyeHNVTWNKc0pnSktqQ25u?= =?utf-8?B?YnQ4QUV1OHNsZU5yWFJ2YTlrUHk3dVU0enJkVTBUaGlZL3FXbElHdVlRZ2dH?= =?utf-8?B?bDRpanlMcDJZaC93anFYRTFiY2xiaXFxNVdnczRvaVJVOWU3NUpaMmNvNjVv?= =?utf-8?B?ZFBpVnBablhzZ3owL1hZdlA3YzdxUGNXN0lOZVpjeHRIV1JSNnU3MkpQRVF1?= =?utf-8?B?RWh6NW1aN1p0ZGt6R0t0WkRjMllXOVBDSER0V0hOYUlnWnZBU3Y0cnZaWDBE?= =?utf-8?B?YXVVZ0VRY0NSLzNlUkFLTEJSak10TDBMRzBkRGpvMEtBVkViK29mZlIvRGh6?= =?utf-8?B?S3RjT0NHMXdydkE4M2JWZzFoN2NXUjhYc0VySCtUblkzMTNkYXlOK3BJRUU3?= =?utf-8?B?SnRnZnN3TjJIWFhjU2YzNnE3OElCRUtJSUl3bzhSQ2IzMjZuc1FTZ0JDUmw4?= =?utf-8?B?ZnRScjZIUE80M0ZUa0JocHVncVliVmlRQ0FYWVJQd3NZY3Z3SnNxOU95WDh3?= =?utf-8?B?dlRDWGUxSHNYaW5VNW1tTDdZYUYwQ3I3Sm8rVFQ2SE8rdndDYWYzVkpyL0pn?= =?utf-8?B?ZEhMS3pCRDhJWHpOMkNRcTdNOXdta3c0MlVrcktCSGVvYmhCV2gwelVmcmd4?= =?utf-8?B?Q2JLMTJrRFVWRFExK0xCcm9VTUw5c29nSlR3TnNlZ2dTQUM2WC9KM2pUbHdY?= =?utf-8?B?eE5yZXpVMEFMSVdvWGF2czVOc3NVUWJvRGROdVozWElCMkQzWGpRcE92QzY0?= =?utf-8?B?THNRblZ6QVBBMUxlZU8rOFRpZEtvdFkxOURKdTExYWRBZ3M0SHZrNEZQWW55?= =?utf-8?B?dWxZTzVMUHBGZzhLbGxnSGNrejZaSXVKdTZKa3RkazZjc3diL0JPT3hmSlF0?= =?utf-8?B?aDVUNlMvTjFiQVB1YVkvMXgyS3hRQVBERGcxTFJSbHNhMWYzOWU4emNsS3ow?= =?utf-8?B?aVFVV0pEODcvR2kreklDcy83b3lVNVhqYkEydTcwL1pvREhvb3lZS3R2bjdV?= =?utf-8?B?TG5zQnVEU1dLU3NGZFNMblR0ZnYvaHBHdFlHclhZMUhNNmhZWmN3dG1JdlNh?= =?utf-8?B?LzhJOUpWeTViZmEwR1lCTUttZDRXNjl5eFJYYktKMW1WRHdlYmJjYlljRXdT?= =?utf-8?B?QTdieWt2a21HVDdWSG9OaEtsdUdVaTVVYWJjcDhmV3VEeXVlZ1g2cXpUaFNm?= =?utf-8?B?cy9aTmJkekoxbFJ2T0JEZ1Z0SEtDU1RXYTFaV1FKUjJXb2FEV0V0Sk5yUmlW?= =?utf-8?B?WGZsaG1QVFNqOHpuV2dtcDNja211S0o1bTR1NVJGZkdJVStCWk9iY3B3dm1R?= =?utf-8?B?Y2NiZkNHUWY3dEkwWTFPNXZCR013aGh0aHVlR2p0N0RQSklaT0pCOFdOblJE?= =?utf-8?B?VHN6NkxEVGhnSjVOa1lBOUg5T2N4eTIzMWxqQS9jNjIrZzJRU0VHWGZ5Yisr?= =?utf-8?B?Yy9XbThEWnZBWHFKM2pkNzh6OG1wdWFPTklrSmh3UTcraElHQXY1NEdrWnRM?= =?utf-8?B?ZFl4M0Y2UmZCT0JwY2Q3Rkh6TklNQ3NzMkdqUXRPVkJQYVZDc1JYM3BYck9D?= =?utf-8?B?NTA3WmhHTEtLWUdqOW9STWNWOXkzalh5dVNseHpSVWFaL2s0WjZuaC85TEpQ?= =?utf-8?B?VHhwRzRqSzFUNkkrY3VXNkFVczRnbUsvSFJpZzlzbGRpblIxNVBGZW50bXJw?= =?utf-8?B?dFVOZWNBME9YYkRWTVc3d1BVWkJEeDBxSHVsaCtWUUhVeGJlZnJvV0ZSVWIv?= =?utf-8?B?VHRQOWVTOGxYSW9xYVVBZm9aTW93VGhUWElVR2wwU3h1Q0FsdHlCZ0ZRN0JX?= =?utf-8?B?QVVPNzhwOGRiMEhsYXRjNjlXdjYwL2hiam9ocmVlVGE2bVo2QzJadXlHcXBS?= =?utf-8?B?RlkzUmg1aWw3ckI0eVhXN0V1aFRyVTQ2R0hRV0pCTDBieDNjVFhLaWpNWjhm?= =?utf-8?Q?x5EEsgGG7bSYRx+IBA4OSlMsxG0Eih2SP+VvtD7jV7ab?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 508e69ac-841e-4ae0-d010-08de149dab72 X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3997.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Oct 2025 14:40:55.3021 (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: ZhpTe9D7bjeTAd1/Xl4A3EhR8igJnGiZAB1hkrYX7J9lr3fKhaKoGCFc+XnrWo4nsJi2DOgr8tZHS1UJfLiYUQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7833 There are a few remaining cases where we *do* want to use `as`, because we specifically want to strip the data that does not fit into the destination type. Comment these uses to clear confusion about the intent. Signed-off-by: Alexandre Courbot Acked-by: Danilo Krummrich Suggested-by: Danilo Krummrich --- drivers/gpu/nova-core/falcon.rs | 4 ++++ drivers/gpu/nova-core/fb/hal/ga100.rs | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon= .rs index a44df1ac8873..701c08d0cb2a 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -479,9 +479,13 @@ fn dma_wr>( // Set up the base source DMA address. =20 regs::NV_PFALCON_FALCON_DMATRFBASE::default() + // `as u32` is used on purpose since we do want to strip the u= pper bits, which will be + // written to `NV_PFALCON_FALCON_DMATRFBASE1`. .set_base((dma_start >> 8) as u32) .write(bar, &E::ID); regs::NV_PFALCON_FALCON_DMATRFBASE1::default() + // `as u16` is used on purpose since the remaining bits are gu= aranteed to fit within a + // `u16`. .set_base((dma_start >> 40) as u16) .write(bar, &E::ID); =20 diff --git a/drivers/gpu/nova-core/fb/hal/ga100.rs b/drivers/gpu/nova-core/= fb/hal/ga100.rs index 871c42bf033a..6a59c96febc1 100644 --- a/drivers/gpu/nova-core/fb/hal/ga100.rs +++ b/drivers/gpu/nova-core/fb/hal/ga100.rs @@ -18,9 +18,13 @@ pub(super) fn read_sysmem_flush_page_ga100(bar: &Bar0) -= > u64 { =20 pub(super) fn write_sysmem_flush_page_ga100(bar: &Bar0, addr: u64) { regs::NV_PFB_NISO_FLUSH_SYSMEM_ADDR_HI::default() + // `as u32` is used on purpose since the remaining bits are guaran= teed to fit within a + // `u32`. .set_adr_63_40((addr >> FLUSH_SYSMEM_ADDR_SHIFT_HI) as u32) .write(bar); regs::NV_PFB_NISO_FLUSH_SYSMEM_ADDR::default() + // `as u32` is used on purpose since we want to strip the upper bi= ts that have been written + // to `NV_PFB_NISO_FLUSH_SYSMEM_ADDR_HI`. .set_adr_39_08((addr >> FLUSH_SYSMEM_ADDR_SHIFT) as u32) .write(bar); } --=20 2.51.0