From nobody Sat Feb 7 12:29:47 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012046.outbound.protection.outlook.com [40.107.209.46]) (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 2DCED318B8D; Sat, 31 Jan 2026 00:56:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820979; cv=fail; b=NYIOYjtw73xyrHRQDRmYoIdreHW2q6G8tY05f2SvtNq884+GKN4pkIADacv5F25yXiXCFZRYXpJpvlxWlP+WcQkJJQJAMmVgOHRq2dowvCAOelasQeKv2bgWjXNWVKlD8OiZjbDV8uoM9c2ZbYmsYQIeJopKDsBRhJk+xnyYk6A= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820979; c=relaxed/simple; bh=Q62rljmSAldBV3x1s4P2zffKefBw+RvkZfJ8XUu7y4Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=R+eu3wxDFHOJy9PR/gPaiFc0FV0ZLkYogihTcfQ3nLvA83PftZk33kI0XQjziXkhJJImhkFUl5Jk+7Ry2G1Xin52Or+Bbk7WEaDfsI0nao99t5aWZflgvZ19Zs6At4aU64DURmOtWiSwrM1eqZYfyswKy89SeFOfW0VSQbW3jeA= 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=mr2QUrIs; arc=fail smtp.client-ip=40.107.209.46 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="mr2QUrIs" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VhoIQIn2YwKrGwd5AN6EYkc6svTQVcxaxpXIwgi+iH299Ybxn4BWsProwwHfjA/lq2I2FjvrrzbUdSDDPl2UdMdHvMdpJa5ttQLKK5Cj4JZTm3Z2JpD5YBgTy/9cJigGPsAP0JRs5Rurc45tjTROOzr4FdJmW2xRru3FrOlcHCegSUF4t4jiOboL7JmxRr/V3icSwnK4Xxey7yWp8N8zQlxEipjYS97J90EyY96zxbTruTlRwg8nlcMH9vFbxjs7neY6i2QJmW/5Y48YxCKX5FDttjcbW+LGx2S7eB6+WTamdA+0MeQckmP1lGRBv/yxGGQJndi0qNvqy5+SIkXqAg== 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=34QGMplQaBpN3TexAVcoU4hCCxy39soCjQJoRCA0OvQ=; b=Zx/dh29OnC8C6t0sANokqlj9yfDSH45SXdOD5cJRMud1o8o0+7B1zuM7pnm2ZO1XJ/RvItUHf8Sc9B81GNAIdqoQBF+UCicwf+DwFuIp/HI7tjd7d3P59S52MGMZzNWVl9ctUUKIgVtfHXsNXTohi8EgdRyIg3eKMTRUgoHyaw3VPd08PpMCnz/83fP0Y/Nh55wlxrIvzu3PTH7zN9g4/ZBGqHk/LFfVVPMmDWDMmpEwiou8XhY5NqcKvq40Y32Hj4DwUhMhGM7YFWy/UruqBtDrqoxNzl/r256ctHyeXf2pcv0URygUPDsWMp37CT2S4ZRablDAdv55jCzhG/s+uA== 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=34QGMplQaBpN3TexAVcoU4hCCxy39soCjQJoRCA0OvQ=; b=mr2QUrIsO+qwaF8vkgEskMxMADT4uRibpDEYAHYDMxLJBxGJy8dCiqTjc6mMWVLb9shX0a1/hpOYCmVBeujsZyboLBQpAusNpohFkM2ZZDidAoS6saln8LMf6oFeSuJiG36lp/CbPl9i3TeNSzu6URoK4JzO47rlSbsn8GIuzLwvi3lgb5EzI7oZ54VI+QRej9x8+vueSVm1dD2JGYRLpnqLkXL/bNqoSbdnUzzotiPHcsdZaFXZMTb3LMfBgtKQKRYT5sNmK1QmFnDU3LghT8AiM6aNaJQlOULZ3aQ6ORPgxtfpgAORH0xCbb0wPrTDDdRL0i8jO89tictAH8nIoQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:10 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:10 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 01/30] gpu: nova-core: print FB sizes, along with ranges Date: Fri, 30 Jan 2026 16:55:35 -0800 Message-ID: <20260131005604.454172-2-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR05CA0003.namprd05.prod.outlook.com (2603:10b6:a03:c0::16) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 88170e00-2b39-4398-c17f-08de6063865b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?mxRFb5Xi9GrTLCBT7yXYT++M1+mhI1ozM3bK5rOaNdGSkZkF7kIIlZfP6PTb?= =?us-ascii?Q?hp5wqNv+XI8qESF0s4jJiL69KQXx77iy9aMFzRClTISZJ7fPeswFM71Ko5ok?= =?us-ascii?Q?OFQYZO3+Gqw4HE7kvwtTtdXsvoIYOyU+lfhxw3ndpVBp68W1EuyN8BGA7ydh?= =?us-ascii?Q?1SBZSAh/GNnz0MXddxo+0dmdUtNe5v7S4YoNORW7waLYD8Pxiz09ZWfiwgWS?= =?us-ascii?Q?lpbx8INfZ+ApPuCiOojvQGEJWa0AmytGpXyk78VqqOr8kFHs+YE5lpa42srb?= =?us-ascii?Q?AZCXCkypC/NdoUFe/yZxS1eXam9YmA9sofm/H6uJmj2TDE+z2RHvhGj05ABY?= =?us-ascii?Q?8sol26uXxMX8COYrMhm6Ly0ZHo1t0EH3t9bYN9pD8pVphGfgxQtxxchRaDac?= =?us-ascii?Q?ne8l0SZt0jDDhEtQyNa1hLAErk674YQWxgBiDonShuHLK0s4uK9ZxIm06glW?= =?us-ascii?Q?loEsUyhE+PllrSyMymfpnQGd3LjKnNv+ff8NCAMqr10pdC6fSbJQU9eT3+Mg?= =?us-ascii?Q?ytlPdIWQIVnlvxvLXvul+hCPHyJRGZK1NrsvhhLjoFr7Q+ldBA3VDZpDee+y?= =?us-ascii?Q?i/gdm2rnIx8m7f+9/ayHO1g2BTTv4uMxn30YEDe1d/rPwSdXW1cUtk4O4ha4?= =?us-ascii?Q?nDWCxt31agI6W15X5sIZqp6hPSF+adAltSdxiEipi7/HoiZUcZNzx5eJ5R8e?= =?us-ascii?Q?KNdXJ7KC0UKX3AfUAv9e7v4vMWGy2gAUnyPPfguxX7tpolIx+jPIZmGkV+E8?= =?us-ascii?Q?UNnYnUZpiHuefUsWVm4h2/n1jHbBcdIV/5qPomZY3OcZWcbDlVpfaIwxhYe6?= =?us-ascii?Q?QxzZX1zbWvmXMAffQbM9OjDcitpfAqptBXe1DjLREwCjsq7B69RttkjAE8GJ?= =?us-ascii?Q?/wVIHm+dv03JvHtRotYPhJMr9v8VqxENYNwZfyvv9dW9IDtXkjS+271L+G8E?= =?us-ascii?Q?MaVM4cKE82HmQplK9h0Q5GhgNuv+lUj//GD3H/Zrq33d3XGX6gRF6MU/IKIs?= =?us-ascii?Q?d6sqirGVyRG4LsHMLNB4da0f3+I6Jioo/LueObKNcnNoklp6q6LqMI3i/cjY?= =?us-ascii?Q?h9IpYnqpUDnA3kI8SZARr7H8JKU3Y9eYitIODgXSIyr7rSPuLMBNKIPCKuMP?= =?us-ascii?Q?LlEUqroT1V2w6MaDYy6c8acw6h6pHpecPeyJWhCPBZOzR3IfjydOpOE2yz2/?= =?us-ascii?Q?xyplUwjE/LArewGrjxcuyoREVIcxm3ElGzSjeegGmX9MmvnGJ86FRIUF6CKL?= =?us-ascii?Q?7Kr4k46Q9sH/ytVbpPQRPqpgvmhY7lWjdGaBd4U4d8ttl91ZggGHgH07AWcP?= =?us-ascii?Q?BlbLQd/X8zM6+5kmpyKDspSwj+esg0bE04JGH8ewb5E/jn5u2/zcYtGArb1Q?= =?us-ascii?Q?eh+JDfhTQ2vFFxzOPfMIdCK6TT9blYfRx2TznvsZoo7Wdl+vlm2Uw96oALal?= =?us-ascii?Q?it2kGqB8J37INjd3v8W7nz6l5luyeZONebrL1/HvrPRqF6q3nhsxIW3xUERr?= =?us-ascii?Q?li/+przrzdVd6XV7Y7dBf9Y0kSPBro0OrBWCM0PDJfNh3N78Cbj+cxi+KYOI?= =?us-ascii?Q?cqZPCFvlQXJrq8Lmxug=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?wlw/EDEIF6W5fgWV2w/QsQrFCPvIMmytcECOWW6eaGIuhYPHmMt2aQXTf/cw?= =?us-ascii?Q?ggfGaiTNtXWTW3BGyrDE1xitwgP/hSej8hCgb8P1f8oMVL8Pd47XZM9VIAOV?= =?us-ascii?Q?8cgtD0/HSxYFoFhAXOgZTtR9sDPAXtm6nPsDPtTdhiRBlIf86wdg/fVnWQKM?= =?us-ascii?Q?ZDPSqVDzzD+gEwlOyhTnj5nxcgZXW924Ka8iAWL5I/yomhzpMlJloEfXX9GP?= =?us-ascii?Q?3IgHq7b6g5EjcvAQErzQH2zhslyXWqGeGFsMrRhirDnVX7NEBXJB2NjMcp5S?= =?us-ascii?Q?C7fXpZSfCRszXkoSwesVISGfoMalV/a11G9UxBrZVNxhg3R1FOx3xkudTZXF?= =?us-ascii?Q?cYGEYDD249hwVR12HKwwaUhHX5dzkz/U3w4Lbx2ziG3cuPI/C+l2XIKvQWhe?= =?us-ascii?Q?Qkbmr6NdmSNITGP4ct2I5TEwHFby2GfXKqHfOfaiEAnRmksKLfr/bKjmz22B?= =?us-ascii?Q?Puq26TWnrT6SRGbvo2ltz+ByKXZLpVzcCWROwKUtT+xll5+PewxyE0iFYvwI?= =?us-ascii?Q?T5M6/JBW0WvkCw3OiJTK4vcFR/6Z+Xfo6tEq8J9YmINmEWoAYSq1IfkA63PI?= =?us-ascii?Q?h1ZrRheuoodAVAtoVbXPs9YnnWEnG4AgK7bcpaWfbhm0BtK289KPrhVCKrHF?= =?us-ascii?Q?cqr+2ijCMvKwRBGK/U0AhXCECeMoBr1SGcr0cM5eP1kgh+DIIXLQnYparsCR?= =?us-ascii?Q?TDx89ExtnYsgPvXAggw/8rGBGGIi35i/NLjUXtIHh5O3WvCZ8QNJ1wE4dJ7v?= =?us-ascii?Q?Em7G3N/xxHjhaNZv2yXA/HvUmB0o8cBrGstHVvvO8XzV51yaAzjSjlad6IDJ?= =?us-ascii?Q?Xes4oYz8uEHrfp+yuZPgXilV8MvBeyTxKrx8sYxCCjyQm7p2euYsdnKNV5x+?= =?us-ascii?Q?xNWd+N2+Pk/5FzEhXRyMK6ED3vCX+PR48erdWkMKF8ZRai0TcYfpTsrHTwad?= =?us-ascii?Q?g6jtqWyQPq6ZaKMrcOWMJispFwzWPjVtRvdZR03Vky2iMAXpaK2KV/iNONlo?= =?us-ascii?Q?+niCaFEv7h8WyLx1vN0m7T5TFCjUFbyMxqKGjQdggGWCplKYeilBA3qowu9A?= =?us-ascii?Q?rF9Hd9GhI7iOIbbBgrB/VU8PEdLdw6RRSUrHyMT9CQVKokWBIGFdFgmN87nH?= =?us-ascii?Q?QNNBBinLL/y4K1ntBFqZ7TU8aSNR7LSWGZSCXja0hYed35Xq4SVoOXppoXs4?= =?us-ascii?Q?MHIIWnabD0C8vZm7qoNVAnIvsKSBCS3MiPBel99RMB3rDb/8CaU4JARenDOn?= =?us-ascii?Q?WKdz4scUtZyfgIxNcjmbHx868l6SdPXYnLVH3kDL8AxxB9ibc6HTMPOYU3bO?= =?us-ascii?Q?Ntc007teiMpsKgc7jNn5iuQpn16ZiFM6yMxtjf1lktuAuh0tpoFTpFrpFlhF?= =?us-ascii?Q?UnXs9cLCDXOqMtZUfKWeLnLHm4fcgV6R6hPM8smuvyCgzo2ZEFf9txcqxAac?= =?us-ascii?Q?Ni9iNXxKfUSr9OCKDRCHdXdS+VyFfq+IaFfn1ZGItG1QzEbY28ofz1bhvxtO?= =?us-ascii?Q?IglfGvjWsqDkbvdQNORh2KaZbUHwiHr2UgiPAu3/uD3gCyxmxqyNiVadKpWJ?= =?us-ascii?Q?ynan/fZpKKJogDpbGJn1zaPib1+T5DALHnAP2TIbG0KkMj0WWea+hrv5r2gc?= =?us-ascii?Q?dRtvg4OK0T8pVonmpKoTRuq7zI5pJxqo2kT8i4dM9KM76DZGO+IQZqC1+Xfl?= =?us-ascii?Q?PgUocckwdgnKJ4PPGfjjjPnIFBYEbmuDH30ZDCSkEuXlIgbB97NrDayQkLFJ?= =?us-ascii?Q?880I6/k1GQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 88170e00-2b39-4398-c17f-08de6063865b X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:10.6862 (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: n8o27NVEhySxaLMBFAVxKsIC6Yf1CM8ziCdlK5zpQQNhnqlhVwM5YfTNqw9cqDsPXFqA87wpw6qKeVyPWQQleg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" For convenience of the reader: now you can directly see the sizes of each range. It is surprising just how much this helps. Sample output (using an Ampere GA104): NovaCore 0000:e1:00.0: FbLayout { fb: 0x0..0x3ff800000 (16376 MiB), vga_workspace: 0x3ff700000..0x3ff800000 (1 MiB), frts: 0x3ff600000..0x3ff700000 (1 MiB), boot: 0x3ff5fa000..0x3ff600000 (24 KiB), elf: 0x3fb960000..0x3ff5f9000 (60 MiB), wpr2_heap: 0x3f3900000..0x3fb900000 (128 MiB), wpr2: 0x3f3800000..0x3ff700000 (191 MiB), heap: 0x3f3700000..0x3f3800000 (1 MiB), vf_partition_count: 0x0, total_reserved_size: 0x1a00000, } Cc: Gary Guo Cc: Timur Tabi Signed-off-by: John Hubbard Reviewed-by: Gary Guo --- drivers/gpu/nova-core/fb.rs | 83 +++++++++++++++++++++++++++++-------- 1 file changed, 66 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/nova-core/fb.rs b/drivers/gpu/nova-core/fb.rs index c62abcaed547..6fb804c118c6 100644 --- a/drivers/gpu/nova-core/fb.rs +++ b/drivers/gpu/nova-core/fb.rs @@ -1,9 +1,13 @@ // SPDX-License-Identifier: GPL-2.0 =20 -use core::ops::Range; +use core::ops::{ + Deref, + Range, // +}; =20 use kernel::{ device, + fmt, prelude::*, ptr::{ Alignable, @@ -94,26 +98,71 @@ pub(crate) fn unregister(&self, bar: &Bar0) { } } =20 +pub(crate) struct FbRange(Range); + +impl From> for FbRange { + fn from(range: Range) -> Self { + Self(range) + } +} + +impl Deref for FbRange { + type Target =3D Range; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl fmt::Debug for FbRange { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + // Use alternate format ({:#?}) to include size, compact format ({= :?}) for just the range. + if f.alternate() { + let size =3D self.0.end - self.0.start; + + if size < usize_as_u64(SZ_1M) { + let size_kib =3D size / usize_as_u64(SZ_1K); + f.write_fmt(fmt!( + "{:#x}..{:#x} ({} KiB)", + self.0.start, + self.0.end, + size_kib + )) + } else { + let size_mib =3D size / usize_as_u64(SZ_1M); + f.write_fmt(fmt!( + "{:#x}..{:#x} ({} MiB)", + self.0.start, + self.0.end, + size_mib + )) + } + } else { + f.write_fmt(fmt!("{:#x}..{:#x}", self.0.start, self.0.end)) + } + } +} + /// Layout of the GPU framebuffer memory. /// /// Contains ranges of GPU memory reserved for a given purpose during the = GSP boot process. #[derive(Debug)] pub(crate) struct FbLayout { /// Range of the framebuffer. Starts at `0`. - pub(crate) fb: Range, + pub(crate) fb: FbRange, /// VGA workspace, small area of reserved memory at the end of the fra= mebuffer. - pub(crate) vga_workspace: Range, + pub(crate) vga_workspace: FbRange, /// FRTS range. - pub(crate) frts: Range, + pub(crate) frts: FbRange, /// Memory area containing the GSP bootloader image. - pub(crate) boot: Range, + pub(crate) boot: FbRange, /// Memory area containing the GSP firmware image. - pub(crate) elf: Range, + pub(crate) elf: FbRange, /// WPR2 heap. - pub(crate) wpr2_heap: Range, + pub(crate) wpr2_heap: FbRange, /// WPR2 region range, starting with an instance of `GspFwWprMeta`. - pub(crate) wpr2: Range, - pub(crate) heap: Range, + pub(crate) wpr2: FbRange, + pub(crate) heap: FbRange, pub(crate) vf_partition_count: u8, } =20 @@ -125,7 +174,7 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0, gsp_fw:= &GspFirmware) -> Result< let fb =3D { let fb_size =3D hal.vidmem_size(bar); =20 - 0..fb_size + FbRange(0..fb_size) }; =20 let vga_workspace =3D { @@ -152,7 +201,7 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0, gsp_fw:= &GspFirmware) -> Result< } }; =20 - vga_base..fb.end + FbRange(vga_base..fb.end) }; =20 let frts =3D { @@ -160,7 +209,7 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0, gsp_fw:= &GspFirmware) -> Result< const FRTS_SIZE: u64 =3D usize_as_u64(SZ_1M); let frts_base =3D vga_workspace.start.align_down(FRTS_DOWN_ALI= GN) - FRTS_SIZE; =20 - frts_base..frts_base + FRTS_SIZE + FbRange(frts_base..frts_base + FRTS_SIZE) }; =20 let boot =3D { @@ -168,7 +217,7 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0, gsp_fw:= &GspFirmware) -> Result< let bootloader_size =3D u64::from_safe_cast(gsp_fw.bootloader.= ucode.size()); let bootloader_base =3D (frts.start - bootloader_size).align_d= own(BOOTLOADER_DOWN_ALIGN); =20 - bootloader_base..bootloader_base + bootloader_size + FbRange(bootloader_base..bootloader_base + bootloader_size) }; =20 let elf =3D { @@ -176,7 +225,7 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0, gsp_fw:= &GspFirmware) -> Result< let elf_size =3D u64::from_safe_cast(gsp_fw.size); let elf_addr =3D (boot.start - elf_size).align_down(ELF_DOWN_A= LIGN); =20 - elf_addr..elf_addr + elf_size + FbRange(elf_addr..elf_addr + elf_size) }; =20 let wpr2_heap =3D { @@ -185,7 +234,7 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0, gsp_fw:= &GspFirmware) -> Result< gsp::LibosParams::from_chipset(chipset).wpr_heap_size(chip= set, fb.end); let wpr2_heap_addr =3D (elf.start - wpr2_heap_size).align_down= (WPR2_HEAP_DOWN_ALIGN); =20 - wpr2_heap_addr..(elf.start).align_down(WPR2_HEAP_DOWN_ALIGN) + FbRange(wpr2_heap_addr..(elf.start).align_down(WPR2_HEAP_DOWN_= ALIGN)) }; =20 let wpr2 =3D { @@ -193,13 +242,13 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0, gsp_f= w: &GspFirmware) -> Result< let wpr2_addr =3D (wpr2_heap.start - u64::from_safe_cast(size_= of::())) .align_down(WPR2_DOWN_ALIGN); =20 - wpr2_addr..frts.end + FbRange(wpr2_addr..frts.end) }; =20 let heap =3D { const HEAP_SIZE: u64 =3D usize_as_u64(SZ_1M); =20 - wpr2.start - HEAP_SIZE..wpr2.start + FbRange(wpr2.start - HEAP_SIZE..wpr2.start) }; =20 Ok(Self { --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010034.outbound.protection.outlook.com [52.101.61.34]) (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 7AB6531AA92; Sat, 31 Jan 2026 00:56:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820982; cv=fail; b=J2++V2JGJwwUr5V4EAxq7quPfJ+fjvS0DvUGMZT/xUta5k3yekuEson+F/Mtd1o5Ex01Ld2eHmhy5NBPvWbxOkftbo+tlHgeTopyBLONd85h+492V0d00D0J0q3vo64nuFzDJdhGCpwbw7KQ1ZAnV6Y39smVUSbRd9ksQHqv6VM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820982; c=relaxed/simple; bh=LQBtl2ACy0pcS6xEcIFr3P9gRQ22YCntN7mIScsIAEs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ghrrH5fc8ElTW/6Yu4WfSjFWNCTIoUs8B8yHYIxTP8pnCgwI1WGBlxuTJaI7H8WXTzII+/0ADQF8cpszqw98fprLzNiMc2GMKKW8fdZtXGjMOUVxDFtWeACD1CGGa11OwxjDR0QoodMKsr7aUvNlpLgDtaWPNR0ffHGb6bRMHPM= 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=Kg6MT56+; arc=fail smtp.client-ip=52.101.61.34 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="Kg6MT56+" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jU8F8pvACXvReDRcwR0XOwg/flIFVmvfTYgjhI4htYQwzeSGP/PKijmcD0todPQZtXm+2+El4iqk9BRRbPQXb/1Vm4hz/NK+/b1FNMMk3ZrTpmb97S9SV14aGzoswPJsm1PBwloIIHNc8I6NgsKQkkioHFUAifDqk+szRnRKDRU39FuBM02G5acTRydZ8NckMUmGe7YsgRDkgHs+oZ/2SWUQ6IvEXPNyrX32AvGha80LPdo4Ptm4JLWqGrq/8Rf8b8M5SHlbtri5+2XK13ItfHSBDn4FBSmvFUccePf94ZPapzVfdtPqjZZtcqZhBtZu6CSGh/E1ZlB+0VKnH+ETMQ== 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=2JZocfLBUNCWYNx6sf3CJFj1nlmUtVIkGWhEwYtofnE=; b=fmQ06E0C79Y5zJVqz0vgepXHuxpPwP84E4giHgFkttyMwDUEraO7c2TjMdeCfZht8C69MYFHXA2IUsTcNU2/lWHR2atRsaWcrlna25i64QLdWnfydnlKau2o3CfTr8jzQta9tHhpgG6OpOmsFmBrgSltHGYDd9HN5Dta2SHI5++zFj/oLpPQKTppQWffWbDleuR/vWsFfY5+TOcp3ORpU6NRhvwjfT0E/0PAdbO8sZXx2cuPayrpJxDu7NPPYujsDV9DThWNv2LOVUwaPdR/E8JdWwtPm1mNoGoDQbkTVEHCVZJ77q3V2EkqjALh04ZooMRUZUr4UvYcvjSndAttmw== 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=2JZocfLBUNCWYNx6sf3CJFj1nlmUtVIkGWhEwYtofnE=; b=Kg6MT56+KTE8nAeLkeUSL35iAYh5vMQ+7Vnxwi4Adqzj3kP0NGnvBwjW8Dtw+ILdh80K6RfaF+uXetPjfWt1bRxPmLIL0YDpVkVGM6M0yLFte4bvvhwAFGqeXZyejTC8tWEq5M4VyZSFmcxsPB8s7XkARqzKpUH4Jz072PdCoyEdRB8GDUZZZnH7e5McY1JaHYTHeTs9VQIp9Hz+xFzbkh3DATStJf2+sm1+2xG8Vlykgy+/ouTCmY9TemI8S+gr15tlYyzfajwAgBtMrsI/6qcggAoiwQqzH4G0vQzVpcNKXKvWXOJrOBAXoLZeeaK87k2pL+8v8bMFnv0AM5NuEA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:12 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:12 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 02/30] gpu: nova-core: add FbRange.len() and use it in boot.rs Date: Fri, 30 Jan 2026 16:55:36 -0800 Message-ID: <20260131005604.454172-3-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR05CA0017.namprd05.prod.outlook.com (2603:10b6:a03:c0::30) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 9a551db9-ff12-4f24-6a7a-08de60638731 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?qsHflmMjB6wL9oI3K0gvqWtIMPsVu17yH35p4425gUdTV28CCrTuaQze7fxD?= =?us-ascii?Q?OJ9EdJYUBoVjsAM6r6nPVQIs/gqKqQ0V/cU9F3rJMZFvaL1sIswgjpC03yo8?= =?us-ascii?Q?iLIaTtFxolTIwqQp2Mekki6wuQrcT1VlyC28PSCAl8a/Q/Kf2dPhsYgYzOdn?= =?us-ascii?Q?vphYSZMLBh76fHMqvyrM8ITxql89KmG3PTYV9qKu3ZmilOa97cvKOA+PKSGb?= =?us-ascii?Q?JNEfWg6P9H/L+YhIW6ff8qUQ9m+kNZOvXyRgkP7Mp4sNuuaJZmx9GAgZG9Hx?= =?us-ascii?Q?b4hC+y4LuT6PehfuSZXlsE/ajqj0v3gtb0McdzdEhfijTsjPH25X3xsgftOW?= =?us-ascii?Q?Mk/V1F61Qtxu1vKiuQmOPx0jZfLJjaGsvjk4CuIAH771Nu+3VTmImYXrTp3j?= =?us-ascii?Q?qQb8uI4sy+LksLR0sUfNBjbyQw5zz6xFDnQd4FPnmqu2Wm5MK/KMHfWSag1A?= =?us-ascii?Q?4KlQr5g5J0ftRZ0ssofua09zd+zwOKfGuzUyjshGTwBrUENlrdFv76KQe1ZK?= =?us-ascii?Q?bWdHpKWE804pMQGD26Ri6fGqxw3jVaneSxlxBKZNBQyjZE05btPliqGYC51m?= =?us-ascii?Q?EK//PSy28TvIipK2fzPR/5l9TT6BO1IUtrfUTunW7udcxZyIUOu+dSASPjvG?= =?us-ascii?Q?UF+Lk9lbAVE286NMT13tAsLQYugGQPiVgpssuesQs+oAzQ9xFmAvkv0ouaTz?= =?us-ascii?Q?90lDCh7ZqgHfCn/l5/3wbOTctMVocWgDiUhJI6abibsawaonhRDXsF8TbtnV?= =?us-ascii?Q?erWrKlqTfpA9My6hiQrvGj5AYx5JpqOiduBl3wHU+mVUVo0RR4mJDE2qMR8A?= =?us-ascii?Q?rzwUYh8fxv0p+7JXB6E4u1jD1v3aRk/RzBokQc5ewwdz02IoB6OMktAcGE3b?= =?us-ascii?Q?CdUtchtoqbDbdk3jSDR+hJRJI6tkGeLBumEHyltBrY+cxl2z8qiBfjHo2iSM?= =?us-ascii?Q?Pn3M5IRwHSFSzf0XKD1toDCIpe20fM8gcDL0G7+s42WoDNoT0ZVpqL5Rjm6i?= =?us-ascii?Q?PRntkhpidksYDeoLKK3wnFwPLjKg8U+KQwXMIjge7YlTFmNRl4lSjVuAv0hi?= =?us-ascii?Q?Q7Fdu/7tUztBvfUjFsM3TMMGmPUpQ0te0v8y/L1v6WAbIzkpk/svWsQ+iyy8?= =?us-ascii?Q?VaVvtldZ1iaohtLflpFqLSdq9Y1LgSWaueHANWlAsRTj5t4/ouI5qfKStyrQ?= =?us-ascii?Q?RMl/QArO41FROQK///jmdRjABe8nlr5bROHYB35Cc9az7LXblbaZzenwf1u1?= =?us-ascii?Q?JxJT768ErU3TebjlwfO/F2moUnkV9stmT2uUi96PVsiBThXNyzh+xOtX+8Wv?= =?us-ascii?Q?LzJct9UDt1JWo//UCgh9L0YjLBV7ggO+IcysR+bRg1NUB796qi3wCgN7RRCs?= =?us-ascii?Q?wegJx49hhnbBHCJ2oCT54rXjtHBgNPfxlcDUfCapL4+Va0O8+iKlnmYzwbrl?= =?us-ascii?Q?Wf9NIhvIZ3Uxi5TYp7ysEk+MdRZ6qX2/8+Wrc7A/1m8gYcJfTm2jtm2HMM8C?= =?us-ascii?Q?fdv13CvqBooCPfvR2gxCcH8rSMTAC4+bVH4ZZVnZVFLSaywtAjVATsAQo3vw?= =?us-ascii?Q?lPAjRjWEWWybvJZu0FQ=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?S74mBd1mxvr/Ry07Z7UAfmCwmTw9aGnTJLMY2iRsqZRnT1UDyrOEgwEyf+UL?= =?us-ascii?Q?nxtfNoB6lloMzysMga5bt4K8GS9so0znl7r0Yuwm7v7ZCP3fa3R6G1RWWdsc?= =?us-ascii?Q?VP7PSkzIg9pjy9IYzKlBnE0UdbXFzrPjaTbt13u+79V7zFWhFScxGT/9u1iJ?= =?us-ascii?Q?aiZwL/kpQmc+47+1SjJGD1UTKda8YOBpbudilgzUPyu1dcPXMr3lVDiCyRPc?= =?us-ascii?Q?trZ0LZ4lDmX+IjI0l0sKCb/4kxp79xNwAaA9PwnwOrwL+sCyynLMffnahmjL?= =?us-ascii?Q?y9WiaueMM8sMVogYw/TXeq+GiQPvuPN9Nk+5w9naSQQ2MBMa3bh4bByetKYO?= =?us-ascii?Q?Q+R52fr99FVDSQJ7e8RwbpeEtuTYRQ26lNqu43dGLRScETETHTua1KNKCJDL?= =?us-ascii?Q?X+bnP9p1+Allr/kylnmkMEo5PSTt01JgjRrNk5VKkqi3YJ+N+OY+vRSF/Dju?= =?us-ascii?Q?xtg/x1zXeOwnAh8r8dqdEmGjJIg308Om9bevX1pB2N4CLBEsoLXlmCeWLQfi?= =?us-ascii?Q?v4El1FY1u+y5P44OcqINlHvBYPaMwTFMPaNp8mEvpgyGQacnktQmpcfbTjxi?= =?us-ascii?Q?0anLU7PGZyEUW6xXqGONZjQQXi++NkjMxjPwCOv3RCUHLngJ4iMvvLAuAzsb?= =?us-ascii?Q?D79O49EJzHFR74UyuMx4Qu5WZ6nKrB2Yj8EgpfO1GZPoTyfo3x9cwHby6+kH?= =?us-ascii?Q?LfmqBltuSm1GlU5ZfFrEze/TJhmxvvl4U4tmhAENGv4aIYmo0TJelSMKawPs?= =?us-ascii?Q?JGLEXBLY4clU+P8kJzNx5o/eHsMnkQXhoy2k1Yx0x2zaUboOsm7Gusot1TAV?= =?us-ascii?Q?6VL80soXvxLNommMVPp8rKy/EgdpnAVN/kCHSlVNDS8U9E6TxQsxZFQ057I5?= =?us-ascii?Q?sQXUTDkgME5fz6I63DzlS/dZ1ZOZ01bWrGeMLmJEgk6rwGSgGL/Wc17WnYdg?= =?us-ascii?Q?Gm/wQC/PZtBxaYkSdVE134MECzbAUm59j8xkiMXUCNJCJ+8sPN22UOWrB+tR?= =?us-ascii?Q?iwRLbBm/PWWLo0BEnK/sH3JBqTPldl3PiT4E2NW4v7naR41X6kOaeCvCgzmw?= =?us-ascii?Q?uHmspCaYzbzPqTUYdKNTfFIvwcWXhrL6goH2V34tCFxPH9o99PCkBRKMXVen?= =?us-ascii?Q?WD7t/A7Z7EWnlnrsgeIKmFJfm6qmz/ZHBt/Ta1Zy1PwS3we/kSDdSV+qawtY?= =?us-ascii?Q?g9ibtrMOuNikMC624WMUgxWbLj9NnlYGbsmh0d2rRAqPzh9r33/wLHRR8x0G?= =?us-ascii?Q?pd4ZQJUtqdn9X20ck2RGGCNaS+Nq73kS6h2Y88gi4M4x+5QAwUDQuoPmUJnO?= =?us-ascii?Q?DIs0bEvHWTmy21Y1VSuqDdYxRuQt+62TvnuM6UR/vHjpaDXZuSwHLgDz8znm?= =?us-ascii?Q?H/KB5urGpa6RFmAeMpnfsAJ0jk9bBS/GW6lsKOcWepLApLMgAWys753HrBO8?= =?us-ascii?Q?EzHdFf4xXWjBlU5Nw3Ajg5EOcmyu99tFmwJ8r/s42l9efcWegIafDIa1jKu6?= =?us-ascii?Q?M5tvozdB7avL05J3w4BAOYQbJSVSJQldml1i+FgLv7YoHCf04Vls+kvKLfhB?= =?us-ascii?Q?NZbHkYDJj8bDnUO4rF1mApVIVlhI6nJGEIYoGzuxXskHRKqRpc/ZkbrMQ3Aj?= =?us-ascii?Q?uL5aKwXAncJ5xdxtwnFsCDCfSsTJ6jZwg5ZlZDFUkS+Pc3hTG2+2ghe+uXWa?= =?us-ascii?Q?wM+knmXnWsAWqu6Y7aqzHeCaQrsG/aOJJkld2IAKiKk/2wK3kVpR3qumpEZV?= =?us-ascii?Q?//6tmSyRMQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9a551db9-ff12-4f24-6a7a-08de60638731 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:12.0679 (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: ExghQ15FwlJq2Y53BTnDATXpxhKF4XWm3y4Vp4b509Pn3ugISqo3Gptn4rw6aP267YmBGrT78R17aVehaP4Tkg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" A tiny simplification: now that FbLayout uses its own specific FbRange type, add an FbRange.len() method, and use that to (very slightly) simplify the calculation of Frts::frts_size initialization. Suggested-by: Alexandre Courbot Reviewed-by: Gary Guo Signed-off-by: John Hubbard --- drivers/gpu/nova-core/fb.rs | 6 ++++++ drivers/gpu/nova-core/gsp/boot.rs | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/nova-core/fb.rs b/drivers/gpu/nova-core/fb.rs index 6fb804c118c6..e803e6e0cdb9 100644 --- a/drivers/gpu/nova-core/fb.rs +++ b/drivers/gpu/nova-core/fb.rs @@ -100,6 +100,12 @@ pub(crate) fn unregister(&self, bar: &Bar0) { =20 pub(crate) struct FbRange(Range); =20 +impl FbRange { + pub(crate) fn len(&self) -> u64 { + self.0.end - self.0.start + } +} + impl From> for FbRange { fn from(range: Range) -> Self { Self(range) diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index be427fe26a58..036a42a6afb6 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -70,7 +70,7 @@ fn run_fwsec_frts( bios, FwsecCommand::Frts { frts_addr: fb_layout.frts.start, - frts_size: fb_layout.frts.end - fb_layout.frts.start, + frts_size: fb_layout.frts.len(), }, )?; =20 --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012046.outbound.protection.outlook.com [40.107.209.46]) (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 0D1B83191D6; Sat, 31 Jan 2026 00:56:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820985; cv=fail; b=iRBJw/mq+k8jCf+g8MMbq/C35G+QTPzxvYAe8CQnntqG9BolttDTScwm3Gr9nDDsw+Se3LoTT06Txk8ZK7hXBaIKEJnjUp+7BWc7ywN1F4NM4e2eG3f84yl+ThebtSuAbVSl1k/GGEYQeiDzXsucLUwYlEQzVtbZiS5P6fHZnWw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820985; c=relaxed/simple; bh=/tr47fRr3aE602gmwYYndZwsHpHG+E60Mh4AhlMl+Ls=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=WtqSoAcVCnOsJQ3sCgxqcxCXspVHLRccmBDirglsC+YgWf63+EpV1M0TQ9sH6cNIhRYMTTRAm13pBN9WWsY3+WiS7RmXPX4aqxqgsw8AYo+Eo19KvalrMrcAhSAO/aWHKK20rnemL0WvsEj69AhQuhfDE9nldBjZhtvxJ5wcwxw= 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=Ca7+ryKU; arc=fail smtp.client-ip=40.107.209.46 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="Ca7+ryKU" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gzOJJRgNgdXdFg8EKMZrBlWcdbhfDHZO3Pw9uFjYPD52672/45V3lLr98ekc5a6ox1grCkGtX3IiL9Qbv7PzcJBCNZVgJ2YkIPCl/K515TH5LvSWsscQIhgEtjoi3vmIGNRJHjIbGQDTnYjn4CqFb1hQRHkT1rDpjjcdXy2qkUsyh0gMPPSmMgqadUEA4FLjk6ri9yRssnYO/b3ZUFNvnMJ5y6inY+XdCHdHbqf56Jg78t6WIVK7fuHIZhW4ay/4hckV8iveK2oIq8BS1rrP6nXej9V3jOjtOmOe4mXO4j4xGyGLWnYrEPXS/nX9/OyW9483LKn5vTiWvL1Oq+UBXg== 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=nGtEBOnkFVerP8y816PzbmDqYjE+PQfc9wxukkKUgrw=; b=rvHkk9x3qP/ZaimoP34rF4VihFAFuH0GUeF1W8bAvsus+ltCUh3nb1eSH5p/IbI8bDgA/7uudYpTkHGA43DOKPmfwBai7wbamsMFBsxT3XNyrlxJDY3H/3Xkd4DGDAkRmGI0iyxGpT45ObrlS+zw7jBQ0Lrer8xF/HcWCD3GzUwKIt4R8xVHvp2Vt8m7gkrMvs1lzSR3RvEIQcjwOWrsY06Z6iANq/RsErjEwWMAPVj8dvY0xnL/PSdPw828OYOFQhE750lZjoCkx2gByFbekDmhtGrTQU1SmnZgI8buBbA+bTNWib2YOEh7lWjL64YqPb+dxka6W2goyUYcMAcfeQ== 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=nGtEBOnkFVerP8y816PzbmDqYjE+PQfc9wxukkKUgrw=; b=Ca7+ryKUjuoQwn60NJl0eSEX6/otDKo4vhhSrok4uvxtnfWxvaVKzEEhzajVjTqET7nUOGKuTr/VxGedtcUDeQGfhq6vLs85kgeGY2QQoa5ylnDVWQKWJSxBoQKvGooz88ZgT7wa4SxhB4VGdZuHJ8S9neHSbpcBXlI/dtuI5cwCv4sEJ/pUUKbqWuk0CgbBgRy3siKDTlCvkuL+gqigy29C+WW8WXSXV6UDzRrd5i9QhiJJkg9+f4XUcUxxGqLWYMUPLxKmvG0w72Pn3KE6oJFkOtkaWpsu+Z76MlJQ6fwCuQkZ5Ey7fOWsYkemDk1cRE4/jq5ZYJw02ldyAsDjGg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:13 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:13 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 03/30] gpu: nova-core: Hopper/Blackwell: basic GPU identification Date: Fri, 30 Jan 2026 16:55:37 -0800 Message-ID: <20260131005604.454172-4-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR05CA0058.namprd05.prod.outlook.com (2603:10b6:a03:33f::33) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 445f04f6-3bee-4454-5d7e-08de606387d2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?tM/iuLF5/i+GqNtzHVydOfT2QTk8px1OPG8MoEDDFg0ppJvMOAs0ur9nhTLz?= =?us-ascii?Q?virxdB835n40NkPCNTjp9Iln2MOVWShxTqKTPQEfNJiXV049XcFMmtfOi7Jb?= =?us-ascii?Q?gJFHdqK4wraU+X742YV+JVcq68dRHCqTH/ev88wXQ5UmMX1nv1Z1ZwOEx/Ua?= =?us-ascii?Q?5Zhn+UOqoxijw9oo1It1X9u/ubttxjwZyQ8qpxP+eTBJZAQ5oS8H98zezxlk?= =?us-ascii?Q?rwerP2GqgU0K1r17sipD3dXJyzPN+V9sZdfFdnlGQR9Gu2m6PHiyTNkZ9HCs?= =?us-ascii?Q?VYeqv4CHgBqMmwvezpt/NtN1k11B6OlX8DeQ0he4GSJaPtqKTQ7+rW6cap+G?= =?us-ascii?Q?umhltdCWmJtxhFb6HL7xV8s8x8S6xiOfRklnUUTh7kMWxttTk5YP8+OR5t//?= =?us-ascii?Q?UglbvT2zC6vFajT+XEqTvQv1dht/T1qwUSKtSygNVPyV/vkwrql+R+P0pRZ0?= =?us-ascii?Q?tLECWz0spMhC0gowaSVMFj2SDiOz+2H/ezIK/pnlGSmvH+NaGXeZxgkoFrys?= =?us-ascii?Q?SH2LXWP40r838anA9VGJCbz2E8WpGadKxOGSL+CgHgSe87uUPYBoAmhNistC?= =?us-ascii?Q?2E9WpE7tHJSzxMkZEG8jf6lJfLpzowDVhUMljK4Syu1DMtOeTz+wcN3Sr3o7?= =?us-ascii?Q?LsQ0q0UjA+ODeecR0EnkVNSv5bmo2Aopec8XDSoVMXRPSgOwOvwt95K7J4Ud?= =?us-ascii?Q?krGW8f3ogh/RcCulojM/hmIiI2v5z76CUy5WV43ihgbgxOgeU0bAbj65EuJx?= =?us-ascii?Q?HFzcd8RW57pP6eBDvpuAwRZP3mMANpNSjZF++SEOhYzhJEa6b76SWiqEXwbf?= =?us-ascii?Q?1wf4CLPSeKfTwtE3sE4MHuSoeIPRa+CEoTtBDVTgfh1lE3j0Ghvi+ZLSyflK?= =?us-ascii?Q?Ns4WaCNk4AmPlk6hW7qd6I4x8uRio1CHFrANvamecW8yI1FqDTkaDXG0LtsF?= =?us-ascii?Q?+q91jlquVQ4lJhmhgcG0rqEdD1StiCR5mTTyotzPRtYVAlD3L5eLAZwfQQgM?= =?us-ascii?Q?tVwNegaPoKl45z1TeSz0Q0wBJga2LIH+OGw+Lw+FdjVu15hEBepczKYnCZ8T?= =?us-ascii?Q?H3Zojo8WDaelAbDYIfw47Hesmalzfa3k31zpDSsB8hKeLaG52op9Qx3ML+Ou?= =?us-ascii?Q?WDjl22tHH7m9N92dQD3ZolvwVfQ6xSFSI19gUEN9q0KszGwl8+2pRmN7DXcl?= =?us-ascii?Q?Ad7z4gejbDULxU5T3QON+MfRD6DMqDGrO1oRWZJKN1pYPSncrWqC84fNVtWY?= =?us-ascii?Q?BK7hoAqPO3BKZpBBakS7u+Uha0IHfARqFVf+e1A71APHxRiKgvt9ZklFviY/?= =?us-ascii?Q?lJZTisdkGfBX7037zAhF21NkbxtWVH2rVvuV7qfGW26XRH9ccvYqddEX51JY?= =?us-ascii?Q?H4PEOil6pPCOUKP8QIaDSKBfxknduFOmghb4rtUP4Bu6oJdO3ch5IlXPEJcR?= =?us-ascii?Q?xEM11c8Y8EeIzZZBLtHLhflPtK7soV3Lr+uMbjkVUK/pvWS/4RCH06G1Okh/?= =?us-ascii?Q?B5xcGLE75injFjx4o9uAVmydCwV2Vnei1Rz5tYAT1z7FqhGm5tyyNoob135K?= =?us-ascii?Q?adIPxTN7XHVkwS0B6dU=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?NkWumt4psvUyYk69y7IplpqVLBIZa3eTDdroq/qgsRp5NIaQCQjk4qL4Wt0A?= =?us-ascii?Q?Xrz4Ni2po2+8OgF3DQdoxuci05+6GhW9oxZagjqIqDCt17ZYnEAoJxiWchGj?= =?us-ascii?Q?QMLGGEin/gRLqihKq8VzuqyZGsP4jpX5Q3jA+q/w5QL8S+BXWeawU9NKUsfI?= =?us-ascii?Q?aHwkgJpG2dDKuMtj6CZAyAbbDWta+//nZ88NR9aCi2Ot8giL2WFdG44CVMr/?= =?us-ascii?Q?L63wRv4ghkIRjAgaYe4nJvZVqkk43PBW9RX+H9Kk7vZzbrARuOt8yGN4sO4U?= =?us-ascii?Q?A7J+7eFboSVbcyjaVMbvTYo8uZRK6Q1jNLM61RIoSayt06fgmfYj7EjdoXyf?= =?us-ascii?Q?kS2JPm2NjalwSRzjie73YC2pnGrdoTmbZvviVj7/Ns9bR4Lzkebq71AUwakg?= =?us-ascii?Q?uxEi5L4AYCAdQT6iiE5+lo/tt8T5GFWdrOm0BpzSjvn18ZjOBWQyQvVAY2SY?= =?us-ascii?Q?AjW70XBfbjHAhjS/ISZwhOZLz4pBHQXDcXIxOOXf54qgn6LeRcdY+1GiTmlr?= =?us-ascii?Q?OEEdpbhZRew9vjhCrRaJcEsCrYRhHL5Bd2TABkNiOirFpmdBSmhcZrsNiGX2?= =?us-ascii?Q?B9sgbLXOfHC/5XGtmChQvaFfdb8R+dD6NHWo7ElMOD838h+COxd8o1oMqjlf?= =?us-ascii?Q?E4kfSfgAlNq07L6Vo8mJb3mq8YwsYCInKqFpCIMkW2Us12UAPHa1BvncbQqV?= =?us-ascii?Q?NkFwA/0rysvD0E9jfeowULla7xM0ApHpdtUA/vbrj33t++Z0H/A+LqHOEns8?= =?us-ascii?Q?ygUjvG35ll/FsEfTCGM0F+t/SeG1V7s6q7tv5S9eXG8bFUcwFV1FvWwBBOF8?= =?us-ascii?Q?dZuaqD4SBEoj8evV3PtSrQpcS3QtMwAYTG3Ijxm19kjGGv1P03e83iNSR9Vn?= =?us-ascii?Q?nOLumCMO7ptBlNCU/k3DEsKfxuS0yYEGoFk9hsZ3oLzCy/jKaspe7Ij6ETfQ?= =?us-ascii?Q?IpmjiR0pPIJb17Ktl9G5foL6uvL1AORk8vEFb29hkDjwnpcRtzY66DZiniyB?= =?us-ascii?Q?O6VFssz/cldJsg8XkozjSHXolDjckP5CxtSngAO8mp7EsZ+qF1zyz0qKaLp+?= =?us-ascii?Q?o5lc7MjZUo/dFPyM9sern4XYaQjWSm4YK523fcsbS5cfIdwiPqOf/eJKJgYI?= =?us-ascii?Q?YDGv6qrXB+e+tkY5w+dwq0DhdDZYdIdsXCRIINc5+TSgedVQXkFcS4o0zDlv?= =?us-ascii?Q?6cHd7MVvO+6CnTRFHu/IrG2gfWAUbKbpi3mOfZqITq2Ga9z6YymJFssfWBh8?= =?us-ascii?Q?C1YUDFjzK0KoVSAdej24xqraBHvzNn6wC3GpJ7uJXGiGJt2UfD4fR59nUlR8?= =?us-ascii?Q?m6RtwvxjIxopMVhupH2JZXeoLtscTpgQbGw21dfNZao66+/KuGYsOGFBAbL7?= =?us-ascii?Q?RhCjA88CBF4NHbd4/jpwAzZdSBOLgPO3esJ5u4xZMVrBATX+v5dKnhnu0ESM?= =?us-ascii?Q?tbXtW97XDhglge3kFGWZw5j777wnRnQ55t1jJa8khjzFENsCYNpkYcwsMGkc?= =?us-ascii?Q?Sf4PhI9VcBMC/SAdkyxkubwwfkQDI3g+tWjqJzZan1IcB1dQH6dRVkWp7/PR?= =?us-ascii?Q?sosJSPPw7DdXTlGdqIdGfmlAW6GDPV2/XOTGTMjhhSFEFCvQZah6PEMKHrzT?= =?us-ascii?Q?k69FUM4MyHT8NkqijeU3GJWDR3beIjBR2v1++2rkXJcDyNeSMhv8qXIC9pZ1?= =?us-ascii?Q?r3chEJYWyB/m6s/dVZySBBxRqchJBGVfCCgQ3qvDndS86X6odAu/DtVkaHb/?= =?us-ascii?Q?Wjf199h6aw=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 445f04f6-3bee-4454-5d7e-08de606387d2 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:13.2704 (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: 7WVxtJZ7U3bDdhfKkThfLWo6p3n2nSClcbGbZm6vZABvE06TAPLD3YTlaTIE5X3H/DnGUxTINAXvehJJqFkI1A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Hopper (GH100) and Blackwell identification, including ELF .fwsignature_* items. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/falcon/hal.rs | 3 ++- drivers/gpu/nova-core/fb/hal.rs | 5 ++--- drivers/gpu/nova-core/firmware/gsp.rs | 17 +++++++++++++++++ drivers/gpu/nova-core/gpu.rs | 22 ++++++++++++++++++++++ 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/nova-core/falcon/hal.rs b/drivers/gpu/nova-core/fa= lcon/hal.rs index 89babd5f9325..444c95fd4ece 100644 --- a/drivers/gpu/nova-core/falcon/hal.rs +++ b/drivers/gpu/nova-core/falcon/hal.rs @@ -76,7 +76,8 @@ pub(super) fn falcon_hal( TU102 | TU104 | TU106 | TU116 | TU117 =3D> { KBox::new(tu102::Tu102::::new(), GFP_KERNEL)? as KBox> } - GA102 | GA103 | GA104 | GA106 | GA107 | AD102 | AD103 | AD104 | AD= 106 | AD107 =3D> { + GA102 | GA103 | GA104 | GA106 | GA107 | AD102 | AD103 | AD104 | AD= 106 | AD107 | GH100 + | GB100 | GB102 | GB202 | GB203 | GB205 | GB206 | GB207 =3D> { KBox::new(ga102::Ga102::::new(), GFP_KERNEL)? as KBox> } _ =3D> return Err(ENOTSUPP), diff --git a/drivers/gpu/nova-core/fb/hal.rs b/drivers/gpu/nova-core/fb/hal= .rs index aba0abd8ee00..71fa92d1b709 100644 --- a/drivers/gpu/nova-core/fb/hal.rs +++ b/drivers/gpu/nova-core/fb/hal.rs @@ -34,8 +34,7 @@ pub(super) fn fb_hal(chipset: Chipset) -> &'static dyn Fb= Hal { match chipset { TU102 | TU104 | TU106 | TU117 | TU116 =3D> tu102::TU102_HAL, GA100 =3D> ga100::GA100_HAL, - GA102 | GA103 | GA104 | GA106 | GA107 | AD102 | AD103 | AD104 | AD= 106 | AD107 =3D> { - ga102::GA102_HAL - } + GA102 | GA103 | GA104 | GA106 | GA107 | GH100 | AD102 | AD103 | AD= 104 | AD106 | AD107 + | GB100 | GB102 | GB202 | GB203 | GB205 | GB206 | GB207 =3D> ga102= ::GA102_HAL, } } diff --git a/drivers/gpu/nova-core/firmware/gsp.rs b/drivers/gpu/nova-core/= firmware/gsp.rs index beabae9a1189..a529a5f1c3ee 100644 --- a/drivers/gpu/nova-core/firmware/gsp.rs +++ b/drivers/gpu/nova-core/firmware/gsp.rs @@ -224,6 +224,23 @@ pub(crate) fn new<'a>( Architecture::Ampere if chipset =3D=3D Chipset::GA= 100 =3D> ".fwsignature_tu10x", Architecture::Ampere =3D> ".fwsignature_ga10x", Architecture::Ada =3D> ".fwsignature_ad10x", + Architecture::Hopper =3D> ".fwsignature_gh10x", + Architecture::Blackwell =3D> { + // Distinguish between GB10x and GB20x series + match chipset { + // GB10x series: GB100, GB102 + Chipset::GB100 | Chipset::GB102 =3D> ".fws= ignature_gb10x", + // GB20x series: GB202, GB203, GB205, GB20= 6, GB207 + Chipset::GB202 + | Chipset::GB203 + | Chipset::GB205 + | Chipset::GB206 + | Chipset::GB207 =3D> ".fwsignature_gb20x", + // It's not possible to get here with a no= n-Blackwell chipset, but + // Rust doesn't know that. + _ =3D> return Err(ENOTSUPP), + } + } }; =20 elf::elf64_section(firmware.data(), sigs_section) diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index 9b042ef1a308..289785530ad7 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -83,12 +83,22 @@ fn try_from(value: u32) -> Result { GA104 =3D 0x174, GA106 =3D 0x176, GA107 =3D 0x177, + // Hopper + GH100 =3D 0x180, // Ada AD102 =3D 0x192, AD103 =3D 0x193, AD104 =3D 0x194, AD106 =3D 0x196, AD107 =3D 0x197, + // Blackwell + GB100 =3D 0x1a0, + GB102 =3D 0x1a2, + GB202 =3D 0x1b2, + GB203 =3D 0x1b3, + GB205 =3D 0x1b5, + GB206 =3D 0x1b6, + GB207 =3D 0x1b7, }); =20 impl Chipset { @@ -100,9 +110,17 @@ pub(crate) fn arch(&self) -> Architecture { Self::GA100 | Self::GA102 | Self::GA103 | Self::GA104 | Self::= GA106 | Self::GA107 =3D> { Architecture::Ampere } + Self::GH100 =3D> Architecture::Hopper, Self::AD102 | Self::AD103 | Self::AD104 | Self::AD106 | Self::= AD107 =3D> { Architecture::Ada } + Self::GB100 + | Self::GB102 + | Self::GB202 + | Self::GB203 + | Self::GB205 + | Self::GB206 + | Self::GB207 =3D> Architecture::Blackwell, } } } @@ -132,7 +150,9 @@ pub(crate) enum Architecture { #[default] Turing =3D 0x16, Ampere =3D 0x17, + Hopper =3D 0x18, Ada =3D 0x19, + Blackwell =3D 0x1b, } =20 impl TryFrom for Architecture { @@ -142,7 +162,9 @@ fn try_from(value: u8) -> Result { match value { 0x16 =3D> Ok(Self::Turing), 0x17 =3D> Ok(Self::Ampere), + 0x18 =3D> Ok(Self::Hopper), 0x19 =3D> Ok(Self::Ada), + 0x1b =3D> Ok(Self::Blackwell), _ =3D> Err(ENODEV), } } --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010034.outbound.protection.outlook.com [52.101.61.34]) (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 EA18431D380; Sat, 31 Jan 2026 00:56:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820984; cv=fail; b=mtDzS5K5XHzvNRTeac6ONDwPFNGd6tJsRa7BnlUC+i4ATjfnsYqwH4rFF9ZQyjyRiITISH1pB6D1Nq9RrBNz5b5TBUDgF1Gq6/vm5Gww6euFbzlr4JRTd8RE4ZKS0G288hcD/rkULrAxeB4EW4U7M+bfY4g2HTFDypF/iC6//UE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820984; c=relaxed/simple; bh=syFwAijua8IMSFioo+VsXmS+DKvhemgY4REzOFoO5vU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=WiWusyiZZG+K0OtmBtH6bw8KrNeTP6f+o4KFP9bGmVowmC1Lh5cF1r+grHddckPoPmYAY0fyB+8SR/YBXJjyxLsQxeMGqrRhA2Ruhi6sFbAz+aWxudt4sPOfnr3f3P5fLCqfNHlOIyWhVKAR8k8eOpZLPhmxa6VV7nhwsZxRDJc= 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=XOwmD99B; arc=fail smtp.client-ip=52.101.61.34 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="XOwmD99B" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=U6I2eBKY0Nc0f1YHfD2qF1OZ15LLobrVHhW47kNPAi8Cxx/UV0TCCVoBrCmsJWYChFfizfm7dUDOrOefhiI1tu+Vi5bZovpWlPO8BGIw2O3pgzYUc2QsxQUk++Bw9L9jbj8+yc7qQ4JLX2GxA01eumanZy+CqGoO7ZODJ/rYcdX8Cw13MFYrSprAXKkWSxiW6oMdbSNyKCnAaknwhm+DBywd71Y1VOVO8ykWtUWJ1gv65tau8nj3EwUXVzhXjzdShJkVFzqpEMf6DB1Y0mCB97insPyphOsxLFNhRqRkTRtKv7woNZ+bRo4haEmgc6CMDazRCrtOxVNNrTIpL5+RFw== 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=iN737xC/wGCpqIIMlfz3HP/y+QKfhgVQUn9LgLt9xLo=; b=MlGP9swY5dRhxgj+3bPxcyCp/rUFk9CCoVx/ZZVmaFnu1bRHIZg53od2nL6nRfu8paYt+/j8mUgVvKL8tsTYj03JnI4QTxIR0ZNYX4tpKkFpagcax5uuTCav2KVbTH8LiB8W+KVqBx5z+6hAeqFKDOMkcw6sv2SuqBzNMcZJnWSWq7kAzMfFCPr3eVmmpBvc/m2wbhsAyvhR1x1pSDSbB4sikAhWieizKxlCkS2kSatTiXiWlL2r91AzINlrX0EQEPiRgUWDAGdS/AuUnOpM9MGzBo6FeAQYg/eWCN9uacYXdkr8fZzfULbVwDCTuWcROr486SAmncmaSWo5E+CmUA== 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=iN737xC/wGCpqIIMlfz3HP/y+QKfhgVQUn9LgLt9xLo=; b=XOwmD99BFTeXhuYL4oZPwyosSKB2HZosuXLintg8SNjAZH5XvBS3DxbU3cwGcC7rq8RBJg1qv5JCvFwbwrYhB/3ZNdi58w+oXOumukz4iHIQgFSf5weoGsSC9WYQUKZ7mpSnqdzQRFszewU6MLt61btLVMGX97WfEurfcYbpnmUnK23RZwDnQX01AULTIIX5XU9z/lDNtHhnAl8bEvF0M1ZnQ4dlU/TY+yNexj2zLctkwzvJ4tA+Nn+qXgnRUkLQpqr35QUTvafcaXz8GU39teA1GhuF7K/hW+Glhz1CF5NHV6NJSW4cMsfhGgfGO/ySqX09qESEzpA0d10IEp0aSA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:14 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:14 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 04/30] gpu: nova-core: factor .fwsignature* selection into a new get_gsp_sigs_section() Date: Fri, 30 Jan 2026 16:55:38 -0800 Message-ID: <20260131005604.454172-5-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR05CA0031.namprd05.prod.outlook.com (2603:10b6:a03:33f::6) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 38631f04-37ab-407e-8ae1-08de606388a8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?cQlWyJtd4PFHnQfdFYubvUVCatajfKUIuzATnV/ckFouxZ6tRBTR1NAxk/qM?= =?us-ascii?Q?KbaiNlAjTgTpDQBNfXLTL5vwmKmzKUdKmbFTKOYwljBtEjKRYHX4M25F2vMZ?= =?us-ascii?Q?k+Md6VLFgHb1jp4O8Wbg2HtV4cIVeUcwgma6J6Yjnc2thSXgf2prGVDto/hp?= =?us-ascii?Q?OaEOdu/HG16RPViiY+EgAcMgGRbAKhkYhMFgQ9G/2eB1AI/YLcKPVcAAhnpK?= =?us-ascii?Q?o9vt3d/PWxvo6T+KQiQBWQ6gqYZ6qV0+526IcpKrY1cLh5v3Vj8ywdAI8bmX?= =?us-ascii?Q?6DNQDh3iSabRzLMbm65pR5luRM8lbWxGCTTidLUYEQicTRheietencp9ic1y?= =?us-ascii?Q?C6uod+mJAIUes7FZtQrVYmeAfoaAwXck7r8WJRFiogbEJqCaAbCsm/vnuGJf?= =?us-ascii?Q?cw5UqVb7V9QwRXdXynVCgpYW/5cD42knZhWk3qlqDyh4vdnVozGWxTbq6mYo?= =?us-ascii?Q?WrhpnuME95lxr+c5Ju6IRUavUXYBXR0KXZX15bdyPAQTysWikaJC0q85+U63?= =?us-ascii?Q?5NEubidCbk+xZQUNNDbgFLkQnQjzMtmoc+AVB1tGEwZ/L4atNTAhjgQlDnPM?= =?us-ascii?Q?7pAtrW68KTT3cU+qF3HVn9YF4sKB4Rofr49IMD3P44qmIgHPriqXJb8r1Em8?= =?us-ascii?Q?PnDf0rrtL+gvlWh3lQ32Ia9n6ie2AIex51Vhg4eJgo1iH1XRfAHK0yEQM/Uj?= =?us-ascii?Q?fsSLH3dcgTzPOGhv2YV4TyPRV0XL07ro7AZ1dZT9rZVEbNvBUKRHR3NBG9ZB?= =?us-ascii?Q?QLE8dpNHT2Rwg3+SDxIGZfqidPIQ/kOFAGPVojGxOSYUh0JKHEFPLByPsNAC?= =?us-ascii?Q?exm8Kn9oY61Vw0Ap83rRZ6ludVdjSbAQt5qUlzuGxk+aJzkxP1gur3x3CROY?= =?us-ascii?Q?9MRZSuvpovWWJka9Fcg5Vqy3oe0DituKzd0tSh8YHnLbGJvGV5kYQQwMCYD4?= =?us-ascii?Q?AkLIjBKq5QAPM5t1aRpnmCH1ocRgmK1ntf3aDJzTJipXsVsGYGYCXE26EFmk?= =?us-ascii?Q?i84ZoXc9nGlgEX9jOiDTbMfpzl+m6djQ2/H7w7PtTTVPcjrDr9ffwnORHsOA?= =?us-ascii?Q?y9SYtbDHdA5x7kVwy2oi/N7GPoo1/SzHh75fnAmFuiZt2jZu6E1P+Wdj5SiS?= =?us-ascii?Q?rDQJ4plWevZS5cVUHraz1qsKdQZC1qPC6yftkkwL50pnRmEVVSv9EcFKN0gi?= =?us-ascii?Q?eo9fy3Gt1in0YD3WiBS4IgfKT11SaN1qvXXyXMz3P4/hSX9jelp2NSMxJ02c?= =?us-ascii?Q?E0IRX2FzfCCQrR8qa+1yf140gEdywn4eRBL7apCr3xPFV8BweGiTIFZGXvsZ?= =?us-ascii?Q?31ITaUVO9MhtmLl4FLIjpLZnKLhEtwd64b4xE2LsezAoCya7F2c2HoacOtPw?= =?us-ascii?Q?6MyqrM62ua0X9/RnBSnQUrA/8U1nFptk8eK3WuA5lBtP2jNfr25HmzYBOuWD?= =?us-ascii?Q?Yfnf92sRZeRZbL7321Mw0Rz9LPVSMXyxq86vVHnBrxV3Pdw36RGYCUObYz52?= =?us-ascii?Q?kLIWVOSWR2GHwK+PiN/hY2uh4Ca7alv/qCohUmSkj0Ki6skuGjCjGHgqpVmb?= =?us-ascii?Q?RnasUlTNo/rGMZGGguE=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ruIn3Zu82jARxkEqT2mvGMizVHLuPyDV1dUwbf4iN6qOyimzCbzM8cFza+Mk?= =?us-ascii?Q?zEAr3aNPiBU8cDUm1XUJ45bnNydEc6lA6YrruaH3v8KzuH0iiu4dmNHYxGly?= =?us-ascii?Q?EEquI74rwrRoX70X5utPzjYI6AG0Qu1iEgL7YFh8LrLNizjkEqyxZSX87R30?= =?us-ascii?Q?YZ7VG2TSaAlf1kxdx8DduH9qSTN8ZG7kfoT6sAu/yxgqhi/frOH5EPtm5myR?= =?us-ascii?Q?Btyi5IHewa1rqgetwnpfVOlAuLcvVQGJFm5tcccgIejndYtN8z26M5FH7Kza?= =?us-ascii?Q?kuUE5xcKC7Uv0ZSutyVRSwLLKH9rVOE+X6nEg/qsUbo/E9pWN1KNoi6HKmjf?= =?us-ascii?Q?Oq2/GDVK1Uux04vBr1grB8jfmi3g8qKLDuEVJQhw9FVz1aNK9cwciVFVqhYJ?= =?us-ascii?Q?OhsSKnSVKI8VAqqIy2mP1I7D3ACavx5//Rm3+smMnoNg9ZH0TdcAfr7W5FRC?= =?us-ascii?Q?OInhJ5UTGemh7TAiQqXprvP/VsrGpe+i73z3GV7xg1RE3koXGqMLMeYkCTEV?= =?us-ascii?Q?wl4Xb0a7unV3bVig1diZrKxW3l7saj030o0HGn4B974Qxyi5KqOPHZQd/lbj?= =?us-ascii?Q?urd3ZDDc9itvn0It8c3ZbqEq4U0vSBYd31dG0/38ULfe6lJjakz2mqHuuLH+?= =?us-ascii?Q?flVRM9ogf6lcE6XlINBSbIVm4xLTOVyHCNut3VKa65Ljr+5YidAqodIAfxtS?= =?us-ascii?Q?yJWzePW7FiVkUAZtYs+n5hvqBndO9GvKNOWsft8rXi/VzWBYyjg9C0taHmUO?= =?us-ascii?Q?qHZJf83mRy7pwLYjRrGiGydRuMfBzapOaaxvqtVVWTsJYUm6mv8IWyKAVJUi?= =?us-ascii?Q?iZ9BKdfbIaTBwhMOkb+7GDFlFRrWh1mlwFl/RUzzZb2wBkqjQwooAXwUnOSX?= =?us-ascii?Q?p6gbL91jBnLVkPUsQ+YaZLLUQwtv9bimKM7BvwOUkkjPjWAmQnsl5DBrPApA?= =?us-ascii?Q?6c/FVPccwF1p2etF9RY/upeNcafk19Ua9KWPvKCmL/DaUuDzXrCtc2wWZvjU?= =?us-ascii?Q?uxzVbAxzli/DwllbE5hMFZKd9nusU9gj2JSpyM3xDJdk4E+1W0XDY0zWiNCe?= =?us-ascii?Q?uD1i/E6JfT3zrnJM8O2g+i5KdyiiXwv+AqDVo3ySF2gT+5qYiERceuo++Az/?= =?us-ascii?Q?zL/Gy0zXcxppLhZp3tKj/CQhA6gufo1R/Ia03whKJ7odqd2lvCcysbYnH7xk?= =?us-ascii?Q?h0cJMZ+vDyUR1UP9B5HLK7w/ybiQE7wYnAt6wOtQpbb/T4gzJfcV4QpGT6gx?= =?us-ascii?Q?s27kKxZGW+b29alwkxMRQiG2GGRbY/SpOhjqArHEsyDvR3+MQRQHOYmC+OQX?= =?us-ascii?Q?r1PmHFrVQLtVD168b3RZx4/Y3T2SvIneTvaPV9ECALHGwhwuAAkXg7CXbFQ/?= =?us-ascii?Q?M+jU6ngK7FmhyzqzRGh7EIGeSIAZAyQWYTdyrZbmMHGAjAocztH2V7P2n46c?= =?us-ascii?Q?ttlyId3565W5r/zTVgDM3EvzFnnJG/T2VAxs5VEBQM3IGr+Q/MzTbBDpSlvI?= =?us-ascii?Q?ikpkOD99uadamAhW28XZgnTY90L5SoXIoz8T5h1O1JifqTKv8mHbkQ/c9Zl7?= =?us-ascii?Q?T5rie8gXerIgix0sM1VXuJV6WM8EcxxZLtfR5lbHi5XUDjcmeFJ2N1wthJZN?= =?us-ascii?Q?MMPRy9d2RMlAAByR0GRPng0ahrAJTLtlq1TCpio+tFddh6YMFc8I8PqwIzWn?= =?us-ascii?Q?SzLqpQfPbSQETPmEMhPoB9WtF0UbjuzZHigle4CoeY+zm7oMzi3p5TPjzgRM?= =?us-ascii?Q?qoWjd++28w=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 38631f04-37ab-407e-8ae1-08de606388a8 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:14.5194 (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: lNcLTIcyU7O16m0TtUqnm6uBWiP2089c7nUBXX9XZ6Pmj0XLC/YzjDinez6dPO3ug2cTCP2hT63BR0gQOCnd4g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Keep Gsp::new() from getting too cluttered, by factoring out the selection of .fwsignature* items. This will continue to grow as we add GPUs. Reviewed-by: Gary Guo Signed-off-by: John Hubbard --- drivers/gpu/nova-core/firmware/gsp.rs | 60 ++++++++++++++------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/drivers/gpu/nova-core/firmware/gsp.rs b/drivers/gpu/nova-core/= firmware/gsp.rs index a529a5f1c3ee..072881e0a62b 100644 --- a/drivers/gpu/nova-core/firmware/gsp.rs +++ b/drivers/gpu/nova-core/firmware/gsp.rs @@ -148,6 +148,36 @@ pub(crate) struct GspFirmware { } =20 impl GspFirmware { + fn get_gsp_sigs_section(chipset: Chipset) -> Option<&'static str> { + match chipset.arch() { + Architecture::Turing if matches!(chipset, Chipset::TU116 | Chi= pset::TU117) =3D> { + Some(".fwsignature_tu11x") + } + Architecture::Turing =3D> Some(".fwsignature_tu10x"), + // GA100 uses the same firmware as Turing + Architecture::Ampere if chipset =3D=3D Chipset::GA100 =3D> Som= e(".fwsignature_tu10x"), + Architecture::Ampere =3D> Some(".fwsignature_ga10x"), + Architecture::Ada =3D> Some(".fwsignature_ad10x"), + Architecture::Hopper =3D> Some(".fwsignature_gh10x"), + Architecture::Blackwell =3D> { + // Distinguish between GB10x and GB20x series + match chipset { + // GB10x series: GB100, GB102 + Chipset::GB100 | Chipset::GB102 =3D> Some(".fwsignatur= e_gb10x"), + // GB20x series: GB202, GB203, GB205, GB206, GB207 + Chipset::GB202 + | Chipset::GB203 + | Chipset::GB205 + | Chipset::GB206 + | Chipset::GB207 =3D> Some(".fwsignature_gb20x"), + // It's not possible to get here with a non-Blackwell = chipset, but Rust doesn't + // know that. + _ =3D> None, + } + } + } + } + /// Loads the GSP firmware binaries, map them into `dev`'s address-spa= ce, and creates the page /// tables expected by the GSP bootloader to load it. pub(crate) fn new<'a>( @@ -213,35 +243,7 @@ pub(crate) fn new<'a>( }, size, signatures: { - let sigs_section =3D match chipset.arch() { - Architecture::Turing - if matches!(chipset, Chipset::TU116 | Chipset:= :TU117) =3D> - { - ".fwsignature_tu11x" - } - Architecture::Turing =3D> ".fwsignature_tu10x", - // GA100 uses the same firmware as Turing - Architecture::Ampere if chipset =3D=3D Chipset::GA= 100 =3D> ".fwsignature_tu10x", - Architecture::Ampere =3D> ".fwsignature_ga10x", - Architecture::Ada =3D> ".fwsignature_ad10x", - Architecture::Hopper =3D> ".fwsignature_gh10x", - Architecture::Blackwell =3D> { - // Distinguish between GB10x and GB20x series - match chipset { - // GB10x series: GB100, GB102 - Chipset::GB100 | Chipset::GB102 =3D> ".fws= ignature_gb10x", - // GB20x series: GB202, GB203, GB205, GB20= 6, GB207 - Chipset::GB202 - | Chipset::GB203 - | Chipset::GB205 - | Chipset::GB206 - | Chipset::GB207 =3D> ".fwsignature_gb20x", - // It's not possible to get here with a no= n-Blackwell chipset, but - // Rust doesn't know that. - _ =3D> return Err(ENOTSUPP), - } - } - }; + let sigs_section =3D Self::get_gsp_sigs_section(chipse= t).ok_or(ENOTSUPP)?; =20 elf::elf64_section(firmware.data(), sigs_section) .ok_or(EINVAL) --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010034.outbound.protection.outlook.com [52.101.61.34]) (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 869DC322B88; Sat, 31 Jan 2026 00:56:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820990; cv=fail; b=LqNr8vahAOMB8f3C1F2nBUw15pxBFZPdfm7loRp2Vf1xuMdwNpUuZXr1UYb/F7uECGkGkmBptObaunNdb9t3PLKa6cNxPkQEm14/yzwnGefiaQPLryAvLENcKfPEuubUVws32bIDZt+Tn+JYug10fAK3HqQtBmxRgdfyFBKdEGY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820990; c=relaxed/simple; bh=FEFGFDfJ9YoYNPR8/SXkuiyhJwgWjYI7b5T1t3ik0bg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=I30HN3X1vCfILfRlcpcknlfLU79O7ByRkKLQOve9s8paYP50vMhs8IvuxVwxKwlzwZ+Ec1k4XOP9cI/5F6d0pUIaiQeMG4Fym4inlXLa45Llmq8sIbPrImKeSGZUtqyEyFreT6Sd3RuEuGxW/Ho2fa/9acaAFjd8f24M1U2JXc4= 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=J/1t9wcu; arc=fail smtp.client-ip=52.101.61.34 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="J/1t9wcu" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=G+BTnAvNqOrRlv/5h0kCR9s1ztQ9vNW8W08jHMRsBxO0D5lF9WMeTTGjOMhZdgCly7GrVq4/yiCmc+v8nd3UJb65YB5TfTkWX7bZ2/PTkXVuK5xSHKPNkBGKEMZvIa7gATu16syBaY8D0EaD8HTWqJb9/KBBRwYoYwYay3HIZaQZZfKxo0hT3TmOjNTgkowMEoHtbxvuTpw58EWhcEVGg9ML40uJKrN8CXY4XtvzFd/+nyfUDScg7pOyf/umilVW+A5AJa9aNZYcsJ1s5kXnElSrPkYHb9XKCUtskhp60cuZ5kWPBoZXMoaLKg9S7dGpYXsAJb/pOJLySTLYYYr9hw== 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=hQXpVtZqlR63evBzLGuZjaxdghJIe0EySY8taCiUxkc=; b=SOZIiJJ1fH5xH5dehpC4POr5h/6da8YEXeaI/GCUu/ZnJfWV3nMDdgS22dZFQjS76Lb23U1AVgXado389LTBvX1OINXCf8mJBtcA2S4MGEv9kMo1zOA6y0O+xh2tmXBj2E/m+1tanin5h7NaZI1dMrwRn5lwvrit1BHBV7RqCFwmlhXGuKeVYGx6KMUDxnjKk9/uLM/ZR/xc07Q/aD9dnwHVKm0hVFfs5P5lBn/TXHscDbfseWUmr+hkNHOJMUJdQatoUw4GLcAODGOiBPcjOzKXbFLmWHmTRwXfl1y9YUMXjUSQ4szh6eKoI81pjXPzhoNHT01Bo4lJblN7Hq47VA== 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=hQXpVtZqlR63evBzLGuZjaxdghJIe0EySY8taCiUxkc=; b=J/1t9wcuw/EzbUkNKvSpN/UG7kPQ+04IXX8AkPY2KzYNrN6qKPMQiZsXuwqReR8G6Me3OLgIelAs/fzbGtZa2RuXBiXvwpeureyu3SXEi4wALpw47Ov33g130a+T0eFS8wy5H/UAehiDEqlTjwMCkzBlG25sgg5kAUNhTBxflXpjWOiRlb8JG/4eD3i972zc1lv2mTcjkcuiowsbnJsCnvsxFcgg4m/dQHYGezTJ8vZ1vsflC8MVxZ4fOuMYG0f2JtH1GR754tzRvPcwLS4QbLriou/C0AGdzPEDXY8vjafDQw0GwpOGA1iOHNQ3Q36ZOAuSlzGSUr1YpPz2bA0xYw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:15 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:15 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 05/30] gpu: nova-core: use GPU Architecture to simplify HAL selections Date: Fri, 30 Jan 2026 16:55:39 -0800 Message-ID: <20260131005604.454172-6-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR05CA0031.namprd05.prod.outlook.com (2603:10b6:a03:c0::44) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: b465f12b-cacf-42c9-43c6-08de60638960 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?1GbEVkjnaYMQeeoLHUZ89H89kTK6RqTp/M23QiEpW0rAtPSFpoFBozMms9N4?= =?us-ascii?Q?dzRwd1uBYviR+fsJBbAm0csyCehx1hVvW14hedmOHexI+rgSXJSqbsqEdMKU?= =?us-ascii?Q?e7uHBf0+13FIN6MsaCoVEo8EnIN1zwkyVEJD6UZC1X/bpiefQ4EuIS2Ptjwt?= =?us-ascii?Q?LOA3FagL3Kf9iL4e8GuV0iUtn4YPFlZqFuo5CwpE45JxUlvFlIJS1llkay9b?= =?us-ascii?Q?PewnJIntjsR/FZbrC3+FYRYg+WoN2hlmMrSfInI1Bfy/w8Zu5kfpMnyDmznd?= =?us-ascii?Q?xr63r1jT6hYdkVOMNRQFZf8A2pmT8nCRv8LNxBMc88fpoq3695hnW7RBaKt7?= =?us-ascii?Q?vLxxJLdQcrDtx0E9bRaS8k4SQCM1R+0R8LXfRZd3Wl21w47a38ObBdy1HFTt?= =?us-ascii?Q?q7YSR6o0XSP3CPVfNtePtQj4uxZvjVlGUN51Q6+vyLxI9LpXJWlfsRjxk2vC?= =?us-ascii?Q?XM5Mj9V5U89TU8HWSTLL/Az2YegdWVk1HMSo/bj2xWMVGOTHIri+YYLTy3j9?= =?us-ascii?Q?EcgHRTRt9NRi/lKSY1+jM5JwLCVnuPzuMkNqwqH1FV9+y8eXXn9P8FGvxU9m?= =?us-ascii?Q?N2DYuqzbWovEbEZnX8pgM0X7/ttChZP1JzIa3p3EsR72SJpKcsgv6N7CTVdH?= =?us-ascii?Q?Kr8EX8sjGZgP41+42b7+SuSkhR0WqWE+/6Q9zvd+tq/HZUBJZ0L3Ees5KoPz?= =?us-ascii?Q?0JkEe6RgvwBRR9V22x/xYad1vlKLaTKCaPzg4qKoTlvILpEnuiTXebyyrjOR?= =?us-ascii?Q?3V9bPymesZ/k4JliWeH5upSv0UhJNLtuEbUgkA6t+ofoJCL4MSjhxEfF8XPz?= =?us-ascii?Q?uQ2NzfxkVOYZh7T3h2u8AA3biNSoenfYIxMm+4J1IxNGv/20u4mov6KP6lkg?= =?us-ascii?Q?+b1fzFb0EQhp+97ZWD8Wax3aHNEEmK9xX7owm5uNcdNNdR3DgBpMybsEjhwb?= =?us-ascii?Q?vU2RIvOgtRDMmKckUg26+N3zZPqNPIAxzSw9jueAxoWa+CHiue95ZggpWqCw?= =?us-ascii?Q?r2ar4T5fw3KS7JWww3eLueRNKYzrOmv70aE6lmVqVGI1GtAFgBVD1TnAHWCh?= =?us-ascii?Q?O72lFbYABv1RcrYgX9hvPWCPC8rJK6aukFNtKT7X8kskHV0W2DCYks3JLfKg?= =?us-ascii?Q?0ZfalIKHvMFjVEX6WJimIrkH0gZKcb1VUOPXkxfTYRYbi/s8rSuVAf1Cvl36?= =?us-ascii?Q?wCWZS/wg5Xy38F661mdw19SKACH2sZRD7Uv1Ph6fVIAVM9yJ62HKQ42BC5b2?= =?us-ascii?Q?+MyOLF4kUH4xJ1zunlNYfOkfkx9WwKEnEXjwTWCoXwKMRjF3UMjZ6fOtVpJD?= =?us-ascii?Q?Mm3HKiKLXvTDFC7W/cphy6w/pjTWRxVMVxZgWGi5LInqDK9aqCk8BGDyNJXZ?= =?us-ascii?Q?4rvbO31Vn1aZllrplWAeDAPFp1QPw6PZcWwIaLpxfrnXJeFajmC0zu3gklL8?= =?us-ascii?Q?RzQOJ6jCA9/bYq/q5Fyuyp5FoR/LYtS6Jxz4KtHIMF+z9gDYQvjKASaQArfV?= =?us-ascii?Q?X9yfxDQvNYt/Fsv4zKeFY0dalW9Xj/yI21YJDB+igOIqn+pDHdjpXfQkLjoQ?= =?us-ascii?Q?mIzBu03Vmu1l5nVhFVM=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?OLkBzfTO2CU3CMRCcARSNxfuRBUsSPjRaj6Mr3wRrvZ6gTAYOLtv/OEoUlTF?= =?us-ascii?Q?SMJXVkvAU7JJ9rK5so+WHJrWg+CWtwfad1DxxPhEa8RnCBIs2sFQVn1xayy4?= =?us-ascii?Q?b4p1ZOl7NRgAmlLYxygoOUzhv+r6tb+LTiRXXkQM4MFVBlG9f0tJXASU/l8Q?= =?us-ascii?Q?odxzRazQXtfBqd6ahcqmk8I/JxNEQch1sEbpQeRQKjhFNUPg5ij0B57p+L3o?= =?us-ascii?Q?WtJm3XLyS6B1vL01XXqTPyqNXreFxRDpyri+Eubtsd4Yx6WTWIjoov4qCarI?= =?us-ascii?Q?T1a6EthROtx2EoneXp3thgLs8hVX4+V1R74HxW+H5POnrOnQdOPLdtm0fosj?= =?us-ascii?Q?Wwr1m+aoVmKKHzcyeVKppT1ZHyPOrOZyMiM1t1UMZ6+AcDmM/DJsDEyS+QUY?= =?us-ascii?Q?iNLfPgmC9NWMsI+RSRx/oZ8qX2eUk7NuoOtlwcJTlQbx58X3n5NxQ27en7jd?= =?us-ascii?Q?v6ANxx35coZE9BCKE0F47X7uUrFwFHutz/Z5Yu99Nu4l17C3Etsc4ZlZxhHN?= =?us-ascii?Q?bvNHrbws+tahnqa0lyeQO3ni5u5N8UQuKhxDIJ3Ai3+2g1vP3UxBAJ9JXA1D?= =?us-ascii?Q?+dqC7jBJM7sQM8LXhnhWSzWKVZhUn6oa4IrWLwcvmrWNsMG43jQcDpGTIYp8?= =?us-ascii?Q?if6yBq+q81heXnAXd6QMWflwDT52Xo0P5Hfcdx9gZ239gNBJfMFyVRRxAneM?= =?us-ascii?Q?SupU7UTYBz0Bks04uleo1MuRejOa7KFLbaG8XnZyCy4YZdvegXK77SLpUPXf?= =?us-ascii?Q?soT0sdKZwdnQ9zUhvNVftnKs3MHodxccTif8mCvZoPEtg/GshN8wfP8rYYym?= =?us-ascii?Q?v3sWYaOQmYz+2oRiFwxlR3rKRyUGS7Gmno84whDDxe2o45s4cRugUdGrNJo7?= =?us-ascii?Q?VdlXU/HCf/zYjY0S42sNBjgA+nhe3g4ew8YXRhSX6p16TfeiihIHnmjzVkha?= =?us-ascii?Q?nguo4+GXVn6ih59M6MREXeINlmivwXP7AoFCI8+g5xlkApGDyqpTfmOr2jX6?= =?us-ascii?Q?pK2tbNQeuDVPR65tYCu/xIcRk2RF1YSRAwy9AxtMIGldS+n5K1RXfZGxKUGN?= =?us-ascii?Q?80QNeTx41u8h5JFkpD7Fr/uZCwMA/fUZEE+xfNxBe7CgGFHoBPOFntnnxWEC?= =?us-ascii?Q?7ILevDpexjMcJ7C7ODlAl3daNmyn06xjlCCAGpXEHi/YyU9ixODS7hd0w6hI?= =?us-ascii?Q?H1s0q6xC1wOnpSVGcqX7D6wf7+XLLkuGkdfZL9kzLzD2hn5ijB0sQTxOvg8M?= =?us-ascii?Q?mtYGOQuhlXqTyh7agpkTUDg4+e1ddh9596WMIy437dpdJJoWMA22+NHq0kRt?= =?us-ascii?Q?waOkyEroTxbAFInzpTX3W9xgXFdrNx0xTb1DYvGua5b5WAhzExqZ3+1ghqML?= =?us-ascii?Q?dPmf0GUVBWua6Qkk+ioLhNEWXXV7t0WCcfJl3MKC+sOXcsP5Xbs36jA6LKjF?= =?us-ascii?Q?qJnHg9A6uhj4ueOesIJ1K/uNnInrAguxmTB5/YvtssTqJ2g/n9qbX0t/csIT?= =?us-ascii?Q?mLuJ3QLGf4bdh5kbRj50LLfnm9UVtHVwYHeBvUcB52grOGOxtiNmePXBMLdi?= =?us-ascii?Q?Ybr+IXn+sSSxgIjRTcqF/jkWtc5JTogMyffMhtpOdlhLiaO1Idr3f9TQTIdf?= =?us-ascii?Q?At9vRXFh1NTIGbv3o8d9HWaKf7t9Mexf0Uyk0sXuhKdvlQnIdPqDAU5gQv0h?= =?us-ascii?Q?t3TMaZu5ZS1ZjwjinHo/E5Lrd3CcHQV0TBBCxvsvVZ5s8occYw+wWMdfLVax?= =?us-ascii?Q?oV3XbmKvUw=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b465f12b-cacf-42c9-43c6-08de60638960 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:15.7334 (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: KgmX9wv2J0O+GwN+B6Uiqel5MbUbYCK14HLQJUasws+YMZZZ9yWyYUgxpiSXob2ZmvGhry6DJLD6LQFmHsenXw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Instead of long, exhaustive lists of GPUs ("Chipsets"), use entire GPU Architectures, such as "Blackwell" or "Turing", to make HAL choices. Note: Left a // TODO for GA100, hinting at the remaining work in order to bring up that chipset. A tiny side effect: moved a "use" statement out of function scope, in each file, up to the top of the file, as per Rust for Linux conventions. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/falcon/hal.rs | 21 +++++++++++++-------- drivers/gpu/nova-core/fb/hal.rs | 17 +++++++++-------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/nova-core/falcon/hal.rs b/drivers/gpu/nova-core/fa= lcon/hal.rs index 444c95fd4ece..edf4d27d54f7 100644 --- a/drivers/gpu/nova-core/falcon/hal.rs +++ b/drivers/gpu/nova-core/falcon/hal.rs @@ -9,7 +9,10 @@ FalconBromParams, FalconEngine, // }, - gpu::Chipset, + gpu::{ + Architecture, + Chipset, // + }, }; =20 mod ga102; @@ -70,17 +73,19 @@ fn signature_reg_fuse_version( pub(super) fn falcon_hal( chipset: Chipset, ) -> Result>> { - use Chipset::*; - - let hal =3D match chipset { - TU102 | TU104 | TU106 | TU116 | TU117 =3D> { + let hal =3D match chipset.arch() { + Architecture::Turing =3D> { KBox::new(tu102::Tu102::::new(), GFP_KERNEL)? as KBox> } - GA102 | GA103 | GA104 | GA106 | GA107 | AD102 | AD103 | AD104 | AD= 106 | AD107 | GH100 - | GB100 | GB102 | GB202 | GB203 | GB205 | GB206 | GB207 =3D> { + // TODO: support GA100. Its boot sequence is a lot like Turing, ex= cept that it handles the + // FRTS steps differently (specifically, it skips FWSEC-FRTS). + Architecture::Ampere if chipset =3D=3D Chipset::GA100 =3D> return = Err(ENOTSUPP), + Architecture::Ampere + | Architecture::Hopper + | Architecture::Ada + | Architecture::Blackwell =3D> { KBox::new(ga102::Ga102::::new(), GFP_KERNEL)? as KBox> } - _ =3D> return Err(ENOTSUPP), }; =20 Ok(hal) diff --git a/drivers/gpu/nova-core/fb/hal.rs b/drivers/gpu/nova-core/fb/hal= .rs index 71fa92d1b709..d795ef7ee65d 100644 --- a/drivers/gpu/nova-core/fb/hal.rs +++ b/drivers/gpu/nova-core/fb/hal.rs @@ -4,7 +4,10 @@ =20 use crate::{ driver::Bar0, - gpu::Chipset, // + gpu::{ + Architecture, + Chipset, // + }, }; =20 mod ga100; @@ -29,12 +32,10 @@ pub(crate) trait FbHal { =20 /// Returns the HAL corresponding to `chipset`. pub(super) fn fb_hal(chipset: Chipset) -> &'static dyn FbHal { - use Chipset::*; - - match chipset { - TU102 | TU104 | TU106 | TU117 | TU116 =3D> tu102::TU102_HAL, - GA100 =3D> ga100::GA100_HAL, - GA102 | GA103 | GA104 | GA106 | GA107 | GH100 | AD102 | AD103 | AD= 104 | AD106 | AD107 - | GB100 | GB102 | GB202 | GB203 | GB205 | GB206 | GB207 =3D> ga102= ::GA102_HAL, + match chipset.arch() { + Architecture::Turing =3D> tu102::TU102_HAL, + Architecture::Ampere if chipset =3D=3D Chipset::GA100 =3D> ga100::= GA100_HAL, + Architecture::Ampere =3D> ga102::GA102_HAL, + Architecture::Hopper | Architecture::Ada | Architecture::Blackwell= =3D> ga102::GA102_HAL, } } --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012046.outbound.protection.outlook.com [40.107.209.46]) (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 2D130325709; Sat, 31 Jan 2026 00:56:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820986; cv=fail; b=gTT0fx2afWOj7UkOlQplobDcKmpSh2wTL7IZ0nlaHket3m7XSQO3ZpMoc6GGCib7aNAd6PRE2kftvv7+NdCkrLMjR3w2uDqbOCD8w8fpqW30kK4StaZDPjA3X3Qn33OSXaYMP4Vt6T6l7cossIJQr63X1mn/xvE9IMnDyOf245Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820986; c=relaxed/simple; bh=dMEBiHWrx+tuJvjLIEc9uczrl7lT/gAcKaYX2HAaXoQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=NrBhf1GD+5KsleWSPUlgxO5xP0Ff93ZkxVM2XjzQLekLG7qAQviNHFmxcUAIc9lciUQtBVSSvcD65pSKqeYkM4+5ufsAnqaGGN0436UbBJwZEimbAeWMO7A+ptOjMxkLEfdBlu5eZH1qn29yZF9h0cjEX21tSUZMtpy49TS7cqo= 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=hj6ewm1Q; arc=fail smtp.client-ip=40.107.209.46 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="hj6ewm1Q" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MAzeV0Sypzk2wcZWkSf1KRpdaRxHigVSvajq5AcxY2/nJ/E9kGC/5qn3m5ZG6ELiJgLZLgaRtxw3RAVLhueR+KuwZ8fZzASO8pIz1wD5pPq0tUyC2Ilt+GZwD8GON5OgPoFh/kIEzD1iXq79V/+O6d2SzBxmjmiiwwl801gMlYR2hPZ0PXcJZvEmtwMKn8X5ANj5YLoTyJg/12o1fz1bcbbxu8U6t6hW7LmIXGao5FYFW7hx4wilesdi23/5B9gb99oeQ4Hnj0u4YSO5vQ3u2QurjTEKYJmrXVhlVMLKMbCP0CAc3A004oXN2MNIpabx2JXxQOqJy4/Gs2us9mbWxA== 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=0Vrl8HwKHOnJsjheZQjsR/KZHMdpoj4LAuzuKNmlMH4=; b=yY6W+Nv7FmCsFdfYK855RWikekZVo8RR51Etk0k6UwreSui/z5GkBm/DDcrmJQ9XkYCoOgfuJs1etmLoOKn2sZCq0/91NWf/GUzN5mG/7OlY14xRkGY/Mb2NtZydH3QUh81AQHm01tbkyNwYR1UmCvKAYPpW4ZZaBfBjRFkKXA5MH9+xAFzxTxTD45r/f5+tp/oS1RZKOqDrTn9lbZE29hYKB5jzYruvTnsntcPIaTUBg4sUNAiJG7vNttU7LqjY7w0uog/fBf7LaKTXS8Nzrg6dkJr4baz5TpYjwlgh/UAiGylF2p1pVLaIiFJYouL/tXjK8Du1+dIvoZvgXhGfmQ== 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=0Vrl8HwKHOnJsjheZQjsR/KZHMdpoj4LAuzuKNmlMH4=; b=hj6ewm1QwlhtyJyGHIowQAHAbRqdywWPGCRRJPLis8mM3NA3imai6UdV12Oy3iooDnEVC7P4rMNg/rnnqcTdeyH1qnTOliIJJiV1nyU4VDGaOZZD0UUYy0Lyuk9gaZubIDtualpEzu/c2tkH5RuvO+vaueF6or76eI76coW/HC2epnear/1Tn4M8NX7dZ+xzhoWEwGxyf/Y3HGk5A1qstJGj4IM4ss2PDwbJliQnFmPnEoyDCLs2mq1N+ld1rGIrJtgjBHjX/oXqpHsFFwN4jAFKdr6RCC5psUUrHZvLpM9iJzRIJ0XA/B4xRB91u+bKh8Bmub4olJvB791IFGwCQg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:17 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:17 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 06/30] gpu: nova-core: apply the one "use" item per line policy to commands.rs Date: Fri, 30 Jan 2026 16:55:40 -0800 Message-ID: <20260131005604.454172-7-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR05CA0037.namprd05.prod.outlook.com (2603:10b6:a03:33f::12) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: d184c5ee-31e0-4387-7d2f-08de60638a39 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?XS+NpFUvbIr1NqDmWW+cWzY7QS91l3bR20bQ+CRTnamUQh28kSSiQeZDZXZ5?= =?us-ascii?Q?/lb9Ah1x2+F2/MpID1iVpSE28yuDmY4Q6lOMj5bYmD3HnhYr4hXoorOODBWx?= =?us-ascii?Q?QgY+6+eZA3PyHQ9rGKP6Ddh5/xedLLfA1yp2Keo4loDcM1OT+mYxa9pnGAwQ?= =?us-ascii?Q?t5sG7aQR64sHRy3k63Rube8NJZbycQ5Sp4Ydw0sUpjZ33UMfG+WNT8+p21Dd?= =?us-ascii?Q?Ddx5BgvnXf3T6K9anhkF1PPsshuP1IjunwATkTzizIObBPSOleZCC656FRSG?= =?us-ascii?Q?ht3OE2CF8CkeB9BPQNTohNzcXnZzrR1JRg1nNiZmcTM0FHN2RNXJpnST3jOm?= =?us-ascii?Q?ar2nTb9s2FSdk+cvHNR/+dAstuRaTOKd5h4tyxQ/lMoYrUzaGlZGGdP+VdlA?= =?us-ascii?Q?0IZqZhfpFzS2JqPrpD8enug2u7BRcgJlI5ob1ltfzpsz+XS+Gmx4BLXfbJE1?= =?us-ascii?Q?KFQI/PzSPoFOWncPL0GtGRpFi9PYmbdNHMWc7hNrd98L/0dMnK2FzzWk6nMW?= =?us-ascii?Q?Z6BXjZ+1zaDRFDs3lgPreBTfEhVP0JbmxBNBLi5Ol4ts1DQO3lbfzLhSFR/H?= =?us-ascii?Q?FCgyJbsnv24scqH8zF1cisU2UZVVgs7kDaBBNZ5zYB6xHhPrKO9WGs3kz10R?= =?us-ascii?Q?4YMvRfvcGP0FHT0UoNnICqOy9QxjFft2bHt7tlfxSeR9I6K7fnyveDcMk+Gn?= =?us-ascii?Q?1vD3tQZCElKKHrn/Yv7p0xMuj/ue137+gTw+19Oux+BIVqP3A0CfUT0oyOc1?= =?us-ascii?Q?/gtsofHZa7jz4zK1GEHd/jF76+QZY2OFXUePeGclObH/wOySmu7IUT3wx3Zd?= =?us-ascii?Q?hMILPWyzLfvjZ06eQvmKfwzvz/paEn8FJv12Gf3/mrECQB3t4hQI6pWVL7wx?= =?us-ascii?Q?EZCXEIw/38fUD8rr+MurNaxmt6wK+wWpc1JP6aX4R40uh1WBEh403bSnjOKS?= =?us-ascii?Q?vBqcj+H34umRRarJcd7/P8ZvBljAv04Ogkq5PHh4YdIp9+9SSzSUL8HGidUv?= =?us-ascii?Q?30D3xaEUZLz6dBsCMexDctIe4OkrBH42cCYyBPts9vmFbUSmG+cBwCS8kGRc?= =?us-ascii?Q?5+nXhVG7kVH5OXmPIndOYE1W4ytbLTF2esWSv6rrSmetZoVu5o+FDtpvggKE?= =?us-ascii?Q?0qvFp/fdAf+Ot7w+XzVv5QAii/JItinc+0jNm2UqPlOPuOEzvhDhTZN01aD1?= =?us-ascii?Q?T5G3waBnHpSNSPH/fzq87qv4lVKDgvLfmAQ7M6wmo/Jp3aste6fCuFzZrRXR?= =?us-ascii?Q?yWppW4JZhvI+XAYD2N2kxSWTR0KTqmNmZGpEbyLe5+Y1H7LQ8Q/hS4CW4qsd?= =?us-ascii?Q?5XSQ2BkQI87eucJb+V0pvfIigvwVcU9U2VztPSh/H72DsdpeyL1a034DmR9d?= =?us-ascii?Q?BnRMldbxkZgnzmbvT5z0t0TmOW/iXRCZt1RMTZKdttwaTDLgepcCsQY6PoDE?= =?us-ascii?Q?o8V4E6ibE1ysS67WmioKMcqygrpavnRl2Xw8cvqYZvweg5cwlkdbjE5XQKAh?= =?us-ascii?Q?BChhMSzucnT9FCyT97uRXXCSB5NK1o8fooQI90AtdH7cCqvku7GMsNs+4Z13?= =?us-ascii?Q?FDIQCzROBJhm3oMRSXI=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?fd3fKvLnGC9971ktgGJYyD+stjc7DAoOjM7UP3gCPJClVfy35oFaVXZgoqng?= =?us-ascii?Q?4VpsEMYbqIt2v+64uiUpcLXRBlcR/X77+wgXLFlSqkVknWxk7KCpVGsRd7r/?= =?us-ascii?Q?S35iE9tfBDz89IlJLdJMxgxqTczp2pjjoDQR7TuhpT+KtBB0G3+B+aylsco6?= =?us-ascii?Q?aImy5mrxg48bdQb8D6fCBbrRH4ss0Yjst/duHHYa5E92df4anMAK2QaVZy9h?= =?us-ascii?Q?CrEmqp9ua4maRFnvLmZcpSZyUxEX8wvMuBrHdUJ59ykcShE0UoF0ar1lFALE?= =?us-ascii?Q?THoiC+wdiAo1UwJTZeR5VJ37phC1X8yq9Y3Be6F0yg+4UDuheVTzmP2bsDbE?= =?us-ascii?Q?FU1vKXhM+thLGEvMjucieoJWV8gxX9gFpflcY96SK8yf1P+S7tQg2LuGBkKv?= =?us-ascii?Q?geKeGlREzHaN5+s72gFYp8R7lRrHjdfU0u5J9mV1GHsENWQ1Sj2E7uGE3UCQ?= =?us-ascii?Q?O8f05vwQspdUx8xkrk5gVQkUWPAPhmv6UV7yqmVxi5YeNm7i5TIvw1hx51/e?= =?us-ascii?Q?T2lbf0XsjEaD+QLNr6DOOe5CS49yYqaa2Ab86tG1XoeMTuhYjDP/3wEfet+M?= =?us-ascii?Q?MILvxoLhZpK5wJiBT1npLTmeJGwmjpr+fw2qTDz+wPu2KpegAq7gELS+CzJj?= =?us-ascii?Q?PD3zXCJYj5Wii6hylk22+LxOgWkKxclIrJ9LusigOtG4KyTtL3o6xb7mof23?= =?us-ascii?Q?APp6IKBGlVEeOvu8WM4cYVTkKyiYjoymzSC4SIRHzS1EEswgA9oUT7C1+QLo?= =?us-ascii?Q?nAij+hpVcjTC6MaL3n5mZSz4dqp+M+URLtzdSpkED774XgAumyOycpua3o0I?= =?us-ascii?Q?md6SKicJslHV85DzNY+qt+u3jsXQUM3ZVpvqPyMBHr5c63not4Chl6CChKlh?= =?us-ascii?Q?ghGsH/QZLyNydspvU8n5dxw2xZgFKg6wqahP4Oq8ZOUJWaKyyjf1rUsqQd06?= =?us-ascii?Q?ymW/Jd8GjrFaKs+J2FB8BsPwNIEVIdOPBvoFrhrpVBv3GtuNBYXzqmtg4+WD?= =?us-ascii?Q?91voN82wIczPjFLxkeO/pbvgldmc0P6PJsqgnbmWqg1tRm30JhfVOnV3ydvT?= =?us-ascii?Q?WblPPZ3U0y7tMDjvg3Pr5k42QdRXcq4cFdUgpqIH5txMR2dYPtFid2Chi9ig?= =?us-ascii?Q?jl93FLgqwLgZm4VRh6cYCjqi9nv5IHnjNyjCXznHxLgkzZVQd/qNJtibO0Gt?= =?us-ascii?Q?BZw4WbC8eCfzc0tciWONLwYvMPocCCXx4dgZRTkaAEVU0bvah30ho/mZn5Be?= =?us-ascii?Q?RGhKaRqwFBkms25HgaNg+dlTPIDwVlmSc6FT8gdPNrf91mBN27ZK0gtLI42y?= =?us-ascii?Q?g2Q7vhQ5Nd3dQICVHaysQ+CgodfhnQsjJqkCr4My5S31trVYFE9VM7rg5+/3?= =?us-ascii?Q?Q8zm0gDitcUG7zbB2xMkQ3NXwSwNxkgP7+yP22qoTqPuWZUgLPYgciEOJBwS?= =?us-ascii?Q?lLbFl18oZ9cGW45AIt3sHvmnrkOv57vZ+oL5wVzC065MTEgG3+KTeSi1DNze?= =?us-ascii?Q?5T5IUDCx2fQ7MWtsmG0PN5uCN5tTqloRqGfBsB7mWXIS08RMq5UlUAsDupao?= =?us-ascii?Q?osEKonZ5PSMDEphcdzz9iuQjpuHiNvxwD6hfuLG88v50UIWS+A0iN1ApkUVS?= =?us-ascii?Q?q1KybMZi10DQBWhjYDJkiDkgV7kVTTTdwED6rT80UOjScnsCTBLspL0xmSO0?= =?us-ascii?Q?Jf1oi41MUw0hEX5j3XFbP7oHVA/RyFnW19owbqdUMh7ak9OZXhWWs1HYziyl?= =?us-ascii?Q?AsTrN9BulQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d184c5ee-31e0-4387-7d2f-08de60638a39 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:17.1845 (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: 1o6xhHhg4/pckCF4rd6PqCjh66AnEphZVHcQ/sUNbsOut/Tx+5RF+AHAzWjHe0iHehjtwQdv7iwNbM02JG2mpg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" As per [1], we need one "use" item per line, in order to reduce merge conflicts. Furthermore, we need a trailing ", //" in order to tell rustfmt(1) to leave it alone. This does that for commands.rs, which is the only file in nova-core that has any remaining instances of the old style. [1] https://docs.kernel.org/rust/coding-guidelines.html#imports Reviewed-by: Gary Guo Signed-off-by: John Hubbard --- drivers/gpu/nova-core/gsp/fw/commands.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/fw/commands.rs b/drivers/gpu/nova-co= re/gsp/fw/commands.rs index 21be44199693..470d8edb62ff 100644 --- a/drivers/gpu/nova-core/gsp/fw/commands.rs +++ b/drivers/gpu/nova-core/gsp/fw/commands.rs @@ -1,8 +1,14 @@ // SPDX-License-Identifier: GPL-2.0 =20 -use kernel::prelude::*; -use kernel::transmute::{AsBytes, FromBytes}; -use kernel::{device, pci}; +use kernel::{ + device, + pci, + prelude::*, + transmute::{ + AsBytes, + FromBytes, // + }, // +}; =20 use crate::gsp::GSP_PAGE_SIZE; =20 --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012046.outbound.protection.outlook.com [40.107.209.46]) (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 D1CBD32548D; Sat, 31 Jan 2026 00:56:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820988; cv=fail; b=ZRFR6eHqvgayZbwOuKJpAsNVKmfX1onxcf67VyvINGUhsfnP5hqSDnsM2CaE27bmrv0pb6/m5D2L254E+xvs4m2CBxWvlQwTlGVFdAfKAN8gU54cLajgd+h7MFk0S9+WrfTKY/1tu+5IB+vqUMK1yb0r68plED5BHRWwP2hTmz4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820988; c=relaxed/simple; bh=5ay4vU8PodYYM47de0nplviLkLk2Yc5l7y5IfSCJWs4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=eGZfw+srvpvAbTuqdTnOSKI1ol3sojtxXN0lcBlv3zwrwSd9/EonDzDBwvhgswlImYZuayAWPahnB/n8bUD8asv2meWSeu0SO1N1a2EssRfhtd4NofvPDmAY1JFkwbcA4RIb48RdDVz4IAGGk57ILkr4/99e9VWqKVvB97Mjynw= 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=fo9HHGnw; arc=fail smtp.client-ip=40.107.209.46 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="fo9HHGnw" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=llYwJg8t+szI8B8K4Wt7BIKVM6PSubzgaYds6Twho3vLYdlo9iUQ8kE7Ve2MQiQ9xDAbLQkq6LZvf7zgZ4MvnqHCua75ESOf82kwjPyxjDjoAOV2oPTUU8o5qXj4zT9o7R49Ai5isKrPhsJqlK1vRweRiVly/cg0FV00wtQmV3lIUCbl34hp/P/a3ufrQaR0FMI1sCbrvwbtpcXLa33JqskBjR+RY117T06PVODoZLf907EAMVG4Wod8LWgGpCt3aYoSjWVYfhBqTUqtPAD+f9S3wncwdkJ+UwJcWgjn7r1eEVyoUgzKlFsyp0T1QebDfb2KJ9GTtUYY8OvNd7SuZQ== 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=fnjYf/QaTaYXrnv+Ep5g17YALTNIV1XRUZLCwPs2nms=; b=ly8T1GZeTyalgtZqfTQuC5LzF1edBv9e5srAgJ7Rs5VXCM0S+C9GMiQFryu9Hs5QS259DzMQxFJl8C8usd9+usMSMwgrI3XSclf2MPb4CQ2tueXZEOSr6eykHGFAEtdv7EXc95q16LLg1rpUhiyxHUXXsQYgaB4323YpN7JpYA+ytZOCNEQflxj6AWviYJfaixyqlp2QnX3q8cXyhG85qAYCRvZzhyXw0gFgIaNl3i9YS8L/Mz8cfD8qtT8m+QBe5yDKZ1XFoK5kpOqXDIhWCN/WNdwWI+7Q/E6XHfPbbW6MTDHZA0Ug3ChDQ8Tdl4fFzMJxq7C1CYf8ceE7rtmTAg== 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=fnjYf/QaTaYXrnv+Ep5g17YALTNIV1XRUZLCwPs2nms=; b=fo9HHGnw29Ny/V8SwNXiF+MqZFHJV7xkdNBU0K0x8IRhGzVWUU/PiXirNpjSv5YK3wtJ+pNWTHf0iyaqv6cFKAGQmGfLBk+GfeLMjUsMfIe9QUlpTQ1YvzkiA3Pm+ysd85lNZ/k+lTGpRkD11YzFO1BHPoVk760jQquktBMMFZMlyZfIMpKtFU8nGl7DgGsLpI1BFZOtd/Tt5KcxAVP6kxXmWxFs96/0DzxqBmNTbgOR2Tqt0P75c5n3LYpYIk8zxYKQVoEHoOTlvxx4cJFBy6Ep7F/tJ9t6oH1BO+Z9XENPA2yEgBBv4tYJVe5VAINAJreL1KenPOtgzqvCxWCkXA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:18 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:18 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 07/30] gpu: nova-core: set DMA mask width based on GPU architecture Date: Fri, 30 Jan 2026 16:55:41 -0800 Message-ID: <20260131005604.454172-8-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR05CA0028.namprd05.prod.outlook.com (2603:10b6:a03:c0::41) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 7b451061-c224-4c14-6501-08de60638af8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?7sV535rzZdvCl/LMIYIfDKVWRmpUYzfoNdy0/ShSWub9rwT1T64+fw+fBzSs?= =?us-ascii?Q?BqRjaPjU0OVb5JTUSCfwPvZn+OPT6wLyFAJgRrM8/0xvPs1Q3JR5Lcx1HPVq?= =?us-ascii?Q?vPH6VTgU7D7zVIb/2ZYyPAirOXNBBYh41olAzAy7EBWIXAF5pxge3d2UwJty?= =?us-ascii?Q?8UI3p6lgZbX9RgSFLgZFACNCi9t8YM95TEsO2pRpOVfHiIloEDAP5+hdz55Y?= =?us-ascii?Q?gR1fcATc2nw84kQOa105sePiFtMSBSBwZCmgeWmf2BDSowY9EZjTSGM4Yg81?= =?us-ascii?Q?Qz5gmgz/keQsj0SGXensBPxExqmy4f7qhUzGigXzFjqzQga80AArf1KGp7v+?= =?us-ascii?Q?GYZOqxW0PADtXNXq9Zf9jkvLxXi0HuPK47jnZggTsopNvBXTn3mKsUPCbdaM?= =?us-ascii?Q?dQwMHE9J5MunUjgw+H0j/eaGaeKQYeWAsETlg6Zl9DNV2Dt7eec2zHwmI/Hn?= =?us-ascii?Q?RuH1GJNb15Bb80bUgUH+Apj1pXPbAPFJE4qH9WOnbNhTnqa1F1TueF4EltD/?= =?us-ascii?Q?Gj9POCZXb4X3C9a2IYzcAPJ2dB3HJVNX2B4CgF3Pw+Ybl71OJnf3RGUTUust?= =?us-ascii?Q?gOZ18iCM/kaXRUoYNN3Zlw6ZIn905BEFZmoo0Fq0stfnM7bC6A8xZv94y8xT?= =?us-ascii?Q?lSm3ilpcj9E5NGlNWU/9pTVSMWh8AnaEqSgrDYBNQOCv9blobEdsP4gz3KjJ?= =?us-ascii?Q?SpsGK/WTGPjUD4rA/YVW8Mlezb2gh+fRfdqAoNnI3X4KMIpwW4GQnsUAd+xK?= =?us-ascii?Q?EKHiLNSJF+YTzeeXd5O/SnfU1oZ3LMsMXnMnklvLgu8gY8ZEc2c84O14zO6+?= =?us-ascii?Q?xyFKBppiQlvQSHlqjc85pWmIiXWsnncgnLsuHVVaFi1GbIZMK4zvz/ROYZLG?= =?us-ascii?Q?RVYzeTooCp0kKdwz8LvnZsMUYbJPtuKv2OqIt47t8REZz8OqccBwwplqZhcN?= =?us-ascii?Q?XeY/piIb7wF2JVNWga8WMGZBHSPBzK1IVtOGPNXeHc+jLWEu2CK/3vQZl4Bv?= =?us-ascii?Q?W/izOT8ys8OcXF32MJq6gAfh49TL+RvTvo8Zl+lVVEFrIlJQv3eKcxb1WdcC?= =?us-ascii?Q?HDhoaVqe7hS+1+h61KoYM02rDpC9m7botGOoZ0CRy6AbZcSM7c5uJy8Jmt0e?= =?us-ascii?Q?wUYHKnWGx2WiyXkiS9c9mQpeiG1ThqM7y60tPXXc9mlNCS2et+9vcdZCZD7p?= =?us-ascii?Q?rIYyLz/i8M1IawOKs3QB/t3YMyWG/AM6YFLZ00RwneCFADwmOFYgzYTJGosv?= =?us-ascii?Q?1Mvy6so2lqWS4HyESphqYmND2uRzNhlw45a3ebJ4CxLGqyNMy1uhH0xzjX24?= =?us-ascii?Q?Cd476fymIodXKSRxx2+iVFJlXP93Z1OCdQR1zW+OBp/QVWIrW+zRZ51uXLJ3?= =?us-ascii?Q?OSZWq/7rt3/tcL8tb2z2OZidHk8rNugTYYthbuZz+xpolBPYuC/iBCN6Ccj5?= =?us-ascii?Q?7EO76fwwbVCTHkZrqJapB9zPukd1hUkOrYzpGKrjg9av96wQfWNugJL1cpCx?= =?us-ascii?Q?lhgRN4nn3J3YkF2xaELGMZLwbFizTdmLradz6st4QsHQekKMtlbt0CDOSzuk?= =?us-ascii?Q?ktV7U8N+odj9lbdxrFA=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?CmSteFkB+s00iL3b3aolnZXDXcDI/5V5xZ1QaBXsfhG8wyzX4zcXG0I1Ad6c?= =?us-ascii?Q?y0URet9yJ+LuSKGSlPOfnWL8j+ha+8GHeg9LGLdHslHKlLk9jtOM8z+n3TUk?= =?us-ascii?Q?f0gf1xVj4BqqJYH6xUiMHgzFQMRKSyGa227z4mMh9axMQJtt4IfVDsosgXJn?= =?us-ascii?Q?LjkLnJLELYJ87ZbLn0owc+pFTI9nh8eWc68p502/WsaZf8/Qng1P5mB0UVrQ?= =?us-ascii?Q?ZavKQOqdCesAYKcPS4xn34qiD4nszffEhnHXoUMC5FhHaSG7t/PP9UH925mI?= =?us-ascii?Q?eSPbfSbUJzvMtldUYm1BR9WWYZbpf5rawaYfOTVfVzSDY4HksCwNWZZCZJYb?= =?us-ascii?Q?Q52T4+CgRAdbRFJ5wivquZCdyOjUfZ1QwjB0vabo2FJYNPkM5vnivExuImmX?= =?us-ascii?Q?kO2W0Xawl0DJ87QDhad9jkH8z1BlEBCKRO6DPd7sH0nRF7IkoPDPg2tWc4Yu?= =?us-ascii?Q?9p9wC8u8kqarDQrY/YzHdCha+wayUSRed0qK/BvBw76SMYXSbrDocyUuTVhU?= =?us-ascii?Q?QNTLVfDuRnPDwYYjmK+MlmQiGf5RDooPSuIkmGZGX7jSQxUi1SpJSmxo72GG?= =?us-ascii?Q?NVRl7BVzKmZOvsJXzt2jqWFBlNIh0+Pe+HNH/6XEtKlC+OGnjvu/ETtUSf2S?= =?us-ascii?Q?W3vx3LQl9dPhCQKHDqpKGP2XYT+L1s3Bl6GxHZ31dDd3ewk7/zeXAIx4aNQo?= =?us-ascii?Q?gc4x7BkMOQhZjp3Abbxi7l3ZtEL2KLNORGTUdFr8dMzFvjwTC2ugxJWK4hBM?= =?us-ascii?Q?pox2gnqxjfcUNXPD2WxKkvD2+a9t0AdGKOSzFivwhxrO5dekMmNoDJwsCOn1?= =?us-ascii?Q?Icc4ylugj8GjFBNkZOyhnRG15MyJ55WBOzDI4+fMf18t95OaTaYdqYxRLvCM?= =?us-ascii?Q?DYMYynBZgCfxTkKURszEzXB0/Pi03cYwWEHJSXgrq+pbcRgIKZbW7fPwX4jT?= =?us-ascii?Q?uLADE7B1aKZZ2Istej7nEzpdN7bFU0RFk3nFlU/2IE1f3z/+gAmFTcSTZX4H?= =?us-ascii?Q?03cX9JIBJNHb6vxqOMIU8+MX3vVZjtaBK/50q+MultZaurpQ3ue89ld/+DPo?= =?us-ascii?Q?8IiOCop3EbR/OWbM+fxqGC8R4MhQXtMFODoLB7KRxOJmK2wsEs77jU/Awto8?= =?us-ascii?Q?LQ8brtcgDuEUTRfeqWVwkcz6esNWmceP1AhmlH42jgk6KxSro5ZgRBFQ2O87?= =?us-ascii?Q?8vq9EkKDVEU11wUIxIybhxFWzfb/ZeU9yvQ5Qz4E2VJs5CbfHBTGfH0veuBg?= =?us-ascii?Q?MtZIftiSIuCgFXo/YdHEDjYVm4qyfgwCweVwD5qTVboHsal1SzGdii42KLs9?= =?us-ascii?Q?zpiplavfUnxFZKGxoyq0n9FVcWyqCvMWUXY0/TN62wDsNj5mGmZMO/Pc1HT1?= =?us-ascii?Q?EyvSvFlliifdgJRou9hW7pkd4eYMzqSM471lOubR9eMFSLZKdsy7xkvSX3HA?= =?us-ascii?Q?kuIK9oXPnf8vjmi+QUbg1R0vvV+DxRx7i9obr/IXM7NZijwn4riJhH7JIDrY?= =?us-ascii?Q?duNO4RYCZuCElo2fsyCMNbtMbq7SufbQKjjTc1s+Gakb3/YCGix914pbSsne?= =?us-ascii?Q?TxUeaoMunCosVyixl6PH3dvFZpjcs0IojwaRAjnDa2raqvwEXVK/C0XHLR9h?= =?us-ascii?Q?DnXbCkaeQX+P70RvoQmWf4Hj49QZJiln22rcD8EVaxdZKfUp5lPO/Tcqbvyw?= =?us-ascii?Q?fm7JnPAniTVuqSfqZFurpdzmtFgyGSa/F/utjYrwIsCenJ3dcoVFAbO8nL9c?= =?us-ascii?Q?RcC4FIK1Ag=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7b451061-c224-4c14-6501-08de60638af8 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:18.3897 (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: bZa/40mkPnKv6CE5r9oq3/tSICkqhgzV3n4vZlYgDulxdp10Ho8YjL17fBGLzQmwF1gHrK+BMg0bDZ05tNFQtA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" This removes a "TODO" item in the code, which was hardcoded to work on Ampere and Ada GPUs. Hopper/Blackwell+ have a larger width, so do an early read of boot42, in order to pick the correct value. Cc: Gary Guo Signed-off-by: John Hubbard --- drivers/gpu/nova-core/driver.rs | 33 ++++++++++++++-------------- drivers/gpu/nova-core/gpu.rs | 38 ++++++++++++++++++++++++--------- 2 files changed, 44 insertions(+), 27 deletions(-) diff --git a/drivers/gpu/nova-core/driver.rs b/drivers/gpu/nova-core/driver= .rs index 5a4cc047bcfc..1babde79aba8 100644 --- a/drivers/gpu/nova-core/driver.rs +++ b/drivers/gpu/nova-core/driver.rs @@ -5,7 +5,6 @@ device::Core, devres::Devres, dma::Device, - dma::DmaMask, pci, pci::{ Class, @@ -17,7 +16,10 @@ sync::Arc, // }; =20 -use crate::gpu::Gpu; +use crate::gpu::{ + Gpu, + Spec, // +}; =20 #[pin_data] pub(crate) struct NovaCore { @@ -29,14 +31,6 @@ pub(crate) struct NovaCore { =20 const BAR0_SIZE: usize =3D SZ_16M; =20 -// For now we only support Ampere which can use up to 47-bit DMA addresses. -// -// TODO: Add an abstraction for this to support newer GPUs which may suppo= rt -// larger DMA addresses. Limiting these GPUs to smaller address widths won= 't -// have any adverse affects, unless installed on systems which require lar= ger -// DMA addresses. These systems should be quite rare. -const GPU_DMA_BITS: u32 =3D 47; - pub(crate) type Bar0 =3D pci::Bar; =20 kernel::pci_device_table!( @@ -75,18 +69,23 @@ fn probe(pdev: &pci::Device, _info: &Self::IdInfo= ) -> impl PinInit())? }; - - let bar =3D Arc::pin_init( + let devres_bar =3D Arc::pin_init( pdev.iomap_region_sized::(0, c"nova-core/bar0"), GFP_KERNEL, )?; =20 + // Read the GPU spec early to determine the correct DMA addres= s width. + // Hopper/Blackwell+ support 52-bit DMA addresses, earlier arc= hitectures use 47-bit. + let spec =3D Spec::new(pdev.as_ref(), devres_bar.access(pdev.a= s_ref())?)?; + dev_info!(pdev.as_ref(), "NVIDIA ({})\n", spec); + + // SAFETY: No concurrent DMA allocations or mappings can be ma= de because + // the device is still being probed and therefore isn't being = used by + // other threads of execution. + unsafe { pdev.dma_set_mask_and_coherent(spec.chipset().arch().= dma_mask())? }; + Ok(try_pin_init!(Self { - gpu <- Gpu::new(pdev, bar.clone(), bar.access(pdev.as_ref(= ))?), + gpu <- Gpu::new(pdev, devres_bar.clone(), devres_bar.acces= s(pdev.as_ref())?, spec), _reg <- auxiliary::Registration::new( pdev.as_ref(), c"nova-drm", diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index 289785530ad7..2e7b90b80877 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -3,6 +3,7 @@ use kernel::{ device, devres::Devres, + dma::DmaMask, fmt, pci, prelude::*, @@ -102,7 +103,7 @@ fn try_from(value: u32) -> Result { }); =20 impl Chipset { - pub(crate) fn arch(&self) -> Architecture { + pub(crate) const fn arch(&self) -> Architecture { match self { Self::TU102 | Self::TU104 | Self::TU106 | Self::TU117 | Self::= TU116 =3D> { Architecture::Turing @@ -155,6 +156,19 @@ pub(crate) enum Architecture { Blackwell =3D 0x1b, } =20 +impl Architecture { + /// Returns the DMA mask supported by this architecture. + /// + /// Hopper and Blackwell support 52-bit DMA addresses, while earlier a= rchitectures + /// (Turing, Ampere, Ada) support 47-bit DMA addresses. + pub(crate) const fn dma_mask(&self) -> DmaMask { + match self { + Self::Turing | Self::Ampere | Self::Ada =3D> DmaMask::new::<47= >(), + Self::Hopper | Self::Blackwell =3D> DmaMask::new::<52>(), + } + } +} + impl TryFrom for Architecture { type Error =3D Error; =20 @@ -204,7 +218,7 @@ pub(crate) struct Spec { } =20 impl Spec { - fn new(dev: &device::Device, bar: &Bar0) -> Result { + pub(crate) fn new(dev: &device::Device, bar: &Bar0) -> Result { // Some brief notes about boot0 and boot42, in chronological order: // // NV04 through NV50: @@ -234,6 +248,10 @@ fn new(dev: &device::Device, bar: &Bar0) -> Result { dev_err!(dev, "Unsupported chipset: {}\n", boot42); }) } + + pub(crate) fn chipset(&self) -> Chipset { + self.chipset + } } =20 impl TryFrom for Spec { @@ -281,33 +299,33 @@ pub(crate) fn new<'a>( pdev: &'a pci::Device, devres_bar: Arc>, bar: &'a Bar0, + spec: Spec, ) -> impl PinInit + 'a { - try_pin_init!(Self { - spec: Spec::new(pdev.as_ref(), bar).inspect(|spec| { - dev_info!(pdev.as_ref(),"NVIDIA ({})\n", spec); - })?, + let chipset =3D spec.chipset(); =20 + try_pin_init!(Self { // We must wait for GFW_BOOT completion before doing any signi= ficant setup on the GPU. _: { gfw::wait_gfw_boot_completion(bar) .inspect_err(|_| dev_err!(pdev.as_ref(), "GFW boot did= not complete\n"))?; }, =20 - sysmem_flush: SysmemFlush::register(pdev.as_ref(), bar, spec.c= hipset)?, + sysmem_flush: SysmemFlush::register(pdev.as_ref(), bar, chipse= t)?, =20 gsp_falcon: Falcon::new( pdev.as_ref(), - spec.chipset, + chipset, ) .inspect(|falcon| falcon.clear_swgen0_intr(bar))?, =20 - sec2_falcon: Falcon::new(pdev.as_ref(), spec.chipset)?, + sec2_falcon: Falcon::new(pdev.as_ref(), chipset)?, =20 gsp <- Gsp::new(pdev), =20 - _: { gsp.boot(pdev, bar, spec.chipset, gsp_falcon, sec2_falcon= )? }, + _: { gsp.boot(pdev, bar, chipset, gsp_falcon, sec2_falcon)? }, =20 bar: devres_bar, + spec, }) } =20 --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012046.outbound.protection.outlook.com [40.107.209.46]) (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 8EFF1318BA6; Sat, 31 Jan 2026 00:56:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820990; cv=fail; b=C8SzDRnw6KQvHw4e4dc3gg4+4Mvx71wwnCodDpQ+fF6kvaGfzWHWUZuAMzPcN1qAUJAeJ+VfaifDGtbEZ2zgdd8fF2FeWq7z12hvE7f/TolMVe8x2M7mqMIZM69FkBiZBU22pN/jI3VmKQYMyHpzYJgUFY4ARgXcqgHqK4D1Smo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820990; c=relaxed/simple; bh=Zv3aOoDCLoYSSGuzVxdj+SUGTjz6rxQFBQCLPLOyYDM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=kl3lozVJnOwzFuKxnx7ChAlvGpye1mF3QMP1SIOEw95P5jjYWHdxuD6wb32WovLkwDQrcgubwz6cZ9YZbPqG4vycdN07YHtE4KVhRk36wvW/jWFUfySfYd63xzn5YHOfg7BFmY3WCLHA3bEsG747nqmGH53j+V7Fus6KofoZUlI= 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=PzUUgIWu; arc=fail smtp.client-ip=40.107.209.46 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="PzUUgIWu" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AiCOyQphnyOMdzs3/VkEjePKLrSGgpHwUZFK42IfGlKy748lnt7WLNhCg06y9IxScp/ZG3jyXnAb43HtPifgHrnVRE6G2ff8yL0hyeZ/QGYyObNetJ+PGHMtLFq5ltLZCPE4Etl70Z5vmjw+/evFtcliraSo+1/ZQvh/Kg1RnTm2uRBCBE86zJ6pa3ycdTiKj5Dw0m8kHPdpibM3B2vFAuZYjX52wt7MdHFHpyEHcZygkn4GqNb5Ki1HRYL1DLGgEUnipmscS94l44AUGQP5ZslakqmMcjFs0yBnvm+vv5E+W4PDDMC/YrVrz+oSu92vGN7K3eH1UuXH9B+fM3R7tw== 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=K97o+ExnC+mOG6C5+FGSH/tYISh5wJcNlMqq+RLZzUQ=; b=MoEs0f9EYNYMojSutSlpzAzzseHIQeRnB0nYF1lHweXI+k8/VCSZZ67iznzHVd8y53vhkswlnN7SrntHCRGlgWKkWqH5MkgVllWQe9ChJPtfdJKMcvY7WLnQesgWznyz4dAUa82uRrspXODFCKbXDYEJc9hqH+SMEOUayz/Rd1tM2dDnH6I9UrR8ewQZevljocYW/W4t0WVhwO6lwYdyxaA+GNwWPE8gNjvtgOAzDzdLMD8fOjqZjKk2qUhXQXC4hSRekjDsnP7ZFEBC9p8+hQVJlnsRuDUr7CRwjIu6bbYNkkMGI02sGbvIwGr5/kSAchKD2qX5hzamIr8bsRNUTA== 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=K97o+ExnC+mOG6C5+FGSH/tYISh5wJcNlMqq+RLZzUQ=; b=PzUUgIWuXrHXJRu8F+9kGwiaIVOPgc/Sw+qAfe3McqJGcZ6lyqAgwPTQyq6rZmC9BpVqhCodTssNfxOqeL+HTco78hD2RCh/D0/w/XpiMmyAD8YiOlqSCr2evO2p7h1ts0o6BUkAr5+2ZNEIXhn7F7VCm4XamQ3valDYflWZQ/YoTFSZ6aOcPi9NLvYWopX++CkuvN15ioLva30cqkQpM3fMc2TExMhbzQvgR09iZwQyQUqRKM+RHu9tp3floXvabUbv/N4na/5B+XzWnE1sQIE3DSbcBhhBA/He8D2lx9yehiTf339r6uhuUSv3ykM+rL5RVbK1J7dGnS+328j7sQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:19 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:19 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 08/30] gpu: nova-core: Hopper/Blackwell: skip GFW boot waiting Date: Fri, 30 Jan 2026 16:55:42 -0800 Message-ID: <20260131005604.454172-9-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR05CA0049.namprd05.prod.outlook.com (2603:10b6:a03:33f::24) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 0c2ce29f-2263-4282-5ce9-08de60638ba5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ESiEACsRyM4bBgKvXQYcOz9jmuzcm/yENECYYXMpk1KqcLw44MRSZq5AjYw6?= =?us-ascii?Q?SEhOC/S2pSClFZZuQg1PM2CG7eXfg0hzHylVjCA+XoVVKrl7h4fP+4gYYgCa?= =?us-ascii?Q?J9ngntYRpz4UMEqoKtw80RxXWRL5rIy1uVuP2Ti+wj2inTb2ncWcllQgCxa5?= =?us-ascii?Q?DJeD3rbe8VI15yVhgwYXY9pTt4RpQ1LXevWWSKgWl0plHkuEvdHP8v8iNGp0?= =?us-ascii?Q?xJXJK2j1eu2EUhE8HTAjAE4AZScRL6bM/9Wp1KQxaA7z4HGeSjCK+i1dr845?= =?us-ascii?Q?xprHB3+FMqw8M9+DYahriNgiotkO+rFnuMTWKhO9OnPRXLfKdB5hLZOR/tE8?= =?us-ascii?Q?FOI00Fu1k2iUpx3vg1e9cGDwFlnXghtNPG7MluSyPxQ4Ju19wNQ6d8GWdcOY?= =?us-ascii?Q?rFQ4zY9eSCC2fUzPg6MhztgDMzhazxMbYAPimFpVFHRvf4iQOYaMyJ30FTZe?= =?us-ascii?Q?UR0WmjJ1uX10KB1DHVfaiEsoVocnbbnX8sW47iYY5+xo8VEzCdAkJmA8UFGa?= =?us-ascii?Q?pMddqwd3Tm0Qgl6zVrr2ZKy4Zc+SDmpLuwKIhgtwLe2jDai9twDuYC3VAaDn?= =?us-ascii?Q?54T0pH5Pm9iBlFQgk+gkaUY4W/Dbe0vdGLbfJgySsyq47SY84jzQ7h7gjNF/?= =?us-ascii?Q?T1nK8RCyo8J+DhRCUUvoTZb3fL88KHZQ8wHrQV3TcjuNidFdxmCq8KH3Re/X?= =?us-ascii?Q?decuYQd34tAKcRAVl7AbNNrZjDyLwsYRJQ/Lx6jv664gKnaXnVRb77nmNO8P?= =?us-ascii?Q?Sa71JVFzvRQkJBaGec+BjyvqvD9TOX51P3GUZqdrEzVE+hE/7cBv72Oh5j7P?= =?us-ascii?Q?YA3wYiV8e18oonh2NaVOMcr+8UKLyZq4XLt+9KEW0HdqmSXiKuQG2w1k7NWS?= =?us-ascii?Q?VlM+hsXyWOFgdhdpKIo4x8M8kf7XMztrE9P28ruXkhIxy96iVMlX2nyRJtv6?= =?us-ascii?Q?jeNjbzBywUYc+MSBMKcgytwBGTMq8mFGUva58qUeMD7EQSR80KCUQCAgVA4B?= =?us-ascii?Q?z+2tTYBDxqV/dy5J8nEKMDzW2Il5FzYa0MGF5VrkWktBanU7PmqBlDjsvhJi?= =?us-ascii?Q?h9A6NK1fRuJQYX6LZnmckrVuBNb71VrEMqPBFvhH6NQfCxU2IkChqUXvAFoV?= =?us-ascii?Q?tKZqNhhT2N5IpU9cpJWUr88FIVjy9LUjaHalPphkY4j8mkyNBvviiwHHmBK5?= =?us-ascii?Q?IW9bFuVoWcKNRg+xah8raEx/RPg04bR9oJXpRbq6ube3/pKfHB0uN5caEQ//?= =?us-ascii?Q?8pM1D0tBTmi8VRZrqwc0WBItD3UsRGo+X9/3VH9m+jkLOubxt7WzZbfOSKA/?= =?us-ascii?Q?3HefeYX9tbCqeA3/7M4pk5Y1M+F4dcT7gULKUi7dGJ0lYbbaRNfW2bXDbkc3?= =?us-ascii?Q?UM9zC4vnrb26d5X5s8SLlz8HYeurHQSN23UNQrb/gMaJ0t3Pc/KBxLb6yek1?= =?us-ascii?Q?3UE70AXVq+gDx/iT8679+OThlWeFOb/0caC5RM2/Sigt8dHFb93CL0S7LTTW?= =?us-ascii?Q?zhkGV8qwbglDovNrZHZ6mAVcFGFFBtw7y8Tz2L4VpoLdH/aaTy8ohEFcJqub?= =?us-ascii?Q?XsaSKbBJgaCTZNBPUs4=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?36/cobJJ/N36PS0hpbJKypxTxkft2yn+I5ctUpK63nc2XwkynCa5uq3mtymm?= =?us-ascii?Q?3D/05qAPXwOFCdn9Vpcyoq37R/6J63iMaxxxA41w7Eo1ZDDlEicdvOuTokmG?= =?us-ascii?Q?ISEZe0XyzDeRftTgHCuC6Xge6xkGgQKFGpZ5UCwHu1gG9ssoQGOdij6Fq0X9?= =?us-ascii?Q?i4I54kyuwzqqtBZlsRkHJhJI2V1MedK8JcpdJ+70JL71PiDaxWcip8a6rd7L?= =?us-ascii?Q?Ai4JThcHXcUYoRQ0O/48Bmjilhf9HAkS9i7D62EVwbAAQocNB/5UD/QyjOBk?= =?us-ascii?Q?v0j5ervlh/QLzcnktFzdTPlX6NJ1b61nAUxS/x38JVWg8H2QBlnB2nEtyGbz?= =?us-ascii?Q?+QWSIQ7A9VmGRl0vBmDQ2nZfyAuLFiaEmn17qFywQcsCh7PBXtpPWcSioObs?= =?us-ascii?Q?UM5PXfDGtzzsWDS83U3C72V7XBarobTWbOH7hxCK57YnAiREGNL0TNo5mLpc?= =?us-ascii?Q?LpjMTQknl6RQ7eIJhvt+jy253XffuKPrmal7F4PUvQ+Pj6Y8JvK2puIKdDsZ?= =?us-ascii?Q?MeDU0RujWt7BVpkLlKf8TCqgTOQskU6a5PzvuHSqmW8HPm/9wrFyxFIPoYgH?= =?us-ascii?Q?4qmYichbPTDFgkyfnG9lT1jEdbIuGj+pE6UeS5mN9eneaytPF+VbPyQFqW0q?= =?us-ascii?Q?vNtLbr4BpKclBH0RGNuqJ0gtCewu87ceosLxmbHuusNrvyHBEXenOI9uPZhB?= =?us-ascii?Q?7+VhUCXJoA+pHtiLIikNDfVZvEiax4W/vZ7uuYqrW5NJ3Ayd9XMEiKGGjI1h?= =?us-ascii?Q?dYpx/s6LtIPC5waVANY5YPQDy/3DItysOpoojADYKBACSMn/OIR5B6gFeaQ6?= =?us-ascii?Q?GbBy83PCJYYtUa2Hx1w7LfcuJzQS6C7Ij3PKO/RLqKyiMvR+ucrnlvI032zq?= =?us-ascii?Q?p1pnYvpBoGuwQVtkrGXqZdBVTxtIPiMu+qDQGf8opsOC1oSdYfsqYbpSFXy3?= =?us-ascii?Q?uf6RozX8J+Jj2ENbc1oAuV9mX2hXExSRF3Evpbbi9dmPeZXVojfD1vZO9Po7?= =?us-ascii?Q?+eq5RXvuGnOUYsn7hZPr2O1b6I8RGe0mpTidxrl83O2tKmzGelDy02RxCUQX?= =?us-ascii?Q?xv130esjTerJGVpHyJRMRInZ1HVu8iwYGL7EjLWbirfrIRclyaGHXPpyXITI?= =?us-ascii?Q?+dj10CSbbKDsOjx3sYqYRCa/m8A5O4X29L199ypvo5X3xacMMpqdTg/0sN+S?= =?us-ascii?Q?KLGYMarOs0tLUz3IT2Cj2gPe9lm7xSFq3o7Uj5nG5Wi4uJAvL/ue1blrB+O/?= =?us-ascii?Q?vu8Bk/pJWU6UYoo96SkILFW9bCUzU2RqobTj+ZTGdD2iR5BWZ+R3VIx+B6su?= =?us-ascii?Q?IttfKzG6snaid6/Q8mWcTagJDMHH/RGHzQipp5QozdFL7jVe0qzRPgcLhlXq?= =?us-ascii?Q?F0o7wNJ/PafSafI/RKMjAlROCfQ2EUXzRUiBsN0XZCupJU8awbkcXUSt/WVY?= =?us-ascii?Q?oJBD0/qIrPNX3hOEnP3X4d8WwEWpMhGZ7X+385ISy/y8LqOxzM6822XUO84X?= =?us-ascii?Q?yn1t8b2L7RZcJbfT6I++NFu8szCYm0z8wTCyRY1GDYJelRAJaNzdDJWhCALp?= =?us-ascii?Q?hl3nsk4QZJgLlB2zaR0K7AXeNMA5ApmBSIN6IbQQV4LZPKb+z/Pu7oCpAmTR?= =?us-ascii?Q?MSrptEnJNy3XIkKdHPYtWXGyrdBxRy8VCRAxqJL0e8aVJtJU13iDg6J6CegN?= =?us-ascii?Q?GeIjwPcmRqSg592sP0AgUM2/9jaKD6LQRkD+IlgNcK0pXSGlW7q5yI49a4Vt?= =?us-ascii?Q?Esg/GpMJyw=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0c2ce29f-2263-4282-5ce9-08de60638ba5 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:19.5551 (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: nplj9bAbl1CxwQ9DBKBZplrZ8Sf+UllB742BohwMlaf3cRyX2Rljg22fYFHH7Yyryh5QQLbTxOzsgXrp9MDtaw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Hopper and Blackwell GPUs use FSP-based secure boot and do not require waiting for GFW_BOOT completion. Skip this step for these architectures. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/gpu.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index 2e7b90b80877..2ed0f6d8d19d 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -304,10 +304,19 @@ pub(crate) fn new<'a>( let chipset =3D spec.chipset(); =20 try_pin_init!(Self { - // We must wait for GFW_BOOT completion before doing any signi= ficant setup on the GPU. + // Turing, Ampere, Ada: we must wait for GFW_BOOT completion b= efore doing any + // significant setup on the GPU. + // + // Hopper/Blackwell: skip GFW_BOOT completion waiting entirely= , and use the simpler FSP + // Chain of Trust boot path (elsewhere) instead. _: { - gfw::wait_gfw_boot_completion(bar) - .inspect_err(|_| dev_err!(pdev.as_ref(), "GFW boot did= not complete\n"))?; + if matches!( + chipset.arch(), + Architecture::Turing | Architecture::Ampere | Architec= ture::Ada + ) { + gfw::wait_gfw_boot_completion(bar) + .inspect_err(|_| dev_err!(pdev.as_ref(), "GFW boot= did not complete\n"))?; + } }, =20 sysmem_flush: SysmemFlush::register(pdev.as_ref(), bar, chipse= t)?, --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012046.outbound.protection.outlook.com [40.107.209.46]) (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 55879331203; Sat, 31 Jan 2026 00:56:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820992; cv=fail; b=btmhIdWsiUzLTMGkKcoB8QnHp5Yyx5u9P2y/SmkNpVS0IkLkbTY1XU8OV442vd5L7qG6YGJSV9+BC2rWFqte9e74cddVqsykqZDC5hEJ79096fXq331Q0W6JLqLBW8LVIXE97Z2FkVqunHdOZU3ZN9Edg70N/K2ACzw+qymnfWU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820992; c=relaxed/simple; bh=XsSS1iOQEbC7zJU+iFkR62ITVO9HTcn8a/2bWIFbXlA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ld69wxWgxh2reUgg7q3TkzT0QBsZVHbDveRshXAZI6qu/5FJol2qpUgiC/xNtvYhLJvzFSUl9arnTy5QaSVRta12y/x2L0rfPhYbrHno4vAy19sZCXPnR7kcCNkKm+o4C5YaAqixi9olL1cpgjGX95aL2D5K6Q5uln4k4sGm1kc= 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=GhM8OwRd; arc=fail smtp.client-ip=40.107.209.46 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="GhM8OwRd" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=C0YroHIbecOFr773J9bs4mR89CzOIxutXUIubAIjKkfPOeNU1EBidMPO/ldhWFYDQHqAxr4+KTLYIwz+k4xa+PWVUxf1db5EwSecZ6vxapO+yAJ+AUojz5691tOftd3GjJg+eRHPvCOCK5zH4SkJBTkfPFAsru3tTDpIQcUW+k1WMumk1GMnky015CKDdNCkX3PGHweoZixCOVhDdXU1L1k+ko+C6roa2bUkivOnhotA9tG9KuGW0ds7sLU9OcfgpA/ePebVjHxpH9peMZxy6lO/R1OABMkTQvsLcR4WFklGmeyMHMjxibMZbZleFYf3btSsfKSAwGWFHB+r6AXvIg== 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=Zb5KzhXrfo7gyhvvqAu2VMbykPQoJw9u4nDu3nBOEvg=; b=N+RZqu/fFJy/apuVb8k/fHLjg6tdyIw8ri+EzgB/s4todxlrYxHqvF8DIkYzAlzTuvKlUXRkjIAGhZVH/f0wpG4P4i0oCOuY2p1LxuWtTmMBKtd/E4foouS9vOrwqeKluVcXasyjuqOCM4+gdQt0BpXPzkJca4CmAnD5sSYoACJ20+Fi6m+TsubPBzPW749arOY+bEzUFV1h/Dzn8gB63HNm9wO1UJetooZD312P2odIRQ6tr12nhxffjhAeFobfPsaB+ZfnwXKLBtITmda3BWZXtNTbdrF+1Au+aHU/KofRRwQXn7zcr/SRkMIoxcYpfRBSKidT5AiBh+KM++6RCQ== 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=Zb5KzhXrfo7gyhvvqAu2VMbykPQoJw9u4nDu3nBOEvg=; b=GhM8OwRdd2r5jtDQrCVWYVRy8TJ59rhLIZ8xthT7o4eTjpuRXhwWqt20RHe0RRRgpneo6d0KEVmgjkVqlUSHIwA+5c4J+TeWKPCRoek1KQ6b/RQYmiWv+AnjrT9P5ipJIj/zSCwhoMeD6hAYMgl2/mcLbbJaLGzvpMnp5+kTVw9K5qWRBoALAZFqAetVrMYJwqbteVMKvKeFoUmD6HqlNTWp1dr8IF30aBiLGki3RLulRaBBr14VVR523Lc6Jgi5nbRNGCDQ4P7ACat325mSkD0T5XA3yTv7VUJSpHNFMF31s1mWjcqs53N0wQgkl3AzfRyJznwboXyIdGNmDQlGKg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:20 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:20 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 09/30] gpu: nova-core: move firmware image parsing code to firmware.rs Date: Fri, 30 Jan 2026 16:55:43 -0800 Message-ID: <20260131005604.454172-10-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR05CA0004.namprd05.prod.outlook.com (2603:10b6:a03:c0::17) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: b93d366c-64c5-4dee-45d0-08de60638c62 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?sCNEgxlvMM4IMCOWuivH0MmhMpt7N14AS0tccy9RD3I3HHsXdjCBj8nGM4Ep?= =?us-ascii?Q?LQMkjzjKMyk3OGvM9N3bV/JeCcpRDrsVb1PDHZQxTGEYsw/NCKY6tDX+vfak?= =?us-ascii?Q?toug8bFuKzNcS9eCfvYtBn+5KEeXSJzsQxx8CwSNNzqnYZh/lHAKJOh0neH1?= =?us-ascii?Q?EFEaqd2AvCsWUStmsp1yYLmRD+8jZ4kw+arb8v6u2M9WRwFV+8bfxen+MWp1?= =?us-ascii?Q?jjAXk8DK/ONmLWVcQkMISwqWp9U40q6ZLHsVhCaI4pryfTgzJx+rEYqdvWrK?= =?us-ascii?Q?loYWhcAZb3pVZyveUKomXVXZiegVLeuoVKHB146z8cl6QKLOnmlxgmm/OZVo?= =?us-ascii?Q?0WHLmsYE/9ItrxMYVtG3dMOkBaH2NnfIfldVnnNusoUeOCnWnNB/7jPFvQbh?= =?us-ascii?Q?7debphI2m64bCtRJo9zVM/7HIYZw/44UBkgt1Tab2B+DlScIHkeeFPZ8X69O?= =?us-ascii?Q?emzPXieLP6QF1InFGkxM61yfXxJu/VRBVA/po7sYj/lXoPT2hu2LL5u3FvHV?= =?us-ascii?Q?/OfWWb1tfCAqLpNCO+T0P+m+cHmze5wuwl1WmVFZlbNMKLEakBwkek0lU2VM?= =?us-ascii?Q?W97t2hsxUny/PqhBiUUJ6PlWj7HV+TKQuzQfbWUH4ZbZtxU3IZ7R7p3HzhO1?= =?us-ascii?Q?fo9ZGO6SsrnSa+rL4vYCqKy9Sb+3Kevv6CPgwteHpKkNLJQSSJ/SDXAthrkm?= =?us-ascii?Q?gJVcABxxj8vHkGwsOBPddi/rKlUh02JxxqcWLjiZAvNpfDrCER7Lbl8Bonve?= =?us-ascii?Q?LgFVJGGSOuqZ6HZQDYW8vrgPd43EkGQ46SED1eO5rtuZKpPKKXnQ0NNpws5e?= =?us-ascii?Q?kH7EYXYqHCykjW7hHGAezH61bIXVqXJ/7SAhTFgr4qdYk7xI2UZpOxVHsK9u?= =?us-ascii?Q?xZhWpQTmkTEijPba6yD7Q+kZW8uVIosUj7QtitKmXlaDPkwbr/mbZWcvN3gO?= =?us-ascii?Q?D7NJqYVtJifmuEI5J2s3GCTHGXr6PnpReto5DqhJXNMsx4upZuQ/FWV4eZYQ?= =?us-ascii?Q?UAyIwKGi6R7wYHhsblM6x/Kjs7KtPw0Uzrdgmr/RHWsRKxeVaaksJrPHkLjD?= =?us-ascii?Q?wrGi26XIZuLHDlT2t5msPG/CPUn89VYHeEC/0RDcoc8azQyVUpxJXSnZ8yCD?= =?us-ascii?Q?DQLEGzu+Ws4LDXrNKDyRoK++3JatLMBQ9fuSCEw60A7J5Ao/Pefisku6+nEb?= =?us-ascii?Q?FMcTjN765gClldJPmg1m6WRuJ6KbLrwPNX8PZ6/ZGl8C36vqI/cky4mglnd5?= =?us-ascii?Q?HSTbNduHqarYjMi6ktaeFRp58H0HWR1iiU6yGo+XfadIddpC9g4d/CCO9XsF?= =?us-ascii?Q?91Tl5Zw5+Og6D07Q1kraGFpE0uxC4ZA1PjyxDQmlvMcvJYoA/E2n28ZhLWh6?= =?us-ascii?Q?dKUVdUx4S/J/6f8qNO1f55eC16QcRLeqNuyamkO3okJIHFAtVJZ3Nt/K2qSx?= =?us-ascii?Q?DPtqX/tMg7nQv9YL5t1SJCJXD9C1ZZrxvg5E1X2sm7ikqbrGo1SzIOA/f7Bt?= =?us-ascii?Q?XFq+UF2hz5SeACz/Q9DexcFPGQX43gX5t5ARVr+niWFfWspb93pPw3KJlkma?= =?us-ascii?Q?IRA30j0jNjvooiprxNU=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?sxC9zY+SM9zJPHbs1FVzLmCfrjcaP2fT3BMRkrC/JL1tu2v8EXhgVQFRO76X?= =?us-ascii?Q?RpWH3kGd8ZgG/KPFzw91TL8UUbFh7y4y/YiKTaHuNIb9GZQD6MTfVZEF5LNd?= =?us-ascii?Q?gmXvbyZXgt+9EnVYhBwEfJuNptfRJJ/M9+9CYSExa/rtRz3cWUEOg1wlyku9?= =?us-ascii?Q?mxt1ni2Zd/Y8zx4X3q+KZS1AgSXkbZEY63q/IbfQAgFK9es0rmF0q9CpanxK?= =?us-ascii?Q?UvDggJoe62PVGukQbLcl4dy9eZBeKTQt0UkREy78Z6N2txyRKQ5P+3lJec03?= =?us-ascii?Q?99C7fFk4daXvSzmafJaGz0srOuI3qoXIpnf09EdsFTKv4+4RufRVoYzphXgB?= =?us-ascii?Q?d9xeS/wx0gN16TiSquju5NU0v7JtjNZspLf88Y2X2Wq58IY9db+1sxcz5ZQb?= =?us-ascii?Q?nXcnSEV3y4hd9XzueSack6O+C+h1l8AJP5FQx+JHQaWcU4bu+bwAsxixUOUO?= =?us-ascii?Q?t/z96C1Ar5PnmZP+jwsxtGFFsUZ3fsnu2f/dc87VqV8oMtW+E+hT4ESibU7m?= =?us-ascii?Q?ye6/ZBCe8IAriqc/Vmr3YyrFCEBYQHbn1dc2G0xlOV5LK9AGGUcfu+Hw2ik3?= =?us-ascii?Q?8Xcu+ZfUF6W4S359Oro0SwRR+yT7U2WXy8+KxFFB2noSjbuxQRFDlExrgynl?= =?us-ascii?Q?X00FetZGvuJ3wwDTxJ+kRJUc2pFqWqqakqa15fj7EM3ycwkGyp0pZ8yb61Jp?= =?us-ascii?Q?7vQUTMp0cVhsM/w3Jf4QoX5KiLLIzxXKuWt36xDo/4fu1Y/+w45J2wNd8/yt?= =?us-ascii?Q?lop+nYI13VddleqqGqdu2kP1kTmKITEyDkkFd/HaOEipSY4Yx6+tRM0rlpI5?= =?us-ascii?Q?LNT3UorvQQeh+J0WxDYKN0nyRUyYIjjcO+YrlS6rsqslaygkJ6OC5m0f/hgm?= =?us-ascii?Q?PRWecktm7dJVtiefWGxsCpnYWLOM612snMwFXmHuGfajP2RGiZp7omCSMThg?= =?us-ascii?Q?0YyBp/m+ZKFfKhTRO7ySo56+1J4EIhRyYH9MYR3+6uVV/qcnNnt52BfkYGIb?= =?us-ascii?Q?Br7Ayfpt49MHhEKUsu5x7eS1aaApgvP/Dr8ucsO6m7hAQHGUNthIN+2Ahrb3?= =?us-ascii?Q?xg5Mtakl96ZUilrEJEeNCoGc83mI1T+LX0QhgUFHd1DkbHkNYZv2MQ1U2gWl?= =?us-ascii?Q?TUFZCTHKTkPyrv76iFsaJdOXWjHTJhI+uV3FyMd8m6PlZLKIfIn4D9bMOsfc?= =?us-ascii?Q?FMMVhxlFGaHz4cnZ5/dV7jcsbOsyAdfQWdXjUZ0LZESO08fFF4Bx4p5vAwuP?= =?us-ascii?Q?VZUhVsJqtiveFjcbR74IAkROSjCpcOdqQ6vq9T+O7VNaKyV6/FIH+4F/VCbP?= =?us-ascii?Q?vlg9VEgZ/vJqdIt1biE+C0gb7/nJnQ22nb/Xicw1F00YGH3Q83bZt8qhuj1Z?= =?us-ascii?Q?FbH3r4YUgJ45kGGn27kuAyAgUGHUb0nBjWJ1ysg1P6fVJgn6Ud8kkJpk8YBc?= =?us-ascii?Q?UsA3aY2xD/JwJa1bQkixGrnZpk0jQ7pCnoKjZ28OdHE4RdASC6Hm+Zmly4KJ?= =?us-ascii?Q?367erl1/4R5T6scbRFF65NCnlyQOzpGA7h3oYyJZWurPu0CIgoBw9FZi5CkL?= =?us-ascii?Q?L/UHO+oVV9sv1Qk0MelwDRb09h8MBrw/qL6oQEJDn5dI3LItJAM9L0MaecpS?= =?us-ascii?Q?s4uXf7aUBZF+1rzi66WhzziskJ/ppelkIXkSstwmGRiM2BFfHkZKrLYbVsVT?= =?us-ascii?Q?ZGJrsmBjZJLRb0EZZ1xLnboW/HiFgbgz00SiKwlpmTX5k9BwjVHHJVsosMxc?= =?us-ascii?Q?2anWlDo06g=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b93d366c-64c5-4dee-45d0-08de60638c62 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:20.7694 (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: JhxiJ66A/YV4mjCwRWHsmhBRa7PG2v3mFypOd9Tl+SHHD4e+AD/J8eNcs5R41zpaRNThNf7/NRU+VU9soUtgvA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Up until now, only the GSP required parsing of its firmware headers. However, upcoming support for Hopper/Blackwell+ adds another firmware image (FMC), along with another format (ELF32). Therefore, the current ELF64 section parsing support needs to be moved up a level, so that both of the above can use it. There are no functional changes. This is pure code movement. Reviewed-by: Gary Guo Signed-off-by: John Hubbard --- drivers/gpu/nova-core/firmware.rs | 88 ++++++++++++++++++++++++++ drivers/gpu/nova-core/firmware/gsp.rs | 91 ++------------------------- 2 files changed, 92 insertions(+), 87 deletions(-) diff --git a/drivers/gpu/nova-core/firmware.rs b/drivers/gpu/nova-core/firm= ware.rs index 68779540aa28..a0201ac8ccb4 100644 --- a/drivers/gpu/nova-core/firmware.rs +++ b/drivers/gpu/nova-core/firmware.rs @@ -437,3 +437,91 @@ pub(crate) const fn create( this.0 } } + +/// Ad-hoc and temporary module to extract sections from ELF images. +/// +/// Some firmware images are currently packaged as ELF files, where sectio= ns names are used as keys +/// to specific and related bits of data. Future firmware versions are sch= eduled to move away from +/// that scheme before nova-core becomes stable, which means this module w= ill eventually be +/// removed. +mod elf { + use core::mem::size_of; + + use kernel::{ + bindings, + str::CStr, + transmute::FromBytes, // + }; + + /// Newtype to provide a [`FromBytes`] implementation. + #[repr(transparent)] + struct Elf64Hdr(bindings::elf64_hdr); + // SAFETY: all bit patterns are valid for this type, and it doesn't us= e interior mutability. + unsafe impl FromBytes for Elf64Hdr {} + + #[repr(transparent)] + struct Elf64SHdr(bindings::elf64_shdr); + // SAFETY: all bit patterns are valid for this type, and it doesn't us= e interior mutability. + unsafe impl FromBytes for Elf64SHdr {} + + /// Tries to extract section with name `name` from the ELF64 image `el= f`, and returns it. + pub(super) fn elf64_section<'a, 'b>(elf: &'a [u8], name: &'b str) -> O= ption<&'a [u8]> { + let hdr =3D &elf + .get(0..size_of::()) + .and_then(Elf64Hdr::from_bytes)? + .0; + + // Get all the section headers. + let mut shdr =3D { + let shdr_num =3D usize::from(hdr.e_shnum); + let shdr_start =3D usize::try_from(hdr.e_shoff).ok()?; + let shdr_end =3D shdr_num + .checked_mul(size_of::()) + .and_then(|v| v.checked_add(shdr_start))?; + + elf.get(shdr_start..shdr_end) + .map(|slice| slice.chunks_exact(size_of::()))? + }; + + // Get the strings table. + let strhdr =3D shdr + .clone() + .nth(usize::from(hdr.e_shstrndx)) + .and_then(Elf64SHdr::from_bytes)?; + + // Find the section which name matches `name` and return it. + shdr.find(|&sh| { + let Some(hdr) =3D Elf64SHdr::from_bytes(sh) else { + return false; + }; + + let Some(name_idx) =3D strhdr + .0 + .sh_offset + .checked_add(u64::from(hdr.0.sh_name)) + .and_then(|idx| usize::try_from(idx).ok()) + else { + return false; + }; + + // Get the start of the name. + elf.get(name_idx..) + .and_then(|nstr| CStr::from_bytes_until_nul(nstr).ok()) + // Convert into str. + .and_then(|c_str| c_str.to_str().ok()) + // Check that the name matches. + .map(|str| str =3D=3D name) + .unwrap_or(false) + }) + // Return the slice containing the section. + .and_then(|sh| { + let hdr =3D Elf64SHdr::from_bytes(sh)?; + let start =3D usize::try_from(hdr.0.sh_offset).ok()?; + let end =3D usize::try_from(hdr.0.sh_size) + .ok() + .and_then(|sh_size| start.checked_add(sh_size))?; + + elf.get(start..end) + }) + } +} diff --git a/drivers/gpu/nova-core/firmware/gsp.rs b/drivers/gpu/nova-core/= firmware/gsp.rs index 072881e0a62b..173b16cdfb16 100644 --- a/drivers/gpu/nova-core/firmware/gsp.rs +++ b/drivers/gpu/nova-core/firmware/gsp.rs @@ -18,7 +18,10 @@ =20 use crate::{ dma::DmaObject, - firmware::riscv::RiscvFirmware, + firmware::{ + elf, + riscv::RiscvFirmware, // + }, gpu::{ Architecture, Chipset, // @@ -27,92 +30,6 @@ num::FromSafeCast, }; =20 -/// Ad-hoc and temporary module to extract sections from ELF images. -/// -/// Some firmware images are currently packaged as ELF files, where sectio= ns names are used as keys -/// to specific and related bits of data. Future firmware versions are sch= eduled to move away from -/// that scheme before nova-core becomes stable, which means this module w= ill eventually be -/// removed. -mod elf { - use core::mem::size_of; - - use kernel::bindings; - use kernel::str::CStr; - use kernel::transmute::FromBytes; - - /// Newtype to provide a [`FromBytes`] implementation. - #[repr(transparent)] - struct Elf64Hdr(bindings::elf64_hdr); - // SAFETY: all bit patterns are valid for this type, and it doesn't us= e interior mutability. - unsafe impl FromBytes for Elf64Hdr {} - - #[repr(transparent)] - struct Elf64SHdr(bindings::elf64_shdr); - // SAFETY: all bit patterns are valid for this type, and it doesn't us= e interior mutability. - unsafe impl FromBytes for Elf64SHdr {} - - /// Tries to extract section with name `name` from the ELF64 image `el= f`, and returns it. - pub(super) fn elf64_section<'a, 'b>(elf: &'a [u8], name: &'b str) -> O= ption<&'a [u8]> { - let hdr =3D &elf - .get(0..size_of::()) - .and_then(Elf64Hdr::from_bytes)? - .0; - - // Get all the section headers. - let mut shdr =3D { - let shdr_num =3D usize::from(hdr.e_shnum); - let shdr_start =3D usize::try_from(hdr.e_shoff).ok()?; - let shdr_end =3D shdr_num - .checked_mul(size_of::()) - .and_then(|v| v.checked_add(shdr_start))?; - - elf.get(shdr_start..shdr_end) - .map(|slice| slice.chunks_exact(size_of::()))? - }; - - // Get the strings table. - let strhdr =3D shdr - .clone() - .nth(usize::from(hdr.e_shstrndx)) - .and_then(Elf64SHdr::from_bytes)?; - - // Find the section which name matches `name` and return it. - shdr.find(|&sh| { - let Some(hdr) =3D Elf64SHdr::from_bytes(sh) else { - return false; - }; - - let Some(name_idx) =3D strhdr - .0 - .sh_offset - .checked_add(u64::from(hdr.0.sh_name)) - .and_then(|idx| usize::try_from(idx).ok()) - else { - return false; - }; - - // Get the start of the name. - elf.get(name_idx..) - .and_then(|nstr| CStr::from_bytes_until_nul(nstr).ok()) - // Convert into str. - .and_then(|c_str| c_str.to_str().ok()) - // Check that the name matches. - .map(|str| str =3D=3D name) - .unwrap_or(false) - }) - // Return the slice containing the section. - .and_then(|sh| { - let hdr =3D Elf64SHdr::from_bytes(sh)?; - let start =3D usize::try_from(hdr.0.sh_offset).ok()?; - let end =3D usize::try_from(hdr.0.sh_size) - .ok() - .and_then(|sh_size| start.checked_add(sh_size))?; - - elf.get(start..end) - }) - } -} - /// GSP firmware with 3-level radix page tables for the GSP bootloader. /// /// The bootloader expects firmware to be mapped starting at address 0 in = GSP's virtual address --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010034.outbound.protection.outlook.com [52.101.61.34]) (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 C0B733321A1; Sat, 31 Jan 2026 00:56:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820992; cv=fail; b=M6CyElITCTyCnHz6f8RqbE1gesY0MHEIY+3Rw0lQVpWbyUTWkjcolyE4zhEn/GhhyCk7Dci3879LZcKqVVyoxf7+Ea+8rB8aaPN2O9xWFkfQy7IVblBJd49jNZzm9Z71a4ziRgH1LqXz1YiCv7MtipiGxAujEh8E97bsDVzdzB8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820992; c=relaxed/simple; bh=t0xPFIOe6Y+ZvppWzLqpFjJD7jkVU4g4fox4eLux68U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=d3G0fj2Oi9Ko0rds2BlbcDv0MwG+m6ZkzfMHzFw5UU8vMBfTnc32puZLB9eUaPBsS1ofG47US72rOkyceqghPN8LZEURgGcfuejBC20/uHBuiwf7HqI5Ma2iv5/tFy3JUBvvvk9LhH8fM/WwjDdFnZXsHRi02c4hC5oyBnSG0CA= 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=B0tpk22B; arc=fail smtp.client-ip=52.101.61.34 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="B0tpk22B" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UZ/y2kiOy0WIHufZSjKXroPjLf/nw4DgO5XY6MNfm4X1upnUZ0zIxqRTHEFUodoH318cB/6it7sfAcpqA4++p8TqRTvu1bZ2ZqeFI29DAHR7liitow5a0C5uUSqZoT1INt6wdsPSNM0YaIbg3NGGMCueGJTDlWAlmt8aNH8RoopUPM0R0am28lqH5zD6F76pCqM9t9jEZxcjpsKFSh3ShDgqOk4ZAXwjQMr4UaIHRMN4n4EH7ELPq+MzFO1MQlwzTKkg1JX7zJ0gVd6PZt5OdEnvRFeG4i8Voq3M46qHwIXdOaodPMuAuGzk9IwHhJQ+bjMb105MJI2VxfBaWOEGMA== 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=V8LURKWn5xkD94hz1Hy7wZy6PJZOiqjAVyiRh7Dq2iM=; b=alcJr/gOIoGs4y7+oAovG2IvLa1gj/+GJpmXnPgAi8pOn9mIfkG3p3CC+rEHn53amsTIlpXqzuUdAfXebpipgl8q+hwT/MrUDBw02OSsGq3CwCr1ggXu8RUuhV19W071X8fsgVeB88n10v43dvhjvznj5T66ps9GwXcrNwlnqZ8dznc55H8uMn5b7O1oUSq77oyGNBz5OlZk713uOIUTIaM3pyVSYWntHVSbQME6RwHoVn4rDLF6B/V2UvC3K57Q2fOGrtsP+4FEiubm2NXaf3I2WrVpZ5WBIGTjxeECErJqqLFyJx0yFN9b/y+REukaJmELPDATz7Htxm0DIhoJIw== 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=V8LURKWn5xkD94hz1Hy7wZy6PJZOiqjAVyiRh7Dq2iM=; b=B0tpk22BeZcF4w6xRxsS3g9pRTJKL6naQa6UR89RvmIuB7gsUtrPwD6suJPJrEZh/U/iOkgExFhfHgtmuBSFK5RAB1Nhb0HAeST4cTT98iJL/XyJXhcseYsdON9wJ1XA246AS/3ie7C2tSbXczwJB6FiizvX2KwDXyAgtsSq7TE+NCgU9TJJ1A4miKESjbsTGkvcCK+lae1NYtX2Kti4KZtCoe7DrL39N5SUzotbYzPMmCKPM53sj50VcDTkmHD+5D8HWgqg9DE00kV2RyD5iSwFAd7YgtV2mM2MdRVIPN+hzILXM7fMzhMG+jJxwpNpKlaKLx6zfm3SI7vwHRgPVA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:21 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:21 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 10/30] gpu: nova-core: factor out a section_name_eq() function Date: Fri, 30 Jan 2026 16:55:44 -0800 Message-ID: <20260131005604.454172-11-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR05CA0056.namprd05.prod.outlook.com (2603:10b6:a03:33f::31) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: b8b0f183-01d7-4973-787f-08de60638d04 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?/rkIXt7aS02KIDOgwpMdj8ieHgmRFcpbrP1EHvD4NV877/oPu2L2BTZZAv91?= =?us-ascii?Q?iSsi9Sc+hqQDEKbYkYENyXEe5yh02IT/ZmlpHLZqzeWOvtXT4WvXqbIswe1K?= =?us-ascii?Q?YIeuZKU751rqjpO2r+R+RPtAhZnugirEgA0MKVFH8Q7IRxek2WcY4s9L1D+V?= =?us-ascii?Q?ceaaJTtpXFOl3bU4x1MY+6rIKQQytQkx1U+sPTusvM0H2N3WIJfbs7MdOh2r?= =?us-ascii?Q?3l1Gxqipj9MpdJqh+2mw6/a0rWEMi4Ez7bc0bZ0Y2wa136VP7xzenS7aKBxr?= =?us-ascii?Q?8VSLSjrP4f55Eo2foCT1OJlGNrfXnUNKGQcHU6EtpWrqXE2WInjZv78PqXUr?= =?us-ascii?Q?vCv1wGilbEj8KZJDjHrg3Ph5K7bmvltkQW4MGYY9HvDKk3zG8wCaUswiL3km?= =?us-ascii?Q?H/RytQGK2eSWH5IWbAzfvwsNt33BvZS1SDgiITVyDGn6yPJFJbhR3WauLw8v?= =?us-ascii?Q?0aa3wsg2q5UyO8DlN1hOWJ/8bmsPUNW6t90O4l/1k7H0MgRlPdZdoVYVbVdr?= =?us-ascii?Q?Hgera1BmTuJ4Gu7Ah4IhRIJondM8b2tydFluLuTzRj/H96yWrRiMvvLVaJSz?= =?us-ascii?Q?XWYhfzoOYqdh9D8V6y2JegjkKzTmXQ9eNrA4F2UFLOy4F/JMnBSjWKLusidd?= =?us-ascii?Q?Myq/hLrqovoxSDaruCn8VR5tsEtrJTg3G9BzPIuDjV8BSf3BVqs4IgoSSfyK?= =?us-ascii?Q?h2df3zzsn7tK034e/jsWRS4glxi/MuuBg0G8oSD4aathokMk7JwyJE/7bsMn?= =?us-ascii?Q?mOE5UtQRkE7p/CNvhljWK4Gzh+75O9J6DOwwgSmWM28UlIKyBYL1D7VwBbNs?= =?us-ascii?Q?/Fx08aDDe3w1dKxIfgRi/fgzGqFEgx18fhOKy3smYojbJgb6Ospq3dKse2zN?= =?us-ascii?Q?/uv8PWzjKb7Pr3oLLHwuRa3rZmY7xSDzbL6luKizeu/AtX8MXcFUjgOEVlyz?= =?us-ascii?Q?ArSSbe6NnpHE1A2e0hDlYXUo+CUcagyWbi0zipBVoIZdJ0G5Fuje/qIWWTM7?= =?us-ascii?Q?D0SJnnTyzQXAcRzN69x3V8hC/dvyntWYgD+4vL2kkY7qFa62CaRt5De733/v?= =?us-ascii?Q?81udBfjO1BiVz5C05cbpnMFjQL7J7by2Y38UqRB7nQHs4YdJ0i2Ldo1q+loT?= =?us-ascii?Q?h+mV6m24s/VRHUHMNocR+x6mYNYMcrJt+ea+FsXZot7o4otBVvlzRg6rqE48?= =?us-ascii?Q?90zvDXr2HvQYOqJvnk0vw4x/S1EuCseUAh1kYVSnl7Nvkyd0xAMqVDHPy8fi?= =?us-ascii?Q?INl6YNPdKHUD5rTy1AkzyN8y3fFHUMUGTPAF6WECHamwHv6holjxBfN/4TwO?= =?us-ascii?Q?WmwsBtmmhuZG/pZUbph0dnXMJPKxmnixoHlBPPGRS/Z9Pcg/Oiku+Irhl9CT?= =?us-ascii?Q?f/vi7TpkdVegvUdYezbE5sqgsEsbgq6XA3UrkLX96CVDkT5L/kaUhPvPWy7f?= =?us-ascii?Q?L221uMbyDd4XKQlyRjes7jMAdX+hh8SKot117sZVThB5JyfXu0flDXySTNVG?= =?us-ascii?Q?gQIyXhWcQ5MXjy4dSCiM5GMRSZv+yhjatGhzak6aLa9KhPMQSeQrkI1DFsLV?= =?us-ascii?Q?dkvtqGVxDXFWW/dszbg=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?QvjdzK0r1i4gE3sYsmxqFOfTAK9XxpyuEzr30ofqftqOGwa2S9bJ6Qy2jdMe?= =?us-ascii?Q?eO7yWiHkXiRJw1ibVl17zto/9AU6gXxmjPrSIeHxpuarebrMHSBYGnzyFfD8?= =?us-ascii?Q?P8F5bjfIJPt8WvyopZxqRC3k/JbbrhH5pFDzLz/uVkTw0lDNaPEQhnFWWVKJ?= =?us-ascii?Q?OBHeBqDC0KjsIUUkzzypMATEo/V3jJ+XSuGifCAK8cx2Hlrhr612t8MPsw3d?= =?us-ascii?Q?A1UugJObG1smD0+NaQ+DLyPyK1UDt9hFKjVVTji1CwERQSlHyNDF6xmoFoER?= =?us-ascii?Q?0pl+luRcdybuNbQs5KwI+9fIVHUbfZcG5N/PIT+/QpyATiDXgAsiqqV/A4A+?= =?us-ascii?Q?wRwTjCnGVd7a/tOfgJgAdS73UmcrwGJ5uFBuvVSOaTh27p4d4a9jmjQk2e3s?= =?us-ascii?Q?WVNgIb39ZDPQjdWkDSeZQ2PCxR1S09AZb3y88JoUlsR7lAM76Vun8BZZaz+r?= =?us-ascii?Q?jZFuNQKcvk0PZLn2XXSNGFgiifdltmt1SorOe/H3NfYpa6MKI/gAR8Xyr6Ez?= =?us-ascii?Q?3hPUUWYodXpJlqDF6b2dXpGhvBasc6WyJNcNxwOT0lKDcczZR/XFR2RszCin?= =?us-ascii?Q?C5tyO0nnKdApmXURwrGDTnukdviRCVr/6XlkZvnyd/7w6bs24n6JtEUZbG8C?= =?us-ascii?Q?nQ9dSsYdcwkOLQsls1JInZAzEB7WAJMxiWBxj4h3uxu0sAzDd+AKLReDnXrm?= =?us-ascii?Q?RK7x49v2pgMSgkB3vb1dhTu3CtwITpBRaba9PvfgCzR/Io7OJOSKKvMzReE6?= =?us-ascii?Q?QhnilaBQtA1xwLIVfygSRScOjHf8N9M5zdeA6F+MsUZsHNlBzMaD8IGHiaBC?= =?us-ascii?Q?urO7Z92GNkYPXcufoj2HNgXIV7pHnXiTG7xuvhVr8woAHfjREDPbwErEhCjc?= =?us-ascii?Q?QyTVm0ex0hrYt3A/zQm3otK3lyQ92IxoC1hm5egv4mpwGbf+umpebcGXnhRk?= =?us-ascii?Q?9EvsqXc2xFAaAOJVnEgkpBHjpeSTVm/cPSIKpsfcXP0hPoQFTwQQS3KT3zMT?= =?us-ascii?Q?G5gmhPtnC68VJXYSjchXtmutZh+gF0DpDplyI0ppj3DhH+pXEYJsgyI+A4D1?= =?us-ascii?Q?pJ+vuOYnr5Cj2gC9p7d+J20GxhUMTlgLNGfkP//07OP/IFVNjoIPi7i7Gxgz?= =?us-ascii?Q?B0KOLNS3lnAmo1oxIEnAsPYfXi/LWJ8uf4/stnwTS6F5XiLrUi5yavU2qXcN?= =?us-ascii?Q?pYflA2C9kTN5BDPw6UHuadQ+8Nh9q2IrTqXUJVKE7YcmWZ9IGYApMjvjYV4E?= =?us-ascii?Q?Kn/TFetmXkRCiTAHT0BglT/3Z/vmorBhk5Y2EiFYqsmOxW3esV3brwNc2eqF?= =?us-ascii?Q?i4iTPfvBVcr20hIM1gpFmTTEePBN0bLyVSSL4X64zqhgDMkKwgH7dc6FteT/?= =?us-ascii?Q?V6l8chBSU/NyG7i0qOWWJmfD3dW20xXX0/GUwLPv3ndxgxRac5KsfZ+DhbhN?= =?us-ascii?Q?vpmUM1HAkGCsL0jLR6HthDCNj2gdAY7YNZdlXFldw0boa2gfC+FF6xDE2BbO?= =?us-ascii?Q?mG+palmmPU97t0y6WLmDA2RY1MwfHkEOdpIe6dgC6gr63hBWOPvbx/r2KMhD?= =?us-ascii?Q?bmKEBeUfimterX7IHnGNXAyDYRv6OvhPKqUpcxt6fLcDULQ+1qwwFNb1DVXE?= =?us-ascii?Q?GNrUwcZlD6AsvOs9lcRRL8fV64kU0XustOxrSE+2m1aIr1KUh9tQzIMYB9Mj?= =?us-ascii?Q?i77jzi0syKLeURw0RIbcZ9uWPxMNsO5teoJqllSbui6v3xvagBbvFzjuqmKt?= =?us-ascii?Q?TrH65F27mQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b8b0f183-01d7-4973-787f-08de60638d04 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:21.8465 (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: u0beW32h4ZmkNENibdNvosC2piWBRYOoOYSA4EaNAYdcXqpAJEUX0BN/S5oDU3JgDC1BpzF+hDftklW4znHQgQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Factor out a chunk of complexity into a new subroutine. This is an incremental step in adding ELF32 support to the existing ELF64 section support, for handling GPU firmware. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/firmware.rs | 40 ++++++++++++------------------- 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/drivers/gpu/nova-core/firmware.rs b/drivers/gpu/nova-core/firm= ware.rs index a0201ac8ccb4..72cefc3142ea 100644 --- a/drivers/gpu/nova-core/firmware.rs +++ b/drivers/gpu/nova-core/firmware.rs @@ -464,6 +464,13 @@ unsafe impl FromBytes for Elf64Hdr {} // SAFETY: all bit patterns are valid for this type, and it doesn't us= e interior mutability. unsafe impl FromBytes for Elf64SHdr {} =20 + /// Returns a NULL-terminated string from the ELF image at `offset`. + fn elf_str(elf: &[u8], offset: u64) -> Option<&str> { + let idx =3D usize::try_from(offset).ok()?; + let bytes =3D elf.get(idx..)?; + CStr::from_bytes_until_nul(bytes).ok()?.to_str().ok() + } + /// Tries to extract section with name `name` from the ELF64 image `el= f`, and returns it. pub(super) fn elf64_section<'a, 'b>(elf: &'a [u8], name: &'b str) -> O= ption<&'a [u8]> { let hdr =3D &elf @@ -490,32 +497,15 @@ pub(super) fn elf64_section<'a, 'b>(elf: &'a [u8], na= me: &'b str) -> Option<&'a .and_then(Elf64SHdr::from_bytes)?; =20 // Find the section which name matches `name` and return it. - shdr.find(|&sh| { - let Some(hdr) =3D Elf64SHdr::from_bytes(sh) else { - return false; - }; - - let Some(name_idx) =3D strhdr - .0 - .sh_offset - .checked_add(u64::from(hdr.0.sh_name)) - .and_then(|idx| usize::try_from(idx).ok()) - else { - return false; - }; - - // Get the start of the name. - elf.get(name_idx..) - .and_then(|nstr| CStr::from_bytes_until_nul(nstr).ok()) - // Convert into str. - .and_then(|c_str| c_str.to_str().ok()) - // Check that the name matches. - .map(|str| str =3D=3D name) - .unwrap_or(false) - }) - // Return the slice containing the section. - .and_then(|sh| { + shdr.find_map(|sh| { let hdr =3D Elf64SHdr::from_bytes(sh)?; + let name_offset =3D strhdr.0.sh_offset.checked_add(u64::from(h= dr.0.sh_name))?; + let section_name =3D elf_str(elf, name_offset)?; + + if section_name !=3D name { + return None; + } + let start =3D usize::try_from(hdr.0.sh_offset).ok()?; let end =3D usize::try_from(hdr.0.sh_size) .ok() --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012046.outbound.protection.outlook.com [40.107.209.46]) (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 4295731ED83; Sat, 31 Jan 2026 00:56:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820994; cv=fail; b=KC1U0rBdWFOKkQji1pIj4EeOiF14bsEvzRnRiUZ95CuwB9wAWvMFoVSD7LB5ReBYve37E0qJr5AfVRuR7+Oyt1LPrR38s+L22z1olbgWacrTTUxYcu6SBf7uKs0LKfawHu1kJYbR3q88aA7ROxdL3ME7G6t3ILODYVVPzKncTp8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820994; c=relaxed/simple; bh=ZgxqPPUZXN9deHEj4HDq1WneGrqQE2CMLfPxjIqrOyk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=KUw25V4riYWf5o+3ecUVLyW4dyzLn7WEg1tVTWyfSb+MAAeeKGmaUi+WuKoEmI1odIie2dVCzVkGZem1alME47ZzSAazomL80cLkuWZCUsvkKhMdQ5T7w0FlnZ+ij9nGHBjGcm2Kv/5hZ8P850bmU2WY4pFhnAk+ZMIs5zNudHs= 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=jUKPMPo/; arc=fail smtp.client-ip=40.107.209.46 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="jUKPMPo/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tcroE8stxlWH+TnHKhLiyIHHelKJtBCtKG+JGth9XXlkTLVaX0K0GO/62C7ZletTTucdSezD0gUOVsXhLSnIKvoi9UogTEDg4nX5nBiLCQxzaEFEFSi3bGaIM0gGHijJPdspBLsfXdcvEwOcyikB5SDJAQTyiWYo68PBya4CN/QtezH8PhKsaRtZO2fnlHPHyfA16T3EapC2qfPXQC6oomqzfjEi+oJKL34EnALFy1peOEK6MFWhXhC0tPvHrRnAOwwQD0dv4Ku6V71jOKmn+OfKkqABGGrT0j1N7PjedaA1foABN52tP86Rbiht8fp0dbPZb0JE0t6qdtCRudNkaA== 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=2DohWhvVmvtq8FzQqlSwBfVvo/5AOAJNi9yyjB25P2Q=; b=sKN1TigfnPdVQ1GN5FGk+pIiAh7SjrCCL5ING7iq41pSyHabQFuRmCbYNjle8hy6OfHw+wIAi46uZHnqLAjWzsgQrK4+UlbWEky5YIVfqLwFvCEuNff5DZP2VLbnjrVYaeWDK3MpDQsFoYsshoRn2psuGsV+TVpjr+DVZXuC12EWP+Hdqq1Yu2xvOvOkzeToQ6C87f1rW0sVvBcCjIkKEW6XOpzrlZzDfPMyWhtRTuHmeO98Wc9B8/lrwh7SbCiXyQ7EsY1vu3fs0bhenLoh0gljBsiWl8DiMeb/BAi8P7K/1C+2taw+kP61+yKFU+7HJUCVRyFkI2uCgukccVLhOg== 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=2DohWhvVmvtq8FzQqlSwBfVvo/5AOAJNi9yyjB25P2Q=; b=jUKPMPo/FQ9O88YMkV6bm7aTROzDE+ZIfeHGiz00IgE32XLbqgtOQoWCblPwXD0n09xKBQdSKae0WeKHASmtKiA7JMkIRtVYVkRFtj9DKMXec0dB5pHUDaMXH7DeZ/1O//q0wmPgR300cZgI4dFY0byh/2cQ3vsDCOSdbC9lYYXFMqIahLJW+ozP8UmKNIIYXgrpcvkGP008cXyCR5F/jWdj+mzdbyHOujqpmgxGTuMrH1P7sGdPTUc4GF13ikyGUX/EbhbYT4XBFTotk1fWfWDuE5WXvMdg0qbJzxBcGhBg59yDVmZAwj/sTyb0ZwVPCeG61MMoS3ezoI9JeLHeZQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:23 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:23 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 11/30] gpu: nova-core: don't assume 64-bit firmware images Date: Fri, 30 Jan 2026 16:55:45 -0800 Message-ID: <20260131005604.454172-12-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR05CA0005.namprd05.prod.outlook.com (2603:10b6:a03:c0::18) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 9d54dd68-f8f3-4e6e-455e-08de60638ddc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ci4tJBKd9kb/0qlrmTDnfOnS5xtc5kxFKFvf0/Pgqsm5mWAaRlVAQTg+squx?= =?us-ascii?Q?heYMRbD2Gf2dhmnS5eTJ3vXQejxFqGdvJXb9K0VkTV9Ljhq/BlvLbvZSCl9R?= =?us-ascii?Q?o8LCJzZNIWqOHRpNqO9q3LAGqlhRG6383ooQsIvYhUhYp27bIxv20/6tHczF?= =?us-ascii?Q?frb5ZnlpHN0rjXZ4edOizTxnzV/8WzQDYkkhQ8CavEqEpswYSHbKuA+R5HGV?= =?us-ascii?Q?ClmT8eVW7szV0wiB8N5UaWO8wOvl/Nh86sPOqLixJs0mgwz4M0y3chs1Pl53?= =?us-ascii?Q?VAgdQ4QHzJHEQhdZov3VclHg2Ztt0Vry7xS6AGHM74BgPBFK0P/6tUFMh1zc?= =?us-ascii?Q?+b/HYcfC5zU1mF3EAbGBmgh3QTZU2qOuSw3duJAVPYNLVgm7OWICUJR6yvhk?= =?us-ascii?Q?d2nZANebYewG2+koysVjVWF/A5AqpLQPYLzG9dH/vWAlzIp9V+T+UpTKH6hs?= =?us-ascii?Q?SWneEf/zJCKi/kfT7Cu+1jrgS6pkiZWGU/b50RH/vH6ZG57az4rp53hsLHa/?= =?us-ascii?Q?x6HoByu7hHnJc/rQ/sKhn4oL9PiOU/f7E4jdzo4FVeeuUpq5IXaUckgEOIpA?= =?us-ascii?Q?/YrmwIzK7uWtvPEONJ/cD204XqeZ+BT84ocBUYrVn0S7cl0RvYTno4OljcML?= =?us-ascii?Q?qBr5LaZKjP/VxfnVUGy6qmx2hzLMKO0uGEjdZY4SKdcRCIewZhB7NgsHMuiM?= =?us-ascii?Q?RtUoiM2c/dLxD8Itfo3QsXzmYgLvn2L7OtBVk/2jmY5lhFXX9V/ot5LAA7Tk?= =?us-ascii?Q?+8UI2XjFO4BbG09jiHyMcab7Mg98sahAGGU8enKsNdjI0Xww2TqzBSl8WmmH?= =?us-ascii?Q?IXzIiXrENjnOv2EO4UasDYDw2PrNHTy/z3RGS/jOAZ/s7m96lIlkZgrm2lz3?= =?us-ascii?Q?uoqTKTUpoKjWyef+VcPmfiESld5NP+U+7cXbdTvCTAU2rndyeLXGfTLGKiZU?= =?us-ascii?Q?4cQiw1GrQ5eVUFTfwhY8FX8lBf2Ln4ObJ56zZUbWbZsjrvCMTzDzXUJeJw6Z?= =?us-ascii?Q?KjGoFAomUE8GSwKe5gua6nK6lWuLCZyoVXITjnQDu5ZhwdBn7N8n2Px666Ck?= =?us-ascii?Q?Sc9LRUfr4YbJHJvdQqYbNYgZdSCJG0SSi/+6EjtAeiKkgNvymdbZI0+Gf1lH?= =?us-ascii?Q?/aNRi71jxOo7jwLiV3UBCptZ37UMLLU0XeVwQM61L/SwpsquPfEt/ocit3fu?= =?us-ascii?Q?8q6hYAqOSODXGdupo7r8mU8ocz8Jo1NX09wNaO9sk10pg7s/RlnfvY69lWQz?= =?us-ascii?Q?N6Umwdzqg/AOQj2jptvDCFuFIkXTfWeqVz4mPXWvnbbzX4TquYB9GGqwY7Ca?= =?us-ascii?Q?dRwtBKNb5OWhaSDof8Xqilq7rZKgq+QARgxdDK0wQreecYIFvJlMXM8iXVot?= =?us-ascii?Q?qBrm4t5K3ZLhfWpqnBgr8jxG15sT6VfoZ0ejyBfQlh/viqcg1+Q07Npypf4H?= =?us-ascii?Q?DaCRX8XRJxw6aRpaeWsNSHvpnxG4vulRh20rqjVv9sTYAo3xAyf6OpWECgN2?= =?us-ascii?Q?y0QQ1XWyX+1mfAAz9ivaYKw9kgyIJcbesFSJUxSbbagftY46p1xut7o/fILX?= =?us-ascii?Q?KkDORJiFLQxbUTmCBpU=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?IXtO++L1KIntai7jDonA/B7p6ARX5h5djaIQc+VsCE/g6CfRfDreXUE5ogoD?= =?us-ascii?Q?8QxhjAxmWZOBFMgze22qmP7ofrkyS/jHOGf4nVI4sTKmRWGsfQf3frvNhrHg?= =?us-ascii?Q?uu0KZZgK+RhaJMurXhjK4X/tm808XZ8ygNJvZdt3uK1X7Q8Fvu+CNLrdndEd?= =?us-ascii?Q?MUcmSvBFw6vuWZAqHxAMYiHT+Gsn0B3srYtZoTlkeQQCBQgji6CyIXv+4fJv?= =?us-ascii?Q?XTR8BCljODQj8n8PjNNNAEOvqoP5msF42v1hnXRK3F03gCJg1oE0Nfy3hucu?= =?us-ascii?Q?ObN0nCHn2vmYr40xNpOxqz0uxhe76wqIszsVHBUF3Td3Q7TdY5oooxCf82hx?= =?us-ascii?Q?UA/Mq761wpADYuAOnzwYnDmaq9oyAj1VU3oT8VI08m5zl3TXQ+PMoaFbELGa?= =?us-ascii?Q?ranK5cEdBerXvfcrMvkv3+y1arMT/gYheh19OhuNwQ0QAOrrQvFU+0vD4rmJ?= =?us-ascii?Q?u2GspYm6UZsiPOP9+0w9xB/+RtY1KjUuFltD+aGB0r7yPNhd49VK8uHJarw6?= =?us-ascii?Q?TzdpT7Jm9im+UP0qAVXYFgCsxAVqy4eAwItUrwdv4s9yNucMBsd57L3k8eaW?= =?us-ascii?Q?BlDTvEkl/GErHNN1NNr3CJV6AaxvHw5TV0XM0u1UNS6Y4kEfDoMLH8QdgRhl?= =?us-ascii?Q?2zfyo4xzrR8ALNlllgHUQ6glFVnUo4inANxX9zxNaT970wTl36hce+QwF5d9?= =?us-ascii?Q?wkEt8XVR+AQWYAbX6sw3k6THrGsBNVOq0AbkP45pgWz9Ip2X+roOVCAUOIq+?= =?us-ascii?Q?a16Un/lSZT7b6jdNpkQ6kQlNFasNyiGPshi9bFlJA4IbLcIrtjoV6EwsP+Mb?= =?us-ascii?Q?ProoXc+b6AQ2kqZLwNM6kh+AGozC3rdE81hVdsQPLsVc3V/gSJ8QFzm29/jZ?= =?us-ascii?Q?OENb5nFCjxONtttQ7+5haAaCAM8SXBM+nuYu8fik4+p0+pXQdV18zEKoc+cu?= =?us-ascii?Q?GwUnJyLVj/kATPyTwAd0rOjtS8WEHaB/5qRfjRqBkaDj9wdQ2CwaROYUvA7v?= =?us-ascii?Q?sub1bWgIJ8W00RLoNc5Zxx67bTCSx8cgkb3GakZwmiGUvtn1gbJ+Obs4TVzZ?= =?us-ascii?Q?dvSbJ2TD8FRLT78tcNCrmTIF69Eb77OgPty7XnfgQecUDjeyBQEalBdEfCqU?= =?us-ascii?Q?uSoL6S5seVUvb19ZtJnqWWc0JzsJeFZmIOtzJn8oblH1Mh9Sc7glJX23oPyG?= =?us-ascii?Q?oZYcIKMKZvPCYdQIKMz12PjqvbDHpSO08uE53BbAg/cBsum9Q8jgZsQoSDWf?= =?us-ascii?Q?F38brw7pJPDLqmC3Obw/ZfNIvH3Z45QbBmKEfytQczEzqfliuTuHtRep2KAj?= =?us-ascii?Q?z0qWqE8xGhngC455ygc880055iFeMhJnaODtTZO2XIJQCqrQVPtsfxcDdlgU?= =?us-ascii?Q?iT69566mx4tIjE70bf5/4IUu1XA6NvZYR9j/Vt9RWbQNoZxUD0JoAk9YY2v5?= =?us-ascii?Q?drNKJ38rAmnFRnBPWJiL1K2anWIhGJd5w6/D96nIJ+OIAH68ryVWyU32BVsT?= =?us-ascii?Q?SwaoPHm4ix6rgNVs7/E9/rhhTtQJw9rNA9zg5ABRbjFmMFi7DuhrQmwsousI?= =?us-ascii?Q?mxH0q5ls5L0l1C8FEHwu7QLeCWQ+UW484q+HchQzLPbGrnxrlg/ZQo7CRTIL?= =?us-ascii?Q?s0cZKPCcOzo1Rjeo5Imf+Kv/YNyZ7x5CupmjuoohI0fm9lKKnGB0CKUm4Gbl?= =?us-ascii?Q?l2Z6ipqlPiONG+n236vj0riYiliJjmaJ/q3WzL/fAumAtpVvrxoxxomLDcV7?= =?us-ascii?Q?x4SSRJpAVQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9d54dd68-f8f3-4e6e-455e-08de60638ddc X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:23.2528 (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: SMHSLs8FWho4AAoMGudHnsvWCFFRzNJ4j4ElRbundhlG41VgUeMBIGtqF+Gs5NERx2re5voI3smlZx95AdC/VQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Add ElfHeader and ElfSectionHeader traits to abstract out differences between ELF32 and ELF64. Implement these for ELF64. This is in preparation for upcoming ELF32 section support, and for auto-selecting ELF32 or ELF64. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/firmware.rs | 99 ++++++++++++++++++++++--------- 1 file changed, 72 insertions(+), 27 deletions(-) diff --git a/drivers/gpu/nova-core/firmware.rs b/drivers/gpu/nova-core/firm= ware.rs index 72cefc3142ea..6ed76a7e15f1 100644 --- a/drivers/gpu/nova-core/firmware.rs +++ b/drivers/gpu/nova-core/firmware.rs @@ -453,17 +453,60 @@ mod elf { transmute::FromBytes, // }; =20 - /// Newtype to provide a [`FromBytes`] implementation. + /// Trait to abstract over ELF header differences (32-bit vs 64-bit). + trait ElfHeader: FromBytes { + fn shnum(&self) -> u16; + fn shoff(&self) -> u64; + fn shstrndx(&self) -> u16; + } + + /// Trait to abstract over ELF section header differences (32-bit vs 6= 4-bit). + trait ElfSectionHeader: FromBytes { + fn name(&self) -> u32; + fn offset(&self) -> u64; + fn size(&self) -> u64; + } + + /// Newtype to provide [`FromBytes`] and [`ElfHeader`] implementations. #[repr(transparent)] struct Elf64Hdr(bindings::elf64_hdr); // SAFETY: all bit patterns are valid for this type, and it doesn't us= e interior mutability. unsafe impl FromBytes for Elf64Hdr {} =20 + impl ElfHeader for Elf64Hdr { + fn shnum(&self) -> u16 { + self.0.e_shnum + } + + fn shoff(&self) -> u64 { + self.0.e_shoff + } + + fn shstrndx(&self) -> u16 { + self.0.e_shstrndx + } + } + + /// Newtype to provide [`FromBytes`] and [`ElfSectionHeader`] implemen= tations. #[repr(transparent)] struct Elf64SHdr(bindings::elf64_shdr); // SAFETY: all bit patterns are valid for this type, and it doesn't us= e interior mutability. unsafe impl FromBytes for Elf64SHdr {} =20 + impl ElfSectionHeader for Elf64SHdr { + fn name(&self) -> u32 { + self.0.sh_name + } + + fn offset(&self) -> u64 { + self.0.sh_offset + } + + fn size(&self) -> u64 { + self.0.sh_size + } + } + /// Returns a NULL-terminated string from the ELF image at `offset`. fn elf_str(elf: &[u8], offset: u64) -> Option<&str> { let idx =3D usize::try_from(offset).ok()?; @@ -471,47 +514,49 @@ fn elf_str(elf: &[u8], offset: u64) -> Option<&str> { CStr::from_bytes_until_nul(bytes).ok()?.to_str().ok() } =20 - /// Tries to extract section with name `name` from the ELF64 image `el= f`, and returns it. - pub(super) fn elf64_section<'a, 'b>(elf: &'a [u8], name: &'b str) -> O= ption<&'a [u8]> { - let hdr =3D &elf - .get(0..size_of::()) - .and_then(Elf64Hdr::from_bytes)? - .0; + fn elf_section_generic<'a, H, S>(elf: &'a [u8], name: &str) -> Option<= &'a [u8]> + where + H: ElfHeader, + S: ElfSectionHeader, + { + let hdr =3D H::from_bytes(elf.get(0..size_of::())?)?; =20 - // Get all the section headers. - let mut shdr =3D { - let shdr_num =3D usize::from(hdr.e_shnum); - let shdr_start =3D usize::try_from(hdr.e_shoff).ok()?; - let shdr_end =3D shdr_num - .checked_mul(size_of::()) - .and_then(|v| v.checked_add(shdr_start))?; + let shdr_num =3D usize::from(hdr.shnum()); + let shdr_start =3D usize::try_from(hdr.shoff()).ok()?; + let shdr_end =3D shdr_num + .checked_mul(size_of::()) + .and_then(|v| v.checked_add(shdr_start))?; =20 - elf.get(shdr_start..shdr_end) - .map(|slice| slice.chunks_exact(size_of::()))? - }; + // Get all the section headers as an iterator over byte chunks. + let shdr_bytes =3D elf.get(shdr_start..shdr_end)?; + let mut shdr_iter =3D shdr_bytes.chunks_exact(size_of::()); =20 // Get the strings table. - let strhdr =3D shdr + let strhdr =3D shdr_iter .clone() - .nth(usize::from(hdr.e_shstrndx)) - .and_then(Elf64SHdr::from_bytes)?; + .nth(usize::from(hdr.shstrndx())) + .and_then(S::from_bytes)?; =20 // Find the section which name matches `name` and return it. - shdr.find_map(|sh| { - let hdr =3D Elf64SHdr::from_bytes(sh)?; - let name_offset =3D strhdr.0.sh_offset.checked_add(u64::from(h= dr.0.sh_name))?; + shdr_iter.find_map(|sh_bytes| { + let sh =3D S::from_bytes(sh_bytes)?; + let name_offset =3D strhdr.offset().checked_add(u64::from(sh.n= ame()))?; let section_name =3D elf_str(elf, name_offset)?; =20 if section_name !=3D name { return None; } =20 - let start =3D usize::try_from(hdr.0.sh_offset).ok()?; - let end =3D usize::try_from(hdr.0.sh_size) + let start =3D usize::try_from(sh.offset()).ok()?; + let end =3D usize::try_from(sh.size()) .ok() - .and_then(|sh_size| start.checked_add(sh_size))?; - + .and_then(|sz| start.checked_add(sz))?; elf.get(start..end) }) } + + /// Extract the section with name `name` from the ELF64 image `elf`. + pub(super) fn elf64_section<'a>(elf: &'a [u8], name: &str) -> Option<&= 'a [u8]> { + elf_section_generic::(elf, name) + } } --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010034.outbound.protection.outlook.com [52.101.61.34]) (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 8022B3346A6; Sat, 31 Jan 2026 00:56:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820994; cv=fail; b=AS/fI7lKMt+kbtbFV0iah17qFXlVv10u32s0nKhZqR61HTMbzYumFHK9fc5QnAsxNckaUvBPOzgx0T9pWTNCk/hyzlxxQontGFCRcEcntkmCCFzLarI72WTnk/z8NapCD/1hRU6vILBsB9dMT1B0wOOqf82a1iIYBrLTSWOLiiE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820994; c=relaxed/simple; bh=u4nR14e39fGXCC11GAFC88qHOqv3MAvODLTG8YbOepU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=AkHTRXgGQ+1sh2UcRSKTufJ7MHJQw7cYFwotzq3B47XkiaJgufJcyNREDgf5L/xdINavneFCiedL/wM2Qcu8wXoFor655u5dhy09Mgo9fibJE+WEE30AhKnXf5ogd6z2LsPvg/TbIlHGmnqwuZrMhReh4cclqlaz9kLBfVZLX9M= 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=LUL93KWF; arc=fail smtp.client-ip=52.101.61.34 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="LUL93KWF" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RFIWt13Lfg2LnyIaz/qkMErN8bhm4Oawfk9TkMDKxDPcruENKt2loCkgNNxNKjwKBOrlEZBq3b8aJDoaqWQYQyGyBV53N54pxzHcMyd+X1+DMtTZYtE/QcBwaXu2tg4TyBGwaDMLhJBInf4S14GN5F3Mu1JE7NeObAX4b/JfAmXDeBKUAXEjdrX8hgTsdEH8N9ASc2iq+Ys6Y6jVEZUBFtAug51X8XCg2VYQS3DXe8EwM/7f/9PZ/RMLMCp1MzaHL8mDgi8Bz7nJN9v9UAPkT9gfGikYd3GVkmIyCx102MiKU+1+5w2WlG25e+tmI2f6Qkg81Shd1HJjXCZoNNJ2Xg== 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=F2ctQTRPRNQFLSs6BzzA04aY8pVDaH+92cgcLN/10a4=; b=cjG8FR9QZR+PmvuROiEgxl33L0PtxOYa1hXel2lUxVOwAVGhVvPChlBIswNWoV9/SaKuYHBWvhQXaoOTfVnifZ5y9TrfY87Vb99CZcxX3xQJqGxrdncecoKgnrW2B0W2gX+M/ht0EDA+CncZUiWd/5ZEjUrcfPkPmZJNkgN47/GlmN/uGM14uJ9ORRVyPRNz3hnf6fD8nAHC8s/iNKNJSOiuWtavsQz6ro8L0Ca3CrJ5dsavfbI8+VHPBSVXeQLeG6eKWDlhA5M2Ouc7NoOrMLKSNP4Fwb6aECLOMZB5DtMAIjuQDQz+vKXlLksBkQDmLewiVpk4Qn/MHTpi2sSmNQ== 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=F2ctQTRPRNQFLSs6BzzA04aY8pVDaH+92cgcLN/10a4=; b=LUL93KWFkN0JA9sxdy+kFTTCoSPWpDmbiPEgrkVjq8FsSZIGX5eOY1S0wd+cfpJHuGZHewnXe19DYLcfEj14OjIKCL6dHkkGcrhCPkXDYnts7IxL+m8++CQiQgehvxytV9/aFVqp/7mWziQqjOgruo360ERlx2Dg1MqX4mJNAxFlxhS6xX8/bIqE9i5AnPKtVB8nDW1jGeZ4t8CjiProQ5UDXnchInR8SPEdSWdtv8WWR0CEPl3/sBONxTWR0bnifcahx9cPS8EE4dS6byICjXrfQSPm3Ha60GGoNDOiJAf1pxXBbkkt3OBiZ/tAk0NqcCEwcGOekyPd5rQs8INexQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:24 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:24 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 12/30] gpu: nova-core: add support for 32-bit firmware images Date: Fri, 30 Jan 2026 16:55:46 -0800 Message-ID: <20260131005604.454172-13-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0347.namprd03.prod.outlook.com (2603:10b6:a03:39c::22) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: fafe95ae-4b36-4f14-69f5-08de60638eb1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?PkyzbJv2JwcCZgT9hm+sO3BOewpyG47HDvD3E0d0pgXI8cD8/4tXUzb9azEU?= =?us-ascii?Q?EYLBcoSPuCHy+9F9h42bljybGermUgU7343k3QCHvFO5Pu78ac9NZaO8iLHR?= =?us-ascii?Q?+mtHrxP1np4NKHLRVXSLRzQtFNd1UMWcJcz31zaeotIwjs3SzO+pVDObvUnI?= =?us-ascii?Q?9A/0zXZRG1M69oHKxeZz2PE+Wei8uFj0LAtLiYURlBhLBUkkj/YQAUhTsG7z?= =?us-ascii?Q?dcqr+6lhsBhO7pAois0H7hFwDTUw+A5XIkPH+Om1stAMyemKSA29+ZULnJUM?= =?us-ascii?Q?HsO8cqrlCNytbIiTRpv9YaJ2uCVEUEapJ9D8W0w1QATzDjknYY800JAf39Gc?= =?us-ascii?Q?tDkcxGB/qAJJosdF8dFNtRoHB1eGGmhcMdudA1pq4msspp+xZSy+gfepUQtt?= =?us-ascii?Q?x+VipTRPYk0aE7LQJfVRASAb/hvdAd66QmqClfdL5OeYT5BNdr0aUJP71iSI?= =?us-ascii?Q?FswsWRctsQtENSsQY2OZzVV0qTiP+TAKWJiJbmt4mPhftmvmTxCCZk573WR/?= =?us-ascii?Q?H+X5CKKYlTGTsh/kWitusJRzS02Cu0b+DnS0sWQBVcS8pSkbQQnhHhq4iUEG?= =?us-ascii?Q?NRAaM1/liTJWBQMMjiuUWE0jv/rBj1IdoB6qrDXmRlVu0JxAeGRcrJgrId7X?= =?us-ascii?Q?CzMiVhZiUHLA702z5AiJR3Dn1AM6RgIYLKheZ8WOEBy1FM63asHBCzS3UPQP?= =?us-ascii?Q?d+KCpM3MqVvyDvVRb3gJuB73z/fOSWXZjduQHxW/C0Ignhd4dpzgF+R0R84Z?= =?us-ascii?Q?BHS0mAcbzXqZWFUe+JrEsg9aWEsIREkYmWC/wEz2oEAG/5gX+GO/maWd7g64?= =?us-ascii?Q?rso6zHtzWKe6FIC1Z8kELWZA3Nv1/Zz+Wa9D7UF7HrkqWEJpCdEFmSqUlipe?= =?us-ascii?Q?cRp0jnx+0oATw2WzwFBxBgku0iNcssIs5eC2CSJxDD2vOGtBjcTfLMF1FZ3n?= =?us-ascii?Q?k/5GFV1IGyVl7w0GdfSnJx4iFiTxOmA9qLF83WEs1Cz2gO09Oj8skFa1MIFP?= =?us-ascii?Q?aeC2CBLwLSK+ydL0fBB2Ms1b6ijIcCnvomgC3C4X8S57r5MvGs9PD4YwDJ1Z?= =?us-ascii?Q?XXuODjBlZRJIjxWGmZQacUkyFmn8gVk66pGUQMxE9soNlLojv+Oc5j83GDoj?= =?us-ascii?Q?y/hDU8n/TjQXSc9bMIXXAb+3xuy659v6fKx5zcipBwa4PZDZRjxxy/sePslS?= =?us-ascii?Q?Jh81B33szfER/YjoZ3IYA7U3oXni4fiHfsQYnPqbZ3xE35MQHKvIAdsM5yqb?= =?us-ascii?Q?EspCMeHdBeIGFXmnY0RTshWHwOmaWoJkdDr+NCJZbn0nxt1yxaDDhMsHaVQX?= =?us-ascii?Q?KQjK9KBZiPnlDwzXKr20/orukbiRL4xhZAxcRxxrX3/xx0GqszbRrC13lMms?= =?us-ascii?Q?zsRjO33dswj7txISa1YjcAwUf5rVgU4Y1e+oSWo4B7y6rR+80rHGgn8LeJ63?= =?us-ascii?Q?fPnFozy1rU6vmInuLwgQQwy60+eEBGLL/o3AoIK0tPpeLTiqSvnxKXWSghi2?= =?us-ascii?Q?giwRjqTQeEMkWCasLpXxeLd3nlYz5ULfcnW8FWYAc9PVz7OsJtvTDOO3F1lw?= =?us-ascii?Q?11fHEqQDlcbohLrlNLk=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?kORN/M6zDwezvoFTI9ynFvhyMiBzdB0lrccLp7Bobk7udIp3rvUxQqMYVu0q?= =?us-ascii?Q?kWY4Aec3z0R9/wZRCuYbeT9uFtN4wgEjjvz915IgKgmRBl6uNFPzCHq5Khgf?= =?us-ascii?Q?lsqgYol7gU8TZtRo57Rj2JAxkoIWyhnLkAwu22LU1RPx1avowu1aMViz9esc?= =?us-ascii?Q?pOKi0GcBbfDfZ+bCinoGxUcMi0eCtgzEEqDWej+eDovyena+8q9U3neGZYzH?= =?us-ascii?Q?nzt0NbYTcC+dN6yuJ743IganrnPz7VJt1CWj0zR2RTn9HEe1pYS/1bPxYqaC?= =?us-ascii?Q?KUBvh4TRKNmpBtIPi1ONzfUdVRs5/FrwMZFF+Z+dAfAQBalKkoj2QJW+HesW?= =?us-ascii?Q?GZB6WKBvJBRfCA1YkFEokgwj1IvoInrxXB4F5Ph7rtyM0Nh5M0abpXBPmSZA?= =?us-ascii?Q?no10fRRhDQMrVxGfi/DyksunDRPYITmuUFXC/vh2vUVBUfCJ4010FLsLvRsM?= =?us-ascii?Q?1lLpHUp0QCdU6NWqyVnniw5Ls3IFaAoT6kucfaP6JBUeeoVCyzNj5gR3DTlp?= =?us-ascii?Q?laA7dsUgj86U9j8iXi338p4pTtlmgqmPyX3eOk49r3HwuBkaXIg4beoFQXND?= =?us-ascii?Q?+K8o+iVuuB5yHmGEhJ4VhJpxK6W/XxaF8ryUv7HuGxfv4cFaYzjJ1xcq04oI?= =?us-ascii?Q?rx4/5Vv3/KNs7NaeEmPlbhdRk9yGsXtuWnDBxSlX7un/2Jkg7MC1KH/FKDUT?= =?us-ascii?Q?q/t72BRFo9nrWyHeec7KcZqjV+sj9bPpWmg2V4GkkOeCepmGwwt2zDcSTy7y?= =?us-ascii?Q?oxFKjnhoOp2cD8Rr3wB9/53pFrlm/YpniKvMG3g/iTpEIEpz1P6C2ktrlsH/?= =?us-ascii?Q?6SAybIXMGfPTIbFA3AS82nVcpyEwLvsFwU+pvtZDZyMJr1Ri8ecbJHsMbY0k?= =?us-ascii?Q?efdurHXg2bxYLcGWSUVqj5f+CzfXQL5akhjyfm4uK/GVmTOT8HY4sSRLDFgw?= =?us-ascii?Q?e1+2Ho1Y1wZNzcLkti22Z9829CwvOboZ31EG3Cz+8Sdx1uDx2DaFuMc6P81k?= =?us-ascii?Q?Yr5laUzeBMyYhrf7Winllb3eLLzapy6KxKdDvmAg1ZfmHuJcFNigjZoTRYP+?= =?us-ascii?Q?h0olej0iUyNoDlcBmXgB0bqGJaxaATSMNXMxudhcy68swoNOtSYgFzmG3qE7?= =?us-ascii?Q?38BwexijxsbraZ8ZvsH8swesoIuDJR0bRuLFWldIjJiKlqCBe3NH9Rf3FCpD?= =?us-ascii?Q?N4npD2VI2QemTomAw24fES09UhNDY6oGwaA2xVd1SpXfwwfSUf2XsX/B33Tn?= =?us-ascii?Q?DBdK7Jv1pslUyxQFQ6NgnW4Z/KPM6cMKuI1x3/1Ra2arZDC03L85R0ItuIYx?= =?us-ascii?Q?gdMVhI+i/qendgJXmwAScYEr+fEw9ddjCeDHlXfWIv3Gdjcn7T+v/SUM7Ett?= =?us-ascii?Q?2K6c4uVqRlf17nfqdwl0dZcYFSmywJ+ZCXykc9Jcqut76fZ+k6nGy5a8B7hR?= =?us-ascii?Q?c4T62fCDjLg3uVsNXMmV7If/8MwkV688wE8lmZoMcG1aW0y4TngDteclFqk5?= =?us-ascii?Q?B87YXwGd7Nu4Fw11o+FWxbTV6RqnQiw/M1dZslIGUFbRWerhsundfapHSvMl?= =?us-ascii?Q?d3PtNBrQQqkcAjL69u2vAr75W9WMK+4qe6fsD8EfVFOIXm0rArtuXahqq24T?= =?us-ascii?Q?X/4rB4D1QV80sgIpLD8IhUzgsbdxZ+R3ru9n74uHEpl7Az7zjOYmQ2ZFKExd?= =?us-ascii?Q?WAeXN3csDCginz9tSj3qP8HtyK7kmgLEk24QPbzedNvSI4nZmbO6YUwHwEIa?= =?us-ascii?Q?g1Xbk04EQA=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: fafe95ae-4b36-4f14-69f5-08de60638eb1 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:24.6773 (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: 9cGhJ4Lw6xsEYvz2rni5xqRnGUbYnsGJ1voG/7s0IImaEGqRoaFI5+xmbnaLTGFhunek7zRMSlHP+zFkZeUnSw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Add Elf32Hdr and Elf32SHdr newtypes, implement the ElfHeader and ElfSectionHeader traits for them, and add elf32_section(). This mirrors the existing ELF64 support, using the same generic infrastructure. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/firmware.rs | 46 +++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/drivers/gpu/nova-core/firmware.rs b/drivers/gpu/nova-core/firm= ware.rs index 6ed76a7e15f1..5f3f878eef71 100644 --- a/drivers/gpu/nova-core/firmware.rs +++ b/drivers/gpu/nova-core/firmware.rs @@ -507,6 +507,46 @@ fn size(&self) -> u64 { } } =20 + /// Newtype to provide [`FromBytes`] and [`ElfHeader`] implementations= for ELF32. + #[repr(transparent)] + struct Elf32Hdr(bindings::elf32_hdr); + // SAFETY: all bit patterns are valid for this type, and it doesn't us= e interior mutability. + unsafe impl FromBytes for Elf32Hdr {} + + impl ElfHeader for Elf32Hdr { + fn shnum(&self) -> u16 { + self.0.e_shnum + } + + fn shoff(&self) -> u64 { + u64::from(self.0.e_shoff) + } + + fn shstrndx(&self) -> u16 { + self.0.e_shstrndx + } + } + + /// Newtype to provide [`FromBytes`] and [`ElfSectionHeader`] implemen= tations for ELF32. + #[repr(transparent)] + struct Elf32SHdr(bindings::elf32_shdr); + // SAFETY: all bit patterns are valid for this type, and it doesn't us= e interior mutability. + unsafe impl FromBytes for Elf32SHdr {} + + impl ElfSectionHeader for Elf32SHdr { + fn name(&self) -> u32 { + self.0.sh_name + } + + fn offset(&self) -> u64 { + u64::from(self.0.sh_offset) + } + + fn size(&self) -> u64 { + u64::from(self.0.sh_size) + } + } + /// Returns a NULL-terminated string from the ELF image at `offset`. fn elf_str(elf: &[u8], offset: u64) -> Option<&str> { let idx =3D usize::try_from(offset).ok()?; @@ -559,4 +599,10 @@ fn elf_section_generic<'a, H, S>(elf: &'a [u8], name: = &str) -> Option<&'a [u8]> pub(super) fn elf64_section<'a>(elf: &'a [u8], name: &str) -> Option<&= 'a [u8]> { elf_section_generic::(elf, name) } + + /// Extract section with name `name` from the ELF32 image `elf`. + #[expect(dead_code)] + pub(super) fn elf32_section<'a>(elf: &'a [u8], name: &str) -> Option<&= 'a [u8]> { + elf_section_generic::(elf, name) + } } --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012046.outbound.protection.outlook.com [40.107.209.46]) (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 75C893376B8; Sat, 31 Jan 2026 00:56:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820996; cv=fail; b=u8gIJ3f769MyNeFtChbLzAOQRRMgNSGqWBeexbvkFYUGRwSEtLVVHiw70PpsULT18gHpqGL78xtk6nLo7mOPu2pWjdlHGd2CozImNKVmtNzCPScRJiOMMv7qHNi4KK0NY3QucVtY5noJuuA3ipdV8xz5XXaNb3VZukUXySD/6rU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820996; c=relaxed/simple; bh=J4WXpgY6uMRkiOhlXNhDo26L6PIWMj/s2kHxg+n25xI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=evn04xUUK2lvd92b4FIJXS7BGkQwpngbJ131IxiYSJg+tYzg80sxTYahZHxM52MhXheHP9PW4DUtCO2rUHBCKqMvCbGMtNaV9Cn6XywVgqgHRKztQe1utjivBbrMRNEoecmklYKvsscuUDewyxTTIXSdox4FLW62Ft49nc1+QXk= 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=NrqffYNe; arc=fail smtp.client-ip=40.107.209.46 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="NrqffYNe" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mUTUuyVYg6NB3a/B8I1dE9onT6QTonCHfF95vNexTPsFZgwpJ8SWzpn/5aiwvnG1myuKT0u79VMJ38mjT9o9GHOKgmyEQUMXxWcPw+Lq8cAB5NaPbFhUKOM9DbmYslDkBQWXAiDo3+dAEDewgxUDOpj1hyxhbHyYFRIaAqp8+wORVwgFkxIAsg7LuwQvlEHKvbekiLI7t897Z754lg2ROG9A2AnVEFh3lVGLB04K5K4tGHnVN9gquN+K+OJxA9esgo2JXlFsuOdaREOrlDyUzsSzYRUD8GEgwyc3uLlxOJviuJ3Yhr6BCDyZomoTfCPB1deadxHydmlK46oxU+k6Sg== 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=iME5cvqDsISuGSmZhFJpmp3oedbFOWxLTWd0vZ4SU8E=; b=pJZSybnXMIJE+gR1P2AVtP6R7h4vx/oA1Rh6LO3sto1xlwFPIGMo8mJL6hPxZQ+SFjpEPtpeISHeVFrl+pvIXEHULqHnEowv/BtBNF0C1Cze4m/6Nybp5aW6UzjrwGX8eWUy9J0RC06SmRF6gdD/6hu/vo0b2CSxKb6GwDv7bRRU5EDoYjRfeKE31qdJPR/JbxHB+eGqQ74rmuUju078EIcD15MUvddQ81SjX26rXAjmsn/iGMrxuGi+yhnq8HqHU+MnI6GTCZo2vv6XiUUuxbGiO9cFRmQjXk6dbIZzpkLHDWU8V3YbhbXzKXTWh2H29TcxVzGz8dKWThFywFBrAQ== 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=iME5cvqDsISuGSmZhFJpmp3oedbFOWxLTWd0vZ4SU8E=; b=NrqffYNeZri6OYhK/rcvJSnf7SPKsXODh9jG3F13La/4yLzZeR84atQGVWuVRUuzcS6o63E8dWsQbw7KKv3klKNKG6LBWEK4VyASARACzTBtRVccPqGWYKDQGiVYTBHJNnMYKC5LxI8vDgq4iMSszY+0UJQMfEMK3pEVEUpTdXeb5+AN24iciGbtX+lOO1plAsarsQ3ydLb1B96OqbrefmYkM9aDzO2HGdN9IDeoVDr5xgFRTmiuZopciBD06bNhSGqcXUklCjJo6J8EXQf5b/5N57CsG/LC5Owttd21wnPJ9dW7qQsuKU+E+1FPJx9OmTKLRaEH/pO/2e5Xafu5Qw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:26 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:26 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 13/30] gpu: nova-core: add auto-detection of 32-bit, 64-bit firmware images Date: Fri, 30 Jan 2026 16:55:47 -0800 Message-ID: <20260131005604.454172-14-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR05CA0039.namprd05.prod.outlook.com (2603:10b6:a03:33f::14) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 503f12a5-dfb0-43f3-50d8-08de60638f69 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?QrshJ2E1q3BmSjtsqBzTCWq1SpoIkB8LZlQ6anCtrPHIvznn9pwMLY12E1Nd?= =?us-ascii?Q?CBm4uWssOrSDkVhTZfYrD99sf14N8q4dYhJLcFztg7Z8XbT9rhQZ0hvaa2Zp?= =?us-ascii?Q?ULS3JrspRKycpbt3AzkYd6NTOdIoqQawWAR3sKgqjGwv2jX6GFo25ehUuH2z?= =?us-ascii?Q?R1+uQ4yDkUioXSWwV3QoComC092NXLwGfdVnkpRmoElGY869aU3BpDF/Y1DH?= =?us-ascii?Q?FO6kPkAAHFJtmAq+zuv2gK8La5TT9DJUkg8aq2gENw1Q5wFOcF0QQNs+6XUJ?= =?us-ascii?Q?tA399DPcfLuhDDVcyaNODLvlCfN6QAg6fylbZ6+ojUwu6qOKOSQprskZe1aI?= =?us-ascii?Q?b0VGx2rCm4Yf6f+IAuKCtSDeAOJNPp0fz5FyHtFjziY80gDGsyc3F9PsSbsh?= =?us-ascii?Q?uVNHPmh0X+ZcbkzxbreJC6D/BtKcYe4nTCWxDlP5zM5nOOmzPGpJkPPIDHh/?= =?us-ascii?Q?ieGv1A1k+pPvxMQtbhqKhy56POrLOEc6MFQnJVDhGQp/ngd/zFukqbV7XdtK?= =?us-ascii?Q?lwgqDH9gvAGVWiTmtj2BhQOBFYnAmeHPaD+yftUkkcwORSlUmQA/M46q+B3h?= =?us-ascii?Q?FNWam6I2jRLUPUtF8F6ie6kOSrlCwBw6045dwBbX9s5LVig3ryuR7UPe2UDk?= =?us-ascii?Q?HI3WqIKDqo/X5ZaHZ41vKljxjXS770ICasChsaw6BGsSF15gkuqABhqqxQz3?= =?us-ascii?Q?JDH5TqeGj/qS8R/nlg9POLnGIXCYteHg8GKeFgImT0w+OgShjksQA0m2zu+M?= =?us-ascii?Q?2kQFpOpzjSvoPxu0hXIfo7w8/BsJp6J70kwKeUAwQy81bWWSz+C9k+vyjG7c?= =?us-ascii?Q?sIKaWrjk2CXlBCgexZcS1Gci9PgS60l/QtQ17XZFXdd9P0MCRHJOb3SwUX2Y?= =?us-ascii?Q?Sv8lSeh2TdzqsFQPL94pwoAlg/9SQzFoeP6kgvaTj1MfvSwFSC6JZjZNByd5?= =?us-ascii?Q?3zEvjJIhH0B52bx99UD6RGFIunvpPeZYSUkpm2mG+WkrLFMWv3QSJw1/TUN+?= =?us-ascii?Q?sjD/NG8LMKHEY8Y/s9puZ0CZIUpN5eseSlv5jIibfUaDxBW6DRWim5P8Gj8B?= =?us-ascii?Q?UcWVMogyocTuxreppug//uRRc3Em5RCJhI+6kpwKXNEJJ1VoeLBIVVqnW67j?= =?us-ascii?Q?mG7hQdSqtnWhWU3GFtCoFj4298L5P1/fWUDfo4RG3mE6vt3Pej4OTnWK+Ex4?= =?us-ascii?Q?PP/gZ1WZEkhIVoNJAJZfbGcjrWbLy6pYajKN4aF2ax9zNSVYO8/SOTVxU6qu?= =?us-ascii?Q?3img9GnkykD2vqL2ULm2BGGtF7ub/JhlxiUtbqzZOTS92XkFX6x+c8g33dqz?= =?us-ascii?Q?0XblwjhlCwS1eae9nCGd0FjiYib3xH6/4iilcw/AwBHfQLwWAcfqdTtAIvT8?= =?us-ascii?Q?PoFKdnh3puaJAkFX0vGxt/tKPCQ1NwQJTb1lWi2IUZULABIxE/5A4RX/oz3G?= =?us-ascii?Q?yh/P9Xuft1/le9j1hyAtO8jjePSeRbncLQowN6weR1lO02spLABhMc+SWj9L?= =?us-ascii?Q?k/BoG1o20XqR5iHAMyzLZxwvG/og2In2UFNeki+G4z9M8/3zHthCv3I6q0AJ?= =?us-ascii?Q?HMvMr2mk2xZAQ/z6AsY=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?YoQlmzXSPamBIa7ekMDvXnYo7uuS2JdyGQHP635OgOseQe8nYeHy4QhexD7H?= =?us-ascii?Q?8spwRtZeJWRbSjbEEDZWgsc7gVoZw1E7DylCSMenYN5WOU7xp6N03Ibf+13d?= =?us-ascii?Q?FdYL77DcD9qGrsN6auxSSknLnwBmWOKHb2w2snSBkzyjzU1FrTJGaykvacux?= =?us-ascii?Q?75QPlI4DTJnWKQ8ZiWRNljGaS7d1pZ2qsga2tEMceDGzJfLz2DlhiA2lAO0B?= =?us-ascii?Q?knIo3Pt0IEYscX0HYl+cbavxl8pjRwlAkoKWoUEx38+ZUAFeUBR6U4p3xMGN?= =?us-ascii?Q?fz/CMiLROVPlT5zusJczzrTHUWzGGCaBtIQcEE1RuxPyroWQWAPIn5ug2e9Z?= =?us-ascii?Q?1RjjWIhirKu5hGQ0bx97KMoua5xFN34fs/UREycTsO0lPacEdVgZQn1hv0Iv?= =?us-ascii?Q?S8i2pYbyjHE8KG94vOVVPXgCl/wI6r7qym465V3/5ifaIG86wXuiomD+i1hF?= =?us-ascii?Q?XD5YPLDOks5jCCDT5GieFEwPwXXk2Ht3J7CYXphUqolpN9yHGEXkCBUgl+h2?= =?us-ascii?Q?KZ1xcvwfeQVuVxb9S45SByMfYStr3i0G056VmLH6ggcwkXpIBz3fiRn24LVS?= =?us-ascii?Q?QNsv202azwjBXc7Tx349eK7M25TSpe7/cmiX6nPUDMNCVpJOfSvQ+AxMIhSH?= =?us-ascii?Q?MLb2qmDjx3d0InbJuGarmmd9qDJUBat9bxdif83C/ee4tnNKCMlTevp5XpJx?= =?us-ascii?Q?6gAImwxA1Vo+58fC+/EloJICrGRWJh4E/TWh24KyQg8pr/vIn/YwamGqWSNE?= =?us-ascii?Q?UV1dDspEWPvlAjrQ8tnmXVua9ezTpMzs25uA9ZNVnU6SsmzuWSt61WrREm4G?= =?us-ascii?Q?eTPpbFhfjsjLI//d+pr6PVsr/rQrRMd+T0S73yq8PFMdhFCB/vJRcAMZBPsz?= =?us-ascii?Q?M2OBoYjQNmbs4gFPllX0UGW1Ifwhn6n21lYkEVnU/6xxInQMZrVmgWi4Cjlk?= =?us-ascii?Q?HDuGMUn//e8W3fERIf8Gt+BRMKDKfuVSOJha0Xxae5pPnVQwFABu2EI5wR+v?= =?us-ascii?Q?Jqa9RcWx//aZjfOJSCPt3BuQ50sb1mAzPcsszCmDlWjGyePCZdxmFfAs1LP1?= =?us-ascii?Q?6Z6Hb+yAvmdFcN0CwolJPxSQ7KuciH/MUWeDvEGmXLW/zX0b/qW9GxeZzXuB?= =?us-ascii?Q?oAvpej2w/VrSloVlH+44pabw2YF5rAEULHkcmh1OWE8S0ONW2qqz4Z5fVTxJ?= =?us-ascii?Q?H3QsxqpD7kWdE7qE15xxRdCQZiQjrov5ZBQN+2hjj32XGhfxabyVYrE1ram8?= =?us-ascii?Q?fInM3dRvLY4iG3lufJ1Zwmn8WMyvzY6A1QFhNn5m0oN67v4PNglUWZv/3n6Q?= =?us-ascii?Q?/v3zvU0BtXQfE9ae8oyygWIA04kaI08/S0YnbXaJFUAuoCY0U0tECp6OF+fn?= =?us-ascii?Q?KN5BMkOwgT1V1D26OebdSmjkL1VJJ72G/HSPhnyzNLbQGG4X/r9ack2Cs9B3?= =?us-ascii?Q?gwnHRMfgvhjQIBKA1piyaP1/lPVt/kJoJWsLLM1rrtASv/0C5Fg+N8D14m3O?= =?us-ascii?Q?vyf+2c4HFnUwEecqTqxHiWF6qYmh6OQXMSsv+1Aln5ML2zYpKOhbSPZaQku1?= =?us-ascii?Q?dpKCKsRwnlIul6mtiuUdSQZ3BxojT9CE4B/aVXLVUg8+WjgolWrKHHd/Ga/d?= =?us-ascii?Q?Mmfa1yPYuX/aKU4gkgGZDUrko5gq0iXXJgncYY8YzJ6mG9Frw9gyNgeVKcvi?= =?us-ascii?Q?OzkcE6sHR02uYL4e0zo1WulffYWjEsmPzyF2C8bcFFs5OaJ29GNTHkc1Rk2m?= =?us-ascii?Q?aMhyNx5DfA=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 503f12a5-dfb0-43f3-50d8-08de60638f69 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:25.8791 (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: lWszKvk+1qHQVGRh19MqfUOXoaskolOcG+CETYEh8ctKTKujo15q6OAPgJLpQ0BMx3JH1IKmoHIanLi4GSSc1Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Add elf_section() which checks the ELF magic and class byte to automatically dispatch to elf32_section() or elf64_section(). Update existing callers to use elf_section() instead of calling elf64_section() directly. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/firmware.rs | 20 +++++++++++++++++--- drivers/gpu/nova-core/firmware/gsp.rs | 4 ++-- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/nova-core/firmware.rs b/drivers/gpu/nova-core/firm= ware.rs index 5f3f878eef71..43a4e70aeedc 100644 --- a/drivers/gpu/nova-core/firmware.rs +++ b/drivers/gpu/nova-core/firmware.rs @@ -596,13 +596,27 @@ fn elf_section_generic<'a, H, S>(elf: &'a [u8], name:= &str) -> Option<&'a [u8]> } =20 /// Extract the section with name `name` from the ELF64 image `elf`. - pub(super) fn elf64_section<'a>(elf: &'a [u8], name: &str) -> Option<&= 'a [u8]> { + fn elf64_section<'a>(elf: &'a [u8], name: &str) -> Option<&'a [u8]> { elf_section_generic::(elf, name) } =20 /// Extract section with name `name` from the ELF32 image `elf`. - #[expect(dead_code)] - pub(super) fn elf32_section<'a>(elf: &'a [u8], name: &str) -> Option<&= 'a [u8]> { + fn elf32_section<'a>(elf: &'a [u8], name: &str) -> Option<&'a [u8]> { elf_section_generic::(elf, name) } + + /// Automatically detects ELF32 vs ELF64 based on the ELF header. + pub(super) fn elf_section<'a>(elf: &'a [u8], name: &str) -> Option<&'a= [u8]> { + // Check ELF magic. + if elf.len() < 5 || elf.get(0..4)? !=3D b"\x7fELF" { + return None; + } + + // Check ELF class: 1 =3D 32-bit, 2 =3D 64-bit. + match elf.get(4)? { + 1 =3D> elf32_section(elf, name), + 2 =3D> elf64_section(elf, name), + _ =3D> None, + } + } } diff --git a/drivers/gpu/nova-core/firmware/gsp.rs b/drivers/gpu/nova-core/= firmware/gsp.rs index 173b16cdfb16..f100b5675b7e 100644 --- a/drivers/gpu/nova-core/firmware/gsp.rs +++ b/drivers/gpu/nova-core/firmware/gsp.rs @@ -105,7 +105,7 @@ pub(crate) fn new<'a>( pin_init::pin_init_scope(move || { let firmware =3D super::request_firmware(dev, chipset, "gsp", = ver)?; =20 - let fw_section =3D elf::elf64_section(firmware.data(), ".fwima= ge").ok_or(EINVAL)?; + let fw_section =3D elf::elf_section(firmware.data(), ".fwimage= ").ok_or(EINVAL)?; =20 let size =3D fw_section.len(); =20 @@ -162,7 +162,7 @@ pub(crate) fn new<'a>( signatures: { let sigs_section =3D Self::get_gsp_sigs_section(chipse= t).ok_or(ENOTSUPP)?; =20 - elf::elf64_section(firmware.data(), sigs_section) + elf::elf_section(firmware.data(), sigs_section) .ok_or(EINVAL) .and_then(|data| DmaObject::from_data(dev, data))? }, --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010034.outbound.protection.outlook.com [52.101.61.34]) (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 B387B33A9F3; Sat, 31 Jan 2026 00:56:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820997; cv=fail; b=tYE71dkbtAr0RNXC4V5vIlOxGft3Qjg2QJwfigzT0vmuGAzLEyem1icoZ1o1xd2vecAR/PNWdpa4mAWRYCd1y8Ma6zv6LkbEqiuLF21wiKdoZTzEK2iwi6GEH1EGdYl2mY5z+P5mnihWtVpa9exCU8ypmAYD9Krp7tABlBeel+0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820997; c=relaxed/simple; bh=YpqpMGz+EW3xIJY26BGDXnsS3PguYQ5eIZhH94S8Fok=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=KG7Ijwcs14wyU6rNjdOov1xuEDhdT9pzGjJBlSQnFlT12px/nxret6PglW0Dtm4iTN9V8cXUQ8batzoImCBANplnMl8D1QAKntu0mWB4bRC4Sw3KfZZXetK0p9LYvYuNZbnMAp5zYYr5tdIkgTJ/RqCD63bHMnfl2wwv6gReruY= 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=bG8g6eXZ; arc=fail smtp.client-ip=52.101.61.34 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="bG8g6eXZ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Rggx7LoZg6XpFjfhvv5dtWAcNio0oN3bU/8cFdFKgLEUIujPFqincwCZNOgoqqCJe3qmCn/pkxXA9AYlbMrKes5l/i/MW6Zz+gxgL0D3lydWGuKqCoBXABk/P/BSUeet9rbVUtkGvslXMA/THIoIL/brYRB6DUDr4NDSK7JQ5uE0zbWzQdw2H+TipTI+XxbYbyju/DEBwXHsio3LHTBUj6FiV47C1o7jXvO+dynQx6/yBlI4a4rRq8qkup/LXV5YwNATptWZ+5uUDrPMs0rfH3Zx/9WokQ6u6zMpSoKp8/cCMCiz88zQOfdwrvPWUYArs66HCZojce4SzG5baIXlKQ== 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=r2edp034a+EUK+eClxDHd93Lzef/3IRqi+K1pIlnAB0=; b=VzJXGNSXfLqLTyuxk8Gh/FHcQlqtSIDCuLH9q8EeUkrZ8aHubTh5yyn7+mXrlhcxKe2+iOdkjLz2C6pPnYyJE0CKo3CW8/y2c98l3IS9VftrHVGNlqkCkSuA+BrSxJXErK6aVTErAhgJy83AXlSUU0Wj/0iWzeDBTmrnHBv/LLfVjOEbznAQtCEMk2dqhosOsZsF1QzFDZoQLWhXvgD9O2gLqHXRkbuBfqc78s1ZZ+G0g1VXWpMdVk5cfE9jNjzZ/KDi82tbkHWQLMwNPRHZeIwKkPYJqcRehR6l0PVX862sxZjXFGmAB3M4QDsITdwQ/YF6i/eunNGKqjzO71FJGg== 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=r2edp034a+EUK+eClxDHd93Lzef/3IRqi+K1pIlnAB0=; b=bG8g6eXZjmEkZfeAj3b7RpTVFbLzByTg2TvjnMwO547CeeZlk+FVUFYI3LNAmnYy7W4XamNn56YnCLJIqkW/yU/SejHPV4e0qG885M2uSSgl/k05vxLHY6NQIPR2LXdcJkFPgTVfZrSthTF8JV0YYTx+oB4LI/YUU+Uvlhxag67wjTmRWCQ97apahMAv9XkLeSDhGIecFchGg1vSIjPu609pLlQ7/SyvySY+AM91a1VCMRs7QnW1iqNfVbY+S3PixdV4MH02VPsVyY5dTBL3mgkHHKXtRJzNkwbHMps/i2IDK5hH5WQkuknrLt4Vsh5biBuNtpUbdTpTBLWvHdrEgA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:27 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:27 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 14/30] gpu: nova-core: Hopper/Blackwell: add FMC firmware image, in support of FSP Date: Fri, 30 Jan 2026 16:55:48 -0800 Message-ID: <20260131005604.454172-15-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR05CA0033.namprd05.prod.outlook.com (2603:10b6:a03:c0::46) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: d68fc854-4e33-4e3f-a001-08de60639007 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?sG+IBqfrTlXzmZNj15wFdDLtEOfx57P2z69ROI/h84VQlyjPVrBpupk6+mXE?= =?us-ascii?Q?+YM3W0dQKEx2yX3W5QeAtujVbv7MsHhwB3fgTRmq1SpSJtNaYSJkfE4BA1C2?= =?us-ascii?Q?zHSQv3PFIYXKx+gN555Kx13ZvyX+mgDlJLApNFSzWDuYoA41eRttpRX7zyqY?= =?us-ascii?Q?ktYuMxPs4VHCNO2Q+fd9VohQ3VNU11KAA4UMMhw77tWXhm2HOuhkiY+SwgNq?= =?us-ascii?Q?OkTlOQQiQdusuwA5ttrnYpdR56FDAq3lcNoTmvvH9d+FaSBWGfxyplmnUTg8?= =?us-ascii?Q?D8OLRs366LTU6PL5TPO4ugImXRzi0Oo26wZRfld9C1PtnZXggTL5+zoh06xY?= =?us-ascii?Q?gJlqU7Lsw6zYIah7/Fvt2WC3FADLpXmw2zTnSH3INePLOOs2+eTVSGtcIs6l?= =?us-ascii?Q?+R2afI1t5E2Tc7GZjCTAtrp16MqELB2Q3Vjhv1nWCgaj8bkUWGtXNHL5/fVO?= =?us-ascii?Q?LlaqTIc0T5zVufA63x1bbU9BUGSRiBSVHScenyT+sBbcLDn8WZ2MSQ6aaovn?= =?us-ascii?Q?jy/b9IGOImaCsf1eX/F1fWIpck+gQfSsyaKiVnPo3euq5Nadz2A5XB+dMAai?= =?us-ascii?Q?ZrEaTRlv3H9vw8KCIbjtCw6yAsOnxav64A9MPaXF6Tf4Xi2Ob6GI+/x6hWBx?= =?us-ascii?Q?1j20YHgH1bGKM8RB92AsmAB3cwROBuMt0HVDa5ie944n5hkkW8MShe5e0QPu?= =?us-ascii?Q?45ugdJUPTOR95iqkxXxoNPF0oocZhpTJv92wR1f/yZbRKRiIW5FrxDHtQ5W5?= =?us-ascii?Q?0NOkzcp1c1KaTh6uUcJW21U0isP1cFspqN71+l32uVbukRaZDdW4zUNY7rBU?= =?us-ascii?Q?N1M+u6uj1rh6VpBpNHyP8if4OvAgfCwDtgUlP14Ja2OJCbmHVwZ1FbzpBy9E?= =?us-ascii?Q?ooq8yHbm23j9/LjFETQOTUYDUNf5am0gzk5BsQLNms245sgVUzPXH7/LdL4M?= =?us-ascii?Q?jto7f4urOQCzxyFPsqSY3p5w9QuFnSig3YzsHoLyM8Onm4fZlYpcAsPSHGkk?= =?us-ascii?Q?sgVW+x26gjLuX2FUJMnnXUHGAApBev8L1OYoCsmJ2oF+hGwpq2y7Q47Ki4/6?= =?us-ascii?Q?nZXut/HAxOpGXlBdWlFmibpG5QssEZxeKToS8RwRNlWRWsyDO+p3IvNsxdBW?= =?us-ascii?Q?gbdsM+UHj2dCJyUKEnUxBYM6TjvrtSAR5pDQzSSa1OSIwksEdso5eLyofK59?= =?us-ascii?Q?XvxnPrgja8DOz03eV54S0inytWlhydB3aGmoFmpt+N5aC6SivHLY4G03QsuX?= =?us-ascii?Q?wFhgkzU+WLt6O5NXHhzh99bDAoQjUenoKZgbxmk/a4ydfPsjX0hf+HIEbWbz?= =?us-ascii?Q?WT5oFy4OWp4OJrrhkrUg9Pb+EAv5rNhVeiwsBJBqnPp4aB/0zcsha5rz0lox?= =?us-ascii?Q?H2zLL6egkY+9ampubnteW4NG76u1X7QqgIUv3yX+ppy40Hwkg7i6CHk6QJLL?= =?us-ascii?Q?K29OS1eRZ+Yb9w7aVCeF1X/bkoD9ov2TSkahBKMNMdES4jMU1TTpGAa8AU8q?= =?us-ascii?Q?NVAlkDUZf/bMEZ1InY8er25yM1XPPT4gha7rkJEZHtvndq+5D+SMzCk8U352?= =?us-ascii?Q?NQ18u3U2VxPpGIITdTg=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?OSvKQxFo28DikiQix8yEMLQ1N/zsQO3Qn3Ktkn6mKX32Spzptv/+NAK1reYb?= =?us-ascii?Q?cmfF1n3+Waac0So7rUDcaoURGkB2wS2iBh769LmUfpbCJBYKHop9WRj82hcg?= =?us-ascii?Q?joWstaD/01EZMBOmgKRkahxaylq6Dfoo4o6S7g8XdbzhZIivIw3yWOGuPB5U?= =?us-ascii?Q?3HqF9zs+se2rGjlyDjRxOzzc7DNRaqy+xGwQ8621G+ZjuoE+nEfhVuXgAygU?= =?us-ascii?Q?PuQEGUN5rer73A7xOXjnAwAz1Gic8QFybjm8d3WD2v3fZmYDzgKDpih+Rejd?= =?us-ascii?Q?8MOeLl6oXAJRG+MTjZfV0NLqhTD5OBS6CpJEUWl+uyrywUqMBnXqtso+H0Tl?= =?us-ascii?Q?jNB0jM8u6G70k2axB2FK/W13Tik48ixaxdYxUFinULugEpbpFhnIMyCHgMav?= =?us-ascii?Q?rgqC5ZGsLnJYebHxSsfjEWgyVurxpWqx96Sz1G5MV3T5bZ4IGQcQoL8vR6sB?= =?us-ascii?Q?CncXhc2kMZGqvcht3lkE3XFM4HxFRSJ/9+VTV2mCQTtrWnChUy5DaZ8Gb/P9?= =?us-ascii?Q?kXualo2Dz6W6F0JYeiKn+5/FlObZJ3o38TpQaVqyKOygjntpUxKHKElLzT8u?= =?us-ascii?Q?IdfHD1rqf2RC0XAXoCuwOcGLJCXN4iEff/1pMh05rGnKrRO8OYpri6laikiF?= =?us-ascii?Q?SwxDEZm9QWW7uKsIW4ykRAw2UP7QZnZCr2wu8qvb+Xi26yFB1DrQD38EAXgW?= =?us-ascii?Q?fvrjxdyNxYatb6aYXgTHSU2RGvecEDfAeWpI1J78IFTo0iPn7GsdHvwPKLNF?= =?us-ascii?Q?5w48NfcP9LMVgO4Cn7nNfuG0szdWHF7VgUh2H0T/yjwwAaxDvwZq26FSeqL8?= =?us-ascii?Q?Yld4ff8UPxcddPJ4YglZtXXn65KzDHyHtYuDudTI5fXXoWZHu5GO8LVZ0XDa?= =?us-ascii?Q?XnZPLAL8egrOzV2bfaLrv3Xp/wrHvZeXBpJehsp2WU3xShg0P6PWbSC3N1Um?= =?us-ascii?Q?+PKmPM5qPg+kzPVjHPtx3RsP6NEmhbzcYMo9N+/55sM5EhlgQKgoU7BFRQN1?= =?us-ascii?Q?z8TC2BUlyauEawILvUWXlde45VFdup7k67siWEOKa+jiEvWDlwpVU1Si+945?= =?us-ascii?Q?Z0PN8YOpzofKw9Y78ElXWmlcUQ4JM8BHU9i5dxVBxOxAvF9ssRznXxRxbHPv?= =?us-ascii?Q?UmcRBYYM6SHa3h83zSruEJMa7obXWRwdgdRTLxFId1vu2+VsdvqSM+pQmPOG?= =?us-ascii?Q?QYtOkCRRtNazXnQlgvByYeOAVwZEkAAyXdNI6bb2Qa+qKQuTUOP6I8005NkP?= =?us-ascii?Q?PpvbFy5EaJB+zTmzhb/dhNqcQA/F37UoSKziuQnwxoLbHfXbWv26oBL7klAJ?= =?us-ascii?Q?DKvgVicRJZ5yTX9PvZzcw5o2LL68R/MJiCDTQ1xYCz5NB+Vf/7SxtLobQ12c?= =?us-ascii?Q?CPOUhVgqVKeW78isaZ/xlq3Twij3W37UybyZEakBsjO4/DGdfQD2LjF9ip7E?= =?us-ascii?Q?ZIB7UBqQJhjryxwUh+y0KQVy/w07AqfnxAqdRRMTqKwJixyMVgF1NYo8eTYk?= =?us-ascii?Q?lyrpOlMsO64SK+jMVFWwtdHaUH0pso+JX03Efgo4ssTJZpsc457FPShhXt36?= =?us-ascii?Q?hwanvSLaWuRX3f63KCNZQddo4zoVVOy4YAqtUQsvjF5pJE9UwD0tcDA6gWGR?= =?us-ascii?Q?N8NTTm2YNkTqriChcz9lE7aAw+adLLPabuAupESeWU1E2iGR48mKLmgXFFWf?= =?us-ascii?Q?J+JDfehv1H2BvqZkufvj5G5NR41H0Tn3auPopoTUInNH4cOQazhf1eRlSQAY?= =?us-ascii?Q?92xe6VBACQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d68fc854-4e33-4e3f-a001-08de60639007 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:26.9403 (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: lC+fMSDz2WyPH+yd5cLGUM7lAw0CbEir+6Bvu+251qePTS+Kqu9K/O66VRt+NAHBLDmgM7kSAJ1UOhlBUMDX4Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" FSP is a hardware unit that runs FMC firmware. Co-developed-by: Alexandre Courbot Signed-off-by: Alexandre Courbot Signed-off-by: John Hubbard --- drivers/gpu/nova-core/firmware.rs | 1 + drivers/gpu/nova-core/firmware/fsp.rs | 44 +++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 drivers/gpu/nova-core/firmware/fsp.rs diff --git a/drivers/gpu/nova-core/firmware.rs b/drivers/gpu/nova-core/firm= ware.rs index 43a4e70aeedc..9a9b969aaf79 100644 --- a/drivers/gpu/nova-core/firmware.rs +++ b/drivers/gpu/nova-core/firmware.rs @@ -28,6 +28,7 @@ }; =20 pub(crate) mod booter; +pub(crate) mod fsp; pub(crate) mod fwsec; pub(crate) mod gsp; pub(crate) mod riscv; diff --git a/drivers/gpu/nova-core/firmware/fsp.rs b/drivers/gpu/nova-core/= firmware/fsp.rs new file mode 100644 index 000000000000..80401b964488 --- /dev/null +++ b/drivers/gpu/nova-core/firmware/fsp.rs @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! FSP is a hardware unit that runs FMC firmware. + +use kernel::{ + device, + prelude::*, // +}; + +use crate::{ + dma::DmaObject, + firmware::elf, + gpu::Chipset, // +}; + +#[expect(unused)] +pub(crate) struct FspFirmware { + /// FMC firmware image data (only the .image section) + fmc_image: DmaObject, + /// Full FMC ELF data (for signature extraction) + fmc_full: DmaObject, +} + +impl FspFirmware { + #[expect(unused)] + pub(crate) fn new( + dev: &device::Device, + chipset: Chipset, + ver: &str, + ) -> Result { + let fw =3D super::request_firmware(dev, chipset, "fmc", ver)?; + + // FSP expects only the .image section, not the entire ELF file + let fmc_image_data =3D elf::elf_section(fw.data(), "image").ok_or_= else(|| { + dev_err!(dev, "FMC ELF file missing 'image' section\n"); + EINVAL + })?; + + Ok(Self { + fmc_image: DmaObject::from_data(dev, fmc_image_data)?, + fmc_full: DmaObject::from_data(dev, fw.data())?, + }) + } +} --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012046.outbound.protection.outlook.com [40.107.209.46]) (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 02CB033D6CD; Sat, 31 Jan 2026 00:56:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820999; cv=fail; b=kwK2xysatU0Zeg/e5wtwCl0gzh4CocapStcI6jhS9vg8DhEuH6fWidBRz4G6H5oVKN4uk01A6JkAlZY+RAYB2YWXrbKG9wSrmVnF13aOLGV/3T9hqITeTjgn7G75jFF4ILakUhEQ87jSzwAGVyrLmism3RaKG3cjWAlQAIVRIAw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769820999; c=relaxed/simple; bh=KQuslSnWDAYuvMUmofRVb6v7nWmAoHZ+IlbH/nU/jog=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=adN4awg3TgcWiofyDd2Xm0oK0b+aeoUs8jJIQoVAc9ZkvGUgybmER7k7GXSJVOmCEFG3aVDAk48MjVwb/14vkMHH2L4F8onTOjOV6yxB8gmll5SZGwcW2h6q/qPHhnWksfxBW2Pb63HC7mDCYiVMaogZBQl6OyW6bo3BcveyeKc= 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=YnKeCfPN; arc=fail smtp.client-ip=40.107.209.46 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="YnKeCfPN" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=S2Z/SJ6340L8cMPMciLPol4y2IdH0iHliEcgFeBII7K65qBjJr/3gSa9fbN1iBLgpK4SSqi8trX8bzyeoMbjHfvkio7pRRwoqBpgkqbiKlGqJNz+Z2NcM/VjXBciGQUO4RhGDQAJT7xOAgo1oeWWVSF/YAt1QXfyX0++EVDSRpJbAsdvr2AbUrvH5LN8Ec0r9k5spNSoiFSNBD+CYRupgclSKrRVbDgqV9KnqTWi+WJQS6ZXkB0GX3a5OY2gkLO2zBHrEi047um6VKj0ShqagTy6pnUaM22PRSQ8ZSF5q0G0Z4s+2S5pQmvX8U/tMyj0vi6yyT528gD4OiSb3vBTFA== 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=A9PBcVZbEC+w5n1GV6YTO/dp2b6Nylw9OWKDnwjjFFY=; b=pqZ4y1BLbKI/fZsSxFArlV+vw+L82WSARG+NIsxz9aVVu9/U9ufRLmP6U9PLNDnqh2nBKYmJkVPVA9xI5Fi5Dnrdi8hEGCtVJCRcG9d4hH9XUPdT6slec/3qSz/f1G1INJ+ON0e85sVajAdqYlsU6FWmBUs06o7wwV5y/XupBJPnfNuT8NecnDLxteufCcniqAtINbJMz5iv4mr7tmUpgjs7RuaGsG85FIurtKCRKToH3l2tZXqAgAfddeTha9hbQNMhjQkwi44iCpfl+K2hZ8IYSVXbEthx6ho307d8WJFuys2K5f2/oD1og5sYNkKD9ANmnBJNRXz7wxA3/fQBkw== 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=A9PBcVZbEC+w5n1GV6YTO/dp2b6Nylw9OWKDnwjjFFY=; b=YnKeCfPNAg7pxVCBz4fB8iLdisVsFGXlRq8qZXwxezvFsH3WEikPA2lBpOIaujc61HJJqXlK2sRLsDsA4J1o5k2HKC1k2f1mPtAA3Acvmcnu+16N4WCLGU2+yQsv/1kqrjGyWDsYkhgTAwM9R00Y4LS78uTagYQtwWbpc2BE5nEOoZ/kOqeSeXNoB1tZ1c3EDQxlcUzaHFwZhMWz4h7K+wQF7mAYXoJFEDll0XxUio5Pae2BfFJKe/nQntAedG/3U+gv51/5iOFF0JoRpW9ndiW5iZfcJn8T38eS7cSkzlDkkgDZY0wszil3nCmIWG/uCdoCzJOcut9i2JWpgYyuDQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:28 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:28 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 15/30] gpu: nova-core: Hopper/Blackwell: add FSP falcon engine stub Date: Fri, 30 Jan 2026 16:55:49 -0800 Message-ID: <20260131005604.454172-16-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR05CA0017.namprd05.prod.outlook.com (2603:10b6:a03:c0::30) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 62b46710-bf4e-4bfd-b3bc-08de606390b1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?0j7QRaNI7lajHhK+uDKfHu5hp5wflvB0AsH/oMKf/bMESTLdK1DwWwyShZ1J?= =?us-ascii?Q?YWIx9KuR2hezPkdhG0gz4NgRPGv5lN/MU+rIGprRzg39zhCgJhZO6cSKDAUp?= =?us-ascii?Q?11GOv74bF3cPoh99M7V2xmFp7OeymtECauYqeEiE6wGyKQFDgS9X+4wENqAz?= =?us-ascii?Q?O9JUI6Cr1cOyiGurGw5eWfavhz/g+xdU/hYJ3JD4OmO2INs8DwN9hjxvaO6o?= =?us-ascii?Q?fOALHJ+13cye855Nk9SM8rM25oLXLI4Y88Pfm7NIVfcqeuCwMAV00jZJvZLx?= =?us-ascii?Q?h4zKIDDAOMT7R9csEP5ZSUoLnwPSY0baZswIiImIMvP6XzJ9euDaRAgkU4c+?= =?us-ascii?Q?iQn2TxrsSIyx+qsO66W7YgqlOpEMYf/FxhtxA9PYf8Rka6rz/Qu21C3+xN/U?= =?us-ascii?Q?Obuz6U2SunQYsmHh+4/DeWRS/sW6gLVPJgiqamCxz+N54Fy7r6i7CH58rKdL?= =?us-ascii?Q?7/9lmxZHoffxU0puHoZZrw4wLuGnAXXsmvtggilaPnSWs2wnZ4nXgKGcDEP9?= =?us-ascii?Q?3b9uaE1wC8mAjZguT2X+Q53OYOh6ZsyK6cjIlWxQhG+oNulLCO2dH2hlmD84?= =?us-ascii?Q?wu/t90TEU2NAz9vOFYX2Ec9WDIrcRnJHbBuJKmmJltWQGYv+WzNgWTSwHfZJ?= =?us-ascii?Q?T2G8365jUfZ5tlyNbuF47NiMGvLx/fVRSE/Q05cWXKr/VYwMhdnakllzCnri?= =?us-ascii?Q?PwReJCRFprjhwNhC2/kyqKmTq7qOUp5D6Qvow8mCH/oGHpIXEOxCo1GJJwJ2?= =?us-ascii?Q?ouRE4dgdoTBYRK6AwNYjDZ0jlS589Yek4EnBt8K2457ANDnUW4e6nq5PKsnU?= =?us-ascii?Q?A3yoIantqHwmgNflxXvCd+yNwgUPIVDecNq68wAYUsBpEI7zf6srqyf121oI?= =?us-ascii?Q?c6DhORmx7GVFf0GKDUz1zG9jb0LIPfX45FK7VHYesOM/7u2kT1VF2Othy2Ed?= =?us-ascii?Q?Wz9n4SMKM+nAd03Frq2S1zYNWa8iShtSU4YNaxka8j7IfztXHT15kBJ3p0Xw?= =?us-ascii?Q?oXZVN4dDqVdLgrWKMamZau+MmpqGzjoY3QZnrX/CdTq9bSrSmiuxiPh0Alwy?= =?us-ascii?Q?S+6Et5Sirf0+U/tHowrhvBtdRn8Iaaq9jTHZVwLZgkc0UNK0ssMRwFSs2uwO?= =?us-ascii?Q?GWWgTbS7PL+SzRFT3FNzyg/v23rHIT0rABs05XYde55WpvqI9ZFegUBgPAvo?= =?us-ascii?Q?ercj0JvwJ2j4rje2dDgkaRfNEeU08ReWvg+Psg8deLPjz3YBEkb/aFXN1NCR?= =?us-ascii?Q?47bt0pQHJK2NewosGadUcb8ACWdeEdnilPvtaG0ozP9OWQXFg8gpFhU+0k3o?= =?us-ascii?Q?cf1M3NCvJzNvfQyrzzdVTth9KLoSOrWw73EWSybE7qEHq6nxYoKXLc47k3fy?= =?us-ascii?Q?nuzoioA9XjraI+rWvZ4mCJw0EVfuArO8aANN/+09x/zBZLkE2/ne+uAIbism?= =?us-ascii?Q?x4DoxE3UJXtLIXnZMybjhH7jGNbN5w8b3hYSYwBYKaAAPIujBp/DG/Xiogq7?= =?us-ascii?Q?Rrvr5p2sT3B/vGHpTOZyKUsY7rDjT6dBTNDwfAbYx+NOpQBwUt3tspDqeOz4?= =?us-ascii?Q?hvFyrTEP0tkSIJKaLfI=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?uT2ce33pc/IkVvKtOQU9Do1kDhZgwbnUwVPducnSmEHI4qaQ2mCBDXUOuLL5?= =?us-ascii?Q?tNvzyw9wqucHQlImG4Sbvw+oD6l+qCg325/55VKtfazcR7fp+mOL5mxWgVsI?= =?us-ascii?Q?VJW2aqFmYKi6hveQqdNMvBy1K/0id/LzNxMJHqbdTZhYQ/4GK6ce/jW32ht8?= =?us-ascii?Q?ovRgTLCcOR0BSYVmTdqVP+Q6Z49l/oRN4rkND1GljWy5T+lbV0kEXQKn/CfE?= =?us-ascii?Q?eoOy9wtJgcLC4A8rDL9gXnjig0A8VwVsq+x+eCevkUDDwV/ouObmcuYtK1sP?= =?us-ascii?Q?sdGbiuurZ9ZtSxLFapshjEj1N2VTXdTyWIQJIvYzF0hltaa1HAjQ1pDbqcdK?= =?us-ascii?Q?GXyt6NNG08OuCUJAd+9qZIKuqZlC4sJNG2RmGyUxodDZpR9VeMLa3n6SuY9x?= =?us-ascii?Q?BIg+XfF+aSM6xeefJH5MhyQ+8bRF+byYVaTHkMFkGNY7qBIATTdTO9Y0YrE3?= =?us-ascii?Q?SbTXOMQmsSZAlEZ9c7ma5h5GF/dutie6vam0btkEVQZsO5uFekjI9vtzyc61?= =?us-ascii?Q?s0gbdNIATtp5sBAnO/CuA+tgPOfHqVyRHLdOJW/TAU9ua4/ggo3y4eu4DQQv?= =?us-ascii?Q?+WopFegyJcCuegvennXDtyyf/HhFhAlEKglZe+art42WCVFnD31gOk41143K?= =?us-ascii?Q?aLtAZiWiC2N6Y+C5XXRQN6bHYMfOGSvUi2xt71cTzFCQuC+woL52RAGw+Bpt?= =?us-ascii?Q?cS5W2DT21ah3CA7cvF9JygsrLl7MUXA59LvsXrY4f2Tv1viLpDYI0elYpyox?= =?us-ascii?Q?Gdkij3t72Jy1/DDJkFlxZPCMZ4GgtJfxw+EHr9rwMIfCAwRIMB52Pt+gjwB1?= =?us-ascii?Q?mUyi2vrLI3l3TY9DNnbM+oH0sn4iVHFAr8m3U/1gLa1PNgdvj2NXNU2jaJSi?= =?us-ascii?Q?fKK2K3W97wI3AJTEiArPz+Eg9e9dUi7npLA9QiARj0N+KYOSCFTGlxbr00uF?= =?us-ascii?Q?G+LyM3Z33iUsJVZ8cfNoBb/fjBC3kVqrwR+rV7G2WoUqgPUbWU+Yyc7TAWlM?= =?us-ascii?Q?HCaTE359S3ozrw4E3d36SD1slQsP/ApZ5oM4sPkLaZtNA+XTwGDwVqpLVKWD?= =?us-ascii?Q?6DtZxQFkFlNn4DLsmAVr97P/qCmXpk4Jke0+iIqBngdHnWNSBjxAGH4ZsNM1?= =?us-ascii?Q?Cbc3AE68+EaK3sva/HAaKzDkjq1xPnnXgFFb6AJlwob9a8PML6hJaIb20sH0?= =?us-ascii?Q?PK1u8uD09qFKq6hcOC43zajJMSvZwZRxF+qkm5thWaqD6XhmmiJ0Lqv0tnLR?= =?us-ascii?Q?H1p4KmxGdoEXEYzBPhouYoZkYcpjm2cx5iNhemdFrEsvT3ye9w4PVoKmjDDz?= =?us-ascii?Q?06l7gK/lrXVPck6WBe48LOPgELfDpF4Z45QUSGPND2dwJoQ7DrF84BEs3Bqd?= =?us-ascii?Q?4F6MULdQdSkDGYiKaH9J3QKRdjOP20V1yDDrB9r/lYTlvLevDb8vK5Tfx/en?= =?us-ascii?Q?oyVaN6C8x30cKPuu6jZoteGly/dIvPMT0WjNoPhNw59mhmGlYQR3Tvb3J0Hj?= =?us-ascii?Q?PEFQIHaR877bSglwMZHJfrsDe4VhoGJBTBDlxShOyAaqM74HEr3BJOKKsy9k?= =?us-ascii?Q?cGkWCrlrimmu5vu5cMznbNxEYo5s45GnqOxmmgGu7TYvCZInn1UoyJGzpceO?= =?us-ascii?Q?ZDN+ppTpUczD83xqHfqeMpwRFqfSjW9XQhOVH6mcXg/mzJbLwV4r54L9RYuW?= =?us-ascii?Q?pat6kaBB3vpCh+718Ki2aN9M3Y7ZXPdPE4aDSWxV/wA/gBHPStD01IhnJ2V/?= =?us-ascii?Q?jRpfTGyPpQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 62b46710-bf4e-4bfd-b3bc-08de606390b1 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:28.0902 (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: Zce8D2D8Bg8gzlMSx39O7+nj9wJk4k8T5r6+0damOgddmVA98CMZNqgUpS0YB9alIXAVvWpg15vscyWvfWW5OQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Add the FSP (Firmware System Processor) falcon engine type that will handle secure boot and Chain of Trust operations on Hopper and Blackwell architectures. The FSP falcon replaces SEC2's role in the boot sequence for these newer architectures. This initial stub just defines the falcon type and its base address. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/falcon.rs | 1 + drivers/gpu/nova-core/falcon/fsp.rs | 31 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 drivers/gpu/nova-core/falcon/fsp.rs diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon= .rs index 37bfee1d0949..a0cfb4442df1 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -33,6 +33,7 @@ regs::macros::RegisterBase, // }; =20 +pub(crate) mod fsp; pub(crate) mod gsp; mod hal; pub(crate) mod sec2; diff --git a/drivers/gpu/nova-core/falcon/fsp.rs b/drivers/gpu/nova-core/fa= lcon/fsp.rs new file mode 100644 index 000000000000..cc3fc3cf2f6a --- /dev/null +++ b/drivers/gpu/nova-core/falcon/fsp.rs @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! FSP (Firmware System Processor) falcon engine for Hopper/Blackwell GPU= s. +//! +//! The FSP falcon handles secure boot and Chain of Trust operations +//! on Hopper and Blackwell architectures, replacing SEC2's role. + +use crate::{ + falcon::{ + FalconEngine, + PFalcon2Base, + PFalconBase, // + }, + regs::macros::RegisterBase, +}; + +/// Type specifying the `Fsp` falcon engine. Cannot be instantiated. +pub(crate) struct Fsp(()); + +impl RegisterBase for Fsp { + // FSP falcon base address for Blackwell + const BASE: usize =3D 0x8f2000; +} + +impl RegisterBase for Fsp { + const BASE: usize =3D 0x8f3000; +} + +impl FalconEngine for Fsp { + const ID: Self =3D Fsp(()); +} --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010034.outbound.protection.outlook.com [52.101.61.34]) (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 30B7C3191CE; Sat, 31 Jan 2026 00:56:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821000; cv=fail; b=n0z+BbtObqkB0mZyJ/msr6ivJTXX6W7IqteCVCL9WAgovVzU9jfKZhJP2laHZ3fL7nZuEmoxwE5zMg0v+TcF/09/Ol+hebnDrheKwzujCzlmthz8vSaoWLODZfj5MqaljsJ0aSHVTL7+PZ+ktUgvcXYeno/2K6flNMJBH3r6Zjw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821000; c=relaxed/simple; bh=CH+UtduoqbdYBTg+4zNRPd/vqgN39j/2ck9fvgshFyg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=CW7usMZEHhYku/IzbYM4gR7xmJ+clgHHe4LIYDWYMGljoBK4xiNgElQ+bb1xZI+8Rvvx77duFjNleEL0a1rnsdFMUUwkeeYn3R8jb60nQ4Mvm2EoB3ia+S2T9ZuxPx+oWtKVOnjilPDpMVv6IjKDlS8Xm/mZDjeWqgPH8lmavp4= 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=QiCQEIBR; arc=fail smtp.client-ip=52.101.61.34 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="QiCQEIBR" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GMTLDWiN6qQUwz/ljFQxPb1uhcoDsRFbr0vwULokTmUUQEJMovkJ7vdM76/KF6WRMigWqAb7hUYJGGPsabWnXgXRgyBBLF1p68BVqjFv72pMhML1/9xKmDfu/IrVo8g0Fr5sKLjAwevmHCkB07zMvX9hBrlScjtVipSF2aJfpAFGSzavvp/o0/XMeMVFegCprpafg6lDdHslSbmK5qlg3pe8+Rk+9MhfqjHAeWycLHW5z1uC24w6r9+JhsZMBR/2YJKR/u71tHfTET8vaFOrg6h4vdFsIS4H3JxaRdZZWlf+W3oGaUbVA9MV5A8xoFAjyU4n5eb70bh++7MU1/C1Cg== 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=Fark1rNmmPEp2/uPbLFYjKFNexQnflhr1c33X1nm8oc=; b=J0xgaKBN/JmAaqr2zcZVypC+ptPSpx+QYkTFwdEq3bgaTrSu6C3sE9l9rmyRBz7rA3rtwgNgopNgzFCDKmnEB5vumL4SCtanqxhu2LR7HRo9DbecBENF6OQFRttaRSeQp1gkNPZNdwDqRuK9kI/2bTYiJY9ZShbTjl6KS2mfC4Wz4OohgrVWDOgB++MY9jAZDxClnwlMEfDV9oTuxexUgYmC+QWgJVJRpmbmLOf7WkL9YDWkPdhbRjKS4buEWMWi3rWVNbqUbXGuDOeNGIzoPBrZDoor/OpXh/Q5ToZAvDgDMdruXkikXUJcgxY+3wAnmNJ0TGmgjl//tI/RXiNk8Q== 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=Fark1rNmmPEp2/uPbLFYjKFNexQnflhr1c33X1nm8oc=; b=QiCQEIBRa5NqVhgLf950mKxy90jJwUnXq5dkHlDKURPYsfaI255XrsbroJRdlwokQSrpEi8/ZbQa9xGWyzA+kLDwYLnnxyIKD8N7S0pu4rkaLfI3iJXEu0GoGQKxH6qehoJFRCPTa+SPBUNuL1uJf6nKmLRI0BC+htNEQzahTon1YPJlLqJpka7Pgs/p/xYEwBkgK5+mB9GTdKplivTdUpXB7eb51QHAKKoTpQUHC5fn3BzFpJt16fQ08WLhr0rv8hk8VUYWDTcbrhbEPC2JcXYIKwZ0WR4+dVpSuH/WU1p6QE58qS4MNiSI1JNelX32vY3K3lpsy0NN0LmVX6EovQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:29 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:29 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 16/30] gpu: nova-core: Hopper/Blackwell: add FSP falcon EMEM operations Date: Fri, 30 Jan 2026 16:55:50 -0800 Message-ID: <20260131005604.454172-17-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0044.namprd03.prod.outlook.com (2603:10b6:a03:33e::19) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 11ea314a-d721-4dbe-13cb-08de6063918d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ox+H/AOvc6smsiFYZob/l1C10gr5SPtVDuIUDb9jvZrh2yLRXiTJI9uhugSr?= =?us-ascii?Q?zcKxrNIxrgHBRc/1sMqaH5xfifl/8UD9P75j8cKVprHTtzytRTlitflR5FDE?= =?us-ascii?Q?o8ukvYRHYJWvucflTUBdm/s7HRdmXXG/fwxN7Bv5KDCRe6qr6d33MQ5Plx3R?= =?us-ascii?Q?4DMoA41/hTVINYdlfF9DjoDKzFymx0giYa2nBbNBuKlSc8hedGIuvgfAy6db?= =?us-ascii?Q?aJ6Ng6t04f0K7wPex2EuObbg2+1nkQkEW7DNDzFuco7aTES9VLrduJRXkgT3?= =?us-ascii?Q?vG1MvFQsXzh7qI1Xj2GTVwdqUf4MlHXpf3Nqmalai7KvGBpCyXnKWi83/fKD?= =?us-ascii?Q?JR/brJo+IToiB/Dvatlyrp1o+6uSdM+vsUJ75JqBlhv6BJ+oDg/E5jzcKDy0?= =?us-ascii?Q?eUB2qlfjbRszmMqGPf7Zc6Lyw6Ght0I6R92hzUHj6gOstRJki3PmoeKuZIak?= =?us-ascii?Q?342QIyS/jJW1mpdsI+SBkh3eqBxD+Ar0UhlFNn/2Kwu+EFtmpoEAF9K7fid2?= =?us-ascii?Q?X6iyMk4H9dlm3lCXchik6QLnxAjujnly94lY/jh/p0EEkRth3zdWEu2vAXVf?= =?us-ascii?Q?7BD3xa8EAzXhqM9DjiYQb8JDjgxq7h0Uqwftq9RC/fRKFU4jZYNRSvbM4mM5?= =?us-ascii?Q?GdOaL3a3DaOaNoKjI9Iiz+JVoN4SdBMlGzjKZYfs0NQj0ZuPc1Y0uYokm67m?= =?us-ascii?Q?OgTEWAko4UFDy8Z2Z7eIrDav1M55JNWf1SXwdI8gzB+S1mfnQ0uEnqTOEzHg?= =?us-ascii?Q?1rkMx2whtEaGN3iy0+BpeN4uNW/O8vhrLs3iWtrDsh44wluByMbbiWyO3+p7?= =?us-ascii?Q?2pYChx5QAsegEy5aPyke8MvguFnI99wll1fMuMXc29bKmEOjN/xWruGCekVF?= =?us-ascii?Q?MWFZEAWSNQ0/pvFpWhVKusqUFCnVik+/CsnCIhaz+3PG7RwwoJKyiQbiKDdX?= =?us-ascii?Q?eGj5QeKIh31PiYZQ8SdagqkjLU+53EDar29Ti8QiTPrNlbi4Oqv6ipfBU6jH?= =?us-ascii?Q?LHg2Sz6evpm9Vfu4Y8fjGb3YTWrhqP04h3H8THCyrvzqbiumixSi1dRMxS7F?= =?us-ascii?Q?AAdYggGBv6JIr0RA0CSaZEb1rPwUV1D+b5oHlmrbb3yKcm/6i6NW59t67F+H?= =?us-ascii?Q?vhdGf/L6gPcjg7EymL8oKpgAIHpu5HZZiST9A67dyKgoTfBzpTt602HPu/r+?= =?us-ascii?Q?i3Vy2pWFNL4G20P6apzKSuVdJxEPeXQ3L43qGF5IvMKEwRMS8FWbjAmGtTS3?= =?us-ascii?Q?Y/1S9nWBRZZwzsc2Ue3kRRociiaP8mJ1yfUOKvFGdGOFVQM3wIIh/czYs6VZ?= =?us-ascii?Q?qaii74O01tOQM1aQ50xo4cCxgm5Do3IQtoQRlg+MHDZ9rL25BUlPhjjWAypo?= =?us-ascii?Q?8ggr1i7id7YYFqZKLmLPPWsXHPcgPjDcoSQOgKv0QfIWHscz/IgyXQyMEKkM?= =?us-ascii?Q?YAbsFvPDAM4PjQkPPnZs0Ua/t/JypGaujGYqS03t/9KFBKazZdZUhNaPOo+c?= =?us-ascii?Q?0FvEzQDLH6CXm397Lc7MXWOyA+/7KWE7gbsposzKya+8FLn4e4VC59k7ZVLb?= =?us-ascii?Q?Il+InuWLplsP38MU/88=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zBVWWtoXulDRPdFLLcXPR+ZlazG5fFyRf6NCP/L4yP94rBwiN5n73TplGDqH?= =?us-ascii?Q?AdjIf62HRSZK7eDRjwxHdDI3Hlgvdjvoi6foEOcsZq0MXSYcq7El4Gn6Cz7h?= =?us-ascii?Q?wOct5znEDP0gbzdBji2oBq3Ym1L35fk1w6uZfQ1bk9ghft/PvWVobJbiHqII?= =?us-ascii?Q?eNG7noV1Ntu9rIJ0V4FuY3M4IHbxb9HkxhxgOqm6ZMRSHtDXow50832Yujol?= =?us-ascii?Q?PR01FDygi58zZ9ZNFZnw1BCRuO2WTngHB9hVtBcN/hT2Yan6Eg0Fgc+9aPF6?= =?us-ascii?Q?SevKVGCftbGEuS5RRlFMhLZpUDEWGMCzDKDvyp6u0YZzbOiA7C871xMhDP+v?= =?us-ascii?Q?Ik8V5uiGPDkxmH/eIc05tM40KMGwriD7EzT07Ap7hZmEDSDgwBK60EtjKbnz?= =?us-ascii?Q?X8vx8kWlnAv5g40jDoME3VbjON+ssU3WAN3PaJIBgoOkdcEMevuPEENiE2qA?= =?us-ascii?Q?I2LNaGeuDhxL93as+IhXlHz7bOFmo5EPdojqlWNMjSIvrZ74uwruk4PV0lHF?= =?us-ascii?Q?TGdmGxgP+HCq8y2gJWbaeT3BoMUmI9+o17mJFE6sKqcoWJ4OxPKXNcr7N3w8?= =?us-ascii?Q?Wi8ziP/NoxKYfDHBy4CNcSSJ9gi1lSKiL9ybz/sTx0GBQp0P9Ky8053Klto9?= =?us-ascii?Q?TUJgY7HrG0WTWlBP8nFjod7uah2OVBxIn5NMgpaRtCA8feXc782iyL24ItDi?= =?us-ascii?Q?8r9sdgOlzZQYfUXFwh+F6ic2uoutYxpPXHKCrr4/8AyZShZnJ5bUKUgt6Ysu?= =?us-ascii?Q?326sHABf7zMh8IVgIQIk8yf3wQQtfUNCkikYw+Y1kTxq199QUiITbXOWNz6u?= =?us-ascii?Q?2JHVpXFFq+n16LxEsawzT5qFvvOB1f09bVJhXXQfQc6f5xIkuHUUpjcQ3mWq?= =?us-ascii?Q?jzXavRCelDNt90uJMxWi6Kr5BOeM6UFBhUYrQcEdFuqzJPaY27vMGEqnu/iZ?= =?us-ascii?Q?EqshAGBhoU5wwZ7gKeJbwiPrP6V+7CRBOdqkmqnub7CdaEmDrRttITz4P6ZO?= =?us-ascii?Q?nCyAHmnNFM6DQDdEzT2FBpkNMku6uIOXaC2N/W4UfmnoWw2agWBQphTQmJSB?= =?us-ascii?Q?YGPS7eNvcRF9QXx7rYZPQKt+J1UGmyXEffxvDdSd7q/Ld2GW4wXKmakXvD6E?= =?us-ascii?Q?EcmecJ8y3nTsVs1xQpoHghFAVpyLsIeSPlko8TCzQ1+9T90RGiVF/IrXnK/c?= =?us-ascii?Q?oQpUPafqBhG40xQxYEJcwPdLY09JIS59ZWq1Uv0dgXUxrk9oYie1mPByPOv4?= =?us-ascii?Q?bUnu0LQiZDrtMORHIiMq9wPWya1GDWneqeSvuis/n26LkDzFjAswnikyZaQz?= =?us-ascii?Q?e93MVWyobEcAdR2NqeFkUVOwFi2wo36L/NfSwCMLFANKHGVIKRI9yJG+zOFG?= =?us-ascii?Q?R2KC0OLpisdwzvXEs2G16pl0bsbrPmJuUrxW4xSYPQjy67GXWlb3dWezn1JW?= =?us-ascii?Q?uliu7+GLHZm7xzjiXnizoRxaWFhFkTFol5b8Kmsct/46BmqI7nl0fcHY8pv8?= =?us-ascii?Q?5J5DR+6iY+7lawKEzme18jFSeyQCc//JeBFnzMCN1p3PMME+W84DhvLtxexh?= =?us-ascii?Q?woXN1DqqtisLsyQRylmk6FLsdk+SNTF+jP3K9yCtuYv3aEbPnOHWsHjQ3Qfj?= =?us-ascii?Q?3ousivy6eX8unos8E397nllf3I3oLYJekKOzhAFZ+8RPZ9W9GR/0vDDKVkwM?= =?us-ascii?Q?qFeF8pTRh4lTEh+D8EzIHqeuZhofwNpnMsKQJCeSOR+6+9VEHsKY8aBdZzRG?= =?us-ascii?Q?JNn/kSs06g=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 11ea314a-d721-4dbe-13cb-08de6063918d X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:29.4629 (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: I1K9VfEBJ703zW/x7hvqVlRENME//GgEBE/N1wLWT63hhstEkwieiWpvooDWbDWh3Ov4ImZbjYb2P17MUzAs8w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Add external memory (EMEM) read/write operations to the GPU's FSP falcon engine. These operations use Falcon PIO (Programmed I/O) to communicate with the FSP through indirect memory access. Cc: Gary Guo Cc: Timur Tabi Signed-off-by: John Hubbard --- drivers/gpu/nova-core/falcon/fsp.rs | 62 ++++++++++++++++++++++++++++- drivers/gpu/nova-core/regs.rs | 10 +++++ 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/nova-core/falcon/fsp.rs b/drivers/gpu/nova-core/fa= lcon/fsp.rs index cc3fc3cf2f6a..5152c2f1ed26 100644 --- a/drivers/gpu/nova-core/falcon/fsp.rs +++ b/drivers/gpu/nova-core/falcon/fsp.rs @@ -5,15 +5,27 @@ //! The FSP falcon handles secure boot and Chain of Trust operations //! on Hopper and Blackwell architectures, replacing SEC2's role. =20 +use kernel::prelude::*; + use crate::{ + driver::Bar0, falcon::{ + Falcon, FalconEngine, PFalcon2Base, PFalconBase, // }, - regs::macros::RegisterBase, + regs::{ + self, + macros::RegisterBase, // + }, }; =20 +/// EMEM control register bit 24: write mode. +const EMEM_CTL_WRITE: u32 =3D 1 << 24; +/// EMEM control register bit 25: read mode. +const EMEM_CTL_READ: u32 =3D 1 << 25; + /// Type specifying the `Fsp` falcon engine. Cannot be instantiated. pub(crate) struct Fsp(()); =20 @@ -29,3 +41,51 @@ impl RegisterBase for Fsp { impl FalconEngine for Fsp { const ID: Self =3D Fsp(()); } + +impl Falcon { + /// Writes `data` to FSP external memory at byte `offset` using Falcon= PIO. + /// + /// Returns `EINVAL` if offset or data length is not 4-byte aligned. + #[expect(unused)] + pub(crate) fn write_emem(&self, bar: &Bar0, offset: u32, data: &[u8]) = -> Result { + // TODO: replace with `is_multiple_of` once the MSRV is >=3D 1.82. + if offset % 4 !=3D 0 || data.len() % 4 !=3D 0 { + return Err(EINVAL); + } + + regs::NV_PFALCON_FALCON_EMEM_CTL::default() + .set_value(EMEM_CTL_WRITE | offset) + .write(bar, &Fsp::ID); + + for chunk in data.chunks_exact(4) { + let word =3D u32::from_le_bytes([chunk[0], chunk[1], chunk[2],= chunk[3]]); + regs::NV_PFALCON_FALCON_EMEM_DATA::default() + .set_data(word) + .write(bar, &Fsp::ID); + } + + Ok(()) + } + + /// Reads FSP external memory at byte `offset` into `data` using Falco= n PIO. + /// + /// Returns `EINVAL` if offset or data length is not 4-byte aligned. + #[expect(unused)] + pub(crate) fn read_emem(&self, bar: &Bar0, offset: u32, data: &mut [u8= ]) -> Result { + // TODO: replace with `is_multiple_of` once the MSRV is >=3D 1.82. + if offset % 4 !=3D 0 || data.len() % 4 !=3D 0 { + return Err(EINVAL); + } + + regs::NV_PFALCON_FALCON_EMEM_CTL::default() + .set_value(EMEM_CTL_READ | offset) + .write(bar, &Fsp::ID); + + for chunk in data.chunks_exact_mut(4) { + let word =3D regs::NV_PFALCON_FALCON_EMEM_DATA::read(bar, &Fsp= ::ID).data(); + chunk.copy_from_slice(&word.to_le_bytes()); + } + + Ok(()) + } +} diff --git a/drivers/gpu/nova-core/regs.rs b/drivers/gpu/nova-core/regs.rs index ea0d32f5396c..30a5a49edeab 100644 --- a/drivers/gpu/nova-core/regs.rs +++ b/drivers/gpu/nova-core/regs.rs @@ -431,6 +431,16 @@ pub(crate) fn reset_engine(bar: &Bar0= ) { 8:8 br_fetch as bool; }); =20 +// GP102 EMEM PIO registers (used by FSP for Hopper/Blackwell) +// These registers provide falcon external memory communication interface +register!(NV_PFALCON_FALCON_EMEM_CTL @ PFalconBase[0x00000ac0] { + 31:0 value as u32; // EMEM control register +}); + +register!(NV_PFALCON_FALCON_EMEM_DATA @ PFalconBase[0x00000ac4] { + 31:0 data as u32; // EMEM data register +}); + // The modules below provide registers that are not identical on all suppo= rted chips. They should // only be used in HAL modules. =20 --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012046.outbound.protection.outlook.com [40.107.209.46]) (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 E087D340D92; Sat, 31 Jan 2026 00:56:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821002; cv=fail; b=r/HQvLog0yICYj66R+w/XtXpTi52RwTZdi5RpbsKKj2KB0WKKD05OQlHuyeawpBp0chiFlM1yFMamlipwl8oyDTkAHzDqik3DumytOQi81J2rS1JCh54/Xg61gE6vjZ1Q062LkVD0ptq/GjCoIKEOoz1hHA62x0xEyWXV8ogodg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821002; c=relaxed/simple; bh=euBLq1nsqy7AJ46qXCFBMotDW1MfPbWswXFz9F4ArO0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=KnK/k8rtN0yKbMm14PWw9P9uLalYPnXgUaENLE1flxVajwjq6oK7hJBRMspUlLzVdRe18otOHGH0A7Fs7OERPFp0GFiEsipBNNUv/6rD31aj/c98kbxQ9cEmZ6CsByROwD7eCO9uMZlQA7GGZIss6uA2xyd1PCrjfAnB7CiUJH4= 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=jRs42nqF; arc=fail smtp.client-ip=40.107.209.46 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="jRs42nqF" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=d8AxhjHynkI2HaX2XL8kRZHLdoTTn1p39fC2u8wynSB5A98idZuG6A9ZVUwQzow+NW9iwCQtrL1vebCJ5ar+z7hCrzxg5/tvZmvpnnqrau7doUByKHBad+52DAKikL0rlqXFDwmfPTlbeYrdorok0g7E6g892FncypiQGbOLdTYuIJBnTk5YAehc8cHdsdiVTlPA3IGXKVS7dfocZROA39tWhkFAiXZQFvhDHmJspf0Rf7ojRR6uXgWVPz4iGJIQDQ3NC8E45dZtq+rWdZk0aNznXIsmPBvlRhHkuNc66/EjXdRUxMyctn3spOJNko9X9FQShCzWrEXoijDS4UjGTA== 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=EKVndETr1RUCpi5OohKflNm7aP/usbwuqzBmwLLBCYc=; b=SqtlPIrbVJt+GS8oBIzAPp7Rxb0HGOiFhVdL2SMY/E+GAERfsk2d2uQGwLY8zYhyHQRCxNA/lz1RXERdglYeVbapdJwlgLoDY+bhdXbnj9VMH73t5+KVOD8YowFk6vjd2PsMK/fLDSGb63ew7ZbO1bryZD9M7Bs8L+z8mHLvvzvw9PQPnZMxu2b1SyWs7Do8DKeyZdOoCciEfsFoyiwL4oscd1ZkpJp+oBLws2aMjpjydbfj1PpZZgGyABoI19PXFKxxqVVLh67yRmFswl1WkYrPqHFVfcYKxgozDJ67pEEE5CyiB2tqWU2ZC00nI+CcRI6lTXJ/k3hi8+/gBJzmyQ== 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=EKVndETr1RUCpi5OohKflNm7aP/usbwuqzBmwLLBCYc=; b=jRs42nqF4HFL6XpYKBIId1uVNpmfPnDw8dQcIja1jWVkgj16buB6DVwcfKYg9Ktb0eIpolIun0swLFN6ep3DrC9OZizSlfnEKW8QQ+9UOS83IQ8uogRDEHbsikQYBa3WQAQE7DIgWCD6ybgza1hkkgJwl1iHmYaNhUqdsUVuUzUSg9nd+9qORZO8gVSOeTekAGpirpu/FCsS5bRmkZurCod/HnGyAmAOWOCkKE4S0QN3iCunkAoJxyNCSTKpxS8meMhCuHwOu7tppVdCX0IAQqexO+PRheN/dXFFkTEMMlTArtSsFRD6lKN64QbQNqGQAj7g2ocbLkomyQycu5Zosw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:31 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:31 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 17/30] gpu: nova-core: Hopper/Blackwell: add FSP message infrastructure Date: Fri, 30 Jan 2026 16:55:51 -0800 Message-ID: <20260131005604.454172-18-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR05CA0023.namprd05.prod.outlook.com (2603:10b6:a03:c0::36) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 0329aa0c-09d3-4d04-49bf-08de60639265 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?3zhg/ePy0RpiU5d2Mk4UGRaLUipb3ktSOCwrkExE0KoKb4OmXpT5VuvQSiUx?= =?us-ascii?Q?cPz+YgjqgCmNZk4KwzvWoQqy0BbGVN/FKo8DhnbmIYSieYOsT2UoUK3LHSf4?= =?us-ascii?Q?uYdILJc2ww/Drj6Iz94CfatLsswWvqQX8qcNeDHq3Q2gkzCOSiZPUJTAk96z?= =?us-ascii?Q?KIqx6YqDUh+z2o3ZrRAnFM1q8ot17KsGfewoRH7EPWUWpV28oKK4vBhE0npb?= =?us-ascii?Q?FElpS67j8elk6HIBvSO+4PQQRnGps486VhYr4gLvKJYlvj+JsNswHyGlvPJa?= =?us-ascii?Q?sT0IR78Khz2/JTkVHnmUOxJNT1oKF0flAfHjs3QIFF+7rbY3ueHMbwcDQikQ?= =?us-ascii?Q?NJXFXvTJp43LlJoWo1cnmofM5+oHZaPr9gn2x2k6wrwIhceT2JJCchM2Ztbs?= =?us-ascii?Q?yE6o5bd7YGqS2VUKDUQgVUINkfcpvT7LVjdvuEF30EdoOqosHacyAEQr5kLK?= =?us-ascii?Q?Yz9Bh2Quo2pb8sZTFNicwWXhbWOm6xGK9QGJsqtRoHrGT+T7Ohe9BZxEqVti?= =?us-ascii?Q?Y5DNT6DanHF+kyFUnDn09gXQCnsDxv3nz1jiPOuQ8vlzD0BbwjNPb2Pl/J2c?= =?us-ascii?Q?OvpiAtLo+NE5ctN9ZQzNDZVuPcw+2eASUCsWuPYTWvkyhnMDT1k+PZ9B/r22?= =?us-ascii?Q?Ghhpe+E5Mmhb7J9RX9HSdiUdoZPCzcHAaUU3VP+upiUudIBp2DmprZjw0fdi?= =?us-ascii?Q?6H8+IW5XAd0fa7w9FDWwj5C3JhseLrJ1h5tHcpgU/qeV1Xqm+pnmyW+v7yL5?= =?us-ascii?Q?tN+8DDHS0FdNZV1sK63LKWD/JYr4wwXA9+JaqcbLDxr2UDjVy1UmFNVCi2G0?= =?us-ascii?Q?/FrIxW+EK6G29d/MEjZjsfTZFqRYtJAvQWXBI0JfkzxTpzFq2bKJwjGC5zz9?= =?us-ascii?Q?8k9UhZji2yiGkvsnvyqb+ZlRwPxrD2qFtIagXcpwjD65AbBCAT0Fw87gSH4b?= =?us-ascii?Q?KoeKyQr28KFRdvbkkELBLCkz4Wyj/eB957lKgYyqXPv0zkwHXppfaafTiktq?= =?us-ascii?Q?ifa4QCFOsG1PGBNWV8cTsjlgeNojt8DHb9M80+mXL2NN3dgUoYgonNd8dDuU?= =?us-ascii?Q?dPqPyiNRpGFULCBqyjeZUSlAsh/Mxtz6tjWthe+1cnCdriblu+FbFY1wROgl?= =?us-ascii?Q?2N7FIL5fipwg/jIqMF2mvWlYIO0wv6aX1jvroAfAEyX3m3e2FevZhwVeWIHV?= =?us-ascii?Q?xSwE8xgftOLLoG4nDCDFd47m+ND0sm/DLWAPpEoMH59sVolHNmro558zMg7h?= =?us-ascii?Q?R4/OF+Kp3OOLv0zDkRQz7gnhhtPYPIaH6utg8Ypv840jvfeqdxq6X8pcsFAJ?= =?us-ascii?Q?Gmwd1IGOqxowf4sDa1uupM/01eL8yjKO0sIV/yLJU5uizpFaPby8mXPRlxiA?= =?us-ascii?Q?1b5UE2LujV3RjAfF3UubOr8VzFTS64wnwSORD6hM/8XuRmGQ4HK38fdbz4BJ?= =?us-ascii?Q?h6BHI5loGMU6jjkzzkDTBDx2Pk4d+EmYN+bZa1AGL70c7GsUyRbcVo5BZjaJ?= =?us-ascii?Q?eMmjKov3VVmQeom4HwkN5TZYavyphbzMbmWqNNht03oqPGaSp/IAkz2O4rOs?= =?us-ascii?Q?Wx6jEn1m4LQs2eqeN+U=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?JGLrf0kCCNpsu4fuFlkfXKVULY2Q/6jB0R7Z1KaWSWKdHAUUr2rUTPcQPKTR?= =?us-ascii?Q?tk/doRiFKWGj+CgdHHI4Hr+2R3zqwLR7DalZbH98PqOyCzEZe0RjwNXLpqm+?= =?us-ascii?Q?FMyxkgWjp5TSrzJaWRV6LBZ4wMFN5BterubmhnmX3lZO6Sj+x2QMXJ0DFSH5?= =?us-ascii?Q?BvAvrIztQQJMqTWwItOj349SBGx5xEtQqmcKvr3K2w9p2X9Lux589bt0Kid0?= =?us-ascii?Q?bTd7pG9M/zL8hZnaoR9PuyTXJk/DehsXd8ECInoaiXGN+L4z52VcxdXMcnNB?= =?us-ascii?Q?Am/KEyotlO8e2XU82kaE8eeifNO1JK55dRdZP9Fi1GqNsiQbIm69X/0eADmA?= =?us-ascii?Q?1yZyzNuO59Hrh38Xvky2Q2zrT4Eqhj5ya82hw2hi6Qwx+l5AltYupp0trQbX?= =?us-ascii?Q?+j7XglWDTKfcGhhEtMUbW5LZ6EAK1zRfHviD6P+1XDUm/WPW56ria3yvtj1f?= =?us-ascii?Q?Y7qHhbk0ALnyPaNh1L/vgsCrrSkZIIRk56PeYBJcVF+L4fbl/HTMNhGA655y?= =?us-ascii?Q?bRucBvoaBDRKS290J3bw3A0wlAz/d+YLHc91TCIhVzqVPwI0dNqhXCFh1DY4?= =?us-ascii?Q?Z9izS1QtQbki4g+ZIySsi2PU3od4s4PiWguAgCvlFwbiybR+uDdJ46va20Be?= =?us-ascii?Q?RfgdDxglhYPayEoVJagZs+jht9mbR+IMu8TISAPs1AgfbkfNadNiUPMLObN0?= =?us-ascii?Q?frLBdWhQ9iXVmfU8rM1i2V7ehbFbrbRpaep/StqOqZNph5YDJqQyI28j94q7?= =?us-ascii?Q?TUJqrKfLrWZi4+f0mFsuGhA2K1On2j8YMCMTh9tsN/Qqr3CQGwNzcfU3MRFU?= =?us-ascii?Q?JMd28PN3pn/sQVqM7qFyxzDazumymI3Y6dkZ7zp8wVoXEBLfinoLo3VY5TmW?= =?us-ascii?Q?9w7PF69sav/fy722dY/4NU6AAx0ztilsCO/exiNpifdvoNX1awE4xF3gSyr7?= =?us-ascii?Q?ZSgyErcFV0MrP/FVagNL5xWzLIu2k6pKP9J1uzIDi81luDbdKf0RtbZOFCc4?= =?us-ascii?Q?5l0ctpUWpOtj3DU9biXnWGjgsUu5LXZPs7vetN8BpFNJ5RPOpV3uvb+jxkts?= =?us-ascii?Q?O84h1iv5AO/jjYWhbZWlUpkhjtUPp1zRtNwSuzhmQZ03uX+koEp82fDl2Bjo?= =?us-ascii?Q?ixL+5FzkjpSD0IsXTpQKthtiTe8HyOPbjXTgzG0GXn6BEiW9Dct/Gy4biyau?= =?us-ascii?Q?pr5/QQBNvkA5wlecnlWCmI9R7TkXgUhDCKenOQyLxRid9vrzv4btB/t7QEWE?= =?us-ascii?Q?R+zzDp3II+JX4V3cKV3g51sKlOZeRv91T58IrnSTP2cdFmd+0h3hjh4WTGHu?= =?us-ascii?Q?MaBX9LMmhjuGXDu3qoQj1Vm3G0rZJBdpGK574UG2BSwwGnPzvGL7tUdQ3eqx?= =?us-ascii?Q?6pRIAlL8/qoahpA/vNrhCqXw2vfcYYykSqjje8EzUAjxholPMb0+Jkul8HmZ?= =?us-ascii?Q?lV2Qr0BCczDllQ4gDBiJymiroa84qwfEAUbip1eHUaxQo+EMfJKVz24EFDu2?= =?us-ascii?Q?0MHbtJwUlRzdISt+lsDFLcreUxRuZoHXmfvJaRY37gWZXTZLw1Hc+Iz9Ec0j?= =?us-ascii?Q?yrXeYXa+KTolkRYkWW4bAymczt08PZlRcu4GAm8DiSk/LW17v12uYIZGOEFT?= =?us-ascii?Q?nQYN/Po5TD5gLTfaRAHOjj8gcJfjWV17KRdYaYmCKVR5AeT9zdBTrWzh0FBL?= =?us-ascii?Q?hkrDTAPLJP5MTO9b4JUIP/eih3f6OAOBAofbffqCUGjJUdheBexj0op31QP7?= =?us-ascii?Q?FRm5+Tl0lg=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0329aa0c-09d3-4d04-49bf-08de60639265 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:30.8864 (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: NqUQmLTf/9nb03jD+oZ4MBWqVJlCw6XDfDtjwvA+ZI9w2Bhys/cRMA+wx16+N+Z7zqh4j5f57X5TyQmTOP424g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Add the FSP messaging infrastructure needed for Chain of Trust communication on Hopper/Blackwell GPUs. Reviewed-by: Joel Fernandes Signed-off-by: John Hubbard --- drivers/gpu/nova-core/falcon/fsp.rs | 79 ++++++++++++++++++++++++++++- drivers/gpu/nova-core/regs.rs | 47 +++++++++++++++++ 2 files changed, 124 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/nova-core/falcon/fsp.rs b/drivers/gpu/nova-core/fa= lcon/fsp.rs index 5152c2f1ed26..081b9fce9278 100644 --- a/drivers/gpu/nova-core/falcon/fsp.rs +++ b/drivers/gpu/nova-core/falcon/fsp.rs @@ -46,7 +46,6 @@ impl Falcon { /// Writes `data` to FSP external memory at byte `offset` using Falcon= PIO. /// /// Returns `EINVAL` if offset or data length is not 4-byte aligned. - #[expect(unused)] pub(crate) fn write_emem(&self, bar: &Bar0, offset: u32, data: &[u8]) = -> Result { // TODO: replace with `is_multiple_of` once the MSRV is >=3D 1.82. if offset % 4 !=3D 0 || data.len() % 4 !=3D 0 { @@ -70,7 +69,6 @@ pub(crate) fn write_emem(&self, bar: &Bar0, offset: u32, = data: &[u8]) -> Result /// Reads FSP external memory at byte `offset` into `data` using Falco= n PIO. /// /// Returns `EINVAL` if offset or data length is not 4-byte aligned. - #[expect(unused)] pub(crate) fn read_emem(&self, bar: &Bar0, offset: u32, data: &mut [u8= ]) -> Result { // TODO: replace with `is_multiple_of` once the MSRV is >=3D 1.82. if offset % 4 !=3D 0 || data.len() % 4 !=3D 0 { @@ -88,4 +86,81 @@ pub(crate) fn read_emem(&self, bar: &Bar0, offset: u32, = data: &mut [u8]) -> Resu =20 Ok(()) } + + /// Poll FSP for incoming data. + /// + /// Returns the size of available data in bytes, or 0 if no data is av= ailable. + /// + /// The FSP message queue is not circular - pointers are reset to 0 af= ter each + /// message exchange, so `tail >=3D head` is always true when data is = present. + #[expect(unused)] + pub(crate) fn poll_msgq(&self, bar: &Bar0) -> u32 { + let head =3D regs::NV_PFSP_MSGQ_HEAD::read(bar).address(); + let tail =3D regs::NV_PFSP_MSGQ_TAIL::read(bar).address(); + + if head =3D=3D tail { + return 0; + } + + // TAIL points at last DWORD written, so add 4 to get total size + tail.saturating_sub(head) + 4 + } + + /// Send message to FSP. + /// + /// Writes a message to FSP EMEM and updates queue pointers to notify = FSP. + /// + /// # Arguments + /// * `bar` - BAR0 memory mapping + /// * `packet` - Message data (must be 4-byte aligned in length) + /// + /// # Returns + /// `Ok(())` on success, `Err(EINVAL)` if packet is empty or not 4-byt= e aligned + #[expect(unused)] + pub(crate) fn send_msg(&self, bar: &Bar0, packet: &[u8]) -> Result { + if packet.is_empty() { + return Err(EINVAL); + } + + // Write message to EMEM at offset 0 (validates 4-byte alignment) + self.write_emem(bar, 0, packet)?; + + // Update queue pointers - TAIL points at last DWORD written + let tail_offset =3D u32::try_from(packet.len() - 4).map_err(|_| EI= NVAL)?; + regs::NV_PFSP_QUEUE_TAIL::default() + .set_address(tail_offset) + .write(bar); + regs::NV_PFSP_QUEUE_HEAD::default() + .set_address(0) + .write(bar); + + Ok(()) + } + + /// Receive message from FSP. + /// + /// Reads a message from FSP EMEM and resets queue pointers. + /// + /// # Arguments + /// * `bar` - BAR0 memory mapping + /// * `buffer` - Buffer to receive message data + /// * `size` - Size of message to read in bytes (from `poll_msgq`) + /// + /// # Returns + /// `Ok(bytes_read)` on success, `Err(EINVAL)` if size is 0, exceeds b= uffer, or not aligned + #[expect(unused)] + pub(crate) fn recv_msg(&self, bar: &Bar0, buffer: &mut [u8], size: usi= ze) -> Result { + if size =3D=3D 0 || size > buffer.len() { + return Err(EINVAL); + } + + // Read response from EMEM at offset 0 (validates 4-byte alignment) + self.read_emem(bar, 0, &mut buffer[..size])?; + + // Reset message queue pointers after reading + regs::NV_PFSP_MSGQ_TAIL::default().set_address(0).write(bar); + regs::NV_PFSP_MSGQ_HEAD::default().set_address(0).write(bar); + + Ok(size) + } } diff --git a/drivers/gpu/nova-core/regs.rs b/drivers/gpu/nova-core/regs.rs index 30a5a49edeab..861dbde5a0ac 100644 --- a/drivers/gpu/nova-core/regs.rs +++ b/drivers/gpu/nova-core/regs.rs @@ -441,6 +441,53 @@ pub(crate) fn reset_engine(bar: &Bar0= ) { 31:0 data as u32; // EMEM data register }); =20 +// FSP (Firmware System Processor) queue registers for Hopper/Blackwell Ch= ain of Trust +// These registers manage falcon EMEM communication queues +register!(NV_PFSP_QUEUE_HEAD @ 0x008f2c00 { + 31:0 address as u32; +}); + +register!(NV_PFSP_QUEUE_TAIL @ 0x008f2c04 { + 31:0 address as u32; +}); + +register!(NV_PFSP_MSGQ_HEAD @ 0x008f2c80 { + 31:0 address as u32; +}); + +register!(NV_PFSP_MSGQ_TAIL @ 0x008f2c84 { + 31:0 address as u32; +}); + +// PTHERM registers + +// FSP secure boot completion status register used by FSP to signal boot c= ompletion. +// This is the NV_THERM_I2CS_SCRATCH register. +// Different architectures use different addresses: +// - Hopper (GH100): 0x000200bc +// - Blackwell (GB202): 0x00ad00bc +pub(crate) fn fsp_thermal_scratch_reg_addr(arch: Architecture) -> Result { + match arch { + Architecture::Hopper =3D> Ok(0x000200bc), + Architecture::Blackwell =3D> Ok(0x00ad00bc), + _ =3D> Err(kernel::error::code::ENOTSUPP), + } +} + +/// FSP writes this value to indicate successful boot completion. +#[expect(unused)] +pub(crate) const FSP_BOOT_COMPLETE_SUCCESS: u32 =3D 0xff; + +// Helper function to read FSP boot completion status from the correct reg= ister +#[expect(unused)] +pub(crate) fn read_fsp_boot_complete_status( + bar: &crate::driver::Bar0, + arch: Architecture, +) -> Result { + let addr =3D fsp_thermal_scratch_reg_addr(arch)?; + Ok(bar.read32(addr)) +} + // The modules below provide registers that are not identical on all suppo= rted chips. They should // only be used in HAL modules. =20 --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010034.outbound.protection.outlook.com [52.101.61.34]) (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 0AAE0322B9F; Sat, 31 Jan 2026 00:56:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821003; cv=fail; b=sN5ZLaCDDZ4jRz7Gm7/fdXSXxA2Zy6dPTMi+phbzyyGBDlxLSx4kRkDA+WKYXWG+87rv4l59+DKc2tKg7ey8cxyUQFH3WBPnxsezQ7qzsJ4qdawZpl7YAzxbBgKFevLviTWXmqX9ZvOK2HEGqDDIsyuDqnr8FAkwB/dSnn9l4AI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821003; c=relaxed/simple; bh=DGpRVmqUjMsbol+6Q+HcHcEVcq5vKMifMGJomIS5tbs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=m678YHEWsagCtz3WcrC/+Tq69naJxrGINoMJgn5Du4gs8X8N7I5cJivVXaAtoaOhYMLbnt0JLoI1hiYBNVwp6eSoeXpBFrGt8GhvD68y+DkO+rwvEsyFwzgrk8BOAiQ29Ldb30Iv5ivqiDfbhQiCqrjPDCTOyFFzvTmV6t7zGHU= 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=gnDEFuJk; arc=fail smtp.client-ip=52.101.61.34 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="gnDEFuJk" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ULdofn8dJJZVT6OrJdCNfNOYdhMWmnt3tD4kQYg80bubo8mArv5qtu5oacaZRmYkNBL0lIJS9lGfzQP3y76WB3gYJVfnrr/etjqqkkSpzfR/oh6mewFnL7T96j2K0cYZyLiSMU6PaeXQVB2QDmDnHf9yQSEgi41X0puFthnofMQLVDr7QzLG2/NtUkB5R6IInhkcPomNrc6lO5Bz/+2EQux1vhbUa47Y0tjTX8KPr4dopNTiFIaZORTnsUif9D4YtvuyS29l/2//k5kn4YvjZA96lOQ+j9PU8utQwrCm65CA1JnGR2whe9ce5t8FsKAOa4+cu5VOLXtgLMUYvSbm2w== 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=ViJ7jZ+qJp7tW5TbjoQ8D7xxmPqaB8TpAUnQR8c49RU=; b=x71wjdhOIDZgDMCR91Ki86j413YeKk8hbqfA4ypTGjjaCrxK0jzUvMli5gwx0FFLHlwKmywqdIKUa52L+C5V+T4YH62bWsPgDIf9W62Sk/niFv/59Ri/mq0UAbtI38CGDr6DvoGFlwOGUmHKGnDVXfvxJJtm/IUkCn0YJraLbHwVGwxtuIw7SSbUY6jSMziCgjMzntYIC9msje6plOnkNocdq2u0oHRetH5aERneNcFnFgCYCN/jYQcc0asnY1x1EwrmsKIw/NAP5GLFD3RBPmzkIZusqgJ1uCNC9a/6b5rJIYevX7jy6cXTVKSUT8IMv+ynE9aw05uKGUyctc6JDQ== 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=ViJ7jZ+qJp7tW5TbjoQ8D7xxmPqaB8TpAUnQR8c49RU=; b=gnDEFuJkeyXJia2GC5RGjaELmomcnKYekzFji+dQbfrPeRxCMbQPiGX5vHftCk0JeNfZIEei+xG/t26hTPEr2eVmV0P4Bfq0e4TXAq04uU9YvHf2JQFKdOkYW/0pmAvi4S4Iu3yZAPC60EFFDAocmESWFG8cTbCK1OFJMeJgrq3MEwQbIUJgR0nusUwDjM4qunNPANqj3/qkah/p1LMZcq9kJMdB9N2vatdLmBnFQ8hCp9cspyoO9KNejV/UlG7PO11TP2cVP7+fIh9IQ+FMzf4vFrQkhMlInjSxlHPRbhnDbnbkBtsis63gvLtOsEMB6KnXAF6QKXPFjxtRIz2NmA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:32 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:32 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 18/30] gpu: nova-core: Hopper/Blackwell: calculate reserved FB heap size Date: Fri, 30 Jan 2026 16:55:52 -0800 Message-ID: <20260131005604.454172-19-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR05CA0039.namprd05.prod.outlook.com (2603:10b6:a03:33f::14) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 8f2b3044-f1b0-4b55-6b58-08de60639314 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?McrVlg7o8fmWFbOFIPxUCK7SSJ9H0Y1Lnc1SdAcw8OSQds4LsvmI4r7g+pzd?= =?us-ascii?Q?tj4zLa30AvPPzmzDlxCz1WQSGXQDSxCe7wK9TTgHYGkIrFLudFtPjlYtV9r2?= =?us-ascii?Q?xHp3GzlfYDUUhBHh7tGg06AKoFnLxt3sFcwc38WKerbKk7vQ4sSe1HDhKjMs?= =?us-ascii?Q?16GO5Ed0vTZ107rTK+a0OdxNyPcKsT6AbpfzNlR4mumGoRb+UnH0K6fFakD4?= =?us-ascii?Q?kp/1TclEEi0x76ppgw0e9QemQfjRHOuY7il2Wo/0YedfvNC8wbAXU0ipW4I6?= =?us-ascii?Q?7rTmxzWveHnUsx64bx8KiPLFB7PoobO5OAp5NFdkNQqp3mBCIszdnJsxW9G0?= =?us-ascii?Q?LSgkf7j3hOBQCEoK0inge17MSxi3J4RZus/dSh3nYtubqz04QkRi5YEzfY0i?= =?us-ascii?Q?sozn9qlBY5qE49yXHg8XQZ3s/nfKzmAiJqSMQJULa3O0hWTNRJ5gJIAJbMbI?= =?us-ascii?Q?Hgc3Nu9CREXEFMGy2FZHs5tV9zdqtlEH9O97xKIXmQS2oBrGXs0577lqK+rX?= =?us-ascii?Q?9xmYocBWZv5+LV4Zxyza8H+qlfG60g8i2mygCEt4vzHnlqoeUfhBCATuv7qG?= =?us-ascii?Q?M6xK44czHmC1JJNuo43wgM4xyovA38pvYaDHC8QVtxq0pJTP8lWiIWY2nB08?= =?us-ascii?Q?kHA6EhiCs0Az2WUbWiejDYpm0nW8bbL9qvLdF4ayk0MBe3KJow598uoRWf34?= =?us-ascii?Q?SPidPP3UGL4DXz3fkYESzG9MaNLx9r92Ix6DKc89q/sPtpocEQ5lMfjRjqhs?= =?us-ascii?Q?xD3vRhNx3ag4Zukd/Y9RQacTpcp2xEAPXpmCXozqJoT2sr7rsXzRWlkwVTg6?= =?us-ascii?Q?EQg/uyyO6oveOt+oRGaDbhNdtJn0wpMg06ZBcfXKcjVHoW7qMMl6ElYrD7+4?= =?us-ascii?Q?9CkpOLtf4EOWZOiTqg36CLH4oK3Og4REm2vPhOPd4rT98XDr2ms9l6oUoa98?= =?us-ascii?Q?1Uoax0pOEiceQMSWyUaC+I50DZV4CNffHmj6wvbITMSDPz7ZdSCuxkxMv1/B?= =?us-ascii?Q?CO8Muo8tWx3iHYvmQI2RTDy9H6as6T2BdLQYDexHF1omnFqtjdPhccAgIqac?= =?us-ascii?Q?M9ZjuBsATbY/jDyIjGGRPza+jANRaynb+nwza5UsUGwymX4nMruvEre0pxCW?= =?us-ascii?Q?d5SUV6uNjvpvL6GawcLesgmvYIXXaj6BO1FEF3VtrMC/WJNTAETeA3pp/P59?= =?us-ascii?Q?PWhmmT1wNAJ3WWAVtj4SJ7OE2HSxPHoOh68iqutpeA88NxSRpsM/l02x57Xx?= =?us-ascii?Q?w/bu7Pz554cCsgyjMTi/q6naA8zQLr78sGDzl2Zzh8wf4G74BbVZZD5sPIoD?= =?us-ascii?Q?74igHeFAkXT9utzZt3VRRQhMkS4Ts7Vlq+xccOIXWJE3ELUx5SrAHJ/iocbU?= =?us-ascii?Q?X3KCy7xMcJ21mDi+qemdpprP8/OzFXDEoQ4HMXl36PFPioAhyV4D+o22PjT5?= =?us-ascii?Q?SCxxGI9yoBiRxxTKlnKmT1zqz9cV1Msy/zHZveME+ooPWxAFzfbz0xxp9qON?= =?us-ascii?Q?VRev87wK299ekfKTAgoTug/j89g4HeoEJG1IlwpULSJEvIpOROYkVPyhEs1y?= =?us-ascii?Q?Snyi/B4tyFb3/IweNOg=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?3A8Mcig3Yf5+4Tl+Z+QCRddTcsExCcx/Zs9Sm0GrSSK2dmClx8lGbwbyUND4?= =?us-ascii?Q?CEisYH6h4y/6rHkgja8ZmvpjDxfO0q7dzzPcahMz7BfdFfuml/RogNBHPiQs?= =?us-ascii?Q?3o67zpz41D7WQNDIA2hhoJmnYUEO2UwjtdNQxUq9ussqbaJRX/QrzY3VZSkK?= =?us-ascii?Q?zqeL2LJMPcmU/H1HS0SgVKxI1u6nc25s11mnU6k6tU/vD7qzUmmFOp22ovZd?= =?us-ascii?Q?KUk9nNOgqaej8fWyf8uV1yt5durJuc+ZszvE8SShB4Thgr7/+hnHluMaGmYM?= =?us-ascii?Q?Bs3XsC7N/Gzo5U7wsoCiRIYX+XLtsqLUAIFdO6Taa+Ij4SBTMU9eAU37JtYs?= =?us-ascii?Q?Oj7JI6YRQ992GH/5ncAfAax7zXERFcTBA+cJdMO0Xc698sPUCZvbRasn+3OK?= =?us-ascii?Q?45SsQjgQ/I0FHYFe4KhVoDNkaaKQ+lIbaEYcSAD8g03TfBCCXI+lfmkItVhi?= =?us-ascii?Q?iWqzkyAEXXgCEoW5fnNPzw6qf20F7toNfwqC2aAnVfcNpr5xo+jrf2s7l8AV?= =?us-ascii?Q?PzAhQbByhHxr9/vKmnxPknC/t3MsUhtnxLTQ/WZZD2YtcFmF0WFLTpHkYLr9?= =?us-ascii?Q?dJQg8aArjcnTCzO9RYtReOPG/gCQPaMpyzhTRq/srv4LbCe566DSY78XuKls?= =?us-ascii?Q?JhPiZIlRGq7qjNl/jD6Huvw6VRjnUlXo8ogBklr3ZCtUy7S8NXwt0Y75Up5g?= =?us-ascii?Q?0ondFi5Y4SLwYcAqYML11YgxIaIvTWXIx53S/VN1IYTtkCrkCl7yaJk5XCkQ?= =?us-ascii?Q?bwhhZx2Vqb8yoHkwFuXvtsYVHnh5iUUHQIerIbi8JKSaK1YI6ad0ZiTI3+Tf?= =?us-ascii?Q?SbojIi4PrbZz34smexfWZ6StK6aC9DmlBBahFdFGz4rmaZD5E1Gk9SUrfw6r?= =?us-ascii?Q?qen9CyYY8Z24k5jxuI7iZtEOU846hEne8qAEAMqL0jySbYVLxdvIVCGw0wL/?= =?us-ascii?Q?dbEujVUeccqH2Vev1l+tQu5Mu4lJmjSj+wL6aKBjIgTcMg/RJGbIqX2bfPtM?= =?us-ascii?Q?fEfkXiwgcozeaCVcAEbQmoYFTqGrlBfN43qWqUXobs7k1NPF/X34XAQA/3Pe?= =?us-ascii?Q?rfOj/j0HiayuOw++1PBo529S3hYfaXjdmpBwB4E7eJS1T++OBLwXWDZP2UKk?= =?us-ascii?Q?93lLuzeQxCkbI29stRoUwP7wdHRtTIqDUG2saR8eMjcA2v4vmRDpOmZ8XVgq?= =?us-ascii?Q?SmcZbSC1iaGDs4/l2LmzXymej/Igot1EkCtMmEJgdnIRQslP2ZGfHPinJngQ?= =?us-ascii?Q?CjrKloG8s4J7mZFkATytRO5DOnAg4rKKSWNcMZ+OKJIlRLRG94Gs9eryFnO8?= =?us-ascii?Q?vh+CgPb27kcfNNuQBNlZvUN5o50C9iDrDuBCJuwTJQa5m0hwF4HFXSKc1qBN?= =?us-ascii?Q?C1SizQnQyXtHaXpYCu3Ry30t/ZgVYiugYpzAgtqdlDFaWAYm2vv+p2wBKMr6?= =?us-ascii?Q?jC1SbjauZ2z2sDCnt9fHpf2Hapt3L05miACgjKuwLICC2VMOYi4ap+8xeDPR?= =?us-ascii?Q?6edWGddZb7tl7FnhdVTdY5aWovjAJ0f+qYnDgNTIKriZXgWKzVmd5SKNxCR/?= =?us-ascii?Q?q5YyxA9Z/20MdLs9GScUuLxBn5FUu4sut7H0cakxX68IFCDPJTUHLKZJU2og?= =?us-ascii?Q?KzbbKvLKNDR5MZkT7MjUkS9DlrGH2O9WOioLrNYMqjkQxLuuF2lcP9TEmVvH?= =?us-ascii?Q?xg+k4yZlgPFGBO/IN8scmFeCv0FayYfREtCcT1S1cMXqRf6FdZPJK81gQ+3W?= =?us-ascii?Q?odhYch1FFw=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8f2b3044-f1b0-4b55-6b58-08de60639314 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:32.0468 (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: OnUxS4IX0FkvQTho6gsJWv4ilOTxEzgEvPHsxjPloY5JNx9GiKdVK37+1euO7AbP95Iu9fDFyfoOzpZ2Q+OZ7A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Various "reserved" areas of FB (frame buffer: vidmem) have to be calculated, because the GSP booting process needs this information. The calculations are const, so a new const-compatible alignment function is also added to num.rs, in order to align the reserved areas. Cc: Timur Tabi Cc: Gary Guo Signed-off-by: John Hubbard --- drivers/gpu/nova-core/fb.rs | 18 ++++++++++++++++++ drivers/gpu/nova-core/gsp/fw.rs | 6 +++++- drivers/gpu/nova-core/num.rs | 10 ++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/nova-core/fb.rs b/drivers/gpu/nova-core/fb.rs index e803e6e0cdb9..9b4407338724 100644 --- a/drivers/gpu/nova-core/fb.rs +++ b/drivers/gpu/nova-core/fb.rs @@ -170,6 +170,9 @@ pub(crate) struct FbLayout { pub(crate) wpr2: FbRange, pub(crate) heap: FbRange, pub(crate) vf_partition_count: u8, + /// Total reserved size (heap + PMU reserved), aligned to 2MB. + #[expect(unused)] + pub(crate) total_reserved_size: u32, } =20 impl FbLayout { @@ -257,6 +260,16 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0, gsp_fw= : &GspFirmware) -> Result< FbRange(wpr2.start - HEAP_SIZE..wpr2.start) }; =20 + // Calculate reserved sizes. PMU reservation is a subset of the to= tal reserved size. + let heap_size =3D (heap.end - heap.start) as u64; + let pmu_reserved_size =3D u64::from(PMU_RESERVED_SIZE); + + let total_reserved_size =3D { + let total =3D heap_size + pmu_reserved_size; + const RSVD_ALIGN: Alignment =3D Alignment::new::(); + total.align_up(RSVD_ALIGN).ok_or(EINVAL)? + }; + Ok(Self { fb, vga_workspace, @@ -267,6 +280,11 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0, gsp_fw= : &GspFirmware) -> Result< wpr2, heap, vf_partition_count: 0, + total_reserved_size: total_reserved_size as u32, }) } } + +/// PMU reserved size, aligned to 128KB. +pub(crate) const PMU_RESERVED_SIZE: u32 =3D + crate::num::const_align_up::(SZ_8M + SZ_16M + SZ_4K) as u32; diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index 83ff91614e36..086153edfa86 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -27,7 +27,10 @@ }; =20 use crate::{ - fb::FbLayout, + fb::{ + FbLayout, + PMU_RESERVED_SIZE, // + }, firmware::gsp::GspFirmware, gpu::Chipset, gsp::{ @@ -183,6 +186,7 @@ pub(crate) fn new(gsp_firmware: &GspFirmware, fb_layout= : &FbLayout) -> Self { fbSize: fb_layout.fb.end - fb_layout.fb.start, vgaWorkspaceOffset: fb_layout.vga_workspace.start, vgaWorkspaceSize: fb_layout.vga_workspace.end - fb_layout.vga_= workspace.start, + pmuReservedSize: PMU_RESERVED_SIZE, ..Default::default() }) } diff --git a/drivers/gpu/nova-core/num.rs b/drivers/gpu/nova-core/num.rs index c952a834e662..f068722c5bdf 100644 --- a/drivers/gpu/nova-core/num.rs +++ b/drivers/gpu/nova-core/num.rs @@ -215,3 +215,13 @@ pub(crate) const fn [<$from _into_ $into>]() -> $into { impl_const_into!(u64 =3D> { u8, u16, u32 }); impl_const_into!(u32 =3D> { u8, u16 }); impl_const_into!(u16 =3D> { u8 }); + +/// Aligns `value` up to `ALIGN` at compile time. +/// +/// This is the const-compatible equivalent of [`kernel::ptr::Alignable::a= lign_up`]. +/// `ALIGN` must be a power of two (enforced at compile time). +#[inline(always)] +pub(crate) const fn const_align_up(value: usize) -> us= ize { + build_assert!(ALIGN.is_power_of_two()); + (value + (ALIGN - 1)) & !(ALIGN - 1) +} --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012046.outbound.protection.outlook.com [40.107.209.46]) (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 8FE8E3451BB; Sat, 31 Jan 2026 00:56:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821005; cv=fail; b=TL8pKmet73roeB4sVRDAZj0cJiVcsLz8ZQjfvcZdcrWIJJ1lw3pc5/rcIHQztJay433SnTAC71uFxRLNdqN4gnOu719klxYBdWKvzKBLBdsVvVFJGERLW1ApDqVBBjruiI28kojdV4PBsZ4U+HGO4+wP2wx8/e7suwYGHuzXmPo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821005; c=relaxed/simple; bh=1QDwSS3xPcBkbcxWZ5FS7Z3p/48jGbdyydDurgaoPCo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=UKlMRQqgQ5Vwx9ezVdootg2vlULPgKRdgsvVEek4NV1Hw9GGTVg0HxhB+bJFvsL7gLyihNGoiUqkt0dkFpkttkTZDNbnYgScfqpxE4nTQvHfUsI/CXe8OmUgiznNBke7EQeDBcIfpWdjd8nh8nA7gBjfJV6LPondJBKBOgdpp8M= 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=MRmBD9rm; arc=fail smtp.client-ip=40.107.209.46 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="MRmBD9rm" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qALDfjQsE4AMKphAMjMToz27uf5asCw1wOzj49Lkn7obVjphns8S12KAScCnAacYf88P92UYxz+IzVH1B/13CzIotAY3KRW4wfbNBJ7cKY5/IOaTkYp5nMvDHnWcEdULYLyTDRTv0ox/bFaN6x4935uKrDHu2NaPoj2nnBDkcJ2OB4i5D/ZaD4ad8c0n/Sn5RqqvvogTmqXFGeb9hF88l841rjJblI1xIx+D4ARc5QdsHCBMblFWxWgY9MaFHFXfqicCR6Enyet5yqhdqaJCGDuGjLPOHFovS9Rq1th2I6sNSFJuk8C6a3WqfiTcRJwbW678uX5QZ2vwF8K3LG6d1Q== 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=oV/G7g8OzklrxJO1p49pERJ1k89vsa4vdEA38MLWgmA=; b=nwEZJwpGBH6yQu4/GD9M2YmgFxbhvPtD08iR3CI3y8FLR2sOyjcNd9frgomsoU8krr+HNrH11imwxQN1mEacfce44E334f5L9bigG9Fi1gwBpJvQfyFfSsaqcDQlPg6tplBYthlHXMJhNcIOPKhQX0TFWz+36dr/fXs89/fcUBMNdNWwOxY8iGvSDNvxdRW5PVofm59TGzYBQ1oiX9blLckxWlr0lX7mQH4zpjRrmcREidPOMnemD2eZXtddzh8RxohXhHk9OZICE6Fa5TCW5OfKcLmwQkBpn+bZoVRFm1pXbb6tvWo1AzoDJTsBPwqdTShxiLTEophK5YdUsBcT4Q== 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=oV/G7g8OzklrxJO1p49pERJ1k89vsa4vdEA38MLWgmA=; b=MRmBD9rmQ7d2rDEKHwqXVodMZyeokxIi7T9t5E1v88LF44/Dvex8jN7zQbiXwvmuQYwrb+0Dog9ehPVmEG0TAp3nSLJp4JFkFFAKQvwghDC3apMcGkMXf/I47K06VCGmLNWNcCRCS4fL7oU2Pxye1+65/YG+EXMWuQa+Q5WI6TIzCg/c1eLdFfmJx83Di7nTbq0szpeRN0EOML8YL0I/36VqvVpt84exweBzUMOvNweviwmn2FwoDrvSa5dyZyo/PFwwRp3qxjFLwLuaXd4kfWisV4NyfCkZy+3MHQ2PvZdUJcEh6Q2QgqcsvrLle0qis1QV8yXRK47GqzdNMWSZpg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:33 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:33 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 19/30] gpu: nova-core: Hopper/Blackwell: add FSP secure boot completion waiting Date: Fri, 30 Jan 2026 16:55:53 -0800 Message-ID: <20260131005604.454172-20-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR05CA0006.namprd05.prod.outlook.com (2603:10b6:a03:c0::19) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: f50fa130-6843-4cf8-9f4b-08de606393bb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?jVmkVZU9M8TJyhWYtvBr2KQvsNyeihyk2K5a1/rd0rPn1Dt7RLr5sNhYuCNU?= =?us-ascii?Q?Oab9Tkzd5nWqGKR8JV4DKsv/Fepu5j2PW2IODDJBrE8/pq8cd6h2Vq16TdHC?= =?us-ascii?Q?q65Hi7mHRnugpp9GaQJjvV0R/uqFWVaiMnTMVbuThLWQXttYy58U4KyaFiJ0?= =?us-ascii?Q?Gsbr7pbj0jdkuiPPXcykJp9/qnpiJKqP9UyXUMwzw1IWjlxjdC23PRhw8ki4?= =?us-ascii?Q?G4HNisGT+rdQUlRdwQWoFq3AlLXr6mHLK2v+wOJWw2HFDQ+HxZimyTys9oPt?= =?us-ascii?Q?R3sYcUj3UUeSQiurgiIWoAgZRnxjggUDK/1HdvW6fas4GgyjlJi5R2r3Z5vJ?= =?us-ascii?Q?qDgxluBEGbbiLget5dbzFQgYiEqzgzX/aShDkzqylcvycrAVNPURYw4Ethkg?= =?us-ascii?Q?f+kMlrxf8/c5n3l/m7Rw7PRmYolVEonKLesltU1vUp28EOWISx9j/1ywiezi?= =?us-ascii?Q?bwpfyuTZHMomAtvQXRVoDedc7Wvt15Bc3OFYUoRC+6aRfB5WgduuhqKDKRlm?= =?us-ascii?Q?usDSSQMGuOy48Z/BAVrj1GG7bZAp/jOmKMnyDPmkEib4mVwffGLcBqsHLmVH?= =?us-ascii?Q?w/fOKVj+6YFETyNFjKMMQZ/hR5I10l1EO+p5ChJFXrO7QHqtOPmm+38KnR5Z?= =?us-ascii?Q?438X3OGqtBEZZoZQqAzpAvYSrKRiNsWB3nISOXF/z5MCeV9CnHBgiGjv0riI?= =?us-ascii?Q?0nNiknJCvQA30aZkJfL5tVoNeNIL3Z+KSzfH3szDiUGiolPqfoyob4mAS6iH?= =?us-ascii?Q?cnzw4X6lKEYVmsYhOhukA2x6ul89+qs46jQYmQOSW1g3k8W3+44TPeL0aIrj?= =?us-ascii?Q?mOWEHeDi6Tjy0hZIKN8X3+dBmJ9jn2gFUGrB96lvcKDonyB+2md7yYUzXRlR?= =?us-ascii?Q?I0XXo3EGgRXiPoO22CJfbwdWWL01NU0SB9LZOHn8fnvt1smkjggTq80ZEHGe?= =?us-ascii?Q?VfO4zeyQL15eaGFZQp6G0aTIgFqIGkcT1VQueC8G6Y+GL7g8a8DKZw0zY+vT?= =?us-ascii?Q?GaTlXZDUNg1y/sAgbfTiFKM5KbQFbAEwXQAch7oOriQ4FUg4O2obRY7PBRMV?= =?us-ascii?Q?3ddGWGjQ+L/wOdslY+Oa0mjve6iSaLt0faub85b0rAn7Clsz3vowWJdy8EVV?= =?us-ascii?Q?An7XW5z3rM1L5DI7V7LVDDDlk18WOne1R6JQ71bCCoITzK7SFmsWNHpueZcb?= =?us-ascii?Q?SztkgKagH6fdpx6QHLjUswl55qvztRDzzGpgy/p3b0h4aEZ+aQ/vF172J4yR?= =?us-ascii?Q?t2knU57CDiRhsOrSsJE1I+ZFUfdg1hdE/dHk+xHNoU6gRJkpYhm+SnmEsP8W?= =?us-ascii?Q?atnyFdMvJbiNmXOVMP4GFBnxN/KONXgSokNb4uc+PIvkjBIdy+NEVdaDUPVI?= =?us-ascii?Q?XNWFgUocSsB1JkpfNbY6mK7j/TL4nANyIqUeI14UzVuZR4S3z6DIT+gZVebc?= =?us-ascii?Q?NylXNHgbtI9IWx+DxMu2DcX27Sr9D34BKVsS9bioDZpwRGKibL0bNLt+u+Zg?= =?us-ascii?Q?6k3AoSQWZWNrl10IGhDNQOHrQM/QG4PYjPP3TjcqeR8Rxcev3g3Jo7sGajUG?= =?us-ascii?Q?DQtY89iCwH1hYUCyEFI=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?woPoMa8HEvyXrqBGTYzxa0ZSdalYQbESrLNRxuFqgeCbTDe1vC+Xc59E9xMx?= =?us-ascii?Q?yJ60WJYHn4Y4aCGOqX6nO2b9nK84xuur3iKPlzkCFTICjggggF6TlOyAgxtV?= =?us-ascii?Q?ClxrCvGbSzY/q1AikP65ofyELGB1x3iEldsbJg9acITyxIpXyjSHrhmUoYlw?= =?us-ascii?Q?jG1fJaD9dCKGNmYfFV+YUzTwcuDzJJ+yyDvoADjPDRjKIo6DInFy8vEyg+vI?= =?us-ascii?Q?wDSZ1iSMXHhdILnwpRppds8uNmYff8iva+rhwQBmMwg6Tc0u8R7FSEuR9FHO?= =?us-ascii?Q?0VoEn2k2p1uEyRt+OR1SdoNtZ0d0czVPP3lHlvdIHpdIyw6095sGX8eA2L+u?= =?us-ascii?Q?rI/uOsH1zK6vi7TChixd/ub4a3kAPmyV/BMcho0LYsNgzE4FUnSQOvwv4Ekp?= =?us-ascii?Q?MyLs/i1YNZ18B2k2Vat42bch/IfIQrG5poEk8SG1x/4LGl5GURrelrWzLp82?= =?us-ascii?Q?qbZYuEsCe13Syp0zvN/S+0yU3lojb1IO0iqe1XPV7qxdD1dtBdLTtKk3kKHX?= =?us-ascii?Q?clUzo4mUyz8dQZ7AktOtcnAZXPXVJgpJKp4gNEDzGnxJV96yTCsZA0rgXty1?= =?us-ascii?Q?P/k3EAY79nI/azROVo19PaYXisy9zBI5vcSIf/f104HhIfRPSOHSmzvn/lE6?= =?us-ascii?Q?6M7X4rn1R5WW1id8PIbSAWr0VFdkjDE3CZj+W6KpJa8T8jNRocqkjJQUWpn1?= =?us-ascii?Q?xzDVIVWrK+xlwSCKnEfMlelbuQ+KM2wjfSJ6k3oEORVSvpk1k171goN52tZQ?= =?us-ascii?Q?m3W3DpJE4Si0RE5qypyALWBuHsxNG3+4ohA6jPqBVO+IhnhygZ8hw2x2NwuE?= =?us-ascii?Q?pHcogQEDrHqTcepQHGPATTdeHGO/ZDaYViK9sETak7x6m2RomXPQaLg4b2nK?= =?us-ascii?Q?jt0qLXxWOctCVG5Z6+SKGuDqSVDKCsSCDntLk7yAqxGHiw4DtCz+t7DXCHRN?= =?us-ascii?Q?2xB2AEObYs1bgN6YzdIInSsENPJcJJ4dTxzD/G3HGmLeGzIsK6QcLdNj9BTn?= =?us-ascii?Q?tv2S5GC+Fa9n8/FnW+rUY+fNGV72G1hvkPPFrssJxUrHXaQTmKwDfHUPqnlg?= =?us-ascii?Q?7NClS0JffPP6hYyVixMeBnOWCMGubxSVNI+XFsM3hH11WlDmlqH6LuJWl0Fz?= =?us-ascii?Q?XIj2hoqYSlA1XUQxrOO75+fTXTfHMFYdieHX+4cB1MJLurP9AWXppAdMJEQS?= =?us-ascii?Q?iUkrNMQ+w1lWHpfpSkquGLGw5zW2JifSWEk0wJCKWjJrT4HMnl1B+n/m2qoV?= =?us-ascii?Q?NSxr2GwXCPaHNRiZGf3G2TuD2Ee56Vuutnb0t68eEX0LsOXv7Gbyc7FVKVRC?= =?us-ascii?Q?v1UxU/00SyRkf9FOkZZi73pcjLmclgJXZFFXRAqSwLwqh0tMrIgStyehibka?= =?us-ascii?Q?luT9X23skl+IQuuq8gAkjZpdKCZBB5w0JIUJUm//BRqXkK/W1+n4KsFk/+UO?= =?us-ascii?Q?i64ag2cv01Lkg7ShiA7fm8J7rRK8k92DEhAaNQn/7YpGzwFSG9MwIEp81k/E?= =?us-ascii?Q?71wiUjmaqwbVXYR/voWm62dtUcJHfA6daXzkl4Z3BxaOF1ZR4jZu8UCm07TF?= =?us-ascii?Q?NhwPSPjKQ+rP7twqOAiTQoNKybMRID1fM69bb18h0LkEQwJncMi8t2hCsn+H?= =?us-ascii?Q?EPhOn5pl9c4JHvYNoCqzBdMgp5ElLDlDgoz5021IBSwJ4lHawiqWR5oKKKFB?= =?us-ascii?Q?DL/zjPV5SSvcsl160iSMizQU3ujIoSFd8dIuKBXTfJzxNNltUwQxRMygJD4y?= =?us-ascii?Q?ap0WmETYZg=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f50fa130-6843-4cf8-9f4b-08de606393bb X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:33.1143 (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: vZ6LX4VG4HMETTz6p1OTAVCfbDW/1emKhgDsQ9mXkb+H0B1g9FaI45s29ooWtJ8Jxnodwq4gBglh6GveT0znFA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Add the FSP (Firmware System Processor) module for Hopper/Blackwell GPUs. These architectures use a simplified firmware boot sequence: FMC --> FSP --> GSP, with no SEC2 involvement. This commit adds the ability to wait for FSP secure boot completion by polling the I2CS thermal scratch register until FSP signals success. Cc: Joel Fernandes Signed-off-by: John Hubbard --- drivers/gpu/nova-core/fsp.rs | 168 +++++++++++++++++++++++++++++ drivers/gpu/nova-core/nova_core.rs | 1 + drivers/gpu/nova-core/regs.rs | 2 - 3 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 drivers/gpu/nova-core/fsp.rs diff --git a/drivers/gpu/nova-core/fsp.rs b/drivers/gpu/nova-core/fsp.rs new file mode 100644 index 000000000000..5476259d224c --- /dev/null +++ b/drivers/gpu/nova-core/fsp.rs @@ -0,0 +1,168 @@ +// SPDX-License-Identifier: GPL-2.0 + +// TODO: remove this once the code is fully functional +#![expect(dead_code)] + +//! FSP (Firmware System Processor) interface for Hopper/Blackwell GPUs. +//! +//! Hopper/Blackwell use a simplified firmware boot sequence: FMC --> FSP = --> GSP. +//! Unlike Turing/Ampere/Ada, there is NO SEC2 (Security Engine 2) usage. +//! FSP handles secure boot directly using FMC firmware + Chain of Trust. + +use kernel::{ + device, + io::poll::read_poll_timeout, + prelude::*, + time::Delta, + transmute::{ + AsBytes, + FromBytes, // + }, +}; + +use crate::regs::FSP_BOOT_COMPLETE_SUCCESS; + +/// FSP secure boot completion timeout in milliseconds. +const FSP_SECURE_BOOT_TIMEOUT_MS: i64 =3D 4000; + +/// MCTP (Management Component Transport Protocol) header values for FSP c= ommunication. +pub(crate) mod mctp { + pub(super) const HEADER_SOM: u32 =3D 1; // Start of Message + pub(super) const HEADER_EOM: u32 =3D 1; // End of Message + pub(super) const HEADER_SEID: u32 =3D 0; // Source Endpoint ID + pub(super) const HEADER_SEQ: u32 =3D 0; // Sequence number + + pub(super) const MSG_TYPE_VENDOR_PCI: u32 =3D 0x7e; + pub(super) const VENDOR_ID_NV: u32 =3D 0x10de; + pub(super) const NVDM_TYPE_COT: u32 =3D 0x14; + pub(super) const NVDM_TYPE_FSP_RESPONSE: u32 =3D 0x15; +} + +/// GSP FMC boot parameters structure. +/// This is what FSP expects to receive for booting GSP-RM. +/// GSP FMC initialization parameters. +#[repr(C)] +#[derive(Debug, Clone, Copy, Default)] +struct GspFmcInitParams { + /// CC initialization "registry keys" + regkeys: u32, +} + +// SAFETY: GspFmcInitParams is a simple C struct with only primitive types. +unsafe impl AsBytes for GspFmcInitParams {} +// SAFETY: All bit patterns are valid for the primitive fields. +unsafe impl FromBytes for GspFmcInitParams {} + +/// GSP ACR (Authenticated Code RAM) boot parameters. +#[repr(C)] +#[derive(Debug, Clone, Copy, Default)] +struct GspAcrBootGspRmParams { + /// Physical memory aperture through which gspRmDescPa is accessed + target: u32, + /// Size in bytes of the GSP-RM descriptor structure + gsp_rm_desc_size: u32, + /// Physical offset in the target aperture of the GSP-RM descriptor st= ructure + gsp_rm_desc_offset: u64, + /// Physical offset in FB to set the start of the WPR containing GSP-RM + wpr_carveout_offset: u64, + /// Size in bytes of the WPR containing GSP-RM + wpr_carveout_size: u32, + /// Whether to boot GSP-RM or GSP-Proxy through ACR + b_is_gsp_rm_boot: u32, +} + +// SAFETY: GspAcrBootGspRmParams is a simple C struct with only primitive = types. +unsafe impl AsBytes for GspAcrBootGspRmParams {} +// SAFETY: All bit patterns are valid for the primitive fields. +unsafe impl FromBytes for GspAcrBootGspRmParams {} + +/// GSP RM boot parameters. +#[repr(C)] +#[derive(Debug, Clone, Copy, Default)] +struct GspRmParams { + /// Physical memory aperture through which bootArgsOffset is accessed + target: u32, + /// Physical offset in the memory aperture that will be passed to GSP-= RM + boot_args_offset: u64, +} + +// SAFETY: GspRmParams is a simple C struct with only primitive types. +unsafe impl AsBytes for GspRmParams {} +// SAFETY: All bit patterns are valid for the primitive fields. +unsafe impl FromBytes for GspRmParams {} + +/// GSP SPDM (Security Protocol and Data Model) parameters. +#[repr(C)] +#[derive(Debug, Clone, Copy, Default)] +struct GspSpdmParams { + /// Physical Memory Aperture through which all addresses are accessed + target: u32, + /// Physical offset in the memory aperture where SPDM payload buffer i= s stored + payload_buffer_offset: u64, + /// Size of the above payload buffer + payload_buffer_size: u32, +} + +// SAFETY: GspSpdmParams is a simple C struct with only primitive types. +unsafe impl AsBytes for GspSpdmParams {} +// SAFETY: All bit patterns are valid for the primitive fields. +unsafe impl FromBytes for GspSpdmParams {} + +/// Complete GSP FMC boot parameters structure. +/// This is what FSP expects to receive - NOT a raw libos address! +#[repr(C)] +#[derive(Debug, Clone, Copy, Default)] +pub(crate) struct GspFmcBootParams { + init_params: GspFmcInitParams, + boot_gsp_rm_params: GspAcrBootGspRmParams, + gsp_rm_params: GspRmParams, + gsp_spdm_params: GspSpdmParams, +} + +// SAFETY: GspFmcBootParams is composed of C structs with only primitive t= ypes. +unsafe impl AsBytes for GspFmcBootParams {} +// SAFETY: All bit patterns are valid for the primitive fields. +unsafe impl FromBytes for GspFmcBootParams {} + +/// FSP interface for Hopper/Blackwell GPUs. +pub(crate) struct Fsp; + +impl Fsp { + /// Wait for FSP secure boot completion. + /// + /// Polls the thermal scratch register until FSP signals boot completi= on + /// or timeout occurs. + pub(crate) fn wait_secure_boot( + dev: &device::Device, + bar: &crate::driver::Bar0, + arch: crate::gpu::Architecture, + ) -> Result<()> { + let timeout =3D Delta::from_millis(FSP_SECURE_BOOT_TIMEOUT_MS); + + read_poll_timeout( + || crate::regs::read_fsp_boot_complete_status(bar, arch), + |&status| { + dev_dbg!( + dev, + "FSP I2CS scratch register status: {:#x} (expected: {:= #x})\n", + status, + FSP_BOOT_COMPLETE_SUCCESS + ); + status =3D=3D FSP_BOOT_COMPLETE_SUCCESS + }, + Delta::ZERO, + timeout, + ) + .map_err(|_| { + let final_status =3D + crate::regs::read_fsp_boot_complete_status(bar, arch).unwr= ap_or(0xDEADBEEF); + dev_err!( + dev, + "FSP secure boot completion timeout - final status: {:#x}\= n", + final_status + ); + ETIMEDOUT + }) + .map(|_| ()) + } +} diff --git a/drivers/gpu/nova-core/nova_core.rs b/drivers/gpu/nova-core/nov= a_core.rs index c1121e7c64c5..af6f562779d6 100644 --- a/drivers/gpu/nova-core/nova_core.rs +++ b/drivers/gpu/nova-core/nova_core.rs @@ -10,6 +10,7 @@ mod falcon; mod fb; mod firmware; +mod fsp; mod gfw; mod gpu; mod gsp; diff --git a/drivers/gpu/nova-core/regs.rs b/drivers/gpu/nova-core/regs.rs index 861dbde5a0ac..cfd9d6f0de07 100644 --- a/drivers/gpu/nova-core/regs.rs +++ b/drivers/gpu/nova-core/regs.rs @@ -475,11 +475,9 @@ pub(crate) fn fsp_thermal_scratch_reg_addr(arch: Archi= tecture) -> Result } =20 /// FSP writes this value to indicate successful boot completion. -#[expect(unused)] pub(crate) const FSP_BOOT_COMPLETE_SUCCESS: u32 =3D 0xff; =20 // Helper function to read FSP boot completion status from the correct reg= ister -#[expect(unused)] pub(crate) fn read_fsp_boot_complete_status( bar: &crate::driver::Bar0, arch: Architecture, --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from SA9PR02CU001.outbound.protection.outlook.com (mail-southcentralusazon11013055.outbound.protection.outlook.com [40.93.196.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 521A333D6E3; Sat, 31 Jan 2026 00:56:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.196.55 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821002; cv=fail; b=dxarnVkmSy555KWgX9DGw/XyUUsL9iYd6GzUVnJUmEI0Zmecmpo2eIlRogIlQ23C+BqovXTAsZCgQ3FyakioA2k8munhqFpa/lVSAj0rB5WutADiZLseeWg+lJf8ehvA2MZ+5M7G2tMMQnTMYVcz0y8ZCi+yrvVLCuTze1TAUhE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821002; c=relaxed/simple; bh=eN3hA/yyokQY3N8+AxjnjQe7dpD2jnMrkQrcagebiA4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Oo6TIHcqqLaa73k7eb46ry5kUHODX3YlLJUWtmB9JsAe5n14LpHZMF9SxEj+0aLTIE/6bPeuB9o9cBMB9+GzlNm/RfuFXyxQ/6Lx+qNKcbPkp9P1hhvyyjezixM8UG3lwkH/vlGaDgKWg1TJnhXdEwu9rKsz9YFg5ufOE/Lph9w= 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=cpM0ADuB; arc=fail smtp.client-ip=40.93.196.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="cpM0ADuB" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DCWcdJ0/dCmm3wcBUCs0qTjoF3seXTFijEKL5YLiwI5ihkUBXi5MVJzjHfXATpQNcHyF1tkqXJ6OCymGzZOa2QBRkvZbvUoQZ8XuX4j17QRMzeLgX9gse1OQjFtMHBVwE0st90LPtgjQjAv59Bn5MUYsjBDQi1yfldFjkQueALItR+uGz0aubnKrLwH2uLoa8OtbhjaIF06BnqbjJSnHBK3q4hmRYE3l/ShRkKnCxddo2LOQcNjjG/Lxfrf6Ff5s/mS7Tf40OZ/92P4Qof2cFrGer+c6ofrWd9mxLCltwsu2J9UsGhbjuswdOBDBv+IFanbLphSh+7hj6KrdVLUf+A== 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=uzIQnjF2UmK0xI9ZfXF6JtUbFagxdGXuBM9MVFh3cA8=; b=ZNweSzcjggSVErtoX2MN8VHGcqMJclpLsgpqBa/+ZRUmMGLq/D6UYmjeIAAuqk0RgTUlRMk4Q9tuxi9Wdf4yqFTBNiCDGKs71PcXKeKD7zqgLblPViMN4Ud1WDriJNTrHsntQo9UI1/heyqJHoOovBdXdZjvKQ598a+yP020IwCTYPsxukdjGOJ8Z7wVmW3vE+gdjzELhl4Uk8YpiKq0sWwerDZqxFWkD9KcpJBsztpIRyDcGdyshDD8zZ7IBgN/HDcIr+jTDOxlEZ6YBbBsEko7rNv6bHblflVtxyU74HtFHx+4vlbMbdhQfHpnSyurBTOiHkd3r7P+w6J5tncYrA== 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=uzIQnjF2UmK0xI9ZfXF6JtUbFagxdGXuBM9MVFh3cA8=; b=cpM0ADuBx+uOaci3SDioyo+biUrJ6CBySKCopJSxeOlu0M6awOhzYxjdzfACK72neqlU4KZes4B5L1vNc4N50x98ZcBFQYcYNryGwYmaafx+3anVJYiAGMYkWn8KKEkOrMv6JtCPqkwPk36lpV4t2KYmoVQViDERJlSr3SjgoBSZI9W9vD349y/NQLlpOnRUnc8cBvLbfVB13TOJJxEaRII/8VEqZ60LhzQqA0BiHfzALanAfWToO8nTO2C8L4sAVEc444S7AHLU3MknJj8AowseWKQfMG5MVYFB7q3IfQOe0FWyXZ84nN1UrNGpwzP0GwRPUPTH8MsJiN4W1hH5nQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by CH1PPF16C2BD7B0.namprd12.prod.outlook.com (2603:10b6:61f:fc00::607) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.7; Sat, 31 Jan 2026 00:56:34 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:34 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 20/30] gpu: nova-core: Hopper/Blackwell: add FSP message structures Date: Fri, 30 Jan 2026 16:55:54 -0800 Message-ID: <20260131005604.454172-21-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR05CA0055.namprd05.prod.outlook.com (2603:10b6:a03:33f::30) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|CH1PPF16C2BD7B0:EE_ X-MS-Office365-Filtering-Correlation-Id: e858a677-c2c0-4c81-22d0-08de60639482 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016|7142099003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?XbbtydFpbE4N9VFYRvnLTjz7kvOh0RMx0VmhlBcEz928XdPG7/D0iJ361F/K?= =?us-ascii?Q?7tMm+9nwKWkVczZ0bDDDd0sARNoMaIzQQnGXQkcAvkhBYtdj2ivUypHryHZ2?= =?us-ascii?Q?qr+kSN+njVQy/bn8ePiaLZgHsD72dVxBZac5m+POfJ67h+bQpXwaknx1ypvB?= =?us-ascii?Q?KNwU8dhPI/6LTZ8TY+ko4kNbEwG+Ct2R97nIJBl8R5wqFgOSMMNs70+SFWHS?= =?us-ascii?Q?+iPaxVIWCypV5C8KC/3bryxQl4n9PlaQ8vOo6nRH/hq9Ayd/FDqbTsarvapp?= =?us-ascii?Q?aAgSBB7KvpPsjRNKx/fizCroL5bDXDah/ATI4oFS436sz9vk/OoIq0euwDpX?= =?us-ascii?Q?FUCL+/XMNsonDdfS3VKXoZWRvgi8qevLSeB5o82LV2OMWVLsOP4mpOSZtAlT?= =?us-ascii?Q?cH8Ye927Qs68VgunTpLhGUtEMn5NeiTY5Ne6loiXDWTEqfDmHzJa7Hic3VTY?= =?us-ascii?Q?ehCfL2Q27Hp+hgeNN37qnXAZYmiWfdVv/GrRx42gRN23YnINiOdenZyMOLj+?= =?us-ascii?Q?TqGujNfnGDoArwJuiowTM3Ud/uBgL62iBPV5dEv4p7E9JEMR/kTrNzAU0Q8d?= =?us-ascii?Q?57fXOvnCVVcNL5Ue0V1yZBBfH7nHW11o02jz543lhBnubBk7X/rQWCGraC+N?= =?us-ascii?Q?diOTwk5/mS4gRRb0cvgPHY9gioqdrkzdZVYBF0GufE24EUlW5PhOCWxq6GVk?= =?us-ascii?Q?TLr9PKRSP5KKz44labZmZaW9ca7uUzmQZCQ/vO/3Ka4TtXQLM11hnSSvh43R?= =?us-ascii?Q?DEo5uEZRLbvWlrBrgsJi2vsZgtsJhHHJbKCa6dA8yVHkYIYxssr0GxirESGJ?= =?us-ascii?Q?hjis1lwQ22jAIzQWKH1ErFuSXlWisqV+Hg59LQsOe5X68oCqTpEYR7p9XFSM?= =?us-ascii?Q?zgcHTH3KCGW4hBaCDZJQZV7vg5AZDwfja9368shQR+p3o55qLd/jhfuHqleh?= =?us-ascii?Q?Xx/X2vIaRYV1w1EARnCXjrK33//mRkzBmKc/uYJ7j+SdYcuPCTeFosMcuZYv?= =?us-ascii?Q?4StlH/oC4mp1tLCFkuB7kbdVWH45iFeWwgBFRnRxm/MmfKkToiJZf52gb0gx?= =?us-ascii?Q?mzZVjKhn+eJ8bndz6aR55bmLD+dpu74bCsxw5aqaaq/dO5Bc+5y68e/pDGyp?= =?us-ascii?Q?TARFkTCEB6opmT719QScWgut11pDHfsY5u8iuOqWfVLvvdGDsC23S2NZeZLE?= =?us-ascii?Q?CupfZP5UZFbGWk74Cpyw1HJgDFWbTfoL5uwA82NLplzIXW++K+PuOUFBOR/V?= =?us-ascii?Q?XPoC0+LqsP9ZWHVHh3iiJqUxvsox5u7XdLyELBc1I1+woySDv+PdZ0RSdppC?= =?us-ascii?Q?hkZzJSW6rGnR6IK7Yhus1tOeVH99OYZsHC7Gz1hU+QCHwEP/1XYJ651oVNH1?= =?us-ascii?Q?wGKPEJXoSGLTu3mqk5OUDm6f5qdccYbf16V8jjL2rOkN1n0HUFGorFID7162?= =?us-ascii?Q?Du9GdSRAoAP8X60cNS/umT3GXcDRidOuIYDtU/K8PvqG95PDkrXbBHGdW5bs?= =?us-ascii?Q?kh1rDxmnvoEWIOB/0JeyYYU4b6U6pWztiehibrh26OExIT/UGrcd3WHTPAGE?= =?us-ascii?Q?gvY0RTUIoOQdTTzv9IM=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(366016)(7142099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Kk5bnzNvuLwd7cSTCJfFNWOnZzPmlRB93rbsTTbz+sa0Y+pjPsjLtOZdtWTj?= =?us-ascii?Q?D4KpEmDFni1EwscPSbS0VPdSGxhKoIFyzm1VHUwlLvhMJGJDz2Dm+pdHLEWt?= =?us-ascii?Q?3W2hodFBT2FH3eiqf7KKW55pjOHep2nNfsCh4hNe05EVUvzTeutFeNkpXjP8?= =?us-ascii?Q?1EU/+EnbUWZoJhrw350HKgkPuYQaYJu2bxzgSPN1ynYscjAD9c1OZQFviXrd?= =?us-ascii?Q?CPt28r253emx6Igc8m1vGxXwJ/f/DIOA0k3yiKVYPoi/l5lOuA7C1YqcPO4B?= =?us-ascii?Q?MUt8HT7FSX96+ru61KZNWtIOrhU2yU2Pz+9PxZtHngZo6DiZL382nMXikqUz?= =?us-ascii?Q?NFhB4dDLqTP7B9AEqtgQJGZOdWVi5rs0SHbXoztfIkdfSBOFCqowBGwd2BOj?= =?us-ascii?Q?ENNlKzSVVgabc72wXCWk4XhBzEg93WSJ7bBBQZ2xmw/sj57wGXz9LUt4E4QH?= =?us-ascii?Q?UWyFwKTvk+/mnqn3K8N/jwuo+vUasarArFoeyE6E8SettDoh4XSNsQDTEKBd?= =?us-ascii?Q?GyAiZu9YF2DCjJfYOskUoqEYiFndTo8RbDkWyjU7wheHypLCkRDI/+fIIqg0?= =?us-ascii?Q?nnWds3HzBTMBqxZlfJ2/Am4sxEtFImIPAftBgNYanS0hEBEtvNg8Q+De/HSK?= =?us-ascii?Q?x5l97PVtUWYOBt9YKZoPNcnNWuzGLEN5lzUBlUiwXKZeN0Po9BdDNJs/EOWd?= =?us-ascii?Q?dTTgYowdZthLOYkyYNP732W9I7nzxcAuaJph708fMaC1Aa6tsaRjYcXcrTZC?= =?us-ascii?Q?QppbXawr5Q6j2BH5M2lsH3wIp5N7b+F0H8w7hUu8gsr7gI0OWqLpGLdnduzr?= =?us-ascii?Q?DWwnLFzToo3TH13wq+AmdkUofnXcgs+kLMGCo0xmQKk6NiXjeY+ctl4nNOgD?= =?us-ascii?Q?kD/u3NBT87GKKslzvOfa2NG4zw2+879CJiWrd7jMmou2CrIgicm+rRq6uEWN?= =?us-ascii?Q?ch8dEpJ5FwHJQR8aG619k8Sq5/IR2Bi8O77mfsqdr4/jAawPAeTr1Z6M9QxS?= =?us-ascii?Q?ojXP1A542hoOGymCNxOp3cwogZhoZN09XnAHIak7hFdmXz4YUpopODMXXERo?= =?us-ascii?Q?8ikpivKFnldbvv+2A2BZq2tDlvUnr2ZBbscbRZMzL2G8j1LWJuxp/6h5tSxI?= =?us-ascii?Q?tSkv1T1UIg7WifijkZHbsuNXS4bsTt+54yo7FyWMFJ767tew0dMlVK94b+L4?= =?us-ascii?Q?62+GohExo2ORxLt6g2b2FWjmaE5xAg7VUXxLsu+RNUX9Ea9ykxTlzU1Y5X6F?= =?us-ascii?Q?H2DWyEYkawXqLHd25dGchtvdOFIGqt5g6EvaUBLSvbJdX62Rt2vcKUkBIcX2?= =?us-ascii?Q?C7POM1K1GKHBN06yCpvGryd0yP86HH/HOwnwMlWe1vXpArVCK8PNCcu8WfS8?= =?us-ascii?Q?FB4ZqZCavWivt30oxTQk4ErNvxBxbzTlS4m7HDNdAIidz13Id/XJP8QppDgs?= =?us-ascii?Q?fv+eFrwg4FgGItMRJ3zT1QFLXNXkHre0Oukkhm+hGa1AVzwH2VxTcnAC7AAa?= =?us-ascii?Q?kD2HPArls1klSyCu1DcB7OSJRyiS5f68xmt1vKbkv24wgJCgocfPL3z++KnF?= =?us-ascii?Q?sm1TQT8KLkrHfFY/lov7JaUZWFtqt41w2Z/LWtts7Cb8se+bYCUBmeLyNlry?= =?us-ascii?Q?hqI7NANgyW12Nz9P3/ooDSNgC2htNECYndsBDQXPaTS3lqr2eMrX7/LAOArq?= =?us-ascii?Q?pjmvlc6Qtkxw3a1iUcwxU1191ojT5+JCvklJTVLYYmRB3cy8lJgUBxlt80qq?= =?us-ascii?Q?snSJHKaizA=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: e858a677-c2c0-4c81-22d0-08de60639482 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:34.4189 (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: Ev4MRWbpkFZmcpYRzmRSqXLLW3hoSKb7HR0lWmbt0V1rgDVHByPIXXNjQLIZ/Mx8q170Wt6JGF3Kubw8LDV6lQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PPF16C2BD7B0 Content-Type: text/plain; charset="utf-8" Add the data structures for FSP Chain of Trust communication. These include the FMC signature container (hash, public key, signature) and the NVDM payload structures for sending COT messages and receiving responses. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/fsp.rs | 76 ++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/drivers/gpu/nova-core/fsp.rs b/drivers/gpu/nova-core/fsp.rs index 5476259d224c..c5f3267ce329 100644 --- a/drivers/gpu/nova-core/fsp.rs +++ b/drivers/gpu/nova-core/fsp.rs @@ -124,6 +124,82 @@ unsafe impl AsBytes for GspFmcBootParams {} // SAFETY: All bit patterns are valid for the primitive fields. unsafe impl FromBytes for GspFmcBootParams {} =20 +/// Size constraints for FSP security signatures. +const FSP_HASH_SIZE: usize =3D 48; // SHA-384 hash (12 x u32) +const FSP_PKEY_SIZE: usize =3D 97; // Public key size for GB202 (not 384!) +const FSP_SIG_SIZE: usize =3D 96; // Signature size for GB202 (not 384!) + +/// Structure to hold FMC signatures. +#[derive(Debug, Clone, Copy)] +pub(crate) struct FmcSignatures { + hash384: [u32; 12], // SHA-384 hash (48 bytes) + public_key: [u32; 96], // RSA public key (384 bytes) + signature: [u32; 96], // RSA signature (384 bytes) +} + +impl Default for FmcSignatures { + fn default() -> Self { + Self { + hash384: [0u32; 12], + public_key: [0u32; 96], + signature: [0u32; 96], + } + } +} + +/// FSP Command Response payload structure. +/// NVDM_PAYLOAD_COMMAND_RESPONSE structure. +#[repr(C, packed)] +#[derive(Clone, Copy)] +struct NvdmPayloadCommandResponse { + task_id: u32, + command_nvdm_type: u32, + error_code: u32, +} + +/// NVDM (NVIDIA Device Management) COT (Chain of Trust) payload structure. +/// This is the main message payload sent to FSP for Chain of Trust. +#[repr(C, packed)] +#[derive(Clone, Copy)] +struct NvdmPayloadCot { + version: u16, // offset 0x0, size 2 + size: u16, // offset 0x2, size 2 + gsp_fmc_sysmem_offset: u64, // offset 0x4, size 8 + frts_sysmem_offset: u64, // offset 0xC, size 8 + frts_sysmem_size: u32, // offset 0x14, size 4 + frts_vidmem_offset: u64, // offset 0x18, size 8 + frts_vidmem_size: u32, // offset 0x20, size 4 + // Authentication related fields + hash384: [u32; 12], // offset 0x24, size 48 (0x30) + public_key: [u32; 96], // offset 0x54, size 384 (0x180) + signature: [u32; 96], // offset 0x1D4, size 384 (0x180) + gsp_boot_args_sysmem_offset: u64, // offset 0x354, size 8 +} + +/// Complete FSP message structure with MCTP and NVDM headers. +#[repr(C, packed)] +#[derive(Clone, Copy)] +struct FspMessage { + mctp_header: u32, + nvdm_header: u32, + cot: NvdmPayloadCot, +} + +// SAFETY: FspMessage is a packed C struct with only integral fields. +unsafe impl AsBytes for FspMessage {} + +/// Complete FSP response structure with MCTP and NVDM headers. +#[repr(C, packed)] +#[derive(Clone, Copy)] +struct FspResponse { + mctp_header: u32, + nvdm_header: u32, + response: NvdmPayloadCommandResponse, +} + +// SAFETY: FspResponse is a packed C struct with only integral fields. +unsafe impl FromBytes for FspResponse {} + /// FSP interface for Hopper/Blackwell GPUs. pub(crate) struct Fsp; =20 --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010034.outbound.protection.outlook.com [52.101.61.34]) (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 5E489346E7B; Sat, 31 Jan 2026 00:56:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821005; cv=fail; b=LE1wLOVw+PoOIvsDHsO3w0ESaGvzOtpU2oxMkh1Z+yyNlp+Saw5By6tRzDXc3jwCahfhwH3AikGXTKh8kYZhS1Bm0fppb/zwW6qpWeOuvTcm6xGChB0nxbk+sNW5yNL+B/2m4yuRVVcFR5utU+eYMfiVclneur08MGNJVTfWUQ0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821005; c=relaxed/simple; bh=K90nASQKq9n3Jb1vM/UTTLdCMRyeVPE2UJc2oB3ptz0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=X/hiUNlKBVidJJR6O4+To3abYP73nfjf/fEGNclmhgBqCKXsTVgqpHFi56fNh0L8YRAaFxsEXIBn2IZfiyNdv2G5ctq0hY0fSSEV5wxX9UtZ+nUBhrS2gMnO5cOrrtTJgak20yYOuGR6Yg6vzj8lHml3l9hcVwXpK/gyX39Puj8= 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=pCENDOGJ; arc=fail smtp.client-ip=52.101.61.34 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="pCENDOGJ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LyrvEgxFMBkJmB9AVumGGjJ2w4WAUOjsmFgqs/PmcwVzp05IQPcV7dWC9xSeV2f1BL6vHm5uo7BZW7TnKLxI+STtu360yv5BYWOTEZuUoqjx4feoOlHs7kDuehUsZR3ZHgeu8SqDh9z2+WPJ/nfG2+FPvWhN00/oYhfX5LHeJmQpCDVrKAAUktto5Ogz5QmHp10042xXWqXzmy3GPZH56ScFPdFBn3uWsE2SidDMFPEAtyNs+d3nAtJuZ9woqlmaPwMoVTCdBWh7aMJ+vx2kNI/Ny1jrPCQz2Gy1whzxVQBhk2A0Ka1LnSpnlMMzCowVfClKAEEzlvL2KIvJrPLOGA== 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=rP6w4V3v5hKOtH6CgR2H+8g5xiXQSJzMoKsgxFEZ+Q8=; b=sMsiIhrBa4e9TJpGBktAJ2Jy4whf6GvhxpylCI3Ry239vWQp8fHxuxVtUZSvyidwI/q7AzyWTpzkyAL8DeR+aat6MeuqcwOyqEks4d5X99481jlkU6Q3FiiF7Y39jd5ukubdlmbUGxFTRmVwTT4xFQ1T3MF1Mt0x7ee22ZzkkAqjyWNuPTZcYXFSohTCucWkTu2BBQCxOGQqZwOr/QZ/cxj3fDcVwEQDfGeB7jBQ8N/RaELn7i+vlJRiSDFIh+46B31VXmTkl0vchJb8nleqfLssTFHPrZVSxhDG0JMNKH63J+1+qOOs78VBbPE5ddq1N4F5pezIQ8RaRUxXWuxayA== 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=rP6w4V3v5hKOtH6CgR2H+8g5xiXQSJzMoKsgxFEZ+Q8=; b=pCENDOGJskZVgonFN6ILRGBGqbj/1Bcn3kbkCNQFg8Hz3aZiQn+d8zyQOBT1ewAHwyP/hLEwn6DdPlzY1caxa4d4OogKhYgHrldWAdhDlT1paQnOYMOroGTgR9rTW4xxoQjpVyhcig/cC3nLdABPU+ygNeTC8797CYl1iqQ74h5tv6pr6TrNsfSRgeAXBOByDRmnl5icDxddgZUJi/0Awavv9/ru2BZMmrVVDxTVwex4x7C+BW9R0hoP//y1i2XJNKQ2vWjZtqsZSk0qHFlJ6wogzb1jX5dXws1RnQSsdSh8YNeoPR1k8MXmoeXkIPNDDi/oHSg6QpqUyFhYizonFg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:35 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:35 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 21/30] gpu: nova-core: Hopper/Blackwell: add FMC signature extraction Date: Fri, 30 Jan 2026 16:55:55 -0800 Message-ID: <20260131005604.454172-22-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR05CA0021.namprd05.prod.outlook.com (2603:10b6:a03:c0::34) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 6430a192-52dc-4439-2b0f-08de60639541 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014|7142099003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?eneMysnjeJFhmc8YQxjOAre9NeaYGSEUsaiXKaSXGgbib5TTukH5OFUBx3G+?= =?us-ascii?Q?japgd5S2BWmb7Pu8YRp/2ugMdSWc54fMy8h1QGvcKemw2yduyHQFZPtMwkjA?= =?us-ascii?Q?NJr3V2nIYyV/zXUwBSdpVEk4QvVELr+Fa+l/kh/XhbNzWduuUHZ+xpc+8C8L?= =?us-ascii?Q?F7L5HvtvQA8fnSj8AtL7cQRI/jiGH9af7SUHIGRmfExhopYVaCl1xb3Yrc0p?= =?us-ascii?Q?Y+M9w7CWH2ablA37N/wj5CBASUMHURmpHBeEUz53RAeoggZ/41RF4aI0u4EA?= =?us-ascii?Q?8isyD/vZk39yYtHBNnZ4sa+x4IPhq6d9+kuQcwCq67NwhEhlg+j2jY5mrIk4?= =?us-ascii?Q?O2Ovt8qvipDbKBRRAXbSC4fbHN5JbntrqAU6AVKbLzOVnJHE+PaorKNH692A?= =?us-ascii?Q?edTOUUSvl4xqZOMcqjJ9Wmrdg8Jimk2Ost1XOw9Z+UQUOzp/f8dGOLbZHAuu?= =?us-ascii?Q?wCk9cVYbRNXf7bR87vtycwjju0WV5rIFJwQPjIVYG/ZhPIOLjfjGjwXlwOxt?= =?us-ascii?Q?eDz5Hx/XWi0wJjQ5K5K+VsxP5f3NoHvpM5UsT60+6M9HGiaxlDbF/1u+3Bts?= =?us-ascii?Q?gGOY6F2XqEcvnftrKKREQb9fgrmHiOtYTuT0DIm1z4HmARFRC/auOxMc81tL?= =?us-ascii?Q?rQcv8G+udKF0p8bSS9nmFj4GCmlLvIg+tqpzfFpoSW778sQbmKzrTvxMR23/?= =?us-ascii?Q?atNO1Erc2nsWj7FzPz5NoFl0bPxdmLAV8HlX+H3inhYOhKuYU3bZUWtaxknq?= =?us-ascii?Q?860mu1C4nwxJC2bUT6J6pqG/LJWhVSM6TRwW+c4pUgfmLMsltwCzUg5QEsHT?= =?us-ascii?Q?jPZYEgWCZGzODmtGV5fhza6TpynKRJrKxRZ3zNh3trZh41bsGByANFwkPNLt?= =?us-ascii?Q?RbfV4f+O8FvwhO5tr14ibmsSdwwxvoXLqkv2vMKHkI8U9VjfKiciXwsdyyLs?= =?us-ascii?Q?SV+722BhOH2e/RxWOq70r7xuKLm1fdhqEfr8KBWk/zoSSGzz17XabgSVlVsh?= =?us-ascii?Q?Vo9WJFVfYQ45wGLOCdBTZn0AbfxaOu1aYQiJM7gbfdn1iRR9IzrhPCQficFW?= =?us-ascii?Q?QjggYLvAY4fMtcgAUFkeVS526YvusboIUnt7ShcrVGniHZdj0PyYx0Rd6IB7?= =?us-ascii?Q?NS/57zdNrjR0GZ00vYzGC3R2pxlGYzvplTD4L157SaIhzSX+uxYTlmQXYjOC?= =?us-ascii?Q?MJNiyur+3UVvRjQ5KJiQf6vzX3MR3Giie4ecKetLXL7Y2UV0oNEB9V66e7lW?= =?us-ascii?Q?ObBHLyIDiHMr6TGDv5WEJ0nfXc+AwmEgoRpu8W1XpSDRqmM7kRrwW9Wg0ERY?= =?us-ascii?Q?T1W6iC471FgjPRVWHzm+b23vgeOFBlYwvCrVo7Kh1TuZobnX6PcdDybIK77/?= =?us-ascii?Q?8cAODtbkXSEr50QOark6+99mKGETRVv/xUbDnXPZYfH+c8yOu/7rPHjbgu/r?= =?us-ascii?Q?c50ZrQb1zBthRb4fPvj5oaNNBhE6efmw8BJztugECTsnpZ0UcV1tydr67Juq?= =?us-ascii?Q?BDvcWL/PqLkf7J/yfDsNl98aaASKl6yM17JYav+Nole/pqccRLrsQ+ndM4oO?= =?us-ascii?Q?AzQevhQydfljGF42odk=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014)(7142099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?JTROkUunj6ezu6LTtsFBmax/8sQsxWpt0M2r/3iPDBKcAVV61wv8XceoLwvy?= =?us-ascii?Q?s58lCH5w0IxFU7onUDjzd3YN7k5OtXVLDrOAkhtLuINGfPah5r3wq/IfSD9c?= =?us-ascii?Q?OXtPuZ9lnKrvWAmPox67BqPujTwA5r+gqKRP+oJA+1G6vWkpmgrRybmpsyA+?= =?us-ascii?Q?4OZ18n1fICjCmV9B4Ga/7YCf8hEFTJeQ+O3NWEZko57A5UiSk09ckEVJJTlb?= =?us-ascii?Q?SxvxHj/U++BV3RmFOLQhoza4Fnxlf7Y433c5ZU6J0tq0983mCRPCNtPsJCVF?= =?us-ascii?Q?BObMfUnZbDxo2MmpIjPypV1SYnsu2z2ZMchVmzxFhXsGpFXMhETdc96LLC6f?= =?us-ascii?Q?u8wWT9MgAH5dL2y6MOeZbIMCmabDBS5WEX7ak/qfcpGbsnrFAGa0O6yxcQDs?= =?us-ascii?Q?74k0nY0f1M+GLoSWG9NwZd4Z1U8BVKeAZ8vQcCoMHmEyMemaH/WzJYidowNG?= =?us-ascii?Q?iYA/zsagn4yi4lWeQcO7xY9+2E80WbIr/YO+Gl8il0IY2ASzZpdKgpeWQGR9?= =?us-ascii?Q?iWzV5XpSmoOoFjwCMdGk5ZVxDtDa8e1ZcdyIcSPSr5bGplX8JphFgD8+WDmY?= =?us-ascii?Q?cJTLc2zhldSHh/f6MNr7Ej/OzObNSOzLtGj0ZOfKxl7vMuv7XmoNEuuGAm2C?= =?us-ascii?Q?Ok3SbA3nuQvLZHTm2rzXd8+y4fPCpWN0yaQbWl+do003Wn4gM13NOjCSNqPW?= =?us-ascii?Q?U0h1X/DLH/1b4Ydp10RnHrvvCUC2R/p1vvPD1h2oglOsTxtX090fNJm7ohlB?= =?us-ascii?Q?YSzI39lEXlGuF5UpMwaVueHfc8td+2KhFO5B58YefC3PCB5ZQ9/cLG0DcQqU?= =?us-ascii?Q?9paFilToPqaPjcaHK2Ja4U5PMvwqXAdtb9vV/fVKkjSktuhZ5osZjEtRjm0j?= =?us-ascii?Q?I3HABCDcAnCb4c4Mpb7P5BQAoKOEOQrnY3bsyRjR0bjxVRu1iy29KmK7DGr2?= =?us-ascii?Q?3C5qrvIDSoiOkKlJ27IWXRxHCnq63xHIIr2Kr21wwLT4z7XiZibw5eJ8MPlF?= =?us-ascii?Q?RwJMOAndZOUyHJGEVd7XD58RUiflkPvbHbfoxDFVSKApi2dyuMlkFW3uxW2B?= =?us-ascii?Q?n+HEUR7iEhxnD4k2cwViLyyJmrgawXMP43S1ghSveE938GjC0YIw4GabS5mE?= =?us-ascii?Q?OIgtJm87hjPmJgkbgAxJbhjPLmKQTf7RA97+tG+NvDruOREUBbjLAYPsOepq?= =?us-ascii?Q?hNdbD3577YDYev8ffN0Wh+z92lhaBI+z5RhBcv+ubuaLU+YkIrCk9IjX8/zV?= =?us-ascii?Q?oaguEwu36iu47vIgLY5VWgmKEImCkzxVkdbjmNw8stHGt+FRjBSdu2OGhAmm?= =?us-ascii?Q?4qF+6eYnuuReyKs6HMNT7OSF7husZukOwWQ0Q8osd/6SmF9DBy77jP2AZnZG?= =?us-ascii?Q?EJ+bwettnLkMRU8jZKgyMu6Age/7WSrB4ya0c6qaQty1xSjh1b1huIXyqjAX?= =?us-ascii?Q?FH9QtTL6Gc/nIQDJmbrWvfePCxDN+bZgIF0znE71GxebotKvO5UEt+WUF1U/?= =?us-ascii?Q?yVOuhk67etSADg5uSFsUMIU+WIlbMS1APM9T2S0x/68AeCZ/7LWx7PRSw0FP?= =?us-ascii?Q?/RlHefvfJBzUwLq/bPlGqtX/oA0sCTsJte1jjjHC3n1UzjwWXcbTrV3EYVwJ?= =?us-ascii?Q?NC8tAVp9vQz0SPlEzVT5DykxakbRfSno46BDmFxcz4Nj3lDbAV6A/2w55dbd?= =?us-ascii?Q?zN7PDek7OwU9+OEQVDfevLUyFUHCbteUKbB/NznbSO195F5pR4s2l224nL3z?= =?us-ascii?Q?T8RWVreuXw=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6430a192-52dc-4439-2b0f-08de60639541 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:35.6824 (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: tgOVmyxkaOazRLHP8g7GEx4wTiQSdZfNDk5JNh2tlKytpXFGjAzDfSQiV+eP8eN81kAPkW4ebSvjt4RxU1QFZQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Add extract_fmc_signatures_static() to parse cryptographic signatures from FMC ELF firmware sections. This extracts the SHA-384 hash, RSA public key, and signature needed for Chain of Trust verification. Also exposes the elf_section() helper from firmware.rs for use by FSP. Cc: Joel Fernandes Cc: Gary Guo Signed-off-by: John Hubbard --- drivers/gpu/nova-core/firmware.rs | 4 +- drivers/gpu/nova-core/fsp.rs | 81 +++++++++++++++++++++++++++++-- 2 files changed, 80 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/nova-core/firmware.rs b/drivers/gpu/nova-core/firm= ware.rs index 9a9b969aaf79..e9101a08511f 100644 --- a/drivers/gpu/nova-core/firmware.rs +++ b/drivers/gpu/nova-core/firmware.rs @@ -27,6 +27,8 @@ }, }; =20 +pub(crate) use elf::elf_section; + pub(crate) mod booter; pub(crate) mod fsp; pub(crate) mod fwsec; @@ -607,7 +609,7 @@ fn elf32_section<'a>(elf: &'a [u8], name: &str) -> Opti= on<&'a [u8]> { } =20 /// Automatically detects ELF32 vs ELF64 based on the ELF header. - pub(super) fn elf_section<'a>(elf: &'a [u8], name: &str) -> Option<&'a= [u8]> { + pub(crate) fn elf_section<'a>(elf: &'a [u8], name: &str) -> Option<&'a= [u8]> { // Check ELF magic. if elf.len() < 5 || elf.get(0..4)? !=3D b"\x7fELF" { return None; diff --git a/drivers/gpu/nova-core/fsp.rs b/drivers/gpu/nova-core/fsp.rs index c5f3267ce329..4f7d121f4240 100644 --- a/drivers/gpu/nova-core/fsp.rs +++ b/drivers/gpu/nova-core/fsp.rs @@ -124,10 +124,10 @@ unsafe impl AsBytes for GspFmcBootParams {} // SAFETY: All bit patterns are valid for the primitive fields. unsafe impl FromBytes for GspFmcBootParams {} =20 -/// Size constraints for FSP security signatures. -const FSP_HASH_SIZE: usize =3D 48; // SHA-384 hash (12 x u32) -const FSP_PKEY_SIZE: usize =3D 97; // Public key size for GB202 (not 384!) -const FSP_SIG_SIZE: usize =3D 96; // Signature size for GB202 (not 384!) +/// Size constraints for FSP security signatures (in bytes). +const FSP_HASH_SIZE: usize =3D 48; // SHA-384 hash ([u32; 12]) +const FSP_PKEY_SIZE: usize =3D 384; // RSA public key ([u32; 96]) +const FSP_SIG_SIZE: usize =3D 384; // RSA signature ([u32; 96]) =20 /// Structure to hold FMC signatures. #[derive(Debug, Clone, Copy)] @@ -241,4 +241,77 @@ pub(crate) fn wait_secure_boot( }) .map(|_| ()) } + + /// Extract FMC firmware signatures for Chain of Trust verification. + /// + /// Extracts real cryptographic signatures from FMC ELF32 firmware sec= tions. + /// Returns signatures in a heap-allocated structure to prevent stack = overflow. + pub(crate) fn extract_fmc_signatures_static( + dev: &device::Device, + fmc_fw_data: &[u8], + ) -> Result> { + // Extract hash section (SHA-384) + let hash_section =3D crate::firmware::elf_section(fmc_fw_data, "ha= sh") + .ok_or(EINVAL) + .inspect_err(|_| dev_err!(dev, "FMC firmware missing 'hash' se= ction\n"))?; + + // Extract public key section (RSA public key) + let pkey_section =3D crate::firmware::elf_section(fmc_fw_data, "pu= blickey") + .ok_or(EINVAL) + .inspect_err(|_| dev_err!(dev, "FMC firmware missing 'publicke= y' section\n"))?; + + // Extract signature section (RSA signature) + let sig_section =3D crate::firmware::elf_section(fmc_fw_data, "sig= nature") + .ok_or(EINVAL) + .inspect_err(|_| dev_err!(dev, "FMC firmware missing 'signatur= e' section\n"))?; + + // Validate section sizes - hash must be exactly 48 bytes + if hash_section.len() !=3D FSP_HASH_SIZE { + dev_err!( + dev, + "FMC hash section size {} !=3D expected {}\n", + hash_section.len(), + FSP_HASH_SIZE + ); + return Err(EINVAL); + } + + // Public key and signature can be smaller than the fixed array si= zes. + if pkey_section.len() > FSP_PKEY_SIZE { + dev_err!( + dev, + "FMC publickey section size {} > maximum {}\n", + pkey_section.len(), + FSP_PKEY_SIZE + ); + return Err(EINVAL); + } + + if sig_section.len() > FSP_SIG_SIZE { + dev_err!( + dev, + "FMC signature section size {} > maximum {}\n", + sig_section.len(), + FSP_SIG_SIZE + ); + return Err(EINVAL); + } + + // Allocate signature structure on heap to avoid stack overflow + let mut signatures =3D KBox::new(FmcSignatures::default(), GFP_KER= NEL)?; + + // Copy hash section directly as bytes (48 bytes exactly) + signatures + .hash384 + .as_bytes_mut() + .copy_from_slice(hash_section); + + // Copy public key section (up to 384 bytes, zero-padded) + signatures.public_key.as_bytes_mut()[..pkey_section.len()].copy_fr= om_slice(pkey_section); + + // Copy signature section (up to 384 bytes, zero-padded) + signatures.signature.as_bytes_mut()[..sig_section.len()].copy_from= _slice(sig_section); + + Ok(signatures) + } } --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012046.outbound.protection.outlook.com [40.107.209.46]) (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 45DA63376B8; Sat, 31 Jan 2026 00:56:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821007; cv=fail; b=qkNYK+Ze4dPnVFACuXYl06qLOJt2qVO4UyA82xFEuSWa/itnkMbcIHmFHeC4WXld/gw/qh4dTa8B23bUmKu8J6iYU+fJ0Fqo69KWLBpogH8TztP0FfA3tDeOzhMO5RYu9b8cWNkVjHgsSU9HCn8MZhnvisT0sSRWhMP6TWUipLs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821007; c=relaxed/simple; bh=Clo7YIqhowMa4bV+caZrxb8PuEakNiKdYQgAXCdiOQM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=dJ+ZRAugctkIPAuvDyJmizhys5K/6MvNOPpFPfAy3ufBnK/ESobjP3MQZHShrqQtd6bZkbgPeMyv73lKkydWH+lQKYnn79F8f/RW7IEmfgjHpCC1RbC0PvfvK3tlhx9YdK8VSLACtSAaQk5uRqWczr7oBdFapAcbzm2Go6CY1GI= 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=I+Ehq/j6; arc=fail smtp.client-ip=40.107.209.46 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="I+Ehq/j6" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WmCTzFPNWkn5EYq03qFhNf4ZOpEui8D/gwHRbXrLjICXVEhAmFx46imRcECKgJeNr+EUnRZoR6BW271jRm0CaL9DtKFPrhoCRzegVJL4A4G+Wdi2dqQ9KFxruZuIa68kZcVYvmd2tMLW+yEiun6AF8fRVb+mlkRFUxybApekspNnfpC08kotqVSNgbyhLzGggusddFxMJ+VPypFJEUrWlkfHT365q9igvEobME7oMJjORIvW83gvGfrllGaXYX1Z56F1Z5na5Kie1hqBooJCMV4V7YAekiR9xBzh+srd/HPEgY2V4E+mpmagiNaBlOlZJgjaHb1+WrE08wiRlzV0Kw== 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=CtsicKQN0I0lv4VG0SJGBafyB5tvLdwyqIErobb8sig=; b=koiYtHeuZKSlP/HFP9JlmQiA3jIl/ci5x1Mdjd/rfFGsmyhFFdPkH7DbAEEM1eTYP02z4g1n5NpQlAdkyjFI5OnPt1ufcZf0Aqsb09w3cfT3kDyZMm61vMyjTvcWaY95PXMxp84NjkJarW1PT7zt7UmuC4EAw/qtmh7CGk9zDf+FSUgDjkom6lU6Z0xE6Mrgcu5VAf3nDmgQNHWN64rojYTWrIPD+xnP9BHNIbr4y9M+JqcouTfX/QQEmt7ZV88wtfFugrowHWkxjnVDvSVv/1jAD/Va5hqx09KycqgtFGHuugOir+6vX0+A9V8aC4Rzx3SQCfClL8Qjk+ABhgMtLg== 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=CtsicKQN0I0lv4VG0SJGBafyB5tvLdwyqIErobb8sig=; b=I+Ehq/j6jBjELkNOr7u/10KaDkVQ1lEOs1DM4oAcgc216znFdV/uX5vIqA8WnG9s/19pn9Qd4IZCu2D+zgkmSCyqKO/WnoFvoJ7MjamBgn/qYvc6mD1mxc4bG6bBcT7eskdtxspqDVnro6QWi0lACw/u1jgy5Xd0oh+vkACyyQq30g4lZIWTWGSACsBzueOpzi5zQII4K9CIjQnSxqeyx1orZF8T/nGNI7Kz+3AXrdzMo+5qGr49QD729r8YDlgAHQgUErnkw4qqaZGy690so8Y42+vxve2HscMdD6/c6bp6yOTKwwiZFBCtATN3XH1/2IvYSNZ3hrIoNCmDo1+diw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:37 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:37 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 22/30] gpu: nova-core: Hopper/Blackwell: add FSP send/receive messaging Date: Fri, 30 Jan 2026 16:55:56 -0800 Message-ID: <20260131005604.454172-23-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0053.namprd03.prod.outlook.com (2603:10b6:a03:33e::28) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: b8e31266-9dd3-43ed-63f2-08de60639605 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?wZLthxuXPN7vEMzilcqSjy4Ok9pha/8Xq0qlpyq/0vSmrZ8p8ctaUy4Rs7rE?= =?us-ascii?Q?nntSMrNg5kD2fdpd2ZYb+WLvbS7JnMh7Qs350gwfKUKSnKZVExSPpRxSWGFJ?= =?us-ascii?Q?5LIl/Z9s0nS00hbZXKoDc4PAR0hq3OYIZcElwRfAsO2ANdl7bxNh2R96NMeV?= =?us-ascii?Q?eA6xXNK5I08AEepWKSmQsYsxdgXVgxbHWFXTHl5Ak9hChxRRUuhyj2PRy306?= =?us-ascii?Q?jVvewiRv5QPpYovM9z89oiOhJv4/PVRPRSk8ag+mlFeCPEplT3ewdo/hW/5T?= =?us-ascii?Q?KzgjAyVmSVllOV+SRQJ0zeUTL4y7nS++3prgoNHV+FJZqjd3l3Ue+Eq8YwsW?= =?us-ascii?Q?A65YOISzgp4YQPjiur1D15kYYrzhU5wQ+n7lkcJLXm9ph/YLf4Z8r8ZPniAj?= =?us-ascii?Q?mUe13I65hQXM7DKHNig5xnWEUkpsvKSqbu+V2MIkZJvdqi328BE2Dk+qCQ5p?= =?us-ascii?Q?rYbjyBTw49YbFp0MnstyGu4A0WKnMzkh2GCwfYdwNcqftExh02SrpbMLESmK?= =?us-ascii?Q?VBo1truh2CZCuZXn/bun5o+JFn4yXSSJeN2dpRnGVZqsdu1AWg1yaaf3OU/g?= =?us-ascii?Q?hVtILXC1Iinfyoe9srfG1jAbujxIl9yQYmpSFi1Xuz71/5xR+YdfCCEZT2y9?= =?us-ascii?Q?2BM0klZF7/+z8M+C/8TvaSVyBQ2QhoE2qIKH+/+f2I1zX5xrFPwro68SNU2W?= =?us-ascii?Q?jifDTgchE8GPl6RFf88IkGzN53Tb0IzwX+5DJqjAvjGDVCv593olAqd6C1yR?= =?us-ascii?Q?HuT5RNmb2zJD5aXx+a2eWaxy29VgtTpxB6vS/UXQ/g4c55zii8DdT7/rwZ2K?= =?us-ascii?Q?6KN8SD8PAItMX8BCKUTCUqN3VFEgNgw9KwvLSxpO4S4DuOUPlyi5nVSyHbsL?= =?us-ascii?Q?EEPXbfZfoooHuWXXpzRHGkX5pr+X2P0FlgXdzAH8+FX6mbjdfUox2LTiFImC?= =?us-ascii?Q?8dRyoPu90fhDZJ/a5e/XJNCDp34Wv9l41byaIfiqPGOtap6YLg+MqDFw4ucB?= =?us-ascii?Q?AdKElXdOZIyESCu1pGFmiVBBsFyFRlI9jq0P4MuIFtK7RpFeAPJxyocPZq9e?= =?us-ascii?Q?5kJfYlNomtl0cDOMRO/e6CPyKLq6e0cJlNDvSGfJWs5l20EyYjYy+gxcS01P?= =?us-ascii?Q?SRvYdDdPlFWtxyMQjYdfgYHtP9FexHuCVpWWychAotsBdjkXMYrUxXWrExfB?= =?us-ascii?Q?T2gPMXne8QOV0piQ/l/o+DUNzIgyinPsPNDJAYvxryb+wvdLq1RlA4+JyWVM?= =?us-ascii?Q?zSOD0c4nadZrvoBAbPpxfdIrkhgiC4NJDGSu6lXzlPg3cHW4YOJg6Z533/35?= =?us-ascii?Q?oRyJitD5UhGk8YsDEY77KF/6zGKYoWTkNd3LceQSk28ECWBpb8Clx9qBGVIC?= =?us-ascii?Q?1XTMaPDk6FbnKZ/Xfc1Xh5WvJcbCSLRLf8GHHoPMo2BC+z/9SJA7Luhfp/VH?= =?us-ascii?Q?+KLvhtKpqR6JDYsXsAPbKfZNgQBhpOVi7ylO98Z7jX+i6BUCE7272LIAiqda?= =?us-ascii?Q?uxJtnyReiy5K61rUkK8KPzVgjYauDBEgghgKvc+hV7pqu1p/9Hr3I//Xxj14?= =?us-ascii?Q?zqav1psSWHs+ehO0B7g=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?gd4Py5BrL1jPcmn/MGSbX48BDVB3x5tLQMaAHq/ZSXRjcWMjHtbfQzzFPWHr?= =?us-ascii?Q?t79mXXU4nDGq+QvHZB2xASjjYaE5pzTZzeCuzW2ktPPPBwbk1HTMqsJE1Jju?= =?us-ascii?Q?4z+OOnrCim6OkyKkC6oHvIgzwx3HsW1tfklIPEjdlWM+4ecWCqZhufpR1hL2?= =?us-ascii?Q?yiCERp7hx3wEuGaYczy3PqKU0er7NsfbYsm8ghTLXkYbv4PJMGL3znGY27aV?= =?us-ascii?Q?1PNnh2kiH16FdFpudz1J4ss36MKCmJ2eAsyJ1Pe7SQ0srpAnIR3g9wNDruPi?= =?us-ascii?Q?ZWg/nSCNMEnD62pFDxHZpps6uLNrFEQL3ANb/983bZmtjjaVAQ5XyRbvSVxz?= =?us-ascii?Q?p/ETvYXhjPdZSJSDubSRRUs4rS/5je1EXVQw6OEekObeEzOEqlJztkUURoVy?= =?us-ascii?Q?UtEyV/Q8GBbCJm0QkOYEGFnIr7ICv8aYB8szL0j2De4bXgMjewXyka93OMh2?= =?us-ascii?Q?eMzxVdZBcMriItdluW07un8IeRU8Jnuzr/PXydCcspIDNoFXwbMheAM7bFhO?= =?us-ascii?Q?ai0ZUKAIufHrXS99uZXUnBN8iO/Yif41esOgdqTEe7klhyNGGUaofAvhWma2?= =?us-ascii?Q?/V+1iVWPkCLrt6V4x5nCcECwoUFXPhmTsYczxtj5baW9CXVQnA8EyzU1JYdA?= =?us-ascii?Q?lDY/HBeTNIMtlfoeLfnABh0rG0Ygvr4VlM/QypLxYegCDij2lY1Lm2nZWBw3?= =?us-ascii?Q?PUCDkaH6gu4ic8svOAnEY1207+ZYCvl90RmTfcwlRrW8i13MDV5zI43hDGbQ?= =?us-ascii?Q?KL3HfD6vXh1EfVIUGpNX6ILI+KHmW7C8Ihk2avRkUUliZ3M2+YVCRmHaBmKq?= =?us-ascii?Q?BrgrtoHhj7wuv+CQj3cqzbn2HXoBpiEfBT29G+6oXrG30K32uDMVWt9G+XCo?= =?us-ascii?Q?0diNv7wbHzO4cTVutt6XlhJPDtH9yuELuStPYhHmklU0fk3MrzqjyXwffIKY?= =?us-ascii?Q?SfbZYkHAaHJf+952gEb0jFcPNK4G7/utHb2KhpuXC8vj3k0/g10eVDbLOosU?= =?us-ascii?Q?oIWqqIPICsbBV/4q30QC7+JzkYQ76S3wlI4eNUpnK1gafG5MZsiuvNGsDCxU?= =?us-ascii?Q?lnDDXcQLttaP1ojN033eejb8yWiWoqgjyqH8e9q+YqvoXBCqVqI9v7Etrr4l?= =?us-ascii?Q?40lgXINShraco3cR+qty1+n+77kjOf3utmPBSEYEzVZqbFEQ7BZ3YPfTFtsR?= =?us-ascii?Q?1KJBOT/Qu70hre0IRStNAwQae8I23czK6CQt6KX8HRB3s70HGaBijYw1fLQ0?= =?us-ascii?Q?7QZT5cMyv9E/EjdArcUQTP/aCXLWsYnq7BCWPnCXKzFf6FlMc1rZzvnx50+a?= =?us-ascii?Q?kcexHzC2IjpGZ6g4I5i++fYnlFjA0rR5sH+m2SWamZ9kLymGpD8aWSuhO7/B?= =?us-ascii?Q?3rd0caBpz8U/UY0lSGejZIqbA5Zgj5JRgI/2IsW0XKMhzlHWWzjSvOy5d0oT?= =?us-ascii?Q?IsN9BOzWl6k615sOGz6hWq6fbNiyglGy1uY6R82EzDWOpo6uFm6OqPoMDGPB?= =?us-ascii?Q?Edd8Fzz5c7wormzAEnVQOJCpC82CbyQd1xsjAy+XW5N54Ryg/+eXodTYb40y?= =?us-ascii?Q?p3r6H8F+JPwHLU6++JaAV/V9HZZvF0SBtW/7iAypBin5h1fHOL/Sw5WTQ0P0?= =?us-ascii?Q?t2ZPVqBjhqa3PMpEgPxLAbUXYgVfV4ZCGfXhmWykO2gl/UdUpDTpb0J0BldY?= =?us-ascii?Q?REFI7//Z3YciWhKIpCypx+UjHdWvpxMQmK9gaXbgrGc29wQ7gzQN1He6uGkM?= =?us-ascii?Q?OZPDfNd3vg=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b8e31266-9dd3-43ed-63f2-08de60639605 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:36.9371 (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: btmcalk+h8C71FaAJvWHmRCN0k9yGUBVYjRLEBPGazUPa6dzVPP93gs9cqoytzFMHfuTDbc693gqfRnKJVHZ2A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Add send_sync_fsp() which sends an MCTP/NVDM message to FSP and waits for the response. This handles the low-level protocol details including header validation, error checking, and timeout handling. Cc: Joel Fernandes Signed-off-by: John Hubbard --- drivers/gpu/nova-core/falcon/fsp.rs | 3 - drivers/gpu/nova-core/fsp.rs | 101 ++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/nova-core/falcon/fsp.rs b/drivers/gpu/nova-core/fa= lcon/fsp.rs index 081b9fce9278..33d0408eb852 100644 --- a/drivers/gpu/nova-core/falcon/fsp.rs +++ b/drivers/gpu/nova-core/falcon/fsp.rs @@ -93,7 +93,6 @@ pub(crate) fn read_emem(&self, bar: &Bar0, offset: u32, d= ata: &mut [u8]) -> Resu /// /// The FSP message queue is not circular - pointers are reset to 0 af= ter each /// message exchange, so `tail >=3D head` is always true when data is = present. - #[expect(unused)] pub(crate) fn poll_msgq(&self, bar: &Bar0) -> u32 { let head =3D regs::NV_PFSP_MSGQ_HEAD::read(bar).address(); let tail =3D regs::NV_PFSP_MSGQ_TAIL::read(bar).address(); @@ -116,7 +115,6 @@ pub(crate) fn poll_msgq(&self, bar: &Bar0) -> u32 { /// /// # Returns /// `Ok(())` on success, `Err(EINVAL)` if packet is empty or not 4-byt= e aligned - #[expect(unused)] pub(crate) fn send_msg(&self, bar: &Bar0, packet: &[u8]) -> Result { if packet.is_empty() { return Err(EINVAL); @@ -148,7 +146,6 @@ pub(crate) fn send_msg(&self, bar: &Bar0, packet: &[u8]= ) -> Result { /// /// # Returns /// `Ok(bytes_read)` on success, `Err(EINVAL)` if size is 0, exceeds b= uffer, or not aligned - #[expect(unused)] pub(crate) fn recv_msg(&self, bar: &Bar0, buffer: &mut [u8], size: usi= ze) -> Result { if size =3D=3D 0 || size > buffer.len() { return Err(EINVAL); diff --git a/drivers/gpu/nova-core/fsp.rs b/drivers/gpu/nova-core/fsp.rs index 4f7d121f4240..dfd0ffe5a650 100644 --- a/drivers/gpu/nova-core/fsp.rs +++ b/drivers/gpu/nova-core/fsp.rs @@ -22,6 +22,9 @@ =20 use crate::regs::FSP_BOOT_COMPLETE_SUCCESS; =20 +/// FSP message timeout in milliseconds. +const FSP_MSG_TIMEOUT_MS: i64 =3D 2000; + /// FSP secure boot completion timeout in milliseconds. const FSP_SECURE_BOOT_TIMEOUT_MS: i64 =3D 4000; =20 @@ -314,4 +317,102 @@ pub(crate) fn extract_fmc_signatures_static( =20 Ok(signatures) } + + /// Send message to FSP and wait for response. + fn send_sync_fsp( + dev: &device::Device, + bar: &crate::driver::Bar0, + fsp_falcon: &crate::falcon::Falcon, + nvdm_type: u32, + packet: &[u8], + ) -> Result<()> { + // Send message + fsp_falcon.send_msg(bar, packet)?; + + // Wait for response + let timeout =3D Delta::from_millis(FSP_MSG_TIMEOUT_MS); + let packet_size =3D read_poll_timeout( + || Ok(fsp_falcon.poll_msgq(bar)), + |&size| size > 0, + Delta::ZERO, + timeout, + ) + .map_err(|_| { + dev_err!(dev, "FSP response timeout\n"); + ETIMEDOUT + })?; + + // Receive response + let packet_size =3D packet_size as usize; + let mut response_buf =3D KVec::::new(); + response_buf.resize(packet_size, 0, GFP_KERNEL)?; + fsp_falcon.recv_msg(bar, &mut response_buf, packet_size)?; + + // Parse response + if response_buf.len() < core::mem::size_of::() { + dev_err!(dev, "FSP response too small: {}\n", response_buf.len= ()); + return Err(EIO); + } + + let response =3D FspResponse::from_bytes(&response_buf[..]).ok_or(= EIO)?; + + // Copy packed struct fields to avoid alignment issues + let mctp_header =3D response.mctp_header; + let nvdm_header =3D response.nvdm_header; + let command_nvdm_type =3D response.response.command_nvdm_type; + let error_code =3D response.response.error_code; + + // Validate MCTP header + let mctp_som =3D (mctp_header >> 31) & 1; + let mctp_eom =3D (mctp_header >> 30) & 1; + if mctp_som !=3D 1 || mctp_eom !=3D 1 { + dev_err!( + dev, + "Unexpected MCTP header in FSP reply: {:#x}\n", + mctp_header + ); + return Err(EIO); + } + + // Validate NVDM header + let nvdm_msg_type =3D nvdm_header & 0x7f; + let nvdm_vendor_id =3D (nvdm_header >> 8) & 0xffff; + let nvdm_type_resp =3D (nvdm_header >> 24) & 0xff; + + if nvdm_msg_type !=3D mctp::MSG_TYPE_VENDOR_PCI + || nvdm_vendor_id !=3D mctp::VENDOR_ID_NV + || nvdm_type_resp !=3D mctp::NVDM_TYPE_FSP_RESPONSE + { + dev_err!( + dev, + "Unexpected NVDM header in FSP reply: {:#x}\n", + nvdm_header + ); + return Err(EIO); + } + + // Check command type matches + if command_nvdm_type !=3D nvdm_type { + dev_err!( + dev, + "Expected NVDM type {:#x} in reply, got {:#x}\n", + nvdm_type, + command_nvdm_type + ); + return Err(EIO); + } + + // Check for errors + if error_code !=3D 0 { + dev_err!( + dev, + "NVDM command {:#x} failed with error {:#x}\n", + nvdm_type, + error_code + ); + return Err(EIO); + } + + Ok(()) + } } --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010034.outbound.protection.outlook.com [52.101.61.34]) (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 CE54934BA4E; Sat, 31 Jan 2026 00:56:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821008; cv=fail; b=jxxEccOg+Ecl0QkqsXslubeY07uQMomlWg1/Xi1q7POQjC6RTpF1VhgcLIm1bVtdO4ushuYAcAb7iGqGMJAKZDWlMQfILBp4ILe3jGa9MA4b2AX5vW9cLXnCWCSkJeBVOZ15mhP7Myd3C7Ahr5Rjy1IocxIAzwLsD6hNTelT++4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821008; c=relaxed/simple; bh=VOoui2ZaoFgn0HUORHzXB+BytMRlIWJWCbN25nERAo8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=q72dJbQ+ZgqF6l+oXz8kR1Yl8UiYbl+I1lAwx5/tfDryFsKd4+mwaGoNviv8TBzGWCgphAbk9fvvNIQJSSg1P3m2PIuif/YjuegBWQlMKhub8vB+c8WmngUeuhnt8lAiu4QI/wTntsopLNpdnBklcUWFczVt3WYWOlTvN0fSW4Y= 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=MH9s4qxv; arc=fail smtp.client-ip=52.101.61.34 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="MH9s4qxv" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Sse+DprC78jChhiC7TdECHPT8qQYJKM+KIosR7Y5OzMYVHqSnwSINtr6zBGCRQJ9VLvWh95FPrcKsHvUgVeymTScgvtxPFP57pCd3C2aF5L9mEMRGr7kl5mv+xgT2jbkvHXBKjB7g0uS0VgDGES557hAIYF10McxY2ZBNo9vVpY1Aovt1O/p4zMWWPL5drH/grhRH+Ry/FucN1d7MxSjf5A3kX4GczCDGykOxiAtUnVuHREgMUeVdeY1+92nDZIXB5hyQebydkPy9e6+5eJHersVJNaoNknd8cADZYAi4/D/70jCZ9C+4lOSaElC08xQLyox2QuSesun8QUwDeSSTg== 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=00uEbMeMLI/JtHiVKGAzi39oQN0eOEsNoLAOdLIpack=; b=fmlg77ZreCOXvA2wwEFq71fhnzvfdrWkcqcftzKRhosFy4+WjbXMViRn3lZywsYuS07yfI9YzQYhU67CZe6aT3qxMa3xgFqrwaJv6o6qySDKUpQY30pA3ObBTYSxFh50l3NpyERdYNM9CdeIRZqHgoG4u9vbjQODfZ98xN/92+9mesXCM63yHN2dKxaImdfWGxgD4GrtJ5UMOdElMDMmGeVYu5SuCw4XwC+xLpS7WoKs5Uga6/UKPgHNN2K0CVnBL2VrXPAeh1X3p//6teUGU6/n8bKjNM/JKPSjhBlMx+i+DEJRRys4ZQnWkUQLw2wcoLEKHI6WwJE3gpCugGjO5A== 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=00uEbMeMLI/JtHiVKGAzi39oQN0eOEsNoLAOdLIpack=; b=MH9s4qxvqhXL60ofPLZXOqNQJR+kdRHopq988NeDeuBEu1BtGcLCXaBPOwrOA7/w08cLHM1ImdrA7xvAcaEFQNzM6IY92x0Eq+AKkqpFoi2Nh+dBQDl0J+0VKKnf8DJ31qFgO8DOUePsqJPVkwimgdNp8oLawHpO39TLQ2IZLwCqcc4BgWl7UQq29nRhVdUxecq5t4nvnDRYszByuprFm077S5B3hne9ftTzfQ1VfBOvVNGaUEG9bNmJTJlxbWXrTA9nKXM81l6Zmi+3LgyNbDbpLnHM8lPYvA2ZKQjwxdw8rp4OyQMVwv3goWKILoNcAP9acQtkHfN7dMWA8whXzg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:38 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:38 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 23/30] gpu: nova-core: Hopper/Blackwell: add FSP Chain of Trust boot Date: Fri, 30 Jan 2026 16:55:57 -0800 Message-ID: <20260131005604.454172-24-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR05CA0200.namprd05.prod.outlook.com (2603:10b6:a03:330::25) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 3ac934b2-976a-464e-4674-08de606396b8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?89IaasO1WDWQF/EndRFtkl6kElU6+FOnyHU1gg1vvmP+JCEQp3oNwBsnFumz?= =?us-ascii?Q?mYTQgtYMBmjWFiDSgYa+KVKcBsZji1wP5O/KeWTixursUx9Xk2WcWbxY9cby?= =?us-ascii?Q?297HjY6v5l9ErRAIg+89fm0yqTAV/zd2wfK5wYd0iwWXtz5xxWdrpHM167Xn?= =?us-ascii?Q?lRBdYqFfOyIx8DMlxIcVkB6yJloY9ZGtdlfDaa92m6GaA+H07dnYwCe8tm+F?= =?us-ascii?Q?6jpZU+6ZaCw3t4WiA7nhlm+cr/l0MSYeMeLIA5xo686qi8JsWbAYmfhhgsCI?= =?us-ascii?Q?P7dGhYcjqG9lPxe8zez/hit9bqY6J90JCxm+ki5/p/9w64rpsGN26wjs+fTj?= =?us-ascii?Q?WhcdfW+geJgazMneUp/P/SqE7nd/Dna6FltOtLyuoa/7RYaBjq2kD88F7p/W?= =?us-ascii?Q?D4Jhdwf9vZmRMi2Xy3uhHjhNzk+2ykaboBOiDJ9RJ5KHDD2CWedPYgq9NfSw?= =?us-ascii?Q?zyMDsN/CDiw1Jp25YEWlZpmjR+Wog7+Zue7ulIBnL1EiITE5V1rC4gvcT0pE?= =?us-ascii?Q?5s7A8hJpaEa4qiIM9S1gIPT4zp/6hiIT8ZCo/SWqCaRmHknRN+uuqBeSdOBM?= =?us-ascii?Q?LjcvYTAbRfGVnBsiWGXPRLUOb0pPy1mP65q9/F3mNGGsOmgEFyZJ0a1ouXY2?= =?us-ascii?Q?x1HWrnGhUB6i8GLcDZpx1UTZX+0BT7vPjEg/k129kGtHF1L+c/r8/BFnUBj/?= =?us-ascii?Q?eVnie6QDZE/qzkhnbsUMwHiGOa3CnmQEfwKe0B1bqsP56rNE5RtPfv7b/3az?= =?us-ascii?Q?Cei4HurOEV2Hokq04v4wJi4H+L1X7noGN+NBbgZMiQYpm3YI805TAXluPzlE?= =?us-ascii?Q?43LSAMgAg/+AsePMmpR9uWo+Fm0oG1FcGx0/pNsbEmTWrhQgBf2tXcTI+wCO?= =?us-ascii?Q?8xMp4x7oUFvzcJ9amZUndPIEE+oFFbahz2PcjVFBOTmLSQEYaZkLPOWmHbQR?= =?us-ascii?Q?BNJiNIdB11HgAMXP/xhRqXe3rkzDsKz8JmXqhcXRLO0WY7Jh3toF01CalxRW?= =?us-ascii?Q?tjOwLJF3M/r+XfJIl2JzHe2Q80h0c43EBAEqgYEKmgl71ku43uohkXh9rO0w?= =?us-ascii?Q?yyH3VrmlKQ4LxExHmhZUj+XSDCQA+i9bBtghKYRQM3jN8jWUCKc5/hHgPLxh?= =?us-ascii?Q?yTIxTEb7DL1auPQ+ULvLpKXHt+w+QFyLaLVQjXL2ATRZXpqt/zgOOMnD8m/S?= =?us-ascii?Q?iG9oDn/emJZbBQA+bfT/ExC6MS6FCEkuv/dmbU+Px6R99fVoaMEi5AfkLoOW?= =?us-ascii?Q?4TMsohdxlDfkNTIdp5gOjEkqj3KId/fWIxD6CcLwu7JC6UOzZ4pxYdYhu1P4?= =?us-ascii?Q?+MKyPvH5IrCjzzDB3ZcSGzZTaq+sxc2SCFn9AqdnsDfpMirFe6FLK6hp+5FX?= =?us-ascii?Q?x0BRX5RJUSmRelWf9hkG8yh6QphIp5NPQmbIUaXU2Fu141FjiUYExez0Mtvm?= =?us-ascii?Q?wV/K3Bx3ZEU3pseov3eqcBtOZMnWUoG9FyOjZu1iN+LJBp5S9C5QmKHNa3HD?= =?us-ascii?Q?TmNVp40MDLlQTu+3vKY/QksG3fxXKRg4TB0c6qMrF7Gj+YtpwIpO5PxODxwG?= =?us-ascii?Q?mg37yOa7jn+sNYPdLCA=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?7J/MquWqbRJaIzpRp9rXGI4jlHFldzVV/Rts/whvkNEy3pfGWEyNoYb8Gb5F?= =?us-ascii?Q?iBWVCzJvmUqUaxOZ9tnl5YCy7GyWSMIDj9x/Tzen3Q2UweY8iNsAIsAsAqrB?= =?us-ascii?Q?/DyelHwnJk5cwzmtd4fT6zJ5Z6Jj85U54vZzXfNbWWll0A4VRN1i5P9ScckL?= =?us-ascii?Q?MHLiUzSnwkSqjW2DHwQbeLTUR03e/L+chpkdZ8vEHDZ1/M69POr56/jf/sNH?= =?us-ascii?Q?JRQv+MjyKEuSqlXPfJHnIc5GmVrG7h7NZ/VF3YRUjIm79snCIytb71jgeP/c?= =?us-ascii?Q?gvYjeHbiSsGaWkf6IzfC5MsX4faO3Cs+Nd6ooPCt7j0stRYAvKhaKEUJPe15?= =?us-ascii?Q?MJQFozpi+C4voRDl6L5hMZTA/VY/21bStUsDHqbczYbNyUDBVJnVdXyTJypS?= =?us-ascii?Q?IhRkxV6CApMViLTTNtWUeSqttbn7Evs14+Y73CgnmNiJ5B8vXyAm50hB7Mpa?= =?us-ascii?Q?5vmzmRr3ETRgsLZF85g3vFap5MEAGf0rKI2HuXnlMqO/phJXyIHr5HtfBt0L?= =?us-ascii?Q?kpqGytA7e1b2e5NHxL2iFKOzSukTIEaRPGry4lWyIaTYWGrxUIKW7qdSpawC?= =?us-ascii?Q?IN2AuppOQJwfaEbOgPdnwGli5BEncdfK+bSd5c6zIeevqHw8rzVU/xwl49GD?= =?us-ascii?Q?KFECZ6yhE75fotjUgy319RSpo4X4leZ/gP1DOCUIj/07j4jM2l34anr4loOY?= =?us-ascii?Q?mqXD+56PsTWOw0DiHyzED36SJWSge18ExD8glJEOVNTo7M7LNzE+NseabENK?= =?us-ascii?Q?4h8sshP85A3OrxEfvM5sJs42Ux/Ho0tYWI8CfEqmgBvIhHrsKD46ZPb3nRbk?= =?us-ascii?Q?gB18kGaorWlAPeVXnfTf1f07gKRWHRAqDdrFDlAjbvlbyTyGAeQKRd2FFmU0?= =?us-ascii?Q?C9iKYZKH8WSjgIJsQ+/CcgLAsT5fkBOFusBK9cajI8QF7WQTswK6D2VEoDgt?= =?us-ascii?Q?BggV6jHTY/uzJV11XTL4AE0MpAQsAf8IvF0HxCtOBNicBYb+az4f9jSflPEz?= =?us-ascii?Q?DLapa0hvNwLi2YR/2YFv269dPLG8A0zGKs1ogCKuT1Ui84nXEA4N97KglQfg?= =?us-ascii?Q?JJW0DBjttGhkSyQqqi9hk5VG5PhUD2MYsB6tmK/blWdo/TrkjftJTD9a52PF?= =?us-ascii?Q?F4WErTXnkndQKwkvgUdZ8N1V0NkipUfKuelIWZni0BjqAu5S6CYkpjqH+NJP?= =?us-ascii?Q?WS/AwWQP1oauQOwmj57Fw1+Ys/MPmv8TmmAA8fDDyakGoxKOTNllPdgTvTNq?= =?us-ascii?Q?RUKUiPa71I69OOqQSXENb5IUc07hAFgeODylAF1zki4VVOTa1k5P0b1Uutaa?= =?us-ascii?Q?glaO6ntZb14mDZNChfqcqP7FVLugXYRiaxY9ODQtZmtiSPwONtNFJaquhb8K?= =?us-ascii?Q?Ic0tCxCnUIx2TmsNmzTXVP2+r5KDOo7dmBBZp5wnMxezkZ2DayHuLYkiThVX?= =?us-ascii?Q?yvsQGoA9oQT9MgUuBs3obae/BLxuBO3cvPkS4wdnyIMvdJJk+reWKsFNQ3Xg?= =?us-ascii?Q?fESCFaJaUeVNTx9ED4TOHknOwCZBO46zX2bvTaehehVa9AwH7orKM22XiR2L?= =?us-ascii?Q?2puWaXVSKE7shVLYLVee+LLq+czswFEcKafKw6wH3khrdDKCHNiReEQKruqU?= =?us-ascii?Q?LDQtDmQ0BvWIQAgw3GKAXcz7AVBriOlZA/S8xVCDZRNZY6b0611rmNbfGvzx?= =?us-ascii?Q?lOgcc4SnEbE7fuztxSlRZW91j2URkPcD+1tah88qSMSZzFF9RiITjyye0rGK?= =?us-ascii?Q?wiiV0z7djw=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3ac934b2-976a-464e-4674-08de606396b8 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:38.1375 (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: 2rhtIXjUft92ABxDeoJuyDNZHTBXN5kyh55kJoBznvzypmLkWDUhRGCqKV4XXoZjPqjQROEzo7ICICrMnRbivQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Add the boot functions that construct FMC boot parameters and send the Chain of Trust message to FSP. This completes the FSP communication infrastructure needed to boot GSP firmware on Hopper/Blackwell GPUs. Cc: Joel Fernandes Cc: Gary Guo Signed-off-by: John Hubbard --- drivers/gpu/nova-core/fb.rs | 2 +- drivers/gpu/nova-core/fb/hal.rs | 9 +- drivers/gpu/nova-core/firmware/fsp.rs | 19 +-- drivers/gpu/nova-core/fsp.rs | 166 ++++++++++++++++++++++++-- drivers/gpu/nova-core/gpu.rs | 12 ++ 5 files changed, 191 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/nova-core/fb.rs b/drivers/gpu/nova-core/fb.rs index 9b4407338724..3a2b79a5c107 100644 --- a/drivers/gpu/nova-core/fb.rs +++ b/drivers/gpu/nova-core/fb.rs @@ -30,7 +30,7 @@ regs, }; =20 -mod hal; +pub(crate) mod hal; =20 /// Type holding the sysmem flush memory page, a page of memory to be writ= ten into the /// `NV_PFB_NISO_FLUSH_SYSMEM_ADDR*` registers and used to maintain memory= coherency. diff --git a/drivers/gpu/nova-core/fb/hal.rs b/drivers/gpu/nova-core/fb/hal= .rs index d795ef7ee65d..eaa545fe9b08 100644 --- a/drivers/gpu/nova-core/fb/hal.rs +++ b/drivers/gpu/nova-core/fb/hal.rs @@ -28,10 +28,17 @@ pub(crate) trait FbHal { =20 /// Returns the VRAM size, in bytes. fn vidmem_size(&self, bar: &Bar0) -> u64; + + /// Returns the non-WPR heap size for GPUs that need large reserved me= mory. + /// + /// Returns `None` for GPUs that don't need extra reserved memory. + fn non_wpr_heap_size(&self) -> Option { + None + } } =20 /// Returns the HAL corresponding to `chipset`. -pub(super) fn fb_hal(chipset: Chipset) -> &'static dyn FbHal { +pub(crate) fn fb_hal(chipset: Chipset) -> &'static dyn FbHal { match chipset.arch() { Architecture::Turing =3D> tu102::TU102_HAL, Architecture::Ampere if chipset =3D=3D Chipset::GA100 =3D> ga100::= GA100_HAL, diff --git a/drivers/gpu/nova-core/firmware/fsp.rs b/drivers/gpu/nova-core/= firmware/fsp.rs index 80401b964488..edcc173c2fa6 100644 --- a/drivers/gpu/nova-core/firmware/fsp.rs +++ b/drivers/gpu/nova-core/firmware/fsp.rs @@ -3,6 +3,7 @@ //! FSP is a hardware unit that runs FMC firmware. =20 use kernel::{ + alloc::KVec, device, prelude::*, // }; @@ -13,16 +14,16 @@ gpu::Chipset, // }; =20 -#[expect(unused)] +#[expect(dead_code)] pub(crate) struct FspFirmware { - /// FMC firmware image data (only the .image section) - fmc_image: DmaObject, - /// Full FMC ELF data (for signature extraction) - fmc_full: DmaObject, + /// FMC firmware image data (only the .image section) - submitted to h= ardware + pub(crate) fmc_image: DmaObject, + /// Full FMC ELF data (for signature extraction) - CPU-only access + pub(crate) fmc_full: KVec, } =20 impl FspFirmware { - #[expect(unused)] + #[expect(dead_code)] pub(crate) fn new( dev: &device::Device, chipset: Chipset, @@ -36,9 +37,13 @@ pub(crate) fn new( EINVAL })?; =20 + // Copy the full ELF into a kernel vector for CPU-side signature e= xtraction + let mut fmc_full =3D KVec::with_capacity(fw.data().len(), GFP_KERN= EL)?; + fmc_full.extend_from_slice(fw.data(), GFP_KERNEL)?; + Ok(Self { fmc_image: DmaObject::from_data(dev, fmc_image_data)?, - fmc_full: DmaObject::from_data(dev, fw.data())?, + fmc_full, }) } } diff --git a/drivers/gpu/nova-core/fsp.rs b/drivers/gpu/nova-core/fsp.rs index dfd0ffe5a650..6a0bc800abb0 100644 --- a/drivers/gpu/nova-core/fsp.rs +++ b/drivers/gpu/nova-core/fsp.rs @@ -13,6 +13,11 @@ device, io::poll::read_poll_timeout, prelude::*, + ptr::{ + Alignable, + Alignment, // + }, + sizes::{SZ_1M, SZ_2M}, time::Delta, transmute::{ AsBytes, @@ -35,6 +40,16 @@ pub(crate) mod mctp { pub(super) const HEADER_SEID: u32 =3D 0; // Source Endpoint ID pub(super) const HEADER_SEQ: u32 =3D 0; // Sequence number =20 + // MCTP header bit positions + pub(super) const HEADER_SOM_SHIFT: u32 =3D 31; + pub(super) const HEADER_EOM_SHIFT: u32 =3D 30; + pub(super) const HEADER_SEQ_SHIFT: u32 =3D 28; + pub(super) const HEADER_SEID_SHIFT: u32 =3D 16; + + // NVDM header bit positions + pub(super) const NVDM_VENDOR_ID_SHIFT: u32 =3D 8; + pub(super) const NVDM_TYPE_SHIFT: u32 =3D 24; + pub(super) const MSG_TYPE_VENDOR_PCI: u32 =3D 0x7e; pub(super) const VENDOR_ID_NV: u32 =3D 0x10de; pub(super) const NVDM_TYPE_COT: u32 =3D 0x14; @@ -203,6 +218,19 @@ struct FspResponse { // SAFETY: FspResponse is a packed C struct with only integral fields. unsafe impl FromBytes for FspResponse {} =20 +/// Trait implemented by types representing a message to send to FSP. +/// +/// This provides [`Fsp::send_sync_fsp`] with the information it needs to = send +/// a given message, following the same pattern as GSP's `CommandToGsp`. +pub(crate) trait MessageToFsp: AsBytes { + /// NVDM type identifying this message to FSP. + const NVDM_TYPE: u32; +} + +impl MessageToFsp for FspMessage { + const NVDM_TYPE: u32 =3D mctp::NVDM_TYPE_COT; +} + /// FSP interface for Hopper/Blackwell GPUs. pub(crate) struct Fsp; =20 @@ -318,16 +346,138 @@ pub(crate) fn extract_fmc_signatures_static( Ok(signatures) } =20 - /// Send message to FSP and wait for response. - fn send_sync_fsp( + /// Creates FMC boot parameters structure for FSP. + /// + /// This structure tells FSP how to boot GSP-RM with the correct memor= y layout. + pub(crate) fn create_fmc_boot_params( + dev: &device::Device, + wpr_meta_addr: u64, + wpr_meta_size: u32, + libos_addr: u64, + ) -> Result> { + use kernel::dma::CoherentAllocation; + + const GSP_DMA_TARGET_COHERENT_SYSTEM: u32 =3D 1; + const GSP_DMA_TARGET_NONCOHERENT_SYSTEM: u32 =3D 2; + + let fmc_boot_params =3D CoherentAllocation::::al= loc_coherent( + dev, + 1, + GFP_KERNEL | __GFP_ZERO, + )?; + + // Configure ACR boot parameters (WPR metadata location) using dma= _write! macro + kernel::dma_write!( + fmc_boot_params[0].boot_gsp_rm_params.target =3D GSP_DMA_TARGE= T_COHERENT_SYSTEM + )?; + kernel::dma_write!( + fmc_boot_params[0].boot_gsp_rm_params.gsp_rm_desc_offset =3D w= pr_meta_addr + )?; + kernel::dma_write!(fmc_boot_params[0].boot_gsp_rm_params.gsp_rm_de= sc_size =3D wpr_meta_size)?; + + // Blackwell FSP expects wpr_carveout_offset and wpr_carveout_size= to be zero; + // it obtains WPR info from other sources. + kernel::dma_write!(fmc_boot_params[0].boot_gsp_rm_params.b_is_gsp_= rm_boot =3D 1)?; + + // Configure RM parameters (libos location) using dma_write! macro + kernel::dma_write!( + fmc_boot_params[0].gsp_rm_params.target =3D GSP_DMA_TARGET_NON= COHERENT_SYSTEM + )?; + kernel::dma_write!(fmc_boot_params[0].gsp_rm_params.boot_args_offs= et =3D libos_addr)?; + + Ok(fmc_boot_params) + } + + /// Boot GSP FMC with pre-extracted signatures. + /// + /// This version takes pre-extracted signatures and FMC image data. + /// Used when signatures are extracted separately from the full ELF fi= le. + #[allow(clippy::too_many_arguments)] + pub(crate) fn boot_gsp_fmc_with_signatures( dev: &device::Device, bar: &crate::driver::Bar0, + chipset: crate::gpu::Chipset, + fmc_image_fw: &crate::dma::DmaObject, // Contains only the image s= ection + fmc_boot_params: &kernel::dma::CoherentAllocation, + total_reserved_size: u64, + resume: bool, fsp_falcon: &crate::falcon::Falcon, - nvdm_type: u32, - packet: &[u8], + signatures: &FmcSignatures, ) -> Result<()> { + dev_dbg!(dev, "Starting FSP boot sequence for {}\n", chipset); + + // Build FSP Chain of Trust message + let fmc_addr =3D fmc_image_fw.dma_handle(); // Now points to image= data only + let fmc_boot_params_addr =3D fmc_boot_params.dma_handle(); + + // frts_offset is relative to FB end: FRTS_location =3D FB_END - f= rts_offset + let frts_offset =3D if !resume { + let mut frts_reserved_size =3D + if let Some(heap_size) =3D crate::fb::hal::fb_hal(chipset)= .non_wpr_heap_size() { + u64::from(heap_size) + } else { + total_reserved_size + }; + + // Add PMU reserved size + frts_reserved_size +=3D u64::from(crate::fb::PMU_RESERVED_SIZE= ); + + frts_reserved_size + .align_up(Alignment::new::()) + .unwrap_or(frts_reserved_size) + } else { + 0 + }; + let frts_size =3D if !resume { SZ_1M as u32 } else { 0 }; + + // Build the FSP message + let msg =3D KBox::new( + FspMessage { + mctp_header: (mctp::HEADER_SOM << mctp::HEADER_SOM_SHIFT) + | (mctp::HEADER_EOM << mctp::HEADER_EOM_SHIFT) + | (mctp::HEADER_SEID << mctp::HEADER_SEID_SHIFT) + | (mctp::HEADER_SEQ << mctp::HEADER_SEQ_SHIFT), + + nvdm_header: (mctp::MSG_TYPE_VENDOR_PCI) + | (mctp::VENDOR_ID_NV << mctp::NVDM_VENDOR_ID_SHIFT) + | (mctp::NVDM_TYPE_COT << mctp::NVDM_TYPE_SHIFT), + + cot: NvdmPayloadCot { + version: chipset.fsp_cot_version(), + size: core::mem::size_of::() as u16, + gsp_fmc_sysmem_offset: fmc_addr, + frts_sysmem_offset: 0, + frts_sysmem_size: 0, + frts_vidmem_offset: frts_offset, + frts_vidmem_size: frts_size, + hash384: signatures.hash384, + public_key: signatures.public_key, + signature: signatures.signature, + gsp_boot_args_sysmem_offset: fmc_boot_params_addr, + }, + }, + GFP_KERNEL, + )?; + + // Send COT message to FSP and wait for response + Self::send_sync_fsp(dev, bar, fsp_falcon, &*msg)?; + + dev_dbg!(dev, "FSP Chain of Trust completed successfully\n"); + Ok(()) + } + + /// Send message to FSP and wait for response. + fn send_sync_fsp( + dev: &device::Device, + bar: &crate::driver::Bar0, + fsp_falcon: &crate::falcon::Falcon, + msg: &M, + ) -> Result<()> + where + M: MessageToFsp, + { // Send message - fsp_falcon.send_msg(bar, packet)?; + fsp_falcon.send_msg(bar, msg.as_bytes())?; =20 // Wait for response let timeout =3D Delta::from_millis(FSP_MSG_TIMEOUT_MS); @@ -392,11 +542,11 @@ fn send_sync_fsp( } =20 // Check command type matches - if command_nvdm_type !=3D nvdm_type { + if command_nvdm_type !=3D M::NVDM_TYPE { dev_err!( dev, "Expected NVDM type {:#x} in reply, got {:#x}\n", - nvdm_type, + M::NVDM_TYPE, command_nvdm_type ); return Err(EIO); @@ -407,7 +557,7 @@ fn send_sync_fsp( dev_err!( dev, "NVDM command {:#x} failed with error {:#x}\n", - nvdm_type, + M::NVDM_TYPE, error_code ); return Err(EIO); diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index 2ed0f6d8d19d..09e894aa7b5a 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -124,6 +124,18 @@ pub(crate) const fn arch(&self) -> Architecture { | Self::GB207 =3D> Architecture::Blackwell, } } + + /// Returns the FSP Chain of Trust (COT) protocol version for this chi= pset. + /// + /// Hopper (GH100) uses version 1, Blackwell uses version 2. + pub(crate) const fn fsp_cot_version(&self) -> u16 { + match self.arch() { + Architecture::Hopper =3D> 1, + Architecture::Blackwell =3D> 2, + // Other architectures don't use FSP COT + _ =3D> 0, + } + } } =20 // TODO --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012046.outbound.protection.outlook.com [40.107.209.46]) (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 78F5A34EEF3; Sat, 31 Jan 2026 00:56:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821010; cv=fail; b=DhsNL0kkTMzYOUDxCI7x9zPVpDtlDRla6BXHOSNM4r0jgR8MWxXueeefV6kaQzljx1cmIobyGMyUwyzyv25XiMBphxoCYNMh+51qVbg+aLMGkb06BaWn2Ry0bLyC8/C6Tm0vjHEhIEdT9Nnih/Fj9ToQlQEDNZ9R1ClJwADbd8s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821010; c=relaxed/simple; bh=N95j/TuXqqPJMv2h5KFli4bxbP+Hy3h9Gf6EzzkBMA8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=rUUWvwjAMxx5QIrXhz0pjfZYCDGuVnRx2daXEfggbfdrJr1STTLuDb0jpVOdrL5b35TWSfW3pMRCFM/8Rug6hq6RV5u9Vt7Bgx7pNDrJHiJLLEPT/MN3S3aLOE7QpQ+VRvNFi6QLj1UDlWi58KmdDxyhBKptKbO5DBDc3pw4tJY= 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=R8tazBgt; arc=fail smtp.client-ip=40.107.209.46 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="R8tazBgt" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cucM4LP/gjG0o5K3y4Ksxbdhj7nXXZaY+SzhWihPSAx/XjOEwTtgJ32efXicwrlA+vyrNKtLNGCzql2v2qd+lOdHkTmr4ITwwhkMSJi54P1K+GNFAFJyDh6guTsXMZdjrbNycfxM7lBVkd2A9HL4cKRPUBo9T4gwqDNnKc9UUXb8yBZ8JCoP14VXRilzkXAbZSF3QPc/EJsHmCh0Kw1wPOpl28CPPEsWYpPvlNwrGrDBGv1G3Jf2xeP4+eYnqM9uB3MIA87HZFpbLRZsu/paQzbrcdeKJd6LI8q8P8DHjntzWRqAQPkjv6Z96Fn16/LIBEFcAd83SFWGvTZRj6LmdA== 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=2m6FQBL9gf5w3QotT3kRiKbiXZtZmO4BvfwMbNCQVoI=; b=eYE0mnraEoRmNUpTfHMbqwsfZwNKUxqO7ZYpMeMGryNeF7m0hik9DlXnlXtNVkMF8DPevm5tylqs1GcOZkuLeQMhwZjUuC9YzaZ/0Nqg1+9txCpNlXJuqh2X6eUcd6+DIRMbuqtl1QqmIhZBocerAeZ14bZZ79h/VmvCPXOAp8tcCOMO1b3L0TKGHJCquXZhTSGsu0c6R8so+BezhNE2CT3vtBXyc4sdg0IqDhBPnrWfWRXnOxIhYwyYWWg07EPMJ5Z6G5eG2Sk2Yxuw4Zo3yuZD4lN5AVBSQqMYUGYC0dB/aegwpLd1rMAHgW95w56zTqWksKsvfbTxq2KRRai5Qw== 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=2m6FQBL9gf5w3QotT3kRiKbiXZtZmO4BvfwMbNCQVoI=; b=R8tazBgtDh/i8VJrgbu3Q1zu1EuTtY3nfKvrJ6qEUNe8N8cENK0/A3do4ENPTPnDaKGA7XiUOh4pejl/f2JosuiCL1B3rZokEnSCZLdI6BuMbCjkeeejrPnI6a6DlG2DUr9DYJTTIji6L4aPObgzIahTtEcQZ6aZOa29Gdo8V0ZEcYV29rrn9CNVXl1U2vP1n/ZnDi+KI6xapbfI6dsIAnE/X+Qc6BgaHX1MM5tqdyg3XNCr659VYbfXT69sKG5IZHuQX/khtUN5NT1K3g/5AB/axK/PgNJ/cTlbHmtU3gphcTrepT3Do5HrpZHxKBnpWrgeNK9RJfwUPAVFPuodDw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:39 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:39 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 24/30] gpu: nova-core: Hopper/Blackwell: larger non-WPR heap Date: Fri, 30 Jan 2026 16:55:58 -0800 Message-ID: <20260131005604.454172-25-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY3PR04CA0029.namprd04.prod.outlook.com (2603:10b6:a03:217::34) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 637fa8b2-e6a7-496f-f115-08de60639776 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?lwNLZGFmyUwLQ/I9pRDJGY9qqn38ETrAqOCWu8nvvHqZnYKKOuMWZDcERj08?= =?us-ascii?Q?qCFTR6kGFVticBwi8lllTGN7ynz6qIl2cRJe+FILs1tI1afXrUiBiXe5H4jf?= =?us-ascii?Q?yGKBcl3CV/KN+gblrfg3nt7fEMY/Itp78HgoIRt2TzdW0wQnlwXA4bzRiz9I?= =?us-ascii?Q?FOTAqatqaLxyYINixd60LrL/lcBWMU9YRjwWJMLVmwepY2Zc6AWf0GBQek7g?= =?us-ascii?Q?Qq2zRIdcOOnVZbNDTnreTxxezy+5PJsh/3OpQ1Ri6pWgTtkTjSjmWSKz1MU/?= =?us-ascii?Q?9PPgQu6mW4V72dw4q7apWNvQdv/OVQ/O6RzWvtgFFbYZINJ9GAhztTwkgJo1?= =?us-ascii?Q?SVWJ5lqixFudcdAAbi2t1dd1NueaiXis1W7OCWM9QSn4it7bwn6/K+exRmoC?= =?us-ascii?Q?xCLyb0oOlP6xJKoM7p33nOtmE+DcUqBSvOgnn1rk+w93MVqcpPi7sIwkOdxQ?= =?us-ascii?Q?z3qHJ26hjkQ+/nOxR8hCwzVqEjJnytIxHH2faLZNdR6dusE7TtblyJg4C5ph?= =?us-ascii?Q?FJPhN6o8hK4yJyU4z2BUvf1N5XIqQDpTYdLdnoHuW9i5WZapSi685pBqR+BZ?= =?us-ascii?Q?SRitNn/YBx6sl+3BeMMZD+8VmFaUH2fLL+lrS7FIXhnEop4orb/ui4lbc8av?= =?us-ascii?Q?YLXt9yIekLRyT9OlCVxjcKz0n0zDXAocYgzmO48bg4b3IRm9m8TJKNcTJyeM?= =?us-ascii?Q?2LeraEG3E7ql/7bfnLfHG9kx5oigi1l6qewn7XALAbQVAmFewLP0IZRdnElg?= =?us-ascii?Q?pMW7fJurmr9zo+A4M88sFlvY5bsZ7k4Io1h37H75+6KklKkotYtQdkKLLKw4?= =?us-ascii?Q?kfh83iZ8iW+gKfBtI7mGV+eDQWNbKiQdWO04tisCnUhZuuz2ufzA7YltKbhL?= =?us-ascii?Q?lziWQhUcfkcrOSQOTKV1+HkSgPVSbvlWm8f4Ii4IBXJStRKegGcBp0duxE7b?= =?us-ascii?Q?IbSUr9GdiM/aX/v7SSec6/+NRwU2nbMT/4FeKbaq7R3gShUkQXc7Vw8zHJ0H?= =?us-ascii?Q?wOsMOxUSPAmvJzRiJSk523aVmDITiQtLf7qOMkb9P8H/HlwD5KZMJnuZNpZm?= =?us-ascii?Q?NzVOvHkDTl3KVMhbduU21jjNQSIGOQBnV2SbJmSdRZvCJHlw9xnW4B3YRtNh?= =?us-ascii?Q?gX+lyPetbCAfNBEafj6dFoolpfk5Wp441+k2qPHuozW8TBYpLzCr5MEX7LOp?= =?us-ascii?Q?ur7luwQNce3EG/k4eMSPEHe3Qrb8HcmeKTU2vU43ZoAe9zRQ3nn4J2jT9unz?= =?us-ascii?Q?F+r3ETPgI5q5AGweUExgPBuHHp6CPgtGGx+cxxwSz69I+z9zO6yB4nehYDsl?= =?us-ascii?Q?0kg4yyiqZNU+CKnNf16QsO1FsG2mCEUgQCPmDrEJ9u3YwyS6SevSNYV2UOqe?= =?us-ascii?Q?rTPzvaHzjcUpyNp7KcPwr5mh5pCJgc0FXo57HtWCjbSlPOZbvNa2FPjKZtp7?= =?us-ascii?Q?VsfBaMBDzLOayX8yFg/eYnCoLwQTIk0ugrnasljsZ7xjTL+gHXs9CAiGUFcj?= =?us-ascii?Q?twQJs5asu7r3UGiH780v7R9V3PmIsiKFglKzaAC7uuF4EA030H7KihlRrZS4?= =?us-ascii?Q?xgNZnSpMM2Jl82Khrio=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?JtXmkO9PPrdzccnbSsRs3qexkYOCOhumB3Lc7crOxsfd5kaeGYio53B/xCpk?= =?us-ascii?Q?wRWulnVYr2Vtl/FH2aEBNWaGWrm8faGj1GwVjAJexWKJvJIJLxYAoFrHc1z4?= =?us-ascii?Q?zXwvEd5bA0mLTgu0WmMe9woswMk473TeQdfxB+ImVytfwFReAEsFGA01nvaz?= =?us-ascii?Q?cTXGOmliy9n1FLJA8OVlwH6jqrhPuW6L9tSpe90JY61sUqM3h5cTkMkFFDcw?= =?us-ascii?Q?rllAvpN1m/UxQ/+GyZ717pPEpgeUMJTh11T8xb/MljFyB4hlV1zgP5U5MTa6?= =?us-ascii?Q?8uxTNBbTxV2UJ0hXi/A7nhZtAQrMoZn5VFcJ9Tx7AGlDMvgr4p+SdAmrsjxG?= =?us-ascii?Q?7be5SWmEi4qJbMwSsDuuk8Qd6MwKBT7L/cQwJe4EYxE+I7JbwRqAsTWY4/vs?= =?us-ascii?Q?LcrD+7h1TdZK8aLf5UlxLOK4a/CB4VLlnFvoXjQLb8EfbvqX6J8vo6VoMnyU?= =?us-ascii?Q?qWiRDOSxkr1xTBd6EqFrriyAqLpQZEciD91QPXrYL2DJ2ibsjf722Aj8xSLS?= =?us-ascii?Q?KhzlOdMCycpQXe+pBF0j6UZXTnodDCX8c5v7BTtdVZH3ud9SbP6w7cS2eGYr?= =?us-ascii?Q?GRWBW3Z9CVy5Fi/oQ6vZxGop12s5LbADTciIh/YyACjpNeXzzRxd4F74xLHl?= =?us-ascii?Q?2F02+BMIDBsRHsdPSq2ru335PUSHEDYIUKHYeI4dwI1Ih/eksZbpuBIsOoK1?= =?us-ascii?Q?CtMqv5UqWtzJUgP/jO6YfmflAmcf4byHTg14zY2joXkBpKN3Xc+9Z6C9lCk+?= =?us-ascii?Q?AuvY0dkX+un9FoE1788q9p32rFwgju/yYE7zMwLjWjCo1QGvbAqzYDHZrpon?= =?us-ascii?Q?xd0Gubx9bWdW46Dm6QVQRWu4/bvB770Kg2a0Bopk6v2voAFZi9L1+xlWhFfu?= =?us-ascii?Q?7zdduCnTSGsDvGhtSLf/2mzMPLGBCP6F3jJ+3q4IVwqRzOy5PfORduThTqJc?= =?us-ascii?Q?C28WeFEbkt1Qreg1S8THe/65jp5iKqt8JBeB1D/4nP8+mBc64giCetORAQ5U?= =?us-ascii?Q?tGuluUKuoP0ZS1I1PcHjQ5v4MNZ1FWgpjHwl8olT/TLm81JbqZ8DpBBnfH6k?= =?us-ascii?Q?RVUAxRNn+ujS/H/JCN56xoHd/nxxevdn5ohfgXio3Rw9s05wIxWZcR09XVCd?= =?us-ascii?Q?8qDlsuBPPl2kwiAdtIfhptmia9xVIutLORDaBwMptOkRTHxFGHUxHsdhEE2H?= =?us-ascii?Q?oR2UoZXtPzmW8ZGalKJZW0XRt9b75DiyPeWewgzJceoktRUZYYzPuFJXOsL8?= =?us-ascii?Q?V0UqMFPXqCwhvCFyXiEoVo0f9THGY53WcF9f2D/kGHSXY62w1cjNv0UnwZV7?= =?us-ascii?Q?I2CzaxhHn5kEx9e7r/KneAt4YMBrUoBb6KSggjB87rN/aPlaen/kQsvO/Bjf?= =?us-ascii?Q?10MZZwy0JcrA2xV66mckeFd3vLU14M76ocY0KhlUgU5d2jNo1BHAWgXPcag0?= =?us-ascii?Q?drmdOZSlU0qsV2meCDCxHGcP0OCFQmRJofblkZSzOGF0hIEMS3xd6m3psNKk?= =?us-ascii?Q?Uo5loLuv8eae2YpH3ik4rq5HyB0s1upa6N/BpHG6yAFu2YwSvK7a7JeE/uTc?= =?us-ascii?Q?flUNU0fDfsvoAD+JgoxeM6AL1CFwlUzXVSgr10e/3QnbGcouYXcpWZXSD26G?= =?us-ascii?Q?wEbenymr3lbQr6Qk5B7XyH7iJ9NMbtuCAq5LX49RRmytfJjQd9U16Xtk8ER7?= =?us-ascii?Q?epFgNguxYNJlhG3E/l1wjeAcZn2lgWmfG9XhkimgKL1p4HUN6dYloN4D1Pvd?= =?us-ascii?Q?V4rGV27Bsg=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 637fa8b2-e6a7-496f-f115-08de60639776 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:39.3758 (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: 29c4B22BfAkzEXXpSpBrTKOjaUI8C0j4q7NFfQ9LdxXHrT/0Sxqkqq6OK/TtNM8PmH52A7HjXpsr/qyEVttNsw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Hopper, Blackwell and later require more space for the non-WPR heap. Add a new FbHal method to return the non-WPR heap size, and create a new GH100 HAL for Hopper and GB100 HAL for Blackwell that return the appropriate value for each GPU architecture. Cc: Timur Tabi Signed-off-by: John Hubbard --- drivers/gpu/nova-core/fb.rs | 14 +++++++--- drivers/gpu/nova-core/fb/hal.rs | 7 +++-- drivers/gpu/nova-core/fb/hal/ga102.rs | 2 +- drivers/gpu/nova-core/fb/hal/gb100.rs | 37 +++++++++++++++++++++++++++ drivers/gpu/nova-core/fb/hal/gh100.rs | 37 +++++++++++++++++++++++++++ 5 files changed, 91 insertions(+), 6 deletions(-) create mode 100644 drivers/gpu/nova-core/fb/hal/gb100.rs create mode 100644 drivers/gpu/nova-core/fb/hal/gh100.rs diff --git a/drivers/gpu/nova-core/fb.rs b/drivers/gpu/nova-core/fb.rs index 3a2b79a5c107..7c502f15622c 100644 --- a/drivers/gpu/nova-core/fb.rs +++ b/drivers/gpu/nova-core/fb.rs @@ -98,6 +98,15 @@ pub(crate) fn unregister(&self, bar: &Bar0) { } } =20 +/// Calculate non-WPR heap size based on chipset architecture. +/// This matches the logic used in FSP for consistency. +pub(crate) fn calc_non_wpr_heap_size(chipset: Chipset) -> u64 { + hal::fb_hal(chipset) + .non_wpr_heap_size() + .map(u64::from) + .unwrap_or(SZ_1M as u64) +} + pub(crate) struct FbRange(Range); =20 impl FbRange { @@ -255,9 +264,8 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0, gsp_fw:= &GspFirmware) -> Result< }; =20 let heap =3D { - const HEAP_SIZE: u64 =3D usize_as_u64(SZ_1M); - - FbRange(wpr2.start - HEAP_SIZE..wpr2.start) + let heap_size =3D calc_non_wpr_heap_size(chipset); + FbRange(wpr2.start - heap_size..wpr2.start) }; =20 // Calculate reserved sizes. PMU reservation is a subset of the to= tal reserved size. diff --git a/drivers/gpu/nova-core/fb/hal.rs b/drivers/gpu/nova-core/fb/hal= .rs index eaa545fe9b08..ebd12247f771 100644 --- a/drivers/gpu/nova-core/fb/hal.rs +++ b/drivers/gpu/nova-core/fb/hal.rs @@ -12,6 +12,8 @@ =20 mod ga100; mod ga102; +mod gb100; +mod gh100; mod tu102; =20 pub(crate) trait FbHal { @@ -42,7 +44,8 @@ pub(crate) fn fb_hal(chipset: Chipset) -> &'static dyn Fb= Hal { match chipset.arch() { Architecture::Turing =3D> tu102::TU102_HAL, Architecture::Ampere if chipset =3D=3D Chipset::GA100 =3D> ga100::= GA100_HAL, - Architecture::Ampere =3D> ga102::GA102_HAL, - Architecture::Hopper | Architecture::Ada | Architecture::Blackwell= =3D> ga102::GA102_HAL, + Architecture::Ampere | Architecture::Ada =3D> ga102::GA102_HAL, + Architecture::Hopper =3D> gh100::GH100_HAL, + Architecture::Blackwell =3D> gb100::GB100_HAL, } } diff --git a/drivers/gpu/nova-core/fb/hal/ga102.rs b/drivers/gpu/nova-core/= fb/hal/ga102.rs index 734605905031..f8d8f01e3c5d 100644 --- a/drivers/gpu/nova-core/fb/hal/ga102.rs +++ b/drivers/gpu/nova-core/fb/hal/ga102.rs @@ -8,7 +8,7 @@ regs, // }; =20 -fn vidmem_size_ga102(bar: &Bar0) -> u64 { +pub(super) fn vidmem_size_ga102(bar: &Bar0) -> u64 { regs::NV_USABLE_FB_SIZE_IN_MB::read(bar).usable_fb_size() } =20 diff --git a/drivers/gpu/nova-core/fb/hal/gb100.rs b/drivers/gpu/nova-core/= fb/hal/gb100.rs new file mode 100644 index 000000000000..eaab3f934f6e --- /dev/null +++ b/drivers/gpu/nova-core/fb/hal/gb100.rs @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-2.0 + +use kernel::prelude::*; + +use crate::{ + driver::Bar0, + fb::hal::FbHal, // +}; + +struct Gb100; + +impl FbHal for Gb100 { + fn read_sysmem_flush_page(&self, bar: &Bar0) -> u64 { + super::ga100::read_sysmem_flush_page_ga100(bar) + } + + fn write_sysmem_flush_page(&self, bar: &Bar0, addr: u64) -> Result { + super::ga100::write_sysmem_flush_page_ga100(bar, addr); + + Ok(()) + } + + fn supports_display(&self, bar: &Bar0) -> bool { + super::ga100::display_enabled_ga100(bar) + } + + fn vidmem_size(&self, bar: &Bar0) -> u64 { + super::ga102::vidmem_size_ga102(bar) + } + + fn non_wpr_heap_size(&self) -> Option { + Some(0x220000) + } +} + +const GB100: Gb100 =3D Gb100; +pub(super) const GB100_HAL: &dyn FbHal =3D &GB100; diff --git a/drivers/gpu/nova-core/fb/hal/gh100.rs b/drivers/gpu/nova-core/= fb/hal/gh100.rs new file mode 100644 index 000000000000..6c56b8439276 --- /dev/null +++ b/drivers/gpu/nova-core/fb/hal/gh100.rs @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-2.0 + +use kernel::prelude::*; + +use crate::{ + driver::Bar0, + fb::hal::FbHal, // +}; + +struct Gh100; + +impl FbHal for Gh100 { + fn read_sysmem_flush_page(&self, bar: &Bar0) -> u64 { + super::ga100::read_sysmem_flush_page_ga100(bar) + } + + fn write_sysmem_flush_page(&self, bar: &Bar0, addr: u64) -> Result { + super::ga100::write_sysmem_flush_page_ga100(bar, addr); + + Ok(()) + } + + fn supports_display(&self, bar: &Bar0) -> bool { + super::ga100::display_enabled_ga100(bar) + } + + fn vidmem_size(&self, bar: &Bar0) -> u64 { + super::ga102::vidmem_size_ga102(bar) + } + + fn non_wpr_heap_size(&self) -> Option { + Some(0x200000) + } +} + +const GH100: Gh100 =3D Gh100; +pub(super) const GH100_HAL: &dyn FbHal =3D &GH100; --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010034.outbound.protection.outlook.com [52.101.61.34]) (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 F2A8834FF65; Sat, 31 Jan 2026 00:56:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.34 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821011; cv=fail; b=ZEIyzoU0TxwYJWjRv09rvWQFPnKvtevz99lPJ8PEuY8KAoKrXKjHJetR4q9qUvY1boznnC90dYcaaBg2OdHEsUcY2UHdnswtEKa0JrKxGupnkxYiUQVySR2OQuBlHpNzOw7f53hNydNw292t3sgZV7Zq7kI56b39K0YwK7OJiZI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821011; c=relaxed/simple; bh=68hr56izvuRTxryZ1/RRipRA92fNlGzMaOhd5X3xxI4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=JqnEP++tGaOmRDyJE5M/WHbrx2t9uvTChlEFa59DYB/I/4NhCSloQy5uiJ0NmepmdJHKlFxRhGzcuHnoG/2HqfA6HZfQsSOywd45UP7VtZwnHvH/oLKbhHw7/tPofvY5QENiDRW1VvvEp6GQax7oGwulXEUCkdIc1s6TqNX0qj8= 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=E4lwwPMJ; arc=fail smtp.client-ip=52.101.61.34 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="E4lwwPMJ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=F3CdcDMB6W0zHDjZGmgzT+Xp41t7PuXh9TVko3ZYIU7nH5kI5nFiWoz4AvOxrltwBYpQwf2ya3PGYD4l0w0dFz4XrkBX1KBJLWNiRWQPx0YEisO9XmflD/p8VvkAyGUKkbYALdFlh8YIIh6Qbg0gTOztykAHjBYl1sF8MCK9iIuRQFXS5yfazyIFv6GB1W1ipy2mmEYscHV+E5L7DcV3QZAYHMet8XHK98orBT6lCiUMzFizuH1afhiU2MsLg/pbmCzv+gwdxvngxNt7yonV3srsxO/zCK2GKyJzR/c7qWqFemErlPJGK8JPuXOxDC+hX3rnevtnmxmykFdbQ2vBYg== 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=zx4DOC+jf7b1eKY9QSY14wZNgJp8AYoJbRSNmNPapgI=; b=YNUxOFZq8YDtJznuIQcvZg28l1QxR8FNJrszyvUIK53wDpDQvjbNXJVTy3LXDweBzG9B0V0n7srf0rI4yqHO4mbfeG8TgqyllW09dXKOoBshEWXR6+M9Rb4LxzTC8PiPqCrW1/DVlKj4QDB+zkhpG8dZHXf50ehfxffLd+rG/xxtEuo/M8WindRlLryM6GzMgDNn6IhNwc180xFe2AANGyVeG3l3UhOhBVnv4Yk7AS0JBMZyRT46P94bnLnZq6D5BhGF90gCGG1LlML+mqrhkZQiwlz9VnkuN8jCFO4PItxBXkG4u1CjTOkRufTw0whhU8Xu4GQm2HTHvXepWMUKWw== 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=zx4DOC+jf7b1eKY9QSY14wZNgJp8AYoJbRSNmNPapgI=; b=E4lwwPMJ+mfGkM5rPsFPw2DtRlw+RU6mpLtwmiF7bMOuTE00o/nf56Q/74eW6JDBZHMc3QwDv3Xtub10IGaq5WvFLJa72S/VB2rMaVRTM1rFOTnFgT6zd0Vvchr2mY3eFtNC04iHSpC0nwaAu47G3ty5Qrtv+tpVt7SFQyMSf0P+BsRGHPIVRxCkhMTIR56dVJHMo/OKPu8RYnqNbCrQyrDQXlW0Dbcn9Y1iIvnR6MDoEy2aiXLlT9+n7B8glMMmTRoCUipS36+EeznNFPH4vNJR3uWOdqJTcf0JalNp/CrEHTMkwwFEEoDgMGBIUUPridfYfQDlYKOKSXygTEsBkg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:40 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:40 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 25/30] gpu: nova-core: Hopper/Blackwell: larger WPR2 (GSP) heap Date: Fri, 30 Jan 2026 16:55:59 -0800 Message-ID: <20260131005604.454172-26-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY3PR04CA0008.namprd04.prod.outlook.com (2603:10b6:a03:217::13) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 0bd25e2c-3a36-4ce9-7982-08de6063981d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?xdv+pzTnu3kUtK78SioRmta9tYehu+OgKkUDyn4SkOBpHkLIWXhcUzpsJwvS?= =?us-ascii?Q?zHTDyorb8t3jhGWy3nS0+4zaA5q8XCCbG6a1PGnORlS+oteEzx+2/c5Xns6C?= =?us-ascii?Q?1cqoDL/n7D40Rb3c1eAt3U0qt69RX/03g2CLy4kxniNyk/guPOCI6SJ4xfo9?= =?us-ascii?Q?UZsKDaEJXqDoRFgu9I5M4ZLhM0pAh8tHOSZi0P6Lh5ma4uCjgGwc+2rNvzzg?= =?us-ascii?Q?jFK3zqZpCpLgrh5xbrSx7Ym0jnWTe4x6LnGicUnZ0AtdGIU2v9MCdbxgAa4M?= =?us-ascii?Q?xQb2BJgAOj7BxydWTKjqx/DNs1XXMGUS9lRr2FkCwR1JRaAva66Zxal9RSrD?= =?us-ascii?Q?G4U5bURXJ+uc3wH7HQWuKYG0JAYJ+/bpJ3RUlRAD/dDCFKCRECrR247nhVDi?= =?us-ascii?Q?DDT744GQ6QGQcrrbIudpbp+bh/V4M3+cuf6RRSwxWdOQTyuBnbbOdKsL22YI?= =?us-ascii?Q?K+Gh2RR004akMKLZZ/Zomho6xEpnDiZLFU0cBtYw6tWE69pegwZzdy23v7B4?= =?us-ascii?Q?G123kQndmaf8+gafa6mEt4mSOd02ddbg4uB6owPsn3G6QUBgOVpTi/T4CR6b?= =?us-ascii?Q?wcTfH36tG3RrdH0v+1ailNgVT+D6m2Zf/wxt538nv3TWK9UswDb9u2IjfxUg?= =?us-ascii?Q?2zY8Lm/4LVHHt/ru+kPYJGKYgCM11V1leoYGbNXra+7477dQ0csnpLXbEXNf?= =?us-ascii?Q?YX/F4fCCBb/8YhHPzAGUwlyArlw23AmsOY4euZ+97l+liwSQ2eVqwcChROOy?= =?us-ascii?Q?uggPAd4cNEAr4+KR5ETNCcILvbEFVRnf54sfTbAtA3+7yXUjh85/4LkX9fZ3?= =?us-ascii?Q?IfEjdaejYpHgAee+Gmr142FHZJBEnwVtz7xpsfoWPHIwV+6Q1M2dg+MdhFSp?= =?us-ascii?Q?Om4evSYvC+nXalgJDrYkt19YOSwVcFNq1lr7t6BAe4JvY12PTi+0vIb+AQ0l?= =?us-ascii?Q?5P6k8c9UqnGJODT0BBeLvGJp5+s3sQ0cc0OrrpXLkRQfzb5bhd8m388uHtqQ?= =?us-ascii?Q?oL0VX74nqY8Hvps/E7AaCIR0Mt2ysBpy+pVUZhGQPJMWXosigdllvPTuKSVl?= =?us-ascii?Q?PB9bLJotxhdOFQpGFWPjxHHYhWSJ2EzGgeySRVGAKEG1oHhbcZz47mdJGjBZ?= =?us-ascii?Q?hXGmLoy8tauy46RTLtziSc9MMg/aOi/U6xm1T6xikxu0lh7AACSFoE55ngt5?= =?us-ascii?Q?Ih1Ntjy/RGVbqye7WHjjGoH6QV0oSSttoHwbRx5hPW0ajLHqFzg6byYzi/E8?= =?us-ascii?Q?oGEPMbE3c8KBFwiqa4euLbbZjJ/5Jnr+sp5yDt/UfHVxa2lMmEm/gA8V+hlO?= =?us-ascii?Q?J6pg9swrXJqEiqxL3zUaO2RU//7JwPHZeMynnB8Gu8iSmnkYe38RjSBBQoMf?= =?us-ascii?Q?+cz9y87IPHUUeYlkxGaPLzYCFwvEfsUujW9gKEE3JIAOuCDxyER35zQAeHRt?= =?us-ascii?Q?Bt6rYaLXfKc5uFL/OX/TplMwgyK50R9CkVOtvrf2WsTcCC9KXGp6YkQVcIpH?= =?us-ascii?Q?9E0xu/4bFNCKfA6s1m9vPBf5Ua6/ZE752TV+q1ZXOvsPHhVzKTQJjtWxkLow?= =?us-ascii?Q?u28eXKnMxN8Hu+vOLPw=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?86gKX2cSuStBKgTpJNTmlGY3fu19VEv3ALdfZWQdXFEfj5UpuqtY5r7DCEgv?= =?us-ascii?Q?QU7T2+RuyXnedEx9x4TzSA03FGrNMQRrQ8BzWX42F2WtzhlN0LJgz6RGMjTw?= =?us-ascii?Q?gxe2+HLYZZa2r3qjwlIx6WcYLuzDpyGePWKQLQaKiIVkYql52AEH+zNwQknw?= =?us-ascii?Q?w1NUg4WJUUftUKsXPHUQyUbbsMYjdZS4genWPv1Wtfd9voHqlQh6ZK/U3RbL?= =?us-ascii?Q?baIAGGtkX73/vdRlwSrDg5oLizDw/sU8UA0HiSKrXmzMqjnBlPxATLhERNRp?= =?us-ascii?Q?4KK1ZDZNe3HOHlXrwya2+dF+erjVlTYAnL6T9S7a5fRq+YmBVTV6IEvtECc9?= =?us-ascii?Q?LOB3zR6+8nAmhiV+J/wUGVkZtuWaAJRKiXxoiZ7lZC/JK9Z46UFfczmgLgZf?= =?us-ascii?Q?4x6Va5HYrhjIT1RIRFc9rkoqZtJTJAa1bzSVMQS9VhHZlHd2yYOgY6MFDOI0?= =?us-ascii?Q?ds1EjPfpsByZdjHwTKzx7rRNRpNs9pGdxliEYSpI133zrIZxkImaaq9aK1w7?= =?us-ascii?Q?CiCncIJfQHAYjxcQMfCNX9qIxvNjkzd9hcmJJZin8rvrSc/T0bshg5xlblx3?= =?us-ascii?Q?bIcRB3GAJ3sCS6Q1ywQFbg2bXkbtZu3OEz0lMwIcjtkuWzZ4MnxZXFoqfmyv?= =?us-ascii?Q?yOJuxRh2Q5IpzAWQl6or1d0wj7sF22MqXBoNrd00l3asxgNfnm72GAELdaxX?= =?us-ascii?Q?Tl+4Pfpph+5LcVrohYBlNdaaO3MId3MzL/LOAIUu3sLVTbrQJnOlusjUNNM3?= =?us-ascii?Q?SVm7RCe0h4iqL5rXRz9EhIiK4ihyshewYlHHg0iobTjc2CYi8gMJPf879Mve?= =?us-ascii?Q?yMehE+p6YtK6BhwCymUVz09tbuQ25GXm/hsuCVEq0wLKYZCB3bgLYCZosici?= =?us-ascii?Q?ddbpT1a3sWx/LJAcP7lr9OYCByj99rj12P+5eua7BNPxwHy1ucNB3wX9ejkS?= =?us-ascii?Q?bBcFhaJAKTSRIEGrgwrWZOqFMqm98Aqk7fB+HbU+aznVIfw3L9U6C8hJXcWA?= =?us-ascii?Q?fl3+iKKYvYNaq67VrFwTNpbrFIOT+I149DDCI7jsOM+1yymjeTlfGwVXYxvH?= =?us-ascii?Q?heGL+dvPdXXKZikVj5fytN6k62j7wgSN6UtCh4CrP7/nJDj/N/UV+cX7ktdd?= =?us-ascii?Q?5qjINPqBS42eoGOLYhOzhAyJ45GqeWibBM8WBqK5X82rzqsKR+aD7Hu/U2xJ?= =?us-ascii?Q?cjIVxrBg4AFUfTIBne9+WZ4QdCB+kd3cR1Rk/zMTf/bOMLHnrJk50idJxsvI?= =?us-ascii?Q?HgM+JHD2m0YRSYtGe6KcP08EJiGjJzgOt0DQNF3zE/gg0esGJ3QYaq9pebCt?= =?us-ascii?Q?AI8SCekz/cRc381pCDAH5cAnj8jp3409jy1sZFgb6+ZoZGFvI++7m3j85R+P?= =?us-ascii?Q?d8HZoF5qGM2UysSaUbNUHosLOeC1nJeZgCol8irGs2y+bBiYLoYGjni3yqk0?= =?us-ascii?Q?31QvKKDfiS4XII20eKtiTKBcbmWD19v84T1Xm1Gr0vcJ3lvbehXTbZzGb67M?= =?us-ascii?Q?m7YizneFrLeou6GW8viX0U4v19CtT94xHmL2pYiJsaUWOaKRT7qyGiCyGTBC?= =?us-ascii?Q?hhfny55rsxSrvyXF+tXnwt+RP7kBqOBaAl1fb7Lt01Pq+aGcs9gX6nAt3+mQ?= =?us-ascii?Q?wj7RRiuesBsPRyN354bqRDg4mnZVxk2FQSZH1S2y4XzD/iCwHTy9RW//dyc8?= =?us-ascii?Q?iEfnGipKJnJnvGy44ANaxgbmAQTIF0RMiLOVA9uBVr+fB+32MfBvo16/QKCm?= =?us-ascii?Q?CkOGOln2KQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0bd25e2c-3a36-4ce9-7982-08de6063981d X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:40.4846 (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: yggLR/PfHT0Ub6Cm8JudTx8CwVePT34/kfG9w9Nmy4P0z9N9bYGnzoiaCnMmVfXmhPvoxx8h9n/lSG3b72zZKQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Hopper, Blackwell and later GPUs require a larger heap for WPR2. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/gsp/fw.rs | 55 ++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index 086153edfa86..0d1d9eecd77c 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -49,21 +49,41 @@ enum GspFwHeapParams {} /// Minimum required alignment for the GSP heap. const GSP_HEAP_ALIGNMENT: Alignment =3D Alignment::new::<{ 1 << 20 }>(); =20 +// These constants override the generated bindings for architecture-specif= ic heap sizing. +// +// 14MB for Hopper/Blackwell+. +const GSP_FW_HEAP_PARAM_BASE_RM_SIZE_GH100: u64 =3D 14 * SZ_1M as u64; +// 142MB client alloc for ~188MB total. +const GSP_FW_HEAP_PARAM_CLIENT_ALLOC_SIZE_GH100: u64 =3D 142 * SZ_1M as u6= 4; +// Blackwell-specific minimum heap size (88 + 12 + 70 =3D 170MB) +const GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS3_BAREMETAL_MIN_MB_BLACKWELL: u64 =3D= 170; + impl GspFwHeapParams { /// Returns the amount of GSP-RM heap memory used during GSP-RM boot a= nd initialization (up to /// and including the first client subdevice allocation). - fn base_rm_size(_chipset: Chipset) -> u64 { - // TODO: this needs to be updated to return the correct value for = Hopper+ once support for - // them is added: - // u64::from(bindings::GSP_FW_HEAP_PARAM_BASE_RM_SIZE_GH100) - u64::from(bindings::GSP_FW_HEAP_PARAM_BASE_RM_SIZE_TU10X) + fn base_rm_size(chipset: Chipset) -> u64 { + if crate::fb::hal::fb_hal(chipset) + .non_wpr_heap_size() + .is_some() + { + GSP_FW_HEAP_PARAM_BASE_RM_SIZE_GH100 + } else { + u64::from(bindings::GSP_FW_HEAP_PARAM_BASE_RM_SIZE_TU10X) + } } =20 /// Returns the amount of heap memory required to support a single cha= nnel allocation. - fn client_alloc_size() -> u64 { - u64::from(bindings::GSP_FW_HEAP_PARAM_CLIENT_ALLOC_SIZE) - .align_up(GSP_HEAP_ALIGNMENT) - .unwrap_or(u64::MAX) + fn client_alloc_size(chipset: Chipset) -> u64 { + if crate::fb::hal::fb_hal(chipset) + .non_wpr_heap_size() + .is_some() + { + GSP_FW_HEAP_PARAM_CLIENT_ALLOC_SIZE_GH100 + } else { + u64::from(bindings::GSP_FW_HEAP_PARAM_CLIENT_ALLOC_SIZE) + } + .align_up(GSP_HEAP_ALIGNMENT) + .unwrap_or(u64::MAX) } =20 /// Returns the amount of memory to reserve for management purposes fo= r a framebuffer of size @@ -106,12 +126,25 @@ impl LibosParams { * num::usize_as_u64(SZ_1M), }; =20 + /// Hopper/Blackwell+ GPUs need a larger minimum heap size than the bi= ndings specify. + /// The r570 bindings set LIBOS3_BAREMETAL_MIN_MB to 88MB, but Hopper/= Blackwell+ actually + /// requires 170MB (88 + 12 + 70). + const LIBOS_BLACKWELL: LibosParams =3D LibosParams { + carveout_size: num::u32_as_u64(bindings::GSP_FW_HEAP_PARAM_OS_SIZE= _LIBOS3_BAREMETAL), + allowed_heap_size: GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS3_BAREMETAL_MIN_= MB_BLACKWELL + * num::usize_as_u64(SZ_1M) + ..num::u32_as_u64(bindings::GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS3_B= AREMETAL_MAX_MB) + * num::usize_as_u64(SZ_1M), + }; + /// Returns the libos parameters corresponding to `chipset`. pub(crate) fn from_chipset(chipset: Chipset) -> &'static LibosParams { if chipset < Chipset::GA102 { &Self::LIBOS2 - } else { + } else if chipset < Chipset::GH100 { &Self::LIBOS3 + } else { + &Self::LIBOS_BLACKWELL } } =20 @@ -124,7 +157,7 @@ pub(crate) fn wpr_heap_size(&self, chipset: Chipset, fb= _size: u64) -> u64 { // RM boot working memory, .saturating_add(GspFwHeapParams::base_rm_size(chipset)) // One RM client, - .saturating_add(GspFwHeapParams::client_alloc_size()) + .saturating_add(GspFwHeapParams::client_alloc_size(chipset)) // Overhead for memory management. .saturating_add(GspFwHeapParams::management_overhead(fb_size)) // Clamp to the supported heap sizes. --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010057.outbound.protection.outlook.com [52.101.61.57]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 35ED531A81A; Sat, 31 Jan 2026 00:56:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.57 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821014; cv=fail; b=S+KrhUCfw+3IRa1B0SNij8lE5ZRpi0UkTr99ZIV/EQfLNvOSx/zpHobU418mARAwSpUm8wH09Ttgz7jLcbRZtgQhMbceB6dHBPW+8tCaiAXtA4ubJ3d2EggD3n8LAnf+7fHs0jnVf/8YBkajNcmEb3/yy9WZKZjfdXz2UeTLjOI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821014; c=relaxed/simple; bh=wqHxBoSz2djmFgpGc5Kwzu0VJV93D3RYKa4thLE+Bp8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=WCR359wCYz94Ru42hO/+t0DImfp0PrAjssl1zu7zL+eWBHI/ikRXCm2fKUklT87PbuqzBCa2MnoUptaKTqoZQFJDC5plRUjl/sjgkbHT1oJPWGtU7q3BDAiyMcqjVilVgD7Ki7od6aOdf1ZR0PDMe0mC4eZ7nbdqdlqJAUlrN/g= 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=rjrJshho; arc=fail smtp.client-ip=52.101.61.57 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="rjrJshho" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GXAG+OQD9RncGS/rXP3ee4/elTu4I2mNwN6oG0wdVdCIC1uxV1f6EaLaDLEhosCCvsJ3Dk+vqevo/TLe3I+3uZa/rQ1ecQ8lo4AlTFIqUVrYtKSvJqT8NxQsrAubkg2FRgToASrkqsB3pVbEdPtQkpB5DCS0V2ruDx4QNaNcF+KEAG0uclxjHHhZsuke0Ct413PWSlgV8l0RHXKWY1ArQzQexnYLSrxwujShPDL8Id60y1SOkuZE8KDF8Ybg0Kg6VT37BnD7soweLnFXRoNifJo5gun7nOLlKzmsHhguNQj8hIYg3b46Uo8NVXfgcfbBAnkcWYB7cLKdCs2o0Np+Nw== 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=q5NyDQG7i8aZ9MnX7bvOYxEfxkfZIdFOorUCjGEguJc=; b=cceaGHpuyELi4cBM3XlUBd1K5cjSmdbzFfJZ6um0SPHJ7GZOWEcyx51mmtOr4REfjFoxe+jwAylqiCWgrrOZYwQjTSzsNDjXdr9LJRCkmF9ICb6HhPbuj8BAByorVpJN+fNMUBgh+crZVMv6C3m0w1w5PK4M9q7+h80jTpofgYJGOUqstyJxQO+s4MIWL4LpRAQ+mjCy34FW6SRmF3Hq3OmDxido8TDUJyAvPrBcE2pdl49OI8w2aG1DuD655pMZUtkogoEtKiZNQhlGWaZzezBxD9mm2e07Gl8jhLTbMroesbR1KCteWNMkOuD1ozuGyIDFH90Wuru2xlD0VjpucA== 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=q5NyDQG7i8aZ9MnX7bvOYxEfxkfZIdFOorUCjGEguJc=; b=rjrJshhoDiCEv8sr+3AGKlP9npCq2dZwN5ZLeGG21uzwMn0u+NmMRYkbl2uaVq2cW4HK3Y/GZlBPnzuyJEgTfbyZFEMAERAjhPQQDKoZhx7+N2OM2YWFSm7uuyNT9eS4ylncRvyQHkVxMYuKaoTO+s6lNq1QoJJwzuWpQ+DezQ5Y/nWx8VnOsoc7UopF8u/ZoY4rOAZBqhaV6Gadm1tw1qgSFJS7C/lU3jh+2Zn4hmAHyn9xe6lbkyxevaR9WTe9G8SNJTQAhLcbL8t243e+Wx3iNrz7W9Ukoxs+v7iF5O57+fA2qhwu6kEgIuahEy4IpcGJPMR9q007N1IWC6U52g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:48 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:48 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 26/30] gpu: nova-core: refactor SEC2 booter loading into run_booter() helper Date: Fri, 30 Jan 2026 16:56:00 -0800 Message-ID: <20260131005604.454172-27-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0384.namprd03.prod.outlook.com (2603:10b6:a03:3a1::29) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 8ca1b1c6-1483-45e7-a55c-08de60639c94 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?HgB84EmhmbQZWFxg9/nRin+ZYH1CxwUPGCDcUUkonvK72dBscqF5VA5rB2t5?= =?us-ascii?Q?YIm/Mv3OGRWJNE8NIP/Tx1seZg/NcjYrnzdNIkD2hITRvi1hgE8FloNM2rtU?= =?us-ascii?Q?pfR7mza+eF2gk4y35gOx9IPw+VjC6MPkpX4w9FMk/4n6of/eKoHxC4OH0oUN?= =?us-ascii?Q?jeTANusb3XjhJNM4A6iIg8+84xOzUVqYEBKtFT/JuqlBV7L2Lhzz3CQ2FUeP?= =?us-ascii?Q?QP0/tEQrr1q6d/OiSSlRBE2r7s6B8kbk3lBjS6rwPQfevRHgppFCckpGeSvw?= =?us-ascii?Q?EEN+xbbQK7gBJzfDD1YoJBHplOO6NSLvTwJx1kmjvx2RjrNZCbu7qlaEo28v?= =?us-ascii?Q?XW6RVfWoIE1DooA3zwtPYA7CbaZ31dq51cIXwJKIwXEJccq4y0A7mLIpyGlE?= =?us-ascii?Q?XMCJKvVYB6V1pJAdpn76IXsdlZlOsx/7n5axzw3zQWv9xjqWAp5DE4dNJ0lW?= =?us-ascii?Q?w6zUbHuCYJ+7jF8XdBC7fvaMGViZNURDXr/PvIGyqE5QSQGS1uIbiTkh3ZZn?= =?us-ascii?Q?LI4IGK8son1FM5oKeAxB7Q3zM6sQcoLqSCZD2v92pZAL8USjY2bFYFZk+wbG?= =?us-ascii?Q?jPbWsmQ7VJ1wcwIwzmb2Z2ybZrlS3elU5mky0mtumH2uTkTUlVdUoUJpfFck?= =?us-ascii?Q?Q9prJILJVAUX2x+JQV9EeX3MEve/w64123+1Cms6DhcAMNYORFCg8/pDM8+l?= =?us-ascii?Q?oaumNd6hOnea3oVAl1UsjMcbBNncO65bFeZLttVDqWmzVjbKKF0Qzj1KSOn+?= =?us-ascii?Q?h6aCteJpuVs7nRMeffHKL9Vmv/PTo+HcnL1RHsLcCSi2vvPEThwaVC2xeuYU?= =?us-ascii?Q?v3IE7s3mGdUPsm9tCaCF+6Bh58Gk8ezclKAymtufW7TzN9jmQIXkeP5RlQ7r?= =?us-ascii?Q?C4cgWIScgCzLZc2uVVaZmJ6UyX7eYH4lTroQ0WZfn6A4W2KR56+V3qc0ZpT+?= =?us-ascii?Q?oMhmTjbH2nezRmbZv+twaltgDINTOnWe9cvmAxSiWseI2KSR1tpsVwFAWLYZ?= =?us-ascii?Q?OMLa/GGqJJam7EJShPZ3J7llOd2Dad2zx72BbmaRNrQUgg1RApJa4/GU776m?= =?us-ascii?Q?XTlshuUmCyB5RDzXLw+29a0NsdBeTlAoCzyzUUA3XxCSrCgH1x7Zef4pu75j?= =?us-ascii?Q?lFwNoOgKQXSsbNuo+tBGXgj3yoA9WmxnJHPybJEyLR988wuBwB+r3J7juGYX?= =?us-ascii?Q?W4oE6u9fzriV7BM5Eh+Qc2Gj1atgYtJfhBYalCAdI4y2DvNvEGjg2rC3eMd4?= =?us-ascii?Q?bZD1MsQEWS6z8UKW9a4kAzx/cMiSdlOYAOjGtlRoUKxj2XcNgvhBD1+wqhk/?= =?us-ascii?Q?LJwlXdU203opuQnFwWsbYvAIq7gObc1BcFLS3dIsN+s7CVtDHWrX1HqcTs8u?= =?us-ascii?Q?AALbi4+Zqry63nrfhczIhsdeNPSqnbKgel8xJenOmE3SRtOM1cqqwlc0EB7y?= =?us-ascii?Q?aZU3DZmAxcV9VMqHge+5VfRMOiwwYIz90hkOk6ZYbfX4OkGR4aFNgl+MJI1q?= =?us-ascii?Q?xwphFLe4nEVrkEi3QxeWbnnb+oKfigof6tkWMPOrTQAtHpX0j0wMQ0WLyOGY?= =?us-ascii?Q?gnaCxPGdJqFGCnvgf6o=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?NxCwCLslYOeaWcTb9rZwjNBXbHU6p63iByiz9LwAoTMq35+CyINykMiJBFPh?= =?us-ascii?Q?Q9vcFct+Xzd/0Uhbym9NuGpre7HfF4iTvOw0VbRihKAoxaScdTVmb+8Hdp1w?= =?us-ascii?Q?nu4fsFTo7SkEf0yCb5erjWNn3M4Al7ogfdpgHbLB5pHHv6KwEZh3jTuZovSV?= =?us-ascii?Q?UXWS69VH9SnhZduNFGW9I3NtpoQ9Ydzlj74OwuawLLclrOjD8EloQgRNqqGM?= =?us-ascii?Q?UzNfNBV0El0O9JAUQHlY29DW/lTLsjby3GaXv9OCWpbk0YbJiSfDOz0d5AJD?= =?us-ascii?Q?NybddeztJXQ/coux3jAQn00aCjtSwoi4tTk0JdbaDTrO4zElZ+Q9HmBFMAW7?= =?us-ascii?Q?Ps7tv+9Rp8DwM/U5Y0vR+qKb2n4f18iKNcop6t78O1YmxV1zueTGS20kkNJ3?= =?us-ascii?Q?aZf9YeNrpK5S1B2+umGWqqapExmjpHWS2q+sSyCnFeac8xb2bzfCwvTtnn8d?= =?us-ascii?Q?X+kCgL8Z/H+iyXpSwx2t3sMM600MOcU27zkiAC1Bo4MDhd6PChiBodf0AXwa?= =?us-ascii?Q?kz5d+Gqq4ZygyhT57JVNu38gSn0CU1pIok0at+M3yF6DaFMJ7vJG8MuWgP2n?= =?us-ascii?Q?Y4ky9hDa9wVt4DQR/LLLB8zLwtx4uYYOIDXRIN+A5FxWxyQyuktWvhuDJlCT?= =?us-ascii?Q?gSGrNmw1WP+X9qYtPoQiejyxWayJfbf3g7w7wgw3K9tC3EoSLEUTem9PEH65?= =?us-ascii?Q?KuZzrVJrEU7vfe12muS639y6Su03YarQgwITTQwNrMtJEQcvHkZcRtsjm9VS?= =?us-ascii?Q?X2TyiXP3Ebf/EQ90zwiqi4awM91S+Uk3IXn5FgVlTWbmiLXvYzlHjg01+KKo?= =?us-ascii?Q?1brsymD4D9sPhasn9kvRa+QLpRHKN136FLE6n17YQoHrTyGSbdJnScSsHkZx?= =?us-ascii?Q?I/DeXgG1AZVaIbDtW512Mww2uW91mUDFtW0Rio0o+u2epdCDSExPdvAhWpq5?= =?us-ascii?Q?w11NYwy7ESpCFWRntVLriZDvrstKrpvykeYgBwsMxfuALwUJ+iKm/vxVOSz+?= =?us-ascii?Q?amKGOuOP2rdc2GGFdhVy0Ldoyr44Bu+SYU+1v/LzluOK1Iae5WAFBRd+cLLN?= =?us-ascii?Q?aJgq9eyZ3FbzGo8lcrKMsJJgbrLcqMEsZBfqx2S4b4Vb2SX6XrLFHW+ee0Lb?= =?us-ascii?Q?Vd9OSVhHwEA5YQdjLVGe5XbfAe8be5V3xcJxva5MMI9JTRzkAf4Pgf64XTCI?= =?us-ascii?Q?YfHcegFYOK1n+B3S3QO/zFmTUfOkyTcAMUmeEppyAtIjBqDX53yrTkcqD9bC?= =?us-ascii?Q?vyloYh9HZAOJV4848vGUUxAKxRNSJXZEAkfpkACaADYL/q0YKTL94sp8BjGx?= =?us-ascii?Q?urY9O/RDwoEMMqsZ5vrdqUDGhp550WWcLG70qC7Y0CCxRnKDo8TJZykOPiAw?= =?us-ascii?Q?+NB6Vo7jnylA5ErH7zZI8nd3M8qdOkqDAD3Hyfb2OXaKlMSdGypgJhRSi5d8?= =?us-ascii?Q?n/wx2pgj7replgSWECD7OFAZ1RWqGKZUZAwJaQq2vnOtsD+0P21GrJe2FGau?= =?us-ascii?Q?G+Grf71Zi+Epk5UQ5ukNf6VyXDWU4eqTsfVqRV8JjHEl2MoVEvMXx1B77Xd3?= =?us-ascii?Q?PPvJmOh2clOf3A0qbrxi+mIpWiePBJa3RRe0+C9s5JChR1Lrm/oB2ErIG7pd?= =?us-ascii?Q?Yny3jZ0Yx1+OieIuMq3ysPlQLlEko8GfDFoOW6SOOK/R7A/P2a/Zt+f+8Vkx?= =?us-ascii?Q?kqSe7i1ldtJSGj6W2H+Rty3glCFgo8RH5Mr7s5vqpFNYZOjE6rtIWfOzBWQ6?= =?us-ascii?Q?vGulCrIo2g=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8ca1b1c6-1483-45e7-a55c-08de60639c94 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:47.9598 (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: 4QkKd9Xc6b4GYyV9FJFkId5ob1a/bynph6Own4QnUNjq7j3NlEaKX3yb5RsfJ/giV+GV9i48PVmuJ990wLz4tw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Extract the SEC2 booter loading sequence into a dedicated helper function. This is a *almost* pure refactoring with no behavior change, done in preparation for adding an alternative FSP boot path. The one slight difference is that an MBOX1 printing typo is fixed: Previous output: NovaCore 0000:e1:00.0: SEC2 MBOX0: 0x0, MBOX10x1 Fixed output: NovaCore 0000:e1:00.0: SEC2 MBOX0: 0x0, MBOX1: 0x1 Cc: Timur Tabi Co-developed-by: Alexandre Courbot Signed-off-by: Alexandre Courbot Signed-off-by: John Hubbard --- drivers/gpu/nova-core/gsp/boot.rs | 67 ++++++++++++++++--------------- 1 file changed, 35 insertions(+), 32 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index 036a42a6afb6..b6aa6dcec28e 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -120,6 +120,40 @@ fn run_fwsec_frts( } } =20 + fn run_booter( + dev: &device::Device, + bar: &Bar0, + chipset: Chipset, + sec2_falcon: &Falcon, + wpr_meta: &CoherentAllocation, + ) -> Result { + let booter_loader =3D BooterFirmware::new( + dev, + BooterKind::Loader, + chipset, + FIRMWARE_VERSION, + sec2_falcon, + bar, + )?; + + sec2_falcon.reset(bar)?; + sec2_falcon.load(bar, &booter_loader)?; + let wpr_handle =3D wpr_meta.dma_handle(); + let (mbox0, mbox1) =3D sec2_falcon.boot( + bar, + Some(wpr_handle as u32), + Some((wpr_handle >> 32) as u32), + )?; + dev_dbg!(dev, "SEC2 MBOX0: {:#x}, MBOX1: {:#x}\n", mbox0, mbox1); + + if mbox0 !=3D 0 { + dev_err!(dev, "Booter-load failed with error {:#x}\n", mbox0); + return Err(ENODEV); + } + + Ok(()) + } + /// Attempt to boot the GSP. /// /// This is a GPU-dependent and complex procedure that involves loadin= g firmware files from @@ -146,15 +180,6 @@ pub(crate) fn boot( =20 Self::run_fwsec_frts(dev, gsp_falcon, bar, &bios, &fb_layout)?; =20 - let booter_loader =3D BooterFirmware::new( - dev, - BooterKind::Loader, - chipset, - FIRMWARE_VERSION, - sec2_falcon, - bar, - )?; - let wpr_meta =3D CoherentAllocation::::alloc_coherent(dev, 1, GFP= _KERNEL | __GFP_ZERO)?; dma_write!(wpr_meta[0] =3D GspFwWprMeta::new(&gsp_fw, &fb_layout))= ?; @@ -182,29 +207,7 @@ pub(crate) fn boot( "Using SEC2 to load and run the booter_load firmware...\n" ); =20 - sec2_falcon.reset(bar)?; - sec2_falcon.load(bar, &booter_loader)?; - let wpr_handle =3D wpr_meta.dma_handle(); - let (mbox0, mbox1) =3D sec2_falcon.boot( - bar, - Some(wpr_handle as u32), - Some((wpr_handle >> 32) as u32), - )?; - dev_dbg!( - pdev.as_ref(), - "SEC2 MBOX0: {:#x}, MBOX1{:#x}\n", - mbox0, - mbox1 - ); - - if mbox0 !=3D 0 { - dev_err!( - pdev.as_ref(), - "Booter-load failed with error {:#x}\n", - mbox0 - ); - return Err(ENODEV); - } + Self::run_booter(dev, bar, chipset, sec2_falcon, &wpr_meta)?; =20 gsp_falcon.write_os_version(bar, gsp_fw.bootloader.app_version); =20 --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010057.outbound.protection.outlook.com [52.101.61.57]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 327D93542E7; Sat, 31 Jan 2026 00:56:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.57 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821015; cv=fail; b=GWxyEXhz9pAV7+TdR4tPYRGN3uVj9E0CG1IbUFutmsicOGDP1SuN96hG9bbJvVs3eCl3lkm79RFhWIailECttlCQBJAc9clwmH64fCgfNYqUErpEbdcu8MvvIhQL2Pd5iJKefPC0hrgX4sdXBP8yRroQoJc2tHeexd305mhKX/c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821015; c=relaxed/simple; bh=SPDMqE75HHO3FwiBy74MQO+wSDapimGsg/MG4tCGQts=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=FVJ1BzMCJo7VgeTNZFuDvcqPwOIybb+bprqNhGos2r/RHjeqTXFXeTLgVN0YUbBr4OS9lHacaIzBmodR5rt155woqT++0mPd24yN/P/znYKzyqYy3m7lvyv64PhLGM4tC5EuhlvjwlENXlb8IthKJpqaAYjVA8P9PLaYav64Q8A= 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=WQh2osBV; arc=fail smtp.client-ip=52.101.61.57 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="WQh2osBV" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gD2Tli9vkDo6MDMS6DPpl2h4UtuNWfeEzNvjn+tdLbHlBynH0GjmA654RvPhi6bFrpoNxahQKUyxR+U2gHQOHMyETUAz7xNhJ5QsZJaxEye/1qQeQ6pXEhGQaVsbbvaJvZhSkEfopqwntZE8l6Ju50SSttRaSuSptUZyomdkbg9dTut3VTJj38UoFozNcWmSNFHrFsoTz4SOW+shSxA6eoANU1ZwNZP6dUNO5i5w7C2YlslQbV3GaXdF5HbBss8EOjEgYqknUsGM7cci8m+DprKBrnxmtQdQcQi5WWBi9g9+SwmL7DjLImkDDu3I0I5M0zQ7SFqAgpvrFAlw1v5MEA== 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=/JQTK89OC82MEFNC6WQjAwBEagL5B2wQvx1RWTMEH2U=; b=gy5/CI/juAg/C7/hM7T6UaCUfmxE1nr4FJ8nkJss1KrP9O+PmP8bpgWiO6vnWQ/9V26KDhiKk/EFp4oZcBf5idkMTdGT5vkfOBFUd3AZEZH3b1Mzo/pmjid453QxYqKlZCNyYFf6OpQUKUspHR46QJBGU/TvuvydS5LWfUpDnOegxf3ngtpQXY0KAxi2ubmOXNEZcCbc+u+Dp/hdpw61aX1V8XWpgbyP/oRBtR7/jTseapGhp+2kPppc8enlU1/W2L60r+gjpXdhANXwLxTy7rTC1W55D+bK7GXxIwoNYjAUFU08MQABD7Mi9/p/ChIcEbAnUJS9Tllc/XcsxPgN7g== 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=/JQTK89OC82MEFNC6WQjAwBEagL5B2wQvx1RWTMEH2U=; b=WQh2osBVm5XguRgmztsPdZa0/MObVHNpuUzcvIjp4gL1xK/qKsr9Tx3U+jfTxIC+I3NXQZ2QOMuzdslHJxUQhw9l/axS/HyHkMfqf2ZBJIWSsouTYnDWPlj/ToJoB6BeeAenbiE7Yq8nFQ2y5c1BleOQjOKOtAEGBedK5AdY5xj/Vwo/b9ahht6jKZUwU6VUI/F93aRVrN2epLLS3JP3XQHKQdXzuRf+TRlEiDJERh40Koqpj3rMjvyMjcbiYwsBWWJh8NbvAyR7jv/tRsWAQiIk+RRQ/8ryeGpL7lrvDAX6FQrujgoyCoxrK84t3JzVe9FOEuywru8QseT1sYLlHA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:49 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:49 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 27/30] gpu: nova-core: Hopper/Blackwell: add GSP lockdown release polling Date: Fri, 30 Jan 2026 16:56:01 -0800 Message-ID: <20260131005604.454172-28-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY3PR04CA0021.namprd04.prod.outlook.com (2603:10b6:a03:217::26) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 7967071d-9ac5-4e29-395c-08de60639d66 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?d4YbDbZya26a61CesO+0x31HCWLVxcQlyUmIYmmIggYfhH1y2TZ6lXbaVtEX?= =?us-ascii?Q?U2WSryB1WAj9J42fbJoJwYHH6/Y17dx0gmdtUQIlxhxXgAXNWhxIUPtVkdgE?= =?us-ascii?Q?ajxv/fWypD+CasDwTbnAiqi5q9hFxGBMzk3Y4bGSOoHCnEr9S8PB8rg8wr72?= =?us-ascii?Q?ldz8choKtY/OKbKB+EGqYQDk3rInOm3EBbSfWmVsxtqbyaRcfDjJxcXZXwzX?= =?us-ascii?Q?sVNQIaHle4M3z2dpU6I37yMozgfBBBUq4ck3PfXSKxSEat6/P5R0mh9DgcED?= =?us-ascii?Q?E50FXjC0qCyn/biM9A9jyzsBP+RZv0bC67WRLpsKmgzcPoSwWkLekNfkDBaV?= =?us-ascii?Q?vIzAJ60vFsREAMCwppCmrOFdOQ94jl0JB2H9+9EBL+Xw6gwo1cGYa/ZZ+GyN?= =?us-ascii?Q?aKB4V3D9V2tlhvzIMGUy78md2ay0lxX7mpS0uLlPzvfkoJ/IDoM4iLqS60Kg?= =?us-ascii?Q?OL1lGfHm4Jwz1pLC+ULg908Vzj6NKSLti0NaeT/7gJt4B0FxAE+5dXdogaSV?= =?us-ascii?Q?R2j1Qe+H4dR6tCs4DqkaGUJfx0fFNu1Y8U8YyOwoYu1h0XSJ8b+3Asaa+XZh?= =?us-ascii?Q?UbjkJrId9WFYpPAPME4mUna3Cu2UUSgSIB7X+OfV4LBBpXIZV/yzBEbqrmhh?= =?us-ascii?Q?jJujwk+ewpS6Nrb7xiJb5bxntnLwCjrf9+VuOQKkvTCDlJka9fYgO4bztcem?= =?us-ascii?Q?Sbyrwyn0LD6fnkpwORq2B1asYk5WpHAVhPTof8a6l8dXfIrBOZI8kTtud22W?= =?us-ascii?Q?Beaoqzo7XpLATjLEBX7ehyB+mEviS3nhgWh8IhGcRhvp6tgebqJs8raWZYEw?= =?us-ascii?Q?GSoUs/oO0ZZtqSCOw24oc/97aWR0I5+1krdn3WSF3hmqPGvYimn56UTAq9Jn?= =?us-ascii?Q?C94/RyCEo0nWJzQ01Deq1RgmT3mQtOjpMrncKmpCNNBfDVipE+9j/q+5OExZ?= =?us-ascii?Q?lJLbi+dB36SskjBN/AirQRSimFNYgv/7+9glAFopA9O2OYh06j7o+rUK/Sga?= =?us-ascii?Q?BYFOXRrzQnzc95ezJve6dkG9c86zOtqnfC44T0GwJj3ESvNgzVUAbu7G2PKV?= =?us-ascii?Q?2x4g+KHWZxcnBCTfJi1QT6AY1qB/63rfr6S4zh4T8FUvyONHw+M13phxEpBi?= =?us-ascii?Q?QFD5Bm3Vhbd7uUcOsIk0DtV10YGsQC2CkLgPPtCWFkQUIBjjKdJJuNjmS3ud?= =?us-ascii?Q?iDnkhA+OsIQPv7q3Nmg75TginijHHGq12Ek7VZAP05CMRGwlQpjXVqa0f60B?= =?us-ascii?Q?z3Et1yJ2Dk0tJXWEpuHoIpii5rMDKHxWD4q2BtuFZaLpmv2PdfTfb098jn1t?= =?us-ascii?Q?7fFOUNXHX9ENEZSqqMviK1SuiHlGxT9PRTRS3ODX1fIJ1layDYH0akbKwUyt?= =?us-ascii?Q?tJkG0Yn/NnRJD9dw924ePE5ywB8IszcvHDdtY8ZtLSTxb7Cv8uEX/spEhiWs?= =?us-ascii?Q?YYNaMflAsGeAB33YthJghVnO2jWBULaBPVszp1txiInyCGjmcL71ZthCfVsv?= =?us-ascii?Q?epsuSMJGodC8CNIeJHljpix4ikkgOAVOUlZyq5OQXe16K2YFM+Ttw9DUWQTl?= =?us-ascii?Q?9cIRGRy++o83s2ujiGI=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?0nQbaBSIa1DDvJerlHAb+DM9V0tr/3aRZtBI/VkqAoqS4Mi0IAPjI4eJHcoX?= =?us-ascii?Q?hyrzsuIScMMoiLD/QTGcLr0D2cCUHO6cczPFmUHcb/Wl0JcIJPl6rvWYbvu5?= =?us-ascii?Q?vVrdlD/3a6yLe2IHgKBw7hjNnF4pbP7cQV64GYm0o6LeRGuTYUJzejbOrip5?= =?us-ascii?Q?o/9hA4vumeCuu08Skc6udsXreHPaeMCvI/JB8ARtLaWnKiyiDBemKXM3rpaE?= =?us-ascii?Q?UGAEedfG+ysrbWCc/CY2fQ12vvQg8rKUAMrC8UDtkrDLhVPeGu51MD62S4Xe?= =?us-ascii?Q?Pnyo3BjpVKuji6FFckSBBlR5T4puXN1XcXQtJ3k6/bSiJJMH+wN7QOw8GqO/?= =?us-ascii?Q?CaIGpSH5N5fEplv0yDvAMsdGTqtWM+wNrvI+FYBuFOHZYCsqzVABI3BbSUVn?= =?us-ascii?Q?7+dSWvqzQSF16BeiFZ0GdAnYAe2zo9K1+sCJ3K9RPLTOOVZEvr2iRMj/Bxky?= =?us-ascii?Q?OBDzG5GKfUtsojvZRA/sUQboIflV0IsP3AJOXRBq1VJg4JruJC84oVoUfBb6?= =?us-ascii?Q?OFeT3RUUim7CF4v6+ktXQGfzpGkUGyF8+GZARypVOEpxkzgWMNrDB6bR6ra7?= =?us-ascii?Q?g4Ha6d9ObMC61j4tvEM4HkbT+JF/c6tAOTe6X8jxSztLfQUb1OtPhpG2TEOP?= =?us-ascii?Q?ZbmLViiSbljTafVrakIB9NHmET87KGIEk7ffaPyiK0BmFCAESo8pvruCdO1J?= =?us-ascii?Q?5r0IV7+4kOoIRp9kY4YBa0pAdusxAvACfkyIzWNxWvaeV9fOM2YgO1zUcbBe?= =?us-ascii?Q?JE07g3PNMJNi3A6SGQN1i/zDc7fy10199YTTZYCEpgab1pvLmmpXCUA3fHZL?= =?us-ascii?Q?XxNidWtakclMXvUzUMFnZKt3tz5zdhhYGryApIF7wTPXJqSpTDCoeZk/4kSD?= =?us-ascii?Q?agi8P1loyrJkzlelXrMd8YIb+IItRzPdIDekAQR3bpjUQZ0DBtiPnzMTFphZ?= =?us-ascii?Q?XtCADe0lrdbL2NrxhPd9LS7N/j4wUb1CgnwaTk9FBLOEnHkqYX1j5inAT8MJ?= =?us-ascii?Q?pCWvhjE7L7dpYwHbm2V4qydOaFFfy/z5kdK1n701Vx0ChLhpApt/U8jJugR0?= =?us-ascii?Q?/zLr4SQLPDkevid4uBxjeQIMP19o4aT5tra+QhEoFMiRuwmuUBkvmPOf16sZ?= =?us-ascii?Q?vitAhAZ2KUXDsxQJgqz3yVjOdL4N9Exc5U9ojBg6ukVwwph4DuvO27APv7SR?= =?us-ascii?Q?8CmTXv2XfYG1ukkA+EiYr6xQ/SP3IS0VPxTewLSEPOu+D9JGEu/CNQ25FWKh?= =?us-ascii?Q?CmXhicaIIS4hqb0wy7iyOnAIRdjNKcI9s0WvKaTErXdfVv0bnQ4ONBVraZj8?= =?us-ascii?Q?aXgi+ro4Xuy3mPR0DZjemyr5eYFCWp8q8ZQ7ZXJWRjmVYq7BfDrbhpyOblRe?= =?us-ascii?Q?3+mfjnpDOMrhSnR39Wdlbs5iEn6CjsyVxI64b45z6H8OdOpkkSEdbT5hDmzj?= =?us-ascii?Q?/NIrMu1Yzfeytd5tt1bJ5+ZYOcIeqPKuf720yI6ru9l+h1fqKf7vrlCFIYZl?= =?us-ascii?Q?5KNoPY/TarF9d++LLJmQzIlzKEzvESfKan3SvBUpXFybMec8jpu/YrRgmgfW?= =?us-ascii?Q?fW/z11mmYLcbUIVNPYGsdUQh3msYDcGpzZI+BDfSWEYaEthjD3gJsHznnscN?= =?us-ascii?Q?I4J0PD2ER/aeBBJHhAozP4ZAdFdr36AgoBVUfb7OrVhzt08q4Z814hwcAZCZ?= =?us-ascii?Q?tPLJkzHHBLyH/ttu1gE9n/EOQEGUg3eIskB+ABI8+atCRTGHxKrtJOQyBEA3?= =?us-ascii?Q?g20nH7YTwA=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7967071d-9ac5-4e29-395c-08de60639d66 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:49.3548 (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: CgNgorgcyO3rBJ4TkdyWKCyFf6Ibg81XDRe+KHR+p5tVv1Vz88+WCCUXoPwSBMCh+dwn0jFcmyrg4N6t45jfpA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" On Hopper and Blackwell, FSP boots GSP with hardware lockdown enabled. After FSP Chain of Trust completes, the driver must poll for lockdown release before proceeding with GSP initialization. Add the register bit and helper functions needed for this polling. Cc: Gary Guo Cc: Timur Tabi Signed-off-by: John Hubbard --- drivers/gpu/nova-core/gsp/boot.rs | 88 ++++++++++++++++++++++++++++++- drivers/gpu/nova-core/regs.rs | 1 + 2 files changed, 88 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index b6aa6dcec28e..178e319d48e1 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -15,7 +15,8 @@ falcon::{ gsp::Gsp, sec2::Sec2, - Falcon, // + Falcon, + FalconEngine, // }, fb::FbLayout, firmware::{ @@ -154,6 +155,91 @@ fn run_booter( Ok(()) } =20 + /// Check if GSP lockdown has been released after FSP Chain of Trust + fn gsp_lockdown_released( + dev: &device::Device, + gsp_falcon: &Falcon, + bar: &Bar0, + fmc_boot_params_addr: u64, + mbox0: &mut u32, + ) -> bool { + // Read GSP falcon mailbox0 + *mbox0 =3D gsp_falcon.read_mailbox0(bar); + + // Check 1: If mbox0 has 0xbadf4100 pattern, GSP is still locked d= own + if *mbox0 !=3D 0 && (*mbox0 & 0xffffff00) =3D=3D 0xbadf4100 { + return false; + } + + // Check 2: If mbox0 has a value, check if it's an error + if *mbox0 !=3D 0 { + let mbox1 =3D gsp_falcon.read_mailbox1(bar); + + let combined_addr =3D (u64::from(mbox1) << 32) | u64::from(*mb= ox0); + if combined_addr !=3D fmc_boot_params_addr { + // Address doesn't match - GSP wrote an error code + // Return TRUE (lockdown released) with error + dev_dbg!( + dev, + "GSP lockdown error: mbox0=3D{:#x}, combined_addr=3D{:= #x}, expected=3D{:#x}\n", + *mbox0, + combined_addr, + fmc_boot_params_addr + ); + return true; + } + } + + // Check 3: Verify HWCFG2 RISCV_BR_PRIV_LOCKDOWN bit is clear + let hwcfg2 =3D regs::NV_PFALCON_FALCON_HWCFG2::read(bar, &crate::f= alcon::gsp::Gsp::ID); + !hwcfg2.riscv_br_priv_lockdown() + } + + /// Wait for GSP lockdown to be released after FSP Chain of Trust + #[expect(dead_code)] + fn wait_for_gsp_lockdown_release( + dev: &device::Device, + bar: &Bar0, + gsp_falcon: &Falcon, + fmc_boot_params_addr: u64, + ) -> Result { + dev_dbg!(dev, "Waiting for GSP lockdown release\n"); + + let mut mbox0: u32 =3D 0; + + let (_, mbox0) =3D read_poll_timeout( + || { + let released =3D Self::gsp_lockdown_released( + dev, + gsp_falcon, + bar, + fmc_boot_params_addr, + &mut mbox0, + ); + + Ok((released, mbox0)) + }, + |(released, _)| *released, + Delta::ZERO, + Delta::from_millis(4000), + ) + .inspect_err(|_| { + dev_err!(dev, "GSP lockdown release timeout\n"); + })?; + + // Check mbox0 for error after wait completion + if mbox0 !=3D 0 { + dev_err!(dev, "GSP-FMC boot failed (mbox: {:#x})\n", mbox0); + return Err(EIO); + } + + dev_dbg!( + dev, + "GSP hardware lockdown fully released, proceeding with initial= ization\n" + ); + Ok(mbox0) + } + /// Attempt to boot the GSP. /// /// This is a GPU-dependent and complex procedure that involves loadin= g firmware files from diff --git a/drivers/gpu/nova-core/regs.rs b/drivers/gpu/nova-core/regs.rs index cfd9d6f0de07..fc325b90feb0 100644 --- a/drivers/gpu/nova-core/regs.rs +++ b/drivers/gpu/nova-core/regs.rs @@ -284,6 +284,7 @@ pub(crate) fn vga_workspace_addr(self) -> Option { register!(NV_PFALCON_FALCON_HWCFG2 @ PFalconBase[0x000000f4] { 10:10 riscv as bool; 12:12 mem_scrubbing as bool, "Set to 0 after memory scrubbing is com= pleted"; + 13:13 riscv_br_priv_lockdown as bool, "RISC-V branch privilege lockd= own bit"; 31:31 reset_ready as bool, "Signal indicating that reset is complete= d (GA102+)"; }); =20 --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010057.outbound.protection.outlook.com [52.101.61.57]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EA3583557F4; Sat, 31 Jan 2026 00:56:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.57 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821017; cv=fail; b=H5Yr9Y2jC+PWA9ONHhyseRYYAwyhldnBJh8tyKDpvRsZZoafqJvKBIQD1A+vXu4rjnP7yYAqcXlxdXWrWAcbvPSjco1O0uzgL9QWlb5rgkuqlsVPDNEzfLFCgHWf82RAdQ1UUFkMNFr8G5oxLGgJ6xLybUnsCMLOUpUIz7ge1Mk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821017; c=relaxed/simple; bh=ce7BzVFCeEbvLLxanRzUF0NYNR9HK/5wdP6JDtCOaXc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Fm3ubHqrzvtnMXLAU9z/9tLtfLgOAZ8Px7RVXwmAgFLZ0M+1FpTQLbYUC+kwjTWTQicypgn6LAxGag5EBwjbgS9WICQRDhfpGsZeragEJ9y/JTvKWTyEZmRmT7SrlR7z/0HiJGSvRf99BW2uy7pyJbuqonqRM0whcoeE372/i8s= 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=Ci1mhJFb; arc=fail smtp.client-ip=52.101.61.57 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Ci1mhJFb" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kAGMiw59I2bCwRJTMMAxhTUpD/cDVYgIJMsO8/Oud5LPoh1VKRAyc6gD+m09yXJGADURhTsNju4U2umlHN3JwN6N8UJCl1EA7R6Oo5XUZCk5mEu19w0wTczfWD2REqzYSkj6tL2N796WSIEIY/0S9UDe8LLo+H6XMCIfTVy7SiZTWOuWVPZbp6eD4uAFXKTIdGasRkBmvThN3yKfQDVj5juA7DZRa1YkQznKAYdydz1BDEzkEadGI/OwPx7He3TAVDXfCyL4LWe/jTdX+GaqCodQ4zd62Z/PaUb6kUdUe+6AXQo6B9q1etzgsm0rSOb5G8m8dTcGLAPnwrwR737ZFw== 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=X7Ntmds9TwQx2LjWjp1v8ZXnkdqRkjYK6OtnQd+0kuo=; b=bDSF1R4n35mzHkNNECSWzrvb+CM29VamEby1CQrGwxqXy9+T9lzhov0bP2ECRGVVQcy3zA1YG6JT6M5FHHvZAKCtgWqpe7AKmfxuNPr5L0lZFliKHb+HK8pRn+sN+4FC0Ro424v7f+CplUW4gl1Eh5BaJuhEyl4UDr51zTEvowaFytpR1EvmuOFvLdS9sVACms1f2EBD3T6l6DU0WjRJt/0KQeQsDMFUAiT+p/VN4Y1kY/Jq8weKulGKyCWWFbolNYEJQW4q6rNX+Vvx+sD6/AlW4LFo1CWPUITpZt9YYiV7pn4PaFl//IaZsjY+s5NDSoVpx5H8P+fVruL1CtPHvw== 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=X7Ntmds9TwQx2LjWjp1v8ZXnkdqRkjYK6OtnQd+0kuo=; b=Ci1mhJFbGub+F4nH2YV1ZIgSEaCOZT+aWcU6WAFA/9JbChl2WJ9c/C5yHc5jxvfcE+WGmGBKZzle5ZKWoq0d/QjpR4aEvNIbI393AJdDfDiaK1FyhVcDu9GjJCDSjPL01KkjI20nrkKhOQYsCJlNHUJUDValZhpzpEiuJe/c/fIzbt+km9UVmSPVl3VtPphP0qhrKfzK0WZdJE8oHli1cm6yjpGKvv4asjPRk8CjkxHQJ4rjEanK7b/D288Sg0qp3+hF/Ls9Kz8V3JmbnOM31gT2UOSi3Y4K+n9ykwzhKJSb8EvvxVpH/fkwQjW3kuu+3Dso7borMIjuishpDzqtxg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:50 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:50 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 28/30] gpu: nova-core: Hopper/Blackwell: add FSP Chain of Trust boot path Date: Fri, 30 Jan 2026 16:56:02 -0800 Message-ID: <20260131005604.454172-29-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR05CA0201.namprd05.prod.outlook.com (2603:10b6:a03:330::26) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 79f28a00-7502-462e-4ce6-08de60639e15 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?KC0ijbdT5C8d3zDL9MTL58FJ+LWpA+VZTpeOsxKbrFdXEBVrQAT45zjjJtGX?= =?us-ascii?Q?PfijVaDkn28dhGXuxSfKWZtb822NgAwGdSXyxGdywb3SYx8eFvO3o459VGGz?= =?us-ascii?Q?E5oIdrC7AzgSbl6IqtbKd02U/K854vc6cAQ7DZSbkxnoyjrnAJpLTagbxngT?= =?us-ascii?Q?2q7U9nw2mn9ociftubcEwtcDFojoeYOaXWJxxCOCTx2AVIOv7Zm3fIZomVZr?= =?us-ascii?Q?Qf3VxgcQ5ocic6Lu59AlOMOWp/1GEZsGTz9KVj92qIcVhaHouPSo44CSZ2VZ?= =?us-ascii?Q?LSQ2tInrI7WKVeTWTgcFGqIk3MWbdLMGvTwfm1R73svl45H7Bs7gY5JHmRMG?= =?us-ascii?Q?+eGMyPHqss4sv0/sS0Ks+c60DyQMXBG+EfEyBCb8UI5OPwcQ7inHfrkGwUGM?= =?us-ascii?Q?C5oMTigtlfxRsixyOlgLiTJWww4g/i3uZqbJ6Cq+VN7GNZv6Hs6kwfslnhKX?= =?us-ascii?Q?gLcFkigJrnQcBWrSW7N2sWFlRoDlf00C/AKEepbK9jOiH+QDirC+kyJU/mpo?= =?us-ascii?Q?jKVHWn4w5dqAi8QmRyF6VSGOwZ5I/MASugqUm0crVrJ+YhauTfZZ/gLZ04VZ?= =?us-ascii?Q?p1VVbEds+6gNQaTuBUufkBbWFmFdnnyyy0pdRNiO8hExAIJCUg0s4xKzNxzy?= =?us-ascii?Q?s9LIMQxgebuBwfBM7EXMFOhclaNEVPlZGO/8Qznn0HSDOySLmk/rHfMj0Xtb?= =?us-ascii?Q?8fJ1k9JadeWJQhTzG6HCH9qdertgVuua7jmcmHXm5t/+ZD9M1Y/Nl4+uUtEP?= =?us-ascii?Q?/ujqysEU1kVoHQ30Jmnwevn+46LYanfvd2TySVc09FKBC4Cd6yeTXnbBvWl+?= =?us-ascii?Q?Id4nIrbdkZeF23JWKIKvF3nUD0QNb4ZvTRdF0YCvGkTAn/COBe7IBau0Jcks?= =?us-ascii?Q?qAMbi2gFcuwoh3euuyFNN6xf4/th/P4RfDj1gmKpwj59voBJFEIUs21dxPWw?= =?us-ascii?Q?ryYk8lIaXTsjb9FEKHD8Pb7U56FPOWQfVYPex2dn9P9chrpMRfSlff43C+GT?= =?us-ascii?Q?ehPsI//Usrklj2s1tAYa0VepcNW0fszs/hf1LFAbhbnbhhDIDxR2pX/pUETG?= =?us-ascii?Q?kQfuharpD0jNfZSOfLPr8EGq90YVjYhZ9GE7CvGSRAVqVeLDq6HRfEdIu9bT?= =?us-ascii?Q?n9w4Tt9vWkCwPuQmYqa0JPbjytTlh0yQKWAmT/2lUv10lqAvNDftvfIj78SC?= =?us-ascii?Q?YZ+1rnbtjTq1UzOIS+37e7dJyCUmF/ClwCPGIY+/gWUxz2KOHCCPZJAYLLXy?= =?us-ascii?Q?ktWmeQHG44j3sP+39ZHPhBbX2Yh3EqiVHUfa29F1k9uitWY6skX2fE7rjrsO?= =?us-ascii?Q?WxtPaW2TN2864/tTE2MW/+UtXlagCkdM9zAj35RXDlcbuagbH+/l5ZZ7CPdM?= =?us-ascii?Q?uikzFEQJt3xbD4b4Nim/3Q677H/r8C+l6ZNhVJgEzIQS7v3tXr9Mw4NjZVZN?= =?us-ascii?Q?iz3G0jINgYyHikJEoPHKb6f3p4+KRxdmUuKptjAiUtykjLWYxTw4YC6gXgfF?= =?us-ascii?Q?JbBCasONH/V+AAcOcccihx06gNkwdTQP7pjqhzm5Dxenhw7lbYAGGn2rPOWb?= =?us-ascii?Q?tyfi3Y/FW0BHqh3c2HE=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Y60iJFXWWe2S7TxCVa5YyIt5/O03kFzCJf/tjJZ4rLe4YTBkZVoZMpRtGKYN?= =?us-ascii?Q?orHocM9ZtxOkw8kYXLFnpqfMNWNcmCKqKZuFev4hRflD2PW5MNH5QZPbA50E?= =?us-ascii?Q?ZwERjgL1yi4GXPNZT1co3MVnvg+rd+oFQmVvLP7F1q4xOiCS1lw4COAinblv?= =?us-ascii?Q?gjFJ9SlpzuxtfkwVxgEgfQ+SWpTMzTr1+sm8iZzdhoTLF4bTYbcbi6XHZViR?= =?us-ascii?Q?AtgCEaeJm4O6NrkrTwm+Ec4e+HbNa8gC+xD+UHBmCz0E3DKlmWxz1mKJiHtF?= =?us-ascii?Q?H9afvQzFCNQ9p+UTw38iyvCPDdebnStx/XGmPWhx/hrqFzBu+x3pdij13ks+?= =?us-ascii?Q?q9OUHFRYsfcRIdG9LdaPhlmlOvFN93uMNp50CAMwkEnAcQg/Fb0fNZIXKN5T?= =?us-ascii?Q?8W5T3iy8X4byZEGcjFa8ljg45+O5GKvMM9U9WJtqmjveBb/v+/X+GwD+YhVD?= =?us-ascii?Q?SSvE61dt7QVY8WKIy+ZxPa6opkXCOjd8R9l14qIiV8kTkF3gNwCi30ZbOSFl?= =?us-ascii?Q?HHOwRaoQATXmlY5SdTAV5EaZKoYxDT86DrRo3NUs8+wBnRxDaGDzUOYPL2NK?= =?us-ascii?Q?Eu7vAyTggd0ju2A9baCQcZTwK8alum0Sm52wL8ASfht+wyJicLjO8DZdTP/t?= =?us-ascii?Q?AtgfnZjUSW1izvwlMxzK14fM1JDuTrrDVqMLwnpMxgmSfR18ItJJ5NkuW6cj?= =?us-ascii?Q?HOEEaB4JOtRs/n2wXQmP5Pk3AdFmLmsg3W17Vg8r6QcD5GFkNRtF9ZjA+BmX?= =?us-ascii?Q?h/46+rfeurkMyChIYLZzDLA26IgajpRuEjPWdhe3Y0WgKuVbBPVhyzFJnI0+?= =?us-ascii?Q?5Z9qugK+aM8oNzsBA1Ci00C7r4PGbfin6Dc1MWbkvaHCOmTFZWt9jqqUFO3p?= =?us-ascii?Q?WRQrEo78RJM6wWKZYdH/95tHswf0C0/9ogQFIxcChDdHLG7TgNSbFyUKTyOV?= =?us-ascii?Q?3V0jMCHqVgT3GylBYd7rs9vnAtBeko8Pz2FazGyuPxjUCIMCuMHe2ieJoRdS?= =?us-ascii?Q?VEyDVpBFoNp3hBaysTVh9eeFbsJzzllqf8f9NopvQYqeGeR61/b2A9EMFtYm?= =?us-ascii?Q?KMe271WlnhVifPBfoRn5lQYh8K8d/zWQrBe95NNtbYfmTDPCpjFroX/X3fyB?= =?us-ascii?Q?WjyzRlQcLhOsYtyrKI2u8pb79Fe3F/z91iWM3EQObTOBbaVq50PEGTTwVJFr?= =?us-ascii?Q?eEHXNOJ+v2hxjnqqVQFL5NIhp/A9sfk4Ajb2gLu6POmXweR7bh9bDX0Y74JB?= =?us-ascii?Q?hwmeiBA0qKmFlPgGs83tEDxcdLLF9RUe73j/cH6k1V+9v1FfxmnlEMMn1X0B?= =?us-ascii?Q?KuKB8Qe8nNsP/d34L1vdu6cXTt1phEzNt2c0XBbdSbehoTOaKTMmslD74Msx?= =?us-ascii?Q?kuODDm8UxE7KGgqdUs9ebfULvnhDqkQFGmw8OfSPasuTTe4qZZM9DFiymNec?= =?us-ascii?Q?LE4e6i6NkNYa36bJaHk+L6EW6JnSmAoZ8wTsl/dmjdmhQ8Bdre6+ucCUh5uX?= =?us-ascii?Q?+WN0a8eG1+VvoSnwyf2WdWGGSKIjGN4Pfu68+sImrk8aaOLQNORVc4y6MYoI?= =?us-ascii?Q?YYN0ARgnNGAbHlSaCslDJtVjPai1CsnGkhxYs2O9yxKP5P0wM6WwL6hz0FzY?= =?us-ascii?Q?tD/bzYk34/FjTCr8n8ANME3HYQb//nmzZUYfGfSf0G5Qlrt0tFNxh0Ihcx9A?= =?us-ascii?Q?saKhE58rUIp68qvs6/KszI9APOphTzlYJgetZjEsoyrc9/tADDIOadfsaFLL?= =?us-ascii?Q?fxszl1ooRA=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 79f28a00-7502-462e-4ce6-08de60639e15 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:50.7834 (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: Fy3HmAGCzu71c4+0jG+Nlf1thrgW9zkF6oof0VPig9MQOevfaaa0j/JRTKHxLWWY0orv4Op5Ivmt/SeNulLQDQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Add the FSP-based boot path for Hopper and Blackwell GPUs. Unlike Turing/Ampere/Ada which use SEC2 to load the booter firmware, Hopper and Blackwell use FSP (Firmware System Processor) with FMC firmware to establish a Chain of Trust and boot GSP directly. The boot() function now dispatches to either run_booter() (SEC2 path) or run_fsp() (FSP path) based on the GPU architecture. The cmdq commands are moved to after GSP boot, and the GSP sequencer is only run for SEC2-based architectures. Cc: Gary Guo Signed-off-by: John Hubbard --- drivers/gpu/nova-core/fb.rs | 1 - drivers/gpu/nova-core/firmware/fsp.rs | 2 - drivers/gpu/nova-core/fsp.rs | 6 +- drivers/gpu/nova-core/gsp/boot.rs | 158 ++++++++++++++++++++------ 4 files changed, 123 insertions(+), 44 deletions(-) diff --git a/drivers/gpu/nova-core/fb.rs b/drivers/gpu/nova-core/fb.rs index 7c502f15622c..a860f43ec5af 100644 --- a/drivers/gpu/nova-core/fb.rs +++ b/drivers/gpu/nova-core/fb.rs @@ -180,7 +180,6 @@ pub(crate) struct FbLayout { pub(crate) heap: FbRange, pub(crate) vf_partition_count: u8, /// Total reserved size (heap + PMU reserved), aligned to 2MB. - #[expect(unused)] pub(crate) total_reserved_size: u32, } =20 diff --git a/drivers/gpu/nova-core/firmware/fsp.rs b/drivers/gpu/nova-core/= firmware/fsp.rs index edcc173c2fa6..e10954aa146a 100644 --- a/drivers/gpu/nova-core/firmware/fsp.rs +++ b/drivers/gpu/nova-core/firmware/fsp.rs @@ -14,7 +14,6 @@ gpu::Chipset, // }; =20 -#[expect(dead_code)] pub(crate) struct FspFirmware { /// FMC firmware image data (only the .image section) - submitted to h= ardware pub(crate) fmc_image: DmaObject, @@ -23,7 +22,6 @@ pub(crate) struct FspFirmware { } =20 impl FspFirmware { - #[expect(dead_code)] pub(crate) fn new( dev: &device::Device, chipset: Chipset, diff --git a/drivers/gpu/nova-core/fsp.rs b/drivers/gpu/nova-core/fsp.rs index 6a0bc800abb0..c97d298fd6c8 100644 --- a/drivers/gpu/nova-core/fsp.rs +++ b/drivers/gpu/nova-core/fsp.rs @@ -1,8 +1,5 @@ // SPDX-License-Identifier: GPL-2.0 =20 -// TODO: remove this once the code is fully functional -#![expect(dead_code)] - //! FSP (Firmware System Processor) interface for Hopper/Blackwell GPUs. //! //! Hopper/Blackwell use a simplified firmware boot sequence: FMC --> FSP = --> GSP. @@ -11,6 +8,7 @@ =20 use kernel::{ device, + dma::CoherentAllocation, io::poll::read_poll_timeout, prelude::*, ptr::{ @@ -355,8 +353,6 @@ pub(crate) fn create_fmc_boot_params( wpr_meta_size: u32, libos_addr: u64, ) -> Result> { - use kernel::dma::CoherentAllocation; - const GSP_DMA_TARGET_COHERENT_SYSTEM: u32 =3D 1; const GSP_DMA_TARGET_NONCOHERENT_SYSTEM: u32 =3D 2; =20 diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index 178e319d48e1..5284a35dcc2c 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -13,6 +13,7 @@ use crate::{ driver::Bar0, falcon::{ + fsp::Fsp as FspEngine, gsp::Gsp, sec2::Sec2, Falcon, @@ -24,6 +25,7 @@ BooterFirmware, BooterKind, // }, + fsp::FspFirmware, fwsec::{ FwsecCommand, FwsecFirmware, // @@ -31,9 +33,14 @@ gsp::GspFirmware, FIRMWARE_VERSION, // }, - gpu::Chipset, + fsp::Fsp, + gpu::{ + Architecture, + Chipset, // + }, gsp::{ commands, + fw::LibosMemoryRegionInitArgument, sequencer::{ GspSequencer, GspSequencerParams, // @@ -155,6 +162,55 @@ fn run_booter( Ok(()) } =20 + fn run_fsp( + dev: &device::Device, + bar: &Bar0, + chipset: Chipset, + gsp_falcon: &Falcon, + wpr_meta: &CoherentAllocation, + libos: &CoherentAllocation, + fb_layout: &FbLayout, + ) -> Result { + let fsp_falcon =3D Falcon::::new(dev, chipset)?; + + Fsp::wait_secure_boot(dev, bar, chipset.arch())?; + + let fsp_fw =3D FspFirmware::new(dev, chipset, FIRMWARE_VERSION)?; + + // fmc_full is a KVec for CPU-side signature extraction only. + // A separate buffer, fsp_fw.fmc_image, is what gets submitted to = the hardware. + let signatures =3D Fsp::extract_fmc_signatures_static(dev, &fsp_fw= .fmc_full)?; + + // Create FMC boot parameters + let fmc_boot_params =3D Fsp::create_fmc_boot_params( + dev, + wpr_meta.dma_handle(), + core::mem::size_of::() as u32, + libos.dma_handle(), + )?; + + // Execute FSP Chain of Trust + // NOTE: FSP Chain of Trust handles GSP boot internally - we do NO= T reset or boot GSP + Fsp::boot_gsp_fmc_with_signatures( + dev, + bar, + chipset, + &fsp_fw.fmc_image, + &fmc_boot_params, + u64::from(fb_layout.total_reserved_size), + false, // not resuming + &fsp_falcon, + &signatures, + )?; + + // Wait for GSP lockdown to be released + let fmc_boot_params_addr =3D fmc_boot_params.dma_handle(); + let _mbox0 =3D + Self::wait_for_gsp_lockdown_release(dev, bar, gsp_falcon, fmc_= boot_params_addr)?; + + Ok(()) + } + /// Check if GSP lockdown has been released after FSP Chain of Trust fn gsp_lockdown_released( dev: &device::Device, @@ -196,7 +252,6 @@ fn gsp_lockdown_released( } =20 /// Wait for GSP lockdown to be released after FSP Chain of Trust - #[expect(dead_code)] fn wait_for_gsp_lockdown_release( dev: &device::Device, bar: &Bar0, @@ -257,43 +312,63 @@ pub(crate) fn boot( ) -> Result { let dev =3D pdev.as_ref(); =20 - let bios =3D Vbios::new(dev, bar)?; - let gsp_fw =3D KBox::pin_init(GspFirmware::new(dev, chipset, FIRMW= ARE_VERSION), GFP_KERNEL)?; =20 let fb_layout =3D FbLayout::new(chipset, bar, &gsp_fw)?; dev_dbg!(dev, "{:#x?}\n", fb_layout); =20 - Self::run_fwsec_frts(dev, gsp_falcon, bar, &bios, &fb_layout)?; + if matches!( + chipset.arch(), + Architecture::Turing | Architecture::Ampere | Architecture::Ada + ) { + let bios =3D Vbios::new(dev, bar)?; + Self::run_fwsec_frts(dev, gsp_falcon, bar, &bios, &fb_layout)?; + } =20 let wpr_meta =3D CoherentAllocation::::alloc_coherent(dev, 1, GFP= _KERNEL | __GFP_ZERO)?; dma_write!(wpr_meta[0] =3D GspFwWprMeta::new(&gsp_fw, &fb_layout))= ?; =20 - self.cmdq - .send_command(bar, commands::SetSystemInfo::new(pdev))?; - self.cmdq.send_command(bar, commands::SetRegistry::new())?; + // For SEC2-based architectures, reset GSP and boot it before SEC2 + if matches!( + chipset.arch(), + Architecture::Turing | Architecture::Ampere | Architecture::Ada + ) { + gsp_falcon.reset(bar)?; + let libos_handle =3D self.libos.dma_handle(); + let (mbox0, mbox1) =3D gsp_falcon.boot( + bar, + Some(libos_handle as u32), + Some((libos_handle >> 32) as u32), + )?; + dev_dbg!( + pdev.as_ref(), + "GSP MBOX0: {:#x}, MBOX1: {:#x}\n", + mbox0, + mbox1 + ); =20 - gsp_falcon.reset(bar)?; - let libos_handle =3D self.libos.dma_handle(); - let (mbox0, mbox1) =3D gsp_falcon.boot( - bar, - Some(libos_handle as u32), - Some((libos_handle >> 32) as u32), - )?; - dev_dbg!( - pdev.as_ref(), - "GSP MBOX0: {:#x}, MBOX1: {:#x}\n", - mbox0, - mbox1 - ); + dev_dbg!( + pdev.as_ref(), + "Using SEC2 to load and run the booter_load firmware...\n" + ); + } =20 - dev_dbg!( - pdev.as_ref(), - "Using SEC2 to load and run the booter_load firmware...\n" - ); + match chipset.arch() { + Architecture::Turing | Architecture::Ampere | Architecture::Ad= a =3D> { + Self::run_booter(dev, bar, chipset, sec2_falcon, &wpr_meta= )? + } =20 - Self::run_booter(dev, bar, chipset, sec2_falcon, &wpr_meta)?; + Architecture::Hopper | Architecture::Blackwell =3D> Self::run_= fsp( + dev, + bar, + chipset, + gsp_falcon, + &wpr_meta, + &self.libos, + &fb_layout, + )?, + } =20 gsp_falcon.write_os_version(bar, gsp_fw.bootloader.app_version); =20 @@ -311,16 +386,27 @@ pub(crate) fn boot( gsp_falcon.is_riscv_active(bar), ); =20 - // Create and run the GSP sequencer. - let seq_params =3D GspSequencerParams { - bootloader_app_version: gsp_fw.bootloader.app_version, - libos_dma_handle: libos_handle, - gsp_falcon, - sec2_falcon, - dev: pdev.as_ref().into(), - bar, - }; - GspSequencer::run(&mut self.cmdq, seq_params)?; + // Now that GSP is active, send system info and registry + self.cmdq + .send_command(bar, commands::SetSystemInfo::new(pdev))?; + self.cmdq.send_command(bar, commands::SetRegistry::new())?; + + if matches!( + chipset.arch(), + Architecture::Turing | Architecture::Ampere | Architecture::Ada + ) { + let libos_handle =3D self.libos.dma_handle(); + // Create and run the GSP sequencer. + let seq_params =3D GspSequencerParams { + bootloader_app_version: gsp_fw.bootloader.app_version, + libos_dma_handle: libos_handle, + gsp_falcon, + sec2_falcon, + dev: pdev.as_ref().into(), + bar, + }; + GspSequencer::run(&mut self.cmdq, seq_params)?; + } =20 // Wait until GSP is fully initialized. commands::wait_gsp_init_done(&mut self.cmdq)?; --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010057.outbound.protection.outlook.com [52.101.61.57]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DDBA1357712; Sat, 31 Jan 2026 00:56:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.57 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821019; cv=fail; b=JChAyG4wqB8h+XZNBK4F3pvnhDpYBAQhqW0ogthGGcnKkzNJT7Cn+QH3w7axj0nUzC5/PMY9a1rYnaCjVStHRXbJxCuz15litEFpF5Mk6qM0BE6/UtyVdMFmnicKITDuUM3LHRhYnLHp27w3vjYbbbA1zOQmYxuzb3FaxL65mwI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821019; c=relaxed/simple; bh=LHt+ZzVAL2rmBSOVhkAv1phYHMBbb2U3arui3hyOZvc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Lk6xrHcHZppQOYfDaMGyqKEngG2nTkDzN2NH/6v28I1DaW3epXZ3Gub2VmBA/M6htSfpnWTZENo10HZ5uSgxHALZKssLIjPzMyRBYufAG5/9t6TWj8xecudloigmXWYh8yRnXbXVZwP0hVvWVbFLrId/rLJZAgddzDhFRhq/JTM= 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=VT94SX9M; arc=fail smtp.client-ip=52.101.61.57 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="VT94SX9M" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=M29nxgWT9+TbAQzTcZG+6Fe1dEb5jU0gXdhZ9VywZML71VVXxirdz8nYp5DBaEKahfZ/K+HbKce43QaWPynltrCi+OPLcXhX/OjAzNgna1To5V3by/xJlADySbaxeiHv9UFCZjwpwwaZ1cR+0oqZp5xTPeCHFTgLr/kY8qRyQPH12GbZZ0Cjjv9Nqe1OVf48138zdOLGR03EYEMiA6TznnnYd4ZUdxMfsQa7n00xx4nzVtIG2usrN/SRJWi1E/rsi1+Srcw3pK8FgyZFfi2Xk4mn5NgcMf4ocfWL5gJTr1kAGWSq87xGtzWxDuP+HN6A2spS4G6Fjv3nZYc9q+QFHA== 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=BaQASU1P3WqCzrjn1EnNQHyOm2AnOgDq+z29I1jUWfI=; b=VD+AWVOlgrLRrmBjkfvIYvxJAdGX8DEoXWhwLVMzAXShhNQP/eaSu+Oqzl+K13Q05s2AVwFfM9ad18KWZ1AW6fI0hUQh+x12c5OtX6QkqisElbZSazvq3MLTF3jqYqPIN9IIlHmNW71wMJnGNp4Ed19cXreO8YSIszbXrdhcrcJdtbkn13D799ccrdQ4OifGaZH9SUCxBjH/0VK73WnhzwgegeH1w+3FphbXMq0GzUhs4PrTS/MVct8hhJvUatyNUkHKlaYQAuorJ7BvRq0bsG/xWczLZzWkl0jZQYA/nHJ6G95WdiLWWaCUSIVadOYetHrqzDcHAoZByNtWGkSdnA== 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=BaQASU1P3WqCzrjn1EnNQHyOm2AnOgDq+z29I1jUWfI=; b=VT94SX9MIUKOEiyYUC79g6tZMwjySWMQCqRqVD0Er/N9QRSvOOO8hK2OsAnTsks0K7Qj/+UL1A6qSYNNGxr87ZjbfeQTo5QxVF0+WqjegF/xlpWTwRGpy6uGfGppvdxuxcLk7swzLpYsVM1eJ0vU8x7A1+QWZYw4BYcwqc7XQ9Q5l40ALRAFOc6Yd3wZJKwK2QjVh4A9XhQacYTfGPEVMuxBchBH2jqWEdyxIPYTaAFQCXaEvTQJRrYAptf0qyAU0GKM00r7fCMYd7TTYps1scoyBpeAPSKL11qtJtJojq2vlpp3c+CYwTyL4SDKQacSFKI0+KFhK3PgCuvai0nFZA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:52 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:52 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 29/30] gpu: nova-core: Hopper/Blackwell: new location for PCI config mirror Date: Fri, 30 Jan 2026 16:56:03 -0800 Message-ID: <20260131005604.454172-30-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY3PR04CA0008.namprd04.prod.outlook.com (2603:10b6:a03:217::13) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 2199b595-cef2-4072-38e8-08de60639ee3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?HhiP7Qx3FfHR9dXfqQtzBU6MOgJf5dHLUSh6DKxVJYQZtoE6mUY19/YI7d2d?= =?us-ascii?Q?ND+L3+7zL8NMlqpvOgd5GcF4HuTWeo9axIWX0cDtTFGpO8XR9V5d9Uvznf9N?= =?us-ascii?Q?Oh/SykAUPRAX98VkDvfv0Pn75K9kXxNUra5wep9+31jlib9ItUtej4JGGGnR?= =?us-ascii?Q?++BSm1aXAeCHnqe8NYfC8cbJr+TmYX2K35O2RvTQHRMlLrmtSk4qjfJd6wrt?= =?us-ascii?Q?TceB7fZgqjF3shWsi9AgmxKAHl3JDNWSOib1RwUyS/HXe/qFOtolBCO4pN2G?= =?us-ascii?Q?cclSyFUKs+B26KuLh2UoiBdVJbWpuPQ6VxjayDea4J7EMt74JWFz0SD4SH6G?= =?us-ascii?Q?ZPTUl4PSn8bLaowcHA6ZuVYHx5Uo+G8IQlrSMssApo91YRTqQKrovbstGvRd?= =?us-ascii?Q?6x63sH/ZK68Ak6qwKem+hG5sv4FhVsiJ0fbkYlicLF48HF3xs/TlgKuPzXOg?= =?us-ascii?Q?q8pOXTkWZrgLz0YaWEcatz5F1aRPuFUfiKIZf8KyNH0FoW6WVHMeWIf3Jn1l?= =?us-ascii?Q?XnXw/AJ7fQArPR6R6nL9HXcbH74teDqjvTKZxcbwVQ1bosZvPAisXhzY5dtI?= =?us-ascii?Q?AybXlmxS9aQu3zhJkA/NqULWgpAA2Egd5mMCUHfClYk4D2wOQkpXvJ2Q6efv?= =?us-ascii?Q?8gRPh0YkR4ii83ViFkDg9QatZPRLFS3lGfChHdntJUOjIRasbwNKrYV2/0oB?= =?us-ascii?Q?1P1fIqKeGCnmlEjrgdIdKdPWgygG97jiPLf9CUfkUdg0EmV15DZBy0rbjd5v?= =?us-ascii?Q?55hjwsahCLaAmBMSYt5wr36+A+WmWfusH5xIkzp90fWpk5ReMA9ZujMKZOrq?= =?us-ascii?Q?StW+SALsv7Om711m5ZDr6WbKExOCyqdu1RTWTXPSkczSAagH0ez9jTp1a8kR?= =?us-ascii?Q?tnvambTtglBkhkD+Wv3IUfwYQwBJtzYD7pxFFjB+3OLf5oyxKwbd+Wbd4cQ4?= =?us-ascii?Q?Y5kxfElt9idfNr6fUN7PVQh5NT6SoirHhRopuGytqaJ7UaiXObY5W8Fryklv?= =?us-ascii?Q?Dsd1l2hkWYv37Ba487g5X2i+1tI9kLcsU21oAiRwvEf1c+Icg4g4r53CbGfp?= =?us-ascii?Q?Xhmc3iS0Gh9TnddV6Uf2xL5eW6GXe0gLj/8dPZOKvGX4U762fDfZoCoxDmNj?= =?us-ascii?Q?bajsDUd8Pt/rhyEoLWDQlCnc9dOH8fg8DHRt/85HCnGMju6QBB8DQIdxvpif?= =?us-ascii?Q?iVbmVNjzl8zqkf1sV74I0uFqFatNov8TYmGSKGisj0hX+wUou1kJAVhbazba?= =?us-ascii?Q?VVa9Mp5fykbx3QP1kUwAjt651HvWySaahxStWnLd+H4m4XbKZYW3sIc9OkGE?= =?us-ascii?Q?uYFtmy1MLT3pzRbK+sHJJWfBrLIC+rxj4mLvMEjSxfp8Imp4BHjzHxYMzmJN?= =?us-ascii?Q?vxkHv65kphzzfYgB5X2EhAlfAqbKYq/1KEp5kX8BfvWi/+sZttX3oy7PaNZA?= =?us-ascii?Q?mEfnV2YLtni0c3ExsewaLXI18nDKVqY9mxd4nwAxH/NBcood5ytpAze94Zxn?= =?us-ascii?Q?TtM9JTbWaaP8fXEii2jM8ABnVD7S7mELiePvXWfoM8POms9L24xOo3YQH+MQ?= =?us-ascii?Q?Jeu757cVikxGAoOv8tA=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?pNbDF072U3Y4sejZiR6SondR4jPdi+1rRcs1vzLtbrwMLDVKN5cd24WhZijC?= =?us-ascii?Q?xveFAG1OJ5D1ZNXXSWQzIXYApsZkMZIjflgUc3UbHgUwKq3df6yyfP7anYJM?= =?us-ascii?Q?6N3xBWyWbWK5c+CScoFJzMUHEBgRIQSvt2tOIzk6PxHgSLs7j6+L3It1PTE6?= =?us-ascii?Q?LJyYTfA7+6hLQl6qNah/ZnKnj10dh+nbC8eUiwSNKY2/SEbIt5otGC2zznjn?= =?us-ascii?Q?sTRbl9KVSMiep2go6DQ07vU2lgzaYNNtFW+nr5U5SaQFGHPaxBs+mC/zJX77?= =?us-ascii?Q?OzpHWJbPT6yNczMnIbbaRGy7LOPc6JluX91qU6PKLv8TF0XBkqShgAALqw8v?= =?us-ascii?Q?jJ0IfSxIkW7OrFXPwOERBCBmCgtYuBcYgSB4xTiqhSfS9yGf0XEY7e7KH36r?= =?us-ascii?Q?ouoRrm7iDmraqHqKjXbvEr7XRKDNdnFnw5gMFzCke3AJqtkrLo6u29I4OY7u?= =?us-ascii?Q?hDOsO5wo4eqlV8wP0L6dunX92BaPXeFAkN7bc0MMG1JKt0CD+58j+ge3wqHN?= =?us-ascii?Q?spDdPaQMHpmpGpiuZbgdgqANbtDK1WA6A7xSacuXzU99z4DuvPfLjsI71WDF?= =?us-ascii?Q?jW8LYHG9ejv+l/Yu0tgChkjxHPKQwZPU8H3FVdKD4D5lwBf8RnJH3DAL7oK+?= =?us-ascii?Q?Q+iA8rxQxEW4MlgvZblu7KBmXxaEyLZizkZFwgiRvXeOotA5/ZIyUCHZI1Eg?= =?us-ascii?Q?uTkTz17D277yYh/6s2Gd0qih6AaQkCS0/52xsykgG9E3fON/7Q+b+MVwyBH8?= =?us-ascii?Q?evKq+AobhTFddpB2rvUFQY8subj7wm+FHPLEG9werF6hQUtx4w2KoXk1iwp3?= =?us-ascii?Q?FiV/ErHf9zZoy8XNtl0P54NAe2BAKwin/0PHe/QsQSLj3Sfzh6h+tOi/zLqY?= =?us-ascii?Q?JA5cMxKmdQuyt080kKDvc/lyqpEgT37G/vgr7kLAKc7PWfaUrwGRe3GSdyhG?= =?us-ascii?Q?TGboJVELuI96cdm8aJx89PHdnKuxw+pFs3FAU+FMg6p9BtYuGWfNYXQ4QcJM?= =?us-ascii?Q?sn6olwlEiCjIMj70F3rdxyg92DmLgMPeQk2xTJQfQL+fcx7JeA0Lqjip0ovl?= =?us-ascii?Q?ifusjGHhC/zAiGzcxLjxtgfqJR/A5WNuadkBBJvU+hfBpXuqrlVuT4IbleMs?= =?us-ascii?Q?kag06F3ilADgRRfRd4qYHqdIIm8l9//FejXOBSEvSQ3mJELn2LQv2L0r5sew?= =?us-ascii?Q?jjEBipON2MbsnVFVKQZfnW75PqMht9Ri0KMsGe4LAbdyBRSv3idY4qO9agLb?= =?us-ascii?Q?FGy6cyE+UYVxBI27JG6u7ssqL3+IN29Swj91ttZ/Hev9z3QPboEAKvy0ZNHO?= =?us-ascii?Q?8ZhlKbj69z1Ko6gMPSldtZmavP3Fr1ji3JdpjJ5xfqxQGYWN5oOAuNHHMvXx?= =?us-ascii?Q?vytKI5Pa9Ee73xXqFt3l+HZG7qbUb95T1Br/x8a2oTRKjDThTcCwHviSTs/9?= =?us-ascii?Q?HqpKybIhbCSpWPD2NVXzN6UBO9Ld3QltWvz+WpUBy3xOmzKI4Jcpbw7mNsCJ?= =?us-ascii?Q?HUPgLpAcLWu4rBF5DX4/1DWV64zcj9ywLvIsa/qxd4i+Q6SZs5Ds+24t5iWd?= =?us-ascii?Q?vyAkda6082CFvmv2E/0YbpTXYcDVUQKE+xdIrFlgVE2+MnwnCacE0c7csUeT?= =?us-ascii?Q?oSieIgwOrM+fQwK6z8z7FD4GyhLblOy8cguVIFbte2khvB/AbhXIZZZWiPFU?= =?us-ascii?Q?ncVOsiYDHkUGg/xfDCXelXwVtnb4TTKpUocebBsYoXluCucDivOb368uz69g?= =?us-ascii?Q?AaWFdf003A=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2199b595-cef2-4072-38e8-08de60639ee3 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:51.9043 (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: 7OxcEysFY8xZV1rT3ogP+wMZrNZnL8Tio8/d3ND2mlM7iq8tcnPqMh66v9qeeoDKBz72xishB4Ha1qTJ8I/ZUA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Hopper and Blackwell GPUs use a different PCI config mirror base address (0x092000) compared to earlier architectures (0x088000). Pass the chipset through to GspSetSystemInfo::init() so it can select the correct address. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/gsp/boot.rs | 2 +- drivers/gpu/nova-core/gsp/commands.rs | 8 +++++--- drivers/gpu/nova-core/gsp/fw/commands.rs | 18 +++++++++++++++--- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index 5284a35dcc2c..04b6141a9c38 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -388,7 +388,7 @@ pub(crate) fn boot( =20 // Now that GSP is active, send system info and registry self.cmdq - .send_command(bar, commands::SetSystemInfo::new(pdev))?; + .send_command(bar, commands::SetSystemInfo::new(pdev, chipset)= )?; self.cmdq.send_command(bar, commands::SetRegistry::new())?; =20 if matches!( diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/= gsp/commands.rs index c8430a076269..a0ca13afda52 100644 --- a/drivers/gpu/nova-core/gsp/commands.rs +++ b/drivers/gpu/nova-core/gsp/commands.rs @@ -20,6 +20,7 @@ =20 use crate::{ driver::Bar0, + gpu::Chipset, gsp::{ cmdq::{ Cmdq, @@ -37,12 +38,13 @@ /// The `GspSetSystemInfo` command. pub(crate) struct SetSystemInfo<'a> { pdev: &'a pci::Device, + chipset: Chipset, } =20 impl<'a> SetSystemInfo<'a> { /// Creates a new `GspSetSystemInfo` command using the parameters of `= pdev`. - pub(crate) fn new(pdev: &'a pci::Device) -> Self { - Self { pdev } + pub(crate) fn new(pdev: &'a pci::Device, chipset: Chips= et) -> Self { + Self { pdev, chipset } } } =20 @@ -52,7 +54,7 @@ impl<'a> CommandToGsp for SetSystemInfo<'a> { type InitError =3D Error; =20 fn init(&self) -> impl Init { - GspSetSystemInfo::init(self.pdev) + GspSetSystemInfo::init(self.pdev, self.chipset) } } =20 diff --git a/drivers/gpu/nova-core/gsp/fw/commands.rs b/drivers/gpu/nova-co= re/gsp/fw/commands.rs index 470d8edb62ff..fe8f56ba3e80 100644 --- a/drivers/gpu/nova-core/gsp/fw/commands.rs +++ b/drivers/gpu/nova-core/gsp/fw/commands.rs @@ -10,7 +10,13 @@ }, // }; =20 -use crate::gsp::GSP_PAGE_SIZE; +use crate::{ + gpu::{ + Architecture, + Chipset, // + }, + gsp::GSP_PAGE_SIZE, // +}; =20 use super::bindings; =20 @@ -24,7 +30,10 @@ pub(crate) struct GspSetSystemInfo { impl GspSetSystemInfo { /// Returns an in-place initializer for the `GspSetSystemInfo` command. #[allow(non_snake_case)] - pub(crate) fn init<'a>(dev: &'a pci::Device) -> impl In= it + 'a { + pub(crate) fn init<'a>( + dev: &'a pci::Device, + chipset: Chipset, + ) -> impl Init + 'a { type InnerGspSystemInfo =3D bindings::GspSystemInfo; let init_inner =3D try_init!(InnerGspSystemInfo { gpuPhysAddr: dev.resource_start(0)?, @@ -35,7 +44,10 @@ pub(crate) fn init<'a>(dev: &'a pci::Device) -> impl Init 0x088000, + Architecture::Hopper | Architecture::Blackwell =3D> 0x0920= 00, + }, pciConfigMirrorSize: 0x001000, =20 PCIDeviceID: (u32::from(dev.device_id()) << 16) | u32::from(de= v.vendor_id().as_raw()), --=20 2.52.0 From nobody Sat Feb 7 12:29:47 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010057.outbound.protection.outlook.com [52.101.61.57]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A93C8330678; Sat, 31 Jan 2026 00:56:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.57 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821021; cv=fail; b=WQPjYgI/r0PUtg1ws0V5WmEPZAFYkvyiAIpZ++ccuzCGxnM7Ur8YrKjRl3C+HxAyy1agoLDrl+tBMLz8KKy0K/TfR0aHx7JTd0L8kY0O2RNlm3j/GWBFODq/vG6W2ga4+qPvMqXR7vbjhdmZFA5LOxr6sYGYRt+d6tHLUuUykj0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769821021; c=relaxed/simple; bh=vBjm3GK3ZdFZK+YxTXdoEJaD3RJSGguOJIo+7gk3ymk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=uGE7Ax49Xkl4FAQe+mMsOERsCoeY8QSZuUNAucJFN/wVbxi1FhynFrEsn+u0WUkUj22haq7UF8RtCJlxKz6II9IowaHzCpCh5qvDgKApbqM3Gl7GYO3XbnAKdJ/Nd1MfEP0CU7cQDF7lglNdJb+ZiY2CaHwyTux//gCBhaN216w= 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=g5DFDr3K; arc=fail smtp.client-ip=52.101.61.57 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="g5DFDr3K" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=a6CbXe8AClQjqwVKI0lAWpGSbN7zgd7Ez/V/B8LYXelQEQ45aCvq6t/U5ZduajvnLymhv1uUUhNwBZqlDG4vCJ8Sjx0E3SCJ12//9SG9eZ+K6SKZWBqXi7M3YiX6Zow9uDbMOgY0J8sBTPv08rG0YzoPtBVBYjHtG4BJlmDsX/Punm2vXPKshUr1jve8V92VH5U+HFRzFrC02069gz/emltpxETbTHBOjmLK3iii83DHUi9OABstH8XtB2cxxgG/wnXzm0vUmLaxpNCGgSNA54V4va09E6DFoBf/qK89AhzMFZYNUYVyJBiMc9j0BrCve6cTe1U/p53lKRSmplXzmg== 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=+Y2xQh2jeSN7wumYmbEOQm8sucNHxJpRMjQ60PChpQA=; b=ZCQNGqWcRdZ3CSje4dGTMLUdeygmPbsWX4h2N/q/uC6oXyyOfqGodgk96GYOzWa/dBVcINR3YFgK0SC1EmoI8mA1JphRQU6/cCPmVdbe0L44zWD7MPm/HJEaJMsT061HW/SFoXeerpYnt6BebYyrPN7B0o8GAp8IV5/TU9kPqHtlHzibpq7pK+SG8rUgw680KK9rDP3cZebdH8ku4xYb6TuaSjSD7HBszI26rcoqYDXJ2MPWWurWNFzLSTQognD2UDeEZpcN0Zo8+Xo3GeuTOgK1HJFE0WVOmBY8pEO14eTtG5LLaRjedLfTQinv3Jz+rI8QCWUSF7oyJAzRokfTIA== 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=+Y2xQh2jeSN7wumYmbEOQm8sucNHxJpRMjQ60PChpQA=; b=g5DFDr3KjTLymcIVtW6W1wLTrCzEN5H4W/VSyRRFYR1AZY9dfS7yx6TT6D0jiVKK1INZQv5UMjn4Pa+UHd1pDipOJ+RdtDUh9h1LeqDxy83oVZT0K3UoDzVTVTpPPC/JQVpYRwJ0HwhgWwTLNvZAFcx20XwrlNT04rg1cFvU1B2q+CUOBnu6G3En1kCjUovyEjSvo2j154YmAAKBI19RWhirc9JctiGpHmGgjWsctee6R/ljSGsos/kZaRaKo3v9aBj66hBQtZhQUUlb6qNUVgsk4ApRJQBf/wF2m1yilDW5IvShb/sxOy3ca2ssW/gLjYV2np/dBvdL8C8yYpnpug== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) by BL1PR12MB5945.namprd12.prod.outlook.com (2603:10b6:208:398::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.11; Sat, 31 Jan 2026 00:56:53 +0000 Received: from DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8]) by DM3PR12MB9416.namprd12.prod.outlook.com ([fe80::8cdd:504c:7d2a:59c8%7]) with mapi id 15.20.9564.007; Sat, 31 Jan 2026 00:56:53 +0000 From: John Hubbard To: Danilo Krummrich Cc: Alexandre Courbot , Joel Fernandes , Timur Tabi , Alistair Popple , Eliot Courtney , Zhi Wang , David Airlie , Simona Vetter , Bjorn Helgaas , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, LKML , John Hubbard Subject: [PATCH v2 30/30] gpu: nova-core: clarify the GPU firmware boot steps Date: Fri, 30 Jan 2026 16:56:04 -0800 Message-ID: <20260131005604.454172-31-jhubbard@nvidia.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260131005604.454172-1-jhubbard@nvidia.com> References: <20260131005604.454172-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0044.namprd03.prod.outlook.com (2603:10b6:a03:33e::19) To DM3PR12MB9416.namprd12.prod.outlook.com (2603:10b6:0:4b::8) 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: DM3PR12MB9416:EE_|BL1PR12MB5945:EE_ X-MS-Office365-Filtering-Correlation-Id: 38bceec5-4d52-4192-8b28-08de60639fa5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?fs4DjWVu2RRTXqPnchdAF2CxP/v7ic+tfjgBYADNciR7JSngpoi4KO1B1lkd?= =?us-ascii?Q?y+6rowFkaa+n8toLCNr78J/bdsEkEGxv8G0Zse/DyXzzgSdmN3S1Zz7Rm2xu?= =?us-ascii?Q?VwNHx7wlRILughnlLX6P3Te51lrDoAgQfZQjVXztiQmZU57QuBlV3nS70NE6?= =?us-ascii?Q?svtPeWMCy60+3Wjcy4a3xikBFN+jGxTaK14oaH12jC7T2ERflQyXJsiWN+hh?= =?us-ascii?Q?XbQz9vyqh5NUAAWp8YvLgStMJkc7BJPNMQ3/d0+CwmDJbE7p7xMk8Z/ahPFK?= =?us-ascii?Q?dnB1AKXDhVE4/XzqBnVlWe9jxyT5TCKu6Mt5AIxAxfN41qOi+KQZv0d5IqFm?= =?us-ascii?Q?/BcZ2VXMSZ4MGqlfDEHRs2+KOcpXAMxs5gi/7Xeq9eE5Y3ys0DMHNPsK2fdp?= =?us-ascii?Q?fts6HqDBCswZSSyu/DUEkhMbO+DmnHKinE1KdrEE1hegCSifV5UTYlP3H+Lp?= =?us-ascii?Q?t544EtxFkmBv+YDnotauQrFVWdRRqLhAXICddBues3nlXSk6VX+iINynS4+L?= =?us-ascii?Q?yIZOJ+3laH2/FhjHpZxOGtqIuXnTTUD536iB7hT2IwS3ZA15aMEKLn8HSUPd?= =?us-ascii?Q?mlaPUnXkr8mSIBv/TkQSeYA3CSyAjEf4WANR6EXZVsSPm9s65zdq2b8HwGcC?= =?us-ascii?Q?kylzKdiPgrY39wLT67EjCMFbPYiMVjOGGJYUG1GInLITCymYSKd0eWrTagY2?= =?us-ascii?Q?dvJPa/3+nV6C8VIm2Fs9Drt++WgGfocJcvoq5QOpT8EFEaZbf5G8aAEhOpIk?= =?us-ascii?Q?CYYHv+1uD1l48BZMRWWC9GDINL6/h59qMxbBpeG05yyjgQ2rONUhg+NmjzKA?= =?us-ascii?Q?ki5lKJT0wMRQi4WpcFPogNM5OxDKgPcqg2plqTbfmumKyDtoF6o1CV0W8x0t?= =?us-ascii?Q?5Cqs3hRqAkv+yt8bb1aEptOqjspZF04UmS7qkAH6UidEaObql9owFiCbRlb/?= =?us-ascii?Q?NKSCvd/MTIqg8zGt+pm7w7hU5Hw6dyKkwTGR7zSzr4TSN7KogWlnCrfjVZdm?= =?us-ascii?Q?y6K7EwbMdWcQW3EMnKFUT08ie83VWw3pfpa69t+TzK6UfvH09vE44pvIdoSM?= =?us-ascii?Q?53sCEKmAMIGVT954vQOHQsJZ8ZALOb+EDgw7UYkjXC9q8mUXL4iWIqhBOByq?= =?us-ascii?Q?yz3stNPda1J7Vzf3K52iGp1cxdFNaEoYQ4ge8wnQHD0zRwjA8SaUm8srfhDb?= =?us-ascii?Q?PFS83iZ6YGSF3HEVpuNqBRJAgJmNaIlZfsGA1zdAdVngBGxndbocXzk8hfS/?= =?us-ascii?Q?zox8zxSwDHplmTUPHBrw2JEe3dirHz4buJQNTm36bQuQOBYGlMSGRp8hzxd/?= =?us-ascii?Q?/eiD2STGzoZLmNVxfS7ZkHjtcw+GOTPWUbymFKH3dLy8ehLZYddNf1XSGaZz?= =?us-ascii?Q?5al1jbwbpbhuvUK8RhP2RpGVAd1WO9N+jiRW8YeaVv40r+RMnJkbc6y3v5nf?= =?us-ascii?Q?fxwXt8foYUUeiro8PznhNppesBYFwZyLReDyfNz4KJFF8WHczq/gjbbL2BQr?= =?us-ascii?Q?KJ1Dm08EztKvyp334Pjfb+brmv+j/LOSkyPYM+zIqf4JPVB1bFCDQv2SPCl8?= =?us-ascii?Q?pw3DLZA5Cb7z8RUI6tM=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM3PR12MB9416.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?FZKmxWg3TvL4bvjOKFcDb2pVkO2QASu9tRRZe7t2jhrB1+bmZpmOMXoRqC8n?= =?us-ascii?Q?y84Gf33M0PQisaQDw4B44HZZvE2i3arfcsK+pGjrUJrJXWbPWbP/lOHngcuY?= =?us-ascii?Q?8yxdpd51pxrEsN8JGb2e7abc/4xpQCDmy6ljdxnLuss0qKKrRKrecsSWhsTX?= =?us-ascii?Q?8mS1lnF1wr8z8Gcj3dB0Pv7qmCIYiuKjj79v/6OStHY3gRp2vIO96kxDQ5w2?= =?us-ascii?Q?VqckmrhQyI5mVEalGFMflkLm6pWPKRpic3Xyex4ItowzeVYiMrPbxLigTDyy?= =?us-ascii?Q?LO45OVdSzJBbl4F4PuzZKy68kZFVykXm/pU8JUyJREB/niCBiIbm95w4JlDf?= =?us-ascii?Q?g1vDOc9UA1RZ41g/t0N1RSUqHbUHFbYHewPR8qZ/MBgVJj7+rvO9YbcCeQFI?= =?us-ascii?Q?bFdUaA1yeM5Hm3V1yfulaDC/m3sKi3xSW61f8HurMVAc+cFndvGRnS5APfk5?= =?us-ascii?Q?wLg7791H0TWMmXxB1r2r8NixDEzhwRGs56hSOnbkW0ldTq7q6RZYdYIVidDH?= =?us-ascii?Q?08mK8q2kLepBpUxJLXpoma97QvXSB9j+c8GGwXa0pw4uLxbAFi4JPHNNCejK?= =?us-ascii?Q?oaFbRLv4cX68mNrJdvhZ18yQpvTqV5ahVz9sW3V+p0rwMUwjCuTyTOxv9XRB?= =?us-ascii?Q?zYrKHNNs9fw67dtwnMw4/szKktYEFztEaePK3jTVssg1MSw0PsIVZddNwzi2?= =?us-ascii?Q?aMawmliKA7Kmu3RRVdTer/hFsxSxgdtlQT+vcZasCh+nKhdO9PPxol57ADkG?= =?us-ascii?Q?dDJVOzvBxJEGIH4DvOtr4aVTEO+NhVlrfY2kmCsx9Dq+NGZ8kLWD5utPh0LQ?= =?us-ascii?Q?DlCFokWA4Xc6sTxlvB7vTJ+Q27UMeybsuAsrTYCberbt9VGdIz8JD+aUbvvD?= =?us-ascii?Q?3bPoBmeaz2EOiQnH9HQ6yismUReOl056pZK1+gwVvZ/84WBwkMe/2WuJYwkX?= =?us-ascii?Q?85Qjp6sj/d9Azw/gN9SUxIVaaSZ9mBeXRg23i6FwT+kYkApMafaHTvBSoKSN?= =?us-ascii?Q?2zN8AQZ3z3fH6J/w2PDADEib9KMEIkBvrBMyBJXLHX2wxFq54yYUKbCzXBQi?= =?us-ascii?Q?dhrB3YRWMZ85Up6PCaCSt2u7lC1n0r3QE66sC5ejIrO7Z9uhXTJUXYvdZhh8?= =?us-ascii?Q?NCPAOkYlAwigQKZG+2YBuQHRslDuZmIbGKZxSB2Dx2J6ZUd6/t2VbgwMYnE4?= =?us-ascii?Q?yvRYup07X6Ct3kDmlu+/uVAUTayuFJGPlx4029fQwUzygkO6ReSBFfrERhg+?= =?us-ascii?Q?pxNNUjH4X9TIBJfdRfs4c7YQqil4730OY7uxDcNLivam5yBKjGMUUNDfhRXx?= =?us-ascii?Q?tn7Fr4N4TGobaKA+Qfh+yiRRDvy2/+pxBJNXqIoUUzZM5KIQajAD8Mm17u2s?= =?us-ascii?Q?ijCu3RmLWThkoDJEWnAO9ydwSX2koedVGi69SZW6vNb0ScjbkdT/5DsnMby5?= =?us-ascii?Q?OdhNrdIEjkFdUYiK0RSud4cbbHz6iEBB3BXDA1wmYVtKL4pYvqGZGNTbjg9G?= =?us-ascii?Q?tEu5zFauv/n8oDZaUVLJ+PwJdjxs837/16pmUb01CDivd/nJtlqYzaJgy5dD?= =?us-ascii?Q?swV0KX6DinC32keA4pbcyYkjs0IzrydbAxOc5grlMmMm8m6V72F09wXpmVzW?= =?us-ascii?Q?K4w67XocapvT9fUNbBfa0q+NXcCG1P4DEPOCqUs3U1M2I6YBV3NJzeQSiVh1?= =?us-ascii?Q?q+/YHEaF8mJ6F8f3JM39EPr82QHuqfXNDTb7vKMIwTeGWZ5Mx3xXiRmH60TV?= =?us-ascii?Q?Mb79HVms0A=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 38bceec5-4d52-4192-8b28-08de60639fa5 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2026 00:56:53.3088 (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: ssMt4oVjaV7NKM842nLTg1yWzEsRiG7rjApZ1cpuNG0VE3vI/xkEGIYpuiMkeKTa8NIE+PR9wj7gOB5QfOmnqQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5945 Content-Type: text/plain; charset="utf-8" Now that Hopper/Blackwell GSP is up and running, it's clear how to factor out the common code and the per-architecture code, for booting up firmware. The key is that, for Turing, Ampere, and Ada, the SEC2 firmware is used and a CPU "sequencer" must be run. For Hopper, Blackwell and later GPUs, there is no SEC2, no sequencer, but there is an FSP to get running instead. This change makes that clearly visible on-screen. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/gsp/boot.rs | 118 +++++++++++++++++------------- 1 file changed, 66 insertions(+), 52 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index 04b6141a9c38..02eec2961b5f 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -162,7 +162,48 @@ fn run_booter( Ok(()) } =20 - fn run_fsp( + /// Boot GSP via SEC2 booter firmware (Turing/Ampere/Ada path). + /// + /// This path uses FWSEC-FRTS to set up WPR2, then boots GSP directly, + /// then uses SEC2 to run the booter firmware. + #[allow(clippy::too_many_arguments)] + fn boot_via_sec2( + dev: &device::Device, + bar: &Bar0, + chipset: Chipset, + gsp_falcon: &Falcon, + sec2_falcon: &Falcon, + fb_layout: &FbLayout, + libos: &CoherentAllocation, + wpr_meta: &CoherentAllocation, + ) -> Result { + // Run FWSEC-FRTS to set up the WPR2 region + let bios =3D Vbios::new(dev, bar)?; + Self::run_fwsec_frts(dev, gsp_falcon, bar, &bios, fb_layout)?; + + // Reset and boot GSP before SEC2 + gsp_falcon.reset(bar)?; + let libos_handle =3D libos.dma_handle(); + let (mbox0, mbox1) =3D gsp_falcon.boot( + bar, + Some(libos_handle as u32), + Some((libos_handle >> 32) as u32), + )?; + dev_dbg!(dev, "GSP MBOX0: {:#x}, MBOX1: {:#x}\n", mbox0, mbox1); + dev_dbg!( + dev, + "Using SEC2 to load and run the booter_load firmware...\n" + ); + + // Run booter via SEC2 + Self::run_booter(dev, bar, chipset, sec2_falcon, wpr_meta) + } + + /// Boot GSP via FSP Chain of Trust (Hopper/Blackwell+ path). + /// + /// This path uses FSP to establish a chain of trust and boot GSP-FMC.= FSP handles + /// the GSP boot internally - no manual GSP reset/boot is needed. + fn boot_via_fsp( dev: &device::Device, bar: &Bar0, chipset: Chipset, @@ -311,55 +352,34 @@ pub(crate) fn boot( sec2_falcon: &Falcon, ) -> Result { let dev =3D pdev.as_ref(); + let uses_sec2 =3D matches!( + chipset.arch(), + Architecture::Turing | Architecture::Ampere | Architecture::Ada + ); =20 let gsp_fw =3D KBox::pin_init(GspFirmware::new(dev, chipset, FIRMW= ARE_VERSION), GFP_KERNEL)?; =20 let fb_layout =3D FbLayout::new(chipset, bar, &gsp_fw)?; dev_dbg!(dev, "{:#x?}\n", fb_layout); =20 - if matches!( - chipset.arch(), - Architecture::Turing | Architecture::Ampere | Architecture::Ada - ) { - let bios =3D Vbios::new(dev, bar)?; - Self::run_fwsec_frts(dev, gsp_falcon, bar, &bios, &fb_layout)?; - } - let wpr_meta =3D CoherentAllocation::::alloc_coherent(dev, 1, GFP= _KERNEL | __GFP_ZERO)?; dma_write!(wpr_meta[0] =3D GspFwWprMeta::new(&gsp_fw, &fb_layout))= ?; =20 - // For SEC2-based architectures, reset GSP and boot it before SEC2 - if matches!( - chipset.arch(), - Architecture::Turing | Architecture::Ampere | Architecture::Ada - ) { - gsp_falcon.reset(bar)?; - let libos_handle =3D self.libos.dma_handle(); - let (mbox0, mbox1) =3D gsp_falcon.boot( + // Architecture-specific boot path + if uses_sec2 { + Self::boot_via_sec2( + dev, bar, - Some(libos_handle as u32), - Some((libos_handle >> 32) as u32), + chipset, + gsp_falcon, + sec2_falcon, + &fb_layout, + &self.libos, + &wpr_meta, )?; - dev_dbg!( - pdev.as_ref(), - "GSP MBOX0: {:#x}, MBOX1: {:#x}\n", - mbox0, - mbox1 - ); - - dev_dbg!( - pdev.as_ref(), - "Using SEC2 to load and run the booter_load firmware...\n" - ); - } - - match chipset.arch() { - Architecture::Turing | Architecture::Ampere | Architecture::Ad= a =3D> { - Self::run_booter(dev, bar, chipset, sec2_falcon, &wpr_meta= )? - } - - Architecture::Hopper | Architecture::Blackwell =3D> Self::run_= fsp( + } else { + Self::boot_via_fsp( dev, bar, chipset, @@ -367,9 +387,10 @@ pub(crate) fn boot( &wpr_meta, &self.libos, &fb_layout, - )?, + )?; } =20 + // Common post-boot initialization gsp_falcon.write_os_version(bar, gsp_fw.bootloader.app_version); =20 // Poll for RISC-V to become active before running sequencer @@ -380,29 +401,22 @@ pub(crate) fn boot( Delta::from_secs(5), )?; =20 - dev_dbg!( - pdev.as_ref(), - "RISC-V active? {}\n", - gsp_falcon.is_riscv_active(bar), - ); + dev_dbg!(dev, "RISC-V active? {}\n", gsp_falcon.is_riscv_active(ba= r)); =20 // Now that GSP is active, send system info and registry self.cmdq .send_command(bar, commands::SetSystemInfo::new(pdev, chipset)= )?; self.cmdq.send_command(bar, commands::SetRegistry::new())?; =20 - if matches!( - chipset.arch(), - Architecture::Turing | Architecture::Ampere | Architecture::Ada - ) { + // SEC2-based architectures need to run the GSP sequencer + if uses_sec2 { let libos_handle =3D self.libos.dma_handle(); - // Create and run the GSP sequencer. let seq_params =3D GspSequencerParams { bootloader_app_version: gsp_fw.bootloader.app_version, libos_dma_handle: libos_handle, gsp_falcon, sec2_falcon, - dev: pdev.as_ref().into(), + dev: dev.into(), bar, }; GspSequencer::run(&mut self.cmdq, seq_params)?; @@ -414,8 +428,8 @@ pub(crate) fn boot( // Obtain and display basic GPU information. let info =3D commands::get_gsp_info(&mut self.cmdq, bar)?; match info.gpu_name() { - Ok(name) =3D> dev_info!(pdev.as_ref(), "GPU name: {}\n", name), - Err(e) =3D> dev_warn!(pdev.as_ref(), "GPU name unavailable: {:= ?}\n", e), + Ok(name) =3D> dev_info!(dev, "GPU name: {}\n", name), + Err(e) =3D> dev_warn!(dev, "GPU name unavailable: {:?}\n", e), } =20 Ok(()) --=20 2.52.0