From nobody Sat Feb 7 16:26:37 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010058.outbound.protection.outlook.com [52.101.56.58]) (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 335D52405EC; Mon, 27 Oct 2025 12:54:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.58 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761569696; cv=fail; b=YToDkJTs1PknTw96Ig3dVBfSep8K4wcxG7EOBeGrFWXI7SqPGvjkGWBH6EZmOQU+uC01ZOZ96bIFvcwNnAtieAkwwrgf+v+BGL6qm3KvwhAd7tXkdRH4f/a34bRniUUHc6L195z+0eMSM/JFckS79g5b3KTaBgs6aQmCoH/ehO4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761569696; c=relaxed/simple; bh=mBR1JJzwfP+FgbWDYMDOi8WEc65osVxFwne9DKClFEs=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=aZDyMw14RpCMsr5mAmcyWDZz80vKcLbZRCvKgph9lLKNg3F3umbmXCCcWqiLWlmYI/4hVM5iHRdiSPXcyivaO4jFrUh5UF6TW8j+ybRqkj6Kpq+N/4j5y0kRUIW41zoyVTDlgAKdmpXHwrz2IWDQtIvxnQXJPrJoq6dMOaTXEVQ= 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=gsrWfPlJ; arc=fail smtp.client-ip=52.101.56.58 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="gsrWfPlJ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hLogTrMrT1koGkY9E1FVcY206W1xy6EAtX7Iyt92Qh/REWW4ztlNCQI/P7AdT+KnnimD3Y8c9qSzj8Emisx2KqJQWtWtTWb3vTy+FbbzEkLIzsebwMdYC5wH3WBqd+Pa0yVQ7m21Q0CnctRmUA5KmSOsRrV1Y/ouIgF6NCk04u20M9Xtm6jmCNwFo6TfrKv4Aa1gd29rKym7GIchYB10kgD+gCqpLc6CFofU3LRVRjuJX+2bMIL6r32/cDLX/OXeN3f0WoMUKLTxxc2YPS2DcuRoqzvTLlALd/CxwWqJELouyY4Vq09Bt787ZnYxeBC+FjFRazlEPmeKzNzCL8a0LA== 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=lSt2DKukHYXYQUxyvdrEx8vyYfLLdzKD2ID7ZDD2KYs=; b=KCEKX2ZVzAnUcdwEx6VUrQfXY930eYbnDLNgeLGAR86rjfgbSn6JfN/h1B+jMEsaEAK9sIMVe86C0gix46e7z+f27GpMfsTkB7RqE5tPpi78LeXWKimgGimxICtPSJaOgXPqTrhstbk1y0rsjSMbW7I6w9u1/QV/b6fdSVz91kJOCcuQu/1AuHGllqAorkPGqbkw0ZBH7oBAA+A0fBUc/XARUDZ0rgxNmHmM/0kaqBeJm0bu83sYpWV+22GHHfxBfDU+DGEptmDvGeyhGo+xKq4n4PvQC75H4GHMwaRXds2tywB4JGX+s0gjlyYeKgLa6zP+O3lUFt3V2L1LOOmg8w== 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=lSt2DKukHYXYQUxyvdrEx8vyYfLLdzKD2ID7ZDD2KYs=; b=gsrWfPlJSt77aKelzobsFpBC2osx6aMNhb7fjxMDLwfViwDh/1Hg3EpYd0X8VWFpl9WC73HWvT8aDOW5usy5MiBY+xPwMs+Xrv0mjSf+tEBuAXpNf2b5MCP3NIT0kOdyzvLxSPXvkIbEfAqyWXAhrRlWOnUwBff7dPx1nWtOtcOdm3nGbTSQeb/WX1oSLXME1h6+gZiVuwQV4zB4pB7kWAsyXIcVoqOvmKJq2icuSyUle7q0XYp/XiEqxIahNEYbhGQ3vmW8PRu5VFEqKzP8qluwdhTugjP7OdmcbfNFHDnvckV9QxiQGlmw4i6t9Fh0QSTAu7sh0Zd4xNQeb8br5A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by DS7PR12MB5863.namprd12.prod.outlook.com (2603:10b6:8:7a::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.18; Mon, 27 Oct 2025 12:54:51 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%6]) with mapi id 15.20.9253.017; Mon, 27 Oct 2025 12:54:50 +0000 From: Alexandre Courbot Date: Mon, 27 Oct 2025 21:54:41 +0900 Subject: [PATCH v2 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: <20251027-nova-as-v2-1-a26bd1d067a4@nvidia.com> References: <20251027-nova-as-v2-0-a26bd1d067a4@nvidia.com> In-Reply-To: <20251027-nova-as-v2-0-a26bd1d067a4@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: TYCP286CA0323.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3b7::15) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|DS7PR12MB5863:EE_ X-MS-Office365-Filtering-Correlation-Id: 68415e14-1821-4a4d-b9f4-08de1558040f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|10070799003|366016|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?UTl5UlRKV08rMTJaSk8yUnlsUGRNTFFLZThFOXdTSmFES2NJR3dMWm9peFdR?= =?utf-8?B?bFprQlk1NW80cy93Y0xaQTFZYk80b1k4U2dWcFZ0djRsWVZ5SXFWai9hWklw?= =?utf-8?B?Q1hRcXp3NUIzSUkvVC8xZ1I5ZTR3YXNUSndDbWd0MXFSa0I3RXhXd3U2cjBU?= =?utf-8?B?NkY1WEF4WlF4TDI3VEdOeHRhQzVaZ3NXSnZNNEMvc0tiM1ArQnBIM0ZyY09r?= =?utf-8?B?UGVaZmFiVHRiN2FINWF1SURsTHRndWc4ZmxMekI5eXExaVJFZ0Y4V2xoRlFT?= =?utf-8?B?aU13dGdBeXpsdjFZcVlnRzByNlQ3VEpZdnIvY1BNM0FBbEVtZ05vRS9VU09x?= =?utf-8?B?N2hRMTZUQnAwdTl5djBBQVNMYU96UWdTcXZOMWZDUEZVTmdIVmxLa0trTEdn?= =?utf-8?B?ZFpXdkVzSnlod2oxbHRWaTNYdGNHTGp0YzJGajgzWFQ4SjZjNTVIdW9FMENG?= =?utf-8?B?WjU3TUdMeUF1QlhKbmdqYkJsYmZtZlViQ1R2a0tOcUdCWUw4b21POWdOUndX?= =?utf-8?B?KzBoV1BYYmF0eDEra3ppVDFWbTJBQWRxYlZRUG1LdmtseS90RkkxMm8wdlgv?= =?utf-8?B?cWFheE1mOXpZM0pUUGFkOGZrbm91bzI1TDRCeGxhVXoxZk5lYWNKZllPVVUv?= =?utf-8?B?S0JEUzcxNmp0ZVR2eHR3bytmbnJVdjVXRjdpMVdJbGVNd2FqSTdObkdQMlRj?= =?utf-8?B?dCtZWjBQSnF2VGs1eFIwRVZtanBFNGZrZklGTVp1TE52eHhqMkppK01hbHI3?= =?utf-8?B?K25xa1NiZ1NOTmV2M1ErZGFFUVMrZlVkOS8rRWFHWnpCL0tRWkVMNTFiYlJ5?= =?utf-8?B?eWZFWkhzSElXYlNhMWJnM1luSUR6b1FpY2RxMll5YTFQMmVTZkFqdWZ2QVk5?= =?utf-8?B?MDZZNFl5UjU1ZlBaK2JPSDR3cnVqSVg0bnBHMzhHRE5WbndkTVlnbTN3NFNO?= =?utf-8?B?SEMyQm10TjRpWS94T3JjM3lKL255TnBmc0VxM0lKcW5IczBYN2E4VWNMQUNv?= =?utf-8?B?Y3BjbG9LdjFlT3JtV1o1RVhpMURYMk9SNnlMeVVRTzR2bUNROG5hQzRRUXA1?= =?utf-8?B?L3A2eUJqY2xjQVFuckxaMWdpT1NNaFg4L3Q2Z0daQWsxeS9VTTFoVUVuNzBV?= =?utf-8?B?ZVVid1h6NEdlOUJheStpdGxtYStWSWJadHpaVzYxakVOd090bXFCRTNpa2hO?= =?utf-8?B?UFFkNW9SY2RTNHorSmo4WWVEL0lTWHJqSmFObUlCM0hTMlUzVEZodE9YcDZn?= =?utf-8?B?R3VpbzZVdkRYU1M4SjNKajhGbzE0UndNYjB4VWlDa2JUY1JraXBOVjVpK1VS?= =?utf-8?B?a2RZbUI4NUZZNERHdEs1NkdaQkxvTlBNWTlScXRoQlk0Z0pheXdzMzQ1VHhI?= =?utf-8?B?QUV2cXBnTDdBK1pXWEVSZ3RpNVB5UW5kWnpOWnFXQzlpZmhiV3FvVUQ3TjMr?= =?utf-8?B?NWxiejlrYmp1QVFuNVZJVzNacHdhZ3JxN20wUVViZFFjT0pzU2tjdDhocHVK?= =?utf-8?B?R0YwckNwN1ZOWE5ReXdLNWg3OXM4aS9RUTRrK2gyRkdWa0FEUTRBTEp4YTJF?= =?utf-8?B?Vk5KTW5ud3BIcms2THJVcGQ1dGZlTWx2ckpIbVo4bnp6OFdMajBYeG9uNWdn?= =?utf-8?B?UnNKcmttZGV4NlpWOTZiaEIrbFBQZlhxbzRjTTBVYUVTWm1nOWc3Mzc0Y3FZ?= =?utf-8?B?cGUvUUVIVVVqV0s2ME1CL1FZeU9qUGxITFR3NndBOVpuN1FkbzcxR0VkY2xn?= =?utf-8?B?NFQwYTMvQzk1aWJSOFQwWHVNT0p2b1dnaFp1cUJFRndBV1RXYUY2YS9hUzdv?= =?utf-8?B?R3FaK1RQdmpIOVVDVGlPcUtFL1BUSjJ3aVpNTU9VdzNKeEtPNkxmd3F5OVo5?= =?utf-8?B?NDVFdmtNRmpyRVBoZld3VnlzNnZMQXFVVzh0MDVlRHJET1c3OFBlV0M0WEF0?= =?utf-8?B?ZWY2VGR4YVFxOGtOVUZnNXp4MlVFYVpHaWs0WjVPalhyS2NYaEo3QUtuejcr?= =?utf-8?Q?7hPAPt/jCnK2RK2ngbBD4gpHuM/Kug=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(10070799003)(366016)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?K1FCMDg3REY1VW1NeEFRSy9EZk01QkkvMXA3M2Z0aEpBdnZhUTM2SzZsNEtk?= =?utf-8?B?OGhQSkhaMXIyd2J1bXNkb2g2RDZlaXN2QUVkZ2hoeU9zQXlQcnFGSEZPQU5C?= =?utf-8?B?dmpaSEJ0NDlWcGxHeUxZU2VQellDTjVPSTFCNXpQM1lUYXRaQmg4cVVWNE50?= =?utf-8?B?dy9MSHZiQW1BUURLbXRtTjFLaEQ1anVHZ29vdS9xczhFUCtRbFhoM3VoVGtU?= =?utf-8?B?MDVQelR1NXh4OUZNMkRQOUZaQzdNTWZaR3EyaExhbXl4aStvd0VwTUkrUE1B?= =?utf-8?B?Uzd3R0Fha0pHNW5rUmROQ0NabW16Z2xoUWdWUjhLZWp5d2lUblQyN05ZaUF0?= =?utf-8?B?UWVPR29pYnRiZ0E0ZTJKM3R3OHhjTktISGlTV0x6b2FLMFhYWU40WWQ4NU9P?= =?utf-8?B?aEM1bmlySG81dmI3OVV4RGw4NVRHcDVhYWxYcm5peVJyK1YxYnIvYXhqLzlk?= =?utf-8?B?c0NSZFYrWHVmZVM2TmtCUFQrZ1pJcG43cHBDT1pPZWd5SGJUWHhMY3hGNUV4?= =?utf-8?B?UmhxUW1xRUtkSTNPZW5UWHgzcE1McWk2cS8xbzdISkdQbXhCYzBLSW5TZ3ND?= =?utf-8?B?NG1rMUI2V1RDTGN0QnhXNjRVOW9OWEVWN3VvNHdjWXV4a2x2dDdXWkpWMTd3?= =?utf-8?B?ak9NZ0lUZ1VUNjBUMnpaRTVzaUVVbG1nZHJJUCtReFptbExwUERhYXJGNDl4?= =?utf-8?B?bWRWSVpLelV0cytvNWxiZUgvbmF5WmtQbnlZL3dJaFNjZERkK2RaMlpXOVdJ?= =?utf-8?B?dVFCVm5aZ1VVRGlmOWhyTTJkbGM2aHFaVkhmZ1V1RjJzZUZZK3g2djlDRlFI?= =?utf-8?B?d09yNW5KWlV4MzNtY1k5bk9OeGQzcHJvM2xIaHArd3pjSnN1aVhCcXpvRXNS?= =?utf-8?B?U055NVhOUFVCckswWWNLNGh3TU1NdmZ0ck5hdE1HRWZSb21PWGJWTllyaDky?= =?utf-8?B?RE5lb2Vkdkh5TmdSTmRzRTN0aC9MQVB6N1FIdUpFVXJwQWw0WjUybkJSTnpJ?= =?utf-8?B?aThBOVdjWlZlOER3SytQS1lXYjFQYi9Ud1oybGUyOU5ocTVhdHlOSndQSEtN?= =?utf-8?B?RWQ4ckZncVp5WFZtdzJ2c2dIWjdvRURnZ3hiTHdkQWlDTENFamYvdEVoYTdQ?= =?utf-8?B?Q1g5WEJqdUFnUjdjLzBkT1lHY3JTM0FEa3A1YTZ3YWlDbWY2NnRSVEVFNWR0?= =?utf-8?B?OUs2dUJOaVVQbXJ2QXpzK3pVQVdwT0Z1OE9RS3B2OW1tL3JOLzVpM3h5dlFH?= =?utf-8?B?WGJjckhKSlJYTDMvMnkzRnpraTRqR0ZZU2hoeTJ5WW1ySWI3THcyU2VuUHp0?= =?utf-8?B?b1I0OExJT1ViSlNYZ2hpMk9XYlVEaU9UZFVzZVRVWnlETG9VdURDUFF0TXlG?= =?utf-8?B?aDlTYXpLZTdwN2pOYTVsYTE3U3RwUk1obmlEeEhOODM0SzZMVTZ2OVNZR1hE?= =?utf-8?B?eGVVTlBnODUrdFVJcUhQRTJNKzhUczVUcmp6Nk9haFJaT1JSSzFuVVV4S0JI?= =?utf-8?B?ZmlzY1dRZ2VKZ0s1OG40QS9lZmdxamFLckVKU21mVldHdllMVEZlOWlIQTN1?= =?utf-8?B?QjNNYnNyYUZ3NjhCZ0pwemo0eStEYkwvWXBCU2NubW9sUzFQWVRab1Z6ZW9Y?= =?utf-8?B?YXV2aGVQdWZxdlE0SmxKV05mRG9oZ3BNU0Y4bjhnWDY3VGt2dVBXL01nTzZZ?= =?utf-8?B?bURsT0xLaVhiREk1VWFRQWVVZU5tVkNkVXlhSEJmYTZONEJWZXJmdFFoWG1j?= =?utf-8?B?MitEN1Y3Y09raGVhMkYrRHpTaGF2aDk5dFYzMGk1a2hadGMreGlqMkl3OHJW?= =?utf-8?B?c1R6TkRNV0RQbHpaeGNmWkw1RXRUcnNXZE5SeHlQUDNkSFlaUDFoMTRVNDRU?= =?utf-8?B?MDJtSUp0aHNNMTZCaEpoNGxaWGJ0cVVjbXd5TnBFdTBBMDl3TFdRTzRuVzFW?= =?utf-8?B?ZFpobEc2MVozYk91dmFEOE0yV2w0NGdJTG9tblF0SDh1eXFlTGlwczA3N2VJ?= =?utf-8?B?OUtLOVlnREF6eFp4dlVtb1hFbG85eUJoVFVTMjY1Ui83ZmxIYTllVHdtREdk?= =?utf-8?B?allOUFFuaXN6TlluZWt4aml5L2wzUm84Y0ttajFOY0hDeENyVDEwOHZoVVFZ?= =?utf-8?B?TDhxY2RPNHhBcjY1YnNxVTdEK3JmNHJFNTVubVkxaDE5cDhtSzJXVG01VGlp?= =?utf-8?Q?WZK9cgF17Sbi7Z+oX0H56yMpJfZ1D9vUM0otZ4VK/QtC?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 68415e14-1821-4a4d-b9f4-08de1558040f X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Oct 2025 12:54:50.4202 (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: r+s7H3unUy8P8ato0dgBq5kQKpaPmGpM8j6So13SRf2RHpZU4SaxSh3LH8VL9XiKK7iFgc7opM6T6a9/GonN/Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB5863 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. Acked-by: Danilo Krummrich Signed-off-by: Alexandre Courbot 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 Sat Feb 7 16:26:37 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010058.outbound.protection.outlook.com [52.101.56.58]) (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 1FDCB24397A; Mon, 27 Oct 2025 12:54:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.58 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761569698; cv=fail; b=tSHbDZ5yC178XR7e589V8r6SoL+MrLAjEcQrwBP9DeAYvt0em84E3hbxZaklvf5rBWsqyHZ9CQ42KGzish1bLy8i+7VEFqjow/ChkKm0CqHC6u+1pAUUs9L/ABDRjQNIRg622A82IAbBZRPYltTIcvvYMDT53S8qq+x1LwlhCmY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761569698; c=relaxed/simple; bh=EIrftTrqlz+LsKlASDhIQbY4pdtr9jqdUUrzhFWgrC4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=FT7shKui1T48g+vDeEh8g8H2awPxp+ebEnY3+0Yzo2IgzHMoZqkJjmHctnCy7sWcgAA1AWPTanRtB49TWo0FCyLBmCl9R49WpFSg4zqkMQq3ZQzjNFTagpO+qQojZljSGetuxV8B8TL4nEJ0i2ki1Q6uDETRs+xEyVnmv3f74kQ= 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=I1S0bw1L; arc=fail smtp.client-ip=52.101.56.58 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="I1S0bw1L" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YSQ75uWo4rFF1EbpUl98dcPgnIr9QFtt5yZZ8HKgb25vhL3jRYGjbC6Dmse3ubyvR/35cDLPuPv8eZ+LJe5xo+uR+uVXnz5HfP5hg8vQFGslCOK2VVFf+9jABO9hUGyV2PsTWbUYumDTW0SUbsiidlQPSpIl7jYWqe2hANk2Xl70nvfu0YbRLIlM07fyhOEVG9a7891YG0LIkfDiikaBGR/XLzaLc7jIfUdgQdbrxPLJVfPFKJuYeusrPdd4JMuUhBTVrIn+q82JontQVN7tFmtr00jR4XIsaPLzbQGi0gu1eUf6oKdcAM7Q/ppzxn/t4qqfw5Lsx7ZiRo4amQie6Q== 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=ST/NRuXz5oB9ccTZKk8ndDVRxdtoyIa0gCXH1x1pt80=; b=Wpa0GmmQJJFgzVoX89fKLLreIxK5C2B2wjXCyDQdY2t0e2fDbT6Bph+7Bc1t1Q+NqXz0QjsWfRsLrQ9FMLpUqJMVD9rXehOn+gUj3C/iLyeZEnuEzRUn7TRU/5LLO0t6X/5U8MzSeHpTjoRqtQSECNiG+zcvEJ1/+j1FEr1iPhLEQeYIkv0ztDYj8guihAeHcbJKyglz8h53fnK+UaOD0YQHpHvczfNXu5zChpVeG6aEppG8uIC94r/4WSzqUAGb4Ki7ySQrNficD8TYNM1iijGrJAUfxX4UVnEu7CW7MuQsbQecO1mDMrnWj/4V8nT3Cr3KgEGcQ9c31rYJ6N0Ydw== 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=ST/NRuXz5oB9ccTZKk8ndDVRxdtoyIa0gCXH1x1pt80=; b=I1S0bw1Lyjk48doneVeIlXQkegqjXLf5QS8qIMlIZ20N6XrPCfcgofT4eRS/ue5hXZAbUcwJ6OtK9E9WiLT/1VSM2iwjSyK2TwJOl4l5q28W2s5ajASwCPTPjm/mbHGjo3EdhLWPh7ND0/USNltia+l/fivvO6wMGBAHgwxFmbiL81B8+JBqDX6AYimVTQ3vr+1sAPp3GbqKlri2m/bqR2AHrr138PuZQanyij17kaBf5lRyJBbgCrVU17OVXsog1zLV6RDj26xawu3LxKnueA9+Sn3MKLU9S7rK0BYLC+F0Z8B6l5xYYyaMFdS6uFjNSFMXGGT4jdP3xgUCdI5aiA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by DS7PR12MB5863.namprd12.prod.outlook.com (2603:10b6:8:7a::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.18; Mon, 27 Oct 2025 12:54:53 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%6]) with mapi id 15.20.9253.017; Mon, 27 Oct 2025 12:54:53 +0000 From: Alexandre Courbot Date: Mon, 27 Oct 2025 21:54:42 +0900 Subject: [PATCH v2 2/7] gpu: nova-core: vbios: remove unneeded u8 conversions Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251027-nova-as-v2-2-a26bd1d067a4@nvidia.com> References: <20251027-nova-as-v2-0-a26bd1d067a4@nvidia.com> In-Reply-To: <20251027-nova-as-v2-0-a26bd1d067a4@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: TY4P286CA0079.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:36d::8) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|DS7PR12MB5863:EE_ X-MS-Office365-Filtering-Correlation-Id: 0a09acbd-f856-4fea-f044-08de15580614 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|10070799003|366016|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?SEpIakdRSWsxT1hQazVmKzlEb1FzRHg5eTRENThicmdDcmxxVlNjNSsyZCtI?= =?utf-8?B?N3l0RE9hdnp3LzRoRXVjb2prd3lONXZnMHZzeTBVdlV5eU81ejZGWDRNWnJ2?= =?utf-8?B?d0JxcUNHenhWV1ZKelFXVFd2RW1uN0tSVVJoUGh3elRCQTA2WVB1QUpCeFkw?= =?utf-8?B?aDQ0cEloVEdLRVhLWmFIc0ZIYkpabi9TZXd6MGw0bXJCVDE2aDZjcTQ1VzFR?= =?utf-8?B?QmU0RnFNQmVNZ0R3R3VvaTErQktFZVV1MW5KK0x1STcvR09RT2sycm1mYjJM?= =?utf-8?B?bTByNm1nZ0pDeitJcTVrU0hwNXRIUUpKNjR2c2diWHZJdDk0dUdOMWhhdmFl?= =?utf-8?B?d0RLM2NlRWd0Z3ZhTjhkS3JTYUNYS0Erd0JSVnpmUUxack9za2I1ZDMvK0Jl?= =?utf-8?B?bndwSGpueVlpV05tdGd1ZFdEMlJvalFobElHUDQ4V1lDYmwrV20va2d2b2J3?= =?utf-8?B?ZnhsTy8vbjRJN1dWa1lJQ05tMWlYakdrYzh4QSs2aTRtdWRka2tQcjEzd0FO?= =?utf-8?B?MkxEM2hRaEV5SmJQeWhiRHFlam9nOEdpT0ZRZ2J0UUVVQmhqWlM4NjZ1MGh5?= =?utf-8?B?SXlZb043ZDV0OTNnb3hnWnZHbXBobzJRNlFBaFQxdWthTW9wb2xrbHV2NXJt?= =?utf-8?B?VWhFMUw3b0FtNUdtakEwdmZIWmg0Uzc2dWRYbU9kaHJXNnRVb3IyOGpoV0pF?= =?utf-8?B?TUx5SUxoTzVick5JeU9qekRYTWFFUGpEZHNWcC9XMFRndkF6bGVzSzZhY2dL?= =?utf-8?B?NUlVbUhheDlzblduQ2VMMVFDOExIWitCcFhsbndnWGpwQXp5R1ZYUjBrNkkz?= =?utf-8?B?OGY5Y0NSbU5FVHo5b2NiZTBMaDFMT2NYZFl3S04yeXV0SEUvS0oyRTNHQ1By?= =?utf-8?B?bjRJVTZ3QTJvRTRsaFBTTWgveHhWT3NRbmRlaElNYUt5S0FiUWVGeWhLc0wr?= =?utf-8?B?SVM5eVFzZk9kZUU5TmhpeGdWRGs4bFgxUFZKRHR0ZHAraUF4L1dNWjlSRDgy?= =?utf-8?B?MVZzeWptTXRTTVhISy94NVY1ZCtHenU1K0pVcER1a1ZIZG1sT1A3YlNqWkU3?= =?utf-8?B?VlBlL2orTE8wUy84WTRNZmllY1lmNHJJWFdXOWxONE4wcHp3bFZ2djZ1T3Ar?= =?utf-8?B?M2FwOFNVZ3dpWkxMVXpKQU5pbnplbDlTRUE2c0k4SzJhaTFmM1Vzd0trTGVZ?= =?utf-8?B?WkdLbVdBb2hQMlQvRHZPWmFJTnhDWEd6WUVGNktOWXJFWUtqT00rVG54a2RB?= =?utf-8?B?SEZaRWt4UlVobEdjQWZEaGFQbjBaVlZ4eUN1d1JxQ0JpckdyWU44eU9zQXVp?= =?utf-8?B?NWpRbGwrV0F4R2VxaFdQZW9LVFA4L0s5S21FTFpvazd1RFg1QUlCTFk3Q0Yz?= =?utf-8?B?M0RIdHlualZJSmttV0JSdE80UlBna3kzbUtSRXl4ZkJhRGMvMnlWZFBmRjR1?= =?utf-8?B?VDl2cWpVZXB0OUkrd1Zyc2xuOEt6YmYyT1V1QkYwNjJhZW9wbEd6S2pqcjlx?= =?utf-8?B?NkZnQklnTHRKdmVncnJtUS9jS0J3MDdDNC9FT1pac0VqOW8zeFdVa2Z0QlRw?= =?utf-8?B?am5HV2txNVIwa3VJSmdrUlhpdmVOUlE1ZzkxNHNoaDB0cC9ET2xVbG5wQ1E4?= =?utf-8?B?aUlhR1c5WW5qcEgrMS8zVGNIeXpEbHFZdHZuN1RGRnB2NHRTNHhkdkhjME5X?= =?utf-8?B?MlI3TnhMRmZ6UHN1TnVxRkNUTU95TnptZmhQZ3dCdTBGWktmNFdDMENzMlBu?= =?utf-8?B?b29RQ2lIaGVmVGc1dlJuTHBUTytzVWNpUFZuKy91N0djOS9tMlEvUy9sSWlh?= =?utf-8?B?ektkdWxCUzczQ0N0UElhTjhvTG9HWVd3dHg3UFUyVTRCd0VPLzFVK0U4WE1H?= =?utf-8?B?VE5KRGlYdlpCeU1rVkY1dm1rdG9sbXBFZXQ4NXd5VmVId0s0ejd0MXRlQzBI?= =?utf-8?B?TjlJc21uZWlDYkVINXhsWTdoQ2hJZ3p0aWtFbk5JWGZRM0svOHhrTmNqdWIv?= =?utf-8?Q?WGsoa6EOq++wC7Jkz42bUJh2AeIkRE=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(10070799003)(366016)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QmdhTFBuUjNoYzdrandpd0diN1VxZkFYdmhzVlFETVVxYW1zeDludjFHcTJ1?= =?utf-8?B?di9EOXBhSEJxNVozK3lvZlZHRFNzUUZEM3V0NCt6Y2dzZzJhVk1WVDdoM0x3?= =?utf-8?B?d1cxWGx2Q0ZpdDZKR0FkdlY2cThSTmdQRkFTc0ZMeVFOa1VZblpOYmwxMVZN?= =?utf-8?B?cU1wNlpPV2JtR1BwK3dNeEEzU1Z5bUtYNDZzbWZZb01FZGRvSUxCcUFna3c2?= =?utf-8?B?ZTBWZmdSUFlMMXhnc05vZjNpZkVmYm14T0Zwbk5lUjcrM2hkWEE3Z1ZRREc2?= =?utf-8?B?c0JwSlYzSElybDRCNFQ3OVd0Y2ZQTWxDNUJsZEVDakM3RGVEQVRGbldGZ3Vh?= =?utf-8?B?RXVPL1N4M1JWRGFXd3VzK1RCejhlNUZWNWVrWXkyY2x1djdVN0V0Q25RNVVM?= =?utf-8?B?TG43Q3I5RzkveFl3YTAvellmSkZQd1FmOEc0MWhieURTbkRLSTRxcVh0UU84?= =?utf-8?B?L3JYNEkrc09lbUU2K2lMdWlRcjYwempIajd6MEo5Q0duQUZScVp5RkJQSW13?= =?utf-8?B?V0xyZkl3eVc1S01iR1BPVzNmU2Ztb21SK0Q1bHpxbGdDamhhWGZ0MkVwM1dx?= =?utf-8?B?Ump5MTRUREtsdC9IOWR6L0FTRkJzQ3FrOXVFcVVZRkhwM1N5THZoUGg0VUZZ?= =?utf-8?B?QXB3TzhPVVhldkVHa3ZOTEJaTzk5aW5qaFhCL1BnZDVWTU1UMDNaa294b2RJ?= =?utf-8?B?cU95UUtyZWJmTnVWOEo1ckR6V3Z2TEMwTzNrQmFlb0VQa3NxNUl2Nlg5TUhS?= =?utf-8?B?SE5DbVVhMU5ITGdiYnFhak83eVZla1Q0Q2s0S0VlSnhMT2h5YTgwU1pCU3Vm?= =?utf-8?B?dGgwaXJYMGlFWC9OdVlLdkdGMEVINXpibGhneG1wZms2N3BGWFZ0RmUwVWxJ?= =?utf-8?B?YU5VWE1PMysrRWpWcVVjc1VTdFNXcFBkSWg2Z1lHYS9HMEJmeXBEdnRVN3lw?= =?utf-8?B?RXh6bC9JbkRNMitkTWVKeGw1RWlMako0aWdOM2p3VmFLeElRNzZUT1hGZEZv?= =?utf-8?B?NTY2b0sxd1BkeHVsZTdHcDZ6bldlV3NMRSs5NUpsMmtnMlNQTFFFcGNXcTh4?= =?utf-8?B?aDZ2NFd0M1czcjJjVWlOVmV2N25PbDRKV1hETEw2dVkySlBWZ1F2ZmI4YUZw?= =?utf-8?B?UEVTejhneFBRdGk2RU8rS29SeVNneHRXRkRnMURHc3pXT2NXdWVpWVFOZXkx?= =?utf-8?B?bEUvVTh3WlVOdHZPSjRTN0FnWDVabDMrWE9vazRZYVVMYlA4UFpId2pwUTJk?= =?utf-8?B?N0ZuYTg5eXFLMzJBMW5rNHB0RkxQbU5DUmU2MjFxRzA5U3l2UDJtYzQrV09C?= =?utf-8?B?czN6UFlUZHo1RG16Tk1UODNMelBuTkFNTFIxYi8zeW4xUjU4U3JuNzl1S2dl?= =?utf-8?B?TlJ0NFFkNW9RNmpacDRycFVFUXRrRGRrMldWT0pRT3krU1JvRzdCdDVxZFUz?= =?utf-8?B?cFp6NGVZM2xyaVZLQ1kzOGNVaDhjYzc4S1huVU0xQmVGeXRHRnM2K2I3Y29w?= =?utf-8?B?N1MyVDhHYk1VbW4wcWFBQVVqWjlQODBaWCttV09sQi9PM3JYK2puZDcxb1hr?= =?utf-8?B?K1FMYkxDOHVrVnB4dlJlSnhneThnMHJ2b0srVU9mdGsyNzlxV09NRDVRblU0?= =?utf-8?B?UVRMaHJBYWpOakEydjVYVzNmdnErSG01eHR1V2hKTDdvMVJ4SDgxbmNnQUhE?= =?utf-8?B?VUxSQU1yRE8wcTVuVzVQYitwdmVIN3pZOFkyQmdxVkt5R0lZWjNsVEZnS0I5?= =?utf-8?B?TTNTVWZCUytPM2NFL0hTSktrb21ObGkxR3JBSHRUMm50bmwrclNjcnNFTHA0?= =?utf-8?B?N0VoaVJKUjZkNlltUWcvMGdOVmhCbGhaSjRsM1N5eDhmZ0MxVEpwRDNZVDdT?= =?utf-8?B?ZjZOYVI3YW9qcjJReTFmb2sva2Z0b0k3MnNVSE5va29LRzNOK295U1RDYkVU?= =?utf-8?B?TUl1aGJuTWdQVzVsa24veHNodjhNcDhuQ1BTUk1PTVBzS3pQUmVzSVl3Q3ov?= =?utf-8?B?V1ZrbVdtUVQxdm1xNUtmRXg4bGllMThvUzRQQmo0SVU3YXFOZ0h6NkxYTVNO?= =?utf-8?B?aVNaeFlTc01saUJUSnFQRFhRT1hTSjNDRTNrWmluMlFmYzBKbWFZMUJXM2xu?= =?utf-8?B?WnNUQUxnWDRXZ3ZpcGo2bS9PSUlVUFRvN0d3SXpGSm1mcnUzMjMxUmIxTEJL?= =?utf-8?Q?DN1WgFFGPaX1kBDRTJIszrTTLr1lUUO5bywbjnCoJC7T?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0a09acbd-f856-4fea-f044-08de15580614 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Oct 2025 12:54:53.7995 (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: t2NdLYOy+jJjmYyuNJ65i2Udv9FfwPB7VThlURJzm42HPS8HOY82cJqUSiZiMnMOIQ5OtUClVg0uLhqPocVP1g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB5863 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`. Acked-by: Danilo Krummrich Signed-off-by: Alexandre Courbot 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 Sat Feb 7 16:26:37 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012044.outbound.protection.outlook.com [40.107.209.44]) (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 1857425524D; Mon, 27 Oct 2025 12:55:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.44 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761569702; cv=fail; b=UT4I+LlvPGz9R3EpLRbDzSdUslx5Mke+wnIF5UxjEFKZmRoFDdzWc5YoGZsr1Z8nwRJPTCDeYf0yXqDSDkW7JrK6iln/OWTCoXYMYWzylAfoDPz/RK/f00UQ7WQjgjpl2TuWgeBKika42oUVgsocGOxyR8zvZN5gmnHvzpevYiY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761569702; c=relaxed/simple; bh=sVEhy/s5E752QOaF5RbAwuFn09tjPUJS5QqZ/v1vz6w=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=HI/x9ebyNMwfLu0ylMvZJvylDAoKek/6LlzbWNUwu1IvzPkjZJougZmKrz7I/rat9asAcUQio6Z36sN8vCkdXVfIpF8Y+mt+Yy1zwEfvXT1rLsJkgoGjn8ohv8Xg8wnHxihmA2ku6sw6yybt0ZuEc7xrNrJA0w5gJNvaA/Mljm0= 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=KtCQ4afJ; arc=fail smtp.client-ip=40.107.209.44 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="KtCQ4afJ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QXVPVVX7XWyGiuurxnGPa3joVOPkFlkCCgdK2PHRUPlmbEmp6KiLetuE7IIAa2+8z/Y6Ra/SJ1pZdRLdo0pk8PpO06J7mG/+a3RHLayqpaX9VUXoPvYXngM9AERDo7vUlGAlWym2NdhoCK0hMoq0vDl8ibWCip4XzGX9p0q6KAlouEawnh3vJvMeY6MrenH2DYDNhJJmR9S5+Uqjg87BqlcCEEcAQsKMg8Jw9IsKcdRT5yriHHyZ5Y4rS/p2cjsEaEOwAaJr/JKtjRjqQa26BedR8LE5+/P32N/vREGCKe+DCWI/I7Qzjx9G3FSR4i5yBVIrlJPSJ5wSh5sPDo7RGQ== 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=/6fCzqjMaUDqy2tko7mnL4hTaUlULEKaoR22YFBpXjA=; b=qii6WTQTp/3txXqNx7W8kkKpJtFAuVMBRPWsCWGSDqQW4Nlj1AAtRei3gos86cNumuaVOlgFE0hhHP5j7XkRilZnJr/o00ytaOxk7ImQ4WD0T0ksv3jm4pGkFI+WTT+cwQwAC3OKsoxZvXCAoSZB+UbR2VEG7so3WT/sUtMp0+ePUcCG4LEShOXVdW+1KG+b9kAMeKhIr8R2xbW9JX9ei+5IZdkHIer7o5Q3CyyeqbVIGZJCLMwdNoXfFbhYhuDkwRIWt3Y9xK64tEsgISM+RCmiKVzgZ5lDR35MnZVU9j8S4rem0Tx/ti5dbWvR2IpXxp5WJlIUf60g6vdeFGsSCw== 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=/6fCzqjMaUDqy2tko7mnL4hTaUlULEKaoR22YFBpXjA=; b=KtCQ4afJ0XE3SXA9uIT/LtJ476n49QPxgQAD0fI9vl+xaER1OJ47NhrjMk2Fc7M9qKmJkXuDO6ExUL2FRGaBRKdIhv/ONrZ1RcIGfFzZ+mmSIpyzkdJwgI8eW1v390ljinSORcLhKF6jO+3hR/xK5HmSifqHiqOMMFd2B/mc1XPvvTczKCa8x3KRFHKtlByHXKqJKPxoA0JYqI9WyRoSVP2wi6LMuMVXNbtLGNeYW4Wi3IdsxwvNAHZ38cz4kZXkLUlt7oT3HFtFDe69tYXj6Lsw0u3d0YSYH2/lYPcPPdJC4ZNSPZDfkN+3VhgL125ALJAjDjyBQoVykNoklxVchg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by DS7PR12MB5863.namprd12.prod.outlook.com (2603:10b6:8:7a::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.18; Mon, 27 Oct 2025 12:54:58 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%6]) with mapi id 15.20.9253.017; Mon, 27 Oct 2025 12:54:58 +0000 From: Alexandre Courbot Date: Mon, 27 Oct 2025 21:54:43 +0900 Subject: [PATCH v2 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: <20251027-nova-as-v2-3-a26bd1d067a4@nvidia.com> References: <20251027-nova-as-v2-0-a26bd1d067a4@nvidia.com> In-Reply-To: <20251027-nova-as-v2-0-a26bd1d067a4@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: TYCPR01CA0198.jpnprd01.prod.outlook.com (2603:1096:405:7a::19) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|DS7PR12MB5863:EE_ X-MS-Office365-Filtering-Correlation-Id: 0d1a9aa6-aeb7-4e52-198c-08de1558089e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|10070799003|366016|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?bUU5WDRPOVZPQm1BTU8xdEFRZnVOLzBSSjRQMmVlL3NVaDV3UVBoWGhzUENm?= =?utf-8?B?UkNLOVQxSzN1ck9uUGVodk5ia2tvVlhEWVYyVjVrb252SExsenhVT3IwMHJD?= =?utf-8?B?YVdWVm5KanRwZUFZM1J2Tk1BeVdaZkZra1NKUUp3UlRjQ3Z1YWxGbkxpd00w?= =?utf-8?B?QmVrRGNkV2NCSjhYS2MwbXo3bnZmZEtUUCtIRE9GcXhyU3pZWmhya1F1MDhF?= =?utf-8?B?d0JVOFVsd2xnV3dlUzVwUnYrdEZWMVUvWVlwVC94aW5LUXQwdVVYTDIzcHhw?= =?utf-8?B?ZXU4RU9RSnAzSElmL3FZWHlDTHZPbHZQV2FJcWpjbEd2UE5pcjgrTGgyQXJC?= =?utf-8?B?ZWxxcWlVdVhlcXR4VWJIQ0RoQVNxaUFRVDluZi9ObXZLdlRvWlV0b1FsQS9K?= =?utf-8?B?WjFWN3lsdmp0OVZBU3dBUk1lbThHSGJIcDd1QzUxQnBsNDdKL0VQVlFWZVZn?= =?utf-8?B?YVJHS3o1RFZKaXJRSUJEcnA4K2tmNkh4N290SFNDWTdrbXVUbG8zUFBlMDF6?= =?utf-8?B?WG9mSkVVR0hYMnhuWVFiZGxkdndOWk9HS0R1K29xNmRQMzNOVXkrcXpkVUMw?= =?utf-8?B?ejlPb1NQNGhZcTVUaGJSSTN1eXUyaFdYOUQySHZzS2ZBVGptS1J6K3lvdlhF?= =?utf-8?B?dGtrNGZxMUd0aDEwT2gzWUFKME40alBlMkxnbzk3TnlmZmVTSXA4Rzd6TVdE?= =?utf-8?B?MlJtWk9mbElLc3M5bVVQcDJQd1FrZFhveDUzb0VYbk9RY1NHVW9OS2duOEFq?= =?utf-8?B?WFBORTVnVUFZMkFvNXQ4Mm9iQ1ROWmdKeDNzOVpjUmJhbzNDSEt4QnRZN0pD?= =?utf-8?B?NlRUTUMxMys3VUw0bWVKdXZIdkZMMkFIdVFETWZvbzFzbG16VUJtSnRwQWN6?= =?utf-8?B?NU9iSlFZdmtTUjVhUzEyc1hLSmhEdTlaM3hCdWhOM1U1d0JVeGZnZkxkZGNy?= =?utf-8?B?N3JleCt2M0JpajY2bVZBbGFydXBlRWk2S0FSWDlXUjN0ZjUrNnBubzAweWFT?= =?utf-8?B?bVpveDd4N0h4ZWVudWlXQTJGRDZvSlI1MGZrYVpoWkh0ajZPTzkwS0cyMDhn?= =?utf-8?B?Y2RxM1JzYzRzUlV5dllvUmRYSDRYYSt5dURraVZFa3YyTitKVWhHMHRaZ3dr?= =?utf-8?B?UEZ5ZVhubzE2WXBpL01GTVd3UGIvWG10d0FkZ25nNG05K1lVamE2TlBGNjlh?= =?utf-8?B?WjFBbSt3RGppdFhCd3JqVnpac0xBQ1RBUlRBa3JLUVJRRGVRbVdjUHluVy9s?= =?utf-8?B?cW9HY2xSSmlLMytkdDNVbVZ2YU94NTl4dHdFVnVQSFVvVnBVZFRkTUhtcWNU?= =?utf-8?B?RHZPQ0YvbkZxeFNub0l1bW84VGhnV3VkQ2xmemVtUDZTRU1XWEFDdE0wend5?= =?utf-8?B?RlZsdlRUYzJJZDhmLzlkZFN0ejl3NEdGbGkvQ2NUYkNudGl3YTB6Q2hReXVX?= =?utf-8?B?WmM4OEg3TWZJRjc1QlA1OUJlN29reldRaVlnQmVOUFREa3NaTFAzYTFkOVcw?= =?utf-8?B?M3EySS8ycXAwamhOemxEVjJ4d3RFUkgxMlJtTlU5WEYzRHVWSFcwOU10UHcz?= =?utf-8?B?RmI5Q0FtUUpzWGw3UkE5c0YyT2NuNkJVWE01ZlNPY2FrVTUzdTltOE5waHJK?= =?utf-8?B?UEI5SzZhVkhleGlCaXA3VlpiRlJ3NEg5U3poNmlrdElRNWJtbjV1Uy9hamxY?= =?utf-8?B?U21EY0xEbnJsOGkxZStLWmZEV0Q1cXZQSFFTMWJabUxGd1FnY1ZocTl6K2NK?= =?utf-8?B?djVibnZzTm1NcUNoR3N6U3o2WmVsTUNXM1BEVjdHR2tQYm0rNk5iNG1lL3Vq?= =?utf-8?B?eTVQZ1Q3NjlxeTFNTTZvQndOWm04UGRJaUtXWENWemZQTzQ1a0o4Rml4N0Zn?= =?utf-8?B?Wjh2cGVKTTRxUy9aYi9sc1pDRUZPVmZGSm9mL2xOaVFYeWNCQ1lua1dZMmRq?= =?utf-8?B?KysyQkU2TTNUR0hrWjRlNlBwZHB6UmRVTDhWcUZvZVV1VGhYYVFTd0tyOVB2?= =?utf-8?Q?3+a/jV3AD+bp/PBM10X32oHhlUGaHY=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(10070799003)(366016)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MkIwbFV4eTRLcDg0amFLTUxwenpjNUJ1ZEEzNDNaTEJOSDBVNVNTNU9MMzlY?= =?utf-8?B?RkhnTkRnN2ZiSG8rSXNuRys5WjNXcFdzaUpkNTFzS2I2MURvZ0NGcXk4ajJr?= =?utf-8?B?TWZZYi8wWVdpSG9OeUxhWDFKbVg5dVhodUV6Ni82VFN2SzlnQlNadHZ6d0gz?= =?utf-8?B?eU5ZOXU1V09NdzVlK09xa3kycmdzblp3VW1VZ2U5KzR6YndiSlV5RFdKUzdE?= =?utf-8?B?bTFIMHduNDZlY2RXWnpSaGN2WjF3VEgvUzVTd3IwUVE5SWhjUmRKL0RxRHBz?= =?utf-8?B?OFpPcVV4WFltK0RRSmljYUVBV1FxZGVtYVMvbkdoUmxmUHFwejJBYlFSYVRl?= =?utf-8?B?d3ZDSUxKc29qQ0dVSUxzeUoyK1B2RW9IRzYrT295d08ybW5OTUl5cWRWOG5n?= =?utf-8?B?TEExOFluMXc1cWhqMkpjTjhFTnQvMVdRaFZheUNwRHFSSjVoWE1ldC9pZjlH?= =?utf-8?B?dkxXTndpOXpGeG9BZzVlUFZOekoxR3lON3VteXZaYTFyejAvOVkvN0RHWjJX?= =?utf-8?B?NkVmUDRxVVc4OUtibWw4VWtaMENaYUFjL2o3UUNZUXIwdWZvakhZajVRYVRk?= =?utf-8?B?elN3b29vak1HN3k4N2FxTyttNU85bDArRmxvbE1UUUNkVFV2K1pkaStuUUFZ?= =?utf-8?B?aEJXSTlFc01OaEFwREhpUEhPZWkwNUx5Q2hNSXF6TFZMUktBY3FvaW1TTURj?= =?utf-8?B?dEttblJRa3pDdDRXNVl5RzVMWDRvaktVd2xnenhqNjZYTnBQeDNmMXJBUUM2?= =?utf-8?B?dWw1TURHTUJuZmlNdjF1cjdZWmJ2TDI1SUtRL2VITXFta3A4cjJvblRRakNJ?= =?utf-8?B?eFVHd2xHeldoR3FXanlPOE9EdWkySjAvZnhZOFVheTFQNDd0eE1acGljWFJS?= =?utf-8?B?SzFoeFZ4MkltOUpEK095aHlQR3dFQlpqTDNxRTdQQ09zVitRVGl5RE5oRlF0?= =?utf-8?B?a2RQVHdTdm5TY0NTQjZkSy9BdDdMSUVUWmNLMnBnbUF2SjBKekhXNDdsSXUz?= =?utf-8?B?c25zZFdzazl6Y0lKaFdUN3paRER2V084N0dncERLVkNtcGpLTzgwZG5tMm1E?= =?utf-8?B?Mm4za2FHSlVwRHRqc2VncXkxOGdpSCtUbEVkV2p0bUN4QVNyY1g3dFFzSkQ5?= =?utf-8?B?TUtYWmZLb1hjbzlWQzRNdDhKTUhGQXNBQnhtc0QxcUlHdm9iK0N5MTNsY1pL?= =?utf-8?B?a256UVgzMjZ3K1I2OXpEOUZWeFh5TEx6Q0JENFFYY2RCSjVGWlpIR3B3QlNs?= =?utf-8?B?UUlPbWNhWnBOQmNLWWV1ZnBsdFM5UG1YejloTFhFS21xV05QRDc3WHJ2cnpl?= =?utf-8?B?NHMxYTZXUVVqVG1XYmdIM241VEhJVHBUOUtkVjlETldFZTl2MXQwZTlIOTQ2?= =?utf-8?B?aFhCK1BKa1FWRHhoT05YQUFEbEdyTUFGS0d1enBIT2JLc1FaUENZQnQxT0tC?= =?utf-8?B?R2tsY2ZqM1NXbWVKcE1jaFhKaG43Z1lIalY4dDc4dGx1RUwyeUw4WDQrSzQz?= =?utf-8?B?cFN6emRDbC9JQjVEdmtqeldKTFVHUjg1Y2prc3loYkV5VzBTUGtLam5vUCty?= =?utf-8?B?bGVEbW9ieFhaanlNV0g3cFJLZmRnK0dKNFlFNEJGQXp0ZTQ4TjZhZStLOUJ0?= =?utf-8?B?YnZ4UUk5ZklIcmlpaThwbnp5dUlFOGxCUWtidktPREM5TXBjZFNIZjhQb3l2?= =?utf-8?B?WFpTRlhkV2xOdVJjbE5RTkU1L3lMNWQzVUY2WW8xamljNU9YKzI2T2dqZzdm?= =?utf-8?B?UHQ4MEk5ZXp6Y0xqdXQ0LzByaTBYemFENG1ia01EWVFsWUtBNnpra1NCbVJT?= =?utf-8?B?a0k5TS9vN2dTM3Y4ZGdmUTdVbGJyV3VWY2t1NnhGekIwbk5POWZ0TEYvQ1dH?= =?utf-8?B?MEV0NDM0V3VpUEwyMU5QbXI0am9sNVNSbnNtMnBmYW15bVREMDdIVTNrZElC?= =?utf-8?B?VGN6T2RpcUpBU1JrZ3M1WE5xRDRwMDY1Tld1NVNPVmVRbVpCSkdZUDJqY3hX?= =?utf-8?B?U0QxNDNIWHd3TkRaY3VEVENWYlc2TCsvckZPdWhFYWd1T243S0FsZTNxUWhY?= =?utf-8?B?dWtwcVVBM25BWW1SUVd3ZjY1UEVOZnFDSzE1bk9RRGY1eVRiRWEwU1R5L1hO?= =?utf-8?B?cjZrdU9MRmhiTk14OTFBdm9ITlVtM21FNDBZTkNQZW5Wb3FqVGVNM25VdWdB?= =?utf-8?Q?/DWBECCeKXKb/gIZOq8JjditnsYOkYssQoiOzso+OLSG?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0d1a9aa6-aeb7-4e52-198c-08de1558089e X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Oct 2025 12:54:58.0427 (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: PqLytC+K90XbLZSMxRLWQo43bXG60NHng3sNhkMzxOUSgSTZ8XniY+3i3ugN3NpzgBGtHfx5SYhCZz9464LcWQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB5863 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. Acked-by: Danilo Krummrich Signed-off-by: Alexandre Courbot 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 Sat Feb 7 16:26:37 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010039.outbound.protection.outlook.com [52.101.56.39]) (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 640922405E1; Mon, 27 Oct 2025 12:55:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.39 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761569711; cv=fail; b=Ogqgf/WANVWSnkdyHtFR+QqTT3gijOmtWzmjjD02ERvrCpDjcaLUrGVzDr+Z6vD8+UYbXap1yjhPRDTxCw9OLjX4GyoACMNpyOBnkEvSjkXMWnw8bd/J8d5UQ5nhYWqc1P7atDQIVzEM7Ytldln6VFvmydkhbL+RwYa6s4VWEc4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761569711; c=relaxed/simple; bh=XwVloCC2mesps2xKtCx+of1uqtXD2bEGqrl6qI12rBY=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=jZLTat5bIKYb7+u+G6eK9BOM6NIIbyyjCWfkQ4esl4iZ9kAhDKSh33ldTETRQDI/W1bxb99HsNXtl5v9i9zDq/wolnkUsLwjmLuPbHLPIIkZjqgZAGKVToL03UaDPMwu1/1iUhr0T5Svw7yZ2h9ALewlscKDTeRNO3n7kq0Et+Q= 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=PmUAkkCD; arc=fail smtp.client-ip=52.101.56.39 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="PmUAkkCD" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MT6sheelP6d1P9ycz7gXYfg6BZUWUCCrIA4nEe5x14uuJFOlyevzWfvKN6r8HRTvR1ko1yedUJnZy9ZOg7WzfzDOdVbQjBPv0W+5gaZfj2SgGliIySK9RdZQc0/9QoO6zR+K6VbOdp1ybznzgykm8Pbcp4a/U3WCg0yE3/NfuPe27KlvyKxMQMg0MmC6QwYpu3gU6xfN9bzMOz+kM1/dHfXxZ//4fOipU3FCdAjMf38Z6Gn8uyPzrrAJKQOK2HvuKuO46ROBD8pWV5/WsRFfvN9kP66g9aXwOcbRwawW7IF64D7MqHm8XKAoZwy2iW/nSmLGxTAzgmQjMIWnNPGzaA== 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=rjqFs444tv3AYVJw7werj3Jkg4M0YLjBvmfrVFIwAnc=; b=hsJFjvNDeinFjPLEgrAyaLa7WhBs8WGHIIj36NXsMaqVViTe2M9xFKM7dr5dM+2UrbnqOjaFmU8DnNvX4cWz703uhMPSMFhvf7bNp40nFGxgXt3G03zDMKJiRk62uL9V/G8fdFX4Tk0GKn6HhnJyvN45mXui8TdPXWyshINTSr2Su71bOOm6J02JlkqSecDV+KYEbrD0vWwcY0IwcZOkxNPHfXJUxvW4fY+NnUfBXxRf35smLFzupZU7CV36m+4wZmTeW3a10VNy+Aymfuwt24VrX6pQdBCwXyMvd6fTUkEbVLzEuyUwJPz12sIs7TFH0F5ovy3QGy5ULZeQ7MxIag== 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=rjqFs444tv3AYVJw7werj3Jkg4M0YLjBvmfrVFIwAnc=; b=PmUAkkCDqSv8w/ddEDK1g0zCdgy6EupOpW5dNDmoIgKhqlt8UYfYnGsGNpYwUXM2CmBOSLmtuoP+Ag+uU8rEWzWs5Hy3nl+Zx3YSCVYePWgKtO8NwTZmfQoOoudMMggs2WbhH5RG9ZNj8FwGkB6o/sVBPo/eyiM0rHDMKuhZbqFBIJoIMW232/W3tpYfYI5Y0BNROyi5R1pvlce488QMoFu3Mk6uvTlJ88u1CwwXRB+MjAPeHU6jVhtcqBLketx8VuTGygfRZAmfq+KSh+U9W9p4uyH4FmLbL2RS5rAqrmtvNMfnr2q/ewREWcjDX247mDaO6JGCx7vF57LmFHpHYA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by DS7PR12MB5863.namprd12.prod.outlook.com (2603:10b6:8:7a::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.18; Mon, 27 Oct 2025 12:55:01 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%6]) with mapi id 15.20.9253.017; Mon, 27 Oct 2025 12:55:01 +0000 From: Alexandre Courbot Date: Mon, 27 Oct 2025 21:54:44 +0900 Subject: [PATCH v2 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: <20251027-nova-as-v2-4-a26bd1d067a4@nvidia.com> References: <20251027-nova-as-v2-0-a26bd1d067a4@nvidia.com> In-Reply-To: <20251027-nova-as-v2-0-a26bd1d067a4@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: TY4P286CA0075.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:36d::18) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|DS7PR12MB5863:EE_ X-MS-Office365-Filtering-Correlation-Id: 2a8af99a-79bb-45c6-8edc-08de15580aa2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|10070799003|366016|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?djcrUUxmN1BQcER1QndLRUx4THFiYnh3cmtiNHBEME5WK0h2OG1NYTNiZVdk?= =?utf-8?B?MGh4elp3WW1SVVB1Q1FpdE94ZzBaTDFPMkIzemp1cUZHeldEdldCL2w0UUh2?= =?utf-8?B?UUlxb0xXbkJHV2FHV0lTcEU2clJpcUVUQnRpSHYwdEVnSkpmdkNKR3prZW5z?= =?utf-8?B?OWhKZDFLc3NhemZoTnFWeUR3V0owQ1hlS2RJN1ZWZExuUlBIWEthZEo0dGR5?= =?utf-8?B?N1pBRU9LaEpFRE5SeUJWaUVXckFZYmx5ME5YOXdKNnB5UnlPcVZ3TzNoVldi?= =?utf-8?B?T3lTbzA5V2sxRVZLdkxFZDVVdmY5MGN6Y2Q1bVpMUUc1NElJY2JnTzg4bExk?= =?utf-8?B?TTJzQVYvdlhPUkswbS94SWpJVytBamZ5TWdVYnN4dUdoR3hKUkZoRHJWVUxF?= =?utf-8?B?SFkrejJCREZIM0tDQTZFVTRRZmd4RHdycEhhVnMxYk42cVJrUmdlM0tYL0ly?= =?utf-8?B?TmpzUFZJUVJPMkFNdUVMeGUrZno1cnpMOURvVWl2OGRUWnFvdlN0a0JqWFJ3?= =?utf-8?B?YjdzR2RNbGpGTk4wSmZ2NEJUS0lJcURFSDhsVWRPK290b2x4ZXRadzAxVVRi?= =?utf-8?B?LzBnK1NVZFRPMjVLS05LNk5nb0FaSVk0K0EwZE5WM1YvK291aHhoV3dQZlQ5?= =?utf-8?B?VXZ6a09WVVZBSExVN1FhditUdWMxN2Z0NnZDNURRTlRIQTB0ODVIRWhmRWdJ?= =?utf-8?B?QTliVTlQaCtZaWw1MzVjSW1seldOSCtwRmZZTHJlQlBJRnlUUG9WOEhnQVVG?= =?utf-8?B?cW1YSlB5Tjl4YWM1MHpKYVc0VVVvZEdBQ3lOYkxXNWp6dVF4RlRBdVNLMGZm?= =?utf-8?B?OU5jWEtlSUdodXNQdUIxSVRRY1I1VkpTOE9yVG1nZitvY3l3SkJZRjA3a0t1?= =?utf-8?B?MS9TcjJETXhWblc5YWFXWm4wRWVNTVJvYWNwdHc5UDdIRVE5Z1ZxK2NaaWk2?= =?utf-8?B?YW5zKzU4VFhkVHVOME9sNDZoeFBoR3RKY0ZVUWk4UmZ1YkFYTXQ2c2IwRlhj?= =?utf-8?B?M2REK0ZUVFprVGhRZmcvVmNobjUzT2M2WGgwWWZ5dHhoZkxOV3ZFOGc0Z2Jz?= =?utf-8?B?WS9QZFNueTNwR0ZNUHdaVmZqUnRnZnlxRWh2M2U3NkxEd1NXUHdVZDBzMkh1?= =?utf-8?B?QnE3blVnMXM3TzlVUmZmSjZRRmtYZmxIZ2JzQ2tFUlZiMmZCcy9kdld6VWFk?= =?utf-8?B?TGZMUjFJQ2dKWFhsTHplWUpLYXY1a1NFNHY0OHE1SUY3NTYwMlZ3c1IyRC9p?= =?utf-8?B?OEcvYUJ5V3dZSFROWkJvM1FnZHQ0S0hwU2NHNzY3dmJlSk1ibGhVSnpJeFZN?= =?utf-8?B?alRGZW1qWFovVm01U3JXQlBjdXJUZ3pxM2pBeVB0TGJVK3FWMmVzdEx5RGZJ?= =?utf-8?B?V1pXNUs4WFh3RFgvOGMzdFJ2L3F0ZWQxWW9yWnJ3TmgrZE04aTdiREFxTGJX?= =?utf-8?B?bEM0MGI5YXpYRml3SThkaWxTOTNLdnJLNFRCMEVZQVlLWmFsb0F2M0tqSDZH?= =?utf-8?B?QWFPVnU3NzA5OXArTWNiUkozUlNQY0hjUkJaWDV6TWwxWittN2hOUS9SWmh1?= =?utf-8?B?YUVDdnVxSUdMVUJDc0FlRUxSblcyOCs4UkZ1RHJOekQ1L2xpSmtLSnlvZ1pt?= =?utf-8?B?KzBkQnNsRzRsTG5ETXdGeG5KY24xMWtmTGc4ZEtnUXZxZms5cEVQYjVPNHZj?= =?utf-8?B?aUpMYXNxNms2QS93OFIxNVJXbWpkUGRMQTNWMUt2UWNqTlUwQWx6dlQ1UlJz?= =?utf-8?B?R0MzMUVGUzFmcmpFY2RvWUZPQzNYNmRMMDFqemJsMnFmUEtmRmExbWc5dmE5?= =?utf-8?B?aVZLNkpvRnRJeGhoZHJkc0hCS3Axd3l5cXc1N096R21ZVVpuWitxME56WHlM?= =?utf-8?B?QjdiOGxqNmhVRkRhZEExSjZqRmdieUQrQ3BzQkwzU1VoR1hKMmg5Rm1SMlk5?= =?utf-8?B?eTRFTStaOHNGMDNyRWM3R3F4ck5PM1VLZWpXaHE1R3NLdTU5SXFjMXhFaGRC?= =?utf-8?Q?8D+J9FRP8xuR1KOOzxq5md+XgAWE6M=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(10070799003)(366016)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SXRnYjl2a05SaUx1cEdoM0ViSWJGVm5ua05NK01pK3l6THowaEtEMUhOcDBs?= =?utf-8?B?L2k0aisxR3B4aFg5TXJGdTM3cE9EdmxCL1FpR3JOOVpPK0JJc01kMG43U0Rk?= =?utf-8?B?VDZlajJpUEVjaFpQZkliNDZZVUUxT1Fyb0JkbzByMnNmcHF2ZlFGK2lHRnQx?= =?utf-8?B?dTFiN09zU2EvbjVuMXlGak9QaDM5Uk9XbWtxRGplem96M1B0MkkvOFc1OExS?= =?utf-8?B?cHRWTFBOcVBacThCeWNpM1lkVGQwbzAxS3ViRDhxQW82cmJhckNVVE9wV0J0?= =?utf-8?B?MXhjMFFlYjM1VG42dHl0SjNna3pDbVVFRVV4cWM1SHJVeHRTK1J4OE9wbEFO?= =?utf-8?B?NlYwZjVsRCsxcHpSd3dWK3FoT1U5NVptUDhNMWJSOWNyQm92eHJDVEFza2FT?= =?utf-8?B?UnB5cExIdi9jWkZDZnpZbUxTWndLZHN1YWJmbnRjRkJ2Zk1SZWVNVGRXcTlk?= =?utf-8?B?ZnBUb1Z1NFZWQXJHL1RhRDE0OTZlUlJGMnMrMGo1TjNFQ1VubkFjMit4Qk5l?= =?utf-8?B?NlNLcTFPUHdoc1lwQ1luSGhGRXZQT08zOVRBS0lqYjVndjFiS0cwQk5hTGgx?= =?utf-8?B?bDRieFRETmdZZXBWdVNITzVDbWRFRm5FakwvUFNvSTlEL3VFRUtncUpTVTQx?= =?utf-8?B?VTBNSnBNM2x5WDFsQi9oR2ZEamw3cWxWWnpIbDBneDgzcjlnVHZuTXhLTkVK?= =?utf-8?B?MGZvT2QrTGRqSnJCRGZSMzJLSnc2aE9kb3JZWHhRdzF4dk1ORkpIYzlXb09O?= =?utf-8?B?NDRYZXUxYk1LWDdYSXBybHNxcVo4NTNaR3FzcFVqZllaSkJQMFNIY1BRSGVa?= =?utf-8?B?MHNaL0d3czRBU2t0NXoxV2JwQTNhSWx1S3psc3pjejROT0lyYy9lVnJrRHAv?= =?utf-8?B?RVlzL2puZ1drcnVoTEsrYkR4K2VRQTFpMW55K3VlZG9mOFF6MVhudFVKQVdG?= =?utf-8?B?UXdKN1hnazREVG0vRVNocmlraldncStXaHBiRnV6Z3djRTdicE9SZHdKM1dj?= =?utf-8?B?VUUybTJhd0t0ekU5NEU0eWlkaGV2aFNheGk5dTVCNlhZN3VOMGNsNno5czF4?= =?utf-8?B?a0ZmMlNHTE04cHVHQjhFdkVNSC8vR25QdTRDV3hUd3FzdGZTTVBjMExtUTd1?= =?utf-8?B?T29yZWVMTkpvM2grWjluSEgxYVU3NnpBVGpONmkvU1daQ2xrV0t1dUhOOTJk?= =?utf-8?B?QWRxZStkWkh3QlBWdjUwOWtXREJQYThlTmxDeGFzeG5OakJWUCt1NXJiWlR1?= =?utf-8?B?cU5yU3czWnk3TFpWbCtMWlpNN3ZXRnp5ZnlGRFJlT3NHZ2VFRUlWSG5TbjlQ?= =?utf-8?B?SUM0VmpUbzNOdmJDRncwVnFrMlZCR2RkVVN6UVcrcyttZUljZGc5c2pVbEdB?= =?utf-8?B?NWJZdEoxWkxXV2sza0dpMlVQcG5DaU52RWJhVGxVelBSWjlJTzJ6a1ByS3dv?= =?utf-8?B?Zk1Ga1FhTWZaZXE0UVVzaGp2N2puU0ZvSEZ6RnRISnVqOW5mSWtRWmorVkxy?= =?utf-8?B?aWo1ekV6UWRHWXJQbnRrN3ZZWGtKVmdlejJ6TTdaNG9vNHltMlF6V1FnM0J1?= =?utf-8?B?YlY5WktIUEU2WHRCMDFOdmlHdGN0OHJFaXZjNnh3UHRXa0xZenJFQm9GMWxX?= =?utf-8?B?d2FPeEg1cmdqTlppWmlLUE9va3ZxMlh4UkZ2YzdJem5MYTFiQWVXRUhFV1Fr?= =?utf-8?B?ZHhDTE9Ea1dlclVrWCtFNzE5RXBnU1lHaU1vU1Q0OE5LTWlVdWJPU3UxY1J4?= =?utf-8?B?OTdwZjg5WVlMT1NncDRaekxqV0N4bUIrZzJzZUNpemhqTjRWOGQwd21PdDJU?= =?utf-8?B?ZGkwNG1obXg2NDhQajFPOVNYYkVUZmsxQnptWkQ0VHVncWNWNFBveFRTU2Rs?= =?utf-8?B?cFdpVTlYdUV1L1hLbm5yRDRuM0hZOUtSZ1RaTk8rbExjekoxdzd0UUpSZVpu?= =?utf-8?B?dVMwOERPbFJ5dGZrM1Q2OGJwd1BnWjM2dTMxa0g2dkNqcDdKditwN2NqYjZu?= =?utf-8?B?V2ovYSsyOFJvNWlqZm9IdVFoZEdFendBMnUwU3dNUGZBcU80VVo2Vnk3aCtN?= =?utf-8?B?cjRpUGllbnhKSEVmU2R6TjQ0N0liSHdFYUlvQU10Q2Rwd09JcTVCZTMxRmlE?= =?utf-8?B?RWJ4SkNTM0o1bkRoMkdReWhhS0p1Zml2d0JFdWIvaEtyT3duenpITWl4TDNC?= =?utf-8?Q?mPJcW5XguzyV/kmBGw4InMIdm87miJEnQI0+5TJq1QQW?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2a8af99a-79bb-45c6-8edc-08de15580aa2 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Oct 2025 12:55:01.4594 (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: A9wjsGvckjLx7uj82xMva53ETd7U43vHxQ1dLMtUrTjggwqgZL5vFzwZizgh3HzkDOsENANnVIkimhUtkzZcRw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB5863 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. Acked-by: Danilo Krummrich Signed-off-by: Alexandre Courbot 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 Sat Feb 7 16:26:37 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010039.outbound.protection.outlook.com [52.101.56.39]) (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 33A7825D208; Mon, 27 Oct 2025 12:55:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.39 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761569713; cv=fail; b=P8OcQywbyTkWN8k4VCoQY5//KQK/IEdcI7YxZ7farJnCZkfy4r00MIIKk+68lcnupz1dlRpC/2/e2y0rVIvF17APOW2aRFxlTh0b33tpS6ijZKyfXUucKtiN9Oj7zu85mA3GLSFoyJh922tOVfmuHI2nVngV7UkZhnfqBCEYzdc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761569713; c=relaxed/simple; bh=AbY0gCwMO/n3ZFGVqNZ33M4kUPKRS+PmT2pp+RoNiDU=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=VUPnzud5Yi5pmWC5CJpdw5lCEjfBXPplVM9x247KKeKIrwJbXn2tuylp0AKgxdTvyzDYEaERztjSEb4l6QFkKrPWV6cyt1+pk8MLeGGVcZOaE0J150O1gN359/rLSG/gsjeIoYB3PIBkY8KLS+PAZg8/trFYMP2/h9JH2z7VrS8= 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=HqXAzd/m; arc=fail smtp.client-ip=52.101.56.39 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="HqXAzd/m" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VsqUigeUtMNW6EuIKz3uz5IUd44o4M4dyOwS89klnoqFxDM43YCPI/HRWY5sHnB5x0+kxK6WfPw46A31fSIFkT5O5P9g1cpcu89jSOhQDoS/Ye6Wa8l2SjM6SoocLX1mK0BQfJ7pfXAQasMY8E3Zs79FeMw5Cgj1jZ810YYMDA6EOL2A520pU94Ut0Fn3HtlodDyWNLnw/C82Y70o0nT88m6OZ6/EKETBomL2M8R+0Nkaky0FQA93QQiosMCF+KVuZE6P11apF7O0jPr/gGrxgLy35KWBTWVUHBFLYGf/xEz2lCKG/sdx+Ynush6jr9cLrj9j1XPPGPSZ9LEy68qPw== 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=5Nnglzr0ah2hJmNEMvXAoF45FzHTFHHBB3Ew/JCYW54=; b=fNa+ek69O+03dI3Q0YpIxay99BVGPQVpaN6yx/FJxnqePIQWFzIPCurBYzontOk+8sXyzoR2KBkQKlgM4e9qD/3AyDVTyQ+8Hc1KoAVMqCve/gljXPEc21dGP1wTV/b5xaYAhuWel6zSN8MLkI5aXiQ8Ma0hHVxAgtsJXq/6X3PXctyaC+IVo/XujdjLL3y4Js+whLjxUKAHGPQp0Q+kvsOZgpgz0BH+Kdyzj8qyxusbpUcabedCP18aVftLudnJFgJjUGTKR+8yzzA7QSc0XCTEgKhRNwb5WGa3X/13EbY6KpjWZe9dNszt4ydah2+r/qb2TXOZYIdws3aRooqKDQ== 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=5Nnglzr0ah2hJmNEMvXAoF45FzHTFHHBB3Ew/JCYW54=; b=HqXAzd/mwzX6gsdH5LMrqK0UUE5IMgq3vUAesRCNBivg0GkP/h4zpuUeFoTUoxBYZRK/afBm5sX7ya3r6BdOKk3f35XkCn6kjJwakM+AvKVFOc9TFIN2ik9OuHQhSOp2vcD9SBxC/5w6sh/aRG3wwQooHTT0vIrlYUv0v4non21yiZu4Mx10bzqL1Js3tVEB5+/7ZFFzbrG/mrTgikv442D87XwfVQZA7mEnKDsHYFgKFBGMFHxSqK0QptAF8WXEnY9qW+htgBQJTbWRVvj/GAnniVGTR5dBbBbdoWYsuj1v+Lqe99uYXpoIdH/RA2VxZfAun5EV41q1FPkxOkrSvQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by DS7PR12MB5863.namprd12.prod.outlook.com (2603:10b6:8:7a::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.18; Mon, 27 Oct 2025 12:55:04 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%6]) with mapi id 15.20.9253.017; Mon, 27 Oct 2025 12:55:04 +0000 From: Alexandre Courbot Date: Mon, 27 Oct 2025 21:54:45 +0900 Subject: [PATCH v2 5/7] gpu: nova-core: add extra integer conversion functions and traits Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251027-nova-as-v2-5-a26bd1d067a4@nvidia.com> References: <20251027-nova-as-v2-0-a26bd1d067a4@nvidia.com> In-Reply-To: <20251027-nova-as-v2-0-a26bd1d067a4@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: TYCPR01CA0152.jpnprd01.prod.outlook.com (2603:1096:400:2b1::6) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|DS7PR12MB5863:EE_ X-MS-Office365-Filtering-Correlation-Id: 9cea7356-4c17-4d2c-0d8d-08de15580c94 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|10070799003|366016|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?b2xvRkMydFdobHhOaHoxeUNmZVhvbVh5T244ZU1hcDcvd0ZDU3BoTTA4RDNZ?= =?utf-8?B?a3JQaWd6VFJNZ3R3L0hqUWdZeUtwVXBRRTk2a0lJUWNSekg1Y2orNFBIdk9E?= =?utf-8?B?OHBVTWNXaW5nZmROR3dXM3JObjIzR1d3ODZUWFlqQUdiT3oxRGVmUEYwb21m?= =?utf-8?B?SmcyTGVMY0tramFzMVRMU1JqaFYvay9abER0NnZnamRHNTRFYm8vaGVhQmpv?= =?utf-8?B?QUtUNlhLQzZIOUFhT2t5K2d6UjN5UzlHWVdtS3ZrdXpqV251V2s4ZklyMG8y?= =?utf-8?B?SEtEM1VXMy9uR0twLzFWTGswNWJtOEhRSXU3RzFuRElhY0RQSXV5S1pHUFdZ?= =?utf-8?B?MUJQQ1lIQ2sxUVVydnBlYVhlNmw2WER6REVDTW9WeG16THl2alM5YWVGWWpv?= =?utf-8?B?SWx2TEwwKy9ISzZleW44bFlCRzMwMzRwTUNnQmNVUmtNakRTM3Q5STZ2UThB?= =?utf-8?B?RVhTVElmeEhVQ3hIKzA1QnNiMnBwNG1kRHlvTHl3VDV4TDMzbzZNaTVIdGhl?= =?utf-8?B?TDRUUjk0U0ZWc0sxZXNkMGRlaGdRK2dBVHZ4UVdnTEdWeUc1cmcyWmFhNVZV?= =?utf-8?B?SGFRbGNlRER4M2MwRHFIbW52VFZSSG43YTRTbnROb1NCOVpaaWpRQmpLT2RQ?= =?utf-8?B?QmdjbkNWb25GMVl2RkJXb0hCenFIUTBoVDZ4USt6Tk52b0VldnFiMEYwNHYw?= =?utf-8?B?cUJKZUx1RXVBU2lCeEJ5TXYwajZKL1dPRXVYclNPbEk5RXZiU3paMHF1MEcy?= =?utf-8?B?WnlzQVpwYytNcU1FaHgvVmNuRDhwbXUrQ0RRYnMySXR1MTgwdURxOFJHaXYr?= =?utf-8?B?MTBIUFptWkNaNmd3ZzVhSjFManFxTVNtYktmeUxoblFsa1BXUmdTbVBSK1VN?= =?utf-8?B?SWVFTHpScmVDZURWbU45c0dTcm94cUdzZzJ2VVNkVUE3NWo0VVFqckYrUUxD?= =?utf-8?B?THhyeExWSlM2Q09wRzRrdDlkbHMvRDMrNTZYOEZTSXg0dHZ3WmsxZEViU2l4?= =?utf-8?B?cDFaTjc3ZDNRNU01RGh4MFdXRXZmRWtkVnZSVGt6Q21kZzN3N0FLd1dqN1FN?= =?utf-8?B?aUI5NGdwb0FMV2dlNmRNK3QxdmQ1c2VsYWhQMjh2U2RjeldyYmhDU0JzdVcz?= =?utf-8?B?QkdrMldpUjhDRFRLME9OZVZZcktjaWQ2bWlpa09XQXg1OVNMM3hkc0l2ZWhH?= =?utf-8?B?QlJqTjE2QlFRVmZUZ2FvalBXL1EwaFR4K09XRFc5UnRibUVWUFlyNzlRRG9S?= =?utf-8?B?UHd1d0hwbzVuNnFKOGNZTzFsTmQvME1heUJvRjM4bTR0Ry9mL28rYS9QMkRu?= =?utf-8?B?RGRiVHA4QmJlTWpWRk5FWW5VVFRIWW5OTnBQRmUxMEpMb2t0M0RxSUhab3dQ?= =?utf-8?B?OThIdW9kZlNlSklDRSt1bWJrVDhHalQvWEFDZXBmTmltTEFDSDJxZFJES1JE?= =?utf-8?B?cnFXVWdOVUh4MFVMbDI2MXdPQmlycTNxOEpWYnUzRFQrV3lZNGNKeWdsdWRh?= =?utf-8?B?SGs2amdNMFdhQlo3QVJnaE9taVRIclhmczh3b2pZYlpkOHpYU3pHNS9CS2k5?= =?utf-8?B?dXNrcitsZXQ4MVV0YjlHR3BOREl4eTZ0Q24vK093ejdwb0lVSVJYZ0oxQStK?= =?utf-8?B?UkRzV1NqUHZqcmFHSVR5YWJBQzZxMEgrblpvRmg3S01sVVk5WGpZR2VYNmRB?= =?utf-8?B?ZUdYNHoyWnUwajZGOGcwRlAwRGJTK3ZmaUthT3NIekdkTng0Nk9yZ2YrM3li?= =?utf-8?B?TGNUdTRiSFBTVVVRbHpzOHQrTHpSM3ZoYWFVWjJSTUdacTM5S3B3WTFBaFpn?= =?utf-8?B?WXRtZmdvckxDQ0JBaTltcTI2ZVR0aXVRa0RERTVacncyb3Rqd1pQUEdjWGo0?= =?utf-8?B?NEFrQ1hPOVZZYk1nY2pSZWYwd3N6bEF4RTlSUURnWGkzbTYxOWFid3dhdW9F?= =?utf-8?B?MzF1SzZtQk1zMzVZTG85SlZvaUIvWWozQ1NCcVVVU1dPQlJXOUFjZkMwVkdF?= =?utf-8?B?a0VZM1V1WDZiNmZuWmhCcVN3VTRsWmh0SG9Eb3NReEUyY0dxc2ZQL2VFSHpy?= =?utf-8?Q?b2XF8r?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(10070799003)(366016)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MDFacXg0RmpKT1h1eTM3TFZZdjhVQW1SV3dNaE5jcTVDOHlvRlh3bGVLVEQ5?= =?utf-8?B?aEdoK015NURuUXpuU2lGTTJGSm5hNThIZmJGdFVkVFBmQ0dkVDExMWN5Sm85?= =?utf-8?B?ZW5QRCtwazhUWjRuRGkvZjZtMlZyWTZKU0NsbUp2ajc5eFNLdTh3L0VCYzFJ?= =?utf-8?B?YTYwQjMwZTdpd0lXVjZ3eXJvYzdtOFkvR01OdEY1dDRnVjZLQS9HZHdzZHRp?= =?utf-8?B?Z0hQZGtGVW5pWFV4RWV4Uk91SEZicHlxam1lekpUMUN6NUtWdlJ5aGxTM1k4?= =?utf-8?B?aUNrR2JQbEN2OU5MbjF5djJlZzRSMitWSjJRUERjbDhhR0Vtb0ZCeDBBRVNa?= =?utf-8?B?aFMybzExckJicm5QbURYcWh4bnpCaVdKM3VwUHFpUTZ0ZDR6aFFic3hTZk90?= =?utf-8?B?dmJkQzVkUWxzTmdSQUFobXZSMExTeTVhazd4STVpK29LWStYR1JHSHgwRVVD?= =?utf-8?B?K0tXK3dpTkdka1h6Q2t4RmQ2T056em9objNnejdMSk5tWktKSlkrZ3IyM1Z2?= =?utf-8?B?NElQb1pGMEp4ZG44K3c3UDFrcTlSUjlHUFo2T1hOQXR0R3BxdTVOZVRJTVFU?= =?utf-8?B?S2pSMFZXYUtWUEh6MGlwbDQ5cy9ySHlVcWowc2FPcXBQcEtEM0RHK1JCNW01?= =?utf-8?B?NlkwakhLK0NXQldtWE51TWpCKzJiamdKSzNBSHlxL0Q5Q2Z6S0ZSbUVvTEl1?= =?utf-8?B?TXNtUmg0ZXRxRElLS2NSZFRXNUsrVDhDc0VaWjJUZHE5TjhrZWtDTkFwUG84?= =?utf-8?B?NGVjQ3QzNkF3ckRlRWtDam5rQ0VJNjdiajU3MEY0UEhrOUl4b0xiMy9EUEV2?= =?utf-8?B?bzhUTFBHSTYzc2pYckJJbGpjTVZrTDE2Q0h5cFA3VzdRaDN1OVlOZFNkcHl3?= =?utf-8?B?eEh3WVVEdUM1OTlNOHlmSGhjVGovSFowMW5rYVFIZG51Q01xVG90aEtBdXNy?= =?utf-8?B?T0RvOTR0cUhzU3IxZnIvZmVjVEtzTk44NGxScWswb2Y3L253U2lEVTNqTm43?= =?utf-8?B?ZldtVk1FNitpd2ZFYzgvZm80bXd2UFdEd2M0RW1HNkd2MXprK1ZHQUV4ZmpE?= =?utf-8?B?N2lWcURQZUpyU3VQWEpma0NzSG1YQlA5QVhNS3Jsd0RFMGwrOXJ5ZXNGdEh1?= =?utf-8?B?c2RvVDdINHNzTWVVbUJpUlF4Y1hWMDZMemI0dXBJZlFzbndTNURac2RTakw4?= =?utf-8?B?OVlybWRPNzBlNGhpaEFLM3A4OHd3M1E3ald3RkE4QUNSd2J3YXhTNW9RUUJE?= =?utf-8?B?bFVaS2VDdXhsSGFtVkw2bmIvS1lzRzZLZEFGRlZkTEhLbTBndHRTWDY1b0d6?= =?utf-8?B?Y1ltNzU3eXB6OVIwbHpHMzMvWFo5bU9vU0t5Z3duNmI3Yk9SR0JxRjZGUjZ6?= =?utf-8?B?VmRCYlpZU3JKOXh6S3oxUGhuRWgzQVlXRW41WDM0WmlFYkMxc04vUlg4WFdV?= =?utf-8?B?S2liZXNCekR6bStuOEpvT1ZISkt4aElkZ2ZhT0VjczdTRG5vcDBEdFgzK0Jr?= =?utf-8?B?Q0huTmJyYk9qR1pMNXFOYVg3OG4rV00zYmxodm91Z01hZUdmS3FqeFNqNnd2?= =?utf-8?B?UTdwL2xTZzF4Vm5JZ0UreXRCRktNeHNGb1krK3RpZDNPWk5xVlRJbkFuOEpt?= =?utf-8?B?Sm9ibEV6SEVUSEhRVVkzUkF0bW55TXZ3MVdtRW0vRVcrMWNTblJmU1ROUkJq?= =?utf-8?B?WjVTMnVKb1hNeCtZSDlHUUxNTU9NQmNUT0RsUnlGY0o2cWhYOENxMXA5YWRo?= =?utf-8?B?TFNOcjhjNFltSFF3THFuNndKcnhRK05JV1dOSWUxTzRUWEx0YUlneVJSYzZh?= =?utf-8?B?c0lIT3JkN1E1ZnZ1dFhxMTRvL2hicTN0cktvRDJ1MDFzR1ZqTEJHU05XT3ha?= =?utf-8?B?b1FoanYvL3VkQ3MrSGVTMlN6TFkxSGhkMXBpTXhTQWlRMmR0QlNhN2tybnlX?= =?utf-8?B?bmtIeC9TNDZQNXNKNGM5cHMxYTI3c25nVmhMZytVcDdrb3oweDZvNnI1K1hK?= =?utf-8?B?SHZISiswNGFDZHpLMm5kRTBpb3Jpb3pZUGlIMlpIV1Z4T2NubzVIV25OL3Zn?= =?utf-8?B?d2gxYXF1V2NrVVFab3hvNFA5elhkVXJibGh6aE9QUndpZjZXYVRPM08ycVh2?= =?utf-8?B?RXdpUW03TmdLSDBsWXVKZXdEdWFhdVZNMGJEUVNTRTFyVGh3dUppM0pKUnlD?= =?utf-8?Q?Jw7UULpts9CaEq0DtsZvcPImjjIUGn6gB0X2JDDMnulB?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9cea7356-4c17-4d2c-0d8d-08de15580c94 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Oct 2025 12:55:04.6978 (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: 2cxg/oGg908+s18r8HBvi+IQW0oFGuJZQI+lvnu80Nh7qo8SzirMj8AoBGSCeLLg1VuGnAvJ93lqMHTepvG9kA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB5863 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/ Acked-by: Danilo Krummrich Signed-off-by: Alexandre Courbot --- drivers/gpu/nova-core/nova_core.rs | 1 + drivers/gpu/nova-core/num.rs | 158 +++++++++++++++++++++++++++++++++= ++++ 2 files changed, 159 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..adb5a92f0d51 --- /dev/null +++ b/drivers/gpu/nova-core/num.rs @@ -0,0 +1,158 @@ +// 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. + +use kernel::{build_error, macros::paste}; + +macro_rules! impl_lossless_as { + ($from:ty as { $($into:ty),* }) =3D> { + $( + paste! { + #[doc =3D ::core::concat!( + "Losslessly converts a [`", + ::core::stringify!($from), + "`] into a [`", + ::core::stringify!($into), + "`].")] + /// + /// This conversion is allowed as it is always lossless. Prefe= r this over the `as` + /// keyword to ensure no lossy conversions are performed. + /// + /// This is for use from a `const` context. For non `const` us= e, prefer the [`FromAs`] + /// and [`IntoAs`] traits. + /// + /// # Examples + /// + /// ``` + /// use crate::num; + /// + #[doc =3D ::core::concat!( + "assert_eq!(num::", + ::core::stringify!($from), + "_as_", + ::core::stringify!($into), + "(1", + ::core::stringify!($from), + "), 1", + ::core::stringify!($into), + ");")] + /// ``` + #[allow(unused)] + pub(crate) const fn [<$from _as_ $into>](value: $from) -> $int= o { + kernel::static_assert!(size_of::<$into>() >=3D size_of::<$= from>()); + + value as $into + } + } + )* + }; +} + +impl_lossless_as!(u8 as { u16, u32, u64, usize }); +impl_lossless_as!(u16 as { u32, u64, usize }); +impl_lossless_as!(u32 as { u64, usize } ); +// `u64` and `usize` have the same size on 64-bit platforms. +#[cfg(CONFIG_64BIT)] +impl_lossless_as!(u64 as { usize } ); + +// A `usize` fits into a `u64` on 32 and 64-bit platforms. +#[cfg(any(CONFIG_32BIT, CONFIG_64BIT))] +impl_lossless_as!(usize as { u64 }); + +// A `usize` fits into a `u32` on 32-bit platforms. +#[cfg(CONFIG_32BIT)] +impl_lossless_as!(usize as { u32 }); + +/// 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 archit= ectures 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 width that could greatly benefi= t 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`], etc. +/// +/// # 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 Sat Feb 7 16:26:37 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010039.outbound.protection.outlook.com [52.101.56.39]) (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 37B522459D7; Mon, 27 Oct 2025 12:55:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.39 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761569716; cv=fail; b=rUA6UkwIcNwHPQT6q4DMJiefpX3YYHiUTFvWwTqoqTQlvy2CZBGbbGPJqJR7a/j2ZJjOkkp3uTo9SzWFpSoL69w9zs+qlcXHZOkX0V24ALPmbX22UnNW5NxpVdeEcRc6xmx7SXy7Y94c0zvtS9lFA1cFiHWFsDCH9O4wOcMp4dA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761569716; c=relaxed/simple; bh=8PLvhuxGBNb+VenLm5EbzuH6sH6vZkqe5LvZRdEloxc=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=YLE2PQxucztJI83QYPLjN1re+enOCGg20bX6IttwJkCHItDtKsJa1M77v/jUm1nGvHRkEQmPHjrMtSJhMqtsNb4x8KdMvF4xBYuqoVzsie5O1qSSQu28riADOCRp8v8aqvvNzxPfoUh+yh68jjZ6BbBJLDM5GtAu7DrKSciMgp4= 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=fjBdpnKT; arc=fail smtp.client-ip=52.101.56.39 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="fjBdpnKT" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KFHKfV0ehiMHhkKCTbQuTQB7u8jkabshcsF7hkKur9WhpSm/WpelQf9H4yW+xrmCfESuDSk6ud6HXacDW19MS/nKr34vwSU+mAwxCrGaGkDziuUeogMn4ggN7HkvU3WcnTXkAhZUaLaXuZak5ELq35SqkhczivhggHwXBSUO6YA3fFJF5Z/daGoenBnM9FwrcumVAvL5MaVZ0GuqW24cNNSjQcNEGJS+z1Tun0Ad67LexWMv0kFBeBWdFSRnVH6waM3MeQL0iBAyJxsJXdZNOgAx3weB2c1EU7exXWVrAkY/9kiiC8GHpDMaqSDtHL4PaYe/xZvZBu03K8RU6lmBAw== 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=7jb9OeDIoLzw2Okcb4myH/DAK+KrVyk5hcdYuY/9JE0=; b=ewiMb0yJCcseVusTZ3RO6/wb303u3MEYkkHm1DZNfCXQDWOQl8U5wmHPRnGdO7U/dBCWAiPkBPfOYEm5qXSAWaK0flgz/aHkRoFP1mGdueii1GWa6KW+JfkjuELVF6n/w/qPPf+etNrpH6nUiTKaB++8E4CD1P69yVsGTU6OlH4Px9PbVSZ2Ybz14cPBkm6keMDCAnMi8j+5PEKgh2/zkvvSAZ1nYStz4ulmjCvZYMSAE1XqcoY4jhsGnbY2JtVUHxC7PWtQH1nHlRBx0w0ag3FsjuOJminVouyrTYzWi0tm3+0dhN/BceLHaZgGigbo3axKQm5Xpb5thTEWGskJyg== 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=7jb9OeDIoLzw2Okcb4myH/DAK+KrVyk5hcdYuY/9JE0=; b=fjBdpnKTLIP+qlp5KcdEknK2LCdxwzto4OQUTHKZhKBFg1al6jabpp0GUeJHjS0otjAsZqu1Qk+TkH7XCl/LAIfwWJk6LYlNEYfvN0Q1YYJWMNzNcOClFjTHLWPzhhVG0oj7aTySwRVGMFih8yvagbpxWdAZpVqcZofs1G85P8+humCrsXCUv5mhOzVYH00wmmz+oU9Gi279RUiqFyV47zP7J+iiQ9VOYes8XlpzLvPxahJQ47bFgMU9+pYKj0LgelD3Bgmytyc0Z3R0AkL6pHd2F9WfMKrb1NA7SH32tyda6YOmVcwII1tOqXUvnfa8Q2eVI5yLaGWM5U9v3qkJeQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by DS7PR12MB5863.namprd12.prod.outlook.com (2603:10b6:8:7a::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.18; Mon, 27 Oct 2025 12:55:08 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%6]) with mapi id 15.20.9253.017; Mon, 27 Oct 2025 12:55:08 +0000 From: Alexandre Courbot Date: Mon, 27 Oct 2025 21:54:46 +0900 Subject: [PATCH v2 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: <20251027-nova-as-v2-6-a26bd1d067a4@nvidia.com> References: <20251027-nova-as-v2-0-a26bd1d067a4@nvidia.com> In-Reply-To: <20251027-nova-as-v2-0-a26bd1d067a4@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: TYWPR01CA0005.jpnprd01.prod.outlook.com (2603:1096:400:a9::10) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|DS7PR12MB5863:EE_ X-MS-Office365-Filtering-Correlation-Id: 6cfadae6-dee6-4d9f-68b4-08de15580ed7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|10070799003|366016|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?VThOQnpNcHJwV3hxdFpwZ2d2Ujc4eVYxdUJINmRoQnBjTk5ZQkpDaFZsU29X?= =?utf-8?B?NXg3d3g4MmNmd2tyZnR5S3lhZlVtd2FaTy8rWTZxY1E2dkFZekNScHhWQSt6?= =?utf-8?B?K25tOFQ3TzQwQ21GNkFyUEsyWEM1cGhuZXVLUnY5SWR0bVh4Q0ttZ1lJL0ZJ?= =?utf-8?B?LzNucXZuU2J6ZENzbTdEWEpIdUdWbzkrUW1TVWFTQVFoUGFxeE1XK28zZ0dE?= =?utf-8?B?NTNENUQzWnd1SW5mZ1l5QUc3Qk0xaGJJcXQzVC9aYTRSU2N0cEQ4aHlRd2to?= =?utf-8?B?SENyaWZybklVaGdiZ2taQXUxWmJoMFI4UklERlZBK0wxb2JIRXhPWFczT1Mx?= =?utf-8?B?bGl0cnpwNHFzM01nTnZONmh6Y2JubUUzbVZ2VDJtdWFsMlRKRUZvcVR4dmpU?= =?utf-8?B?SVRHeXprV3dydXRkMTVzRUd2TEJNS3UzR0lVZnI2MUxIRGJud3h6dDBrdTk3?= =?utf-8?B?Z3R3YUExMlh6dUxzTEtwUkp4Y21nR29zRGRocG9ickdFWXd4MUoyaHk0Ungv?= =?utf-8?B?c0x4RGROcVgvSnZZQ0N6Ri9RNThBemsvZkpSeVBRSUpaQzY1QjhwTkhsMmwx?= =?utf-8?B?TUNuanRxWFNsWnlWdWlzcExWSkVsck9JV0pqNFZyYVJuVFQ3Tld3eXp5TkJ5?= =?utf-8?B?NHBFejJrSXNiV28xTVhjNE56a2JTd3VaeUxzbFJJczRKYTV0cWN2OTcrT2Yw?= =?utf-8?B?cEpNVXBrSUNjTWl5WU5pLzd0bnplUzFqc0JUT1FPOXg5VkVVS3VRMFdFZE02?= =?utf-8?B?dlJOWE12MGhlVERTdmJ3UU1Mc0U5YVlWYVVaejRycjVCY0M5OWx3UjNRYVlp?= =?utf-8?B?dUJma0pTZ0p6Z2RnaWRYNDBtN3hwNHFaMHdYTnhKYkhDMjBSZ3ZzM0d3KzFl?= =?utf-8?B?WEw1dlg5L29BTE9pMVpCMUhPRHR2Uk9OakxoVlU5WEFMOGFFMzIwdEd5K3VX?= =?utf-8?B?RlIwY1FDRXR5bnFCb2FkM1pvY0hYaXVkL2J6REw3dUVkRkhvdXpzY0VyT0FC?= =?utf-8?B?U2NsVDJPN1k4bHVaNjFRZDU4bE1ia2dSM3krN2lKM3Z3VnlQZ29obityWEcv?= =?utf-8?B?TzRrK3VaeWlKRGRJZ25zMHJZMjVZaFVCVTJma0lpZTZDMHpoV1MrZEhNblFD?= =?utf-8?B?d1NkSW1RVWtpMzdkVGFPL0VCTHd2b0xmQXNFNzI2TVlGNHNOR3dWbmEvb0Fj?= =?utf-8?B?OTcxbW1nT1ZyWndTenFGd25FZ3FnZGdxVjF0VzA5K0JVb2Y1UDFrZ3o5NHcw?= =?utf-8?B?a2t6QWdua2Z5QVYvMnkwKzFLUS9WTG8xQklEOTR1VEZhdnNJSUNPSURKcE52?= =?utf-8?B?bnR1bDFsSzZhaHhrZUFTTDB3bG5sRldoN3pLaUh2aDlIY1Z4ZkI4cjc4NFpj?= =?utf-8?B?UDhqbHgyd2hTTTZKNGR6b0lMbDF5ckJob21IT2gveStwSEF0WUl5M3JBVXBR?= =?utf-8?B?Y21LTTlQRGVMNDh5ci9PZ3Zqb0IvZTJIbmg2NEg4ZHFMQlc3aTlERjU1TVVP?= =?utf-8?B?RTJRNmNHdEtCYWIrR3J0VmhFYVFKc2VpY1EzUng1NG5Qa1MwK0lVMDc2bUZ1?= =?utf-8?B?QS9zVDN3alBNWS9VNURldDlyL2V6SUxZcnNpRVZmaUNoMnF4ejZqU3FJOVJi?= =?utf-8?B?L2dGaG1iKzFGU2NWVTZOWFF5bnZ2ZUNTTy9kUHhBR3I5eWgvWElGaVBCbHMw?= =?utf-8?B?aVhqVEZvZTVqNU5KMVIrVXlhWVF6WTlsOFVFanV5c0ZsV0hpcWY4bmtNek9j?= =?utf-8?B?OXRhcmlUYTRrZ0dIMmxaRUx4QjgyQWpuZm1sakNkeFEzdDZ5OGlZSFVjUVJF?= =?utf-8?B?UkZIZlc4cmt0VzB3ZUh3RnhwOWQrL1pYc1M0UzdCK29HWnhaOWpGL1hBOHhn?= =?utf-8?B?cXZLdEo3MUNQNk9SQVRJaUNZVDdZVlR3QUd1S2JhajRSWkpadnBLcUEybDZZ?= =?utf-8?B?WjBTZFVwdlRqTmE2MDhUZVUzQ0g3M2F6Sy9POGViNEhsRjhKWGc4L0xkZ2lU?= =?utf-8?Q?NP3RPEsCJVoSEcpH+II7W9MNkbSbKk=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(10070799003)(366016)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QUpJTTB6Ty96WmVxRXN2Tm14SGtKdmpkMjRpdkhQYm5NaG5HVmdsdGNVY01l?= =?utf-8?B?c2hzYnRVRmpKWGhhbkc4eHVHZGtYbDZKYk9YL3Z4Q3B1dCtJZjhZR0hsbFd5?= =?utf-8?B?eEdKeUttSDQxY3g4M0o2NWxtQlF5Mlh4MmkyS2ZTUXBYQUtpVXd5d3NzbUdo?= =?utf-8?B?VU12bkh3bXE0c0hKTHFEOU1LVk54L0tnZ3JGdXZpaHN3K2xrMWtQenFBc1pC?= =?utf-8?B?aFppeWZySDlXNDkzMkhvSUxyTlQ0RlErV0Rvclk3WXljODM5ZFJlU1loa3lB?= =?utf-8?B?WG11YmVFWFEzUDI4d0p6M3FKZkxpdEJWL3U5MEFUK3k4Z1hIdzlicHY4QWxN?= =?utf-8?B?amFib3ErVlRBTjNGN0dtdzVTNlhGR3Uzb0JoYXkvSXdFR016T2lEc3VZWXhv?= =?utf-8?B?bWFXVSs5ckRTNk5aRnVSRHoxVkpCeUZyQ2dXMmtQRTczQ2luZ3dkUnBuOXZG?= =?utf-8?B?Rk01U2F2aVNCem9raW9RaDRid056UFIxOFVBcnNRNlVQNWM0bXBnMHJoam9H?= =?utf-8?B?OERtQ1JKaytWY3h2NkE2bGViWmh1ZHVXZW5IanZ3Y3g4ZEpURUVTdkxqR085?= =?utf-8?B?dG04U0Y1cWlXdERER0kxNFhoaXZjYjhhNXoyY0RPd09PcnAwNEZOL3M1TFk5?= =?utf-8?B?RUZ0QzJTSUNpd1JIeHJTTVFGUXJsc1hia0JQRzhUY3lWV0M0UlA1RUxoTFJa?= =?utf-8?B?OFE1NTZmd09NSDloRzcvemFYV1ZSN1dmb1I1dExvdi9ZOVgrTUFBRG9GT2JH?= =?utf-8?B?eng2N0x6ZStoRnpXcEVEZ1VYZkoycGtvMVlUK0MzYThCNVlWb0kxVVBzdHZ3?= =?utf-8?B?bGdUcEsvRDJ3YmZFdERYV1dFM08rYmdoVWs1L3JYdGRtb2hWaEdqbXNVY2Nx?= =?utf-8?B?RkpIYldnZVlaQ2xlQjVHYUYweWtMZXMySjE2bkVpeDNUY2tDcUVCWVR2cm1M?= =?utf-8?B?YzhtUmhFQzlESE1WZ1NYcnNHYnZXZnZHU0ZjbytITi9qWXhzTzVjZjltdERD?= =?utf-8?B?NXF1cTQ4Y3RJYU81aFdkQ2doVWsvY0dOaEg2TW9ueGFyam0rdjZRMlVuZzhL?= =?utf-8?B?SFM4dDB0VU05eWNNRkN4UENCYlE0WThiZ1E5Wktjd0U5WWIxbGROWjR1V241?= =?utf-8?B?cGF1Y1lXSnROblR5NmkxM3cvWG50TjV0Rm5JWFZBcnhVWDlLT0F2cGE3R21Y?= =?utf-8?B?VkFwdnk2YTVlTEt5c05GWUR4a3NZUGdJQkdNcThqWUwzbEoydU1hRUx0WGRx?= =?utf-8?B?UmhGQjdTRWIxeFdXTTlzMkM0cHlJNi9BMDdBT001ekRDT1p2THhnQ3dYdkI0?= =?utf-8?B?K2NUc09nSFhQeDFQeHRtbFMwYmRmV2dlZmhCb3JPMUJVV3FhckYwUEVtdEJT?= =?utf-8?B?eWlZSDRkcG02NDRuNmlBU2gwZTZFcEk0SlNWME93bHYzRWhYbEJFRzFYV0dK?= =?utf-8?B?MFFzWmlXd3ZPZkZLR2JidFRGc2Y3a3dpTE5tUElGR09BZkwvZDNxb3ZRUDFn?= =?utf-8?B?Wjg0bGVJZjNLYjF5NlRncFBsN29Nb0dIWGJmQTZlQU5KS3N1UDUvNjVEQkVW?= =?utf-8?B?Q2MyUGFaS0E5Q3pGNHN3L1g2MlpLTzZ0TElvMVBOTDVzYUk0NWNLbEpyNzUw?= =?utf-8?B?TjNTQTNKWGU2RzdCbmg2ZHdaN2ljbzFGQnk1RW1WMXU1ODNKV2pVSURZRGlN?= =?utf-8?B?c3h0bmNEOCsvZEVVQlpFUkdka3lNd2tDKzF0Z0k3MzhVMUkxdWdQU0RBWjFW?= =?utf-8?B?RDExS1lyeTE2TVdRYjMxQ2tNdFJqbVNUeFI1emN0ZFplWVB3THhuZUZJMVVa?= =?utf-8?B?QklQa2x2ckI1Mzd1TFlEcmM0bnpFNmpMOXMvSkI5WXhnU0wvWWhObFB6bDAr?= =?utf-8?B?d2Z3ODVESHA2RHZ6MkM1SER0bGxQbWZab29HMkZVSlMxa1VZVU9GMitNay9y?= =?utf-8?B?N0pqQXZtdGRlYmxSRERPVkNlV1IvN0p1SmxVcEtvVHZxKy9ROWRSVG1yQjlh?= =?utf-8?B?Y3pNQk1EVUllZlAraVdvajVkNzZJdk9nK0E0aGlNMnhGZUlHL0toNng0eHpF?= =?utf-8?B?Rm51RzFzVmNKenczR0JXMEtNdFZHazlVbFliUkxyZHhLNHI0YUpva1Fpdk5q?= =?utf-8?B?ZzZDalA1cHUwOEhrNmpiaHhCOGVHUHF4alA2akRhWDBsbEp4OStraitMRDJ4?= =?utf-8?Q?MKBqUbaaZrfXer/T/CVk+T86h1NPUZUMZc3B/hyiG3tH?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6cfadae6-dee6-4d9f-68b4-08de15580ed7 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Oct 2025 12:55:08.6431 (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: YEgsWStMKg6bfpH/btG+81778i1v4dHSXz8yfJks3i3hjqcpDNacFQLbEoJgh23G0Is6C4DmaKjltQvzP/DT9g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB5863 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. Acked-by: Danilo Krummrich Signed-off-by: Alexandre Courbot 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 Sat Feb 7 16:26:37 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010039.outbound.protection.outlook.com [52.101.56.39]) (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 34E5B2741BC; Mon, 27 Oct 2025 12:55:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.39 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761569718; cv=fail; b=XICifAT9kB/1q3qQhN1RKYwiK4MG7yIaz137E6HnQxfIkeThmWScPgaSw9w8/xAwAVA9efGl1F7bkaQHqTvN0EkvqGnCZuerCMk9ddJqiV2lhC7TzpFknsT+rm/cLoefVYbjWtsTjejnuPcAoZkJvF4/6sGjz91HRbWO2zO9IQA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761569718; c=relaxed/simple; bh=ZcrZAzbw72Vgn49wTmSGVKblPtkG19DLk/vQREvUjt8=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=kQOgcLjXtp4DL0xYK/2ISYl1gEhe3/gblO4oSY4A/XkbvS7q8Vy1WX2JQN/VQczuZQ73SpbHWqScToP5t4rgFWkJ9qjLgf0enhH5BCoyw2ItiGJy1BFbX0ngBT0y0Tusfo+kPHwhumYSHNmCstEKHyOAllLFgXrV1MqUZNyx9/Q= 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=VoRsN8dR; arc=fail smtp.client-ip=52.101.56.39 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="VoRsN8dR" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tjWmAXPoZ6M2Eid/Knbhhe4Do/j9JFfAJSkLUeB30KcQjSix47rP/XEHZjMEX8sP4UvEm7ZbqK0koPm5ai5g7xja8T0stbdhjP6HLgPvbg8gAasfAfvZqtiS8RHdEVqVdNT8MbnQpiNIwChZWko91Qn0ftCo2fQ6R6M4erE1Es2hzHtYqIM23v7R3JbmSlAQnzK5ABTjy/gXE0bcSdSLQ17W358mXENQK03sDl/UovI4rnKtd2mn6iL+adErAJrb5Ei5vs2wC+RIYVeavg941O7EcNeXf2OhfYaQq+h7b4l4vFkric+NjpzSWElIi1v/6smaSCM29o9tIgKP4pT+/g== 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=V9YB/L9umpfdeblimmxbATO3ZlBhPkAdSQPbCw1mLF4=; b=LJaaiUXL2z/Fq05CAoykn4pLibrB1PUq+tcAKJhBp+WNOCjFom8OOb11ZYGBy8FLOpe1dfHT0zkdNuuFSF5v+gU1slfVmJKd45WEUZfjTThLjd+CpZcnmXXN0vkWyYk4/cjJ+0OLTeeCJm5Aameyw+jlqf3/efeO8O7D37UorKlhFXzpOGBEVvdbs6XbUxdpWMXHYimVNy9h5TsPodt8UD6fxMUxis86EeV54GScrqO9e0aedbUuCFQKObpWYgms/AXr+6ujQRei5QhWLPt0P3PYiX/rPIAJktEmJZQLyHmKDMsM3Uo8yLwsusy2qe0WTtvM4CIQLv2RzqyBHjMVYA== 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=V9YB/L9umpfdeblimmxbATO3ZlBhPkAdSQPbCw1mLF4=; b=VoRsN8dRDvbVnlAWY6dvs12TjXS60crNcIH1LSmCNyTrP0C2vO08a6o9i2ti4fxjbRDUJ2u6WyoX6JBahXraaK7gXOSNlSQ7z17h540D99jU5+5jkz+r4VF/fpw1yvv+r6UmrJFpGijK/IYeoV3NYpeLjUryNg5DlQ2Jqexsm4/MI5Xbg4i/fKrWdBiF5PExoqWPf/9BAPdQUdS2hic8D68MOYnEyYYMaiJXdJxDw6ISj7swIuz8F8BsSeiVUpbv3PBHyFX8cMUOAgcfAC4f/n4fed0ge5Xtb8R9bw3QcjKajceutEqluZJat2TTUsn2sseMTz2bbBZDfAho60+0CA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by DS7PR12MB5863.namprd12.prod.outlook.com (2603:10b6:8:7a::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.18; Mon, 27 Oct 2025 12:55:12 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%6]) with mapi id 15.20.9253.017; Mon, 27 Oct 2025 12:55:12 +0000 From: Alexandre Courbot Date: Mon, 27 Oct 2025 21:54:47 +0900 Subject: [PATCH v2 7/7] gpu: nova-core: justify remaining uses of `as` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251027-nova-as-v2-7-a26bd1d067a4@nvidia.com> References: <20251027-nova-as-v2-0-a26bd1d067a4@nvidia.com> In-Reply-To: <20251027-nova-as-v2-0-a26bd1d067a4@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: TYWPR01CA0021.jpnprd01.prod.outlook.com (2603:1096:400:aa::8) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|DS7PR12MB5863:EE_ X-MS-Office365-Filtering-Correlation-Id: 91d9bac6-3183-44b3-7321-08de1558113b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|10070799003|366016|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?YWxLcFhiODZhOWhadW90alRvYURXWWwrNGdQWnV4Z3ZVYmI0eTFEdmdkR3g4?= =?utf-8?B?dk1pQzJBMStSRjFsNDVGREc5T1l0OEYrMXBucG1rL3BCUlFDSmE0VTdsWE5p?= =?utf-8?B?UzViZkZQdGhzMWdQa0REK3hRTmxuVTJpTTgxaUdUSE9IaTNWYlVtT2RncENY?= =?utf-8?B?TWF5SGdrTC85a3Avb1VDMEg3TUdkK2VvTncxNU5WeTI3ejArd2Nva2RMc2V1?= =?utf-8?B?NTJSR1FCRTJOSytaRWNHVk5JS0JTUDBValJUbjA3SGtMS3hJM2hwWTRoQVR0?= =?utf-8?B?Ynl3WmtEandOb3RWai9qYkJuc25QYkFBVkRMa3B3VXA0YUM2djJNeUo2VGZk?= =?utf-8?B?dUk1aS9sMjc0Y3MrVUtuNUgxVDhNczdiUklxTHhyU0IvRUNYZmpqZ1hkOElV?= =?utf-8?B?K2JMakZZNlVJVWZrOVh2NEx2b3I0OHlXbGNPYnZadmd0NVpkdE9NRjNqSzdr?= =?utf-8?B?cWZhbHdSUEM1YTRlemovcEEyY0ZyRklyU3dxdzBQNk1PM2s1M3N3bXdUQkQ2?= =?utf-8?B?OXF0dHRPQ0tVTnl4ZHp2Z3A0Vzl1cVlINjZZZkM4SG5wMlFXemtwN1F4eWJ3?= =?utf-8?B?UWgvNnl4clFMMFZvZWg2MVhRMFBQSGlzMTlqVS9jS0I3R0x6ejVoRHNzV3Ji?= =?utf-8?B?VjZrTlhjYXliWkw1UnlGVWVDaHM3ZTU5SnRVa25lOWFGalpzQm1ZT2kzb3B5?= =?utf-8?B?RU8yY01nSTgxTGJTV3lMRktJM1pSekxQUitZdHgvUzlpb3ZuVjc4VkNrcjM0?= =?utf-8?B?anB5OGpjTzlpakNNMHByY0lVL21yWVNsNWVJNkh4NHdEemJLbUNWWkNOYWFN?= =?utf-8?B?Uk1MSmsvYlUwUWhkMHIva0p0bThqdUpnTjh4Ukd6T1JTcUZ5UXhtaXBvUmtB?= =?utf-8?B?a1F0b01pRGVzK29CUk5YOTljUDV3LzJQNXVnZGE5dUtHZmYyTXpPUDNEUFZ0?= =?utf-8?B?ZkRvd3J2RUV2TmhsNmpoUmQzcnM5dlduU21yTDFNM2pMR3Y1UkNhbnJEMFMr?= =?utf-8?B?QzFvM1ZUNmpvQTVaektubzF4TW1jR3NNSlpubk5YRXZCRzVPTjNRSGdnM1Ba?= =?utf-8?B?RDNEN0VRZ3oxRzBndlBlZWdBN3dsUzY5bFpMcEdYNnp5ZllDTVBobFR4Uk9K?= =?utf-8?B?UENsRi95K1NWWEpLcVVRNnN5WGFGR2ZITVBQRVZFdWNMMWZlc0dSd05XZSs5?= =?utf-8?B?Z2VicmhiQUxOSzNjSzVNMXZpSkZkUXBGR3dHUjN5ZXBkL0trd3pVY3pLV0JQ?= =?utf-8?B?M0R1aWFoS2V6OGQ1d3dpc3NFSmpFMmJGQ3JYeW5mSGQ1Qk5iSTVTMzQ4T3Zi?= =?utf-8?B?K3hiZTR5SXBBNWcrcE5xL2VmK1hSbWt3YVphUERhU1V2b0hSTVdtaUdvaUo1?= =?utf-8?B?YmVPbUJCbzZGUDg0aVVndFYwWjlGWUlNL2xvTVpNWWhHakNkaW5zMDNCNHQ5?= =?utf-8?B?LzVBV2tVNldSdWVub1BHUzB2SnliTDRiSWp4NGhMeUZCazVKcm10OHVWTmFM?= =?utf-8?B?dkkvVXN6a3ZsTmpXNjJGMkozSTlSSEtwQW9JUyszRW9hTk1Ib0ptR2djT3FM?= =?utf-8?B?WWwzd1lFWVZrRm9lL1pKYk5LWHYvMitsK25hTU9PSXJzanNGMmRDTHJrSWdX?= =?utf-8?B?cEdua1VXT1I3VzBuNlloZnhuRDBITVdOOVEwN2xjYTQrK2N6a1dndnpXSHlr?= =?utf-8?B?cktvWjRFT0NBMm8rbGFzU0xpa0dRZUNJbjdjUWJyWk04MUIxb09GaFJ4T3RW?= =?utf-8?B?a3dnZEdNR203Z0c0NTh1blFDMW5meVE4RHhEdFNLd2NIS3Npd0haZFovTlU0?= =?utf-8?B?aHJVTXl5U1ZUNk5LSno0aTFqeDczZFhzMXJBVVlOYTNnelpEMWtPdGt6TU9S?= =?utf-8?B?VGZqWEU2Tzlib0h2eUZUOUpsejFPZVlXQXRscUdMUkNtYjNBUUtKTUsvWTB4?= =?utf-8?B?VERiSjF2UTJMRmhuTkJjM1VveGd6UDEydXhseGtiQWtoZUdRUEtTbWtIc1RW?= =?utf-8?Q?0yByFH7L38EA3FbOFDYMjWT7aXLL1M=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(10070799003)(366016)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YlNmMWd6UzRGdE12NGh4Sk9PQlY2NVA3cjBFZnRrbDJMOVlEZTkyRVBRTnZn?= =?utf-8?B?YjEyNU5XK2k5TWQ2ZG43VWM3ejJlb2psU2ZzUDh5SmZFSmg2ZFg3aFlrS0N6?= =?utf-8?B?dWc0YnR5L2tZVFVzQmhVSU96cmtORVJyS0pPeVhHYVhoZUhwUWhMQ09HMnpY?= =?utf-8?B?QjI4V296ZG50OXg2dGIzS3hzdXNsZDdHN1FiVXJPdG5yRXA2Rk82Z3hubXh1?= =?utf-8?B?dXVoZkpFbEpENlFaTDBhMFpwa2xhTEVlQ013aWRWNXo1SmYzVEVKODZoMFEz?= =?utf-8?B?ZUsxbkhlM1htRUZQakJsQU15dmoxSUFTSWNsNUszb1ZrWDBnOUpKUldlTFc3?= =?utf-8?B?Y0tubUx0NWNuYUhDRnFyOExKZWJHZWtzWmExckFFQjJKNVcvWTJzWW96eTdQ?= =?utf-8?B?Y1YxckNWV01WZDRjQ25NdTM0QUNzV3dYOWpxRkxzS2xLdjNxbnExZ2I3L1NH?= =?utf-8?B?R2J2TTc3blVsWWVLeHpnRXRPcnJGQmdpVVc2TjVQSjk0QUF0U0ltRTZ3U2Fh?= =?utf-8?B?UVcyaWQ0UmZjNG4yWlpRTklzaFY4ZlVSUFhEWUpvSmN6aDkvS1F4d0NKUmJG?= =?utf-8?B?QThsZ3RiSWd3b1o4Q2UxdDVGWlpBZ3ZKWFZmM2FXMlFWbDB6TWlhMWdKSk9n?= =?utf-8?B?blVwUzF3TGMrN2Q2YmcyKzFsZTcxWWNaN1AyNkRQTTUzVDdNa1JRUWdEd0po?= =?utf-8?B?QllPeEVIbGc2U3BIeW5UVDNRTlV2Mmpubk1uYXU0U0ZrN1o0WUI3UGVSYXdE?= =?utf-8?B?bzdRNDd2SkhBdDBPN204Ym9kOGczTmNXTWdrOE1WSzhtb1owNEdTRTIrT3ps?= =?utf-8?B?TW80a2RWR0k5cHpuRXZrbFAwdHhGb3ZHZ0NQNEhHVHQxcmtYTFhZVzNmcmp2?= =?utf-8?B?UHNuaXg5VVQ1YlEya3l1VHZWeFQxU1M3bEFvNndVYm5KbUh1UFppRmFhZDM3?= =?utf-8?B?WW5meWFQbU9QTkhNaDB5V1UvUjRCdTBnWXJXY0h0UXlYSFc0MmJReDUwQ3Mr?= =?utf-8?B?KzhxcDBkMnpyMkY1ekNvb3RvbzdkMitCYTlTZVR6Ti9mWWlKV2x0dXZsM0dK?= =?utf-8?B?Qm4wdy9NUXBCRUIxa2t5NjRzNjF5Tkx6NHRNR3FMeUhoZUdsWG1BNUNIZ0FF?= =?utf-8?B?dW1ra2s2Ni9PTXN0ejJWNisvUVlFMkwwNXowTENPeHVxNkFNcGlNVW83MGV3?= =?utf-8?B?YTlVeTZJT09BbmpHWGo2ekpldEM3Q2JRKzRFR2hUNHMxYjFmaEQzN0NpaDhN?= =?utf-8?B?ZGh2S0plZzRsTWpnK29sYkIwNTJnbko3TWMxTzNMUGpmZ2Vra1BSYTVVRXpr?= =?utf-8?B?QnNSZEZYc282NUpqY3g2NmRvcVBzbnpDMWlGdi9Dc2R6VTJXcDlFUjJQZnEy?= =?utf-8?B?SzNtRER4NDFVendkdVM1M2U0RnlwTUQraTdCYlQ5d3BQZGxSVzVab1JyNFhw?= =?utf-8?B?Rnlyd3RFMVNTdEdYbHl1MFhiL3loTngyNldHRG16eXA2K1pybVhQVkxDWWVM?= =?utf-8?B?YUlWV3o4NjRETzQ2TzNVNUlNRmhxS2tUekNFVGN0VTl5NFZpTHZJWTdnTHlP?= =?utf-8?B?SVgrSTdiMlBaYThQSEdML0NvaFdGbVhGakxHK2hFQVRpbXRzR3c5bGh5ZzI4?= =?utf-8?B?amJDVG9zc2tiNU1NYmhCSTd3cHdOcW4rMXhUZlBIMDFvamZiaDhNakRxdFdF?= =?utf-8?B?b21qY243TmdkMGFtNHhLREVFMDVnUFR4dk5zeHRCTS84blI1UGNZU09pTVNU?= =?utf-8?B?N2FEMmRrU0MycWk0R2RkTUdnU3ZBdW4zVVlib0FyYVBzU2xTeGh6KzNKOVo0?= =?utf-8?B?MGY4dnRrUGRYVEV2aEFHVlRGZ1lzY21LZ1JtOExRK2d4WU1WeVZiRzlwOG52?= =?utf-8?B?YjF1NTJxRzFoK21YTm16NUIyS1kyNjFqT0JIaDBmOU8rZ0p2MW5MaUhTeDJj?= =?utf-8?B?OHVsd3ZqWVpGZFNvaExJMFlEU2EwZHZZU1dqRTVUUDh6azlCdFAyMjZ3M1FX?= =?utf-8?B?ZjcvbFlvbCs1THYzelFvRThBQUhoQ0t0Qm1aSzVLamsxeFhWR0h2QjJpcHV6?= =?utf-8?B?VHM5VDhtV1MxbTZ0WkpTajJKWVhleTV1c05KUTdpbzRDRXRrUGpiTXZxUHB3?= =?utf-8?B?cHY2Y3d5a3pUdlFCLzZ0VWJkRW1JTDloT1VGSjR1SUFsczlxWWJrWFN1SDV6?= =?utf-8?Q?YteA27aQp6zSLhn/eLmkJ04U5df46+bWT4kecZgYrP7Z?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 91d9bac6-3183-44b3-7321-08de1558113b X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Oct 2025 12:55:12.5573 (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: oIbNBOr4LYhqKzR8+BUDjqB8Ef9u2hTlasAfMGOk7LKScjcatQAWd5GzrOhT6qZpcaDsvKUwvsar9WE3kTBzpg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB5863 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. Acked-by: Danilo Krummrich Signed-off-by: Alexandre Courbot Suggested-by: Danilo Krummrich --- drivers/gpu/nova-core/falcon.rs | 4 ++++ drivers/gpu/nova-core/fb/hal/ga100.rs | 4 ++++ drivers/gpu/nova-core/firmware/fwsec.rs | 2 ++ 3 files changed, 10 insertions(+) diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon= .rs index a44df1ac8873..7f6c7091c9c3 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() + // CAST: `as u32` is used on purpose since we do want to strip= the upper 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() + // CAST: `as u16` is used on purpose since the remaining bits = are guaranteed 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..b9389fa382e5 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() + // CAST: `as u32` is used on purpose since the remaining bits are = guaranteed 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() + // CAST: `as u32` is used on purpose since we want to strip the up= per bits 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); } diff --git a/drivers/gpu/nova-core/firmware/fwsec.rs b/drivers/gpu/nova-cor= e/firmware/fwsec.rs index ed82e74ccdc9..ecef4cc78942 100644 --- a/drivers/gpu/nova-core/firmware/fwsec.rs +++ b/drivers/gpu/nova-core/firmware/fwsec.rs @@ -161,6 +161,7 @@ unsafe fn transmute<'a, 'b, T: Sized + FromBytes>( if offset + size_of::() > fw.size() { return Err(EINVAL); } + // CAST: `usize` has the same size as pointers. if (fw.start_ptr() as usize + offset) % align_of::() !=3D 0 { return Err(EINVAL); } @@ -184,6 +185,7 @@ unsafe fn transmute_mut<'a, 'b, T: Sized + FromBytes>( if offset + size_of::() > fw.size() { return Err(EINVAL); } + // CAST: `usize` has the same size as pointers. if (fw.start_ptr_mut() as usize + offset) % align_of::() !=3D 0 { return Err(EINVAL); } --=20 2.51.0