From nobody Mon May 25 03:33:07 2026 Received: from CO1PR03CU002.outbound.protection.outlook.com (mail-westus2azon11010025.outbound.protection.outlook.com [52.101.46.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0F54D33344A; Tue, 19 May 2026 02:55:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.46.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159354; cv=fail; b=IAc8aj+v6Z8Zv68xyYEJWR0OFUR4k5lTCtBl7E9TT+bf81yknxHqQxJZWtSjVCexuphmf6pWLFITBgQzlCgyfJxVuYr0OJRxF8hZourf6fqdTFvBEE8yNVmVUCqqmXEABDE+pdd6GMod1s3KpcSe1YXj1ePvdFPn6IMEgM9OXo0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159354; c=relaxed/simple; bh=MmZFrwvPElpzhkx3B7eWlhWS5lwpMaESQpyraoLgly8=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=kyruyXQYM2vBKoE+FN7QyyhUOyIaiWO6LkEcDNIN2Si7bqyW+z9j5iC45VADVf/3es9J+VTxeU0M5Nv91avuZGCyeZGSX5rlArI7Jtx8eF53ykfyCNJuRiicHTPQ1KbpAbD1fS3DlK2bk5lFPe2i3l4dmmgAfLZHa/VkzEkrHl4= 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=sua4Fz5I; arc=fail smtp.client-ip=52.101.46.25 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="sua4Fz5I" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Fd2bsyifjNCZ8m/ANJK0G1rY8C9iNpdRuuHfEFssm4LX9FBO//iGDAsweTV2NfkqORLoJpwSbZMxysyNN6SCIulIe5JDy2aIgF3Vyf0tL5eMl7SlAH8f9v0KWRzCXHvMQZRe/szM1eDUqMxNeOPJtxIaFM3fQE4I6lBdADSf0XIq/+gChWM9cYbkHTWfrmnFbBWkZ08h9W3jtDYxVG6EsAoc/XYxusvltxLWDYSUGJCAyzEr+LjRDo4O4I6jCfFKM8YO3cQxELvkH3I4pAbXT2MdopQwmoUy5kLzUmEcZg2QFpCwl87NZhyZ9QGL/NfYuQWlII96L1EuwHjMl2Ezqg== 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=QTg1iJZHBkZaRH2tqZXCad4yx4PTJlS1lhLyC+p3I3g=; b=KSBIhN8I7ngamvXwR19MGvtkoO/bECfSVEdfINx1yH/mAdJM57rER8nS6vNQqIBTgvWgL57/EIrk2tQNkUmDjJaX4+tWQ+FNNplhfRIZqibCDuOS3+x2Xcw7td0DbbxOQum8wP5wZIzYkwr0/YP5UJ0Kml6OHHDOoSqxNAy8qG/y0h2ECFGLHUAzbSsxcsfFG7idOQbveuiveTkQLeoSbUoN/PLKGjMWSBh1DGOeHE8dqVACbPsYvg8IX8VVb9p4JzIZa5sm8mQfVU710c1iASkAhqS7NGfnVlT3sdEZsl+ArNMTETkuqaPhKWT3JOFrIIlkDzvkolDzNOvLk5wc9Q== 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=QTg1iJZHBkZaRH2tqZXCad4yx4PTJlS1lhLyC+p3I3g=; b=sua4Fz5IIDVnmkZYmRvlbv+VsVQDSMM+cuGgCQeGh3sHoWcuQgjHkRiomkgUWRmTczlUUyA7xKM/a0suBu0/f/jFNIfyYXNruJyeMGTv8NRkWLNzcpaeGHrBjVxjnKl+kBdQibAhQQadRqH6MQGf4h13dIRd9o0cuK7Nv9TDhYy2bZEL5dOo32b7nmNUsIU3MBfzh2URV67MCuhCjd/oKRbLOg8IzuvNDcUB5NsRz/ekdDVbMTzVVHMhcYvQ0KkwHfz/u5NYKQpNxEe1ntIeCT0dSjnXX0TtbjkV227fOEffle3cIdyChLx/bKxnDaM915ePItJD5fpOu207GsUQYQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by DM6PR12MB4251.namprd12.prod.outlook.com (2603:10b6:5:21e::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:55:49 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:55:49 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:54:55 +0900 Subject: [PATCH v4 01/20] gpu: nova-core: vbios: stop scanning at BIOS_MAX_SCAN_LEN Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-1-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney , Joel Fernandes X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCP301CA0030.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:381::20) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|DM6PR12MB4251:EE_ X-MS-Office365-Filtering-Correlation-Id: bccbf45b-aa4f-4268-fd23-08deb55221a1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|10070799003|376014|56012099003|22082099003|18002099003|11063799003; X-Microsoft-Antispam-Message-Info: o2MZPpHonIaasb31ebIfXF5sgEwazwdTGDXyeQ1Axy1THMSY95L1NkxqHEHJbU5jodPZXdWP9RW4BWsajk/ltIOyG3y2sbdA8i+6UkXX0NBa7cfSf42LbSvuhAoqE3xL/pVTgbrrf44r5+CRWJVWUOlcXKHvCa5+Qp1AwllYsIVyu3eufOwc1qNptN7nNPxBoEQ5rf0whbhYAMH4z0ybyS6vIviKpWrEk/JEAHhnqxyuTppxOxp0dd02IkixUo9F++6eNqmMNT34TADx9orQsZ/ytmzcpojKp/hBA/0XuSaN2/ylFxVTOxpRmjfVxO0xKleKaBlJcOcHZTttwIh47td3yS97itbnjDJlinGl7DUb160Sl3gIfGvgXVssw6pEPp3hYWQod+wlImKvhZWTdy3+EMQR1hyIuqpuHQLxuWlnX+FfRw2h62OwyVA/6ya799OscjTct3pGoLH+JMlPSIMQ4ZIOq0umWWCIC5deg3rTSUWruFv3xxx9rdE4kTkkyxIwhCr4OD7H2NKtQt+fuxiGiIRN8NAezK8NTQTxTWFly7D1x9y37qNV+bWaXhU23QFowGewknTIy7lJ9yG+OeUBDQKbs2HIA8mJp3Dkw/s554S24FQHumWjZ/NKe688kBjIoDWcdCOkkGGDElUawkenhvgUyaxC0fBE85yHVekh2kVjYmu7dNZsg5JhqW9k X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(10070799003)(376014)(56012099003)(22082099003)(18002099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Y0tqSGltbEd2bWpLeWpxSzIzcEUzbkk0bnUyaFlDbTF2dFBGd3RlRWVPMUZo?= =?utf-8?B?bFJneGNqVmVmNzlST083NkNuclkyR0liY0o3OU5KZ0ozSEN1UDJZNUx6TExK?= =?utf-8?B?Z2sxYWpKMDFOSS9MeFNsQmFNanpROFlZazJiVHlNYXpicFNEaHJxVm9Hdmdr?= =?utf-8?B?MUkvMlRZWGIrcDE2ck40eDRnNlNkc3RtSHJVZVVtZmxhQjJ6TlVQMUE1S1Jl?= =?utf-8?B?b0FJS0dLU1BPaDYwTWRwOUVIRXFnMVBteXUrbDRiZit0MU9udGtyVHljQTM4?= =?utf-8?B?QTRXek1zZ2VFcys0Z2ZGUUk4VUNMWGFEeS9Ya2xwYnRVaHgxVHNObkVZMGlU?= =?utf-8?B?cDFLV25KeEJYc2kvVGhjclNLb1kxNmQyWC91dGEzY3BRaVRYQ2J5Lzc2eW9q?= =?utf-8?B?U09BUVVvYUZueXV0SXE0Z3A5ZEErY0VTWmk0dVJrbmlHNFFnaVFYRXAxRnds?= =?utf-8?B?dlVZRjU0NU5PTk84c1FPMzE0WklXSUxFd2tOYmpyVmNNejdlMXRKVCs1Zm5L?= =?utf-8?B?c1RhcHlJMDR0UmN3ZXE1UlBoTzZpcjVTbEtaaHdUanMzR3BVbzlHaGUrNW5y?= =?utf-8?B?Y2VpRkVXOEF0RUVyZjFkSG0zdkxaZ2JKMWRyQVFSUGVuTkR2S3VHanJaUUxs?= =?utf-8?B?QjNVSGl1eFRrQ2lBakJsOVJKTlowbzhTMXFibTNZTGt5dkpyVUM5M3p2V2J5?= =?utf-8?B?ek5lVCs3Y3FQMkpxSXpoaHlnQ2xJVWtDYTNkT2ppK01BaVJpamNMckgxNlNa?= =?utf-8?B?TlhRcnVzQzVxZkswMlhobmY4RjV2eWlQZVJ6eHluMkRGUDdRN1dJUGI3ZVJU?= =?utf-8?B?QW0vSmlJQ1pVSDJTemdqaWdhYXZtUnNlTGx5K2EzNDZDcXUxa3F5ZWtZQyty?= =?utf-8?B?YTliQXh1MFlnTDR2N2xIZSs2alhSRnMrczMrS1N5bDFDaks4eU5EV2U3Q05k?= =?utf-8?B?M3FGYzYxQlRaNXAyMWJ2UkRxVTA5ckFPQmlsb2VCeHR4TDFkQzhSSEw2bWR0?= =?utf-8?B?SU9hdC96MW1JQXRVdU9GVElpd2VHY29TTmVFR0hIeDRlV3BpcDVHeUN2b01G?= =?utf-8?B?MHZ2ZmpUbjBTVHI2czBNcDJkbEs3RVZZeWhHay9iWVVGZXdpSDhZSTNrTklk?= =?utf-8?B?VDI4cEhncVRXMC8zMlhOeUI4YTJ4dElaTDR4UjUzYURkMk5IS1VVVWFhdGgr?= =?utf-8?B?RGRER1F3c21QRENpNzB1VXNiZjFYb2RBRTYxY2dCamUyVEI3ZFd4NFVvUWtv?= =?utf-8?B?L0xWOUpUUGpSVC8rMGhXVWRDeC9iOWZuWEE5RGRzTE1aRlJESzQxaUJodnBG?= =?utf-8?B?TUhXU2lCM2dFcmJrc0tPVGN3MTM4TzNQeEpER21GU2dFRTFhVFo0VmREV2VG?= =?utf-8?B?Z1p0bzNvYWZWL0crV2VET3gwUXM4clpYRldkSHVaSGJ3YS9pY0hGM2prTXo4?= =?utf-8?B?bi9mK3h0bVJrTmlWRzZlK3pjU2RSc0ZzUWlVbERjQllpQlRjcjNGRHdiL05O?= =?utf-8?B?N0FUREdEUVM1V1kwSE1uWTllMWVCNmtkYjI3SDdjM0ZaUXJNcm5hOGdacnM2?= =?utf-8?B?Y1JHTTV2ZFlBQXZHVjB4OWJQMU1XV0xUVUlxVEtQOExRWENFRFUrQi9rN1hq?= =?utf-8?B?UWJ0eFVmeTFjeEhNUGxUb3h3UmlCZW9STzVvVC92dUVKc2xSQkdhMit4VzBV?= =?utf-8?B?dnF3c2dpM0NKSWpabnR5K3RIU0pJTG1mY3VIN3JnTGFOeWx5eUV3dDRwQUFF?= =?utf-8?B?eWhyWXk3TmErZjI4V0s3cURlQktyWkZCV1d3eTlIclRFNFR1cDVld1RnREVI?= =?utf-8?B?WTYydHU1S1NYVVB1cTBUeEpaNHVidFBldFg4N3RpVXBQSUUwbHBTRTBCeURu?= =?utf-8?B?dTM2bjBVRWcrSmd5R2duTEMxbUpqNHZwbXlJc0xxWWo0UTYrY0NiRHJpUjNk?= =?utf-8?B?Wk5KbGRVb3h6dS9ZYmN3VGtaVzVGMy9UM3dra1EvWnd1TmRPeVlEMzl1NWxs?= =?utf-8?B?QUdRME9kSHk3V3VSaVYrNXNmYnorNWJVelkyR0RwN0ZzamlIUXhMUFMrNDF0?= =?utf-8?B?a1g5dWl1WEdxci9SbnZ3elZ5djNnTlJUVjErNVBKOWlyUUVTcktkYVdqcUZv?= =?utf-8?B?YTFtM3pJSlN0MGZVb1FwTHBKRUpOR05OYVp2bXlYcnZQdjNJbktZdmduODVw?= =?utf-8?B?ZGl4UEJDTE9HUkxoM0ZvL3hMdHJjODR3aGZ6dDZURW5pR0s0elNxTk9qNE1S?= =?utf-8?B?cWhMMzBkeVBZY20zNVdaaVM3VDN2KzhocXp0WGo2V1FwekZWamJxNkt3SWZ2?= =?utf-8?B?YXcwWUNOVmxwQklyVWh1dlRsRFNydlBoSnRtL05TUllvUENtYUNVcVp2Q2x0?= =?utf-8?Q?FJeYu7mCuC1VZUcE0u1wSMxeN6KPqxmoTZngKkh8XLYAW?= X-MS-Exchange-AntiSpam-MessageData-1: vSsdoRYVoTPCWQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: bccbf45b-aa4f-4268-fd23-08deb55221a1 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:55:49.0693 (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: dTtI7f2RSRNbJPx7RrNgmntG98omtkf6QhIqTR2oWfh2/MK55o1D/DJM4VipLyk3tFckQZ3NLMm2vF2sxRSwAA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4251 Current code lets `current_offset` go to `BIOS_MAX_SCAN_LEN` which is one byte too far. Fixes: 6fda04e7f0cd ("gpu: nova-core: vbios: Add base support for VBIOS con= struction and iteration") Reviewed-by: Joel Fernandes Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- drivers/gpu/nova-core/vbios.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 6bcfb6c5cf44..7bec81a37340 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -272,7 +272,7 @@ fn next(&mut self) -> Option { return None; } =20 - if self.current_offset > BIOS_MAX_SCAN_LEN { + if self.current_offset >=3D BIOS_MAX_SCAN_LEN { dev_err!(self.dev, "Error: exceeded BIOS scan limit, stopping = scan\n"); return None; } --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from SA9PR02CU001.outbound.protection.outlook.com (mail-southcentralusazon11013030.outbound.protection.outlook.com [40.93.196.30]) (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 DDBD4331A56; Tue, 19 May 2026 02:55:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.196.30 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159358; cv=fail; b=LYT/pyX3PsvpaPzAuXzP/+PD72fEJv5jQnOYugut4udh0KngUqajKpCrR0Ptu4Yhrbgev5CnunXxc37LXoLZAKPNkDcy2iOCWLTag8PbkFXpNY/E9nT4IEqXXk8xgkdGJBccsndorR1OhyxdEZdQa8bVj0Kil07KVbYYUQmlGm8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159358; c=relaxed/simple; bh=USzGQqGiTh5GwML79/60N/keQdQuqwK7wcNT63vxSBU=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ilTN41Py0J6Kq7LHp0iGou0cNE7roZ7qbJdj7u6yRRUTaTiHAI8gUxu4SRJyjexoxGjOGfdyiTcjiGolHkXGfyF7c6d8/Ho72cIeNRwrRxEAg5lOUC3nbRJ1GHSmUHMphVS+Dqc7DMS93eCoZ1WRevGaCmK8FRHfZK0XAMIGjmE= 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=VJJi8032; arc=fail smtp.client-ip=40.93.196.30 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="VJJi8032" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BVHEEfXl+7WJVVqu9aN2BEWyTlqtkj3dfFWPlnRBtEyWtqqVJ+Q3pavL+Y/Cy7p3BK+uuLObqxl5oOb9UC6cOrJI2D3GJqIQ14trV7Yd6/fq+EXceyGsSJRVlj6pKHC/1rW9v0md0vhKstOk4ReIAQ8LwExXIYm2wflrqisJevID9DyddDIm0rUTEz9gU2VM1Wzjk8dJTL5wu63FWDulRULDqdbAyDLa2dqMiLlki+vD8miLrKF7poHqS8n37VFzuAlMp8bQkuvNcYGy9PSpsLou5TE1qt5jy76FAiipidmBnnsL8ZQ9611i8slKIkG0LV/bxE5ME4L3c8awthNlFA== 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=IAmC7dXzERHx8iCmqfhi9reOsJWdkEDMp7+Ae2P4wU4=; b=kI+wK/fTXj+fsOcsJpSreD46p5ZUyJ3Sz7IN86Iwzn9FOUCndShRg0zOw9A2zHVtS/ChjOxQGTNak+dU1AeJSVQ7bwe2FAWaCcap7V0wM0WpDJaFLoTqPIUAIrFfbampRfSd31j0TRHhtH9BSdDgJ6+hr3GEWyrZqu5ZU+cKUPUFaqiR0AkQjMrixgSHb4M+KJqlYVnxJemdwZHrW23SqliuH+NGa6Egzoc+P1L93fFVEOzZ68lLvTconDDHCYlamCxpyn+HiWpVDwTPxHQgfoShNdukCG7lvrjrddrAITn/UAhLaWbXrnF3DjL2EOZFcM7o3GDE4AA/WCQd89ksyg== 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=IAmC7dXzERHx8iCmqfhi9reOsJWdkEDMp7+Ae2P4wU4=; b=VJJi80322Xk5XRgrwX3UpYc5BFe5kPQd2oDe/joskRkVifIGZmqeiXa5A25SsqDAqVeJMXOoLBKIjuQzBWTEDtotxw4/cGN1Ym46BtUZRoeLnpt/Nm0M/0pF/BdiqpwselH49rcNggMfxzGRpjWNgWZD75IYJdJLMGfLKkbFtuSFsdDy5WGhxqneYb7aKBwL6wObNYukjL7ty7Y/8y3lt506wf490ZkXrwp2RrXAol35zX07YZN8aTJoTL1t/gGXtWRW+KP5Fe2T3WSXnnN3xVpD4d1X3rJ/ZJ+gCzJF3ze7s2AsjospKDQGNdv4FVV2v6AOk96JcPSZy668J+pAJQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by DM6PR12MB4251.namprd12.prod.outlook.com (2603:10b6:5:21e::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:55:53 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:55:53 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:54:56 +0900 Subject: [PATCH v4 02/20] gpu: nova-core: vbios: use checked arithmetic for bios image range end Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-2-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney , Joel Fernandes X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY4P286CA0053.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:36e::18) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|DM6PR12MB4251:EE_ X-MS-Office365-Filtering-Correlation-Id: 210180f8-e024-443a-f57c-08deb552241e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|10070799003|376014|56012099003|22082099003|18002099003|11063799003; X-Microsoft-Antispam-Message-Info: DKjazD7wQW9DhNsvBGeDv/oOKzjhGSrCF6De0IvrWbFxKjrYfQplp7/eBMwgvo6mGjzJmwCGuQIFNGcxqqYDlZJs/wIQ5s8+uHddHkiaLYN+lg7aKngNe7ZSdINfs1BeoP4o6A4gT5oEZ85BARYhoTJzY1z3OBdSe1QdBGLMFf6ndAIeeypiN2jsaWH2/svEZJgZID/y9uZSBtkLnt4u2nz69q7lGyLJE/UUghPcvvJEfT6c76/CLTKInhH/wF3bUi2ExwdEM/R4zkxw0qVeBIYDgmaUt+VFH7s50NYF0st8kFrQ124ebAJNzmKYumMxNJEl3JgbRYdSs/psxW/vfjMRMktpWVqPWO6qgam6pWJL/qMlKVMCV5bjERNkEkYw5WpDJZ9sjeJNDuu/C7MnBJFKsDQioEFga7GNbSz0ri8lP/cA2nk3YgWWTGZ7QsilYyGoc/qfvKDpOIR9gR6ypqvsEfH2QqEV3lCtosQQeEe3urLgVrGxb440cHS2XDfdAMn0rbPkZ87C1aODUVASfMEItuhbqSNEfikyu67uR0ubOjxatXkZlo9c4F103RBgQS6V7ma+QsZJMIlYwWZ1HPMrMl1grK7q57bbrWuYVaBdes6w6gJBJFCQaQ05NdKK+ixelSH/9EmPkA8Gso6BNxDVhIEk44lzfW32kVegm/shnPRBStw3g1295DY9uxsr X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(10070799003)(376014)(56012099003)(22082099003)(18002099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OVR6U3dRTWhobEltbS9SZW5BemdYYXdPd254eDBqYit0L0FpMHFTVzNaeFJE?= =?utf-8?B?cVhBWkFEbldhaGEzSUZPUnp2OHpjOFY3OVRtQ0VQMDA2Y2J5elE2Mm9VT216?= =?utf-8?B?L0NCTHFZUitPZlUxTlYzODRaSGpGZGtWbU9VZjJIQnRYY0ZRZXpNdGtDeGFR?= =?utf-8?B?aEpMWlp5VFM0M0dSZE4zR3kxcUNkbUJuSjZmUXFkNE1WWFlXbm1KSnJxaXJ6?= =?utf-8?B?VGE4STJRSFBJYnZjWlFXRWxMUjViWDlQQXJYQ3VDVnpMMFdLYVpDUitIeDhT?= =?utf-8?B?elVrRFRhSGU1RHFTdjNWcW1nMFN3Z3NKL1ZOcVBwNGJYeVJVMUdkaEFXN1ds?= =?utf-8?B?K1BFUE0zWmlmdGZSTklDWHBiQlZ0dms3SGI3Q1NJUXZMbi9TZWhpaS9pU3li?= =?utf-8?B?MkdqSjFodFFlWENDNk9zdjRtR0w4cnQrRTQ3ckhvbXNGeWVQV0NyUkF2aVVG?= =?utf-8?B?c3FpSXhmOTBxNUROemp5aWtSMlNycWdqZWdyYlJ5aDJBTEFqU200bEh1a2l4?= =?utf-8?B?YnBBaFNCbWNnU2pucERGSUFKOXo5d21wZC9wQ2Y2d2VTT2M2ZWdxYTB2U0JC?= =?utf-8?B?cUE4eERTaWFKY1pINlNJZUZCeTBGMitPT1Nac2laYlVlVXM0bjhHR0h1dVZF?= =?utf-8?B?dkR5R1BwajN2R0ZTc1g4Y1pINVFoVUxSNkZiakpMb01BNnpZa3hHQzJNNTZk?= =?utf-8?B?WENVU3pScldIMnR1UWk0THFSM040d3JhSHNlT1hoUVE4alo5MHFJMFRkTGRo?= =?utf-8?B?RVE1WjVRaUU3dndQeXI4QWFtQm5CQ1NYajlnVDZJTXlEMmg4WStzYUVpZURQ?= =?utf-8?B?LzJYNWFsaWM3bUk2ZlAySlpWUUVwWUxrVkVpSHJrN2Y0MmdRNHJwa3lrYmh3?= =?utf-8?B?YWZvbWtwdHJaVzZCcks0ZlRJRit1TWdhcG1wMXpxWnE3TU1HV3pzMXFPS1ln?= =?utf-8?B?YmpGTUxTa0tNbnFNNTVhNTR2ZkZuNzVOK1VXekoySER2dlYvU0RJUWVJSEdo?= =?utf-8?B?SHcycHhDZFpIREo3THFXV3JlSDhFWTBZM1h0TkdOOTZzQ0llYWZqaDhUS2xu?= =?utf-8?B?dlhvQlYzWm1HV1loQUNlT2ZIczNVQ3YyZFZJaGFad3pjU2F2aERTYklLS01n?= =?utf-8?B?VVhkVENlOENFTEpiaWg3ejFoQ2NwVmtjSHRlTnRCTGE1UlV0SlJRME9pdEdz?= =?utf-8?B?VFVPQzJkRFF3cmYwcUV2Wldpa3FmOVU5WkEwQ3p0Z1VUNFlMcDVnOHYzempX?= =?utf-8?B?S3cwb1RjMVN3Z0dyaHhHYzlqMjErNkdTS2Vaa2Jlbnk0Ym9UbGxpd09HQ3NS?= =?utf-8?B?UzVWaCt0NlpaVU9nYXVOMFlqVjF2UzBHVU9jeHp5QTlOWDhwOW5SZFlWNkxV?= =?utf-8?B?QUdCWTRGOE45SEFIY2I0NjV6YllQbUJ3MzBWdlI3VHBXZTFaSUtERkROSUVN?= =?utf-8?B?UE13K3ZmSEpNYXpWbmlUeThpY0pZVGxlSS9YNnVYcWF1UFhCKzBIblNDSUEz?= =?utf-8?B?MW9YSVJpTnI5L2R0ZWFkMjJiU0dRTW9yVXVnS2hBaDFaV0lua0ZyQWFtbDR5?= =?utf-8?B?Nk9tTUNRUlNxVGFvK2xhRHYzdnNWcFdwVGtYTVMvYXV0RG5YakdZSS9lVHJt?= =?utf-8?B?RWRvdS9ObDZlMmpmWWlPekN2V2g1Y0UxVXZNUTdzNkVzUWV0UGl5ZWFRMVht?= =?utf-8?B?L05tK29ITFRqcUpiTFhIbEJDd09ocm5wN2RZcjEzNjZqYWM5czJBaExjR1VJ?= =?utf-8?B?SzFneHl0emhsNmJlZktLWWtPQ2M3dHlNekErVjQ2MFZSd1FhSVZJVzJuYW9u?= =?utf-8?B?UmVFanBoK3MxejdTYVkyQkRSTnNMM0REWGY5STVWRlFpaUpIcWhRRldub0pr?= =?utf-8?B?S3NNQjJVZEZUZ05qNVpCTE41WDdva2d3ckQ3ai90eGpKbGhTQ0VnS0cxczlQ?= =?utf-8?B?cUhiaGdWOVBScVkwd2NYYThnSnpnT3BsQTU3NHo3NnZtaDNoVmlQaENsYldK?= =?utf-8?B?VFZlc0tzMUw0cnpkNHBqR3hwTS80SHE4TEF2aVd6OUpQL2J4YTlqbjdBVENH?= =?utf-8?B?R0hYcDhpQXNWZ0dJN2JUUlBEVlFTdGRhWTVlUEFxRWNyaDhWVThiZlhWdEk5?= =?utf-8?B?SnYyNnBSRkNsRnRHSEFobVI2VE5FejBDL1FwN2ZLOEJCbGYzdFB0cnp5ZE9h?= =?utf-8?B?RmV0ZWo3S2w1L0lKWnZuZ0NibUt3enArM3kycHU4dUc3MGEvSlBIOFlYTlRi?= =?utf-8?B?V3J3TzBTVTA1S2hwZ0VWbGgxcVY4c1BNamxEdklXZmtWM0EwYThMbEZ5SWpo?= =?utf-8?B?b3p0b2sxMlBKM3VYelh6RkE1VnRpOGphWFdEeGwrb3BjaUJkZUZYUEdueW9V?= =?utf-8?Q?h8Fm6EGEcKZdVj7gzkSE5WuZ/VTYgyChIucGHs3F16HL9?= X-MS-Exchange-AntiSpam-MessageData-1: vZUM+PFjqEFAlQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 210180f8-e024-443a-f57c-08deb552241e X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:55:53.2361 (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: 2Ct1nLltd5ADK34GmXI+6NKQzz/cVKQTpJ3FHXg8uUB4C4eoevmDaaoUHILNx+pgk1HmQwVqipLbb7LOXtamtQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4251 `read_bios_image_at_offset` is called with a length from the VBIOS header, so we should be more defensive here and use checked arithmetic. Fixes: 6fda04e7f0cd ("gpu: nova-core: vbios: Add base support for VBIOS con= struction and iteration") Reviewed-by: Joel Fernandes Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- 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 7bec81a37340..180928433766 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -238,8 +238,8 @@ fn read_bios_image_at_offset( len: usize, context: &str, ) -> Result { - let data_len =3D self.data.len(); - if offset + len > data_len { + let end =3D offset.checked_add(len).ok_or(EINVAL)?; + if end > self.data.len() { self.read_more_at_offset(offset, len).inspect_err(|e| { dev_err!( self.dev, @@ -250,7 +250,7 @@ fn read_bios_image_at_offset( })?; } =20 - BiosImage::new(self.dev, &self.data[offset..offset + len]).inspect= _err(|err| { + BiosImage::new(self.dev, &self.data[offset..end]).inspect_err(|err= | { dev_err!( self.dev, "Failed to {} at offset {:#x}: {:?}\n", --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from BN8PR05CU002.outbound.protection.outlook.com (mail-eastus2azon11011008.outbound.protection.outlook.com [52.101.57.8]) (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 B89E4331A41; Tue, 19 May 2026 02:56:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.57.8 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159365; cv=fail; b=Oc49XTLtFvzpDR8DxqZTX5Xmo6H2ZTFlUPjypzt3HCZ14To2cv7MexkvIV21m6CMvG2tWnRBxKVF6+HHhqSsejuiNyMPxnWuI4O6cz25E7ArZDd6ja5CKvfLsTsjRldCQRGjwLQDI7Kvfh3DPUyUcZm3GUyc2mhxYWZgNk2O6Fs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159365; c=relaxed/simple; bh=Vx7Q3v5voXGUt/O7yPyGabgZCk5na85/QQZqOXRidFE=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=VOputYJlhmmdWW3o7IEuV5q0iiCOjHxbsdwZgri1BsrbvOlPhHhSEZaFMD8md2S34E9v7L31O0isqlyETF6NAiUPOwsAoW5dJJ8RJx/g7H9K9VfTHWaXN/Wfr+1RcX2WAIXnN7ukeqMqRw1IcQP2DXZypztXwOtwz12EdU1SMFE= 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=Yq0gaJor; arc=fail smtp.client-ip=52.101.57.8 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="Yq0gaJor" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bAxlcOnXv1brbsT9E0jJ7hCLXu2qFBhOlppX0iFEiukUyiKejPOfM9f559plooKMlA1i/qdJnVOws+zqmgJOyVK+3eLYiIaubqycgFVlR4ttcFZXZOj0LgcAi9v8WNwBkr2F2hnbCm7tsHD7g2B75wWtLQEGnIqbq5148mWO+nLjQG4u1DPRUq2Yel7jMD8npLjoDgbVYCIeRYoDHUEppasAMKGUY5uNefZMZ5u7/uwQL1pGTt7cBn8ytibADnREUmMovVz05nWWzgLSbr3mmUST0Hpa1Kui3GT/y9QAj2VJs5hpp//5iWBfeIUvrASvcYRIY3/hVh7P/I9e0N8vgQ== 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=fji9+BmM9ucgnMAc1lpZpqvUPMwsd+Vw47/dPaMkzio=; b=V0qrBjniCnX0aBJN044DOTTiqw2jKNXDZQ3l/juNj2eqtMu+yVH/qi+EaHhcEbCUlGvnoz8SYtr7lkxxerxc6xuMKrl0TLkf+5KmPB7MBsZJEnDPXH6b9tblTiL1CBsBCSTAHLyxfvfxnRNNPqJBKAEmR0H9XOBB3goMQFWw7Q5DoK7r0JEIwJFn5q99zQH/XgxV2g9VIKdxn5TH7cE3Z3moc8acMsC6DllzoGTJ6QD8vVmS+64snIcT2J2tk/fUSTsQvp6Ave3E8T4aNoJSxRDJ+rD1HnnWUQ1B9x82yXr2v4E2FK3deeQ3rkh2yT+yr9VkzNervRfMwoMncuBwNA== 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=fji9+BmM9ucgnMAc1lpZpqvUPMwsd+Vw47/dPaMkzio=; b=Yq0gaJor/h08D8XWzjQMDqPo+TsA79DjaXjzseJjoCeQUqpb0B4oOlFyxn1550Ubz6tQIXMxrtCOiogaHfYo2oQNRa6xPGklYPN+A3wv4DJ7NTYa31c7FUo6/ad9FydLAYNFAviLyxDrF3Zs0XVLywqsaJnhk+cr+sts174kgkdr/ZslWGwEL0KM/YuztOkgaogYdDouTy58VYX/CGs1lQAqcbdt90wADMUvtZKj6T39yJTIKDpS43gylttt96RmRZ3W5Bs5+Set0jKaeA9Cdm9CI3TQw8YBCVunS9RbnQm5uwiSQjX585nrq3hcdjbqLAbnZdlnUWo5l5ovMc6zHQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:55:58 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:55:57 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:54:57 +0900 Subject: [PATCH v4 03/20] gpu: nova-core: vbios: avoid reading too far in read_more_at_offset Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-3-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY4PR01CA0061.jpnprd01.prod.outlook.com (2603:1096:405:370::16) To SN1PR12MB2368.namprd12.prod.outlook.com (2603:10b6:802:32::23) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: d0494369-0fef-4690-d965-08deb552265e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: K2JKL/5Gt/jxhDWZYggIav84AHgJCT+vP9wZVeGoQTuH/kPwbvK6f2p58zvxghfUR+6iEdHvYRuqsII5YZq51MsMI7fIJbrXT8GFV0XVk+gRfzwz+XuILkIj/dFln0E1hxyZxYdngyzC5avBQdjSkVAtDpAwX2CzBTIThHj9U7hEyY9pQ1P+tRY3hqvX4dIIQVuMi1fAkE/PS+YYncBspi4HAt956g4SN8IqLVlCBbpQvDUgn1dm6Kk99GBMPeRNaHfMDweU7nY53/RRouvE3042JEZvD6/KaNcJfKhvHnDOloZN9DHmZZl8QfNgNyam/dgPwIOBmSbieY2cVCvQfSn9AkI6v1tK75uGpZet4LXC2JB2xgseD0CU7IbHV8CNGZ/lkdhvE+x4dk5Fcsga+Cm7K9AOmwQ3uvIWxlvSCN7MeteGtMW9MEdxEsO/BuVKbIsLuGjScroxP0f6+xyQ/gAEWkyAe8XdGv1coJ1L4C0mFY2Mnw0dP8hFRPmjcm1JMIBM2WajcoFlaHPyWS7hvQPnCtoE2RvvycwiElgwKq8PShgV94DJgGpscCLMkZlSroQ9TJHWPF3gCxt8+9G05z5XyRO66BLilxoo7AcyjoK778Wu75wVbDsj8l1r5O3MTldI17OaAigBYJ+cgMY078+g4rM5DpxJLCLmScUcETRLjRh31kYN/gVXUW6VPHE5 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZXMxZUM3UWRablhoZTR0UkN0TUh6VldpTTV2ZVVUR05GUWc5bUJ1UXhHNHNu?= =?utf-8?B?Z1JpMVBkMFBRNjBRbGNRbytnWi91KzlnV1l0MDkweW1QMlhjMDJVWEc4Tldq?= =?utf-8?B?SXBYdUlITUlwUHIxV3U5Rk5zSkR2ekE4TkpQWkxEend6dWszMVI2QmFQVWlV?= =?utf-8?B?c2FXM0FQcmJ3MlltTFUvcmVqZ2dYZEVZa091U2pxaTkzQi9RREdIcnE2WUs3?= =?utf-8?B?Q0JVdDZxekN2K1Z0dkNmRFd5cFVBZDZMZ3FLWFNvSDUvWk40YzBudkRIejZy?= =?utf-8?B?ellMWWRFNWcycC9SMFdwaTNSL1ZURXJYcVdISnpscnZobHJ0Z1Z0RUJTeU9D?= =?utf-8?B?QXdaTGlRaU5xYnFibGc0QjRXQmMvSTltOUtPQjVPS0lnUHkxRmoyVzlYcld6?= =?utf-8?B?MlBRTEduY0VYSXFBNmVDSFdSY000OGliU3NCMzRERDZYU0YyZTFLcjlNVWlV?= =?utf-8?B?RC9Xb2ExdVU1QnlKTkJvYU1oZzQvQmsrZG9WdnJzdzZXSGdQazVVbWtVbG1s?= =?utf-8?B?TURjTmVIV1RFNk11R1A4ZkZBVUhPQ1JraFVWMlY4aTVCWW9JcG5RVGFwUXVI?= =?utf-8?B?VkpvTXNteDY3TGlRNHJHdXRETGJ1dFFBYXZ4T1liMjVSdVJLUitVOE0vQnJZ?= =?utf-8?B?NTc0UUhNM0N5OGVhZGNIamlBUXBkcytvTDg1ZVFxS0t2YVpoYXlRbFNFNFpz?= =?utf-8?B?ZmdnVTRCWVQxdjRyd0pvZXN1aEZ3N2NaempiaXFaWTlhbWZTcmw5VEN4SkdB?= =?utf-8?B?WjdaNHNHbHpGOGIxUWdXMyt4STFSMGZTQkM2UXg1bjlhbjZrTFB2MG41Ujkv?= =?utf-8?B?UW9MTGhmenNJMUZGZGFNWjNYb2JyWm9rZUZvTWI1UEpwc0VQdnR0cENRS2Vw?= =?utf-8?B?dW1pcnpwV1BiandUK3Y3VTlSQTRHcHRIMjNVMy9zaGs3Q0xZbFZrN2FXVDlI?= =?utf-8?B?ZXNXb1FiY0ZDLzlqUmI3RDkzWFB4empRbDdXemMwK1pqQmwyTkFLS1VQK29N?= =?utf-8?B?QmFhR2JOWHlWaHF0QWZVRnZJTHBuTHJvUDk0Y0FhMUhhL3RucnpUYmlsUkF0?= =?utf-8?B?cExpZUFpSkhmamNPbStYRzFNcFhLMXJFV2dNVWFqbkV6YjM4Sk0vQjNHeFk4?= =?utf-8?B?QUE2RnZmaW5yeWEvVGVLKzdvNDlSdmhYRzk5NGFjZHQrcXRaL2ZISEhQL0VS?= =?utf-8?B?dDB2UUZ0WXI1UXlJTStLeHRNSEV5Nk53ZzVmR1BhSzM5aUR1Q0N2R3dPOFpW?= =?utf-8?B?YzdXQTRXbDBLN1JLQTFRRXd5RURoZzYveERWSjBSZmRBQk1jc0U1TFpJenhQ?= =?utf-8?B?ZUJSOGVJMUJZRmFObThML3lveUdjZjVLWDQxUzdMMGFuVTRsNFJqM0FIOGVB?= =?utf-8?B?RTUxYWVrSnRJM25hSmh5N2NpTlVxQTB5WkVHZlBzaURTMUsyV2RYYmMzQzRD?= =?utf-8?B?WldPNE92eWo4RmRTUjJKbE5MWHlmU3I3UmQraitTV01HeHVobVRSNXc3dmdI?= =?utf-8?B?OTcvZUR6SGR1d2pEYis1QjUvVGUyQWpJUUlWRkxFZVYyVi93SGxMZ2dVQldm?= =?utf-8?B?SUpQVDJkQkpQV1hSMGgrdURTVkxHUVM5ZTdRbk1scFR0Yk1GblhKZVZRWUND?= =?utf-8?B?R3BxQWY2dzFpVGI5ZzEwNElWQXUyamVKVWR1QkRVeVRYMUZJSmIxQ2Y3N1Zv?= =?utf-8?B?RS9sZlNOL1gvZ1prTTZvSHp6ajZPQ2FRenhPblJSSldsdlVXYm1SZUFTUStN?= =?utf-8?B?Tlkya3RNUjROei9NeEdMeFRCQ2ZqYzVnVDVBaXV1cUFlTEFacUFuN0FENGJu?= =?utf-8?B?WDFIb3RzbFkwa0tFV2k5bjZVYmJpZGRtSGR2bmdIRzdvR2JMTEZ4QzVBZXFV?= =?utf-8?B?ZmpQL3BldnN0M2N5R05CZlhmMEFmMXZITE00Z3dtNjFlMWZOYTEwb05uS1BB?= =?utf-8?B?WGZqZ1lhb3lMUlI4L3ZQRmc5VTVoUVNYVmRsbVF2Z2hhTy8xQ0V4eUhxYkd0?= =?utf-8?B?cHhhWktJQk4zV3FXdmJ2QnV6OFRCdTVpZ0NEMjFuMVRPRldPdlJHdzVlQmFx?= =?utf-8?B?ZkVpSEpiWnRLRHVYRWtOS2NIZlNvQ1dURHd6QW0vRWZ6cDJRSmsxS2ZXSjg0?= =?utf-8?B?enhjT214M3dXckRJOE9xQ3VXVjJxQWF1cjkyV084QnhwMDVDbHVQYk5zNXYw?= =?utf-8?B?Zm1XTFlxQVVxN0lNWFZCdkxqMTJsLzgwUThEcElaVEcvTmpKM2w3OXptNFNi?= =?utf-8?B?R0NkWWhMNllUMVZlSFBNWkZsdDk5Y09rQnBuMEdEV3M5R3k0RXY2UzFYbm1U?= =?utf-8?B?VUZVN3hkSDlkZFVtcGNCNEM3ZDBpTEF1Q1QyUUFaV3FvOURPQ2lvekMzVW95?= =?utf-8?Q?5k2oxwmfG5ZFNI5w7pgK/+1+auAaGDrE4RQeZR8e0MDdB?= X-MS-Exchange-AntiSpam-MessageData-1: +vbRROikPgYnBg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d0494369-0fef-4690-d965-08deb552265e X-MS-Exchange-CrossTenant-AuthSource: SN1PR12MB2368.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:55:57.6746 (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: SDxPE8D5M1seV+iiwY7nZgWvcPuhfeTHRjygJwa6T2bdGNJ4oNQl9KvJ97nkEYePcHVw79EHXGgzgzuUcDA3Mw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 Fix bug where `read_more_at_offset` would unnecessarily read more data. This happens when the window to read has some part cached and some part not. It would read `len` bytes instead of just the uncached portion, which could read past `BIOS_MAX_SCAN_LEN`. Fixes: 6fda04e7f0cd ("gpu: nova-core: vbios: Add base support for VBIOS con= struction and iteration") Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- drivers/gpu/nova-core/vbios.rs | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 180928433766..79eb01dabc6f 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -185,8 +185,13 @@ fn new(dev: &'a device::Device, bar0: &'a Bar0) -> Res= ult { =20 /// Read bytes from the ROM at the current end of the data vector. fn read_more(&mut self, len: usize) -> Result { - let current_len =3D self.data.len(); - let start =3D ROM_OFFSET + current_len; + let start =3D self.data.len(); + let end =3D start + len; + + if end > BIOS_MAX_SCAN_LEN { + dev_err!(self.dev, "Error: exceeded BIOS scan limit.\n"); + return Err(EINVAL); + } =20 // Ensure length is a multiple of 4 for 32-bit reads if len % core::mem::size_of::() !=3D 0 { @@ -200,9 +205,9 @@ fn read_more(&mut self, len: usize) -> Result { =20 self.data.reserve(len, GFP_KERNEL)?; // Read ROM data bytes and push directly to `data`. - for addr in (start..start + len).step_by(core::mem::size_of::= ()) { + for addr in (start..end).step_by(core::mem::size_of::()) { // Read 32-bit word from the VBIOS ROM - let word =3D self.bar0.try_read32(addr)?; + let word =3D self.bar0.try_read32(ROM_OFFSET + addr)?; =20 // Convert the `u32` to a 4 byte array and push each byte. word.to_ne_bytes() @@ -215,17 +220,9 @@ fn read_more(&mut self, len: usize) -> Result { =20 /// Read bytes at a specific offset, filling any gap. fn read_more_at_offset(&mut self, offset: usize, len: usize) -> Result= { - if offset > BIOS_MAX_SCAN_LEN { - dev_err!(self.dev, "Error: exceeded BIOS scan limit.\n"); - return Err(EINVAL); - } + let end =3D offset.checked_add(len).ok_or(EINVAL)?; =20 - // If `offset` is beyond current data size, fill the gap first. - let current_len =3D self.data.len(); - let gap_bytes =3D offset.saturating_sub(current_len); - - // Now read the requested bytes at the offset. - self.read_more(gap_bytes + len) + self.read_more(end.saturating_sub(self.data.len())) } =20 /// Read a BIOS image at a specific offset and create a [`BiosImage`] = from it. --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010055.outbound.protection.outlook.com [52.101.56.55]) (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 713D9331A77; Tue, 19 May 2026 02:56:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.55 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159368; cv=fail; b=s80rOY5iQojbiCmtizTgYpCQ7t/cG9HDmaOJVY2FSs+H7qIcuf6cqbWKt1Vr1SmlUNQS9WoOepDGCIDbnjL3mXOC1OPwWBta8xO4vbnlnon5tPQtJe6qssW/B2fbfs6MkzewNizSS9QhrAI31nRARFjJxCJUs2KxBgvvnZSIGD0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159368; c=relaxed/simple; bh=doHpeYIDLLH4ESh1y9zxqdSH5oh5MmmEel98xEe17Fw=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ICO5WA5WrJ4dtnKPZBS5mPdgTa0oBAISnKNYs+hpzDJXPtHszDVZG/TEorX/mcg8rm/1CV730SN8tQ5Rb/PEOYKZ6mxSELp/31X89Ita1hE50xVyQluQn/Jm4ImbNOOk+bMZGhdZMg+cauCRjdmyRLW0fgK7acw+edajZ87+i0Q= 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=NFUP6PFk; arc=fail smtp.client-ip=52.101.56.55 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="NFUP6PFk" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MmcOa4w9K1c+IECj2E7QeAopp9Uf4U3EMpQ8XtWaRyVp/An2l8D+h0g9wIKhXUo1Ru5XoUv6HdWcmhn4RpJXBaGwBN8Iivkk6FcWa47YypzU6zmRNMlDhV92vC6dusePJcHWAfrNylBnWtlsHkX2B/SiGoIXVK1jJVYbPbpSGTc1+3vqTYMMyrzsrvWjOXazfvy3dtLe7cjuquvJp/s/fpmntDfaRjTRROvPk0YRVhtf2tiOjZmY/pHCDgrsTpXVv3gxZhYXYr2ZPy+cbd999a395H0rgo8uctorSV+Kmp8hW6ZoV+LWCjRS+i6ln24w4hq9S5Sww5zvSqbakS8xig== 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=uMsPIQCu/JHYxpRM1YyfRV5WveX/lrksBJJo2QpfJv4=; b=BRWQtdh0gpT5xt2ITxdiDBnbcWbRcBY+P40MJpsEFtdr4FeiqnT6ZU0KCluQZoIuHfhKQPmv6s6s1d/sk87quGPysq13POQA8sI2F3Fy7o7QIhugkYvu7bd7jbf61VCJ+wN12yQFq+6FSMS8cJqurkYBIWkwcvf0BuAT1qzXXb4mDHEQtDO2kiJBxP3Xfqz4EEW14jLaIGce+KIVwrwDlMcrKXPnKmNJ8QNGTwh1JN2Yvy4DQjwq9ehXJEmJFNTY1CcnmMYedkHSnXHQXyOcSSDBX7OMyqxNmOMo+MqDoUSlSjD6ikA2jz4YD866o+cFyYHOrhZEwvhD3nSh2aTLYw== 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=uMsPIQCu/JHYxpRM1YyfRV5WveX/lrksBJJo2QpfJv4=; b=NFUP6PFkLdsLHpurq6fnZKZZtYEYnQPu8Zp6tscFGAdqC0ETyjmzeCjQH/yuI8t3+E5fotJsdEMjcg4W9yMIpqFAwiD2VREPfGk9dImkQyGQHNvDTDB9v42UsJTZOolo2rv18S4hc1fRZVWlX9gJYK++59iqXz5MGnLSRSb7yBAB3CuemTyMQSNa6elKunqCL4e3XIDPyDnAKbr7pdT/xxsB3grCJqINyJkRM/IZLvRcJqrWkJebuy6uN002ErYSx74VZK4HIJcFzMq8T/JKSYnLrcLM7uSjf0Re6eVxB/qFlrytDGTcd0Yd64aHIOZl086670tAPWH9QVQTbdEkKg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:56:02 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:56:02 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:54:58 +0900 Subject: [PATCH v4 04/20] gpu: nova-core: vbios: read BitToken using FromBytes Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-4-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY4P301CA0098.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:37a::18) To SN1PR12MB2368.namprd12.prod.outlook.com (2603:10b6:802:32::23) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: 68eb54bd-095c-4df5-cb9b-08deb5522990 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: bXKSJIvcCnGHMm31/2b7Z9ni/VSYIbJ8QNsiHt40zPTLjnoRW/c1v3iATV5yGN8w/3ETafLPXBBLOuA6SftNLFkH7KGJ2cPBGzWE6cekyW+wJQKrpBPDaz1iHvkCsiuRqNGodjb+cUdJAJiRLY8Kg1UTZDhLRU8XpgnUIg8aJFFJInwSwm38+n+3IEXi9pCETAckB4bx+uewISmT1eE8X2u0Rix07bRKZixHqYaduHJ47aYJJ5tT2rRn/zgpOxh3gDmPc7le3Mrhpd+e8L5MWiaOxO1BqUP2qYWEOwdJZqY6QmSc3cnYkfmtXigAUg8bpGyqHx7Ng7F/KmSvfcG6VQLJ7D21VNIfcyIN41G47vevf2z7b7GRtjvn1L0EF1n1IlA5BbNktlJm4u5NW0AHf5Dn03l8YmItzvhodFcn7BpnBOPCCm6IR+l03s0NTl0V9DDOLyWOW6cqEcfKRisYU6CnM1Wp1b2Q6hcWayj4L8ETf0AZiwQpPnLwrVRVT31kBjJg2G8vNTeY+5QcjbjEkowd15UqrBBBe13dr8BXv4HaGWf6L3RRuYkMANcdcCE8p7PjBkPq/MP2mhkjSbn0y8s0Z431RpFrR3pO+FuekpTh8izoPJGEWYujP5viRP3eoQvzCInvIODO/fRMxsWM7vTkwfKZsNFPameObyDB5F7yg7VYUNO1ebhV5y4lxfxy X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Umk3UFM1WmpRZDNXYm9LdFdrYk1Vc2xhWTR3U3hnZzdlRW4wNlNnRFg4Yis3?= =?utf-8?B?Mkl5UVBiZTBNUkUyQ1Yrb1ZpNWpUZzAzOVVXcnVXRm4ydWUzT3MyUFNseWJ5?= =?utf-8?B?Y0dzZzVFT2VkcWI0aUtHa1dyU1pTQ3prVmxnNUZqb1FVTDhNSW5JN0t6dFhQ?= =?utf-8?B?M1IybTM1YS9qY291VysyZ2pvdzNPSWpZZGVPZk1ZK3lsR1ExVmRLVm50a0I4?= =?utf-8?B?MGdyUUF6djRUeDU4YXRmOUFpSDd2WEZMNURPbnA1NnB5dTR6ZnJsODVtbFBh?= =?utf-8?B?bDUyakpDeFRLU2h0VFJJNnF5NFhobDI5SDBEd1ZlbExEOXR0SUZTeXNaNTdz?= =?utf-8?B?c0hYVTIwUTRsSGxFcVgxTFdmR2dJaW9qaFpEekQ5SG1FK2U3b2ZZaFFmd2lj?= =?utf-8?B?dFRJRGRjVmY3aUxWUlRpOGMyMDcwQlpzQnZvaTdFenhMcWo3U1F6NlF2OURR?= =?utf-8?B?Ym5wZHYyZ0x1MllkRnFsRjY2OVlyMXovdU1EYXJiSm1tY2luNFAraUI1T21X?= =?utf-8?B?NFJNSnNSb0VXaFFld1NLUmRFdEY4MHBTeExHRmxGRld1V2RiYU44WUVObEhp?= =?utf-8?B?U25QeDBjcS9sTFV6blRMbmVTdGJvcXEzdCtsNGplTDExUGd4dzRuckZBdkRw?= =?utf-8?B?UjBtMXVnZUw0TzJML1k4UStlN28rc2hhdUN5K0xTTWJ6Mk1JV09UcWdPb2xj?= =?utf-8?B?N2w1b05MMDE0N1BndTR1aVRnRDlmLy8zQzJsZFZIY290UGRqY3NaWmNvdGVN?= =?utf-8?B?ZmZwdndEZENUL3FpZEk5ZHJQUFRucXRsSHVoWW5QNEoyM0tsZWh4azlxZjhq?= =?utf-8?B?RnpkUmZMTUhnYnJaQVd0UmJ5VitrT0xLU3QzeGVqVGwyMmZ2bVd6STNtNVZr?= =?utf-8?B?UE5jTUNQVGN5M2d6M1NUVHJ6L1pqK3h4dWlObmViQVczZlpQSU1TZWgwQmdv?= =?utf-8?B?ZWRXSTQwMUFsOHRqUFlGOTJ6S0ZseWpxKytnWnliZHlleGNSN28wRmdHUDdj?= =?utf-8?B?V2hGSmNQRWFZQThBdXdvQnVoQjhBY0xUS055SlM1Wlp4UFk0TkxjVCtleE5n?= =?utf-8?B?NXRBYzNrUUxHc0QxMDBVd1FDUDVJY0d0SStrZnZjb0JtOGkvZ3VjT1RZVlE1?= =?utf-8?B?K1dwTlMwYWxlQ1FKSG94Qk1hOUhCcnlmREZUU2JBOTJLS080czhlWEhCR3Fa?= =?utf-8?B?V1dzSmlTYU1rZ09CUjdCYVJscHZ4TVN4SHZPb3JOdEtqOSs1ZUxFUkVibEk3?= =?utf-8?B?N3YzMDc5NGtPRUFCNGVKMUV4U005NlIrSGNCdXpDK3JNZkxPTzdid2dlQkdW?= =?utf-8?B?WVpPbHhpMXJvZTJkMjJsL1RiN1hETWlRU00vNFlPQWoxWkZ4c1UxSVhkR29H?= =?utf-8?B?NzdFaWNQckxSdXVWaHErdDlCVEZ5YTU5MWtrQXNBSWhzbXk2OHorRFRsTW9U?= =?utf-8?B?ZUlnUGY5ajBlK3RWRk1vRUJRNDBNQVQ3cnlEV1hqbUw5NUEzK3VOV3dQL3dQ?= =?utf-8?B?WXQ4c2RhRW9lUGdGK2N5d2JtV3pOYlRyZkZWekVTazNvcTVxSnp5R05Uei8x?= =?utf-8?B?NXN3bG9qMlY0bmNUbVpIVU9hQUFsZmkwQmRXOHRPYlBBYjZVR0ZNa0VBODFU?= =?utf-8?B?OXZuQVJPazY0d3pXN1JzTTdPcng2amVBVUlNT3dDcVVyZGdkanV4NzFxVFRD?= =?utf-8?B?L0MyVlZaK2E2OTQrYUZsTS9CQ01xN1o5UTV6eWRldWNYT2J1NEszcGlCSXhi?= =?utf-8?B?S1cvcFZvemt4UWVtZ01hbEszOW9xQ05ia3V6aTBUNlJHcVhlQTJmZXhRa0l6?= =?utf-8?B?UFcvTmpTeVBmSWU2WmZyWElrT0t0eVYvNmtRa1ljMmxFRitYVlh1OWM2d3ZL?= =?utf-8?B?ZFhFNkd4alA1N1hkYldWZ3dvR0ZQRkVmc1dnM1BhV0dWUGxqa2M1bUxNWXA0?= =?utf-8?B?NTJmL3VNY0VvQ3V4elBvdUQ5RCtkTWhXMFdPYXl5cWhlUDlPb1NaWWF1eXVK?= =?utf-8?B?NjZTL0pURlQyNU45TFIvY2R0NXV3QUFOM0pBdjBJdHdKR1ZLTHdHWmtFdUli?= =?utf-8?B?R2poM1VXY0JRZWpZVWEvWkd2WHFZWGJjK09ISFMvelRUcVYwaFp5SGdIUVYv?= =?utf-8?B?NGRtSHlEMm1aZzIrTFhCd3JwM3NqbzBjMG05SlpySTdoQjlpZmh2Mm1kaUEv?= =?utf-8?B?MkFjU3piVDJiTjNNUk4wRE43UHZDNmxXSlUzVFlTRE9zRXJZOVpVQ2FBdWEw?= =?utf-8?B?UDZMNkZIMzNsWGNiQ09BSU5KNjd2ZnRFTU9SUFlIOTRHeVhUaEpITWpxY3Y1?= =?utf-8?B?WXZ4bkRpaEFjKzBrSUpaUk5JME5PMUNjVkd3MXBBUDhoZHdNdUw1TDFCanZB?= =?utf-8?Q?Bm8vDqjuSa4+N5Cj5g4lXr9gWHBgXB8+JSWvHYe889X5Q?= X-MS-Exchange-AntiSpam-MessageData-1: Uy6FXrW13EIzRA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 68eb54bd-095c-4df5-cb9b-08deb5522990 X-MS-Exchange-CrossTenant-AuthSource: SN1PR12MB2368.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:56:02.7387 (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: P7s8dlHwfnWlDhJIRBNbaGRVUo7uhm92jbVk2bPA+5yXIaBBuaiebv+Dtic0T2Mh8010mDwzgkSVmhklQRBjcQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 If `header.token_size` is smaller than `BitToken`, then we currently can read past the end of `image.base.data`. Use checked arithmetic for computing offsets and simplify reading it in using `FromBytes`. Fixes: dc70c6ae2441 ("gpu: nova-core: vbios: Add support to look up PMU tab= le in FWSEC") Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- drivers/gpu/nova-core/vbios.rs | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 79eb01dabc6f..2ff67273fdff 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -486,7 +486,7 @@ fn new(data: &[u8]) -> Result { =20 /// BIT Token Entry: Records in the BIT table followed by the BIT header. #[derive(Debug, Clone, Copy)] -#[expect(dead_code)] +#[repr(C)] struct BitToken { /// 00h: Token identifier id: u8, @@ -498,6 +498,9 @@ struct BitToken { data_offset: u16, } =20 +// SAFETY: all bit patterns are valid for `BitToken`. +unsafe impl FromBytes for BitToken {} + // Define the token ID for the Falcon data const BIT_TOKEN_ID_FALCON_DATA: u8 =3D 0x70; =20 @@ -505,32 +508,28 @@ impl BitToken { /// Find a BIT token entry by BIT ID in a PciAtBiosImage fn from_id(image: &PciAtBiosImage, token_id: u8) -> Result { let header =3D &image.bit_header; + let entry_size =3D usize::from(header.token_size); =20 // Offset to the first token entry let tokens_start =3D image.bit_offset + usize::from(header.header_= size); =20 for i in 0..usize::from(header.token_entries) { - let entry_offset =3D tokens_start + (i * usize::from(header.to= ken_size)); + let entry_offset =3D i + .checked_mul(entry_size) + .and_then(|offset| tokens_start.checked_add(offset)) + .ok_or(EINVAL)?; + let entry =3D image + .base + .data + .get(entry_offset..) + .and_then(|data| data.get(..entry_size)) + .ok_or(EINVAL)?; =20 - // Make sure we don't go out of bounds - if entry_offset + usize::from(header.token_size) > image.base.= data.len() { - return Err(EINVAL); - } + let (token, _) =3D BitToken::from_bytes_copy_prefix(entry).ok_= or(EINVAL)?; =20 // Check if this token has the requested ID - if image.base.data[entry_offset] =3D=3D token_id { - return Ok(BitToken { - id: image.base.data[entry_offset], - data_version: image.base.data[entry_offset + 1], - data_size: u16::from_le_bytes([ - image.base.data[entry_offset + 2], - image.base.data[entry_offset + 3], - ]), - data_offset: u16::from_le_bytes([ - image.base.data[entry_offset + 4], - image.base.data[entry_offset + 5], - ]), - }); + if token.id =3D=3D token_id { + return Ok(token); } } =20 --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011002.outbound.protection.outlook.com [52.101.62.2]) (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 4AE19331A41; Tue, 19 May 2026 02:56:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159373; cv=fail; b=TTbvwgPySMRJyHbcQhcC1DQ0tO+qHJ3N7ziXXDamznSagvhKEoHCNmWxQVqCbSdbFs2QxaWh7yH1AUhIcV3DT2N3pppe3LPanGKCPNJfrhehbvHnsLk+uoEhKMX8XoZEH2zruofeN53ILvW/beL5xhOrSSS3LAz9x0qEifjMIM4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159373; c=relaxed/simple; bh=04J3C8grH7e77BLe+F+Xd/ezY8d6XvTQHbIawNyUllg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=DALMxPzIoRv+x6Bppd12xEZCVNxhJGS8kBA8edS/1CliE3LDyW8ZeBoag86yjLzoHT/QyJmHrtCqj2IhCq8Pa0ssDNZNOYQvMlWtOGn2IHYUx2GnRzukUJe7y0pbmvxA7ZeK0t+3a+njecTDlV3FA0h78jVjm+1wIAs/f8HFtW0= 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=lB5Ctu8K; arc=fail smtp.client-ip=52.101.62.2 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="lB5Ctu8K" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Y7s/gUr9R/OBMfTeFFWdPgMNUixyHwZxIsIh4a30xZxMCioljvQMOz9W6a0WrjtPRuB1Uj2KlCofnchwkxkYlWaL+UWzYWZGscyiXCG8trCKK/9+AjhLX8bvUJwyWqGYaubmGyxcOm3TZaBmlzlGA06cJk5m158DNRC7S8pCZZDHVb88mfZbwHGKYE4/l1BBcMoZ7jjFaE8qskptEtkR76zVRH0OWmYMJldM+uTs5ilhKxCeyWBw6e00LKRPpxRP2eR8VVt4jIDZyMLJB29iLUdMBV6G0fPK4AGTVsEE7VU9l33U4fRIVs/fZPadbXIg7ow1mk71Wvc/Bk1htPGmtQ== 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=SaTfX7o0ekrM0eOLsrk32VGCNOJnbiuHIh7WIKUdlhc=; b=Jtxda4Qh6TsgZkGi3lQT4wbpO3D3wB4MpwzoP02dS0YADwsQoOVEDjLTWzBZ4Jx4iBiUQlv90vOAlCr6u0Q45OC0SYN/SDoyVcIcEipihhVq+dLCBPFa5uGByyCxV0wRsxurhmKVnAAOFV/XDkDhgXQwCvSsLM2XdPofRLqGFNEBD79gQGqHo6A4Pqyg73Jgb7NZK/8/0KcIzchWkidB0T8ALd7G/vm0n0MJQgx48zx99Ffg1wB22ZZKqZNzVlrzwakQo4TAT2Rvg6lhgaHL/+cQNgtd4qsRMqICnZgB/hZv/yRvCZkN5Y9F/2oIorSJ12ZABUsE1gtIDwdd7ExaBw== 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=SaTfX7o0ekrM0eOLsrk32VGCNOJnbiuHIh7WIKUdlhc=; b=lB5Ctu8KkGNIzrxVclg+Mb8v1ZkHQA+DEEHK7bpemPXftuEhGBHzqolIDcJ3nVBY0dr7dXsWYn2l3aPvjXNPXdJrvGC8mRiQWh/dnp/aOorF+ijMUeooMO5e5X1jSn7SLdejXJWjnM9TYWs0G+MGFoPnLcS0JGMRWRZWVnDcDCzLc1ke96XkBE8iiYAcHpm/BIn3oWhTguci5lmD5wPjHwH6MQtAblUe0mX/pvtxFi+PDDjABFBmXCUofEz041vpSXOGfMTzWjrCcMkBhplqTa13Yq6EIHZ1zsCVeU7nhBgfnO6IqHxnfxPIwDUJbFJpqLHQMl9AhUeUvsX6F+NfBQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:56:07 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:56:07 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:54:59 +0900 Subject: [PATCH v4 05/20] gpu: nova-core: vbios: use checked ops and accesses in `FwSecBiosImage::ucode` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-5-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney , Joel Fernandes X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY4P301CA0089.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:37a::10) To SN1PR12MB2368.namprd12.prod.outlook.com (2603:10b6:802:32::23) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: 24792560-d404-49ab-d3f5-08deb5522c75 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: /hKtZubuwYjVlM0rTsnS4T0r83g7eSC6NY45aRhr9QN1IVJIsYV94VJ4KsoZLVfmE/jk9dDtpHlpSPPeYuVINdsBgBVRRJkplcc3m4V4hD4z7R+Ye+Nn7HCG8KWJsNZyMzk9O+05XP7mnngYKBSpQHQftuGKM95tAXa5+icGPmeZdZF0S75+xRF7Fm/hYOZ4JW2FlSsXATRfwEkqnjbQogYOpdi9fF+xIJ+zqZeimvNxG6ixuB6xZfqvbe8QauP5DEYfGL4KoX67lauIgUnyxLOAzqjlMSHRw2raaKZZToKdncXv4c7YQg4NGXUxl53JioMZi5dYSlfsK/dpHtobOZPD7IbZbtYK+ZYWu8JPSTHeZ2o3/TEatP6z4Jw30HZxpoyjzWvpq3uZvvQvG8HzkIPD/yh5p3juheFXHLTsHgaof4DXbJOKhjU0Q/EHBzjZtGfkNBGtBlYwjbYTUCH2N0Idb6FDAECz2T4wXwbk0l2CT/pZ8lL1W7/dHGRMAFE45FCfe0iZulg4YC71C/3e0Bqi+vQG7fWjCk4Fb1bFObCPsEim1zf2271euoClwktXa1a7vGCcwr5CyUNsdlGCu5PeQOWI9rltQ2LiUmFtftQODhywTWt7Sc8O1QjMocXABQAf1NVrO0c5EbXfSs062hvI2SeCn1XPLessWCwUveelP1lVXxt+1brF2FLP7SS7 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZHNPcjZsdU5PQ1pJMlh5QTFVZlNBS0lIZXJyVytaVmpWVjI0S0I0bXVtZTNJ?= =?utf-8?B?dTI2Qk84VEE3dDlwYURLWU9adWJ1SGNidS9zU1c3QndwcFdUaGpLdjBWZ1FF?= =?utf-8?B?SFJqb3J5OFlIS0diY095VGZ2ZnlvciszbXJCbmVrQ1NBNzVKR01uYi80YmRX?= =?utf-8?B?L29pSE5acEZ0Ukk5Y0xpcHVyOUhVYWowTTF1NHpialkvWVluZTNsdHA1M3BZ?= =?utf-8?B?d1hDUElwY0RjMHgwSVFZUlQ5bDBPVGQ1QU1tMkgrLzRJSFdERXRPSzBvWCtj?= =?utf-8?B?Zkp4RTV5NWJUdzlCUFVnME5rb29hOW9Cdi9rekh1d2ZFZVdHZW1XYzdLN0JK?= =?utf-8?B?dTlrd291NVd3QTlxUzFUN21GSktpZXFFQXFQcnBFUFZPdGZqYy9MWFcwVGpU?= =?utf-8?B?enpYY2YyZGhWVXVlNEszWmt3ai9yOWhwN3cySG1pM0hCQ0EyV252WUxYVXkv?= =?utf-8?B?WTVsMzVpN2c4V2tWWUtzZVZ1aHpLbHhKZ2YzSXZoSWx0OWJrRzZvN1IxSGc0?= =?utf-8?B?R2JpSElDQ3o4WG9PQUd6bWd2YTB3ZWo5RTFDUk9LZjdUSTFXSTJDdmhWMFh4?= =?utf-8?B?NXN1MHFGbHlYZVY5b3RpYy9uMW1SUTZNcEZicDh6MjA3SXZKR3BTNmR3RDZw?= =?utf-8?B?S3JmRDk4TEM5TDZ4SzVNQ0NVYTNIR2RxeDJpdEx4QVp6emh5ZFFQb2lCVFpP?= =?utf-8?B?ODdhTlVxOHJjZXI5VXZrZFFYb1RCNlhKSzdySFd0WE5uQUt0b1FOM0I4UXZp?= =?utf-8?B?RkN5aU53aTJoYmNFSjF2MUEyK1FGU0Y0RzQ4L2M1dW5pSjkxTjBoVVI5enh4?= =?utf-8?B?aVRreE5jNGNuaHNISXh4ZnZDam9nQi9rQUNHMEpEYjRwdURSYldvTUFwcVZs?= =?utf-8?B?aVhSNzRFYlh6Mm82WDA3MUIwSVNiYkUyc08yMVZNU2NDbTVRZXlQMUwwZCtC?= =?utf-8?B?dkdpbGt2M3drTkFUR3hNeHNnSHBnek54R0pITTdiKzdpT3FGbmkwUDN3UGVt?= =?utf-8?B?clpJaC9ONWhmL2N3aGN3c3hiWGMyUDhTTVV3YkNwK0FWbVoya3BHWnlYYzhB?= =?utf-8?B?UGoyeXg5eEF4c1NBZHpIdzZBRlY2K2M3MVg3Nzg2RnFoTi9xTE51cG1lVHFI?= =?utf-8?B?R1JKN0ZQcDl5R1R3WHRVRVI1cmhVdnl4SUl5Nm01QkszZURmVVlXWTFoL2Mz?= =?utf-8?B?VU1lMjFVbHRnQzEvVmdIYk81MW5uT0dreVVIcmdUV3AzZmNQOHhSMXk4b0JH?= =?utf-8?B?M25uZWdJUU1VeTVINWVrWkxCTzdaRFdTRXdFUmNySlVoMlg0STY1S1hkL2I3?= =?utf-8?B?SVAyUTNuZE91N2NNVkxGbEZMKzN3bURibDNBVHpzQVBYVG5wMHFZV2pDdGl4?= =?utf-8?B?T2FDOG95VlcvaW1IVEl5cHpKM2hrVWNYcDJ6eE1jdTVHOEdKMk1HMDltOG1V?= =?utf-8?B?cGNySDlhMkxxdUZUNVlyK01XbmwwTStXNVZRN3ZlRlBwVmhRTCtaRFp0bFB2?= =?utf-8?B?WTNyditMQWg0Y3dqQ3BoZE51dnIwMHRROS9TdWc1REI2T2lLTzZWT0E3bTU4?= =?utf-8?B?RjlmcUJWZXhlVXUyazRaUmlvNUZJTzdmTjQxNE5YSVRYWU85c0pTR1lZMjNz?= =?utf-8?B?NnhMZXlIOStlZnZOL1NoZU5zdTY0SHRrL2dRbzhkc3VFUyt1WG9rM2pPT3Yx?= =?utf-8?B?NlBZb0diUWQ5QUpESnMrMUhrandLNU9JVzJuSTRiWElEN1pPN2xCWmhMdy9O?= =?utf-8?B?bi8zUHY1Wjc3cWQvOXpKU05TV3NpV3M0RHRJR2xBR2xGMFE1UkhSTHlUUCtw?= =?utf-8?B?RS82RzhQN3NKYkpVOFBRa1VqVGcrVW1rUHlHVW9IeXlzNVg4eHRNLzVRSVk1?= =?utf-8?B?RGtKTXJFc3lhbjlTZ2J5MyttK0lLK2JFYzc3SHlPbldURkpTbFVtMFVEbjls?= =?utf-8?B?Z1dmSDR6ejY2ckhnd1AxL1BQNGsvTFRWaUxzQ2dTL0FyQ0tVUFF6aHhFazdr?= =?utf-8?B?VlBxR1lWS0x1bThUd1NJOVNlSHQycHpvSk9lWlJteVRVM011SW9lQjljeFN0?= =?utf-8?B?NldQZW9ISTRkYkRZU3puUFFTclVHbUJjZTkyTnkvZVZURXBNQ2VmOGdYMTBI?= =?utf-8?B?OFYwcVo4eUdPeU5UVnNQSGNrWTdGVHdHRWRQWTNrZFdJaTFZSEZnYjNZWFp6?= =?utf-8?B?ZkJIV0ZSRUxOckhiVmt1Snd4a25GZDloOFBSUlgvbko5RW05bHJKYjlWUEo0?= =?utf-8?B?elNLVUF1dnYrVUR3SkFkV1U5ZHQzMENuWDBGZm5uM0lrUFJDa1NoZTNvQ2lX?= =?utf-8?B?Ky8yMlNPemRSeGlsakFCU0NhZmxaaHFiWStKZEpmQkNMajgzc1ZWd1NRclBs?= =?utf-8?Q?vIrQA4zPJh/Ir+acxW5NMFS+vU+U9o9/aAqFlJVy+255p?= X-MS-Exchange-AntiSpam-MessageData-1: GMalc6XemcQAxQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 24792560-d404-49ab-d3f5-08deb5522c75 X-MS-Exchange-CrossTenant-AuthSource: SN1PR12MB2368.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:56:07.5954 (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: vtwNV1CqSDAXXX10vLtbuU3stlYmJRi1j+BY3uDc4+yDWQzixDyC9xHO3wYlYixqvwpASBcaknwwq8X0A49HgQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 Use checked arithmetic and access for extracting the microcode since the offsets are firmware derived. Fixes: 47c4846e4319 ("gpu: nova-core: vbios: Add support for FWSEC ucode ex= traction") Reviewed-by: Joel Fernandes Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- drivers/gpu/nova-core/vbios.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 2ff67273fdff..c62d918a3041 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -1110,16 +1110,18 @@ pub(crate) fn header(&self) -> Result { =20 /// Get the ucode data as a byte slice pub(crate) fn ucode(&self, desc: &FalconUCodeDesc) -> Result<&[u8]> { - let falcon_ucode_offset =3D self.falcon_ucode_offset; + let size =3D usize::from_safe_cast( + desc.imem_load_size() + .checked_add(desc.dmem_load_size()) + .ok_or(ERANGE)?, + ); =20 // The ucode data follows the descriptor. - let ucode_data_offset =3D falcon_ucode_offset + desc.size(); - let size =3D usize::from_safe_cast(desc.imem_load_size() + desc.dm= em_load_size()); - - // Get the data slice, checking bounds in a single operation. self.base .data - .get(ucode_data_offset..ucode_data_offset + size) + .get(self.falcon_ucode_offset..) + .and_then(|data| data.get(desc.size()..)) + .and_then(|data| data.get(..size)) .ok_or(ERANGE) .inspect_err(|_| { dev_err!( --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011070.outbound.protection.outlook.com [52.101.62.70]) (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 4CFC3319847; Tue, 19 May 2026 02:56:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159378; cv=fail; b=Cvwh77/wKnRh2p4IqIsTAFm0nf5oTqIK9dKJ+q35WvGMd4NLOt1N3w3WJtVy842cO9X3MLSpKZxbAbd12++HgsjLN0WCdAtNDAB7aM7jfR8zb1wXl6GJG/xhmQTPvs88eEoF+LbDSyZZ9rAe34FBwpu3cyPNwln0mb7Z3A9ReWc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159378; c=relaxed/simple; bh=sCvV2XyLM1gtqHKgZNIcHU39VlQ3XtJmhfPuTl40E9k=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=bYuhBOQl1P7fysVFyOpY2sptIPVcKyowypQyxnVmfTSqhfaWMud4sfiIZYLwByE3W7dyokjGERyuW98OiY0+Ie0OOIFBiNe2gCeAo6ulJijS1e1L3DFYrRE2iKRXjKAt1VQjtXdund5OiV78JbH9pVhStRVsG8ofYR9ZNONF8So= 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=bnWiQf93; arc=fail smtp.client-ip=52.101.62.70 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="bnWiQf93" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=g8FODGZKbUczoN8gCAb7bZGZ67x3HQh9wrNBV7ZgKnkNN/2lawu0Gf8rQBxUO6t86sp40I9Led8B54q5p8mmOVFmQnRnzpmanQ8/55csEmdk5iGnq71A7dppOsIRGJFMnwZaDTYiMIi7i4HRfTNZfRy5uuKLA4vuyiwgBmQng7bpFitHsdB0oWSVmIybMaraowNgOycngcx/COpDyPsM/espXzCfAkulgmyMOXPcqr/9sbLdEGGUUsPtAkgGPvoFnOLNoaVbtn1S09gVANjRPpBrzxEHQB4pr2I029NQA/ip+SqiH69BmttJDpFREhMtaZWy9CgCy2dW0L+xODXzUQ== 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=DGuKEf5dzgCf88Zl3fZKUXKAcIWrjIVQrRC5W9csxWY=; b=Xlk1IPSTP+BEKW7g74+0/nPCXaBwFaAm+Jwk7zqZc7acrcBP44sJVeXmmJ82RWlspfK5+wESGLbSGgx9rPkcEJMyoMvUqoKk12xTDO9JE9V/n1d/KB+W2YUhrofuIYTzsGvbdopxqzDyH0PipE+k1xRsYvnnqp5TWBG7Iuw4UNamcmIZy9A0l2jyYYCQFWmrNt1WR4/0OJ9rxhX3y6AVLcF1SaHW0w7y5czf5UTJUgvcU1kARuQsHnO13rxCnGGpbu+6vG7p9uZgtATDVMsnLvdCW4fD2UnNCLZexZmLKY0Lq5g5TW3a4IE/x5ccqJpvJIfpgwzIMgQfYNB/b6C73w== 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=DGuKEf5dzgCf88Zl3fZKUXKAcIWrjIVQrRC5W9csxWY=; b=bnWiQf93L3dk5L3aammQVAMhBulQG0+TDW08b3fAI4i4O0sfs/igHf5vd+2IXMMEkB43JeJkJhtXM7PaOV6goVX6pIQkg2RgniLKM4FY1axQRw6fG6yTi/G4hq/1Yq/4pAzLdEmR3IZrCnvM7FK0l/6nebtnXQNxwHMB/9lpkzwCWxkggrvB+fpJBIlgb70Uk9FkOpUrXe/awHCTbydGjdTBrrQWpWAyMD0iZPt4dDzY8Cs/C45AwnKiVGiTYCgV1aJjSAJJ6ihzYsqbY7A5FR5OjEcVOhfb4S1PU5WF7XlNy1TvRSTGka2thVY8bQmQJtu/m9CsULnfXn0POpKgXA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:56:12 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:56:12 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:55:00 +0900 Subject: [PATCH v4 06/20] gpu: nova-core: vbios: use checked access in `FwSecBiosImage::header` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-6-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney , Joel Fernandes X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCP286CA0245.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:456::13) To SN1PR12MB2368.namprd12.prod.outlook.com (2603:10b6:802:32::23) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: f7d4e849-f608-4db5-0c58-08deb5522f4c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: xJb8PXuPDMSdSit5WZn5tMOfoEYG/IT85Tu40/+IxoT4nKd5FABR3DbBXClNU+Vb4VlOaRk3egsweEUG5HRWSP08iwi7JtPlSqYW9kM09v9qdTI6dmLEC62N5N9dgbGFNP732D7tLCH//jwt6DK4n0YZYXdOa5L7gWYW+5dBy03q2OPlwezbKhiju8MxlyRP0THYLzItowii9VOrmcCgVeCSk3EP36TNIAHoK33/kvEAsqGfSUPIh8Et85HCVo9HKvc0OScQnrEPgSnw7DBvnVu1lJnVrVqHxb2faHhNcBWlGbTQ4dtBNMFfhMQIbte6uXeEBW17pyUQXjEd9pbxUx6/FV74vZ87tufiumdFSS1QDmZcK/GjJ+rKGxOAhCTvCKTJ6zvl0uPQ/GpBvDZOH2yQVUbMlG0FciJglkL4CAtewwTGW0jgcuaCo936o48NlGcAZvHaX2K0auqe+HbodFVJ3R1OH/KE/8bD6THVM7baQ3WsJzezcatR0a7EDDbG0l/g3sQMUIc1ZzgR6XrsXUxysAEAvbwNqXbmicucB8pQJQ1w96XPi9XPbR3xLVZYJeHGu/W1sLU8k4eTiPfYIj8mCaReG7ee6NC+ORCAzLV6J27WtjskNzEYVf0+mMgKGL6HIlqPp3tF17eRo6SrxUvvYyMjJipolSlvchwg14eVr7Vkzaxt1FioQzZvbxJr X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dHRISTkwMW53VWNjUUxpbmFJbTA2eGJaNmx5cWQvYm5PbDVQVXAyNEZobW5y?= =?utf-8?B?NjBsaUZEdDFSbFIyWFNPbTVQTnFZanBWQytCaG9lVUNZa2d6TXUyNkErc2ND?= =?utf-8?B?dDVNTnhvbUV5UWZvUmthVmFkM21OeEJBT0RjK2Y5VGU2VjRVdnVEdVNsQ3BP?= =?utf-8?B?SXNET1NDVjY4Vk82dkNQY0JLaDc5V1VWeXA4V0wveEMvY1JNSW5WRzFLcFZF?= =?utf-8?B?TVpuZzBZVUlleVRMbCtpRlAyMGVTY05aemk1azJXNkxWQmd5LzdhYnhQZjVz?= =?utf-8?B?dGM1TjdHdm4veHJpeUlQUmQ3dUFCN3dmaElSQlZQZkpzYkV4ZSt1S3hITk9i?= =?utf-8?B?cVZSWUZQdVRJZlhIY04vRlJPSzJ4V3oxbGw1M0RITDBoVENKWWNodDBlZWZV?= =?utf-8?B?STlyVDFlNXpVek1MTnVsd2pRZ21tOVhwUk9lM2VIUThXSENUbGVuT1RpRzc3?= =?utf-8?B?Tjh1Q2lFSDB6WWw1L2lzTTJtZzIzbjBkWkJhdjhMcTZHR21lRWNMKzBUM2M0?= =?utf-8?B?VzNqY2VPZ3RxYkp1OWcxUGFzMUhoVWZtcHRNNjkyVS9uOEtUaS9LR2ExaVNP?= =?utf-8?B?WTdpWmtUM1RlbHU3MlF3b3V0dmo5d3UyZlNWY1NFWklTRUVHM3gzUzB6akx5?= =?utf-8?B?KzVvVWZqVnJMSHFreGZZNUd6blBZQ09BMTVpYUxIT2JuRmtJVFVibm5kRUVR?= =?utf-8?B?SFJ5ZkhZazlTdjhDcTY4aGJCN1FBbXJFeE9qekF0MjdCQUVFbXNHa1JrekF3?= =?utf-8?B?bVVtQmVFVXdJdEdxeVQ3WGQxbHAyTmM4VmV1TmE4YzVZZnJQeDNFblpTbG9P?= =?utf-8?B?SWowWXJlWmp3TzRLUEhXdlQwQ3hmaERIY0ZzTTlDTUxLOEcrbm12cFdkUmh5?= =?utf-8?B?RTdZNVBta0NpRzNCQjRZcnR5OFMxbXVHOHZhNUVGWVBDT01IdStySDRCckpJ?= =?utf-8?B?Ly9SMDlyVGY4cWpmNFkwSkI1R0lJeUhKOUUrbXcwTjN1VXg5NE1JS1lKcFhG?= =?utf-8?B?cGMrQUlLVDNVS3h3NDBuK2FsUkw4enlEeXdncG9RbUN5Rlh0WEYyRmVXZjRh?= =?utf-8?B?Rm1vaUNwZ1Q0MzNQbnExdlZ0TVNiWXAzeGZnWEJvK1RaelJVMy9kaDkwK3Va?= =?utf-8?B?cFlFU1RWam44ZVR1SU4zd21BZHV2R3pocUwvSkVOVTF3M2lBOCs0VElKeGRz?= =?utf-8?B?Z2lraXc2MVVZY2U2SGtOVGd6ZlFVM2ZGZjlkM2ZmSUZJS0QzM1pENHBOdUVP?= =?utf-8?B?YjUybTN1MFZyOWVuL2ZkZW81dGVabUgraDV4SDlzcDFBM0xrcndqVDF1TWxT?= =?utf-8?B?VXlCRkdJbUNWdzY2bVZ4ZFN5cGVuVGdSUGoyQmVhVGh6SXdTRVNucUhwZGJj?= =?utf-8?B?U3lSRkR3Sm9XdSs1RFU1SE9DalRCUjdIN2Jrd2dtYi91d21uaGJTWG5OZTJa?= =?utf-8?B?NytiVG5vZXhWakRTbnlqMTAzMHFtSjhpdnVVMlpaemVqTWJPQUR4bUxUNkIv?= =?utf-8?B?cnRQbFVlMHJoQWhZZStVendZZzFpbEVzV0pJeVhpd1hNTlFzZmZHMVZWN1RQ?= =?utf-8?B?bXZ0eWpscEdRbzJ2VlY3TXhpZXdCeUNVaXJiNkxhZjNueXdqQXhYUk94amN5?= =?utf-8?B?MllyWmxWM3BXT1NlaGpIUXNaMnZRT0Q4RUdscjF6MGFLc2VjNWZ1Uk15dzRq?= =?utf-8?B?bnRsbTF6ZnByZXprZWRsREhDcXIrRlc5ZzN5R2wweXI0MUp2aTBEUFZuT2Zr?= =?utf-8?B?RUtYUC9jRXN5N1kzaUtReVFzdzZEUW5vZVh4QzcwQmZlbGgwc3RCTWtBaDB3?= =?utf-8?B?MkZPeWxnN0Y2MmxmRVRLS1RnSHVycmJzZ0NBLzZGcUpLS2tMY3BRbHFlTFl5?= =?utf-8?B?RGEwRENCVVp2Y0FpekZvWkZZaWdTVDMwM3dCVU1UK2k2Vk9hU2FPQUNDL29t?= =?utf-8?B?VHg0R3B4RWhkeUFZQUYxTjZPUmtEajRON2dDb0JOZ0xBS2h2Nk00c3BWK2tO?= =?utf-8?B?VUpxS28vOFRsM3E1cmVINndiRTNFTUt5U0VXZHdxK2drZVFDWk1DWmtzTkds?= =?utf-8?B?ZkN1REVtb05GTnFVaWZzU2k1WEUvQ2Y5WWlQVE5GTjBRYnpRVzR5WVMybTAr?= =?utf-8?B?YWkzcHVmV0RYcGYySE1RVjM3UC8ybFNMR2hyUHo0TXpHY3RCUlJ2OThxSzRs?= =?utf-8?B?M25IRjJlYzU3VmZqd0RzU2wycndEc2lZeElzR05SaTcwMWUvdnVBdTJ0MGhU?= =?utf-8?B?QldJcVc4RmJybWhZaXBwTTJoUXpYZm9NVVNmOEE1YUEwQ2EwY2ZyT0dqZUli?= =?utf-8?B?WWdIUU1Nblc3dmtLMzZhRmVSY3crd0hSdTRmZzlDZDlpWFVURFQ4WWdnRm5s?= =?utf-8?Q?rAO1PluOdaGpzWfImZZnhoWNiG/n/khfE1zUlCo+bYb6Q?= X-MS-Exchange-AntiSpam-MessageData-1: u9g9/q/v+2wcKQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f7d4e849-f608-4db5-0c58-08deb5522f4c X-MS-Exchange-CrossTenant-AuthSource: SN1PR12MB2368.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:56:12.4770 (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: Nm++URQRTSJWdA9PBt/hSoD2xQt/z+PjstAYqIfzZxAc8+VCl2aKMqXUWC2G+0Gk8DoKnuUbjnoX/Las8Lf5HA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 Use checked access in `FwSecBiosImage::header` for getting the header version since the value is firmware derived. Fixes: 47c4846e4319 ("gpu: nova-core: vbios: Add support for FWSEC ucode ex= traction") Reviewed-by: Joel Fernandes Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- drivers/gpu/nova-core/vbios.rs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index c62d918a3041..48a46684e279 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -1077,17 +1077,14 @@ fn build(self) -> Result { impl FwSecBiosImage { /// Get the FwSec header ([`FalconUCodeDesc`]). pub(crate) fn header(&self) -> Result { - // Get the falcon ucode offset that was found in setup_falcon_data. - let falcon_ucode_offset =3D self.falcon_ucode_offset; + let data =3D self + .base + .data + .get(self.falcon_ucode_offset..) + .ok_or(EINVAL)?; =20 - // Read the first 4 bytes to get the version. - let hdr_bytes: [u8; 4] =3D self.base.data[falcon_ucode_offset..fal= con_ucode_offset + 4] - .try_into() - .map_err(|_| EINVAL)?; - let hdr =3D u32::from_le_bytes(hdr_bytes); - let ver =3D (hdr & 0xff00) >> 8; - - let data =3D self.base.data.get(falcon_ucode_offset..).ok_or(EINVA= L)?; + // Read the version byte from the header. + let ver =3D data.get(1).copied().ok_or(EINVAL)?; match ver { 2 =3D> { let v2 =3D FalconUCodeDescV2::from_bytes_copy_prefix(data) --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012020.outbound.protection.outlook.com [52.101.53.20]) (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 BAEE9331A56; Tue, 19 May 2026 02:56:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.20 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159384; cv=fail; b=RSaYaety0ttOLld6w23SxA0hR2AXl8ma+HYgO2SPMiqAaQoxEw8KRMOYN5Yx4T6VA2Gg5GjPHiDfQu53MPCsoQYNWoOGjFWoZI0H184PVkMm9RwwEcL2Fty1EHSjANnpZ3jvTm6ZNYoP9CkW9M87pmRr2ujfG1WatWQrh5tqF+g= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159384; c=relaxed/simple; bh=7czr8hn/EIqAInBJ0+QfJA05cy8l1hgVwWXc1U/g3hc=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=DcdUyWbtJ3F+5ZHn7a4v4+x2ZVUiBk7PbuWMIcO5/Q08Y0HsNWjXzLF8dUnKktRcl9bqEgRYpnLqhH5o6+fVpYIKUiTDKSGqCL4IjlUaffqNBsQhsCsJYHo3DFZZg7hUxMSuQq5/7QHttmFxN3vSOLxB4feJ65Wg5NDOTQgVr8U= 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=N2qi0VdT; arc=fail smtp.client-ip=52.101.53.20 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="N2qi0VdT" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YC0bN6ZyMVkLRMXAQX9GPe/Dh0xlE4g6LXTGX01gY1HHlRJsAEuExiR9jN/1mfzRGt/kBI02SARaNUxUO03OfxtF9f8ZwEDf2oFHDsAQK0CNjy+bOcwXS7ZxSaVrgZ4X76IMWg6ZMb0N68Gf3VugsNXzU4F13pTxZ78rxwYGD0VuVLdLG19+bc/+xjOXJXP+mETK5RJgdE52xpnQvlDcnwv/X9xkEiCfSO7UG5TTvSiOPa+Qr7JYUQsCsFV5y45kGAjVZ064c3zXnFFP+L2LNGxYWiJh6PuL1rdlkXBNFdkMpihWXdiaIfhP6VeYYJGRrrlJDdVwyER8ffhxsQqSig== 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=UNHd19TeyU9wPjMXxolWckRRp2l7vcGctWrRvPC7L0c=; b=KfuMe35x9prUlME7CWtD9N0AL3owo+2fXFrux4zXBhJkGYZVe07a1NMKIxRVp0LA74mErzaKjAPvxlC9Ca026sOHAIPvVT6zcqe/HYY/oa//dq9eXTcv4RWtVLyGyNvcBB7AysG2Lb7oW0e/Vtwk7ZnSTXQd84aERHHz65gnZBOERt2NCgYAJNLheRWUW9DDbOgOjdDa4E6GwktNQqtscTph5VV5KgYJ85Sv/G1R2gY6/IjjE2lEseagX+Gof6ohNJ5eurezzjLKaTgzA/fpqGneGNaZ1kH3ROiUrjrNTFeaU+6GSs63YJUvbBMk4vImKmESuZ+6rIHfVstKRrXrsA== 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=UNHd19TeyU9wPjMXxolWckRRp2l7vcGctWrRvPC7L0c=; b=N2qi0VdT1IaukRz9xnkZeI0K+dLD7xDIutuV/4SIeqioJ2yyzQbMdNPLWoDB5Ar3W9EfD3q6nQmo6crmA0LMQPWtxxneBXvDFyyJqsFQHgE22lm/fo1jQmzpv1N4WeLmsFiSl8pMuWYXIDe28QY57mLNGhErYp5wkUnpOdVOfk7Wd5+6mwiX3H8d5vP/oE18PsTfc3FZ0gSqDDXqGH44wuE1ZhbwhEdsFSByWbn4Jg4+WUezrGknwFnqZWi5Vo0rDkn9h/XaXlOKZv/0cW2LNnrmivHswI/XL0rF2NjYpraPOANOJ+xY3sjL4PLC4uOfHUYJTKKNSgW3eGeqUg/hQQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:56:17 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:56:17 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:55:01 +0900 Subject: [PATCH v4 07/20] gpu: nova-core: vbios: use checked accesses in `setup_falcon_data` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-7-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney , Joel Fernandes X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCP286CA0028.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:263::15) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: e6e4b18b-8904-4f81-4093-08deb5523281 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: xx4vdDMxvlDp76zIHYk7o35JerqMNVSbTbsCiWYG+1rVh+bHjXHRKNq00Hd/CcZ28jHlQnPZoTrwBt5lTaO0oEB1psCi0WrItqxW86MsD8HVO7UZyRlj8VQDmYO+usgtMRykMb9Xg++iRM9gXfEApqvS9zVJAMiOdUhsm3OcKM8h1qCmBbeMBmIJ+mdBCrXSdYV5h76eeWhLQ6P0A+8f4IuDjbFCFWikX0Y89KIHbyCDRHMURJs7tIE9iEZwC2Lg9RdiUEiqmeZqIiikWeyxYVLgBseBMle4MZjMyKb4OhCFsx4CNGDbsofXLZYNcc3PDfYIDoQHVtGDrmuVuD+78bJ8dRYXZAn19lZqzb0wJPfqOxa6fXlnLoN0ld4qmLRupDBlmtVA3SLVQoWPdoGGSzbt2Oy8qYwbmXPgUSsbkuoiHW/bh2f3VvxzMPD1gOc9Xy+HFsKZKmGrPJ/YOOU2QQAbGmzwpAi/UeqWfUzEdul2mG0vsrK8d8OcWB6FKq2PqVSXgJSyEBLhHpy3Mjr1ZxRcLvnxwITuqFQsOj9R7v6MkbAHGRXmzXt84VR1h8duDjxJjnLIfpF1vPXimY5s2dqI0OCRcNse9uPPsnX4vT9YUIhAfeYYiPEmTnvUwTxdHVw2SAKFTq6eTeLkUN4b3bKBh/IHKQSZHwmAK4XjpAXmH9h/v8ErcXysMmyHcFFF X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TTNhQnB3bm9uM3ZHdWJQQXQ5RklmdEN3QlFLK0ZCVURpZFM3MlV6TzJTS2s3?= =?utf-8?B?eDQyTnJEWUZYcjJ2cGN4WHhCVE5RVkdha0t4Q3VCM1hPUmZIL2N5aXJ4MlZr?= =?utf-8?B?NlBEU3UzR0RIVUdkcU9KVmFJVmxrRmxYdkQ2OWI3NDEyOXl2Mjd4aFFIdFBW?= =?utf-8?B?YjVLR1h2bU1sWG1KbnhJeFphdnRHY0EycHZ3SjdkSTI3QlhQU3Z0Q1g0MW54?= =?utf-8?B?aHZSWDBPWDQ5SzRaYVFTN3BRaGozc2xuYjRtaHJGanFnWmRYT2xzWEZBOVFz?= =?utf-8?B?b0tTeFVZV25WUGw4RFVqQ1pqakdFbWFPZE5EU1hZNDlEUTdRSDd4OW4xaHp5?= =?utf-8?B?ZVNqRnNweWFuQTJtUHp1N2drZ3A4VlFldytPYzRRNEorMW8zV3dhSHR6aFBE?= =?utf-8?B?dlBMbERYQ1FraEVWQVhNTFBScTZsVGRSamZyZGYvUXE0d0tNU1JmWlBFWDNa?= =?utf-8?B?d0EwOWFOZ3l4eDBWcDAzRHRYL1hudFIwYzJ3dHI0U2pTM015R2xkdDNubEVY?= =?utf-8?B?OUhjNWxBanVuNTlBNS9zaGxBRTZnWEhBYytyOXgwZUt5N0tuVEdxeGJibkZn?= =?utf-8?B?SEhzY0FkVDZqR0hXL05sV3kwbDJvVFNuY1Y4a1Q3ejEvcWlreVFUb0xET1J0?= =?utf-8?B?NlNvOE93U0JDZ1R6OHE0eW1qTk5qR2NxbEM4eFp2VHh3VUw4enhUUWxHTlVT?= =?utf-8?B?a0JPTHpBR1JWczcxRXRJRlVKQ0VjZ01HdGtzUlowK1UxMmVFNTc0VWZ2VHNY?= =?utf-8?B?WGlBZmJ5Sm9JZHB3bXRGVUp5NjZwRFNheFltOHl5SXVIWG5nL3hSN2dESmdS?= =?utf-8?B?QlN5WjlaUkkrR3ZrdjFkbmJhN1B1ejEwL3c2STVsOXU5bHcrS1JFRG1NdkJ5?= =?utf-8?B?N1hZRVNnZFVkOHNCRURDWnN3Wlo0cVBlV2d4T0lPN05rM2FSdE93a2VWNlkr?= =?utf-8?B?TFNnWVJnRFNxYVlaYVJHemY3RWc1bFFrd3NqVndJS21tRGlNQmIyNGIvYW9p?= =?utf-8?B?SmE0RVZXeWVxelp0Vi8wSXB4WXp5S1IvN3FYd1kyZjlvU2xOVDdwZmI2QkpX?= =?utf-8?B?V2FaR1hjbU9VbjVDbGNvam9YSVBaVnBOb0VsdG1VM0hScjJ0cnZPVjR4Q0Fw?= =?utf-8?B?TEZLUDc1SWVFNnJLRVMrVjNQR0ZuOVQ1RkhmTmVVbWg4bFY3VXlNSTF0R1pa?= =?utf-8?B?ckhIWC8wUWcrMHExd21pUTQ4R3U4MnNrcGZpUklZU0dvODJYRU9UWmpOaDhm?= =?utf-8?B?YXkwdytvSjRCdXNQdGI2ZXN3OUlFQTZLbzhCY0IzbnE5V2xOV21oQ3UrZmZ5?= =?utf-8?B?TS9XeUtYclBGdmliTUNFZGZMMUpZbEV0NDNWLytWWGkxVGcwSllaMFdFS0VV?= =?utf-8?B?SkpVWUZBQ2p2cExmRnVHZjJSRHQ4dTJxa2w5QjgwVDR0dnFXOWxsTkN1aER0?= =?utf-8?B?dzl5Sk5jVmZXT1VHcnFxMjFpNTdwaDl2ZGw2b0tMNlYrbW1IcUlwS1pPd2NT?= =?utf-8?B?U3ZuVFNpQUxYeTRmRVlXbGFXK2hhVjYyYmVsay9GNWZRUUxwTG9neWxZQSta?= =?utf-8?B?VDdoNGltVnlCYzBIRlAxdnJsblh6aVdTVXlJYkNzTFFDa2hVSklKL3gwc0h2?= =?utf-8?B?Z0RaUDhnNENRZ1ZsUDk5aEVNTUxFTHFSUzJ1TVA2QVBkaC9pVlVKUml1dUdz?= =?utf-8?B?ZVBJb2M0S3dzcmtzNTZ0eXlUV3RIYWlKTG12bzZvV01EUUxCQ3ZnNzB6Mk5G?= =?utf-8?B?bTRIK1lUZi9FRldESjhlMk9QMGd1d1FqTy96SWV5dnl2blZCaHh2WGU3SFRL?= =?utf-8?B?VTlVUDhUMDNydzRvd2p3TGk5dG9ZMEs4L2FYeHZkYjFZeGtJa3VMdlB1aTA2?= =?utf-8?B?RzF2VGk2ZEZ5QkxibTF3QU5SdHlRRmxkMUNKQXFtdFJQdDAwMjNLSVVDd1Vs?= =?utf-8?B?QTd4SG9tUkMyVFdJdGFpYS9hVDgzSlJMSGtSRi9JNDM3SUZLMFM2ZE1CT0d2?= =?utf-8?B?WGllQnh1THdCRklXbXhDZW51UHBHa3d0NlRMM3RVRUt1QzgwbkpjVDdaL210?= =?utf-8?B?dkVlbTh6dU81NjkreVQzTFA1d0oxdktqSHRhMHl1aWkwbnhkemdJem1jVC96?= =?utf-8?B?dGtWU3AxajJUdG02cE5Jbno5UDJNWllQY0VHRDVzMDdLcUtuYnQxbnJ2TlNq?= =?utf-8?B?aFc5alh2bjZOS0Vyc0lVenZLR2pZdTZTbEdXUmU0RGJ3cHEyV3I4U293M1lN?= =?utf-8?B?NDBneVJKNWY1WUVJSFhtbVpNeHpYaEZrdVY1RDI2L0ZWM2NreGlSWk9keWhH?= =?utf-8?B?a1hKb0o2MjJKUDlCK0tTdUtGV01RVDQ4bUl2ODRXNWVieTcrVHlBeWZWdUxF?= =?utf-8?Q?vcjbXxK0d+K3ktA7pEDFSL2cH4CbftduVQh8trJM3/zFj?= X-MS-Exchange-AntiSpam-MessageData-1: zXV5q2lKw4xFGg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: e6e4b18b-8904-4f81-4093-08deb5523281 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:56:17.4962 (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: kh0OLjyIYsFrJ/QyH8KLQ98W+vJb0KIPo20o6sDyHt1wo1maOckbycpYEiSYTI1gqtYi/QkKXg2qxjsl9eYjlA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 Use checked arithmetic for `ucode_offset` in `setup_falcon_data`. This prevents a malformed firmware from causing a panic. Fixes: dc70c6ae2441 ("gpu: nova-core: vbios: Add support to look up PMU tab= le in FWSEC") Reviewed-by: Joel Fernandes Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- drivers/gpu/nova-core/vbios.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 48a46684e279..871f455bb720 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -1036,14 +1036,15 @@ fn setup_falcon_data( .find_entry_by_type(FALCON_UCODE_ENTRY_APPID_FWSEC_PROD) { Ok(entry) =3D> { - let mut ucode_offset =3D usize::from_safe_cast(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"); - return Err(EINVAL); - } - ucode_offset -=3D first_fwsec.base.data.len(); - self.falcon_ucode_offset =3D Some(ucode_offset); + self.falcon_ucode_offset =3D Some( + usize::from_safe_cast(entry.data) + .checked_sub(pci_at_image.base.data.len()) + .and_then(|o| o.checked_sub(first_fwsec.base.data.= len())) + .ok_or(EINVAL) + .inspect_err(|_| { + dev_err!(self.base.dev, "Falcon Ucode offset n= ot in second Fwsec.\n"); + })?, + ); } Err(e) =3D> { dev_err!( --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012060.outbound.protection.outlook.com [52.101.53.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 31D7C3321BD; Tue, 19 May 2026 02:56:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159389; cv=fail; b=UsHRCvTuyIEy6h2OgthINiRbD5uKPLZ8CzZb+T4W0WLm7SBc191xI/wH6l2nWST/B++xhKGvbo1BaxmyWgW1DTiF32+boPEIO0bZRaBLKMJCYJfNIa+rnDHnRxR3v+X8n34i13Hqv1kKKfMwXcBSYVE4/l3RSykpqXs2od/3mAQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159389; c=relaxed/simple; bh=qG6n8W5R1FbSaKAwS5pgD9qbLj2hLcZ7t7HNB2+CA6M=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=qVL8ismYmGSc90wjnlARvA5V6hmgoAU7CZJF9TiXzOXwOt6JUxNtjPpGQBgcFBi1HFrS6ytEKFrEQhDgwrQZvtJyNPfvJUx46mfCMIixHSR9Mkzuua18hwUneAnIgWPezOnh7ci4I9MlpsVzzaNOZSmyrBP1sAPuQQfFGBpClWw= 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=qxZSkoLi; arc=fail smtp.client-ip=52.101.53.60 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="qxZSkoLi" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=S6FIux4WdrUJOVkxroVdC4sXd/DBfPkNhyu+S7mdJpf1NqtkkjoGTBmq0QJjN4T+XDOKSnbjbQ7WBYCxEdMeYUMweHD8HQP18pK8IruiGErK6MEIPm7E0n1prihbGVRabcOVdCXFPGZTJMc2wfEp86udjhmk9jFt9lLIP3sHeJq3qu8jJLS2C4/y0NHj7cxUUycE6q0orbLEwHOMoSdqLNwEixz4+JNUuyQMWQQU7N+mnWvwN6vW/XMgVpFslKzkscgBOsIvIQ0/MkLBbh59tm934ewFd1Psa2oq9lkFYL27ZTsdiVvCKesRfqizq5+KWCvkPmcf2B6edaNb/t5+mA== 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=zvjv6tNssKQAeTOWmUfxcCe4GCfeMSwX1vT6S/xlEzQ=; b=oYyQApAPj/EHqXXOc9OyShJ1Kqs7QZeWVc8FdMOhF5lNVZryIrVjgOktpypQbhOz8UEGoK1caPoTHejVOrRRxF5fChuZSPNpXMZkL9IwkLA92h1MaMzYs2mkO14+VuiL1vM+h62tY4mCoyO0f8hGk+8eI1zZIY3qLqN5DuReqRnl8ciup8aVBkhZkVF1+MAIS6NfU3vzSPgrZPsRwEZ9NsuiXxCn2dH0oj+5GllEUfAyfN3nLJtVGkMrYf+ykML2ZEGz4sItEGIplQAkcd2IziYNUoNiI1Tb2VSBDmP0pQ5UwBtPeKNUN3bGbnjbt1/5e3hIQPYnn36uLi/rxfIMHA== 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=zvjv6tNssKQAeTOWmUfxcCe4GCfeMSwX1vT6S/xlEzQ=; b=qxZSkoLirzKQ8xejxOXjGaErDQOBugSy5n0YmJy9NHJ+2Us0quvZhfjs3FTPtkDSkEhKuZDNikD9C7LP4XK7TPOrCnezt5p7WadJycEFZsoFmI22SVQ49SFTqgb+4KD4ciGA3E8fyMzYpfITneUaCzzrv/uDsFY52KXh98YPLtR6EWOqKz11oE6BkyzyhQd7p9UmxBMqk/683vMQ1xyjPnm5GGO+g52mRMNxrGGnMyLkd+ckz65cty6WOAT1POk8tw3BtryAS06wKvXAMtUcxcCmNVNqPgdq9mQ0+tjeQFvF/+ZKS0XmEu1zKWMH8L01ZRXipbHBevWUK1a7Zauj+g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:56:23 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:56:23 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:55:02 +0900 Subject: [PATCH v4 08/20] gpu: nova-core: vbios: drop unused falcon_data_offset from FwSecBiosBuilder Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-8-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney , Joel Fernandes X-Mailer: b4 0.15.2 X-ClientProxiedBy: DU2PR04CA0081.eurprd04.prod.outlook.com (2603:10a6:10:232::26) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: 7c6486ba-fcb7-41b2-fd30-08deb5523626 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: E8rQ7NmvceiQkXIkzYy/+GUreyv0oSC36QZGA6N6Zzy2rrT+YsEH9K90hMX+ZC9lqz7m0QakNf3EkXoUjV47zfWDwbavXWJ/Pg+df7l2xlpm9D65jxvjQbwRUAFjlsHbe1LCg5Dm7Z4Cdp4zU2woq37+JlJIUPpm5opLZWQa1U2pvt+5O7/SYhsCekvrrg5JfPPOcIo1K9J9Knn31Y9JKN/kJNNtOStDT8ehSF/JrOh6nL2XXJuXW/xjIZb9lGQdl2Ejvhqtt1hX80f83MbnrZaqDVJM6HqBU5SRVndUXoxspk1hDvnPjnYjcewskdgeg/Cxc2aa7jccNuWf6BWD4Cq95KGR1YLtWaPAP6964hw8oobYzDLPqgbJBOR8PwZmoXRpcLL7QYiJisOzQiAcNvdUJe8m8ASgPJlZStadbFJGxg9uHdB/dW/teFPwkJT74bSAQ+Z8/HHWEClG3cLgAoqb4GaJvGuAcM43tkf27IeRaNlv0VJys2h8Kni4c8GHS3ASZ0oxiaWB4Y6/KeTvR5BMyax0qu/2r1X/RR4R4tGQv60TK/LJiCzbqsxYjrn4LNBQZd+zag6w/7uf2wjoun1MuyaqGpY8Dt2LWA8AIo1L65gMy8nEBHtTQNrLQb5FoRholMBC7hD/LKkeoqhw/h0bqRATl+1DHDCkk4lmD6ylaKcicgmlAf+xxBR/ePP0 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZXV3cVlPeWMxc3FFSzdRWnd5T2U1bVNoK1BOVTBPZ2ZLUDlSbFllZkcrM1J4?= =?utf-8?B?NVVHdWhMdjlRWnovSWJIN1g3NEtZUU8rbHdaSEQxVGlRT1J6NG9lbEQxUEZq?= =?utf-8?B?M2tmb0xnSCtOd2ZLTEhOWkxiOG0wcGltZG9FOHY2YjduTVExMnNhYWlEQm4y?= =?utf-8?B?Qml2V1lCS0kzK3hlcGdKMDltUm56Ylpoem9WMHoxenZjTllUaTRPbkk3VnBq?= =?utf-8?B?WkN4TzdwQUNFeFBSd0N3Q2svVWh6MFJqVGlibkJHaTlmL3lHT1l0UThrdDhx?= =?utf-8?B?U1BzM3Rqdkd6dUxDZE5zRzJTV0Z4dGhGVXVDK0F5ejg5WXNPb2dMNU5GM1V0?= =?utf-8?B?UE4rb01FU0l3d01vVlA4amlZSko4cHFYSDhuUUdjWDhyMnBOZ3l5MERwZDhS?= =?utf-8?B?K0ZvQXZwRlUxT2NPNThicy9PRXRnS1AxUXVWQUR6NlBNS3ZTdGt1VVdkcGNS?= =?utf-8?B?SkJYT1I0RUhKN2lOWE9VKyttK044NjlKU0c4L2Z4cnAzcEVDaUorTVduc3Fo?= =?utf-8?B?ZVhFQ1NlcUhCM0wxNDlzWjR6VFlPWm12aUJML2ZNTG1ZWEdabm4xcmdJdVFZ?= =?utf-8?B?Rm5xOGh6UHdsNW1ROXd6RGNqc3MxUHJvSHp3Z2VSU0FDellKWmtUVjFOcHFh?= =?utf-8?B?MW02U1I0TDBQZzI4Y2huc2JVUFlFSnU5MUNhU0NpSForVW05NjRkZlB4aGRN?= =?utf-8?B?Yi85N3BSeUFUZFFad211eHdkaUhKMnRCOGdPQnVIK2tNQkRMOHlyd2prZCtq?= =?utf-8?B?SlROV2JONngyRXM1RzY5ampuWWhCZVN0SVArRCtZMzBBRytDRmJxTWIzbmg2?= =?utf-8?B?c1gxdy9mTVEwUGphUUhSdGtRTmJ1U3dsZ2JXb0x0MzVKdzY0T0tHQk00TVdo?= =?utf-8?B?WHhsd01lS21qSjNmcFZSTzRzQWkvMlRNaXlmWVQyZ2NNb0FxS0JrbVV2ZTlw?= =?utf-8?B?U1lIa1pUbW9aZ0dXQ0dRejd2QkdTTHhKMXo1ejVTZ3dxRmhqYzBVWENpU3lu?= =?utf-8?B?TXlFQ1RVdXkxK21tVU5OSVdOaTNKdnI5MFhUV3hHMzBJWW9wc1JRV3hxVEdU?= =?utf-8?B?aHVSZGIrcG5GN1ZSUnh0ZURQMGFHZkxaRVorM0hvUVN4QXNXWTUwUHBSemRB?= =?utf-8?B?UllLSXY4cmdlNFN3bkRLMjd5VVZ1SEFPME9GT2ZBSkI4S0pGRTJFOVdCZzNT?= =?utf-8?B?Y0Y3QWloTGJIby95Z1BvMld1TnlQakN1QXpPbFRRckNTeUtEYkR5Wnh2dTVW?= =?utf-8?B?ZU5jampRZTRrQkU3Mm5WcDBGYmJiWTRGVFh0YW54VUR6M0hXT0szVGczVHE4?= =?utf-8?B?TGlNYUsxRUsvczFxSXJtVEorMTY1VzFtb0JpeExPNjQ2aWw2TU4rZmZycUM1?= =?utf-8?B?QURrTW4vL01hendiMm1GYk5EK3QvSkJ3dlNhM3hvQVFhakJ3UHNuWCtnZ25G?= =?utf-8?B?M3V6eDdBWjVNcWovRTNNYVJDaUV1cG9iYXlad1MzekxqUGlCZWY2ZVNQaDNJ?= =?utf-8?B?RmZpTnVoMlZGWmxBQll3dmtUb1RwZTZDbmNQemZPcURMbUxTK29BOHZKNGRo?= =?utf-8?B?NDg3SXJIRFpXays2WVBtTGVqK1BwRFJqVWxCVU0zVkZ0MGtXZlZHZDBWV3BK?= =?utf-8?B?OTcyeGlkNHk3SVNGT1JPaXZNVVZiY2J2WFo2Sjk1M2hRUlJRTDE1aVpKMEl5?= =?utf-8?B?OVRjOHJVVmlaZzZhVGpBSlFWWkNDMHNPZkRQcjR1NXBERlZoTDRxRkVacXhh?= =?utf-8?B?TkxTbmZTZlBHYVhpUzl2Wm16azcrQi9QTUtNNVZZeEpXZXNtMUE0RFE1SDFR?= =?utf-8?B?T1NEV0tRcG40QlBpRTI1Q3hEV3dvSWNBTnVSYWZWMk5SM3RJcW95QUNlTHBR?= =?utf-8?B?a2MzQSs5NG4rWDFLWlpyZzBxcGJtNkM3bWllWHR4RmVPd29tc2FNVklUR3Zp?= =?utf-8?B?ekxlVWNGZjJ0blUrT3gwRjNpT0h4MlVZdVo2Q0pMMW95RjhEODdtWGN1N0gz?= =?utf-8?B?SXc3bHVqTmpKcmhob0hZaUNHRUs3UEhaL3lrR05sb3FvOTRzTVBuZUR4Y0Zh?= =?utf-8?B?UlUyUU1VUDZOcldFdjlHWGF2cUo1VUxOSzJhaHVyMGRFeE4zNDQ0ZmRrQTNu?= =?utf-8?B?WHRaUUl6Y0tqcGIya0xEdlE4eFN3NDVGRTV1cjdRRHdsZk5LLzlSL3ZMZjIy?= =?utf-8?B?Nks1OTFreHF1Tnd6U2lZbHJIVEQ0RHJJaUh4c29lTnlodForSzloeWpOajNK?= =?utf-8?B?SlM0VlpMSHZrZ3NkNE0vdmFUVGc0VjBMMUN4VXFuWmIxczFvQ3plOFhQRXJy?= =?utf-8?B?R0xGcUJGVFhIRkIxUE1NbTNhV3JvNFg0dWFIQUZZM0VPaTNJRHI2dCtYcUts?= =?utf-8?Q?rhJciLX0B1/RcD9WS4zHQ8lDNhf3gqpVRTe0LQQsSbYYs?= X-MS-Exchange-AntiSpam-MessageData-1: sNW1fjE1vaCR9g== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7c6486ba-fcb7-41b2-fd30-08deb5523626 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:56:23.4784 (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: 7mRd4H6OO2s149hAlHuxSRv4M2jV0TExrgpwUlYUYZokVQWgC1uH7fkXp3l7c9i9rdNsOQWumverrEqyeaNVig== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 This is unused, so we can remove it. Reviewed-by: Joel Fernandes Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- drivers/gpu/nova-core/vbios.rs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 871f455bb720..8a0e16e6c9e8 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -338,7 +338,6 @@ pub(crate) fn new(dev: &device::Device, bar0: &Bar0) ->= Result { Ok(BiosImageType::FwSec) =3D> { let fwsec =3D FwSecBiosBuilder { base: image, - falcon_data_offset: None, pmu_lookup_table: None, falcon_ucode_offset: None, }; @@ -712,8 +711,6 @@ struct FwSecBiosBuilder { /// Once FwSecBiosBuilder is constructed, the `falcon_ucode_offset` wi= ll be copied into a new /// [`FwSecBiosImage`]. /// - /// The offset of the Falcon data from the start of Fwsec image. - falcon_data_offset: Option, /// The [`PmuLookupTable`] starts at the offset of the falcon data poi= nter. pmu_lookup_table: Option, /// The offset of the Falcon ucode. @@ -1015,8 +1012,6 @@ fn setup_falcon_data( offset -=3D first_fwsec.base.data.len(); } =20 - self.falcon_data_offset =3D Some(offset); - if pmu_in_first_fwsec { self.pmu_lookup_table =3D Some(PmuLookupTable::new( &self.base.dev, --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from CO1PR03CU002.outbound.protection.outlook.com (mail-westus2azon11010006.outbound.protection.outlook.com [52.101.46.6]) (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 EF907338906; Tue, 19 May 2026 02:56:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.46.6 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159393; cv=fail; b=d3yfn0d9WBkvFIYTM3DcnCPq95v/rOceYFvglVoRgs81DR/qiyJ2aMj6kNF866T7eReaxACrmjxlnl2ENne0/12nXXdTAS0MQbk8IelOxpgjGNQFmnqN0dfH2EW8zcDSaf/6bsPjQT6M239n3M4uTFPrHR5ASNiuPEtSD3P3SpA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159393; c=relaxed/simple; bh=hySCRmkQ5pW+DRlcz9CHbk0f+dR2I9/PuOlA5aJ/tKI=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=KbiuNa1rruUTV2M/XNzW1kiBN8Lq/ZRNd1ZRGrhBkkZLSDUoLK4xW/g29/orreYTV0V9UEeofoMQgyqUDgMlZWjvcC8RRzr29NAyHqv5rHm65G1QR/D69lOID9onRpCdxsnhbASwRa+LRFDgoC/b83SqJ5M+nBa7Mzv0MArFsg4= 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=g6Gz9yCN; arc=fail smtp.client-ip=52.101.46.6 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="g6Gz9yCN" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=e0go4d9mr49CT7hQ3TAXsIHb66yaV/2j2ZUOc0D9JkAK50jLBXxcg6NG5Anozf4XK8fojiyd6/mNRd+MdTfcNoVjV1k70hhxfnVB1+dlrIH1cgX7+9IVHYC8sT6gIPNO4uuqMoQXbZ8jDkGiDBNj3FK/p+ofYlY48HWaSuzAWyEC70Y3DQNq/fJ9SFIlwjJOy9fBdbRJ0wKR2iUA1t8D5M0obQZO1HP3bCwlQhYW3gF8ZgMlaOkHaMC3RQCdz7AYW78wRHEF/xc0SLFF8W60CK/A05jR+kF1hzTTFXrmTFFysBf7FuabcFruTdZj6/iXwU86VludHew6YAu7dhNMgA== 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=mg+YpNzAD0rnje49VO14vQTgb7eG1CmsBGyK8xVjDnw=; b=U/TMP5NjexLujt+hZc+EMsY8YeR/ZNP0LKgK+t8qOY7ODitPwCBIWMn/zZ4nH5KQnqUuFUK4y3LN+yPDGLdQezlTX0AOLp2Jj/qbyH43H+3tT/uGLlrFTEdLvGeU4haNJzJcb/8arp48ModtRrz+68lhKslrTGBHET0xMNAR5xICh5IEm+FObK99wD+KGFXYFF84nfq3cRgoUkcdkicrYVeZYuPOaZIfy9XB5DlKGfdYhsn6ihpIAxKkVz9SBvE6kwGHWTM/xFp7eIfnN6jM2WjaCePf5zUVOqvh3neuj7gS+/82FTS9JAeiWa7W7kUfqFwQLUJRyO+N/tIHYsLzvg== 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=mg+YpNzAD0rnje49VO14vQTgb7eG1CmsBGyK8xVjDnw=; b=g6Gz9yCNntNMcSZQzATFhhxTqIFPUmF7u0MaXYAnUlS4DVOcEprg8fGCzn+vIFaOPMz4Nk8CggCwmkR2EHKo058hG26znOnMtUQeUEXN3RUaJ/1Q8YfKth1PKc8IB62JtyqKi0+luR8bRlgMqNbrPnACRSvU8Ez8CimX+Bpc/TxHkR6GJErTNTZGyDQx+3C0EUZpTdje0z9r3JCMauWa+BW8//mG4RD88r/vcUrmpoqJVKgTOY1awxWgp2lWoqRYOKbHMpXiF1EUUQGjjHn5wvTbZgu2E8CX6GvpDgxpdAhK61lTnBS1QHRKGzIIrwowhqFr7JusmxqBycF+oQd1Ng== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:56:27 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:56:27 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:55:03 +0900 Subject: [PATCH v4 09/20] gpu: nova-core: vbios: keep PmuLookupTable local in setup_falcon_data Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-9-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney , Joel Fernandes X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCP286CA0124.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:2b6::6) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: 1d3bbbcb-eb55-45b4-5cc5-08deb5523882 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: E0y/b2lKxeNwpyvbeNerqAAjuAzzyUbuRPchfDRS39LQb+cWQXXVbbeZaXTYfQtxJ/Kemw4btL+SQNoG/PF4+jIPLOQisDI38VEwhgphK4bXlUBWAhRSuru2wxNBOEF0fIBnMZT7/UKjynNNpIxRewKnb9EkK8rcYn8uH1/b8U/0fJ68ZmBRw24sugWZWJgemURm+nWomLvmNZC3Aa9dE+P//5Ir6giNz3p4oUAlapmkbJwXUIuf23NOVHqMr58WN9BH89Lkkr/7UmvWrQh6Avkf1UKJYdN4MWs/IGVSgJTqr8Cy4bwaGLFX1IgPy2a3SK+vRAWOBytBs5q4Hl1CHetR+n7qxZ6PACvhjmzqP5U7zpqSTkDnTUgODFBAz09bTUuzkrBJudNIeh49nyZp2DFEENHG8AmnhvmFJo3XHpgfeYiimZBZaLZYhamC2zFSpf6bg3bXn7EJJINHrI8C3NPsCLL2+0a6iA4YxgW9NyvDyJy2DEm3m6fBgWBf+w31HOPLy+KftmIxz/Kq4g14T7nWMyfn8L0g8Fm0NPDGSAAYMvxJgxD7jl+NCG6hvXiIBaNBnNsStkGlVdy5UWEElU2xx88ar7Fs/nO8TZWAotbmKmG8mwNvXl0/BJt3KlDUYNV7YkUDxiy1LzKFZZ0y8D7zfkpZDCoyhfnZG0tnNrHj008A1qcjNR4qgYI1H53J X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dHZ3d2RBVzk1VUZtbnI2VXRwRjlSMy8vd3lRZ1V3cFlIUHVZSVhuSHl3c0lh?= =?utf-8?B?SThINy9NbGJHWGNFdW9jSklYdldhZWVZaFBYZnB6S0o0U1dubTNYenpUa2tO?= =?utf-8?B?K05hWnZ3a0pzekJSVG0yYnh2WWxOUmxMOXNVSVd0Y2hSdmxjVkhaQVVId0ZW?= =?utf-8?B?UktHVVhKRklsTG9Fb2dtaUZDOHV6MGNUK1pvb21QMkJYeno1RnpWNzV6dXgw?= =?utf-8?B?cE9mQkxzYUtqUWpjVEU3eWlTYVJvL2dMbDJLZmRyVHYrNEtsRThCelV3S1du?= =?utf-8?B?RnQ0S21haVVzejVrdzRMK0ZkUzR4RWJNL1Q0Z3U2ekowaUQwMHBlVXE3Zmps?= =?utf-8?B?bjY4UC9KY1N3R005S2NTTGJRRGN5SDBBTktmc2VwTWw4Wm5HbStPZG81OWdw?= =?utf-8?B?Z2pqcXBnSWhRODgyekZiTTAzcXNPUnk0QjNJZFlwd2pTMWtRVjFiVm14OUNE?= =?utf-8?B?T3AzRTRzRjRiYVRzK3dvaXZqUFluMHU4dm5oVC9palNGY1hEc1JheDk3NzBQ?= =?utf-8?B?cXcreXFLaDV0TExFb0pUUEtFVTdueUlnQWJ5STRScWxRSWM4YitPNWdYVFUr?= =?utf-8?B?ZUVVSXFUSDNhRmVpdEV2MDVEM3l5VUIyOHRMUXo4YTlyMitKTjh4Qnp3dG5F?= =?utf-8?B?Si9mTW1BOGc0ZVRySUd2NmFuTm1jVkIySEVtcllYait3bk02elI4NitVZ1JN?= =?utf-8?B?NXdTTVVJTmNlZFQ4UXRkNlVXbTBnem9lVjFvMjZLUmtKV1FranF4aFN6UW4z?= =?utf-8?B?Q3UrdXQvd2p1NDI3L2lkZUNCd05DeWtndnVmNmoxaFIwd3BnQ0x2WkdVb1JB?= =?utf-8?B?RUYxVHloS1lnNUVFb0ZzUmo4WXBmVjlHOEhqVVo3THI0OGJmcFAzZFpjQWJh?= =?utf-8?B?T0I0clpaOTFabHFYQmpBNmFKWTI1dkdnZ05iRzFtNlptc1RQV1pRdVgyZlRW?= =?utf-8?B?NjdETnN3WmI4YjFJMHh5cmwzSXVWM0RzTklxcWhhUlhkSnpxcVdEVzlrRkp6?= =?utf-8?B?SnNHanYzOUtUbXFIMFdIY20xN0g1LzV1TGNCY1pDTmFBMUxnWitucE1yc1o1?= =?utf-8?B?cWxOVTdkb0EyMlNFZzN6ZExreG0xNEhUa016VUdmUUlST1A3eml4V3RsSW5h?= =?utf-8?B?K0JxaEhLZGY4QkhseTg3MkNiczZTVnVjM1BRR25QT3NhNzdDdXJqMi9NNkRU?= =?utf-8?B?alRMeERySlk1TnA3V25Ram5oWGRWb1RmbnFkSGRMeC9GUjVQeVBoNDVmMklp?= =?utf-8?B?TFVkQXB0N0dOTE9ZQzdycklNVTNaM0MrNHAxOTNqUGpEbkc2QU5KMjBqUTJF?= =?utf-8?B?WkRLQUZqZzFWSnJ3TGZIcmZFMGpwbi9Hbys3MTFiUkUwQnlmbVZLYW4wSDdT?= =?utf-8?B?RkpmZ1ZNVXR3WnlMZlQwQXQ4MjVOUVNtMlJnbkc3OHZqZTV4V2ZjZDFPUjRU?= =?utf-8?B?S0l1QVFPclRqck9oM1U0R1hteHZ1b1pCMG1aL3ZQRjJZTDh0U0loYnNXcVFT?= =?utf-8?B?cUcyem0wSDFKMjFLNEh6M3M2VFFnWWxOSWRDR0dIRnVGYVN2dFdNU3NBUnRL?= =?utf-8?B?NEh3Qnk1YUlNbEt3blI2akpHYTM0bmZIY0tITlZRcEtUd0hFQll2RGUxSnZl?= =?utf-8?B?S0xhTXlNZWhkQkJ1REloK3Y1dXZDK0FHVnlBajVZZEhKczYrVFVRdzNZdHpI?= =?utf-8?B?TUVYTlR3U0NLc1ZPclJlNHJIRlFSZ3lZN0ZRQXUvRWNEOERxaXFvdkswUytU?= =?utf-8?B?RkdiRjBVb0wzSFp0N0k4a2doQysxSEV3dEpMaUhsUW0yZnk4WE9aRGZMTUE0?= =?utf-8?B?QjBXbndqZ255RnhoNkFpdExBMmQ4Z2FLSktjVVBWMjExZUZiMGFGV3ZoM3Fy?= =?utf-8?B?WG1QODNRNyt4emR4M2FrbnVEZFlKemNGR0hpSFNmalZ5d21uTDNyTFpYMUFH?= =?utf-8?B?RE9Na3VQem1CNTA0YlNoYzZaUTAvV3IvakdJU3RoYWwxY3dGc0tuRGRIWnBS?= =?utf-8?B?THFsQkd4OFJEOHlUblFudjRzVXduMlYyZWNDSVpOdGZSeVBvQ2pGZU5DVncy?= =?utf-8?B?YVpabjdDVi9PdUV2bkxNOGJydVYwczNZcUN3dW5VTjMvQ0tzVkpyKzNTUzRX?= =?utf-8?B?TUhhbzIzc0ZOZWxMZzRrUHAvM25TcFQ1YXFaemJMUUo2RStwcVNPL3JqNVdB?= =?utf-8?B?K2x4MllrUXFIN2J6WHZZS2FvTGJTVEIyb3ZKZkZ3amx3eklqaG5CRHVEMkpH?= =?utf-8?B?b2xnTDdYbExramtKVzBaaUJ5bEZtUkpjeW5QRnM2T0lNcWU0TWtlbEJtcERl?= =?utf-8?B?TWpHRWhNdmpZY3ZwRXFGdldMNHlib1ZUQzBScXdVTXV5aXVuOFFVM0xST2lv?= =?utf-8?Q?pEHU30nO8BSdVRJ2CkVWMdUp361krOvdnx37ilnOPx1RU?= X-MS-Exchange-AntiSpam-MessageData-1: ThRBC/fWwBWnvg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1d3bbbcb-eb55-45b4-5cc5-08deb5523882 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:56:27.4084 (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: el9lmCoXNHEgmh7RzZk6afrDP+bVcSAbNTxkthuF7ZFhojheUMn7Xyp8qGuzOLYAZB7yNaTToo93KAJXvbJyYw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 This does not need to be stored in `FwSecBiosBuilder` so we can remove it from there, and just create and use it locally in `setup_falcon_data`. Reviewed-by: Joel Fernandes Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- drivers/gpu/nova-core/vbios.rs | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 8a0e16e6c9e8..cadc6dcffefb 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -338,7 +338,6 @@ pub(crate) fn new(dev: &device::Device, bar0: &Bar0) ->= Result { Ok(BiosImageType::FwSec) =3D> { let fwsec =3D FwSecBiosBuilder { base: image, - pmu_lookup_table: None, falcon_ucode_offset: None, }; if first_fwsec_image.is_none() { @@ -711,8 +710,6 @@ struct FwSecBiosBuilder { /// Once FwSecBiosBuilder is constructed, the `falcon_ucode_offset` wi= ll be copied into a new /// [`FwSecBiosImage`]. /// - /// The [`PmuLookupTable`] starts at the offset of the falcon data poi= nter. - pmu_lookup_table: Option, /// The offset of the Falcon ucode. falcon_ucode_offset: Option, } @@ -1012,24 +1009,14 @@ fn setup_falcon_data( offset -=3D first_fwsec.base.data.len(); } =20 - if pmu_in_first_fwsec { - self.pmu_lookup_table =3D Some(PmuLookupTable::new( - &self.base.dev, - &first_fwsec.base.data[offset..], - )?); + let pmu_lookup_data =3D if pmu_in_first_fwsec { + &first_fwsec.base.data[offset..] } else { - self.pmu_lookup_table =3D Some(PmuLookupTable::new( - &self.base.dev, - &self.base.data[offset..], - )?); - } + self.base.data.get(offset..).ok_or(EINVAL)? + }; + let pmu_lookup_table =3D PmuLookupTable::new(&self.base.dev, pmu_l= ookup_data)?; =20 - match self - .pmu_lookup_table - .as_ref() - .ok_or(EINVAL)? - .find_entry_by_type(FALCON_UCODE_ENTRY_APPID_FWSEC_PROD) - { + match pmu_lookup_table.find_entry_by_type(FALCON_UCODE_ENTRY_APPID= _FWSEC_PROD) { Ok(entry) =3D> { self.falcon_ucode_offset =3D Some( usize::from_safe_cast(entry.data) --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010017.outbound.protection.outlook.com [52.101.56.17]) (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 88237338925; Tue, 19 May 2026 02:56:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.17 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159398; cv=fail; b=Zfiy0F/5ZoTBxGZbVuTq0w6+2Nq61VTS7mqB6D2SSPZ3i6OlLx6En4hkKQQts5pUiIstasEV7nQK+4yDGc8fFOaen89oZTJEpbkyB0bvBvlyGjhykylZlYPIDDKaxx/o9Iodt/m8bI3lp3pweLVQvzrx0j74UEN0LNTdu7Pv55Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159398; c=relaxed/simple; bh=gfIS2vwtfW5XxlRCisbG91hMPhGnDqsC66sRyYzM3Hw=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=HEo1zvskv3MBRUky6iSnL1Gr9Ln1gfTsm/5ZhEZQXV14Ki7w8fF3i5I5a2tEopFhck+1I+ecnL6CeZmMj3Pi3BCvk8uWbEZ094LZ6AkRjjU41/g2HL1qOTA4XhRCQt8YoKeSFqY5sUGOAzTcUwCu6bcV739dxAtT8+G4qFYtMhw= 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=SIyafHOO; arc=fail smtp.client-ip=52.101.56.17 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="SIyafHOO" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nX4Okmn9z7VpmzQGm6w9m8y6afTvms+YDSeuO3E7Rgwn4YpYAZfaoe3roFtOcgZCqp+OYn1fyiQTeZGClTgXR1IAmSeQwcfNfOSe8ufUfzyUVk2x+mZKgx3ysBslv7kTFroyxEeyNceNk1rJiN4tJe9IuMsEgWFXKjkny/BwKRv0tYRGzJZeXYqVj6phwJ9WNLYtzbVrc7wiP+Q2Q8HI+9lR1RU6BSo2J8ltOFnywmwBjwT93MAX4ZhEWpSwS0JQO3GzrAwxKJh1/4/su3221QMOEO+9jwa2OlbJIKGQPqQg9umL5zBBWLmM8lw7SDG2S4CTvTIcZ8eIFp8ZAa7mDQ== 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=655A+G+trSoTbk7oF5v5Hqze1bGhHNdcIPS9BGrphMI=; b=HGlvGKanb+4SpoJv37WZga/vSwxaxpgseeFs8oZo6tKBsCexLN1Aa43pVVdoYxAh155fbyMPHgXEJSWaA3gDZZFngRKS0TmEB69JX5sj5eQtt+VKX82AwDdWXtYruOubsNjPjpgPHWUgEymdHevK8usogdHXTIFccQ1ncMV6R7AEe+/8WiBigVd4U0VT/wfKFiuWhPTSg+fgk+Xt89nWb7zQguJ6jv+IhFrLiGfWu4yi7pcOpay4WzkCBmVUHabOzHFd02+yg1YMXlVSOuMQwiF0avwgzQgtbix+agOMiYwbdt2gKpgy6bjMOcI1SR2EcRTmRUKDfBWJta5zaIu+XA== 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=655A+G+trSoTbk7oF5v5Hqze1bGhHNdcIPS9BGrphMI=; b=SIyafHOO8R56Qu5UBju1pl7KhRIktIiHC+WbwipcRx7nuK+/gXzdyj90NXkQ1w5gllcqO7JCqdcidzxzORJWtaOe/9wQcBhpkvd0ITIdB/Sp56gv/TP6KCl1XHm6Ed5Qhwzs/Dq+pvtTfMIELC/gCYVk1LKaRLXoz3kt3oL3qv03nbVmSO2QLFLZ2/Y+lgUxlm4F+aCtI5fTcKqfT7xW18p45vcfeyxFyD0buZAvobzJVoYq7zSMSZq6AN39bKwCHUSuI8SfgkJcUZEY4vWS5uoD530b3Z7eAkmyyttm3N8mJIcKTMIE6YbiWA4Qw4yTKp4joCW5dD9Me9227CkhEQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:56:31 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:56:31 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:55:04 +0900 Subject: [PATCH v4 10/20] gpu: nova-core: vbios: compute FWSEC-relative Falcon data offset Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-10-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY4P301CA0052.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:36b::15) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: 6c171324-65ac-4411-8d51-08deb5523b0a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: 9faQyb3Fmy75/2Cs65dhjKf+O6XYa+kYtILTAXDOYbExlT68acxiWO3OxBJVce+kB19BpfPqedp5yL9AeWpXfo+15hi7ZiYZWb7AZBorwKZKzEXjxOXg1CGsHDa2X6NhrPcb9h002Tu1z9Rm4Yu+hRRvobx7AXfrCnP+9NHj1n3a8PE+fKuMqE/MtTtFi7F769xncJKycqUQImrSjHgQ6kF57PGbpfcC2M5tmnWytVHMWIziWT8KcMYJKZpt9ZffFoiLG/ReBRvX8Ce6/VI1cRafP4OEyqa+1wxTbTfFG3P89VLQhZeSNZoaLL5F3UPBi9QjJ2yjjmx0M89PsIgiP4Iwv9bI8kKtkpNmj0tkrnzQxXUuHY1JdRwXq8um16iBAy1qBLfTdcyGlxQFa2Thsl96EFNkUOXWc43fmvz21XHknprkeFFQeSFFYWR0u2iHeSfIi8ujoOAdHme56cnzzn0dVvJI7AY87LCm/sjR0Vpf3Tv1uJqvhRbD8E+oNIDUQBQJ74cmlpg5i/4ZG3Xr1/miK4ZF9uMfI8PODt9dHPWEGa+nh+bfjIun1sr72tNVQc3w2ZM9ZpFL5rWd6TDP3vgRNWAw8NfIHhF3zXg/Z8v+pgjphrlILGbQReKuORklAVF+k6P2keloUZStDMG/jftDgnhQSSncP/wH2D9IfQVXKr27ZU773lNh+RtvL1gk X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?enpnUndSdC9XVWt5TUhjL2crUWdvVjNha2h2YUFwTWptV08yUlA1dlRrOU0w?= =?utf-8?B?Vy9tRnNRQVNxN1NDUzhXNyt6OEZHZ1RPQ2trSU1YRWRscDhLRGV1THhMTzQ3?= =?utf-8?B?d1BLaGN3Q1lzbjlIN1BQc3pIbU44NFpBQ29qWnY4aW5aTmphcnRQa2lYcnpI?= =?utf-8?B?WWJ2WXJZZEMyZUo3NHV6SEdWeDVTV2RweXZzazBCMnVZcmhQc3pJZllwanVa?= =?utf-8?B?bUlJTVFaZXZBNTZSM2tTMlpyVGpWejhsazRSRk9WSHZ5NWs5UmFwK1dvbk9i?= =?utf-8?B?T0RUVnBhbmtrbGRpcGZQUC9LMkNzSkFjUk8rUkhXRVhyZ01OQWVNcmFOWXkr?= =?utf-8?B?OCtzQjlNTXJjUEl2Y1pUU2VYQ2NPYkpXem1WZlVTUEh1cHg3bC9TaXdHeU5m?= =?utf-8?B?b1Z4OUphSDZBazl2bkpmNGg3cHdleHhlcjcvdS9uUjhEV1NzOERwdmRUbkxM?= =?utf-8?B?TzEwRVNJU3ZoWWhiM1pxT1Ywclh4NnBnOU1HZFJNaDZGSWxlMSs5TVZNODlw?= =?utf-8?B?Qm1nbVNGZWJEYW8yaEliclNWdUhlU0g4TWFOOWtucVdWWm5MQkd1VHNzZWNI?= =?utf-8?B?TkkxcmNENStXUUNEakJHTW5vUnFFTW5EVis4OEtvZGliZWhuU3hwV3JLaU9D?= =?utf-8?B?TGw3UnpvZFNTd2pGMjlkd25Md0RQVC81c0wxQkFxTnFyQUFiTzE4NXI3WjNW?= =?utf-8?B?djdvN1dMSGJMMVQwekVIVEVGSEVMQ0hzUjhiaGRiQkJWWVFnMnNqdUxDYk12?= =?utf-8?B?bC92YUdSNTF0RHpPK3hDT0crYTRvUDVwVzQyMnVCeDA0VVpKY3FvR2dITGZK?= =?utf-8?B?cXMzblZlZkhDZWZWVmMveGhWb20vZlFPNWovbE03bWR0NHFQeWVhWkc5YTFJ?= =?utf-8?B?MXg5U04yTDhJcmNDMzV6eXFWVVk5b3VabFFGc24yM25FZUZyL1NLVDd3RXVa?= =?utf-8?B?WmVtWnpNR2EzaEgwcTFmSWR3dm5PZVJ0citSNm8wSlFEczFVSWVzL0lOL3RF?= =?utf-8?B?NDhqZFdWZDArN2VQSitwZUhwWkROVmQ3QnUxdzYwNzJYN1BVVmhXbm56c1ZC?= =?utf-8?B?OFlIV2hXOTBiMmRPR1J0ZFc4OGxMMCtnRXVLSmtib1loSTdUSkVhOHRnSFpS?= =?utf-8?B?L2VDUlBpQThKcklXcHh0cU9ybTFvM2xjM0Q2R1pBUGl3UnkvcnBDSi9tUjZL?= =?utf-8?B?TVF3UWlkYUxCZ1ZXWmJaZ3FOWFBlTm13K3Q2Z3VvQ2J3bERleWJmWk1SUGNN?= =?utf-8?B?VXUvdXZ2MmF0R0lWanNHdTJWY21yTGxtQWE5ditGYk8yR3phei9GZlZFWVRT?= =?utf-8?B?RFpGeW9OWjh4YzJITnpmaGlrczZhd25aNFM5RmpjemZreVFtMG90cHZKdERW?= =?utf-8?B?M0N0dlJZa2N2N05RZVZmSm9nU1VBazIrZjBkUktjZStBZHVHUU1hVGR2T3FU?= =?utf-8?B?NEdaZ2RVWUxBZlVmTzhFMmxVNHN2YTk1TGJDVUJMd3dhcDVEdCtlb0FxRlNK?= =?utf-8?B?eXR0UmNwcTlYMERIeklmd0FyeHNoQXBxTzdBdmFkVzRCanFCdG12RWlSbW9K?= =?utf-8?B?RGcyQk5Ka1duejJOWStMQzVGSVJ2ODlFQ1JCZ0xaaW1xTVJGSHJaSnEvRGhO?= =?utf-8?B?aldJbmY4VHJUdjlUYnlGaFFTVXZEbFBRZ2NSMHlEVGNGT2RBSmw0WjJXNWhl?= =?utf-8?B?aitKNUM1aUxpQkdQRGNZdEQ1WExyMnlGSjdrckJwTW04KzJyRTR1RXB2UmVN?= =?utf-8?B?VlNNZ1FaY3oxQU4xa29IUS9BRE4xUUVibnE2OWVpNmpxY2lMNGt1K0lDYWpr?= =?utf-8?B?RWhSL0hlWDdlN2pnV2owZUl5cmY3TGhzeVFWdG90NGZBR0JpVFdTU3N6dEFa?= =?utf-8?B?SmxWZURxZDlpMDM0NWprNTRsR1pVVEtqQVVHWGMwbFVwbTIrNTRyOGZPOUFz?= =?utf-8?B?NUlURXkyV2t1VjVwMk9MN0M2U3IyWXE0cEtjRjlZRUFpQjAxRFJOMUsvL2l1?= =?utf-8?B?VnFxTG9HblFLQ0UzTTJzRFpIU3dTZ1pMUkI0UHRBUFRjNkpTdFJtY3JER3Zp?= =?utf-8?B?VXJRejJFWS8vKzcrckJlek1kUGZidWQrYlJVUUY3SGNZNFBZM2xsOEI4cFJj?= =?utf-8?B?REVJV0tNK2lKZjN3cWliUndJY0ViMkVEdkQxOTRKZWhIeGlXeUFuVjNNT01G?= =?utf-8?B?NitySlRPcncvaHpNZTFkV2dPcm00UHc0UCtwckl1ckpuR0pqZ1hNT2dQNXN5?= =?utf-8?B?R21zZkJBMFhCTVBlbnh4TmhGRnVJNjhNQndzaGZKbmtlZ2UwSHgvcFFDVnRy?= =?utf-8?B?QWczckowem9iZHJ3QjVBM1NIT1VldEljRFVoRGRiNVBxamFnb3RRdXFlUWVO?= =?utf-8?Q?eewOLDWxupgkNwx3jHT2MHsIAYdUNuBlS3o/UgQ/eW8H/?= X-MS-Exchange-AntiSpam-MessageData-1: AwxEv2x7MAmCPQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6c171324-65ac-4411-8d51-08deb5523b0a X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:56:31.6563 (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: RU/xw+wjKCYXdXAqq94XTVF1jAnXIxrXXEjZ9+oPqrfi16kfPTlldMPhlOaegn3SkqUUkM3ptcXMSb45/8BEig== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 Push the computation of the falcon data offset into a helper function. The subtraction to create the offset should be checked, and by doing this the check can be folded into the existing check in `falcon_data_ptr`. Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- drivers/gpu/nova-core/vbios.rs | 48 +++++++++++++++++---------------------= ---- 1 file changed, 19 insertions(+), 29 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index cadc6dcffefb..ca101b2b6095 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -846,33 +846,29 @@ fn get_bit_token(&self, token_id: u8) -> Result { BitToken::from_id(self, token_id) } =20 - /// Find the Falcon data pointer structure in the [`PciAtBiosImage`]. + /// Find the Falcon data offset from the start of the FWSEC region. /// - /// This is just a 4 byte structure that contains a pointer to the Fal= con data in the FWSEC - /// image. - fn falcon_data_ptr(&self) -> Result { + /// The BIT table contains a 4-byte pointer to the Falcon data. Testin= g shows this pointer + /// treats the PCI-AT and FWSEC images as logically contiguous even wh= en an EFI image sits in + /// between them, so subtract the PCI-AT image size here to convert it= to a FWSEC-relative + /// offset. + fn falcon_data_offset(&self) -> Result { let token =3D self.get_bit_token(BIT_TOKEN_ID_FALCON_DATA)?; - - // Make sure we don't go out of bounds - if usize::from(token.data_offset) + 4 > self.base.data.len() { - return Err(EINVAL); - } - - // read the 4 bytes at the offset specified in the token 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= \n"); - EINVAL - })?; =20 - let data_ptr =3D u32::from_le_bytes(bytes); + // Read the 4-byte falcon data pointer at the offset specified in = the token. + let data =3D &self.base.data; + let (ptr, _) =3D data + .get(offset..) + .and_then(u32::from_bytes_copy_prefix) + .ok_or(EINVAL)?; =20 - if (usize::from_safe_cast(data_ptr)) < self.base.data.len() { - dev_err!(self.base.dev, "Falcon data pointer out of bounds\n"); - return Err(EINVAL); - } - - Ok(data_ptr) + usize::from_safe_cast(ptr) + .checked_sub(data.len()) + .ok_or(EINVAL) + .inspect_err(|_| { + dev_err!(self.base.dev, "Falcon data pointer out of bounds= \n"); + }) } } =20 @@ -989,15 +985,9 @@ fn setup_falcon_data( pci_at_image: &PciAtBiosImage, first_fwsec: &FwSecBiosBuilder, ) -> Result { - let mut offset =3D usize::from_safe_cast(pci_at_image.falcon_data_= ptr()?); + let mut offset =3D pci_at_image.falcon_data_offset()?; let mut pmu_in_first_fwsec =3D false; =20 - // The falcon data pointer assumes that the PciAt and FWSEC images - // are contiguous in memory. However, testing shows the EFI image = sits in - // between them. So calculate the offset from the end of the PciAt= image - // rather than the start of it. Compensate. - offset -=3D pci_at_image.base.data.len(); - // The offset is now from the start of the first Fwsec image, howe= ver // the offset points to a location in the second Fwsec image. Since // the fwsec images are contiguous, subtract the length of the fir= st Fwsec --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from BN8PR05CU002.outbound.protection.outlook.com (mail-eastus2azon11011047.outbound.protection.outlook.com [52.101.57.47]) (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 227C833374F; Tue, 19 May 2026 02:56:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.57.47 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159405; cv=fail; b=OjFe/V1VfH7mGThq+n1bmNB7+3U/nXjKBsPjl19/crhmNHSTMn9ujQTpiobLo+/5j6d+CIWOifAmNj5xTSKooOs9Ie3nfymITSL6LuWQul3h47I/dDSkf421+otCgaHNIZIFFeSdit4VcalIG1iKdi0QZV84o/YRS+qR0BKFlEk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159405; c=relaxed/simple; bh=5rvjSO3OrQdf+biK5fq4PqhSdXu2fGSGX70KSAVWEYQ=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=AGDRdjlbzDA8/3eDDGL+mcs4tcZw/8u78Zu9vQBHDzKaej92INYUBCpPL7x+Wvz7ViZHwWc8Isu+Do+W0C3ZJGquz3h0fsb9gJwf7A07HnKhl1FeDSUOmauLel4ric04ktnCHF7ybQ2zQ6WOpA3vBK/V9Ct93PnrLHPX2hmm8K4= 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=aN6ZSGek; arc=fail smtp.client-ip=52.101.57.47 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="aN6ZSGek" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=arAV2DmYJDRWFOJpWJpyxXv9UgMMzaNiIgEHq/tcf6o138dm4PRTEWorXqrTCo1zcZEIp2RteXJbBgzB3z/n0//h3aVnzex3p1v679s0zp1zU92BcQsAoh69WKoWNSJ4ZtXHBvNLjDt/MM+qggUCcDl70XQuXUOm4/Zv9r8kkjOW5TRbu5uQ+E3ziyakVldebSNE0ilyudH7cgFMhuW07nmEEmS5D2c9t2JiicpDpT6VW517TL6pc5h9Gc1QjSHJz851LWGfKqAV/inZGc625hlTS76PRCpIWiJLMmElIF6Swv3MnSDHPv1Yjon307Lpm/uQBr+vEUv+QcQIGEFwzw== 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=ryEDFsZLlk/yFGi+8h5kArYkPbyO7s6gXZb1yslJogM=; b=ZR2s3fk6AceCuhV8m8GEV9fZJB0+olMgsl5cdknuiweuURSg9tySsMOOqAYRP/3pkGzNTWpGDsNcNKM5vksZuOLXQEsX1p079z29ZkuHC+sUZOH2NoEG5jfX97N3aITB3d6V/Qeqak2DOS6bSs4exzNg7Pvf5q0UYzv4li5QWu5N1sqJulJ0PbIKZDgmNCtnAtEXKEcj7xRtwVzY1PEU/5wLk35/S4TFTgRwJ7dtPthgrhe5MDaaawWn2Q8oERe0CZKTo0GCIz+WhzwY0xNGSU3xEff7eaV7ikzpz7wKgMDAN8Cb/aYrXQw5hSE61jozs6VkVI+BrGVTOou+w2NADA== 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=ryEDFsZLlk/yFGi+8h5kArYkPbyO7s6gXZb1yslJogM=; b=aN6ZSGekRb8V5a62lhPwhDD0uzIXhZJ44GVyjsvbRrKC9z/yvc5plsyoCQ5lPzlSFxF4Nr5LDxqATNvPpXc67h9Q6odDL0vibFMGdlFgcg4tX0wggxJ/v3Iu5H54ivCN+AVEsyD+Dp6YZHLeqJ2+hFd724kpBSvvU5gKNDYzIYAKOjyw4hPBcW+NaSuVTyJ1OXg86/wHRN0I1V7wT+MH8HNukk65yfZ69QxlunhEySS42Ec1VmK8b+fyqRFa2nbH4eRBDyCt8awAUFoigjWxEGUPkb1kbCDwshcI5Cn1cLsdScAz8DCwbk9VxUbGors4lIZrivieqQFGisKzyxgJxw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:56:35 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:56:35 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:55:05 +0900 Subject: [PATCH v4 11/20] gpu: nova-core: vbios: simplify setup_falcon_data Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-11-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney , Joel Fernandes X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCP286CA0325.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3b7::8) To SN1PR12MB2368.namprd12.prod.outlook.com (2603:10b6:802:32::23) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: df40c49b-4da7-4983-a262-08deb5523d01 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: pS+gDp2YlmGXHZzZpyEha/RSH2fS6z4WHmxasXwAGfE/NZhvbQZ+Sps+jgObPlmMUQPPcwhZWO4IxpgKg12rGSc/h4x9crPxbfTuwgowEI+H12MB65e+T6NFv5Woa0J/f3OgUlq1itQxWGrrMVnmxCMyct9/Y2M24C5U4RPI4/j4ADBCgSyjme62Olq/vPR6V2IxcVlUkqoT3InHjrJ5GLLvOrefsG2rYjmLBNj5i16Tsz/qYh8ZLikCvhTntuFA9I+oQtUfDeOl7cjGwNthrZyKAaJI7dqj90Vpu3SyWKa59uoOBsBai5OVflxz6Zu53aPI4s2GOxFueX9wqNhj9OS5gfppZsJAVIE8KIBuSrjjnm3d3toXLUG03vck8PInrSlv3EBHxvQ7NxYq1NOxwrrNsctbNjD88c8qb81na/SvlrliwrR2uZvPQtq/2KRsJwDCkQze/aGn72S6aYDTllrURa7LxbKTEtMMaHy+r+ERfGKrEqfUhDosZfFU0I9JA4AuKO3qoDufQuUvN6ou7mu9Ly5MbmunhAWgBDLTMOSSwi8zONPXenssyiZ9Z93KdKSAHDCygofno2TEVx6jAlom+jIpYR/GXOdITa0UORYMZAQ8L+7ELs454C/+fvRqjJIkbS0F/MDY+X/n5QqMb6AN2JDtZ03NRpxJu0asZ7AxI137GQgYTEns4HGgsJrv X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UGJUSGxIWnVlM083VFlPMEsvRjBXVWora284R0dkclJ0eTVJTHpFd0dLdDNE?= =?utf-8?B?MVJ5QlM1b1h1dHAyOWNEQ1VSdEpkeUJVcWpXdnJtbGlYQzZGTFpBTEw0cHdm?= =?utf-8?B?TW50QVpDSGdERDJDT0lzNmlGLzJ6RHBkUytVNkprVmtaK3MxdGlhY1dWbkdE?= =?utf-8?B?L0NMTEI1bDNUR1lTci9MWEVpckZmSUFZbUdYMFRqbWVzYnlhSHAxcWZaTTBO?= =?utf-8?B?SnoyODgwRWZ1MDVWTzQ5Z2g1d1VnT2tpemZXNmFTb1RJVHRDT2dIWnpWWGZQ?= =?utf-8?B?R2RJcks5ZXhvUHo4VGFXeWxvYVZ3cS83eWxqVFdCQnQ4ak9XVjNtTy9McjB3?= =?utf-8?B?d3pSVUgwQ25hZE9CWEU1U3Q5WTdBZk1qNk13ZWFtQVh4UU04c1VYWnFFYVh4?= =?utf-8?B?OEM2MlFHWlNzTFpqUUNVVTZvTFNWSmI3Vm5QMFZFb21xajVQbWJjOEY4NVlo?= =?utf-8?B?NDdNWnd3M0RETlJrNWVPTFdYSlJ2S01CRW9qOWg5MkhHUGVkZjlOM1I5UWhZ?= =?utf-8?B?WWltNCs3SVNOTXR6TkFFeE9pbG1IcU9PVjRUZmZ2Y1c0S3o4THp1N2xNcDF0?= =?utf-8?B?ZVRSb1N0cCt0YlVEaS9aSHVvVVQ4cWpqaHIwMDZTaVlQblMwYzdHblZuaDJF?= =?utf-8?B?R3dOaVNVU3NFQSt5a3dPR3NjeW1XbHdhRDRxcXdPNHYxTWd2dzIzMTdZUEMy?= =?utf-8?B?NUZqTEh3Z256cmtveHYwY2c1cExkZUg4UlJPeTFCLytqT3gwSnp1OEtMNXpr?= =?utf-8?B?ejFDdkN0ZjdQTUNXUFpoZ0UvS0hiWnpqYXhQekpYOEJVTEsvSDZiNkdiRWRZ?= =?utf-8?B?bnFQUENhcmxuTlZPVGZGN2JDOVM5RkU3RVR2MGhDUVhxcHMrSDVCTUR4TTUr?= =?utf-8?B?eUVzN09JUkdyVHE1cTRKbjJiTTUwblQ3Y3BxUGQvSENwMTZwV0FEVHR5VmhH?= =?utf-8?B?U2Q0UkltbVNTL215STBpMzdiMXlTY3Z3cytRUEJlWEFpVnE0TFYrcWhsRGxK?= =?utf-8?B?VlNKRVFlWHNHUGFmcVcvWnQ1RWY2dFBFU29GQ1FDUWUvbUFzMm9JQi9zbWEv?= =?utf-8?B?cGxxYVcyN0g0VnhUT0Yrb3VGbDhKZ2FDSmtaSjhpZURXdjRpaVJ4Z2EyaHcw?= =?utf-8?B?K095eHlTZGpHQzhGUk56UmFuS0I3ajQ0U09MSDJ5QXB3aHVkUWFRK00zcUR4?= =?utf-8?B?QWRiY3VwWFZxSEtMZ2NrOXFOYjh1RjlxSTRDSjZaT1dOUFZFRk1tNVRSUWgy?= =?utf-8?B?V3FOcjFvY0U4UUNjV1B2Z1J2MmhFRlhBRkVxZUZEa29Jbmcwa0VneGg3U3Jw?= =?utf-8?B?MTFWRE1WR251bllPQStNL05hQVY2NmJaOHJqZWQ5UjBwcjhNaTFHOFJzeXRJ?= =?utf-8?B?dUlmZVdMYU5oclJGTnRKWTZtc2dKdVBPRWVHRkhJRTFPSUNmdTdoWGlWWlZ4?= =?utf-8?B?TDVxckdOUzhsdmJ2MEpaSlozOVlDNzNjNzZraktHRHBvaUV5MTRHcmlZSDhm?= =?utf-8?B?c09BMjdlSm1VNkVhd0k3Uk9ONU5nTFQwUnNnS0tETlFZM2U2MmVIMUhMeTcx?= =?utf-8?B?bjlhc1RGMHJzWnd0bXhwVGRlT3Z1UkpvVXhDemFOQm9kVWtZYjVCZWpmMndi?= =?utf-8?B?RHRRaTlWaktkR3dvZjRwMXhobmdDUEdvaHA1KzdMYTc4OXBLS3E2MlhnSDRY?= =?utf-8?B?UVh2YXJ6bWJ4UnE0aWFES2VLVHFCVmhxREtGRG90U29pS0orYmlLMm8xV2hP?= =?utf-8?B?QUJsd0hHNXVkdTV2b2NOWXlXZEVJZVNMNmVRZjJIejhoVFhrWW5QMjBQMTBz?= =?utf-8?B?SmdPN0VtdldISWJMZVVrQmNXRmlCQ05uczVtOXp6c096OTFRYkxZZCtNTith?= =?utf-8?B?VFAvNithZVN1bE55cm9hQnR3R3R6L1paSXpiOExRbWZYVUNzeHdUNVBFdDkw?= =?utf-8?B?OVRhTkRNWFhIb0ZDNyt1bzBsdnY1ZXV4SzZ1VFpkSzYrenRkNTVNcUZ6T21x?= =?utf-8?B?WkhYRXhHTHZPNXpDaU1BcmhGelB6Q3BHT1RJTFZIQ3BEc2JqeVV1dzJTY2N4?= =?utf-8?B?VmVOalVrSlA0OTdSNHRReHd5S25VRXBQK0lEUDhLL0hwb2FkczhjMHh1K1c0?= =?utf-8?B?UGNaVEo2c2pxNGY0MUZNK3BhaUZoS1J4UFlrN21xNkcxekU3enFLeFhoSm5n?= =?utf-8?B?S1BrbTFiaXlFR3dNT2t6U0g4SnVMUGRXZXF0d1Y2alJ6anVvSWtvYU54RzhG?= =?utf-8?B?RTB0SXQvbDAxV3JWdmZiZjR2MVQzeFl5aS8xdjd4NGlQclJjZkREMnlSemVZ?= =?utf-8?B?Y2w4VE9DTUg2SjFlU0hJY0FOSUI0S1M0MG5FSEhjR3NmdWpMRGpEUEM4cnQy?= =?utf-8?Q?sUOW7NB+4NdUqMs3InUr7DfzBGsb/zRZ4Fh/l3A9ETPJ9?= X-MS-Exchange-AntiSpam-MessageData-1: 3ZeDycNKylMAMw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: df40c49b-4da7-4983-a262-08deb5523d01 X-MS-Exchange-CrossTenant-AuthSource: SN1PR12MB2368.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:56:35.3610 (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: Tf/bteqe9JLw55b3QygSlaLv2Bnrm2s3qWxxscCbEtlGU9rgtCx8MI7/fzELZXceKMTaVHsxdiXpFBo9aONarg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 The code first computes `pmu_in_first_fwsec` or adjusts the offset and then uses it in a branch just once to get the correct source for the PMU table. This can be simplified to a single branch while also avoiding the mutation of `offset`. Also, adjust the code after this to keep the success case non-nested. Reviewed-by: Joel Fernandes Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- drivers/gpu/nova-core/vbios.rs | 54 ++++++++++++++++++--------------------= ---- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index ca101b2b6095..470e0e2a81ab 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -985,48 +985,40 @@ fn setup_falcon_data( pci_at_image: &PciAtBiosImage, first_fwsec: &FwSecBiosBuilder, ) -> Result { - let mut offset =3D pci_at_image.falcon_data_offset()?; - let mut pmu_in_first_fwsec =3D false; + let offset =3D pci_at_image.falcon_data_offset()?; =20 - // The offset is now from the start of the first Fwsec image, howe= ver - // the offset points to a location in the second Fwsec image. Since - // the fwsec images are contiguous, subtract the length of the fir= st Fwsec - // image from the offset to get the offset to the start of the sec= ond - // Fwsec image. - if offset < first_fwsec.base.data.len() { - pmu_in_first_fwsec =3D true; + // The offset is from the start of the first FwSec image, but it + // may point into the second FwSec image. Treat the two FwSec imag= es + // as contiguous here and subtract the first image length when the + // target lies in the second one. + let pmu_lookup_data =3D if offset < first_fwsec.base.data.len() { + first_fwsec.base.data.get(offset..) } else { - offset -=3D first_fwsec.base.data.len(); + self.base.data.get(offset - first_fwsec.base.data.len()..) } + .ok_or(EINVAL)?; =20 - let pmu_lookup_data =3D if pmu_in_first_fwsec { - &first_fwsec.base.data[offset..] - } else { - self.base.data.get(offset..).ok_or(EINVAL)? - }; let pmu_lookup_table =3D PmuLookupTable::new(&self.base.dev, pmu_l= ookup_data)?; =20 - match pmu_lookup_table.find_entry_by_type(FALCON_UCODE_ENTRY_APPID= _FWSEC_PROD) { - Ok(entry) =3D> { - self.falcon_ucode_offset =3D Some( - usize::from_safe_cast(entry.data) - .checked_sub(pci_at_image.base.data.len()) - .and_then(|o| o.checked_sub(first_fwsec.base.data.= len())) - .ok_or(EINVAL) - .inspect_err(|_| { - dev_err!(self.base.dev, "Falcon Ucode offset n= ot in second Fwsec.\n"); - })?, - ); - } - Err(e) =3D> { + let entry =3D pmu_lookup_table + .find_entry_by_type(FALCON_UCODE_ENTRY_APPID_FWSEC_PROD) + .inspect_err(|e| { dev_err!( self.base.dev, "PmuLookupTableEntry not found, error: {:?}\n", e ); - return Err(EINVAL); - } - } + })?; + + let falcon_ucode_offset =3D usize::from_safe_cast(entry.data) + .checked_sub(pci_at_image.base.data.len()) + .and_then(|o| o.checked_sub(first_fwsec.base.data.len())) + .ok_or(EINVAL) + .inspect_err(|_| { + dev_err!(self.base.dev, "Falcon Ucode offset not in second= Fwsec.\n"); + })?; + + self.falcon_ucode_offset =3D Some(falcon_ucode_offset); Ok(()) } =20 --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from BN8PR05CU002.outbound.protection.outlook.com (mail-eastus2azon11011047.outbound.protection.outlook.com [52.101.57.47]) (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 C6D5E332EDE; Tue, 19 May 2026 02:56:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.57.47 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159407; cv=fail; b=hPRFapxBNFQjnD1kXi5q+8gezpNgV6NyaM76aQSG6hjHwM2CSiTvTP90Z4kfVNjzmlLTDM9jSKA8KMNzeilWza1TZ+9gAdct0S2QKA/Omftuq+U2zVuTZGswW5XttFI3+kdscQOPsp2fWcrKTq6vsB1quhZumSuGmePIWfC46EE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159407; c=relaxed/simple; bh=lhVgK2URbRgTx2jdqwgbdH5XulIn3SBpFbQBDjCv3H4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=htwIXgqzWWsdBeFkpWvtxcKQkOFGKZTZTeRiGlduEQdjuNMKAn4dvNGPQVh+eRx+LsMmfTiuAgXTEMT9iFNh5LixMmLdTqnmXJfibx4Lb5l6guCxgBcbTlcnW+KsjlZfaFrUn/03kGFi1Zm3bcHTeEeBkoucnYOUUCOoy0Sxs3k= 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=aBh76E/d; arc=fail smtp.client-ip=52.101.57.47 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="aBh76E/d" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PmWywSqlf7q65nfLF8YzSbk3rQjffPLXlhwfEIqdEXCixTQ0pZOWwAULOKFC3hCghAzGopZ/Tsbg45cEpdET+Ngck0KGAV8eM1eIpExwcacRqlnjEDQvbZrmfzeWQqGhTnxkxiKxJRbDHw5xwtpKwGIJTJ/jXQGiDuG/j63LwcUxp07f9iXnQBXrey0RPSl0JmiMt1xhvveQiXdl6VO8sbmGPJHNdF2V9kwaDQFGPpbmpoVTFUqNmaZrIc4k9ETiPdfRYBZNHAL2PilsCknIrq66KyPf8zv+TOgKT/EDEsW/CECI9uIC4OVLt0M628aO5l5sOkIzHsx6cSWUZK5xUA== 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=brNkSIBTkhotVADSJ+tuRahs5m+yIuPheFS8GVaCZnQ=; b=m3J65Bv4E72vecQo5tPjP3Fmyyh+2gLqkg4APCG9wTR5131Wv7dPrGEUP+lLItwmIp00RSwN8lfxVI0Gu6hrjzUNBQkp1NMbndZoPLSYU2D3XP6bRZrNN02WYMl68ndJWivz3iGll0gEO+V2fIdQlU7/BagP4qEi7pqELZXcUQ6OQ3K14rqT0iN5ka8my91kgDgErOINK+KvpZfRb8md4/z73LCkHlgvkINpVJmZR0QQ51MMxCRBS+LDKKO9PZhwfJ6zbMeSjmPo3RtRbKhRP6NlznOZb6BHMrWoadMo7iAGv5PT3vaWr4ChTlCPE/7Waf0XwLB1u0B85hLbw1v6tA== 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=brNkSIBTkhotVADSJ+tuRahs5m+yIuPheFS8GVaCZnQ=; b=aBh76E/dSVhmq4jiqaxYomSx0rxAYl0v/KZQNPzs5obFloLWQM1DO4PMJa7q+OpVI+nu3Qqz/YchA+VpnZdw8X736/oGzUWkO3OfNigPtj7Q5+Z/z05jArrqI5aaLaOGaOR48TtpXOgBt7xcqLKmZXU2AP6uW8krDNgNDF0h+/nnfGbEK3pz655/vNSV2fxp+NjgVqWIzJWQjDoV1cEYnIplcV+BOtXPhYtGuKgLWz6yaOm27XMFW6X/uZXs2u8ZuopW9yJ5Q/yxicudvbxtZMSMAhLfSjpwiyWOccC5Wq6kqDz1G5Y7Ud2VqPGrj5InXGK+qY1Tadi/vBUxtynolw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:56:40 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:56:39 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:55:06 +0900 Subject: [PATCH v4 12/20] gpu: nova-core: vbios: read PMU lookup entries using FromBytes Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-12-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: DS7PR03CA0169.namprd03.prod.outlook.com (2603:10b6:5:3b2::24) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: efaf3b8d-fc71-4154-2040-08deb5523f73 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: /kD+07EUb+iM1BPuefm0yjy5WK3+SY7KDJiwoXq/npXt9T96R5y7V8UOkB0MeLavgcwVQOnw3iKwYLVf8i5MVicm65OSkbQoNM705wBhzmMa8pJd2NClLTkOHDO0/ycf3xP5dCP/cr/08p0B0snWAFgHzZc10KBc2DZeSsSJt9mbhQdqRmj9xMFCJOSVhQfUpm3y1EsSugxjHXpI3VBN9C1t2Ce85BU/99+/1o/4I7isd/0uP5kFx6Rnd1sWpBzFF43cDT14M1I1n814c/Cr7YbQnnA9SvqtNBW9tK9qx2hRBmgiD6yaF1/HDFkzw0x1CiGnEcSavARvjtxPlGNexpkkUpQ/rtQ3wWIu1rZL9OYsVJDBjvQMixVpmVfHJfW1J8cF9XSvH6/fdRKtOl8/SAo4oC0glmzdeLTyMpLPtWQZxh1KWIz0vBPchh6ZvMRr5iF4nRBzOJjyV0wfTV2asEbj2WkRpPgP082YbM16jcHXPd0VXBUUwmNVgJs9mVjYPTdZ+Wx7BF6XdYmPuFbqRUAy7fopLkU1Ckn321caGMlrt4GmZKx9EVc2iZes2BCDSm0OhbvlNVBWPcDdmiH/14W5R6XJTsAIJI7Ea47f+fLJvKP/6Ory7VtzFdQW7jsAuTRtfej46sxuQ3+gbTH1NN/j3Ig7Th+tFpjOmhwSbRtgW4AwEPjk2bPulIn+P6IT X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?N1ZJbWdLclkyVnAxbDVBZHo3UXBJSTNtTy9PMTlqK1hhbGcrcllEYlZPU0Rz?= =?utf-8?B?WHZxd1hEOVpOdktrdklVVDRNcHR6bVpyeWJUZTFDTmlGZE0vZ29PYTlQaitS?= =?utf-8?B?Wm1QbVowTUQ4ODZOc3lzZGZpTys2OEMxV1VPNjVJV28rVEtLdlNmR0l0aW5m?= =?utf-8?B?MHUrYmU2UTZpQVlIMCtVNGYvcmh3U1RVdFN4SGJxUDZEb0xPanZWSURIRStR?= =?utf-8?B?SUFOYkF1bVcxSEwzUVdHaFVFOWY4c2F2NUkweVRJUk5CaHRpTTNObEtPSkEv?= =?utf-8?B?Zk4zQ2FERXZ6R1pHRkhicW9WUmo2VXQyT3d6U1VoM3ZyQVZkNGc3dEpTZTBp?= =?utf-8?B?RFVqbUdFL091RjBZemt1MTYyOGRHMHF0SHdWd28wem1taVBrK1lJSUZwMjh1?= =?utf-8?B?bUk2VzRsMnVJRmI0c3lHbzgvUjFOQTRqR2kwd0Zsem5ucTlSVmJCMy9SY0ZX?= =?utf-8?B?a25OdllVaGR2SHdxM1BIVThCUFZ4QnYvVnBlODNEZ28vcHZ3N0FHR3l2WXYr?= =?utf-8?B?SEJNM2lqRS9NWTVBVWx4dnk4VzB5QUZ0emZZVHIxUE52S3M3bVNMcy9lamUx?= =?utf-8?B?RnhIcVF6NXozTFVEcXRkTXhpSnRmSDE0aVNIWC9LWmE1cjhzMUNQL0dOd2dj?= =?utf-8?B?WURIak9yOW5KZGp1cmFWZ2FNbmNXWnZFTVdveW1Hb2hQWERKdXdUWHdRbnlI?= =?utf-8?B?RnNGRE1CcUY0SmowYkxWbHRuOVVmQzQzdkJHZUU1R25ZZC8rSzIvOW1VVmx1?= =?utf-8?B?MlJhZjFlTHZrWHpsU0dMb0R2U0lPeEkwNEdtaEo1NWs0ak1GM2pabkpVWWQv?= =?utf-8?B?Mm5NcGlLUFl2dUJRRVlJUDl3cWlnY1dLQkk1djdsR1U0SEVwdGFCUXdzWkJq?= =?utf-8?B?bXN1dzk2ZGh6ZGRnb3VTUjRtTmxJakVZcDRTT2NEYXJVRTdXeS9SZUZ4Q29r?= =?utf-8?B?NWFEMHpTQVpPUG9sMy8vWHJ1djBxTlBmdjhmWk5nZSs4dCtLOVd3MWRzVFA4?= =?utf-8?B?L3VCUlJKeDNyZXArNEdWOHV6b2VtQ21SOG5aQnZwZkdFUjZ2Y0l5c1drNExy?= =?utf-8?B?bmdNeU11NFdwZFgzS2NPbUJmWVc1MGo4RlM1bVZ6bW9ZeStlN0NUMmZra1dG?= =?utf-8?B?NU1qclQyaHN4UHpmV21nOU12UDBUR3g1RVo1OXpxSWRqcTRYQ2taZm0wRXRH?= =?utf-8?B?VndLajd1NTljMlNrb1NqOEw5KzlnTEp6bFduVktrYTJuNmt4Mnp4a0RhaDVl?= =?utf-8?B?a2FUSXY0a3BNWlZpRlI1bGlpa2RQcWJFYlB4a3Q4cElLOTZjczNSWEQ3N1B4?= =?utf-8?B?dmMxMjVVMHl3L1FDaFpOR2lKQ3pKVDhVRGJtK2J5NFMxSG5xdmUya0xnTThC?= =?utf-8?B?NW80Rit1ZnA4T3lxZEZXY0FWZk9HOVM2bThocElUaW1icEN4VkdqTjFheTAr?= =?utf-8?B?WkhzbjZRbDErT1B3NWI0MGlJNVl4dDhFTmNhb3pvYjNIU0tydzRVQWp5aVdi?= =?utf-8?B?TWxUdUk1NGd5UjdkOUFmNHA3N3JCWGZKS09ZSjZ5WlAwNEh1QWxNblBrNUhp?= =?utf-8?B?Qy9FYUx6WFEvOWlEYStZWUJvL1BWdmF4ejhUNXdKTlhoeU8xeUpHZHpBN0VV?= =?utf-8?B?bzJ6M0NZOEdENkZlTXk4ZHVqQVY1ZjBLekhhcldmZlRBWkdPanQzVGxmTjMz?= =?utf-8?B?NFIvcFN0TUdzMXBSTHlyQUUvS3RBZXdFRGR0VDJnZ0VYcU9QNm4xeW9tZXVJ?= =?utf-8?B?dXVKYVdVQ2daTDAzTmd5SDZ1d1R3RDNSOGdKcVpjMmxGczB4NEhybHg3alM3?= =?utf-8?B?YXNrTkdOYWFhZ2t1bzJZNHJmeUl2NWZ2R3RFZE1TQW55cnBCeDk5RVQyWGJS?= =?utf-8?B?TmtuWStBbzQ1OFF6SzFhSXNRbjduUVBVK01XV081MWJVS01pVFJVYWlrZ3hj?= =?utf-8?B?eVA4N096OWZNQWI2dk5mNzRIZ1FneDBReUNxR0FsT3lGUEREM0VqeUlUcTFt?= =?utf-8?B?TW9oSXBZR2hDS2FwSktZRmdXOUhEZzdMMnorVkRpRE9OajlSUFByUXpUcXlY?= =?utf-8?B?Y3R0aFhYbmdaV3ZmSzc4dmV5QWRFVGZTU2M3SGQwdXZLZnZNTUFnRjh2ZGRF?= =?utf-8?B?S01tMkJrREhqVGx1Q1QxWm1INEFhZmZxVjU5THJMSjFGYWJZRW44L2VWRmZP?= =?utf-8?B?RXE2RE8ydFVtaHdSWnlRZUhVMlpLRTZQVmhXajUwS2VrQmRydFU4TVh1WnEw?= =?utf-8?B?RUZLTTZBK0VLWlBIeFB4N2hQUk1PZ0RneFI0dUJhNE4rQVJ3S2tBdXNsYVEv?= =?utf-8?B?U3VEcDZ5WFp4VllITWxDaDhjcUJ6TUVEM2FSQVJNY1k1d1V3WVR0c2VaaW01?= =?utf-8?Q?+MFyUE5f9iSMF9qOlOLvVoMBiy33yMekPC7Xh5vMoGQxx?= X-MS-Exchange-AntiSpam-MessageData-1: dZ928mZ0ggH0Nw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: efaf3b8d-fc71-4154-2040-08deb5523f73 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:56:39.0541 (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: mAWMKNdSWJQFThIxyMNUEz95Bu6SoPUbImJpR7cwUlS4x3EXDvMCN1kfYHW9MlaCG+6fBJOMX/v9ZavAv4z6Ow== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 This simplifies the construction of `PmuLookupTableEntry` and is allowed now that the driver can assume it is little endian. Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- drivers/gpu/nova-core/vbios.rs | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 470e0e2a81ab..987eb1948314 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -897,19 +897,8 @@ struct PmuLookupTableEntry { data: u32, } =20 -impl PmuLookupTableEntry { - fn new(data: &[u8]) -> Result { - if data.len() < core::mem::size_of::() { - return Err(EINVAL); - } - - Ok(PmuLookupTableEntry { - application_id: data[0], - target_id: data[1], - data: u32::from_le_bytes(data[2..6].try_into().map_err(|_| EIN= VAL)?), - }) - } -} +// SAFETY: all bit patterns are valid for `PmuLookupTableEntry`. +unsafe impl FromBytes for PmuLookupTableEntry {} =20 #[repr(C)] struct PmuLookupTableHeader { @@ -963,7 +952,13 @@ fn lookup_index(&self, idx: u8) -> Result { } =20 let index =3D (usize::from(idx)) * usize::from(self.header.entry_l= en); - PmuLookupTableEntry::new(&self.table_data[index..]) + let (entry, _) =3D self + .table_data + .get(index..) + .and_then(PmuLookupTableEntry::from_bytes_copy_prefix) + .ok_or(EINVAL)?; + + Ok(entry) } =20 // find entry by type value --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from BN8PR05CU002.outbound.protection.outlook.com (mail-eastus2azon11011047.outbound.protection.outlook.com [52.101.57.47]) (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 76E3F33A9FE; Tue, 19 May 2026 02:56:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.57.47 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159409; cv=fail; b=SVWME1x4y4vJrQnXDvnnXxhOtdJz9+NS6+bfs0IuOLKdvRbQEnV0sc3MQijlmW/K4kftgctYBrMAK/RJjY3kXNKi19vRP+8v0pXpWlEDNFF1cazM8yoVJg6xVpNcNsch+XF58eeazekZ26zWJ4DWQpjGHN5NibDMDS/zhXZyyL4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159409; c=relaxed/simple; bh=i1jDjsdtwEJpaLNuosIlj7aAryii08J7iDGTjp+mGWs=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=XGmSlf8TFw3tNF6F78FuEmlJcM5rwXrXA7AUcnUwuYrdrTM6PZr8iNzAehkyIVCpvbCjBiEsZ3D0bmTiETAyXu/9zRAMTK8KanVyyxvASAIvZboEoLs0pNbPRJZE3hnrHEWjppYzFnthUZNtVundkK66OYkPPw0OlzTYnL+2awc= 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=rnUQc4s1; arc=fail smtp.client-ip=52.101.57.47 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="rnUQc4s1" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AgY/9/0DfTLay/TfD0lj6dEmeJ9tgWdTgPjfzSxpki0AOrSsmBzRioKWiEtgk9ViYrP2L3Izj1OSmLBvOUlD8SiCyK1On9ViqUT+J52gmIcmokTQibtYJ3yqrXRvAcPVXixiMV+FW99FOdLJ4aC3YW4FTZwbU3IJEzPaKrc1OhbQTVHcpEDXdnJUvvBd+7J18e125IZvhXMbcmgNvUJOxzex69/U5Y2HcgaWH0jy1iGbClnZV22LOFZPXvo8hqoSa4cIN8upjStooWpi1n9CNH1a3S8Gto83aDd4xCBYQKY/5Z+dr9sANbMdD+4tkyHlB0J1M37Cg7vu0EA1/THr3Q== 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=wEfa62HoTMZJSCetwgDtZT6HnrbtvzV7CBoii9s0FCc=; b=UIll69rJRpNmt9il9hW073hGNJ3Pci929AxjnHY2Cta8kjXPU8EJQTIf4o7vLcbJfmuJy8spbwUv6IDWU8CKNpje9T31krTIJRYOnID0+M/ONspl/cguMkk6vzgm8Of2XMr9CLQ+yIddZ77mvv22/19wJr2IiVGgzfv0FKqizgU5Lvoag+HWCZUuOFlMXXPnhdFlA9VXfcRdMSn7Kt3LJZlqqmN57nZEbdX8l5iZvGdbHGciwP1z941YAARngTs3m2WKg0Owygk5pOTpTw/tTM+e9CtmIIqM0eIoBGzltkS4AIBUuOnr7MCIOGLY+9ZBYIo8c0LBuocwIBS2D9JCoQ== 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=wEfa62HoTMZJSCetwgDtZT6HnrbtvzV7CBoii9s0FCc=; b=rnUQc4s1II9rc8AZhlNThMgAs5+ajPnqDLiJvfk0aE+o5Lou41Ueh0qkWWYTEWJ2yDWsr1BBKjAdSiXXhmI9ojcmn4iWpKjrBWz5oSL1HDR265QmV6OOKzVeKp80xnJU55AwiLPK8esK53b9h75Uc/IuokiZR4GUvg9Cx5paKCbJ2Cq7g63DSKxqNhx7KxzgTcv99kU8N7b6D3fivQPxYuHswzO7tkPqmAr/5TLJCo5eZeoltkd6F+l78LTjOEPjx2R2ecWiozgjorSpiz5G02pdDi/8Y13dKe8Jc8wywc48i91p9Z6c+LbHeTNRNZxr3qTrEiMGIHwjzwpdKh0wcA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:56:42 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:56:42 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:55:07 +0900 Subject: [PATCH v4 13/20] gpu: nova-core: vbios: store PMU lookup entries in a KVVec Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-13-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: DS7P220CA0046.NAMP220.PROD.OUTLOOK.COM (2603:10b6:8:224::21) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: 10ce906b-a70a-48a0-21c1-08deb5524176 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: z8mVPfTFu6ELcvDIv2Cq+M0CQ8wehQ3hsXxbgSfMAE4shewdDNgFMlh2DEY8xQPvkGlUAF0jJ9RUTyll+wrkxA4Lbz6z+MrV5o4QbG1MRlnE4WND73D6zGPdqRRChUbHOIpedHQwjrAkmLhmcdplPmJZ0R6F/VtGF9UySf5VW1VpjRjbwoJQEe4uJXoF+BmNUaXY7lD4TZ7VnefK9MiJntmBy0zqe5Mdc29yWSvvdEtk6bM3e4j+0bcVOfiCFE78JJz3wbPgUzU6zJyQozeTmM0jHJZ71iX+yuJYwUrdXrNgU8VTt3jkW/o6QZaC8woXNCiG7oyUGFQHfy+rBq/C6MmbZ5ZDsLgW3gNeS3ZpkwXMcC6I5w98Zr6TsB1fY0UKZl9SFfMXDlWV7LFOp3B+h0mGUW4ok98uOD72oQKIzt54Q//CRJJxoDEAjB1A0MAUGWsQ5IXv7nG9nX9FF8fpgibWWTSuuNyq/2Hh9xm8g2VGZNAyjcO2GZHrrAExldFdkWd4KOxiUEbOaBl5Nzlyue0FsD5r4tU9G2sd6asCLp1D0jJ2UNPL6WmxNTwLBFeZUZMa1ljv4V4SN5upHa7QrNg0m9DTX/5wZd93yQo5x8H8VHb1JnhvIRXeZnYIBOwQ6sf/9IGoAlzlxLbsCBlMlt3tEe1Xq0XU3R2RR0sL8JVziPWkBO5NZoDMxSKGmJJI X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dEdtY1JlQm8reTFSQm9vb2tOOXY4VzlnVWtLbWRJQzM2WXFZaElVVmFteHlW?= =?utf-8?B?SU1WdjRwdXZqMHhHQ1hwUDJ0ckRLRENtNEd6VGhaV1pUV0Jzc0ZxdWVYbUxG?= =?utf-8?B?cjhmMCs1NXJleVBJUGlFSTZsMW40QXlITTZrUHA4c0l2V3lKcGlvSDhTYy9z?= =?utf-8?B?SVo5MWc1UkdRaWVsbzhCRUZWVjlHdFFGUXdhc2hZdlZrTWFMMkhMbGJXWWY5?= =?utf-8?B?bWdVR21JWURjWjNxNHB0ZWxVNS9pazJaU0d5N0xuQnF5dHduc2l0SjZPem1p?= =?utf-8?B?bmluMGJoUUZtUkVpbitWbWxjOGcwaTVDcFlScG5zN0p3RDRDY3k1S0NrRUh2?= =?utf-8?B?Y3lpQnlnRHFsYVR1VXZIV1ZSWEFWOUlJdVQ3NWVreFBBQmxuU0lLNVRqai8v?= =?utf-8?B?TWNhVlVTV1RxVDhXOGlIemxZYXREeDhIRTJGakp5UVQxOWtaKzZLU1B0NW9R?= =?utf-8?B?eXQ3MzZ1VjltOFN4OWNNTW1tdlRLMUdzQlVweDhvYzhvbFgzd2F0eU9aRmRZ?= =?utf-8?B?SCs0TUFValIreFN6V2JQd1VlZTYyQndEczZ3cFZ5d3VzSkovcXBXN1J5eGZw?= =?utf-8?B?NFVpbmxqMHlZU0N3Ym5KdU9qRDdOWXpIOE9vd01aZFpUWHdaYmNDbG4yZi9n?= =?utf-8?B?MzhFd21pMHJWSE1LZHU5RkFrdStLRjZaQ2xtKyt0QStrZlFVNnBad1F2SHFU?= =?utf-8?B?RjlzOUYxQkZqcmdrbVJLbVk4ME9KbmpuVUxQWjJKS0NPUk5KTk42MUpxeDNO?= =?utf-8?B?bVp5NlpaQWVOYnBBRGFEZXREdFJVdFVVYlNkazMyeDBHYWk3cnY2Q09hS3Rm?= =?utf-8?B?SytYdDlFaWd4d21GeU5LbFdIU0ZJR1Y0T0VLYmlSVmJhNitmdUlqaHI4aGQx?= =?utf-8?B?VmkzSGIyRzZyd3pTNWxQaVJ5dXViTnYxaXBtYlF6VkR2b0lDNnRGYmhzbGh5?= =?utf-8?B?T05ucnhvbnJpR2FqcjJacXFNOWFObG53cHowUER0QzBYRWJWSkRkNDIxVE04?= =?utf-8?B?MGw3eWRHbzhCT1FwNTZnOWlaS3o2WEJCUnBUTTJ6SUdaMGd0REc3OFhIbzZR?= =?utf-8?B?OFVBQzBKNDVyaVZweEtOZ2VMaUFPOVErV0N0YjJsY0VUVnpMd09ick1DN3pH?= =?utf-8?B?WWpKbmJ2QmNrRHdQWEJaTHdnL3dDdUkyUGQvMy9IRzg1S2tBMTkrS0xtajNM?= =?utf-8?B?U3MyZGs4ZUhwblkxUk1na1A5alNPTWpuWjN1QmhVSUNiTUIvMWhFUDdHOWJy?= =?utf-8?B?Q05DQjU4c0l6V2ZJd3YrUnl5L1o3Y0dSRkRjaDBScXdhbW14U3NMb2FTa2ox?= =?utf-8?B?N1BNU0hlTXNhOVEzcFlXcTJveDRacDFCNGZyWXU3RzhwWURScUYvalZ4YndI?= =?utf-8?B?UU5HWGxTbFRiNE5lcGlWQ1lVOCtEMWZoNjJyQm9KRnhGU1dXZHNxdkhGTTZo?= =?utf-8?B?SnpzTHVZMG5ob3doZE1FdkRGdUhxZEVaeldSdnljOGtxSkEwQndpYlBPRVRP?= =?utf-8?B?MzB3a2hLVTlmL0dWVE14MFJveGk2RWY2cDhnRUphd2hzRnRvSW1KRlRTWWFG?= =?utf-8?B?MGhScW9mRVdKRVNjOUhXWjZSUFlsdFZiY3dUM2sxTDNvaXo0ZUg4RE9KdVV6?= =?utf-8?B?Tk96dmxseHJCM01wOUIxSi9rTG93eUJTKzQrTUlDbFE5VUNENy9hMFl4eUs4?= =?utf-8?B?Q3plUXg0Vms0azczMU1yekZiREVxQ2IxWEw3akVZa00ra1BZUStuQkgyZjgv?= =?utf-8?B?cCtTU3RCVXoxRUNXVnhsL3VqTEc1VTVKYldMNHhVUFVlOWdZc0JlbThpWXIz?= =?utf-8?B?c2JHVEhEYU14R0ozTnBVd1BhWGExc2J4SndmOEp0UkpFSlFkVXB5Y0xGd25y?= =?utf-8?B?ZWR5RzE3TnZ6RktLUzNsR3RXK2lSUzJzUkhOdmhQMWVYY1pQTU0rWlFUM3h4?= =?utf-8?B?TjdCMDg1NmtSY1BkdDZtcUZIWnN0cEhidnVLSEQ3S1dxdDc1RW1Gc0VqbzVv?= =?utf-8?B?WnF5RFplajh2cHAxQTRtbEtQaEtRMDYrdzRNUlRkYkJIT3VTQVhlZ3NwWlM1?= =?utf-8?B?RXo2WHNBc2ZMUGczQmdoajAzRkJ2bU1LUHZPYk9VdGZOeDQ5M2RuZFJaREZU?= =?utf-8?B?VmY0M3J3UHdNOElkek9JWXNvMFFZbzhKTnZlbktOVGxpUXBlNVdtR2lvSnkr?= =?utf-8?B?NTFUcnhVdVJ6UzdhTnAvVTNZZEtjK3NGR00vTExncEhyWjIxRENraUpHdHl1?= =?utf-8?B?NUErV3ZBc0FsQmlmM25MMGcza2VRelRuWVBhWkZURURTSWZzWDRNWWNoRkFi?= =?utf-8?B?SWlPS3ZuTkdqUHgxSjZCZHpMR3NsWElYOElTS2k1bWZCYktmeDhQZ2JCYTYy?= =?utf-8?Q?44FBirhp5NihGDexNVMlqbdsX1JIu3dSiqmeSI2yGBxyf?= X-MS-Exchange-AntiSpam-MessageData-1: rRzXWK3/3yA+ZQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 10ce906b-a70a-48a0-21c1-08deb5524176 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:56:42.4283 (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: Jox4ETqG11scFm8fJfkxfAE7qfvKGtzndqDR4UnPOzV4eHsoupbeC+mJBWUe8b8ogoRvmt1L8m+xpnR5KXj7fA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 The current code copies the data into a KVec and parses it on demand. We can simplify the code by storing the parsed entries. Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- drivers/gpu/nova-core/vbios.rs | 56 ++++++++++++++------------------------= ---- 1 file changed, 18 insertions(+), 38 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 987eb1948314..1ffaf0ef56a7 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -917,8 +917,7 @@ unsafe impl FromBytes for PmuLookupTableHeader {} /// The table of entries is pointed to by the falcon data pointer in the B= IT table, and is used to /// locate the Falcon Ucode. struct PmuLookupTable { - header: PmuLookupTableHeader, - table_data: KVec, + entries: KVVec, } =20 impl PmuLookupTable { @@ -929,48 +928,29 @@ fn new(dev: &device::Device, data: &[u8]) -> Result { let entry_len =3D usize::from(header.entry_len); let entry_count =3D usize::from(header.entry_count); =20 - let required_bytes =3D header_len + (entry_count * entry_len); + let data =3D data + .get(header_len..header_len + entry_count * entry_len) + .ok_or(EINVAL) + .inspect_err(|_| { + dev_err!(dev, "PmuLookupTable data length less than requir= ed\n"); + })?; =20 - if data.len() < required_bytes { - dev_err!(dev, "PmuLookupTable data length less than required\n= "); - return Err(EINVAL); + let mut entries =3D KVVec::with_capacity(entry_count, GFP_KERNEL)?; + for i in 0..entry_count { + let (entry, _) =3D PmuLookupTableEntry::from_bytes_copy_prefix= (&data[i * entry_len..]) + .ok_or(EINVAL)?; + entries.push(entry, GFP_KERNEL)?; } =20 - // Create a copy of only the table data - let table_data =3D { - let mut ret =3D KVec::new(); - ret.extend_from_slice(&data[header_len..required_bytes], GFP_K= ERNEL)?; - ret - }; - - Ok(PmuLookupTable { header, table_data }) - } - - fn lookup_index(&self, idx: u8) -> Result { - if idx >=3D self.header.entry_count { - return Err(EINVAL); - } - - let index =3D (usize::from(idx)) * usize::from(self.header.entry_l= en); - let (entry, _) =3D self - .table_data - .get(index..) - .and_then(PmuLookupTableEntry::from_bytes_copy_prefix) - .ok_or(EINVAL)?; - - Ok(entry) + Ok(PmuLookupTable { entries }) } =20 // find entry by type value - fn find_entry_by_type(&self, entry_type: u8) -> Result { - for i in 0..self.header.entry_count { - let entry =3D self.lookup_index(i)?; - if entry.application_id =3D=3D entry_type { - return Ok(entry); - } - } - - Err(EINVAL) + fn find_entry_by_type(&self, entry_type: u8) -> Result<&PmuLookupTable= Entry> { + self.entries + .iter() + .find(|entry| entry.application_id =3D=3D entry_type) + .ok_or(EINVAL) } } =20 --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012022.outbound.protection.outlook.com [52.101.53.22]) (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 1E8A433E351; Tue, 19 May 2026 02:56:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.22 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159413; cv=fail; b=NqlRfGOyHhn+5a1P5AQvu40SSTtVNQ3pijpCPn6TasRq/DWwlAI6PvF8Jh9mEkynTKOM/Dp+EQ6F4HhsoWm3xgFDjYba0/fVd4eNmR+7pGGjESKHVFVSyG7JzeKLHe1Q03sdvw1vtrdF1XJIn4Wfym4ZVZ7rg4qkoJ1RKvyKAwE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159413; c=relaxed/simple; bh=5+9tsoPeoj5/wX9WLyX7sTOSq7skjt2T0lvMGPqpg4w=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=LPiCzsnHuLhysBRPD8irR87KM6ebwIH7ab3+CtahOE8yP1BCzhuL2/lQA3VyBchmxCVzba6rSI4sseiBQMsQIoMnQwW4pillMTirfvp7d/EU+fcLIHS5jfs/+rM0UFeUJUaU9ughKn/ba9RMXLtsu6Jo66ezjN31+lz87gwXuHM= 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=D93dY3VM; arc=fail smtp.client-ip=52.101.53.22 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="D93dY3VM" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PoHzhZ8pSspi5n7k5wQhV5LyvnjjMyLzjWiG4pYPi+kLnESLe8YpMNgV2lMjFlqSzDhaaWP3yxQPMSbOiBMhdd9cyMjoDeA1mbd7BN6NuA7I1oOJ2pMHj+oMSlZuiRpSJDgHeClsXtfkUuyd7eyewONJdkvbWPO7rwdRFa9aEimxThIElOP6fSJHE2vD9xsJdf368DGi884fuN2V1jNhsmoW5BC1MzE2TBfbjmt0w24rtlrQ3o1tCk5VtWTbUI24TRTlIEwhr8+5iJbMm+Jc2xbWcXmKVGsM+kPbKh3hxqnkZ+wDSIwLEVXfI0iEmmV7PrzNK/JazF63SJgW3Vdk9g== 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=AuUGHKMgCCeLwlF0BAyvNsVh4HDpHO4ft9aTSUojhPo=; b=DIiWKb5OD+oISBy6zAkFzZEiOKflt+b0Okfa0QQJNeDCHudmUC/BpEoa/HjsxsbX3fpQpatz0p3kZrvb7Cpsnw+7qZlEr8kLX0faZVnuHd7dtNRvPPa50sveqdD7tuU5kgGC7u+mxeMhYL/zatyEALLESs46C7PA6vFbKISt8XQIw3NFyKULgtCwCmvQ6DIVKidePz2n5J64/v4JLgCSRvPcSOYreTFYfFOKthqmfsuQOQvjhzDoT17pENOBxmXBCxYFaiXvRF4SjsD4ySok41BQy1h38anxMyv2PaRGlvdvxZhhLTFcAvJC+He+O+curOQQMl0uOucBibXqnWowJA== 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=AuUGHKMgCCeLwlF0BAyvNsVh4HDpHO4ft9aTSUojhPo=; b=D93dY3VMTt4pgUoN2Yyi/CtHhww6BpbCBcPG0fmofJz+nlpX9Y2sAn4LqjzKbAupAGLzMRB17bUeDS/z2qrUDErKf+7/QaermqiS2SE3eGODWUFJ3LyKK8KavcABgLMGWqza/lhkA30UC0snb8aSYiluZi9rGREZ4AMnjfKhym4Q85kiZGFWubD1HpAIbxpvGbAZFfLANc7nYLMYcKqiKTCO+102Di2haI0RAR9/hdQ6gYAtt6L5il3v1mFHq+yQcGvJSu/tc5bKoyAbIbTQ845QhUM73S3O2ffBEaou//eB68VtcAoD6xcpWE4UhPxukJd+ITN86X8X0wgy/g+kFg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:56:45 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:56:45 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:55:08 +0900 Subject: [PATCH v4 14/20] gpu: nova-core: vbios: construct `FwSecBiosImage` directly from BIOS images Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-14-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney , Joel Fernandes X-Mailer: b4 0.15.2 X-ClientProxiedBy: DS7PR05CA0055.namprd05.prod.outlook.com (2603:10b6:8:2f::15) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: 387bba0a-d715-4102-eda5-08deb552434c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: RhGaexNDel6mGR042By386CCINUA3hF0uSjwg8me0HLtSykGuaUW0sdkKhUL1llHfPBRf9G59s5ZTKjeu7ztfb3Z7xfuQ8udMyjHOiOMb4Qdzc0WAE+gmhMSjKDPOfqo20EsnFbqw5FCLqQl1eOSHRfg/mSVfT+Xlp96DI9qUmmA/m14wr57PI2AEDYw6YqMrTVKWkIi42rJ0DsQfbgOy3DLyTXyohGNPXQ4B7SJpO6BtMfFyps2uUNWM9CECrg0CPvVfTqcdDzQHUSvEl5sr9n5cYMNTABNwxxMP2Zky+e21RZtav1Pu8rcD7G0q+tfEDEh49AFb7QhKepJEFyl0NDJi4I61EIYN1LgMw7WPs4eH6TUNBlhjq4OeWGAKLao+JEJCT544cIz5Idh4MyYEpzPg9Fhm4V+VAYIpvM9oR3oRbjtd498xwkKhXOPaiyWOI1jeg1lhlk2o5wBZFcHd62gEjbFNy4QhmSriqA0kWsGUiVOlVonkKumrUmLELdcqQRFdVktw84hU+CaoZGEMwXhN/KKUTRHFIPU9kny5AKZF76vdeDfVRff6ozFUeSQYzVetdgqT+p5AKW+kPQKbIzq9ypfl0Sy7wII1qDN6CskuR/t5Pt9Sp3eZvr0WmTwEdGnEMMgmSG8LiNZOghTkfh7KC3A4mStq/Q01RArh/lR3Ezs7thTDIjr85Xzq2/r X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?S2JyTEVCcTN5UDlWTDJtZUpKL3dlanljd2lFSjZBVkdQTUljSlQvSi91VEZw?= =?utf-8?B?RWlrbEd6R1lBWkJSQXZZSE8yOHBLQUhBSWIwckdja09ZODBZbDZYTFRjbEpj?= =?utf-8?B?UFFyUjFFbWFXRVhLbGZVNDQzOXdNaWcyWE80K1daeTczMEJ6emgvd2NDTVc0?= =?utf-8?B?MVVpbWpQVSt2YTFyYWhDYkNVbDc4bmV2bnBnV25KaStGajJ2bXpYdkFMOTgr?= =?utf-8?B?YkMrQmZqMFBNQkRHZXgvbEYwN0JMKzhlVjRiYVMyczU1Y3EybnIrN283WXIy?= =?utf-8?B?aU9YNmpLQ2RtOGREMEhNL25oVk8xb1FIZnR2NzZkeVBHNlovR05oeVJzMGFL?= =?utf-8?B?R0RIMTZ5SU1HYU1tOHFmV3NET0JDQUliMmxiQk9HbDBvb0lEU1owY2RhaUZu?= =?utf-8?B?RHVWSlU5VWpIb3pnQ2h2ejVUcUpRemxUN01vQUhjWUg3ckJrM25QSGdrcEJS?= =?utf-8?B?eTdzaWQ0b0kxd2w0VHNRM1Jza0kvN2g0eE9JL2xNTHJmZUllUWhnTGdwZjNW?= =?utf-8?B?T3BUa2ZabzQrSmJubFN4THcrdTJNS0Yza0JKNldVbmhJZ1MxRzc2VllJcEk5?= =?utf-8?B?MEc4akorWXAwWEpxV0wvMHBCa0U0N29LbFZwdnZETUtCcVVqY0VtL1BIWDVr?= =?utf-8?B?UVVUNGFveFovQU5VTHFrZzBVUzdMUkZLMSt4NkJUcUtmQm9zdUZidzJLVEk4?= =?utf-8?B?RmtBSjVCUHhvYTIrTngzTHR0cU1LaW54WG93ancyT1dXRUp6a0R3V3ZMd1N0?= =?utf-8?B?U1NGc09KQURYNGxlMTkrd2x0b1dqL1RvejE2eHF2MXhCUEcybHFVYnhJOWpz?= =?utf-8?B?RDZIYTVpWWIrMlg4a29Ec0taY2c2eklRNXU0dWFRMnJraENwdlh6d0VNeWlz?= =?utf-8?B?K0ZjZTM0UnZ6Lyt2eDA5bFVpU2JXbjlLbU9yWS9NQ3hWUjVIdEJjdE1LRUpB?= =?utf-8?B?emlHekZ1dytJT3RtdHR1L3RvZFpZRC9zbVFIL2V1RFlyVE54TmFjY1YyQnN0?= =?utf-8?B?VlQ3Zlp2d05xOHBjblIxSHZROVh6aWlXOXh5NDFnOTlCVnM3bzNOYXZNUHZU?= =?utf-8?B?MTNlUjB3Rlg2QU5QUWRLbGRhSnFiQ0tJeUErYkdIRUc0OWNMajdMQzU0SDlN?= =?utf-8?B?Znh2VXpQT0xiK1dScGZXS3NGOWF5NFhGcVcvWC9FSklIbXZBT0h1bG9MS3hY?= =?utf-8?B?aWNlQXdBSC9FNU96ZFpyMTVKcmxDTkw5dm0xTnc5VzBoNDRnWXZJYkFRcVBu?= =?utf-8?B?TjNINC9mRklEM1owbUl2ZTVLNndvQXBXRnEyME9uTk9qNnUxV2h4RzVMMUU4?= =?utf-8?B?SWpNakNyM1FHU2lEa2Q2RUVKZlZvRU1lbnR2RmxockVMdGJDdW9VQlRCZThh?= =?utf-8?B?b1loaUlYbEJGZVZCb0Zrc2YrbGZ3SkxMWDJyS1NpK20rVTh1VUhHRmVVL0ps?= =?utf-8?B?SEV2UDNZbGxlMmlBZzlOakVsSlk0SWc4NFg3NXZUdlVhc1Y4TXlKYTBDdjM3?= =?utf-8?B?czZmRUtHUUs3T3RTL3c2T2JlQzlsbXR5aUFNeUtON0RVaDlLUW9uWm5DVVg0?= =?utf-8?B?VHUzVmFxeHNDK3JhcWFTM1FrWGdBOC9tbFc0RThUcFpLRzdxV3ljUGx0c0hs?= =?utf-8?B?cVZaeGZyMUtMeE1UWUFrNFZ4bURzK3N6Uk5LdE5YbGNlOUg2SjE5RzdpcVpj?= =?utf-8?B?djZFQWROWVZ2eXFOcDV1T3AvSk95ZG1kOVBDM0NtZTJyZ28vY1lVcW1od1pO?= =?utf-8?B?V1FNcFRFY29DZTNTOWpvZWtNYms1eEQ1ZVdKTTJ2TE1tWkNlZmFQVFM4eUtp?= =?utf-8?B?QVNTOVdDOWtPVWhURjZCMjdka3dhTEV5UkRCYzR3VW5jMEFYck5EMlFjR0hG?= =?utf-8?B?UldGaFQxRUxLTWIwUjFVS2JHaHJ3K2RoQUxady9jRE03clJjcUVmMDFWalFt?= =?utf-8?B?eVBhZjRWdUJXcmhYamE3Mk1qVTNCR0wyNENERnRzRmdXb1dFcU85UkFDVkI2?= =?utf-8?B?UUpPbm1LbnArM1pBRXM2ZlI5VktaV3Z5SUFlbENSWnlHSHQrbE5kdmhrSEJE?= =?utf-8?B?WUxzYWk2NjF6aU9NZU1tL0xHVlpSSEw3LzBmaVl3QVd2QVBLK3dReURjWGZ4?= =?utf-8?B?VUhjTHNoamdQdDdQQjhmZHVxby9pTHNoUUFVcEwxU1VUY28rb3p5WUZYYm4x?= =?utf-8?B?Z0MvRVBDYzNuZGt4L0t1ZGdKZTl6YUluNCtNUU9xMENMVFVQdTNyVHozblNU?= =?utf-8?B?Y0hvOWp0bVQ5L2thSjFpVHdOYno4SXJlRCswYmVVTVFpUjdselJwQWJROVNZ?= =?utf-8?B?eXFzcXdCbjM2dE1CdUx1MStSaXZJTVAzTU41Uzd2YnlJM3ZENlVjTUhFeVJa?= =?utf-8?Q?L95tKA0jLC7At+NmNZH3WKQEkmYxvgr5B7l0/OUtYxD1k?= X-MS-Exchange-AntiSpam-MessageData-1: AqVLcQeaNlSuRg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 387bba0a-d715-4102-eda5-08deb552434c X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:56:45.5176 (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: vG1sEJzSQmW2FoCUiyNywkOmrd4MNM0Tq0ykYfJ/byvFxIULdBl6MZ9TEzUD/3Xm++8n/OvzGACqhteFM1MOaQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 `FwSecBiosBuilder` now only contains `falcon_ucode_offset` which just gets passed directly into `FwSecBiosImage`. Remove `FwSecBiosBuilder` and construct `FwSecBiosImage` directly, as a simplification. Reviewed-by: Joel Fernandes Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- drivers/gpu/nova-core/vbios.rs | 98 +++++++++++++++++---------------------= ---- 1 file changed, 39 insertions(+), 59 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 1ffaf0ef56a7..c5dad9e065da 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -315,8 +315,8 @@ impl Vbios { pub(crate) fn new(dev: &device::Device, bar0: &Bar0) -> Result { // Images to extract from iteration let mut pci_at_image: Option =3D None; - let mut first_fwsec_image: Option =3D None; - let mut second_fwsec_image: Option =3D None; + let mut first_fwsec_image: Option =3D None; + let mut second_fwsec_image: Option =3D None; =20 // Parse all VBIOS images in the ROM for image_result in VbiosIterator::new(dev, bar0)? { @@ -336,14 +336,10 @@ pub(crate) fn new(dev: &device::Device, bar0: &Bar0) = -> Result { pci_at_image =3D Some(PciAtBiosImage::try_from(image)?= ); } Ok(BiosImageType::FwSec) =3D> { - let fwsec =3D FwSecBiosBuilder { - base: image, - falcon_ucode_offset: None, - }; if first_fwsec_image.is_none() { - first_fwsec_image =3D Some(fwsec); + first_fwsec_image =3D Some(image); } else { - second_fwsec_image =3D Some(fwsec); + second_fwsec_image =3D Some(image); } } _ =3D> { @@ -353,15 +349,23 @@ pub(crate) fn new(dev: &device::Device, bar0: &Bar0) = -> Result { } =20 // Using all the images, setup the falcon data pointer in Fwsec. - if let (Some(mut second), Some(first), Some(pci_at)) =3D + if let (Some(second), Some(first), Some(pci_at)) =3D (second_fwsec_image, first_fwsec_image, pci_at_image) { - second - .setup_falcon_data(&pci_at, &first) + let fwsec_image =3D FwSecBiosImage::new(pci_at, first, second) .inspect_err(|e| dev_err!(dev, "Falcon data setup failed: = {:?}\n", e))?; - Ok(Vbios { - fwsec_image: second.build()?, - }) + + if cfg!(debug_assertions) { + // Print the desc header for debugging + let desc =3D fwsec_image.header()?; + dev_dbg!( + fwsec_image.base.dev, + "PmuLookupTableEntry desc: {:#?}\n", + desc + ); + } + + Ok(Vbios { fwsec_image }) } else { dev_err!( dev, @@ -702,18 +706,6 @@ struct NbsiBiosImage { // NBSI-specific fields can be added here in the future. } =20 -struct FwSecBiosBuilder { - base: BiosImage, - /// These are temporary fields that are used during the construction o= f the - /// [`FwSecBiosBuilder`]. - /// - /// Once FwSecBiosBuilder is constructed, the `falcon_ucode_offset` wi= ll be copied into a new - /// [`FwSecBiosImage`]. - /// - /// The offset of the Falcon ucode. - falcon_ucode_offset: Option, -} - /// The [`FwSecBiosImage`] structure contains the PMU table and the Falcon= Ucode. /// /// The PMU table contains voltage/frequency tables as well as a pointer t= o the Falcon Ucode. @@ -954,32 +946,33 @@ fn find_entry_by_type(&self, entry_type: u8) -> Resul= t<&PmuLookupTableEntry> { } } =20 -impl FwSecBiosBuilder { - fn setup_falcon_data( - &mut self, - pci_at_image: &PciAtBiosImage, - first_fwsec: &FwSecBiosBuilder, - ) -> Result { +impl FwSecBiosImage { + /// Build the final `FwSecBiosImage` from the PCI-AT and FWSEC BIOS im= ages + fn new( + pci_at_image: PciAtBiosImage, + first_fwsec: BiosImage, + second_fwsec: BiosImage, + ) -> Result { let offset =3D pci_at_image.falcon_data_offset()?; =20 // The offset is from the start of the first FwSec image, but it // may point into the second FwSec image. Treat the two FwSec imag= es // as contiguous here and subtract the first image length when the // target lies in the second one. - let pmu_lookup_data =3D if offset < first_fwsec.base.data.len() { - first_fwsec.base.data.get(offset..) + let pmu_lookup_data =3D if offset < first_fwsec.data.len() { + first_fwsec.data.get(offset..) } else { - self.base.data.get(offset - first_fwsec.base.data.len()..) + second_fwsec.data.get(offset - first_fwsec.data.len()..) } .ok_or(EINVAL)?; =20 - let pmu_lookup_table =3D PmuLookupTable::new(&self.base.dev, pmu_l= ookup_data)?; + let pmu_lookup_table =3D PmuLookupTable::new(&second_fwsec.dev, pm= u_lookup_data)?; =20 let entry =3D pmu_lookup_table .find_entry_by_type(FALCON_UCODE_ENTRY_APPID_FWSEC_PROD) .inspect_err(|e| { dev_err!( - self.base.dev, + second_fwsec.dev, "PmuLookupTableEntry not found, error: {:?}\n", e ); @@ -987,34 +980,21 @@ fn setup_falcon_data( =20 let falcon_ucode_offset =3D usize::from_safe_cast(entry.data) .checked_sub(pci_at_image.base.data.len()) - .and_then(|o| o.checked_sub(first_fwsec.base.data.len())) + .and_then(|o| o.checked_sub(first_fwsec.data.len())) .ok_or(EINVAL) .inspect_err(|_| { - dev_err!(self.base.dev, "Falcon Ucode offset not in second= Fwsec.\n"); + dev_err!( + second_fwsec.dev, + "Falcon Ucode offset not in second Fwsec.\n" + ); })?; =20 - self.falcon_ucode_offset =3D Some(falcon_ucode_offset); - Ok(()) + Ok(FwSecBiosImage { + base: second_fwsec, + falcon_ucode_offset, + }) } =20 - /// Build the final FwSecBiosImage from this builder - fn build(self) -> Result { - let ret =3D FwSecBiosImage { - base: self.base, - falcon_ucode_offset: self.falcon_ucode_offset.ok_or(EINVAL)?, - }; - - if cfg!(debug_assertions) { - // Print the desc header for debugging - let desc =3D ret.header()?; - dev_dbg!(ret.base.dev, "PmuLookupTableEntry desc: {:#?}\n", de= sc); - } - - Ok(ret) - } -} - -impl FwSecBiosImage { /// Get the FwSec header ([`FalconUCodeDesc`]). pub(crate) fn header(&self) -> Result { let data =3D self --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012022.outbound.protection.outlook.com [52.101.53.22]) (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 5811A33F584; Tue, 19 May 2026 02:56:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.22 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159414; cv=fail; b=brsPK9MnNKbolz62coJJvXEogen+k27o6hGIZ+bqPrGV/c+b3sfqkklYaXCs+JmI6+93rrZHXlXGVvQiPSZ61fth/HsZYuPbQvUu9Pyr8ZijIzs4w34hMTEFuZt46YsAhsXlYNUw/hhvMU5yvlcKAG8ca6Gye/rs7o07TMK/Vo8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159414; c=relaxed/simple; bh=8+7tCmicxYpNHxueov7hdR3YLHTiO5Hjp45jNk6Bmjs=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=g5ZBKXEkZcTTX3J8lJUBS6Pct475+FvYDLz0xpc3fKnqKZEmjv5j6hG0lLcxpHAdjzQJ5LVr3aKKB8W18+HtL6OmNtgNsdJlONlKIcW6051F4g0iZA2zx5BCGIJIflQK/5JFdsuWcJZVggjAFvsZnbvOod+QvEXImIAVAJriGS4= 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=a3XkJf0W; arc=fail smtp.client-ip=52.101.53.22 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="a3XkJf0W" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NBYGKqeV0EWhhAu/iXgRH0Y7nj+m7lE0NwvLCp+b9FXcJP44OrP7CYD/Skku9s61iE9HMHf1UHSFQCKxXZsGeFI3lCTqyO2cgpA7yh14GPvtNUdr/MyXUfHPvRLy000UxmFnznC+tevL6dIC6vr5tjCPf6dyOzIsppPMhHsLxmKewO4H/NcFr2vrB4wpNCFBC4l7SEs/+Q5e+EHf+YcvSYyR8cqcO8NxLPjnTTqegeXL3az+ZL3+7vHj+7Iwb3DqyHSLGC505u4n+u0Yo96d4vlz69TVUvT+1sp3WEYuCYIbdIOTVib2gV5UYobojmTdaT8EfWEv29f+IJRJ4BUBsw== 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=ccevr+HfXoTciNCKVO+8l8HprXKaTHOohm5igOcyKRg=; b=jfRIQ9uySAnZ5qdlJsD/oyTCBIBmG08PHhAsMORhYO2vvONXlK5jA3jeVsTEyIhOAllkhD6Z52uSRbfdDSI220NyojjPZ7JgOB6tR455/6ojEiPpOO7B/KiuFoRGXoveqU3os2atPb5QiZxbgWfyfmK5caXlVqGTUwwbgykrzaJrydM83eDWoTgqhwY1erHNjbvtu9gb/qcEJz1MIKAanMxRDHKCRCZSVZ1v+lC96Yhz0jbjcSvGWTBbYsQpR1EVc8X2rUaQ5xX+L4z1T+GlBhEhh4l/ZAwXVT4/Aue2pLzCU89yHHC1lD4ew3qIHwTy/s6JyyDTX7X19f2InoQU7A== 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=ccevr+HfXoTciNCKVO+8l8HprXKaTHOohm5igOcyKRg=; b=a3XkJf0Wcz03aPXRuT30lksOLpCBSxg1Dmujrl9XKAyH6MQTGq/fFCqagtvztRMNLDmxuzQML44xQ5C0qKIgM4+O4+r4MNW2nvjw2sY2QlkcJoSOW3X41RUWh/kNsHO4bLmO6tZN2wduiuqBMJ9Zpyf2TMiEJkkGhaG5TcJ8gMIxbaRUIfqeAUXuP04V07tIXEsTsur9ofhGnb5eMFvNwbNzK1RPmVQU9WmXfor2d1a1GjiSwjw/UaXg2Y+6JSHguASp2vhJo67QtLjXLtpiUHsaU5TbvemuMCLI1AeZR3P50bWm0lGQRNLYuYzedYuk4PFOx0+u6YL07mBxxZy/HQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:56:48 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:56:48 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:55:09 +0900 Subject: [PATCH v4 15/20] gpu: nova-core: vbios: use the first PCI-AT and FWSEC images Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-15-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: DS7P220CA0045.NAMP220.PROD.OUTLOOK.COM (2603:10b6:8:224::26) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: 1ff2d10b-affd-4331-be80-08deb5524502 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: 9B3cdv+jxOKiSAvGB+LDLYoRI9Qqj42Klb2w2iIepmMIyPmhXQPhYS6tAhemrRWHIgWOLkkZuqpeH7FzWqUhdICxTLklDGrE4MYlbmF6b5+fmGOLK3O/VYtpm78WAmSKX+jlhVNHC0Tu7QlPpfAj1/cbnuwnvqq8UG8jt/um+HyWhsB212J4R3CDhC0mvyrodZCJHit1LWm66Nd1RN2iGBEA+OLCoidjXZxw1gEQQPoQcw9LztI22AA5vL4UijFgWzMQdWrdrjLkv4HMgTfaTQnvCRc8vEmfSj7zDLloHvouSVtmCTKAogIcVCJLWA7WjY0sjXYvAhFP7DDhzxelidD1SUtmud+HtJxDdstqstaYtXoqoTvNKDmvyxuqsdGsQpEwXRqY+MTpOcaYmDQFQ/d0bNpEFJExtu2tVvcIw0m7p0EPzORJvEgSf5EWgKQRwAw0M9BAGRkakTQ8KwAya5HbrcRdiBitkvRd68+Bhnxc9Kh47WnRZpJCdm3dPBWe7q8UGj1l8BDRcx+Ag2EjkXDasz8d6UyEjGTH4vD1ACgTkQDvovi/xO+zhjWgeR2b3EpKTzB235V82qzwjnISc3S6fqsO4JM9q/EchSSvx4WKX2oo1lI7wKMLt5V/1kM7U63CbiVYdCZDcR/nJAc13W8JwqoRVJzqo1aCCBqDT7v/jl5JG7oWSwfQF5k+pviW X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QUFXZ3R1Mk5XcXV3aEw1SW5xTTFxaHU4bjIxVmVFRDhYT2pCZlhZeTZFUm9Q?= =?utf-8?B?cm1BakIxTnZWOGMrWW5VQ0tBZ0FYT2lnb3ZMbzQzUEtFQmF6R2p2ZGFYSHEz?= =?utf-8?B?M2I4SDY2bllGN2RXMEluNUZ5TTRTY0pGL0kwSnBBR2dyZGU4MStEdCs2bSs5?= =?utf-8?B?NVM4N0ppUmVTVXd1RVhlYXJkRFRzaS9Wdjk2Ni9GeDNvZmxZKzdnbDFjaGcz?= =?utf-8?B?UU05dm5GSk9nZWZuZ1QwM094ZVd2bUxXTGYxbzBuaDVLSmpXMW1Za01yK055?= =?utf-8?B?NTJSREVIb2RGeFZQSFM5SmJRQi93bFlOWGN3M3dtc0NBQ1NSY2QyL0JsbExO?= =?utf-8?B?dEk1TDMza0Q4SUNYeHM3bFhkRThxbmpHQnZSbll4N0xUWHZ0YW9mb3A4WTd3?= =?utf-8?B?eHRZSlY2b0c3M1k1ZlVMOE1qZGxPajN4V1JNUzZ1OXpRcnUxQmgzdXFvWEh6?= =?utf-8?B?NUs4QTRVN1BlS2VUSXMrcFVRNjQ0SmFQQjZOWmRWU2NwcUJ1VlNDOUYweEZN?= =?utf-8?B?dnFNMENNMGJOdTFVWlNqUUcxTXhtYXo3NkxUUmhHenpBdndBRFpHdFVOdWxH?= =?utf-8?B?NkQrbHJoMzBtWWJ4azVSbVhQeXpmVGZDRG9HQjdsQjcyWUMxVVJhWjV4K1ov?= =?utf-8?B?SzJhZmxHa3AydC8ydmNTR1EwQUlkUk1pVFBzZXpRNEpsNWhFaW52ekhSeWhn?= =?utf-8?B?K2lQK2IydExqVVRRMEN3REVPTWI3N294c1FFWnk1eE4xaDJteU8zQ29iOVNU?= =?utf-8?B?U1Zja0VIMmRsZDkya0FhYVBHb3Nib084RTJaK0lYbHhJSTBmT1BwMCtzM2Q3?= =?utf-8?B?Q29ubVFwd09mWGxuaytKSE9aWVRVV1FqS1U0RkJBWHpLZGhHelFWK3JwTzl6?= =?utf-8?B?MjRCZzYweFZaakVEVUMyaEl4NDBWTmtiUGY5NGVyV1kyZms3eUM4bVdQSFNo?= =?utf-8?B?bStSdjBwSnUxdmRpN1hpeGdCd2R3WkI4OEhidU53VlJhQW9QK0RYSDRCeWht?= =?utf-8?B?MnB2blNENXgyd250ZlZraHN0Vytoa0NPV2lBVzE4VEFJdGxGQ1ZrUStHT1Fh?= =?utf-8?B?WGRuNEpnVlB1U0E5VVI4NW5DR255c2FhaE5QUEUrdlJUdVpteGNEMnVNd2pq?= =?utf-8?B?OFN5V0pPRUVpcTkvZlhaUDFxcmc4WUp4SXVobWhra1IrM3RKOUU2UHp0bHZU?= =?utf-8?B?eE1YN01lbnRJZ042bDdkTVJVTittdEZ0SXlNZlYyRngwUkdxVWVOTDhEbUE2?= =?utf-8?B?OXQ3bUVhajNpK1lvb01RaTY2VkRUSHVMVUxrbmJRb0R5WUx0Vk43T2F3OVlW?= =?utf-8?B?Sm5FN0dTODQ3QlRUaWF2V3Evby83Ym9EMEthcGRPZGZ5Q29QcTBXWXJGckZG?= =?utf-8?B?QXZocHAvdXlFdzJha01PQzNKQXJIU3ZpbWV1RVpNeUlkVDhlamIyci9UQ2o0?= =?utf-8?B?ZXFIZ2o4cEJpWTY2aXZ3MkloRWZBbytvRHBOck1lV2dTREh4dVYyTlNOTkMy?= =?utf-8?B?bGN5c0luQk9SaXF0cEdodlQ4U1gxSElNRXZ5aUpxd3BaWGd6M09PTDlpakhG?= =?utf-8?B?bXl6ekRVSDk3K3dQa094cE1wYUNyTHgxV1ZHcENOcVBhZDJIWllReGlBbjFh?= =?utf-8?B?dUZ5bFRuMVR0N2VyRXVKdmVIcksvTGtTU0h0V0FpdFlXeDBna0Q5Q0RmbXFZ?= =?utf-8?B?QzJSRHArV29MU3B6UEdvSU95TkJEcklyTDk2ZzVyS0JWKy9xYU9KWlQxZ0d6?= =?utf-8?B?aklQZzNaV2pQam1qNHlBQ1dHNkgvZFBNM2tDNzRKQ0RmUVJlemdQVEhZZnpU?= =?utf-8?B?N1FDNDJTR29SYk91S2phU0IyeUJ1dFFURWNqd2M5Z2NGWUY4VGU1OWp1YmJP?= =?utf-8?B?RzlKUitMbTdkZ2RHUHdYN0tpZ2RpYkU1WDEyZGtjNjFqSVdSSFdTckJzNzRs?= =?utf-8?B?ZlV4aUgweG5Cenl5aGVGWnR3V3NjRmxuckx6OC9vMkxiaXlhYjk0TE9PL0NJ?= =?utf-8?B?WUFCTmFLbEFLZ1dYWllVcE5CNTNiT05pRi9QdTdIeUUvZ3piYi9HSmk3Vm52?= =?utf-8?B?dTdJTG8yV09LdTBmdGVVU1Z0eDlJYVZqNjFLVWxLaEEwdDZWenpteDFyODJK?= =?utf-8?B?SjJCckFFbnFUMDFEdnNZTDh5K0tjQi9GMWREQmFaVlRyeHNzalBMTWprbmFa?= =?utf-8?B?aEtwRnBiWVJOMTFPMFdISlZRVHk4alZOUlNEajI2b1U0Qnd4UDZPajluOEZ6?= =?utf-8?B?TUozaE1pejN5MEJ3NzhyazRHcjcvQUZUbU84WTBlclo3dnh2WVFMMUZGVmNC?= =?utf-8?B?NGdFSFVSTzlPUWtjZFVaUXBzczRDWkhyZHpmeG5qKzVyQ2hKdGZxZUNOOVNF?= =?utf-8?Q?Mxl06L/E4qgYfxgeDxMy2O9BaemCpITtY3J059L/2dyBr?= X-MS-Exchange-AntiSpam-MessageData-1: mWFJYwBO1Bo9Eg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1ff2d10b-affd-4331-be80-08deb5524502 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:56:48.3736 (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: Gr6dS2OTl7o/dxaASjjd0cfYIUoolb1fCCJ51aAJeYQNDxeU+umJQRBk504x2abCq6k3mfpfHG/0mEA5dKkSHw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 Currently, PCI-AT takes the final image if multiple exist. For FWSEC, it takes the first one and the last one. Align both of these to nouveau behavior by taking the first ones. Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/vbios.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index c5dad9e065da..ff21f85fdfb6 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -333,12 +333,16 @@ pub(crate) fn new(dev: &device::Device, bar0: &Bar0) = -> Result { // Convert to a specific image type match BiosImageType::try_from(image.pcir.code_type) { Ok(BiosImageType::PciAt) =3D> { - pci_at_image =3D Some(PciAtBiosImage::try_from(image)?= ); + // Silently ignore any extra PCI-AT images. + if pci_at_image.is_none() { + pci_at_image =3D Some(PciAtBiosImage::try_from(ima= ge)?); + } } Ok(BiosImageType::FwSec) =3D> { + // Silently ignore any extra FwSec images beyond the f= irst two. if first_fwsec_image.is_none() { first_fwsec_image =3D Some(image); - } else { + } else if second_fwsec_image.is_none() { second_fwsec_image =3D Some(image); } } --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013064.outbound.protection.outlook.com [40.93.201.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 656D5340A62; Tue, 19 May 2026 02:56:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.64 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159417; cv=fail; b=KNBmfqq3zoIJrfluc4nA2dwwMJdr2tDRkpvcrC9gGYnYrFi/dbiDN6LdTRrdfj53+8F9S/1AFGzLsZ/CPWMX6jpojd3R4wyIcSsHt747grXQALe2yvigvc6HVodFUG5mClSxxpFqxOHVpvPD9NjPIN4GOd3PUuWmsrQcqNPOx+4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159417; c=relaxed/simple; bh=I2TMwV4x73nTf4nhRGGZiE72QZRK+yCPYzH72uNbWkQ=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=EY10abDS9lju9wYa41EEd1og+hPA/nsP1rzkdj1ORtWvuPL2STgKbPXljVQ2pQEgED5GJTMDCMxyXc/+3EOMaWI6dCT6GASS4QBpFxiZQq/MrkYPxdIU8HI468wPqKBFZr6O8ZKtAY6Agx0gmGh2OsL+IGT/N0WicLtgfDAKXQg= 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=nWb3PnJ3; arc=fail smtp.client-ip=40.93.201.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="nWb3PnJ3" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PWuxMyoV3bw/BBoa564aGyx7icZsrC+seg8xKIeXY3UshARagYfZeuP/Y/kH5ABin/MuU4TH6d9dXCmFJOTF9JJ6uD3YzQ8Wl+mePUYpDIVJOscAk8b6qFN2ROyQOS2jqNA1jCnPxYmLcwlZzx3tYX5QjPZwglMBBxWMnedNa8IyVnljl2Nqiq8RdJygIrHkrUFcMLSm+LXX43zLyVzJnq0G69hfzOw2cjbCwsbUSJ+aSRljoFAS1p9dCUlf7q7+dBbOT1byVil80jiOUxbY5FFpsY+aOQLnfqB5vE27ch8nfkFSy9y+/Lg5eWRwoAsQyh7Fix4NYm++C8/4Ey3ksA== 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=L4Bk1xiDF/2KD+IERc8hfzDoL82h2P6JxJuR86NfbDI=; b=B/0ZTHUNYyfLhOJR07e2VffJAyDmysXMbU1cQc8nLjM/+PPASXRe6EMNZh2bY0LgW97SUkJMqtS5Ywvpgfb0/nFASGJoJlazD96C5gOaebHBGfAg3+SMHtn7OKbLURmdtKsZhifUny0J6BeVsDT9TuhlBgT3cyYwLlgvOW5gnwm7WY2vLMC2p3kISdMt0rwu2ESZBn5ZF/zV4KToD8KgxRfwwer7wLuSE7iXU9CjA3sBhVSxEnDtm8u9sqyaVeTVUPx8GWFKRUKoTp5W6uIxS9YyjFFefNsTxpMij/U9QSQpeyYRMMRIPgACbexmXj4E/3b7gZarihTzMntmALBClA== 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=L4Bk1xiDF/2KD+IERc8hfzDoL82h2P6JxJuR86NfbDI=; b=nWb3PnJ3FJVRJ6E/nL3+Tc7YNB5aGgS79A7DbsfhFKCszjxnhcDfopU1m8pywTgJLP8DxX7vG0X0KTZmjyt0LbsO2meEjtav5sL0dNXHUcjcR6/cwJkp15M4qJDuJsVoznA7/ZybZF5RkMP1OIcDp0PASnZRLrMputbzlGJeL06iNVOnDJm3afCwMveN/uJiDtn+3Ft43pHveeP+vU7cIWmq7hCMwSmkmzU7VQJlZ7OvnpnTtT12/BfdPeZ2htNAok/WrFGPsJTJPWdWjH8BwHM3MjBhrRG6hCFEDwSz9a6LJ0Yth+Ns6Wyn5N7h5M2WFB2/P5qCYyLs8rZXphx4Bg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:56:52 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:56:52 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:55:10 +0900 Subject: [PATCH v4 16/20] gpu: nova-core: vbios: use let-else in Vbios::new Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-16-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY4P301CA0023.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:2b1::15) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: 57996ed3-f027-4006-05e1-08deb5524780 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: p01OyhhutEjWMZT0Xyj7KEdvEOSR7uAjMkYDaf2DLAjPawjeZ+riZeNUL913ZnwjQlH526QJyL0Up1QBNx/AcaZv03+p/kxjI8aM4At+nd+EDzkdy76ptYdIv0kjrra7cVBoY7F/5OIsnrzShVOio+wPxjONK7D1qicrT52qR+EUOREbkJlLSG8ccuYt9hNVZn+vHIGQzal799bYXM/yi/271OjGacLSPC/USKG5phixZ4b9PZkOJrmlvMm2J+sBOFqQ2n3BHhavEnJ9XSkFYzyrZrM1sPv5UtYJ+s0ssRzdz0TMQOiIejwzYLja+4sFLnr4CGLUTK6RYwAHWKjaAFGtIeslSv0fpkyO9OYo2HBMFMSQjMHkxM19gxYHZM1dGsqXPn2Fd0uoMObfxYRmW1n4Q8/EK0D35QJqAehwMeLLAE8mH63MegpSoae84YfzRb2MUHYacUNxq4VX1W4VdGeGJ6EVVmC8NbszoV5Us85LDpowOt/kAhUl3VVQcIWffC1d7j57sfHORL2ZThWamgO1hNraoCeZA8P6sS7oynrgWawUUtnKW89/5wxFAgcnqMn9HjqxK7N6GVml7CAAPnwcTbgVuMwDbFl/rXLBKJP49AJwZTTZDNJreqJWmX8fo8LRPT+OPWp15AhgGJ+8KvbVY5g1jrGr3nIzIxRDuy34/4+e+zDV71EG1/Oxs8pG X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NDFGRE0xOFJUM3ZGekJWQ3FQaVFZcFRRbGdtblNuZGRtVU1Qd2pKT1kvZ2E4?= =?utf-8?B?UkRnNEdzcmw5bGUySTdDS3p5R1lNbFBURHpUdndPYUNqWG9lWmwxS2x1ZUVI?= =?utf-8?B?dWNndk0yaVVYNmVTckZ5VHZjNjVQV1RrSGpsOUNTQlZpRHU3aHVUTVdsL0hj?= =?utf-8?B?SW9ZMmNqWEpPcFAyRlVLL3JuSVpEeEhUc1JxWjFjYU8yanlqSjVrdFJtcUQy?= =?utf-8?B?STJTeUxCWHRnOTdPWEN6WHRzb3Y2UlR4RkN3NkdPRXhhcndKclhmRGRSMFNW?= =?utf-8?B?OGJhbkdsSFBHUmZsR3dNQjR2WFRSRENpTjVSZjNCY29XZlhkNWZITFpPb3RO?= =?utf-8?B?bkNJWnd3eFYzak01eTQ0a0kybjFOMGhsWk91QURFM2lvMUZPMUlVOFlRZ2Iy?= =?utf-8?B?RXdPWGdZTGdQYW5xYzl0Yzh3SThCa3BHMnNNcVh5TjNCa2grL3hZRk1jaCtE?= =?utf-8?B?bTJiK21wOHY4eHIwVVRxbVg4MUJDV05oR1hUZXFMYzJ0NEpwZHlBbTcxeFcv?= =?utf-8?B?UkREZVgwbmJ0RXUrNVovUUw5eTJDWlcxdE1BaVljc2ZlZFY0RlpkcWhMcjhZ?= =?utf-8?B?Q0R4NWRQZlJWL0gzQzFSVVdpam8vZDJ6NzN4V0Z2ZmhrcHd5U1dPRHUyb0VE?= =?utf-8?B?OFZhZ04zemVqTUp2UGJvR0xGMmdLbXlLeXRmb1hMQmtvYnJKODZ1OWxSbks1?= =?utf-8?B?SWNSL1l1eThvUXlJT2szNE1GTC84WkVFdWdIYzdKcExBOXptaGFmRFpvbWov?= =?utf-8?B?YlIzY2UxM0xlbEJCeUtjbzFaY1FwblFUYmZxQjlFUkJjdCs2Ui9SK3RVcHIx?= =?utf-8?B?cjgwL1h5NTNLQWlINCt4aWNERXJKbVJjQTA5T1VRWUY2Ym5ZMU9NVEovRytB?= =?utf-8?B?WnNGZ3dBbXZQL1kyQmQ4SSsvMVVKcklIcnh5bndrMHAwY1MySTVEbjVmRGJy?= =?utf-8?B?M2VpM2o3WlNzUmZMM3ZON3VQd3hyVS9LVEhtL0JvRjRqK1R4SW9jREpxYWVT?= =?utf-8?B?UzUrY3llekdmNkErKzFKVVNLZ1ZxcXNGQ2lVU3BqYXVIK0ZOc1dHQjdzNFlx?= =?utf-8?B?QXp3N081TCs3NjFPTHIrSnlnL0dqV2FSZzM2VHUvYVRCc2ZrMVkxay93c3Vj?= =?utf-8?B?ejVaRTFEdmxZQVZTTUJTWVZrbnlrQm9XekJidEphUmhOb3l0ZXNtTzAxZGdE?= =?utf-8?B?R1BVYXF1Q0tTQUg3WC9LWURRc09WNy9oNDFnUWFZTFp5ZHNOdG1zSzFZOEh0?= =?utf-8?B?dCthbTB1UjlUTUFWMlNVL1hUU2M4dkZSdVcrSjJja0tVbFNhS3pZTnNQK1VO?= =?utf-8?B?T1R4N1dwQnBZekFFTUxFY3Fwelo3OGFxaEVxaU5tUnVBT3hNYWVCNzBHTkxJ?= =?utf-8?B?Tm9zcUU5UVdEZTdYREFqdnQyZnJvWlNEMitpZEVnOXRxWndFdGViNlV2WHNT?= =?utf-8?B?RUlQeVp3ZmFkc2k0M2pRc3hraEt6c0Y4NFBwY2s4U0w2NS8xMmpiTGJxd3I4?= =?utf-8?B?NVFjYXFFN09KMEZSSWxIT3FPdXlzQlBuazJwRmN5SHo1dVAvRzliV29GR3kw?= =?utf-8?B?RlFtWlo1TFlCZWZ2eFJPaWo0VFdCSDBTSndoZmZTeWYrc2UvZXE2Wm1yc1Bj?= =?utf-8?B?Rlhra3A2aTBPdEN2dklVY2p4d3grKzMrNThoK0NrdE40dFNmLzhteVV2aWpv?= =?utf-8?B?ZFlZbXRBR2hBdzJOOGcrK3JEUjNEMHZ1c3E2am5JbkNTdmNCMkNVYnhSVU8r?= =?utf-8?B?UGs1ZmpQRHhnYlpKekxDYU1lS0d4NUZuS0ZwRGtiRUJVMGFkaGI5a3VwaGhz?= =?utf-8?B?bzhSUWhycG5NOUtrRGdVa2FYSU5ScEpOV3B2UWg1ZmVBeVFxMXdUL242RXJ1?= =?utf-8?B?U3VtTjkxLzFZRDNBSW5CVklCVGNRUkVNR1VZZXZoM0JrMWN5VkRlNEJjc0ww?= =?utf-8?B?UGRjaEJ6VUZmeFZUNUkzV09KcEFFM1RkQUdtS3g2WTVPblI0NTc1UUpjWTNW?= =?utf-8?B?bzlpUHVLRzVxSUtLNms5YkNFV1k4Z01TdFd0VVZZdlpja3c4Nk5YQlNxMVZk?= =?utf-8?B?cUNuYWxYS0VQMG1sYXN4TW5KVThRZHdyTzkxZVJmOW5xam1idjF2RGdOZVRu?= =?utf-8?B?TkV0NGxzZTBtS012OHQwSWVGWEhyV2FLN2xaUmVuejg3UHVKRHJ1R1Z5cXd4?= =?utf-8?B?bnZCcHFVR1hkK3BOMlhuTUxCVHAxbjUrZkRxK3dLaVp3MFhIV0krOWJxS1c2?= =?utf-8?B?VGlUMmJkQS9ON1kva3pZclBoejlHNzNkRUZlamNqNHNNYStIWUlnQ3A1YWw2?= =?utf-8?B?L2Y1Sy82bEVldnpIeWJSeVlGN09pRG9YVkY1K0pXZzdrUDN3S1BOdFBXMkRh?= =?utf-8?Q?yDnSqLUTRRFbNT05vALwsMAwihgxvVOaYJbQSTtOEkPlH?= X-MS-Exchange-AntiSpam-MessageData-1: 5T7s1rfAf7AAqA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 57996ed3-f027-4006-05e1-08deb5524780 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:56:52.5966 (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: xPGvoBifoxELJeIQ1nX9WHShl1HqT27ggSgKX/pM0EdzbZ0fCm7EWJYkbPelL4yLdCpDPE450l51IgpwZdMJIg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 Improve readability by moving the success path outside of a nested branch. Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- drivers/gpu/nova-core/vbios.rs | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index ff21f85fdfb6..64d100b6699b 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -353,30 +353,30 @@ pub(crate) fn new(dev: &device::Device, bar0: &Bar0) = -> Result { } =20 // Using all the images, setup the falcon data pointer in Fwsec. - if let (Some(second), Some(first), Some(pci_at)) =3D + let (Some(second), Some(first), Some(pci_at)) =3D (second_fwsec_image, first_fwsec_image, pci_at_image) - { - let fwsec_image =3D FwSecBiosImage::new(pci_at, first, second) - .inspect_err(|e| dev_err!(dev, "Falcon data setup failed: = {:?}\n", e))?; - - if cfg!(debug_assertions) { - // Print the desc header for debugging - let desc =3D fwsec_image.header()?; - dev_dbg!( - fwsec_image.base.dev, - "PmuLookupTableEntry desc: {:#?}\n", - desc - ); - } - - Ok(Vbios { fwsec_image }) - } else { + else { dev_err!( dev, "Missing required images for falcon data setup, skipping\n" ); - Err(EINVAL) + return Err(EINVAL); + }; + + let fwsec_image =3D FwSecBiosImage::new(pci_at, first, second) + .inspect_err(|e| dev_err!(dev, "Falcon data setup failed: {:?}= \n", e))?; + + if cfg!(debug_assertions) { + // Print the desc header for debugging + let desc =3D fwsec_image.header()?; + dev_dbg!( + fwsec_image.base.dev, + "PmuLookupTableEntry desc: {:#?}\n", + desc + ); } + + Ok(Vbios { fwsec_image }) } =20 pub(crate) fn fwsec_image(&self) -> &FwSecBiosImage { --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013033.outbound.protection.outlook.com [40.93.201.33]) (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 7AC57343D75; Tue, 19 May 2026 02:57:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.33 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159422; cv=fail; b=F3FiKL+jtug7pW/GEmxTEHrKTkzyF3JphgxyFIw718EeL10rAnIHXy0R5/ReeZ2Vq6GWMHrmwRAPAUt+wN3OkbVnOuO7AvbVvbwCCqf+Mwmya8B9080T/28RejFn4hAA+P45QqO3bfcj3AtR/tlexwcUycZqvRluYnqf1ckUj3c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159422; c=relaxed/simple; bh=u26PVKhIXwcWsHrinWTvX2Q70890hYdKpM/Rw9U3Kq8=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=pM0c3Gl2oe/RrReLO0D5A032suQnYF4HDdc5IhUTwuLOUUOH/IeHgmbMafdIGukDtOqs7yZd82rIgh6v4yHNCfwmlYvSbMy2XdApHD/cb1akX3EhT5f7qQctwEQFVdXdWzDgdmyu1y+4bUu6TrrPBDVa2NC2EI0dX8KUfFVWwJE= 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=p0eXPQZ2; arc=fail smtp.client-ip=40.93.201.33 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="p0eXPQZ2" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fwTKCu8pS9af4PNkF3CJxvtRMVAflNmu5UkGOEG8Ajuov6ASB+fCN1XUfdeUoTC4xItX9OqS5QOvTFnyqcC+PQGIhXBe2TqFbEQ4VBl9Jj++SOEgD2nuPXPLmjlyfP/Gd7olH/ZsyTVSac2QQgkD81VMVTIcrgW9SaTfN8TeyOfjWSkC94ujPMoYiDKYu+C9dXsY+wFsYRA1D4ioZzKa0EfcA7Pl/Xxh0kz9lgJmgsJlzXpsnt2f4YAydHWL8chi/i2WYV9Qq5xRIn72OCAl7jUw5xU4V6augdUxSKMBI/Y8YOUyY+9gMTzskj/J0/CSW55C9zcfyZxMy/AjoRAu4A== 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=7dYxb0UEbI3yON16hYNzAuiaHJLh/M9Yf/zfLtTTCE0=; b=PP4YPblb3WUq8qUhvfPOYGYc/cYTXNeCCyGONiQ7JUdiI82qRzjAAMHNRwFR8ujDHWeHc4HrN6vq/MwYgBdznbUOmmCtA2TEVpDL1J3CobzcJv5HFWQO58h7D1i+mbu/Mi6N7iEGqr6U9pfz4vMqy7ydR78PGu7lX1/eWGHQ6tJk2xbXEBKQcAfTLAlIKc7dOgoKlHoLYybw65Lja2dbcPklQZ4b7sTpTv+1RwM/VGTxgKRMlo4zsh1eiKLj4STZc9ULlIMRshohjtStL4WqZ75WfJBBDbCodkUMy3srqajkZyFc19Mn+C5+V3i+vvwDWatYU8TxX2pT9qit1T8GUg== 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=7dYxb0UEbI3yON16hYNzAuiaHJLh/M9Yf/zfLtTTCE0=; b=p0eXPQZ2jZzbt14tectZv9TZRNrfDArNpYVRigKodPT4myqWrM1vGZaCUE81ci1pp0NaSy+Iwyy63QDgRA65FZpP/qhzqIuxA1iejojLlkEuTqTCHxFD4sKykQ7HVLGhdmwfzBqLPz4mQgDIR79Jis03r9Y9S0vGmKb3BqB7MW7NqOnQUFl795Q70xmSZn7vh9NSTzdjltenA5Mg0VCiXtOA0SgzTO5shNWLBVN5M5PeRzfRRcYLdJ+5rkaKdMLX1aE7/8KY7shhiVl5OwmEGVWRPXjMyWc9scnPvTE4a/kvoAg60fz0rKvdRe0GJdjL0dmGhPLUadUXRBUv3Thwtg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:56:56 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:56:56 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:55:11 +0900 Subject: [PATCH v4 17/20] gpu: nova-core: vbios: remove unnecessary fields in PciRomHeader Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-17-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY4P301CA0041.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:2be::15) To SN1PR12MB2368.namprd12.prod.outlook.com (2603:10b6:802:32::23) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: 078d7406-0ad5-4336-f2a1-08deb552499c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: YOPw4/otvtnnHJMzB24V5Tx40xtGPI895sygyA0oF3Oh/tSb96QQ9hGBb3JfePuC5fLWqs7e1ntYRfwzrjdDxXEYvnFCXuPrxSea0zHh5kVNjqv00zNjG08yhKIkwvjeYzgW6tudY/u3HflEXHaaTqWrOkZV1er9YbU2g6Nn+GR2uEKLlD53qPV/Iye2jL/VBEg41yX63tlD/Y4cBwllCziBz2a5aozyd4MM3F2GIg5BGp1ryEixbgeUgqJdrYA84F0RlthJApfc9OtKlDEtSzRgsUwDoUBYJeEHTTFqLuX/3DkZb8yRvS3HOop7BzIRML1hleQvYBQrHrRHD4wJVoZrHj8O6prtDj/xdcgWCgyhM0rzao4xHHmaVKxLUP27I+RtNVnGsZZUMYDHo1QNFQjBjk+FdkSH/I6bPfknKhHzgigVd/UJ5Rzoh//5ncnNJPF3K0tyoyNQvgrgqOSocS0W1xVyYGwqIr+5LdJ/SP1Edf/X4fZU/VFPpWUoSrfjPxHro4qPFKiIFWvhmzfClry/U3e/Uk6j7ImCUjDfPi2mpkVqgsDkFy1Los+b3s+kICCsnE48m7XXh6RhiqXG4K2pOHAvmHfTASl1iKo5EWzau2wnngCXdz7JRIcooiLSh5UAY3xsALLFxRGJv3FKiy874FX4aNQ+YyBHUDWjbXI8BXghIBwEbAPVvKEZI0qw X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NnJvY2pSYTBqM0lDSDJqdWc0azVNK0FFMk5rbm5OZDViVmxSTGJ5b1hHeWE2?= =?utf-8?B?WG43YStMQUZTV293L0diTGM1QTB5emVKanVNbGNkaUtEM0pIM041QjE3QTI5?= =?utf-8?B?aWlZMGczckJYK3BCUDRFc2k3bkZJWERYZHU2elFwdWJNTkdwaVdvMDFRY3Z3?= =?utf-8?B?dG5Xb3VhVkFMQks3ZzVZOStLL2tLczNEK0ZhbDJOaTlsTDJxUVJVVWhJUDcw?= =?utf-8?B?Z1FGSC80MXVGR0grRlAyRDBEbE5LRUl2ZVh6Q3lxTWNJVHZ5VjFUWmFNQW1p?= =?utf-8?B?NVdULzNwMityQzdyZGpxWHFqUk5sZ3hFTFZTNFU0UDFWL25sNG9Zb0J6WGFJ?= =?utf-8?B?L3JiWGtDS051S2lsWkFDVzlmNUtNYndYaFRSa0ZocnNvUTQ4d1VkbllPaVN6?= =?utf-8?B?UXk4NnNFZlA1WjdpTCtyYzRLR1BwcWJ2bWtYVExTdXkrK0toZjBqdDdwcDc4?= =?utf-8?B?VkNkZ1QxbjFkRm1IdFVYQW5hWGh0ZnpmVFdNREZPdFAwbXVvREhQNkFRcWFx?= =?utf-8?B?NHFJRzhnc0dLc2tWRnJOem54OVRGMzQ1NTNGM3FFUDFFQWJ4UzZ5TU9DZFhE?= =?utf-8?B?VmxIVjVqSHU4WHFzN3ZxYXZ4NEZNb0NveVRxN0R1bjJQaC9yd1dxZG1QNlBo?= =?utf-8?B?Tk9GeVE4c1gyQndOUkZHczVaSjFYNTBpU2hsVDlsT1ZqZ3UyYS9Zc01oMUty?= =?utf-8?B?d2tsMlVTclpZUGV6WldJcHUzWndLSHBxaDNZYzFDa244ZXBvdXhocDBxTW4z?= =?utf-8?B?eUFOd3VDenRsamtvU1BObW03bkhaeE9WbEJWakIvd2g4bzgwUmMxcVdleVpG?= =?utf-8?B?V05yenpkSTc3cjAvNmpvOXpoS2lTLzY1VHZNbUZScTJEenV3eFBLTnZ3K2RN?= =?utf-8?B?SDZoS3JoUWV6WHVpd2IyckQ3YUFEbUxMTVpJeUJiZmRCZXlZaGhGVXZIdGc2?= =?utf-8?B?UUk2bE5OTE5maFg1VnU0Ylh0TnpSWHQ0S3RYcXRsYit2Y2xvdVpCTzI2RitZ?= =?utf-8?B?bWZkVDh3Zzlza2pPLzlWbjFPWVllUUhuU1RPQ3dhUnVLblQ4b25UemFHeFMv?= =?utf-8?B?YW5XTzRuRWY5UXFIUUVpU3h0Y2VhVEFYLzRWRUlLKzhsRVhPbHdiYWhJMmJM?= =?utf-8?B?cExnMHZkSS9NUkYrQVhOM2h6VldlUVVOZGNqZ2VZQmFyR3kvaDJURjFUTnNp?= =?utf-8?B?Rjd4eCtQZjhQNE1PVkwxSkEzZVp1bjE5cDB1N1Jsb094MnlBT1NRWERKV0Rt?= =?utf-8?B?UGcveTFvVVNBdnEzS2lvbk84ZlhQMENGZCtPa084a2tKMFh3d29vSzloMUdW?= =?utf-8?B?aEd4bGdsYk9saFdjS0tLNVZMYndSaDFyMGdxK3Y1dXpjYnJrVmZzNGRGVEI1?= =?utf-8?B?MmVMVFgvbFl0N09sa3FaUXk0cWxtV1UrY25HYTBtclhVYTFxTnplR0NBSFhS?= =?utf-8?B?eW04NkREZHk1N0x6REZzSHF2UW8xU2U4T3lHRTRxRTQzcFc2V1FFUzB5Mjhv?= =?utf-8?B?U3Mxdmo2VE9rSDVvY0U3eXozam9CNTFCOE44TmFvNmNTdDNUSElOb09HOWFX?= =?utf-8?B?SVZEbFl4Ui95anNiUWZOaFUzM2JvZ29FQmlZajBwc2dLZEVLMUtFbktKMTJD?= =?utf-8?B?UTRUY1o4Q2IzUysvYW8yT2pNd0tjeldHMmtuWUFpenhWdnhQWXVWbmpLUUJL?= =?utf-8?B?dGFoZVFGdVhXOXhHdVBNUWxOeExzUWk1ZXh5TjdCTlhtZkhET3RrdDVFVjNk?= =?utf-8?B?ckRWcGhRU3lacjVhZG5SYWRjVVAzcCt6Q1hBek5aMW82cWNNTlhBU3Vacklq?= =?utf-8?B?MTJuUVFreW9LN2l6eWpUUHNVK3V5RldJRTlxeG1LbnczQWdKdjFCY1RlUDN6?= =?utf-8?B?dzdqOVBvWVZuTEF0cDdJcFc3RXFxcUh2RkV1c21BYW5GTUhSZlRUUFdyd1ZX?= =?utf-8?B?ekJZMGJSSkZNNGpLYzBuQVR6N1dPUUZ1MjJDS0gwOXRQdDJrSjVDdzdQWExL?= =?utf-8?B?bzIwMTAvUng1L2FOa2VPaWRjdWN5V1JVQzlHQ1M5R3BNY0lWN1pMY1g4emVj?= =?utf-8?B?K1ZxM0tXNlhvNkEyUFB0d2laK1hQUENWelRKMmlHN1B6UVhMb3lCYVdVM0hT?= =?utf-8?B?SExEbVpSNjVUNmkzU2Z5aUZoQk4ybE4va0JTU1FSSFdMOTc4OHUvU0NBaWNz?= =?utf-8?B?NWdtYTZ2NUF4L2wrSnNjRzNYTUJkMmdROW5rN0dyRklKMlc5OGR2OHYzRmp0?= =?utf-8?B?VHdEWDNlR3RFaGlGMHQzdjVtVUNyNWYzaVNUYnU5YnhQR2IrMEFsSi9PdzZl?= =?utf-8?B?TkRHdGVPNU5rQi9NNXJnZzJKR0RWNXZpKzhMZC9sdDFicXllR1QzcHRaTlE4?= =?utf-8?Q?SgWWWolF+qt/mXeAhC4esp9rjsRIHLpVTY1ScT3+/Qa/H?= X-MS-Exchange-AntiSpam-MessageData-1: 1NU0TXx84O62bQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 078d7406-0ad5-4336-f2a1-08deb552499c X-MS-Exchange-CrossTenant-AuthSource: SN1PR12MB2368.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:56:56.4794 (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: QoXufXF0ZSARogEaHlZ/qsEwBjqvdbJCQhhJ/V6q30EI1T22KBXN36KfpGf1ijHiFdJ8jGq6kI0L848FQyhR/A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 Remove unnecessary fields in PciRomHeader. This allows a simplification to use `FromBytes` instead of reading fields piecemeal. A lot of these checks were redundant as well since it checks the size of the `data` first in `BiosImage`. Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- drivers/gpu/nova-core/vbios.rs | 68 ++++++++++----------------------------= ---- 1 file changed, 16 insertions(+), 52 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 64d100b6699b..1dca7933fac5 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -546,67 +546,38 @@ fn from_id(image: &PciAtBiosImage, token_id: u8) -> R= esult { =20 /// PCI ROM Expansion Header as defined in PCI Firmware Specification. /// -/// This is header is at the beginning of every image in the set of images= in the ROM. It contains -/// a pointer to the PCI Data Structure which describes the image. For "NB= SI" images (NoteBook -/// System Information), the ROM header deviates from the standard and con= tains an offset to the -/// NBSI image however we do not yet parse that in this module and keep it= for future reference. +/// This header is at the beginning of every image in the set of images in= the ROM. It contains a +/// pointer to the PCI Data Structure which describes the image. #[derive(Debug, Clone, Copy)] -#[expect(dead_code)] +#[repr(C)] struct PciRomHeader { /// 00h: Signature (0xAA55) signature: u16, - /// 02h: Reserved bytes for processor architecture unique data (20 byt= es) - reserved: [u8; 20], - /// 16h: NBSI Data Offset (NBSI-specific, offset from header to NBSI i= mage) - nbsi_data_offset: Option, + /// 02h: Reserved bytes for processor architecture unique data (22 byt= es) + reserved: [u8; 22], /// 18h: Pointer to PCI Data Structure (offset from start of ROM image) pci_data_struct_offset: u16, - /// 1Ah: Size of block (this is NBSI-specific) - size_of_block: Option, } =20 +// SAFETY: all bit patterns are valid for `PciRomHeader`. +unsafe impl FromBytes for PciRomHeader {} + impl PciRomHeader { fn new(dev: &device::Device, data: &[u8]) -> Result { - if data.len() < 26 { - // Need at least 26 bytes to read pciDataStrucPtr and sizeOfBl= ock. - return Err(EINVAL); - } - - let signature =3D u16::from_le_bytes([data[0], data[1]]); + let (rom_header, _) =3D PciRomHeader::from_bytes_copy_prefix(data) + .ok_or(EINVAL) + .inspect_err(|_| dev_err!(dev, "Not enough data for ROM header= \n"))?; =20 // Check for valid ROM signatures. - match signature { + match rom_header.signature { 0xAA55 | 0x4E56 =3D> {} _ =3D> { - dev_err!(dev, "ROM signature unknown {:#x}\n", signature); + dev_err!(dev, "ROM signature unknown {:#x}\n", rom_header.= signature); return Err(EINVAL); } } =20 - // Read the pointer to the PCI Data Structure at offset 0x18. - let pci_data_struct_ptr =3D u16::from_le_bytes([data[24], data[25]= ]); - - // Try to read optional fields if enough data. - let mut size_of_block =3D None; - let mut nbsi_data_offset =3D None; - - if data.len() >=3D 30 { - // Read size_of_block at offset 0x1A. - size_of_block =3D Some(u32::from_le_bytes([data[26], data[27],= data[28], data[29]])); - } - - // For NBSI images, try to read the nbsiDataOffset at offset 0x16. - if data.len() >=3D 24 { - nbsi_data_offset =3D Some(u16::from_le_bytes([data[22], data[2= 3]])); - } - - Ok(PciRomHeader { - signature, - reserved: [0u8; 20], - pci_data_struct_offset: pci_data_struct_ptr, - size_of_block, - nbsi_data_offset, - }) + Ok(rom_header) } } =20 @@ -722,11 +693,11 @@ pub(crate) struct FwSecBiosImage { /// BIOS Image structure containing various headers and reference fields t= o all BIOS images. /// /// A BiosImage struct is embedded into all image types and implements com= mon operations. -#[expect(dead_code)] struct BiosImage { /// Used for logging. dev: ARef, /// PCI ROM Expansion Header + #[expect(dead_code)] rom_header: PciRomHeader, /// PCI Data Structure pcir: PcirStruct, @@ -771,15 +742,8 @@ fn is_last(&self) -> bool { =20 /// Creates a new BiosImage from raw byte data. fn new(dev: &device::Device, data: &[u8]) -> Result { - // Ensure we have enough data for the ROM header. - if data.len() < 26 { - dev_err!(dev, "Not enough data for ROM header\n"); - return Err(EINVAL); - } - // Parse the ROM header. - let rom_header =3D PciRomHeader::new(dev, &data[0..26]) - .inspect_err(|e| dev_err!(dev, "Failed to create PciRomHeader:= {:?}\n", e))?; + let rom_header =3D PciRomHeader::new(dev, data)?; =20 // Get the PCI Data Structure using the pointer from the ROM heade= r. let pcir_offset =3D usize::from(rom_header.pci_data_struct_offset); --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from BN8PR05CU002.outbound.protection.outlook.com (mail-eastus2azon11011007.outbound.protection.outlook.com [52.101.57.7]) (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 043A833BBC5; Tue, 19 May 2026 02:57:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.57.7 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159427; cv=fail; b=NlBKJXlgFlHfOSyF04jHrBJB4uSa/atby0/0u7gyxZV/3SApXTAJlAdQtwSnJCqFil289S7Bhp2zKus1UOyLeb7TuxAIC8T4Qc76u2WFUdKvCSCWdcf3wjIJteC/tdOLCPtDq7Vjo5yVJgoADUSMBHa6f+kMDrbaci4e1cymPuI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159427; c=relaxed/simple; bh=M3ok+kDimry7RWMWNP/uMA17YR8SJIDUuKcOYT7of5U=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=s7E+lOVIpXli99Cj2FJKQLyO1lFZpNE4JSMQtH2uI/XrPj8u6KBXnXYMALSU4yJ7ajUpf8X6DPSCZHILYSQyToURzipwfzNU/SwlnsuKw1FxAR+hjqiwm6x1HuDZtt4pi+Gr/tDzGxfOLuFTQD9GhM/z28/7JuFVIpkwwfFZo1c= 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=bgdd8SMy; arc=fail smtp.client-ip=52.101.57.7 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="bgdd8SMy" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mwRVtYY5HQihev1z4DoW4iiq9ORYtOJ4Rjsoxaw8AhkA6rk6D6ZRHmyskK/QDquRFge/xhY4RBSjHP/dm0FQhRywwHpbmjToSZ1+w356g6x32cEXCjnhET6kev46YWgFZ6jYBiuMFdVhoz1eaTP5brI/5B08jpdBKhBvuj/9BAfVEORfOd9wpQ0R9cknoXZ7PUH6n+ej80z0ac5xas99ds9eO74O8hWW4G9DrKVifrj8c+P//IhvRasSKCoiILWnoG66fqAJkayZjIXAu+KHJtNl9JYjQ2t/p/T3YcmASpbQHecVcukO+h1OS+1eDANRhGedSKwAe3gnjvaQCpx1QQ== 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=skCH2H/Jmg+cimdHD4tGh9+CEuo1RGzoh0Y1GieELaA=; b=P9HZPDY5WEmwrE70miTFB7+m3BofK/025KTJ80KsbRpevRuXleqLa4oSGTWF2mWEm3cJwu4QIhTodRgUikL6VceaBYm36Cv2NZNIlAlFKeOwFFycDQETta7pKGkMKxaXMN2gcNqxdcSRCj2UwTh2QHOJI+Sc3Iz9JUnEXCzMPt5f934AhWqTeWaOI2iA1Kex6xl/RgYkC7C8Tc0UwcgGtnuvDoYX6NjIs3fqjrmTp92e4MeF1Z17aSDK+XJHd0F5Y4F21XtC/sHq1oyM/Pc0nvp56MhOMWR1w+1xkRlNYpGTKzTwe94X5ZL2+NoXoKUVvzQKlRGxrjPrNimKxKcmOw== 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=skCH2H/Jmg+cimdHD4tGh9+CEuo1RGzoh0Y1GieELaA=; b=bgdd8SMyqYI5iVGi/dvEoNuBy6yepPqSUrI6fXNd7ep8g6aJtAzqcgtq/sESPmEmu53YqkN56KcZ+a7bAiuN9SRrJW0v+mHEUt/J0Ublg9//NJBMZ/u8Yy7BJGr5rOceAPLdj+GdsFhAi2OOdE/8osZgRP0yNJ+vQ4kIgk/PwavWab4AQgkW9WSEtdHwOVjEd9Dm6U9fjzypuIr1b615N0r9s6AgbHeFy5ucpy+eOJzaw8dr4B4e2KNESdEIrPj3d72PmjaVTVK/+HNAh9raDUpOKVkkppn0qxWpt6rTG4NUnk8BVHrjdTYdmo9shqY1ULXNiknm6UPr4MI9UTjV1g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:57:01 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:57:01 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:55:12 +0900 Subject: [PATCH v4 18/20] gpu: nova-core: vbios: drop unused image wrappers Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-18-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY4P286CA0089.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:369::11) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: 707a5822-408d-4a5d-e0e0-08deb5524cba X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: TrkbvAY4UMxeK1lMBt7K/8Sx2ABCKYGJWF98y7kuvdW7wUnPsOcjVvoeyUU4baguVB1OubyT9vjQj3NStPvJCphudZBhfu3VWrWO+rMLL5uhTeU71cCiJXMEuLUoQjUQ9PpBmg52OBJHfVWGGEdHvo2jZTN/7A1c2Tj7j8gZgAPwJQ7EinnYljJVYWHyeJkuSqPAknVejiHxBQ9TdGlL5i9I+W2wgnEh8mag2AYI/NeJAFLN3HWepyzfeW4VCYeLgUuufliTTdQDbpoZ/qO1g5+9Si43P9oJ4SxB7FC2DNFHlmc1NqaEI45DkXCWkzsp9PMx4jktP+oJurQ7ztBSMvWAJl219JAqUntA/901l+PM2sA9Vv/0H8PHERN9nuH9zkqK7waTpbrics8DQZ9yiEVAdpQyf6Xoz9w4wqit+aakLN/kYigPeD+PYP3Bae6MmWgki0A4zQwkrHfG+A81pB7iAez4poHvKME2WW3uu1mZpg/RDj+nUjLNSo8hVtaCC0UIf7vhM1uNshE3ubx814rCTyJQRscf4V5F5fXudtOCzzG0Vtabv69Rs/4dbOQF+nW33Z0+Fk/9Doi5O5Q+jsWCW9975aY5HTTU5801zy6Bg2jzqBW+rb6lgH3fDaidMJUd6r9VDSj1tXgusTJhfOqDMd0+zMFPzwn9yDmQaqRS2pfG5b5cIPp2ZrWCl1Cu X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?K1ZkVXlzdkZiQk9pVHIxZ0p1VXNDZEFiRldEYWplYjJvSHdnRHN1MklGanRr?= =?utf-8?B?WnBUZTBIR1hHN3pTU29mNTZxaFhsVFFnN0RsUVQ2Z2NwVFREekxHeVZuRU1V?= =?utf-8?B?Y0xwNXdzbU84VGVpaVdLdEJrYVFUSEl3eUF2VDE5T1ZYTnV3d1ppQVpGZW0v?= =?utf-8?B?U0Vrd2hnMFA5a2lTRW9hUEdrRkJtbHJnYmR4VzZtMFM2ZU1hc1JnU2gzNEVj?= =?utf-8?B?dEZ6ZXdmZXpzVURsMjdJbUhwQ1NXQlpSeDg0RmlTS1U5Rzc4S3lkczhkWm5K?= =?utf-8?B?MHJ1UmJmK05LdStHNnJpSmphakg0ODBON2xjVjAydFZwVmc0a0xMME50UVB2?= =?utf-8?B?d3B1aUhKOXRtNHVITXh0aDlmV2pYdW4xaU0xMHFtSnJhTktvWkM2NnZTNDB0?= =?utf-8?B?VWNTcnVaQmo0TFRlWXFPQ1MzUW9yTWJqOURZc0lQdmU2dTk0bG9zeFFXeHgw?= =?utf-8?B?SStZVHNvSGxieC9oUm9ZaUhRSk9FS2JaR3BPVUlKMUNiektzSDZ1RUhzYlhI?= =?utf-8?B?dUJXOXBOTHZjbnhRb0d4SlM5cTBJb3V1VTNZN1IwM2cwV3hRdkRUSHQzSU80?= =?utf-8?B?NG5ZZ3p6NjBreFZ6VDBXUHNuS1Y4QzI5bWpndldCUThZS2s4bFVaSENkK3B4?= =?utf-8?B?VldtMjlOck5YdVJyWWVRV1NkZGNHUjM4WEhVU0xuUmwyTEl2ZmZWUHJocXE4?= =?utf-8?B?MWNaQnRaOTZQdUpzbHVSenJ5TTcwNXJWTll0NjA4MHNkUDF6YVFuZXVQS1lq?= =?utf-8?B?Mmt3N0lKUjVMUCtjbzViVmdSZFhvRkRsRjc3elNTUTlDWVRNWnJvQW1nR1JE?= =?utf-8?B?T3ZqR0RiNWFCUXlnVXp5dmpJSFpSb09ta3RhWTdJcDRONURQK2FtbmNxMVU1?= =?utf-8?B?c2dzd2Vqa0p2QUZiQlp5aTFuejgwYzRUMDZrK0NyTkdPZHRtSENIdmRSdXNQ?= =?utf-8?B?S3pCY1hkWGVLaFFWR1h0WnNleGRlWUxsZVIvK0xkMG1rNTZaRVJ1NEdqWjdk?= =?utf-8?B?aFlBNG53dEUzclA3ZHNIS1plVENHNnlpTkxYNzRXNlA5S3VySVk4elUrR3Na?= =?utf-8?B?RHVFS2xMMHZycGxENUo2aXMwYUxxNkNUbXA2eVJxK09rcWN1VEovaEIvSWRB?= =?utf-8?B?S1JaRzBFeWpmNURxL0Y0TnAyR25kdGgxY053RzBJdXVkVERUc0FUb1hocHlQ?= =?utf-8?B?eU5JdjFWelFwdnZsTXMrMEozTXRSb3JjWUdiY2dHQTdVZUQxcjdYZDh2WFE4?= =?utf-8?B?TVhxaVZ6QXppaWZieGZTeEQxQ05Eb21hUkNHTm1LeEtROVZLeUp6aERKZldW?= =?utf-8?B?cCtwNURMcEpBN0lwS0V1OGt0eUxoWmlBdGZTVXQ5UEdpWm1aN0wzVlpYL1Y5?= =?utf-8?B?eW1YVFVwd1hxMzg0MDh0bVlQOFVUbXJTOTBwMFZMbUxZcitpdytkVXBzSVM5?= =?utf-8?B?eW9KU2xkK3JVSzNsSXRJeWM5RkIvVWNYTEFNQUhQTStzaXhDLzJ3QmtLM2x4?= =?utf-8?B?VnVra3Z3ajhpOFRObG0zTVR5Vll6RGpMWHFYQ0lIZ2ppMXovb0J4L094VHZk?= =?utf-8?B?NUhZRDVOekduUndTczZoRm13cXlNcHdxWXI4MTlxdXB1NHlHeUY5b2dkRjMx?= =?utf-8?B?K1NXTWV6YWpXa2MvWlY5Y1htQ2dIblg2TGpaNUoyYUliU2NGOEJmRjFkZFFR?= =?utf-8?B?bjdsang3MVN3Ym9qb3VGQXVjUEpCaFExOU41emhxVCsyV2pIUVduT1hQbmFh?= =?utf-8?B?dVFsKzlaVC9KaEM0SDI3NnhhOUdTNExjaml6bTRUbFZCNlkvR3BFcmFQUHhS?= =?utf-8?B?S3ZKL0FKNGNFN3VqVnNqZUU5S0FmbmZDRVNoRXN5ZXlGRUt1K0dobE9LYlB2?= =?utf-8?B?S2FPRmw0elNUdEorMjNPbTVNdTY4WDZja1dxdGE1UEsrRUMybCtJajF5bEhs?= =?utf-8?B?RlJVQytzdENrSTFnYmtJVjY2SEU3T2NYMjlaazB2N3R4a3g4ZjdjL2ttcjZm?= =?utf-8?B?RjlwLzY5Q0N3R0NKTUhHNVVhSFE3TEFpVFJmaHJFMWhkZjA0Z2IwQTE0cUVU?= =?utf-8?B?RzUybGFhemNSbEthU3U4SG9PN08vNXhpaDM5M0c5UXlDNXROUnRyTUM2SzFl?= =?utf-8?B?a2NFQUNUWityb2dTalh2OGowN2dkODFqbHlxMlJNSzNrZlUwRWt6TElNSm9L?= =?utf-8?B?ZjhGYkxzZ3h0Nkwvd0pWS3oyeFV3SGJDdFhlTlI0UDhFcGd5REd6bFBYR3VV?= =?utf-8?B?M1VLZkhTNTVYVmdzQ0Z2RHFJZVQzaTk2RXh2c2Nzbk5LVGg3NVdwOFhuenV3?= =?utf-8?B?My9CMnprelQ0L29tdGRLcWNZWmZRV0dDempCQXBWZ09leVVDdE9ZZHlTSVlY?= =?utf-8?Q?RJEGKWQ72YMHHeMAGfWludgWGl87BdwX1TeojRrA3/Kg4?= X-MS-Exchange-AntiSpam-MessageData-1: AYR2Zid/G/JWXw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 707a5822-408d-4a5d-e0e0-08deb5524cba X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:57:01.3376 (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: tjoTmt0TNqe3a9NNXxM7XrpmIsx0KW92GneBtBb1uwu72+L5LUQNzJHMrFuj8P/i4tgYhiPhUsZCl+XYH/agYA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 These are unused currently, and it is probably sufficient to just check the type of BIOS image in the future. Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- drivers/gpu/nova-core/vbios.rs | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 1dca7933fac5..ad571b39400d 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -669,18 +669,6 @@ struct PciAtBiosImage { bit_offset: usize, } =20 -#[expect(dead_code)] -struct EfiBiosImage { - base: BiosImage, - // EFI-specific fields can be added here in the future. -} - -#[expect(dead_code)] -struct NbsiBiosImage { - base: BiosImage, - // NBSI-specific fields can be added here in the future. -} - /// The [`FwSecBiosImage`] structure contains the PMU table and the Falcon= Ucode. /// /// The PMU table contains voltage/frequency tables as well as a pointer t= o the Falcon Ucode. --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010050.outbound.protection.outlook.com [52.101.56.50]) (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 2FFBC344D95; Tue, 19 May 2026 02:57:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159431; cv=fail; b=FBPTdfaMG9cl5MaK/RMb01CrChN4BOSGbAwZmVUQBKYH9F88rhZ7eA0IMrR/HU0nafeRvZpdqnTpGYuxlg5AUsfWro5wL7UBrMsNlfvgfuPnead2EXDoQEdB5HFUn39HBvMDxjgJXmzz6PF4p/OhmCdqmvFP5vKZ3oHEefnUvxg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159431; c=relaxed/simple; bh=cFtU6saGpEWw1tutAXMGxQIprZwj8OVKWSv5kadoPfA=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=UYGdtN9JhHdUrDyvNTUZvx2de6yJdYD6pA7PMatliutnW/RGZ79bgQTRhW/EaaHkxsBC+3tjWk5AG9e44LHPCHHu8HzowBuuQG8SZyN/HcSAOHDH+CQYq+EMcyOGkGJEVCxScJcQV2LpsaxynWOa95IKIE3eKIUbI3cDdV/JzrE= 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=Icx7++zK; arc=fail smtp.client-ip=52.101.56.50 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="Icx7++zK" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BGIi3HR6BWJ7m+kAtz338VInHxGKouLeT3CZx2dSkh4w1cut8gaMwKGRAKX7+acCVmmR+wAAQw0hxhtJDaiQtc/dfZfBc4dpKZ6amhp25NzHmhmZYCSjguKRTEX7+PPWYmgSqHZFK0iYzrQbf0lXpjc1aGFJvl57efpnSbu874oFnxlaDEUgDFCwRimN7Je8Ri9ULuYA5jsEeSJIu3VsHmyPl1c0W1M9eZA7e75rAh61Z6tW7Apw/ZpMZgoIiatO8OUESqyMPmm7dNuz97GBTsP44RPMUaVvh+aSQMgSD9/YXRxxUdQvbvpPurXDQI6hgDFDQ7A1ObVXQTzIvlmrGg== 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=BZIq3cozq8lFVROrWFytDQNUVTJ6Pzw47RAeysXtExc=; b=R00xifwSWQvOa/ojh/uXCg/t58o2w1wk1lA/3tQCZnv+j6sa03pLVdtQshLuXLFwWDBNfk3za0556Fh4UYkpU6JAyDRPxp6Vqy+mZI66CEqhC4ATfqETdogIsml+1wgEOJ8Ed4JJjuO/IO2giABY00GcGWEJ8V93h1hDVwIfza46/pdIfO0yM5H0Qg0wWgQXQUoq3xSpugM/gPzqdBZWl8Hx0PNMqGN70T804RMUT1SIHdfjmU7IBFlI0Uv2P7ePjTjPjQx+0dxx8H3kDhNetKTXRsxaPdF0xXb6N5jOZ3is76EOh1cVv1NXvnV2glr6fhDEVviSrRYpn99XxYX7EQ== 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=BZIq3cozq8lFVROrWFytDQNUVTJ6Pzw47RAeysXtExc=; b=Icx7++zKe+rNEQU15epwNsfk1iEKJgq1P+KcbWUVyZZwvzJD9obzUEReINfXdWLt/6FJOeOkljVNEk8vO6rixJFaFSv1tf6UyJxtXfX9rsB5/6H8mx2yJNad0UTYz/hujdai59NyeTfQhsZxtSuf1AGf1TXaPgyvy/gwVyI6FCipYWr6R1CRpWFfHZQ4jSVSYCXapKsIihcc6kUw10ZNdcVF4JhX3SwMbyyg0b+O1CnkyJ6d2H8AXZaRc5GFlH8NR+MILux9aIAX8wjdkw6OV6S4mYFK8MrmNcLWztRyRE/XWCkY2BM9BirtXzqKdfEMhFLp5zSBqne12rH5diBoag== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:57:05 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:57:05 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:55:13 +0900 Subject: [PATCH v4 19/20] gpu: nova-core: vbios: drop redundant TryFrom import Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-19-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY4PR01CA0016.jpnprd01.prod.outlook.com (2603:1096:405:2bf::15) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: 1ecaf70d-0363-4a32-ab57-08deb5524f56 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: Rp4Jdc/zIxc7/yhUVfPOHkzFN7vCMcMzhCqePzFUN+sWF22rzDhDE5ZblcoZPniIHLkMx3HxzOW/oWbyyK6fS+mOj3e8oZoI1WURPymLOWE630RdY+5LWaCN+xFVMTV3S9Kr/L5yZUm637F/dFXkbyBEq7oFDbRSSUoLUnAvMNE5Xl5WQWpGBStkhwxAL2NookvCEqs9lwPn8/9f5/VMJlgWefL8lE59i2pZQ9LDjBy6MQb4UWJfDPVRwmjSm5/5u0oS6WUYLmGGPHLEtFbr4A8kq7qm2o5G0UJLUhOTtEvrfKywt0lUGwlHE+mCqbkdiKKWemov9x3q9LJAg3mbILzHSFcCv5R5pfJNOmQNzEsJRiljY8tl2hegfkrDsvEocSA0kGLZndnl6f+jYU1JXCaPqNu/wS1Yb8O87h/GW9nP6Pg1peLYGFIYP0kcr4d/T7dwqmu1CtMuEGRFzUA0/ULBfKkR8JOtM5v5kVbCpQqVBrlBPT3Jl8JMadjS2KKWsvB82W4fvgcDrbB5OMvKEVTlUn2P6bbe+yoSITxqfC38ORralWD5iXjJZuN4vkpGVRZE61IQhtaXFyzeBA5OC5Aq5FuwpKutT4RXZNBT+t/98Aw3VGSWDz1ValEjLufrHrm8QGhhrZ+J5GZ5ajl6CFD/gJrRAjWU5mckzrkzUvuKNAyMtp2ZbwwCaPiDCsiH X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QmVlQXJNSzNqZ0ZhNmcwaHV4SXlCMGRLaHRCWlRxOWNNUG5iN1dpZzVZb2Nv?= =?utf-8?B?MmZ6RG16YVdibGxNNXczN1dFR0ZPQzJKYmZobzNSdE9aRkRUbHNDLzdiNU1u?= =?utf-8?B?VWQxaHRST1V6UHpjQ25nK3pud0Z2TFNUNDYzUHhmd3J4Y1BBSGpveVBEK3dU?= =?utf-8?B?SVRHMU5PWHM5SXhNNk5FQXUva2xXSzR1c2RIVENWY3RZY0xQT052dGlXMW1N?= =?utf-8?B?SW9KbjZhR1QxcnEvVFB0QzJFamxCd256U0dLb0YxblFTWnNrS0pHdi9teVUz?= =?utf-8?B?SHFBM25neDA1c1JlbjN1Vm91Y1EvaU1pNEMxbWgxN3gvRXdmbzUyazcyKzdW?= =?utf-8?B?Ri9VdG0zWXE0a3ZlNHlOMmhmcjAyVXFFTjNaZzZOZFBxa25EQnQwV2F6TFJE?= =?utf-8?B?MmN6Sms0TklXTWh6cW9Sc3lPK3Q2RlpsMytYWmc2NVE2L1dJTk1aUlRBWXJC?= =?utf-8?B?bStoaGt3bisvdDNMbm9DbFhYR0pjUE16ZkRkNnhRcFVML0Mzam41czlVVkV4?= =?utf-8?B?VW9GSWwrcmtWb2k3R0hKQ21LOEhBRzdsOFRhL0V0MGlTZXR5TFZSVzZlOTBz?= =?utf-8?B?Q2VPVmwwcndlQUtPTjNuc0dHVVFxM3g1bzRDa3JKMjEzSnNCYVJBWmNva3hR?= =?utf-8?B?cGZLeDZOalRTQjUzODlxWllWbWI0NWlqdGRud21VcXFYYlFIN2kyMWNEWVUx?= =?utf-8?B?dzNyb05qTGRyZFEvSmY1RjRYYXhjbm1KOC9oeGFKbGdxR1AxQ2M0Qmw3aGd3?= =?utf-8?B?QXBhZnBKaXoySzlZa3E4ZC93NzdKOWJYN0R0RmFpbEJwbmVOcVRJK3hHaUhj?= =?utf-8?B?ampkVzBTa0VhUjNDTXJoSTVGbU95amh2T052SkUvc0JldlowaERiVTVxVTBl?= =?utf-8?B?aC9DWERuL0hOeG4rVFRzZWpjNFFJcndIbmxYL0pDTDNiSmlHak1XTDRZcUJJ?= =?utf-8?B?WVVYTkVwSXZlMDErUk1acjcyUFZIVm1nZllsazNIRm0zTmhjNmxlQXFleXl1?= =?utf-8?B?V3BweERMd1ZVZ1pnWG5VeHE5VG1IbTl0blg2YWFRbXlqOHVRbFZLZjZ2aS9F?= =?utf-8?B?OU9VRFVMclNkcEo2NWR0cGRFSk50cE9QRE5pNHRObzB4ZGlhaTNXOVZmdCty?= =?utf-8?B?MjB5b2E2UmoyMVFFWGNkL28vSUYrN3dTazJldUNOZmVJdFlUM2JsTmg2Y21s?= =?utf-8?B?T21jbFU2NlNaWlNGb25COEN0N1Z1K0lxNG1nVy9KdjJhdGk4UGpleWJFUUtT?= =?utf-8?B?KzdpTE1LVHdFSTJ5bWdqTmxiUjZxNUIxa3dlVXh3WFU3SkVuVVI4Qnh4TGlm?= =?utf-8?B?L3ExTWdXdjJaN0pkRjJaTjl5Nkw4RWVHVGZTY1p5bENHL1FDK1FnZHgvU1dy?= =?utf-8?B?RTVkQWlpOEIzQXRvakZXNEtrM01nRjdhUjloY1QweEdLUFJGNXd4OVhGdXBO?= =?utf-8?B?WTczUTV1cHhXZGtLYlVpWmNPOVhGbVl6dGl4c1Foc2JUYVZzSnZHaWpBUEcv?= =?utf-8?B?MWhLS0xSNjNVQ2htTEJyanlLSDFHeHAxODlSR2ZTcXJjMTZTM3hwQmt5Zzk1?= =?utf-8?B?enRRZmc3dDVjV1JHRkEwNTY1WThTOXBJL2FSR1hDeGMzOWE0RW05cFB1QU9E?= =?utf-8?B?ZzhYaTV3MVB0b1dqelM2UEJXdEQzK3NQTThIelhNRm9xSGJMZGtQL1ZDangw?= =?utf-8?B?b01pYVJESnd4Rlc5NThKVHZpdXlpYVNpSENnN3ppc0s1S2NVUFRzYzlDZ0pX?= =?utf-8?B?dzYyUGczS2RpTzVLZjlVTDh5S3lpR0gzckRGdlFjeWJhWWxNcDVlZi8vS2Fz?= =?utf-8?B?LzlKYlg0MEY1UEsyU09Ka2NFVlRocVBXeWt3SGRmU3paK3pPTVUwVWRvN0Jj?= =?utf-8?B?QUprM0swZVlFMk1KN0tFZlZtdFFDWUdXZ0FyMXFnUWprRGtINVJGRkhFTDVn?= =?utf-8?B?d2h6aTk2aWFmS2tQclJHRTU5bk9zL2VsNHk5d1JSSTM2REpxOGtBTnVhSCtO?= =?utf-8?B?NUk4Z2Z1ZFd1a0xZdVkvVTVaU0xodXMwNERFQk1kUk01bUxRSzdWRzNsUlJx?= =?utf-8?B?ZU1mMDJJYjBIU2JOTTFPeTlqbDRST00yWFN1UWgxVU16QjFxRjJSY1VSMHJG?= =?utf-8?B?azJLdVJnN3YvRU1YY2tMNUtPUmJNRTZSWitDdDg3aFR1bkN2WUdLTTNCUnA1?= =?utf-8?B?NkdqaWUyMmpyeE5nQVFmQkFOVGx0N3IzZ051Yy9mb0IyT3FZb3lZUC9sbVBa?= =?utf-8?B?eDhpRVRqSEJGUjAzNHJQNll6NnhGNmRGeVJGaXRLeUcvTHdGUVpjSnB2SURW?= =?utf-8?B?eEhIckN3bzBtR2E0dXNEUTZnWjRrcjl1dE1wL0NFcnJodkM2TmRBcEpDTWM3?= =?utf-8?Q?RlRRY/q5xJ1FIkkhCXjdKGP+i2ct24LPv2u46e245srPx?= X-MS-Exchange-AntiSpam-MessageData-1: n4Df5aN2BxEAMQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1ecaf70d-0363-4a32-ab57-08deb5524f56 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:57:05.6977 (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: OzHQFu3CcBurISiBrrlTesSB/cwZzgC94ns/qKJY+bGTzwFj3mTFI8iMKMqAkqzlhuhWUUVoon4yhIiZfGV1vA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 This is unused. Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- drivers/gpu/nova-core/vbios.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index ad571b39400d..9cc2f008bbfb 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -2,8 +2,6 @@ =20 //! VBIOS extraction and parsing. =20 -use core::convert::TryFrom; - use kernel::{ device, io::Io, --=20 2.54.0 From nobody Mon May 25 03:33:07 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013017.outbound.protection.outlook.com [40.93.201.17]) (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 604E133AD82; Tue, 19 May 2026 02:57:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.17 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159438; cv=fail; b=s5LYykagsyfy/XKOT1yRS/SeVYv9P0H8c+970djWSkEgcCiCM6qP/hK4wyTR8tsVWoUGuFGFzCrBl1Jr0Su6ae9ZQKG5VAV9b56WvvseuZVGc3VXttbFSH0d1vgRsqPA5GwSs6BfRqrxhzrOCtYV0LKlwirsQ/0HJfwPPpqRI0M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779159438; c=relaxed/simple; bh=dbxph4nI80rihMzrXRm+xy81WLf5BbfMY684QazEl1Q=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=BGbhyMZWcPTP4sA/tbR0dVRWdvizaElooxhwMM7QlApXZdczhLptg+c7j6QRQplXjebSH6zhKbk5QBEHPuPOl5VTon10C9G1CZD5VKVnhychIVIw0d3XOE4g9HJxP3E8U31BVo4IhZZevv5e+jPz2jM/7B4mwHdVbw+gFGvOy6s= 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=P9cGwOFL; arc=fail smtp.client-ip=40.93.201.17 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="P9cGwOFL" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=avsxzLWc8/7Zl6V/wvc98acITQD47xRK74EahgmGVtC5YCWDnLq2PmQSsyey78bXeEF9v//uGbPdLmjVVqqtkHyk0OyZuxqHmXIs7XWKY2Pb/pTK5VXBWRh6t4jXC7J2vGoaoMkLnPqPYuGdaeRSgqFxRBwvxT9E6/6n8fIpDpABc2N1adx5GNDdXRO0vvEJ4zcYbj0jkYEMX4kOivfFPqRqHzoMi1EN1xjdtLi3WiVCoRFSp4ebwOlwSOrD+6gwz1Dzd5AOEugyoHTXD5pnhAovxlrtsmJ2ghrnbmnIiHDItoAvTt8STwvyFTbUrQATNnJwTQaw+3wnIWsqIMJfSA== 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=DjFd3qJXmIYrvzPX9z+rR9B2zhOhpwOF5prDRpaEmHc=; b=FJlU7RzwWZX8lQsIDFZ2a0tKsWMZx75sYWOt9S3XVeZ3t+9U6oq361BCUv4b8NCG8Whq1/Eshj7b7DcLXGM1A8iDuu23xlmJilOrRRnI3t/IabVPhR9h/ac+7ptjFJvFErN6QE/+lBbG3rIg/fSiJjoq9TuseZjDlbzx3CBM3KEOGCUw8SkQCv5zCdP85K5u8oiavmBC9K8WYMf2WRUB6r+Jyh5NnKWJKY1yK0bFC9qLSfcyoODZWPbuhTyerjRpM2RX0OgvKbBn/DjFBhzuCKg7o9AsGem+ZdrY/h+T/TPZc8IlE5rV+C0ZXDqEAW2E6tnZZ2SUSX6Z1DKiOu+nhQ== 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=DjFd3qJXmIYrvzPX9z+rR9B2zhOhpwOF5prDRpaEmHc=; b=P9cGwOFLN5U2yRxadGv3/ExLi1u65MOqzfQg0QF+hhZBE01hYhppNz+jDEfsok3Kokfm6OAEHZHJ/gsChkFTqYwrfGkdXwAD0nXf3ul8/XetKx6MS4W/RqD83zJCccA/OCSwN8g6rWBun9m+GdDpXNPkP+jlG0w28bt6wsd28aOSuaURpnwzYbEcgg02CsKmTW4bvA83T7ucLp8eb9Fa76KGxytVoCJBDgOUSZHPaUM4qc+wMNqBy+ZqcYfyCFG6IDOgqKhz+ivaruKilXFYfYqV7nMOpGuYnqpWPwzhUSxuhFagElz6+9V6M1xZeCFuJzGYqM5c4YNRJhUWAFnA8A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by CY5PR12MB6551.namprd12.prod.outlook.com (2603:10b6:930:41::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.23; Tue, 19 May 2026 02:57:11 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0025.023; Tue, 19 May 2026 02:57:11 +0000 From: Eliot Courtney Date: Tue, 19 May 2026 11:55:14 +0900 Subject: [PATCH v4 20/20] gpu: nova-core: vbios: move constants and functions to be associated Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260519-fix-vbios-v4-20-5d3f210c5602@nvidia.com> References: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> In-Reply-To: <20260519-fix-vbios-v4-0-5d3f210c5602@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , nova-gpu@lists.linux.dev, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY4PR01CA0019.jpnprd01.prod.outlook.com (2603:1096:405:2bf::9) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|CY5PR12MB6551:EE_ X-MS-Office365-Filtering-Correlation-Id: 4073ff4f-65f4-4a8e-5c0b-08deb55251d9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|10070799003|376014|22082099003|18002099003|56012099003|11063799003; X-Microsoft-Antispam-Message-Info: f18mJUNGUjyoTXWsd8j9HyvQAodioK/eR04KZ0Uy6PEdAoZbF1yR671Gw6hee5K4eYjH2VORaofPQ7P37afLPdzIxSbhxUm2ikBMsysJKyrZ0QWryPYoZERSX7726fAgoA4LBW4F41vMP3YF0RAd/TR9MzAatpJqO/y1ox/L1K+MvX1TsAsHrBMIkFc3QgsOrD7p9w8ifZMQeA0Mba6NdC0ms66+aWT2cXT/AF3Tmn/F8Qgh5kxiwZAqQ6czu9axVpO1Tr48CJt45FnHAMBR2BecHUv520qixxwAxMOSfOw5DraeAJECseixWpyNrAoMPEc3aCkwiIuUoXDXxumVvhxP0m0vYKZIxbaPXFRPmAuwem0xXoJ9yPNCyhU+g+2HXFdVNWDP6Q0Qa8eHVzi5px3eW1nujy1JCLEEsOf8sW4ji11F7EaKGuLOVQjFjX0P0mtS4v7WTD/qqajSZSe31yjFuo1RJQ92YQJrZOg1h9bosD74MLMlouSjVp/lX5zx/mnYx03cBhxA8+5Ym0edqOD8Juln0EgNe8MlQv8G0M7wD4lYqTIe2ACjELHCx9vdulViFbPAgIOO6KkZPOxMzARBrF5d4ntbpstDprm9L43R1e9+rGOPpOhxDkUhrupUkZKpwbpMhpE9QdV6/LgzeBSWG8bQaiDSv3E0zrsJRokpwB/4eIrVMD+zgl1JMWkf X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(10070799003)(376014)(22082099003)(18002099003)(56012099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NE5ic1pna0p0OGNGQmlGOWtsV3dpTVVNRXlCNmtlS0ZNZ3V6eG9GL3ZBNGNz?= =?utf-8?B?d3pyb3FtdWR1SUxaMWR0ejlnWThMRUF5a05mSzgzSnJtbFJtRWlWQSsxc0JY?= =?utf-8?B?eFFYQno2UUVQVEROQXFZMUtpVVpsZ0ozU2NkQWc1bnRsUEx3SXgwZkUzK3RC?= =?utf-8?B?ZkpxNGE5cjZxS2VyQU1PWFlaa0EyeU9WSW1BSTh3bVFRQmdRcEg1YTV4UGhE?= =?utf-8?B?TTN3dGhZcGhMYU9hYzlJR2lQak16WHhjS3hONnJncXVZUWVtZzZPYnBOT3Fy?= =?utf-8?B?R0dvaCtrTWRBUzk5ZEcvWW9OdmRPM1dqYVZDd0NmdTZSWnF0WlVCMlgrWDRG?= =?utf-8?B?emxhcUM2MEtPOXpqMVV5WXZNTVRnSTBSSEpRdFJhKzZWS1g4UU1SQkg3TkJo?= =?utf-8?B?NUxXN09HdDFQaXV2SDZtMzk2a1k3azA1S3JLV3B4Wk9TTHcxLzhsTjdtaUVZ?= =?utf-8?B?Tnp0MkdJVjVnZXVWTmU2RXhmZ1JQU2o3NDU2R0g1MmM1NGovSFBtVEFQcU9L?= =?utf-8?B?aHBaMkl2K0VQU2JSbWh1TEErSCtIQytzQ3YySG9zbWRzeXBiRnFwTCtCSmVt?= =?utf-8?B?c2c4ZytnYXZSdnF0V09rUlphcGFBR2ozdVd1dmtYWUpUU1VURURZRktKZlZa?= =?utf-8?B?QmhMMVYwTzhnT2pUc1FndHlTSk0xSVdBbmc3SkZnbncwL2lZSDc2TmM5RFpk?= =?utf-8?B?Z2VUb1hvellIUFBIUmpMNlo4dzAwamlRNTdYVExTVlc2cUdWUVRDS29rSm1T?= =?utf-8?B?T1ljVy9TaFN2bUF5Sm1OdEdXeU1LOTFZalJjalhtbzVuZUxKc1BmbVo1QnNu?= =?utf-8?B?NUpsZ2t1emc4OVBQa0pVUTRlY3Fwai8yMHZ1UW5yU1htTFlTQUw1OG9tNkR4?= =?utf-8?B?aGEwM05VN2QzTjNZcXM5elpML3FCcDVIRE9UUmh2RVYvZHFJQ28wTFhYWU4x?= =?utf-8?B?NXVUckRhVFlUZC9KYmxqeGRFU1hRaTBLWER0SHN1UzFzaWJWeE9CZFloaFBB?= =?utf-8?B?K0hFVHNSWlNtSHl0YktySWcxc1hQTXZVdFRRbnp3UllrVnlsaDlqVkM4MEdu?= =?utf-8?B?SVpmZkpIWDhORXJ0NE1qcXc2VkdkNlNrQlJKeVNTYlE2LzV2NXBXZ005QXFZ?= =?utf-8?B?Wk44MmtnRDlpRE1pOHdMTkZmb25vVzZQRkxpMXRwVGFpMDRZVEQweTg2UWlW?= =?utf-8?B?bVl6QW1NaHZSQjZOQzF1TWNiaFJ6dmU4d2cvNFhtUGxsRm81MjF5aUhmNjFD?= =?utf-8?B?RHA2RkNYRzhaTTdVTXF0OXJlcHhpMlZxV1F6d2tUM0xGRE9SbnN1K0RIZVp3?= =?utf-8?B?U2Vrd20zanVLWEtkTmYvSEtEQVkrTTNwR0ljR1M5cUt5T0ZjZnlmSmJkUWZ6?= =?utf-8?B?Tm5ocEt3Q01yUjE1YjdzcjdNbzE0ZzIwYlQ0UzI5dXJIemdHNkNUSFVLS1g5?= =?utf-8?B?UmZ5QURyVjNNNFZ0ZFQ4WlA2NGxjLys1SzUrbmkrOWZqdDJOSGxvYjFweFh1?= =?utf-8?B?aUpPL1hYRGFJY1cxTE5PMzVUaThQVi9Hd0pucFZrMU9rSitHbEV5YUhSakNC?= =?utf-8?B?UVZuejRKcjlaN3FQelVFNncwM2tvRDlGc3U5OUZKOFVxcUdYRW9nV1c5UFRt?= =?utf-8?B?MjROemt0YkFpSUU1T0M5SGFuSlUwR0pGVU5FSkRmWXJzUlBaZDVKMzJueDVF?= =?utf-8?B?UUxyV3o5bitYUUxtYU95ajJ2NkpQUmo0cFpVNnVuZ3J5RHhJbFBLbmdWa2xW?= =?utf-8?B?Zjl2UWIrQzVWZEVKQ0V0d2RFZVIvcjVwcjJmNC9Bbi9lNzFDQkZuY2hOczVD?= =?utf-8?B?YTgvSlAwNFJBQkRhMjY0Z3ptUUw4M295MnBMMFZpMGZ2QkU3ZlE3TTVrdTR1?= =?utf-8?B?RllxYVB5SDlsVGhwRUNiQzdLU2pDNW9FS3NEd0dWZGxlZzRkWWc3eWMzRnZM?= =?utf-8?B?ZHVqcExmRnp3RjgyUy9jemtuaDI0dWo4OXhCTndMNnl0bTBBd1hvbGZiQytL?= =?utf-8?B?NnpwVEI3UFlPdlVBSDVUdVpMenNLYUhwQXRyZ0o4djVzcVp2WGpIWXRHZUtQ?= =?utf-8?B?OXcvbU5jSm50QWdpVjRPSjFIV3RYblg4Y2RUdUlMTUphM28yS3EyOVdzS1Rh?= =?utf-8?B?MU5vUkxIelpvTENwWUJNUEl5MXFvSjZvU2tpOVRPa1hPTFFQZnlZbUMyUEVQ?= =?utf-8?B?ZkVWM200cmZpYmFyVXgwS0h2WjM3czhOUnN4bjJpdGszVWQ0WWFhY2xLZVlK?= =?utf-8?B?MVoyLzZldGpUYy9GdSt6UzhicDhxYmZ1Nnh4cVBxSW12NERkdnBSOGhnV2FN?= =?utf-8?B?Wk1kNEVKZE9GLzJNOVRnRkM3NUM4T2tJalNKcnRiaklPdUpkeXRFeUx5dHhN?= =?utf-8?Q?Pw0BUykPuOtBuFzKXmuEtZpylWVcJt6qhepNpjLq0+pjo?= X-MS-Exchange-AntiSpam-MessageData-1: 4Hmlj3qg1fRzJg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4073ff4f-65f4-4a8e-5c0b-08deb55251d9 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2026 02:57:10.9808 (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: I7Redj5z3XP0FuFb7+Ivf5BoSeRt/a7FX/4/mROQ70cZXZva4dAAu4MtHone/YT92S3/iQSJci+f/7s1Mz7VCw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6551 Move constants and functions to be inside the impls of the types they are related to. This makes it more obvious what each type and value is for. Signed-off-by: Eliot Courtney Reviewed-by: John Hubbard --- Documentation/gpu/nova/core/vbios.rst | 2 +- drivers/gpu/nova-core/vbios.rs | 185 +++++++++++++++++-------------= ---- 2 files changed, 96 insertions(+), 91 deletions(-) diff --git a/Documentation/gpu/nova/core/vbios.rst b/Documentation/gpu/nova= /core/vbios.rst index a4fe63422ede..9d3379ccfb30 100644 --- a/Documentation/gpu/nova/core/vbios.rst +++ b/Documentation/gpu/nova/core/vbios.rst @@ -232,7 +232,7 @@ Falcon data in the VBIOS which contains the PMU lookup = table. This lookup table used to find the required Falcon ucode based on an application ID. =20 The location of the PMU lookup table is found by scanning the BIT (`BIOS I= nformation Table`_) -tokens for a token with the id `BIT_TOKEN_ID_FALCON_DATA` (0x70) which ind= icates the +tokens for a token with the Falcon data token id (0x70) which indicates the offset of the same from the start of the VBIOS image. Unfortunately, the o= ffset does not account for the EFI image located between the PciAt and FwSec ima= ges. The `vbios.rs` code compensates for this with appropriate arithmetic. diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 9cc2f008bbfb..07b5235faff8 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -27,16 +27,6 @@ num::FromSafeCast, }; =20 -/// The offset of the VBIOS ROM in the BAR0 space. -const ROM_OFFSET: usize =3D 0x300000; -/// The maximum length of the VBIOS ROM to scan into. -const BIOS_MAX_SCAN_LEN: usize =3D 0x100000; -/// The size to read ahead when parsing initial BIOS image headers. -const BIOS_READ_AHEAD_SIZE: usize =3D 1024; -/// The bit in the last image indicator byte for the PCI Data Structure th= at -/// indicates the last image. Bit 0-6 are reserved, bit 7 is last image bi= t. -const LAST_IMAGE_BIT_MASK: u8 =3D 0x80; - /// BIOS Image Type from PCI Data Structure code_type field. #[derive(Debug, Clone, Copy, PartialEq, Eq)] #[repr(u8)] @@ -65,14 +55,6 @@ fn try_from(code: u8) -> Result { } } =20 -// PMU lookup table entry types. Used to locate PMU table entries -// in the Fwsec image, corresponding to falcon ucodes. -#[expect(dead_code)] -const FALCON_UCODE_ENTRY_APPID_FIRMWARE_SEC_LIC: u8 =3D 0x05; -#[expect(dead_code)] -const FALCON_UCODE_ENTRY_APPID_FWSEC_DBG: u8 =3D 0x45; -const FALCON_UCODE_ENTRY_APPID_FWSEC_PROD: u8 =3D 0x85; - /// Vbios Reader for constructing the VBIOS data. struct VbiosIterator<'a> { dev: &'a device::Device, @@ -110,73 +92,79 @@ struct VbiosIterator<'a> { } } =20 -/// Return the byte offset where the PCI Expansion ROM images begin in the= GPU's ROM. -/// -/// The GPU's ROM may begin with an Init-from-ROM (IFR) header that preced= es -/// the PCI Expansion ROM images (VBIOS). When present, the PROM shadow -/// method must parse this header to determine the offset where the PCI ROM -/// images actually begin, and adjust all subsequent reads accordingly. -/// -/// On most GPUs this is not needed because the IFR microcode has already -/// applied the ROM offset so that PROM reads transparently skip the heade= r. -/// On GA100, for some reason, the IFR offset is not applied to PROM -/// reads. Therefore, the search for the PCI expansion must skip the IFR -/// header, if found. -fn vbios_rom_offset(dev: &device::Device, bar0: &Bar0) -> Result { - /// IFR signature. - const NV_PBUS_IFR_FMT_FIXED0_SIGNATURE_VALUE: u32 =3D u32::from_le_byt= es(*b"NVGI"); - /// ROM directory signature. - const NV_ROM_DIRECTORY_IDENTIFIER: u32 =3D u32::from_le_bytes(*b"RFRD"= ); - /// Offset of the NV_PMGR_ROM_ADDR_OFFSET register in IFR Extended sec= tion. - const IFR_SW_EXT_ROM_ADDR_OFFSET: usize =3D 4; - /// Size of Redundant Firmware Flash Status section. - const RFW_FLASH_STATUS_SIZE: usize =3D SZ_4K; - /// Offset in the ROM Directory of the PCI Option ROM offset - const PCI_OPTION_ROM_OFFSET: usize =3D 8; - - let signature =3D bar0.read(NV_PBUS_IFR_FMT_FIXED0).signature(); - - if signature =3D=3D NV_PBUS_IFR_FMT_FIXED0_SIGNATURE_VALUE { - let fixed1 =3D bar0.read(NV_PBUS_IFR_FMT_FIXED1); - - match fixed1.version() { - 1 | 2 =3D> { - let fixed_data_size =3D usize::from(fixed1.fixed_data_size= ()); - let pmgr_rom_addr_offset =3D fixed_data_size + IFR_SW_EXT_= ROM_ADDR_OFFSET; - bar0.try_read32(ROM_OFFSET + pmgr_rom_addr_offset) - .map(usize::from_safe_cast) - } - 3 =3D> { - let fixed2 =3D bar0.read(NV_PBUS_IFR_FMT_FIXED2); - let total_data_size =3D usize::from(fixed2.total_data_size= ()); - let flash_status_offset =3D - usize::from_safe_cast(bar0.try_read32(ROM_OFFSET + tot= al_data_size)?); - let dir_offset =3D flash_status_offset + RFW_FLASH_STATUS_= SIZE; - let dir_sig =3D bar0.try_read32(ROM_OFFSET + dir_offset)?; - if dir_sig !=3D NV_ROM_DIRECTORY_IDENTIFIER { - dev_err!(dev, "could not find IFR ROM directory\n"); - return Err(EINVAL); - } - bar0.try_read32(ROM_OFFSET + dir_offset + PCI_OPTION_ROM_O= FFSET) - .map(usize::from_safe_cast) - } - _ =3D> { - dev_err!(dev, "unsupported IFR header version {}\n", fixed= 1.version()); - Err(EINVAL) - } - } - } else { - Ok(0) - } -} - impl<'a> VbiosIterator<'a> { + /// The offset of the VBIOS ROM in the BAR0 space. + const ROM_OFFSET: usize =3D 0x300000; + /// The maximum length of the VBIOS ROM to scan into. + const BIOS_MAX_SCAN_LEN: usize =3D 0x100000; + /// The size to read ahead when parsing initial BIOS image headers. + const BIOS_READ_AHEAD_SIZE: usize =3D 1024; + + /// Return the byte offset where the PCI Expansion ROM images begin in= the GPU's ROM. + /// + /// The GPU's ROM may begin with an Init-from-ROM (IFR) header that pr= ecedes the PCI Expansion + /// ROM images (VBIOS). When present, the PROM shadow method must pars= e this header to determine + /// the offset where the PCI ROM images actually begin, and adjust all= subsequent reads + /// accordingly. + /// + /// On most GPUs this is not needed because the IFR microcode has alre= ady applied the ROM offset + /// so that PROM reads transparently skip the header. On GA100, for so= me reason, the IFR offset + /// is not applied to PROM reads. Therefore, the search for the PCI ex= pansion must skip the IFR + /// header, if found. + fn rom_offset(dev: &device::Device, bar0: &Bar0) -> Result { + /// IFR signature. + const NV_PBUS_IFR_FMT_FIXED0_SIGNATURE_VALUE: u32 =3D u32::from_le= _bytes(*b"NVGI"); + /// ROM directory signature. + const NV_ROM_DIRECTORY_IDENTIFIER: u32 =3D u32::from_le_bytes(*b"R= FRD"); + /// Offset of the NV_PMGR_ROM_ADDR_OFFSET register in IFR Extended= section. + const IFR_SW_EXT_ROM_ADDR_OFFSET: usize =3D 4; + /// Size of Redundant Firmware Flash Status section. + const RFW_FLASH_STATUS_SIZE: usize =3D SZ_4K; + /// Offset in the ROM Directory of the PCI Option ROM offset. + const PCI_OPTION_ROM_OFFSET: usize =3D 8; + + let signature =3D bar0.read(NV_PBUS_IFR_FMT_FIXED0).signature(); + + if signature =3D=3D NV_PBUS_IFR_FMT_FIXED0_SIGNATURE_VALUE { + let fixed1 =3D bar0.read(NV_PBUS_IFR_FMT_FIXED1); + + match fixed1.version() { + 1 | 2 =3D> { + let fixed_data_size =3D usize::from(fixed1.fixed_data_= size()); + let pmgr_rom_addr_offset =3D fixed_data_size + IFR_SW_= EXT_ROM_ADDR_OFFSET; + bar0.try_read32(Self::ROM_OFFSET + pmgr_rom_addr_offse= t) + .map(usize::from_safe_cast) + } + 3 =3D> { + let fixed2 =3D bar0.read(NV_PBUS_IFR_FMT_FIXED2); + let total_data_size =3D usize::from(fixed2.total_data_= size()); + let flash_status_offset =3D + usize::from_safe_cast(bar0.try_read32(Self::ROM_OF= FSET + total_data_size)?); + let dir_offset =3D flash_status_offset + RFW_FLASH_STA= TUS_SIZE; + let dir_sig =3D bar0.try_read32(Self::ROM_OFFSET + dir= _offset)?; + if dir_sig !=3D NV_ROM_DIRECTORY_IDENTIFIER { + dev_err!(dev, "could not find IFR ROM directory\n"= ); + return Err(EINVAL); + } + bar0.try_read32(Self::ROM_OFFSET + dir_offset + PCI_OP= TION_ROM_OFFSET) + .map(usize::from_safe_cast) + } + _ =3D> { + dev_err!(dev, "unsupported IFR header version {}\n", f= ixed1.version()); + Err(EINVAL) + } + } + } else { + Ok(0) + } + } + fn new(dev: &'a device::Device, bar0: &'a Bar0) -> Result { Ok(Self { dev, bar0, data: KVec::new(), - current_offset: vbios_rom_offset(dev, bar0)?, + current_offset: Self::rom_offset(dev, bar0)?, last_found: false, }) } @@ -186,7 +174,7 @@ fn read_more(&mut self, len: usize) -> Result { let start =3D self.data.len(); let end =3D start + len; =20 - if end > BIOS_MAX_SCAN_LEN { + if end > Self::BIOS_MAX_SCAN_LEN { dev_err!(self.dev, "Error: exceeded BIOS scan limit.\n"); return Err(EINVAL); } @@ -205,7 +193,7 @@ fn read_more(&mut self, len: usize) -> Result { // Read ROM data bytes and push directly to `data`. for addr in (start..end).step_by(core::mem::size_of::()) { // Read 32-bit word from the VBIOS ROM - let word =3D self.bar0.try_read32(ROM_OFFSET + addr)?; + let word =3D self.bar0.try_read32(Self::ROM_OFFSET + addr)?; =20 // Convert the `u32` to a 4 byte array and push each byte. word.to_ne_bytes() @@ -267,7 +255,7 @@ fn next(&mut self) -> Option { return None; } =20 - if self.current_offset >=3D BIOS_MAX_SCAN_LEN { + if self.current_offset >=3D Self::BIOS_MAX_SCAN_LEN { dev_err!(self.dev, "Error: exceeded BIOS scan limit, stopping = scan\n"); return None; } @@ -275,7 +263,7 @@ fn next(&mut self) -> Option { // Parse image headers first to get image size. let image_size =3D match self.read_bios_image_at_offset( self.current_offset, - BIOS_READ_AHEAD_SIZE, + Self::BIOS_READ_AHEAD_SIZE, "parse initial BIOS image headers", ) { Ok(image) =3D> image.image_size_bytes(), @@ -416,6 +404,9 @@ struct PcirStruct { unsafe impl FromBytes for PcirStruct {} =20 impl PcirStruct { + /// The bit in `last_image` that indicates the last image. + const LAST_IMAGE_BIT_MASK: u8 =3D 0x80; + fn new(dev: &device::Device, data: &[u8]) -> Result { let (pcir, _) =3D PcirStruct::from_bytes_copy_prefix(data).ok_or(E= INVAL)?; =20 @@ -439,7 +430,7 @@ fn new(dev: &device::Device, data: &[u8]) -> Result { =20 /// Check if this is the last image in the ROM. fn is_last(&self) -> bool { - self.last_image & LAST_IMAGE_BIT_MASK !=3D 0 + self.last_image & Self::LAST_IMAGE_BIT_MASK !=3D 0 } =20 /// Calculate image size in bytes from 512-byte blocks. @@ -505,10 +496,10 @@ struct BitToken { // SAFETY: all bit patterns are valid for `BitToken`. unsafe impl FromBytes for BitToken {} =20 -// Define the token ID for the Falcon data -const BIT_TOKEN_ID_FALCON_DATA: u8 =3D 0x70; - impl BitToken { + /// BIT token ID for Falcon data. + const ID_FALCON_DATA: u8 =3D 0x70; + /// Find a BIT token entry by BIT ID in a PciAtBiosImage fn from_id(image: &PciAtBiosImage, token_id: u8) -> Result { let header =3D &image.bit_header; @@ -604,6 +595,9 @@ struct NpdeStruct { unsafe impl FromBytes for NpdeStruct {} =20 impl NpdeStruct { + /// The bit in `last_image` that indicates the last image. + const LAST_IMAGE_BIT_MASK: u8 =3D 0x80; + fn new(dev: &device::Device, data: &[u8]) -> Option { let (npde, _) =3D NpdeStruct::from_bytes_copy_prefix(data)?; =20 @@ -627,7 +621,7 @@ fn new(dev: &device::Device, data: &[u8]) -> Option { =20 /// Check if this is the last image in the ROM. fn is_last(&self) -> bool { - self.last_image & LAST_IMAGE_BIT_MASK !=3D 0 + self.last_image & Self::LAST_IMAGE_BIT_MASK !=3D 0 } =20 /// Calculate image size in bytes from 512-byte blocks. @@ -799,7 +793,7 @@ fn get_bit_token(&self, token_id: u8) -> Result { /// between them, so subtract the PCI-AT image size here to convert it= to a FWSEC-relative /// offset. fn falcon_data_offset(&self) -> Result { - let token =3D self.get_bit_token(BIT_TOKEN_ID_FALCON_DATA)?; + let token =3D self.get_bit_token(BitToken::ID_FALCON_DATA)?; let offset =3D usize::from(token.data_offset); =20 // Read the 4-byte falcon data pointer at the offset specified in = the token. @@ -846,6 +840,17 @@ struct PmuLookupTableEntry { // SAFETY: all bit patterns are valid for `PmuLookupTableEntry`. unsafe impl FromBytes for PmuLookupTableEntry {} =20 +impl PmuLookupTableEntry { + /// PMU lookup table application ID for firmware security license ucod= e. + #[expect(dead_code)] + const APPID_FIRMWARE_SEC_LIC: u8 =3D 0x05; + /// PMU lookup table application ID for debug FWSEC ucode. + #[expect(dead_code)] + const APPID_FWSEC_DBG: u8 =3D 0x45; + /// PMU lookup table application ID for production FWSEC ucode. + const APPID_FWSEC_PROD: u8 =3D 0x85; +} + #[repr(C)] struct PmuLookupTableHeader { version: u8, @@ -923,7 +928,7 @@ fn new( let pmu_lookup_table =3D PmuLookupTable::new(&second_fwsec.dev, pm= u_lookup_data)?; =20 let entry =3D pmu_lookup_table - .find_entry_by_type(FALCON_UCODE_ENTRY_APPID_FWSEC_PROD) + .find_entry_by_type(PmuLookupTableEntry::APPID_FWSEC_PROD) .inspect_err(|e| { dev_err!( second_fwsec.dev, --=20 2.54.0