From nobody Fri Apr 17 09:18:11 2026 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11011019.outbound.protection.outlook.com [52.101.52.19]) (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 75C79320A0A; Sat, 21 Feb 2026 02:10:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.19 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639805; cv=fail; b=IbW2Xj0XjCIjcITU7JVg4zc0SAu92YP0Mwaqy6/rNAOkmm6zPmWrdqQyg7QBhIvepUO1X7/3KzsIn7h7N10i0StaJW7G/p93FaLUwCMBUV3aHxJFeQEkCPd/kJSerpKnq6KoP9240suJNBfq/4iTic8wqayGWTeUbHJGylCLQW4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639805; c=relaxed/simple; bh=VDMdJyIpmrwzUygAMwraCrB89gcA6B7bO3i3BVG8QPc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ZRVN/XGz/hJ36Do6cFAeWpqcRHtGs1aYd+4OlpH8YyFcKARlYw+Icb4xPmppU/CcwLZyYqMAkdIStlDzLMJHHRAzq0V9h5TTucpODulwFUz7/nh7HZE1+dEbt3b3m09ky4gE07R8rXY21mvTMfwdvnJQoJxDZcT2KNl+j3pYwM4= 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=KSybzpeI; arc=fail smtp.client-ip=52.101.52.19 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="KSybzpeI" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VrfXDwxtdpj5a4B8Ey3HfCFE7LTOJdhLdPqGEXrzchRbRmq1vuJmadrqgOrKUWtHSeFfunw+RYAN7yyNAu5alYxdIjv235f1ngC1nFjUTyTuVxSoIMkl+TUiRzL6/v8ZQgCBeUyupl3xHPe2Hh2S/y5lnoyQeoGD2x0Amt7m/x1ch0PA4gyBk4Qw1Y6FiN3F0VzkN8JHK1sIf9YxY93nr8dSUhXk63XgAQwxhBJsoWvjBUtqbesdFoWucElcS4wWoWQOLDDgR1FFA9cBPvKKOh9fXSxCIi4moV/R6kkR1bKUssUYzyRQFKYaiiwp0EIk3yC9VDGmPXx34Or545kxGg== 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=augYoep9fG7JRNxDzNw7Rdjv/E7RGyOor2DPxwe1Lc8=; b=auX4GM1HkZhQZCdwhYmAn+D/ye4aBTrFPPZuS6+f40GCGI7KiQgb+Wy/o/zSwtO6KhOXJ+REht4k6QPP3rZ8KSmyCJ5sZfpWzKU9a9DWPObv2QuHitTPiVjwUOhkZVsbVHiRF9y6PsbaYmkXs4cyiXZzl7EjbN/aIQxrs6XzQzZLj2yo8XgsQwtu/3WCjIJEEwJ5yxm8q9XqKrnCUx1h2T4IrF9EpK6sGih1y4YnMOYQeIkP9MWlZmKDMfSwgGVkuGk9jgm7hyvcL+RZ6CkUbt1Gd/wHTX+vcpFBEQcz++GLDeh5tmqcAA3RK8iEFrfhnUf+A7en1hkYE7SuLYSyDA== 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=augYoep9fG7JRNxDzNw7Rdjv/E7RGyOor2DPxwe1Lc8=; b=KSybzpeIQpbNISuyP6CxfVdqbdnoPitRHt7DX/ey/LvWn0zMaqrSAhj1s+ezMCYixTnDRcWZgzxcBpYLE0p9N+wDH9yfl0FLzLmFCCE/LBXAE4D9zVVmpUBV2/DH8khSEf2m2/CuKUfeWq8zN+cQDnMbSJO4CAnSGubg37YRdI5rvLU9paIv+mUft8c4RlI+IIiDD2YkHsY7R317J/M89UAqeh2NLar8bLipb4/kgLyxLOalBZspnWIaZpaYXq9ALsRnLj7lirZYHKVy8NxwAgcCj8nJ/LVfQ/UKdJoyyfKtMFuBGOerrH8ZPXSpR9cJ3U16bRM5kLOoDeFszs5D7g== 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 DM6PR12MB4106.namprd12.prod.outlook.com (2603:10b6:5:221::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Sat, 21 Feb 2026 02:09:56 +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.9632.017; Sat, 21 Feb 2026 02:09:56 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 01/38] gpu: nova-core: fix aux device registration for multi-GPU systems Date: Fri, 20 Feb 2026 18:09:15 -0800 Message-ID: <20260221020952.412352-2-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR04CA0008.namprd04.prod.outlook.com (2603:10b6:a03:1d0::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_|DM6PR12MB4106:EE_ X-MS-Office365-Filtering-Correlation-Id: 12696580-6aa4-4388-c160-08de70ee4ecd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?1160gaffmvFJKFRKeQeKnfuXdmzoozPAdVKfv1cIibkeJuoWpDW8B32bD2Ob?= =?us-ascii?Q?IVFd10IEQHde5oDIX/0LXJjhEIWJhq2p/U1bcZetphtgkbIfTj/wMUdCFUQD?= =?us-ascii?Q?gTSdirF8Pp70N23R8b+YgZIJ/X/PXvJxDPQqB6JsobQcOtVGtbhXuGTajQe8?= =?us-ascii?Q?tK8HPj8azGdEpGHFlkFstC8S/cLXThwx60PeLX8mD9EoccZCxHDppAm9nRtn?= =?us-ascii?Q?F35B1Ejl7VswpNVK03uOrBd1TBFBMj3FQvPsyWhMBSrmRA6q0whiRIWhXuSp?= =?us-ascii?Q?CARZfX1NwURXzJoxnNH6go4LKmT4lYCu5sisc9uH9MFolwpFAsNe+AnXGmfW?= =?us-ascii?Q?1njrPwp5G9eILVAFKgHpYWW2w8ypxtYBpt2r5CIAVMe2cmT+aDd69IVYwrb1?= =?us-ascii?Q?E22CTPz/uPru6wy834qJtFsnGE3ntkwfcUorMllGtevtyQ2TBhUJ6jHgK0F9?= =?us-ascii?Q?PFdkpzQwpmZpVUkViZrHbxeD652C2+PMpUyRr/kpig7mvO4OhG3Ir2mam+DI?= =?us-ascii?Q?i93QuFIi/8qITNHwXCLa/Ah+PL5/u5aYMBC+eqwEHDSGXWIqlU2YWJ+OtbN4?= =?us-ascii?Q?JebnDLWkZJLTfmOaT+VvC8NV8+FeV2AVGRqeGMQtgYL2BVJ7F2WWAOumb+ge?= =?us-ascii?Q?g0nxXdl/sJAO05/Pk0FKxcwxaUVyUuQhZ3mZX8yHGTCKu2vftZR2geLcY/jY?= =?us-ascii?Q?CCWfYXGHx8MEoZQWKmU9plNvb4gF52SvEql8ZARrX+B9x35R3i4olhQA7X5g?= =?us-ascii?Q?WEbsV/hhg3Ty1bQiOH3H1n+C4iog1ifyYAQqBdJXC/yZWbpWUaNu8oQ4esHE?= =?us-ascii?Q?0yVBqEe+JIDmW8BHaAoqZvAnWOFQgPp1grz4zu3fk9Db1VTlkLdGrKhln5JI?= =?us-ascii?Q?NSGjS3fghBAT0FtzR3Hma1Xb5UdtcadRXsh3uldfQVYviq5LdFQcukAyEFgd?= =?us-ascii?Q?RpTn+ytkg+QeQl58+1zTTX36wDsrBKLH8BL8bOFMVoZBS7aGmiqtO4BmZE16?= =?us-ascii?Q?U4H4UoaHZpmC5xxeGRjNOMl2tA5Wm5qZ7De8QU1eaw9YlFeTVf17SLgp6zfD?= =?us-ascii?Q?Ze1BRt78UqOWEMvEy63DhSz3JroFlprjjsaLZBfCysWbXIyqI7c2LS//ul9T?= =?us-ascii?Q?8pSvFw0Ufj8bJjlpXlJXyMQps/jBsYHmVx7suSW9IBJGhovoM94BhtgNBRis?= =?us-ascii?Q?sXXbBmLeL1RHYlzyY7Bn07Iucyt2I0jRUwD0pAPk++68oCYdwSbwJJzYFOxQ?= =?us-ascii?Q?i1YRUGsAKM5U98qrkg27b6z2IS6Cb45VyD+JV7JwHpNno11rtmNfVCHZJtJE?= =?us-ascii?Q?fsrfj2Nov86tU3qBUrRBc1pQHgyZQSvOMQWLc707Pdd8Ctsyii18H1Q5G4Gf?= =?us-ascii?Q?PEKDczy+PgrA/O2780CBIzxnv73rUZp8Lm/NFhvxtN6n57XVJ22RsqSWeprz?= =?us-ascii?Q?mNTTxy/hZJG50qYGALRVgCdBmFLZu80QMp1iDXUV7BLEoDuciUKSj1YcWDqU?= =?us-ascii?Q?04UXG84rMyE2hQXbfEdMR6ws8SwCwcfgCdjFcHXXJ0HabAm3jdjoBhL+aqKW?= =?us-ascii?Q?My6+yI3C/q+p7ZjNCqI=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)(366016)(7416014)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?bqwBv3BV+V/6ThfTQAKp5WMCffWUVPS6mttIeAiLKw+kJ4rGdMfd2mnGjMah?= =?us-ascii?Q?hGidUVdgHmJyjpN+jJs0xwB6m+wOWzTQSoVQ41+bSE6M5G/N4E55uE2zDg+z?= =?us-ascii?Q?St/lZ1qNCgZDl0rlyiBvuFg9bPv1NQCgyIJFTWdj62bbt3XUowCeV38VQM2S?= =?us-ascii?Q?m3Y+u+2VZJ7mS+dXGcKf6i8C3mDpurUZgGzfiUeX8Rt5sDe7dGQejD/rp9jP?= =?us-ascii?Q?viucLn8vY5BjcMLOQOusBQlTg1UMZ0uSRomtYsSNPNdRTlGPo3qUoD8ZNzc0?= =?us-ascii?Q?mJLJ0N5w3o3L+BSvF1gftKssCnw49MTDoAPe4hbZfkyInAfDmY0Y0Ok1iTKB?= =?us-ascii?Q?yee+jWsEq+/9PIJmFYUyeGo6Fvh/a4Kq+KEXNM7PMBKpNnzftVUGvczbHhv3?= =?us-ascii?Q?BF3i6N7A2uKSzgPVHy0E/AMQdE+wQSCcuUUxlGwLIvfcIEhwFm+1Rjrj/1JF?= =?us-ascii?Q?9hwSH1Rd8I9Qu4gkn0PcxaZ6X/4OO5r1QQUcUy09D/Zdp0lI97BwvLug2nE8?= =?us-ascii?Q?bVZH1BkoULle8XTZGFXn+cKRFZN+sQ2YH2jzLyK2ksnP6vAZ3CbPFg3gJ921?= =?us-ascii?Q?f9vo1ONUo4ue860TIgq+EZixpNcYa+CeprYIxnJGQxTVae88DDKM7yMFVphx?= =?us-ascii?Q?UbF/WadvQFy9fFvfshCWa/2XCuoOSS7ysRgZKCXSOPxNlO+B2uCawUrAPvr1?= =?us-ascii?Q?JeKjVGEXHiIaFC7/3mGGeT2DGi0Q6Z7E6HKxKcnYa5ioELNBc72s+il1/sC2?= =?us-ascii?Q?J5gz+s99ir7LSigQt9viUkgMwog1VJHSJQGzwMM/t81JPROc/CXK/RP6byNd?= =?us-ascii?Q?9fU+1tdOTr0Sma+pCXEiRqqoXCfG+Flm+slR+BqqLIqQdp5m6S9yxXUTyOWd?= =?us-ascii?Q?Hf7h2umaODDgDvC5ZybLgBOSDMOSl21SvpwyAYUmlLbSLN94pZzO2Yby261f?= =?us-ascii?Q?w1lctwdjpZwMEdzo8VQ+UF0IvzeK+Y6QHXv6fobphWypZHW3fKXTFZy6bFe/?= =?us-ascii?Q?iBSqNRTazO9ihTw96+Bj1duPiQbpcGZarZPFTmiE3IzOoxYH/sQPs80KtvCJ?= =?us-ascii?Q?+4fA1/oxUMDp1733A0+T6VQGngSmsadX6o032u0t2P/WPy3GOGdhhcHh3jAM?= =?us-ascii?Q?R4I+RXZt4XoT79PbUZ5SeMawPzIOUjTJfFTW4A1XtxWLAXQ76a/8PHb+9D+N?= =?us-ascii?Q?e2kcBD+h/Uxcg/SlpGfGW9qQfT0hiXfcEdiKwN1LvldjgTl2elOPEwvFv23g?= =?us-ascii?Q?5pQtbCIlmCH/7nYWYiPSt7SQik5Als1yvELAxqm3pCNWgQ14UxJCWwv7vuk+?= =?us-ascii?Q?zIjlQETs7C48zP3HSeLQkKlKKRKjjrxIivRralnmZyTfUXQpW10aATvxzzft?= =?us-ascii?Q?JZJ4GPQ31WMrx8BIRx+Ir59lAxTsJin5RFj1AZFxHNp0tbZam/+8qMtqwmPl?= =?us-ascii?Q?n7tn9jbABkD9EFUvcnUQBsS3gITXAcD/JA0hCEIgxCkCb1hoREuiXC8n96it?= =?us-ascii?Q?GBUSK1TKc0PDxn27YIh47Kn/rU26bo/jJjUeQcn4DTQmlOpricapg7AdFwiE?= =?us-ascii?Q?IKU6ef2V4Ly+RalE6S/SvYqEsoNyuuw5rzgsnPfmbCqcoK5bpNw7Q4h7DuPA?= =?us-ascii?Q?16Ox8zX/dtjrGRQ1kq9fQYrlDEP9CzivlYfNaMHCZEJcrHeN292JM9vTYYat?= =?us-ascii?Q?65iYqV7gJq5PCDYO1GsqoHy888AkzlQ0hfhN0BpbLtrgE7H2htf0tRK9BZso?= =?us-ascii?Q?0fGPHnbCig=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 12696580-6aa4-4388-c160-08de70ee4ecd X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:09:56.1333 (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: clODZtpYchJ/LoDQr+U9SE6V+2Q1YbiVO93vjvi1Fe/DLsWUqA2YytcEN0ucoHafgDZOIRBa9OTUDr2QHtz9/g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4106 Content-Type: text/plain; charset="utf-8" The auxiliary device registration was using a hardcoded ID of 0, which caused probe() to fail on multi-GPU systems with: sysfs: cannot create duplicate filename '/bus/auxiliary/devices/NovaCore= .nova-drm.0' Fix this by using an atomic counter to generate unique IDs for each GPU's aux device registration. The TODO item to eventually use XArray for recycling aux device IDs is retained, but for now, this works very nicely. This has the side effect of making debugfs[1] work on multi-GPU systems. [1] https://lore.kernel.org/20260203224757.871729-1-ttabi@nvidia.com Reviewed-by: Gary Guo Signed-off-by: John Hubbard --- drivers/gpu/nova-core/driver.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/nova-core/driver.rs b/drivers/gpu/nova-core/driver= .rs index 5a4cc047bcfc..fb54f28f6da1 100644 --- a/drivers/gpu/nova-core/driver.rs +++ b/drivers/gpu/nova-core/driver.rs @@ -1,5 +1,10 @@ // SPDX-License-Identifier: GPL-2.0 =20 +use core::sync::atomic::{ + AtomicU32, + Ordering, // +}; + use kernel::{ auxiliary, device::Core, @@ -19,6 +24,9 @@ =20 use crate::gpu::Gpu; =20 +/// Counter for generating unique auxiliary device IDs. +static AUXILIARY_ID_COUNTER: AtomicU32 =3D AtomicU32::new(0); + #[pin_data] pub(crate) struct NovaCore { #[pin] @@ -85,12 +93,17 @@ fn probe(pdev: &pci::Device, _info: &Self::IdInfo= ) -> impl PinInit To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 02/38] gpu: nova-core: pass pdev directly to dev_* logging macros Date: Fri, 20 Feb 2026 18:09:16 -0800 Message-ID: <20260221020952.412352-3-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR03CA0018.namprd03.prod.outlook.com (2603:10b6:a02:a8::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_|DM6PR12MB4106:EE_ X-MS-Office365-Filtering-Correlation-Id: 54ba050d-086d-415f-1aaa-08de70ee4f84 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?7vqROojnZJEkltdzIYg9y5/fnxNNEQV9x9zvwwsgWZorRyNqTsayuLn7E4h7?= =?us-ascii?Q?7vUYAwf4/bR38jJDZLidg3vpJdZWdtcelDjB2Z2HTqekdKdgZ+V+zvp53j6c?= =?us-ascii?Q?6EOd145BCRvpbTEAfiIlg36aEz2MhyN0EBPUDSerHt6Nkh6xzQjyto5XmNc/?= =?us-ascii?Q?+gIU4jfar0LQiKmiMuXlMxexNeGtkia6Hb4TdSNBfcxk/jAU4yo4lReRTkP3?= =?us-ascii?Q?IN+ogStT1qARvK35JipQ6jd3hiAAOORATjNS6urkTodF+yEN9201iUYV4Ihw?= =?us-ascii?Q?n08jj7VabvKNsmp9kXAV2Rp/LE6msXew6iXl+BaWG9zxDoNcBI/TR4/2Kcwi?= =?us-ascii?Q?Z6mCGF+QkLGg3GEWugvdTr7rO8r/zzNrMQn5HmZNKgsrONsFSclFzJ1NqIwX?= =?us-ascii?Q?fy9DACe04xK5lPKAAPly/dYa+exw3mi+UEx3s8ZbzM9fZGMqWXaQtZVuAduA?= =?us-ascii?Q?afSyjimvpaA3ntNCzZRvG6BbWb8okvGLvPCsXQbnKkcQ+fSf1vL5u26HHL/3?= =?us-ascii?Q?xOs6sIE+71U0u/ozbxmrEq75MdDRgisz6087+eYHAcXndji3C0LfpOeaGY2T?= =?us-ascii?Q?6GhkZEHX92VCnvGutfXjQIAv8eb1KgdwoS/elZTMOLd+b6pgq5NRXO5etnLT?= =?us-ascii?Q?MtANhTgnhMzmSO/NXdzy99b4iebEd4Gyr6NCM6L+luBQ4735Ds/OPkeyCAAE?= =?us-ascii?Q?912FUvDIHM9KpMIMNd1ZfXgs3D6ywWDKBpS3JeEScKOBVXdSGHUEgYzhnz7M?= =?us-ascii?Q?855imErd36loERxuM5r3g8s4kt0S7v2ve4m17ktgs/3v38udMNWRq7+bsOsa?= =?us-ascii?Q?t+1jK6XOsAIiVNr5C8oLv/4K6Z+iRSpoLoMFEaERFQT2BLxzQ1zLVBL0V6/X?= =?us-ascii?Q?0pEuzJCZR5lVAYcKVbII1gkkrQrTlu5rPA651+E+5dj/q5R0RbjCuhczrHDJ?= =?us-ascii?Q?uQLMpnUYUhpdeT2IVQs5pxA6LP1SSf9ni1jP2//pXnr5bnpNPWkzbpFNpA69?= =?us-ascii?Q?1GTIZgJKxAjCUxn4+LgUsR/ZBB1tRFo9kWRWFmR2xA55HInz6Txm+eQghFeU?= =?us-ascii?Q?OL6qwzuk1kDqvXNx/j5yhBbZVJppxRSREhjF0HCsllkVTGnbNZaayVHsO2/a?= =?us-ascii?Q?zaY67mhBMCTktmIa/MGS747sQYxaco9wPBHUpfPnkl482JiM6V3c3gVmldbJ?= =?us-ascii?Q?mx8OisvOUo6c78144qil3/Xr5Kax4l/h5KriwgPpVcb/+e9AP6XbGPIEb6Np?= =?us-ascii?Q?aCcwLGbePVx5vRLXOQ9GNb0Cz4RlKUHOrnGC9e8/zJYThLqIJY9rhxqGDj4N?= =?us-ascii?Q?Nqv9pEe7NNL1W8ke1rn4JLFaPcTvsqaDOI/uA9wNeD5dSsPQDUaF2N8BoGHe?= =?us-ascii?Q?2s2Dv8GBlqMFL28AOnxlSPHH5BVtQGcWm1TV8FsJcB7J8e0sBrlC7uV6RSCT?= =?us-ascii?Q?d75niWyRldJsSTvV6RUWmxXii29rZga4QwfI8zm8oJPvOsf5R+54yzoii11b?= =?us-ascii?Q?8Q3GDHkvmAG76NguWtZkSJ2AkrpJCbQQgXm2kMQviKNzWbHrwklETQmQwV8P?= =?us-ascii?Q?xSuOgIlEZLMcnZzGFxM=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)(366016)(7416014)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?lBnwEG8jnMR7wKqFUak8GegY6zFubugg+AevoqnsfsJ0cPUDmknPfxgvx6kc?= =?us-ascii?Q?j3qgKxJyf0am+Zw9xxGBkoNEQIEuAKHGN1bjQBSXq2LSx7gvTMGDLs3kLkil?= =?us-ascii?Q?BNsQtdA9KgG7mTMq7ntIduTsICPg9VAumsM8EAGfHA42AiFZ9AlMMVlTOqjj?= =?us-ascii?Q?W0I6crZxg7mHnKmsDWlDaVjBcIzMEROhQUGQlwMsKbX8v4zrIqUdxsofB3DD?= =?us-ascii?Q?clEB/JDWP9aL3o71eDsvNMWVhQxsEtjV0yAQE/5MCcdcRggqeA0ltAvCyMPb?= =?us-ascii?Q?onh6ZtrYB+GTmliBH3oJjL258yvN3H7WIzFFxdmRVUXC+CwfVk14aF0imwcX?= =?us-ascii?Q?CFm/r1w7Q946XqUHxyI6HhNMgJ1bgOJuifcYlx5ZkZsd4Z3SdcqMZErwWE/w?= =?us-ascii?Q?BycPjGgts6muhnaNaCivR/KKfyX6SYryGnNo/6i7F15lxOTxd8RWEHodcm/f?= =?us-ascii?Q?MOamjTXUvA5UhH5zv6RsN7WXQ4fyvdzfTCq4g6ENRWJjG2nZBXHdZRlqLwuO?= =?us-ascii?Q?KCbeTSG6nDP2q4nUc7puG87/m4YNDJfNaK3zAyeTfZnuE41rScB0uV0N13Kg?= =?us-ascii?Q?HacHob6VTv4m4DlzATBOLdv0ZE2H1hgH7E609w2fwCI2spR1S1p1dtcAuC9N?= =?us-ascii?Q?St8aEmwOKAxcMuo3kD4cdu/tZtKe3/laWdhk8Nyr6PBEF9a1fqk3pHPSVTsn?= =?us-ascii?Q?TsI6z3D2VLaKmERbQjMf7oKUqr7wU1sv6sgZ8Z/8ExSSOwAhJETjUk9uMSOm?= =?us-ascii?Q?YKk16OiTOAkb2mqBtqpaQNRDpLaWNztQzMgEf5G2D8YfPg4hXGca8hUIt6Ji?= =?us-ascii?Q?egG0ZAfcsZRd+niR3cNKZiFy96eAaCbLMfrCDGN1UBIcdYcSYAjy3xF/sBbH?= =?us-ascii?Q?NVLHwizuUE+ubKSenrkLIShiF73Fz77DeY2+zNct5WPBukffQDOrW6Gmme1u?= =?us-ascii?Q?1cJpr3EbH4NsVKgM5yHu2TYryYOSjFNxWnvLFvlNmzIo9DHH0BnVIJL+zpVJ?= =?us-ascii?Q?N0Q8vsnSOznSvgtmMJivV2j/460599gJpU62dS/JMORWX76pigZNjqub21Pn?= =?us-ascii?Q?ee7PImx/AKE+pweWzgtg0nzpKdL4f9B9akl40N7HEBKmLqlXMKvQh9ID2Yt2?= =?us-ascii?Q?t8t8xJkP5U//voulyQtmlMBD3kJwEJCQkgzXtgJ42ydChcSXt/uc/JbMGdOB?= =?us-ascii?Q?J9rFoiklvarcEWykw6xuiwoSAxdbORZwdyidE1QbicfI91UeGzSypyZCZH8S?= =?us-ascii?Q?LSF39m5+6PHYVGFG15FAZNnqcxa96Xf3YZU/5A0REnd5mYOAXGj2A9Kx9Gnb?= =?us-ascii?Q?BG+LlzqvrtzQ172yGkUg+JQpC7NySy+SEAn1FQxU77GNhKs1wmQ/G/w6rrtN?= =?us-ascii?Q?ZOdXXe4Wo+eqxzaimIVLACAQfHKaC5Ig1a48dthoAP88xqHyYU1C5iVX9zz7?= =?us-ascii?Q?nYxyX1c8nFyUxMXYa1gehxD9O9s7qFihGSikboE2pl27Pk9cYbhLrpeSMfPr?= =?us-ascii?Q?Uy0KntleVdeQvUkakXTT2i4vHG2dm/zzYsKyPzqB+VMgo1aNLrybWQDRryre?= =?us-ascii?Q?FN0paHRgImiOxRwHxd+xUJVQDK1KrOhQMPdCV52DlDmaf0H3jI3dV+0Lcq8X?= =?us-ascii?Q?JTEp0iqUIx2YhYKGX5FcjeR7oNpzXmsgH6IfRVSyKCaZhZc0P8UgrtwO7X9N?= =?us-ascii?Q?534UXEyqhTNny7hnlQJ5MKDQ6yk0GuZJ/Ko2jx6fZHi5qk4n5DeG3zwLxvI0?= =?us-ascii?Q?/RfN4KhRBQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 54ba050d-086d-415f-1aaa-08de70ee4f84 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:09:57.3252 (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: gy10oRqYOyDoea0arN7+Yvg3woa0cHZDhTh7DQ3+yMTtYFjo5N3YyOCnR5GeqGjnIkEvaR4GRDbep7eWXsT7hg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4106 Content-Type: text/plain; charset="utf-8" The dev_dbg!, dev_info!, dev_err!, and dev_warn! macros now accept pci::Device directly without requiring an explicit .as_ref() conversion to device::Device, thanks to commit a38cd1fea989 ("rust: device: support `dev_printk` on all devices"). Signed-off-by: John Hubbard --- drivers/gpu/nova-core/driver.rs | 2 +- drivers/gpu/nova-core/gpu.rs | 4 ++-- drivers/gpu/nova-core/gsp/boot.rs | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/nova-core/driver.rs b/drivers/gpu/nova-core/driver= .rs index fb54f28f6da1..e887bcc3187f 100644 --- a/drivers/gpu/nova-core/driver.rs +++ b/drivers/gpu/nova-core/driver.rs @@ -78,7 +78,7 @@ impl pci::Driver for NovaCore { =20 fn probe(pdev: &pci::Device, _info: &Self::IdInfo) -> impl PinIn= it { pin_init::pin_init_scope(move || { - dev_dbg!(pdev.as_ref(), "Probe Nova Core GPU driver.\n"); + dev_dbg!(pdev, "Probe Nova Core GPU driver.\n"); =20 pdev.enable_device_mem()?; pdev.set_master(); diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index 9b042ef1a308..f5907c31a66d 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -262,13 +262,13 @@ pub(crate) fn new<'a>( ) -> impl PinInit + 'a { try_pin_init!(Self { spec: Spec::new(pdev.as_ref(), bar).inspect(|spec| { - dev_info!(pdev.as_ref(),"NVIDIA ({})\n", spec); + dev_info!(pdev, "NVIDIA ({})\n", spec); })?, =20 // 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"))?; + .inspect_err(|_| dev_err!(pdev, "GFW boot did not comp= lete\n"))?; }, =20 sysmem_flush: SysmemFlush::register(pdev.as_ref(), bar, spec.c= hipset)?, diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index be427fe26a58..bd6e6dc57e85 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -171,14 +171,14 @@ pub(crate) fn boot( Some((libos_handle >> 32) as u32), )?; dev_dbg!( - pdev.as_ref(), + pdev, "GSP MBOX0: {:#x}, MBOX1: {:#x}\n", mbox0, mbox1 ); =20 dev_dbg!( - pdev.as_ref(), + pdev, "Using SEC2 to load and run the booter_load firmware...\n" ); =20 @@ -191,7 +191,7 @@ pub(crate) fn boot( Some((wpr_handle >> 32) as u32), )?; dev_dbg!( - pdev.as_ref(), + pdev, "SEC2 MBOX0: {:#x}, MBOX1{:#x}\n", mbox0, mbox1 @@ -199,7 +199,7 @@ pub(crate) fn boot( =20 if mbox0 !=3D 0 { dev_err!( - pdev.as_ref(), + pdev, "Booter-load failed with error {:#x}\n", mbox0 ); @@ -217,7 +217,7 @@ pub(crate) fn boot( )?; =20 dev_dbg!( - pdev.as_ref(), + pdev, "RISC-V active? {}\n", gsp_falcon.is_riscv_active(bar), ); @@ -239,8 +239,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!(pdev, "GPU name: {}\n", name), + Err(e) =3D> dev_warn!(pdev, "GPU name unavailable: {:?}\n", e), } =20 Ok(()) --=20 2.53.0 From nobody Fri Apr 17 09:18:11 2026 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11011019.outbound.protection.outlook.com [52.101.52.19]) (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 AD203326D6B; Sat, 21 Feb 2026 02:10:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.19 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639809; cv=fail; b=EroY1zkOo/GW/whwKsBzC4AGS8iAPeJqXqnaWjfckyynsfAEqgpukXEflLQeD9a8cpT8H1zZvCznhqPfNolCzAYzdyuOji2rQtYJysLa7It8t+085GNXukVz4T53pVfvWDog+8dfniYR4IAJt+igh2nPzY6ybXXhMzKvV/i5gw8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639809; c=relaxed/simple; bh=tnigXvJ3W0jVSpQhXYF6gIi6qp0sxGb2r51RLLHMN+w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ZTq1mDVte7samcMEdweXRPyumk7oXrbTG5zFmSbpymnf5VBRozrHmmz3TFlQvGFJok62jLNY3PSa6D1y0+eSo/gb3QYb3ZEYM+fW/EGO0gIhzmf1GdCDjbwNP7JY2IiKnZZ/7ky7j+UkBMKYQjlkVLXzgIb4TI0hIapcxKVfwzA= 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=K3O6n86y; arc=fail smtp.client-ip=52.101.52.19 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="K3O6n86y" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=x2guvyf3jjMo81yp/glG4vhF7JYsFDrQ+sNvStGBjGZYUGbbaKRyphxueQbbZabgEKtKn1aMgr03BfCa+3X1VKHUHHpwmRL1aw18Uf821L3j+zGflqzNSPbL3X5tMleSnSMY17EABsI3ZaWws+D/fHxp8Z18plB37lmMc6Xc06A8b+4ZmMiGB2xvzQmXyRHT1CTwhLvmp/bS9OIwQBCQ5BAKRBN+qm5RAsks1XRWMA6R6zSIFVocSqvQf/SwPOGeV9gjmLry8Xq7n4lX1N4GQ2ZVzY+5cwRab3MwPU+VoWjBA56eLVbpjIP9twA8g1WCYA/Dcot0ssP+XSEMmB2yRg== 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=IUjpL7dC4xWvaMrYxH/J/ntiDRfa+EsuMKx0QjPBfZc=; b=ad0WbcOSCKRQFJwZbu2DHsFoPHutGo8b7i9uxLuf1SMDEwfdyjP/o8scns9VP0OVpgBe+z5JfOWaJuChSfvVoFTOEdGCIsFRT3YarNqrAPDZyGH6b9He/eXC6LWLZTQOWYoIHs1XXAydOnydHPgcvpBZ193fq+trqH2XVqH3/E9uSiZEqIldJ1mu6aHMCYe+btpXFooi1AG3BgDtYZXlIB4I1fDWZ+QU97WEsrTmXOqgCHjxpYs8ahHx53mBloPbdjQbyFwUbWCMV/mN5vQdXLB14slIjyIhudIhfqD5fpPObgz1Ua9vYgnY6/ColfJl8QobCbWBa+PeVzQcNmyS2Q== 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=IUjpL7dC4xWvaMrYxH/J/ntiDRfa+EsuMKx0QjPBfZc=; b=K3O6n86yAW6owt27dCrgS95yEYvpZclCOfDY2ii6bJJTRd0JAaQyM/8P7iZ1ll4uI2xyamBEJ/l8q9lvazSKXJseqNiW0hbfxArY6rx76DzT1BRBrYb5Jx09tIMH3juDhN3NjWXGiWtWI6VkUuPhOag66TajAvKa7Cdbbxv9ngeT5Sr806bYj8djn6EktHIu2sAYHfFwK1nbjbuewg+Jb/dRv48yRiKYEbzgkt844kxeTuEmuMxSJmn0oG2S2bDiKDObhrioRtRHNB7QRBsn+zbzF/nSdzwVs1lP1TYPbmdFpDuKBGIRieSfHwuOqmJEoUjH38hEbvv+3E1jpmLrDg== 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 DM6PR12MB4106.namprd12.prod.outlook.com (2603:10b6:5:221::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Sat, 21 Feb 2026 02:09:58 +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.9632.017; Sat, 21 Feb 2026 02:09:58 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 03/38] gpu: nova-core: print FB sizes, along with ranges Date: Fri, 20 Feb 2026 18:09:17 -0800 Message-ID: <20260221020952.412352-4-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR03CA0017.namprd03.prod.outlook.com (2603:10b6:a02:a8::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_|DM6PR12MB4106:EE_ X-MS-Office365-Filtering-Correlation-Id: 92aa983d-4a6f-4e42-f5ec-08de70ee501e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?2xpHI5m+uMQ146j1P9/ySDM3lEsIk/D57oN5e9PM63oolgr/Api2ud0ykWNF?= =?us-ascii?Q?oZ+lO6DIDXK06dNg6IEzUyKGcc3ck+SGhWuUuZrp8nLgrqwTqsoZ8aTrnIxm?= =?us-ascii?Q?0QnmB90Jf9WCyQX2Mwb2jKYqdcyzKD/4fUw9Gn9HrLjHtgJYzBYnulw4I0xu?= =?us-ascii?Q?1aW1UI+kueGSsVzJpscCKN5/oYVVnBWV3k5KG9qGOLOcgb0EqvV0WOAEZdsR?= =?us-ascii?Q?FCPrZvIsX3KoreZYX16JO1UzvUolivyHgIEN7NgGSdK0wzBiDyoQExr15/Hr?= =?us-ascii?Q?6q/GPomYjCYEA9LvETiqPccns7jfK38HxchNCYNp9EmqNVAVDDBlNegtimmd?= =?us-ascii?Q?T87Fngd7EH8FLZndgzLq9pI/YpNsxqZh1TODuPDrsm/WeRbhwH5If3OQmIVN?= =?us-ascii?Q?7nuwdi1HF4t2IiFakDlxxstWg/RmSCgQqQ5W91tQmqCxBcSqSNGshpR6JwCf?= =?us-ascii?Q?auIFuMzpfG1NNiU3RtqPH9Zg4OAgx2x11SPZUvfRvko27ZXH3GwcyufZ2P1J?= =?us-ascii?Q?YKbZZc+CRJ69HVzjPWK+mZQrFlDbzDADLuZhAsD8wZYS2BYnw1pe0RDZ2j7/?= =?us-ascii?Q?+lGaJEmdFCxp6vn1Kc/ByrMg/TIU/lIxQYSkSwJ/ORBNjWG8QqlNSzXxLCV0?= =?us-ascii?Q?evEoCgdTZnvWm4WBOfEd+L8g7zgs0hd5yQHFuuByqxNs2JWIFddroKjgGYtY?= =?us-ascii?Q?bUx0/ZoAFstEdU+xhBsKoVH8X8mk9ZGFT+PM3WH6x8VcXzFFpMpudUQhldIa?= =?us-ascii?Q?GUa7OQKjUKST9iFp/7LDxiPF9VT3Kw1C+8Q7qUdVCT1bOb5cJ5YGIlTQTeHv?= =?us-ascii?Q?klYDaGjNMfYIPCiwHKV4/pVdbKeFDCfvsk1NoJCwPq8HKVcaxJrshMUU6ALD?= =?us-ascii?Q?cT7cQJ3LSlSFWwjl+nvTwV+NPKA/dKRKJ1+wOlV8cDOYvx4PhhpUtVcLh6Ja?= =?us-ascii?Q?a8oY6kcCAu6qzRUHHhMJg8caZgZn/X4sanfGZA6S+tdgl7890TsGhwV5mxgC?= =?us-ascii?Q?BgvHLeHa331s0fAwj2xW68VlVBnCsTk+CQlwHz64NJgva/79pYH+nJJjgfSb?= =?us-ascii?Q?ia1qPDGigVPQCMjxJwWRjTqe/ek3ynwEir8O7OgR2e/vd5k2U8xWNvP0wJJZ?= =?us-ascii?Q?iA2Q95FAbSY199Yb8BfX5DjqjkgNE75HLTWxm+ZUPpwvOQk3I/B6yw7uA2h3?= =?us-ascii?Q?kgdrFt0yGj0c0UVlYeBxdT3nFdoESvtm75kBAUGTGKLlUMNeTmExZi+Xbd8p?= =?us-ascii?Q?OgGBkIaOZ9quVcYobhBjSd+7EzeZcFkbfHN625yhLpPocK9Y4ZdN8nzPPDAm?= =?us-ascii?Q?EsSBaTSHotMPDugPg8wzl8pkiJNADqgG527JgBUOjn8PyvzkKjaQplBAkEjq?= =?us-ascii?Q?rxRbbaC7y7kuCbdTM9tLabHFmicpVYo1nFXsaea9ywKC8sa3eraACcZxPJrW?= =?us-ascii?Q?RVFY8HkfTTn/tbuGJwIS4Z+ePCSw0B5mzUP2XzGAeLbBJHnrskqqKlzhzgs5?= =?us-ascii?Q?MnovZhb9ngUJWoCEBuSXrspT6tUbG9Jbn52uTW1cSOnPJUzMXRofNaC3X+PS?= =?us-ascii?Q?AlLY8ayq9ZqupBJG44Q=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)(366016)(7416014)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?fsqMvjt2mxGhB6rIEsjXc+Q6BMNZ2wC4RcvVzKpN+Wtu9gpXWfAMmfaPsve0?= =?us-ascii?Q?OovryaIt9nxD2byiWT3m8XJ1Rldwtc2lJdijttizWVytJuC0U8EhwKF/FhNq?= =?us-ascii?Q?GMLw/HITlDkQaGjk6CJ2NSMLsFwB3PHobLo1XsSFUciKX7pi0FUTRQFKi0EO?= =?us-ascii?Q?Gd6mhCvAhZtoHruaC3G7PGcU7sz4vscMuvOBtS+MEWzpogjTbViy7ahrDmbm?= =?us-ascii?Q?qpJRfLK7a8s3DFCYYPrBoCrkN26K3pUv0Zf//zY5LMURhWhL6lOURAyzVKs7?= =?us-ascii?Q?sTub2SPtbetYE7PBUIKJH1dTF0e4DxfL82NdvG+/TUrDH1ZZzHbC5jNeo8qa?= =?us-ascii?Q?6gJcee0+/G06osKYTVWxE+R9QTDzleuXyZB5/G7vS/YPovcTOF1WYWKyrEn8?= =?us-ascii?Q?gO7SguS0TktGhRsiqWrzQ6UAw4Lx4O61npaCeRE925O5ZKqINexEIWgsqPPn?= =?us-ascii?Q?dYZz4sSumaHFBzBavg18HIZFjOAIUpEytQ6Tmn2KeWibFnDG99ZINYgkq0Ch?= =?us-ascii?Q?oLim+BDTyVYZ4h64OAWMGFDYGN+RJ5hdSfCr60/taBrj/Zrr2m29gBX+2s+7?= =?us-ascii?Q?ZbAAwxsPaT5YIZGim1H8AmnGBKZxHToGV6Lb8Jhk7/ZrjnvKEMGFPJNCAZkI?= =?us-ascii?Q?HVk7R31GDzkJdsebXLyiMmaL0KteIOZtPcay3evEN450dvuHZgPzpPKx6itb?= =?us-ascii?Q?+xYTostAb0dPH7wkxDNeP8JPRQteQaM+ngwzjuo5YRofMOvX6U6n+JP4ybVN?= =?us-ascii?Q?j1Juib9OilDH1DZdaVaKVgZTWq8rLUmriyqzbqDz2ppC/H4JDPYzBeV62VVy?= =?us-ascii?Q?/Q5VFIOlWqj4dgTyDRdm3bRL3KmeNBjLzWgxBrkSz1hCYhJdv6n56qPqwTlC?= =?us-ascii?Q?4p9L+1xs6CJXkK9TJmoPeBqiPhyVBnApNl13zJlLPaW4mO+Ja46TdkdCn7r1?= =?us-ascii?Q?x1X3PBZSDDc1J2MehTH9YA4xenlVb5u1+jGn+cgeh8AGgUqOK9gOzQVD/L+p?= =?us-ascii?Q?VHDut1EUXiplbaoVDxBsXBrMM4IJ6L4iVtKDOxadUptkCtZisbZOQ4ZOW2gu?= =?us-ascii?Q?7mnnEl0MTgkWeWrz08V293nJ/OhQaOwCPDLM5Pt1XuwwQFWX9hNzAOh0EHEt?= =?us-ascii?Q?gx2sZjKnCVla1/JSKdyrS3w40aQFmxufsLaljHm/Ft6IPR2Scb5fPuKtYLu7?= =?us-ascii?Q?RYyYmK5dSz1TCTZ6qpEwZi07FZEWxahUDgReZh4HNM+B7nQxW/UUr0DPny6R?= =?us-ascii?Q?XpzcyqJCxnUMH+IFeObrfuFNMTmnkz5c2Ohsg8XbgYT4t84A/8qQkcKiOSKj?= =?us-ascii?Q?EIx+6iJwWiLTARSNW9aWWtfh7PfjAEHUMWfxxk+6A2U1c9JcVP9efA0CCRsc?= =?us-ascii?Q?Q5Sn+E5nuGEFQYZ48DICMTGaWEmdIrIyu9nacoITerAHR+3uOHeesGeM0TCL?= =?us-ascii?Q?h/SmvkfCxyHsVPQ+kPvhmiCOFHIHvYBICzk3/sieah8N1HLIgJubf7HOzChH?= =?us-ascii?Q?Y3RjKxpLCOU68o2XLN/kiCpXZtRbQh68Mll2eKxJzQevVrPuNy3ni6dwsIF+?= =?us-ascii?Q?UfKoi2bUMU0kwiNvooLq8reN6lITSTRvkzg9I6zGoKJwNhZGVOuWLkXLCFL7?= =?us-ascii?Q?2ABSE2lVYV1IleLYvZkGfxe9pKlDd1elxcVKxxy6St7gMYbEmw7wg/QzFlpc?= =?us-ascii?Q?R+NMmvR0efq8kW4pYq8+bYT7v8/QcNe7DK4Up0cjgo2SNxR8EU19yWUp5YJn?= =?us-ascii?Q?uleCM30siQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 92aa983d-4a6f-4e42-f5ec-08de70ee501e X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:09:58.3016 (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: sBCs/B4tCDTa66ybNkNV3EJ/VbhyEzf9l1o5zyQhtjnsyKRcj9yGREyA6vppZzaO/E+sZGL01gmlZ6hxQ1EjPw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4106 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, } Cc: Timur Tabi Reviewed-by: Gary Guo Signed-off-by: John Hubbard --- 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.53.0 From nobody Fri Apr 17 09:18:11 2026 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11011019.outbound.protection.outlook.com [52.101.52.19]) (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 AD081328271; Sat, 21 Feb 2026 02:10:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.19 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639811; cv=fail; b=L9eqYHu08Q9aLnNrptstgqdC5hkvagMoH6MvASPa8x5IK53bmIEqQEjj0p0RC16nc3VxHq+fbw8Lsu+IkP2vmPffCyWqsHNQF1g79nF8wqOUaIACAoF/s2F75mPL3mZpvXptXlRyn6GjccVEm4jbeMdZ6js4SXkmy9ocxJrUeAU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639811; c=relaxed/simple; bh=q2EkivGvU2P+eYMLEqj//OjNGuqH2GbLFLppjoCPS3w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=br9XEcKaoGOY/am2W5aFq21/maGJnaTGCWzlcAY5rPMNA1TyZFE/AiP6ycLRJeXMsIsD+3MkdCvcvPOmvOMDz6vctrqdQiFqiTrLN5k1lG9ZjFGU8SM5hvTPez4aTUNCWeIDAwTltH/FGWCWuERC8DR2PB8r+FD6DvXiQ7hArXA= 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=PqkujFIA; arc=fail smtp.client-ip=52.101.52.19 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="PqkujFIA" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oYDUW8DIc8l4i7Ed2dbv+rxDrVJ4pOjpu6AS3hgRkKajHpVQFWX4pG8KBeSOv0BDuZNvdYUCoa5NXvKBu2P/j2jhQTwXsFdQO5NJJxPsezkIvYOL3nvj7UR74HijJzLQwCOMdf1Xirk4x/EKTN5KVJV1prmSJSUvJazmLS+8sosEahsdBbi3IL9bd106btDgOYGrRjvdz/T/LOx+6Rs41MD3e9oM4niXuBzAvX2XENA6t4GI3RVsTZ1TpuqdhKFHmzQrQt9Mn/1uy8HIpHXxEPv0QStEwMBGxOtAzXAfIGii9wvGqCX/JJdxp7s0PQ6fu2DvoQtMVIAMraoaEct9rg== 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=iqu6UgZhrGkjCuXnDtIVD6K3ja+Z2MnpPsHWJVPdRvg=; b=yCn6lH430HQRNZZcWW7JxHexSiGe5gEUq8F5PrJR6xOQ96/y0PcXaOePFVtEC6HpSQukAes5SH6aTpqb2a30siHredD0fWxVTZMS/ktKllK5wLwu4e4Cz6MVM/tGQSzf3qLPtlaUZ6C3Gj/CaTkmThqq0bdypPXG/4YcGcyDG9G9UWqbYxP0aQZsuKrxFTSnFmYa1FYXBMq2Rv7BbcdTvC8iotwMK65cX64A3A35TBWa7c6Hce/kVUCPonEQNL5wMR7iP+Z10+tnbbz8Xv1VchIOW8A2rFmP/Aa86vH/A/eWzog9Rx95GmWYRn/IuT7n6txtoSSqjgSf7DCjRRTmyA== 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=iqu6UgZhrGkjCuXnDtIVD6K3ja+Z2MnpPsHWJVPdRvg=; b=PqkujFIAbTL6n9U+H+RESm3yd4w6SyfqeGgSAogq23GHYexTvqnkEN1bIfKNq+gLagYpS8FdfMGi30GuTAjmy+diEMwEzdX+joZn7wF/BKnJOLg1Wp0QLB7bSLp3LrmdAaq/GHLCFCV8Ohwzf2shjOdBl5zKmPGIOQv91r+hrKTPYo+3vx3tFeBCYymuFKyRlddS4OgTgNtxc0Z4nY3VKeOXvwBdFooV++l0f1aKVWpuT4duYtVmVjJ42FUsYJW3A1gnqftt/G96J5ULgYQLoKJg4HJ1PQQWlAhDaZTgucfhLQX304BgmY80bHAJm9weO5DWq+8FMEuD18RSaRC93w== 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 DM6PR12MB4106.namprd12.prod.outlook.com (2603:10b6:5:221::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Sat, 21 Feb 2026 02:09:59 +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.9632.017; Sat, 21 Feb 2026 02:09:59 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 04/38] gpu: nova-core: add FbRange.len() and use it in boot.rs Date: Fri, 20 Feb 2026 18:09:18 -0800 Message-ID: <20260221020952.412352-5-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0143.namprd03.prod.outlook.com (2603:10b6:a03:33c::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_|DM6PR12MB4106:EE_ X-MS-Office365-Filtering-Correlation-Id: e75cf30b-894a-4aa6-6a6c-08de70ee50bd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?loomnyRflEfJCi1CVX3Ji6e3VmutX2IFeKvrtyVe61Cy50nW7ZGnBFMU728s?= =?us-ascii?Q?GyaM9GzQmzIYGrofxS03dxUprd9jNwGRTyth7vfqx7l0DnJemy5svXu9I0OO?= =?us-ascii?Q?7m2+7qE9B5AidSWadPj3cQQasrxnJWoNOBJwvrTTMKdJKdUsfj/zVcpsNwHf?= =?us-ascii?Q?a6j9/OoTl/FRgVlAfdvpJAE21m37aOsHY4bMFKU0l08GHIvhHLHXjDKXBUJZ?= =?us-ascii?Q?GDahk97mSFnjLaFcJM+PqZ+ZxpurIbGPHlf4PplMOpWeJB9cZqrxS51xR/Ae?= =?us-ascii?Q?tmifHIQ4zosEOdyTOkHDWhTEdJdCrP2vYqUHMmcKkNu6BVZnuT3/20SPApeZ?= =?us-ascii?Q?m4g0MMnuIR92+J5FdeaTjsy1M7Le4YRx46/qUSDF05JkyPgWA53NjVwM1N06?= =?us-ascii?Q?BZpFO9kzdMedoUmG70YzcbeK9FfulSkXySLDpsexdTUZnfHL9tLgPS1snaSG?= =?us-ascii?Q?Cp+Ph1plBXQxavCPlTYo7XJDspGAkM3KAc+rwoN65WNHAT1l5xyGun2LBa1k?= =?us-ascii?Q?UpkKKI79V5evdz4gbrJD0hLgEPMuP/57/tv5I6ugYOiz+AqM4eXknbuXxUc6?= =?us-ascii?Q?7wSSnZng1z+WmTdkGHtKUhfdisu4m7OHf8vYp/MRrHx/O9790BTLY3DFTtlu?= =?us-ascii?Q?w26YLsDlMt1GFq4K1BC4CYMSp9FNMYiJ4F0x5tfT5RN8a0ZajuUFQNdiUjtc?= =?us-ascii?Q?iMWqXXa21joPB5Su2fqvhjXcUVyP0ORq4bMghEkoQfUmBh6sAWnqIRv5UUXa?= =?us-ascii?Q?yIynwXSzH1/gqh3Jb2ViiSYocl489tWYUD+Uw4LB0bXUhrw15nGJi+JOjH1u?= =?us-ascii?Q?I2AVZ8I1rIiTg9tgTT8fM4t2A3H9AZZ+WAwqHAhosWg7qdcbivgoylfNVBiK?= =?us-ascii?Q?kc7rDZskofjDWA1CqkXfU4j6Ab8NdUWWXehSPbLQRYw3Trokhyrl7flCnMiM?= =?us-ascii?Q?vBbCv6k96Go5YdknUDR+Byvvs7d8oembmq2N3yaokAyYpmVJjcr03Fp/Q05Z?= =?us-ascii?Q?3WdDPqa4n7GJ+UDT35U2zXiOn+174DAL5Jg1PdQ/cGKPPpzsVTrAGfeE6O8m?= =?us-ascii?Q?1M/9lCAf0VoVQvOzncAo8ch+AQEQNItVbgLCFi/ys+mhPyBZ1bB0tzI/GSrp?= =?us-ascii?Q?voFbNzRQjdI4SfeXXuqp8meJX4yfAN68CjrAZxVVJCuzVM38Pj4XPCGt/z3r?= =?us-ascii?Q?+IdQPFYj3VEufdTo6CKrATqHZCdnHC07IhS+6JtG+RYU3u7b3g5u2SCBXS1I?= =?us-ascii?Q?AodugZ48IvdENvmtxQs59ENxhsH/4RIfCOh/7uCTxq4poZ209pUHSkfaV74i?= =?us-ascii?Q?TqwsZZVENn8gmkiGb8/4Xszn+cS00Q3dWloAVqMklgvBbWmQxZRIUL+ixDdY?= =?us-ascii?Q?Fg4wvDaIwum54eoKrlenAUtoG0xhFGJHTJy704RJyarnL6Y/zdOm0BT4zJhV?= =?us-ascii?Q?ctbbuR8vdY7xHnryFag83EJ0KnV15O107ThfbRw6cd0Eb41DrOncDOWRwBKp?= =?us-ascii?Q?lAyLgC+N1YvtVPahKJwks0nj75DcWLSegX5gaBxzIJLoyKr5jKJktGsrmp8d?= =?us-ascii?Q?q8og/9UN5vSSVmsX470=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)(366016)(7416014)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zbdjHPaaX3GG/Hu9A1Eo50h4rsfqWp7XYbYOSuR1PwszT6/CtUu08kwiaigq?= =?us-ascii?Q?GSQiKDzVy6EDLZ7dHIx6gsRnFeNaQbTT5n8RjN8H9SuxJTIKmnP9t68GZSM+?= =?us-ascii?Q?11ptypdPxRz1FO7lh5ETzkPhwokm1U365aqB3LQ32vIGy2MxDf7ydGVpH17f?= =?us-ascii?Q?KCtWO/P5fm3LJJfpo0H6ybh3zesyCSL9i+pWY2y2WU/WfouyHkdqcxUTA00M?= =?us-ascii?Q?XGuT4M4rEa0w8/VdOcU2h8j8WAPAE+zvwOch7jA8th6X365SmMNokyF+qla0?= =?us-ascii?Q?U/0AQKb8ZERenRGRkfsUHL/x7ZoVrN3oflm8qexpSERTOm1CE7qDOpOKk19z?= =?us-ascii?Q?sA4tjlarr/fLNyNk8azByT37NJnY2S7MkBzclQ4WPS6/vb0G2/4lSUEk9aqj?= =?us-ascii?Q?ECfvADAM/+EKXeScW/Hq7uvCugRYTOB9hzXBS65wd0g8hsx7fRgQXXl7JJ92?= =?us-ascii?Q?Qjx6PRdEOfPoQoD3vRPdwvYJkOBeDKnbG8S6CK+2efjY07T6jhoH2Mog0CRs?= =?us-ascii?Q?d8GUIvgcZD/o7NWCm0jWfq0oxccIbkoZNuOv9C7syVgMioGNllb3vvC48BMQ?= =?us-ascii?Q?mzSPtX0ZAR+d5iiN0ZBotSHA13tMV+27jUaKIyhRAii3wC4NN97FTqXp3nba?= =?us-ascii?Q?PmeRboagvsmnwzMR1a0hK8iBVJut37QqD1CMChVXdg01Ub+/ZnzlUnGloHRr?= =?us-ascii?Q?B5UwPeU0PKS9VrqKeuQuLKniS0pOQGYLVpao3/0u2AXi53BcZAZpIYGLbPdJ?= =?us-ascii?Q?y3qDk3MFvIoojvOtP756m5lUZCMJkQnrux4CA0cbIiOqCPOsBBj531qZ4Wh/?= =?us-ascii?Q?NIYsWr6iALat6ZHT4+9AjNkgEHW9a5Lg5X1+ckIk4zvFO4YGmXlJ3gSD87jV?= =?us-ascii?Q?lAe7RenVIymzD/RYQg/itpz6yVg2euwQ5B1Wriu/QngsjIcQGJ+XBYhBJq/X?= =?us-ascii?Q?zQQ5LboOJ//HwbG2599z4AWaJmPGM9GHq7n9jZ07EYdOstdaVbfsqTNlWqXt?= =?us-ascii?Q?QyqYhk4ZoPr9zSaSGrNdJgfrEov9qaZjXpRGNEqk3Dy5XPMTq/mLiOb0evQp?= =?us-ascii?Q?Et6bbxZ1T0RkRiTd93GlVMJ9J4+oxLppe77CbO0sYl07J3Pq7rxuE323tUXQ?= =?us-ascii?Q?PgMWFX8B1KZS//k05/iFfs6LmfSl5O3nfZCAFlnyB+BDKueTr473fZe/iDF6?= =?us-ascii?Q?gVA+kM7oPbL0IBjdKbWurKOPyqTyp/3upFTeLgT1mm7TWzT60NR5sBQ/F4HV?= =?us-ascii?Q?7O4EmspFbmZuvt8nnGaa4225LK8m5L5lmh3UC564D5W1Upm0YYyyrYJQLg3l?= =?us-ascii?Q?CiMmpTiMpMICxFUlvYDU6Ky0DC0DCQ6p7GGOBEb2t82OwMt4M3lb1hxM2ZU4?= =?us-ascii?Q?/M+y8q4SZGgU8tqFAoXcGkXNDtrny9Hx9c8afxmLwqnvL+4kYf912TVn7GLl?= =?us-ascii?Q?cIq1Dd/7B/fSbzFWKeDvPb7AhqhfQh9Hcte7jSfYyM7BzhYTU0Im9R8Wwhxn?= =?us-ascii?Q?jTWvbn0iFc84Ni11sajGqAgjdvc7AMH1N7/w9GLWklRq7OT2EpppI8bET2DU?= =?us-ascii?Q?1/s801wZEiUdv1l69Fc1hzUPUeqAAKLMg9gMskzts+jZCmYSPoc090EaTlsJ?= =?us-ascii?Q?0ZPrfe1ZD2OXXOeI0V/WRTmME2Zs8lY6Uusex4c56ftkl9WeV7et674E35n/?= =?us-ascii?Q?zdvphdcd0FfaRm6bfAWN99USa9tt8Ng/S25crkKMgAV9cjex5SAHYmhui4zS?= =?us-ascii?Q?cdihgDCDDw=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: e75cf30b-894a-4aa6-6a6c-08de70ee50bd X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:09:59.3710 (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: 97OtsWJJcDMVoXeA5jnvjCC0dXvdYCKMaOPDkfubZ8Ayl/2h9My3uBIDdmKkTotMRjWhTrVjPPpTJ2d004QRNQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4106 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 | 8 +++++++- drivers/gpu/nova-core/gsp/boot.rs | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/nova-core/fb.rs b/drivers/gpu/nova-core/fb.rs index 6fb804c118c6..6536d0035cb1 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) @@ -118,7 +124,7 @@ 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; + let size =3D self.len(); =20 if size < usize_as_u64(SZ_1M) { let size_kib =3D size / usize_as_u64(SZ_1K); diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index bd6e6dc57e85..465c18e4c888 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.53.0 From nobody Fri Apr 17 09:18:11 2026 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11011019.outbound.protection.outlook.com [52.101.52.19]) (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 34D2B32861F; Sat, 21 Feb 2026 02:10:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.19 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639816; cv=fail; b=iKe4d3ppqO9xgTAnvCW8j4S51qBSdldXAM+1pvpOqk+r6HVfyxazskmbP0bHZ5V19iT736buL9r7SjXe4jG0/evPbfyhGQPn4rNNiNP+WlkB58cGuzyW5f8TJK99te/Lj+2sClji9GtiqqsMfNl3odREF/hPWMSes2M7S37Mv/o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639816; c=relaxed/simple; bh=R5LnVhHLm/CRJZMbBvKOYJ1tbfnxb7I2i5kp/KWeyLQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=uOfFTmIj5Q/aVYiSeOHhSOMHEj2gaFSiSiJyZOHsPooUd9ma/8hvQIwTxBuyLoJgevPuahssGDIJcYdvNknOvYXidKSSx9q8PFNsxNQVVoKp4AwSTzrzw1THS3QEwGs+7At5WAEu4/zEBeeG//oTIZoPqmt3k2TZSMHEdJlgyvg= 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=qxfR54G5; arc=fail smtp.client-ip=52.101.52.19 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="qxfR54G5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UezKzdqYVKu2A7y6/dAD8t35f5Kp5iMIcvqWqMwgRz/bsjBXh5z4EO1G4QS5Lrftopj0IeGuOh7t9/Bwcg8g6TwmYijPj5vE2u2NvwrSolrY+4j+Dn2SH2hGrb1eqEoyVAyy4EQro4W/DtRpj/plDNxxahTsXD6qphpfX2mPIDfwEpNqX05VWhMhPE0ylmgdma6TiyTeMpVDm1iMghCVOiu8Z/aIoU9wm8oWC49/YWEnNisKmi76yzaZ7TDG8qCrlkOtGDxM+5a5IL14Al5vbt5xC19yvnmq5MIUOI2X6sKFJ+vE/aJ56BF4TEDjlWmQYUciB2IHYQ5Ln6SIUMhKbg== 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=L5Ytf746wD40+nTjA6X1Ba/BOgUNz9XKKhb5JBHFoHc=; b=WoUsSG2FwJabocSPPUz08Uc0arXb338JtAlUq19QXyYryKTNWnqLtFkNOuny0i3ItuyknxewLxX+ELGgxicMsn3wy1URf2PLXE7yjcz7Xn1AdttfqQpVAbhOMk+bWaI33QGwgjUGWvYUEdD8C55gduXcmoO7jJgLCqsodsLCMqhIzOwnYeJqMfTWwJUKliUDT2swztiMgjiuGEublqufUiuAj2OLzEBBDZP+uOrV7bc95tkzmwhIwHEv+DWqMoAcnFwTqyADIWuMddqMSGVurKDzpqt94diFYcMZMMSvBkWiMZ0UJs3dJbxQ1ohIaysXxis4kJKfb1bZoJPpEG2Pyw== 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=L5Ytf746wD40+nTjA6X1Ba/BOgUNz9XKKhb5JBHFoHc=; b=qxfR54G5Wn9Reou9g1zyr+8Hz2L4eouZSTb74IANYSs9HNXDfvW04rpHQ+trZHepUQ/YErHdX7XhdVF6tHUxBr+C62dh2AAW1HygiP+X4Lb0NI4yod8BJSxMDzOvGkdHRQZrcDs20JyP8SI0Bk0xnRmBdjePWk8r73QEN7nKNktWZxQPvmhBX5mbLIMec7n771An0FSQfIvwXKw0ZHGlHFPfiWdvj0BYiv/cECWCjdAz628/GjJZM31RTs97x/P2iCEvPVeEkkCC6xMvNttbrwLWhXZdSORymPPJgRA/iafMHrYZfAqxjMTFh9GcGWlpUHSfOp0cG43+79FkG3Pjeg== 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 DM6PR12MB4106.namprd12.prod.outlook.com (2603:10b6:5:221::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Sat, 21 Feb 2026 02:10:00 +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.9632.017; Sat, 21 Feb 2026 02:10:00 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 05/38] gpu: nova-core: Hopper/Blackwell: basic GPU identification Date: Fri, 20 Feb 2026 18:09:19 -0800 Message-ID: <20260221020952.412352-6-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0149.namprd03.prod.outlook.com (2603:10b6:a03:33c::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_|DM6PR12MB4106:EE_ X-MS-Office365-Filtering-Correlation-Id: 60b073e8-98b6-4ddc-089f-08de70ee519a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ggQzi47vt2n+3oGtVloYKVla41Y3jCgeTKEbDFNpAj437EGy1sH4wKXys2K2?= =?us-ascii?Q?np+rNIPJHXzYj303LUiwjNmKfe94c8H6KfSsmYCg7Rrwd6pOQ0mWbxKOyQ2g?= =?us-ascii?Q?+QHx0osEhi8LWmgwAofzxN/rhy/75qdyr6YudCrokx+r5nhGcgoL4myGVoTf?= =?us-ascii?Q?LtlC/PzRJHYB+zYrEK/6Y476Bvd3/DQe5f6LYl1SgdcVq7TN29aEIWvVIIfc?= =?us-ascii?Q?TQtqGu99iw7MBV+hDTyQy0tS0++emfp/UZ0W2xsACtCDPgfGoGg0WVor8hyY?= =?us-ascii?Q?P7vD+vJCtSp5YEM3+3HyH/99tvuwvCc0D+x+H1aNZkUgzLzZ/65OpQa6aZx7?= =?us-ascii?Q?lz4t8LT2N+wfQq4pfe7cW0NFczZzrDeU5UDU+iiy7fXlA2pBobR/Ep5vUKmw?= =?us-ascii?Q?NxgXT+ZJSqiOzoRRY/0iN0Kjj3bR4p2/OF9s2+nORlL1wiqsmM0u2I5V2BPY?= =?us-ascii?Q?cy8owJ8JgWHvWbz6tZM4Z7wdMjmo3/JMJyvW7HdekDf68Ug/xJY1b79A7bon?= =?us-ascii?Q?PkorRJvO8pKuHcpTUNme8ImVMHFxNAEdupZeWHUQjEMXjTl5ohO5XOasj8J2?= =?us-ascii?Q?T4taXUG1+FEa7OY5zAt7c78PcOlpB3gnohFRQE6e6P6SYnTXRQSpYp/hXzom?= =?us-ascii?Q?lQvdZVLZoclssL1xNcPs2T2oqr8vPDdeJrvvfKiq32/zUxJY//0Hlgtuv7n2?= =?us-ascii?Q?jWG8TFm3pQWaczPSwgF/nHywPJ2TyFPolaElEAJRE5nPaWTiycqaasoWudit?= =?us-ascii?Q?PsZ0FFNnC7+oCX9bcTsFaH5bFfOOtPi1n3W8Y47+XiIDiw3HmB10PqJmVJ8v?= =?us-ascii?Q?MdEe1ocKwBiDoHnQBFXzIJrFVlAqnvXdYtw9vYoSydo1BJmgfaJBuZhOhJcj?= =?us-ascii?Q?cbQfBORLtPJjzBO7s5gB8t2K0rEKWRUZx7lsmbrfipyGLAG0DosdZI9bTaNL?= =?us-ascii?Q?WoSZZP9OHZACc3p8GIJ0YACqGtMuh6gjANS3Yu1JD6PlFEYyA2ydlUhG8tdc?= =?us-ascii?Q?QhqchSqffnlvw815uZKNKCMtSw9oRyguG1epBrZ2bgPZBnL5AdyjVZeyNIW7?= =?us-ascii?Q?RSU513mHLT99bhMTwHPZ59vGZ9Cu14m451oqiSFm6NKrkwD/AxXgz+Ix8xtw?= =?us-ascii?Q?Frzh5Kl3hq7nvGIf3ivalB+EmvcRKdevckVCp1PMM0qgNXXWsTNoLn573HNw?= =?us-ascii?Q?e5hBVFaqu2ClJrUG0z4RfxH5a8popfLAFbzec9qVD7hW75KKXIx7MJ6gQF3c?= =?us-ascii?Q?pgShYzFe8N0KrggOw7GuC7xJrpO9s/3PQrlHHUgoDflbjV8xy+PoC5ZCmooO?= =?us-ascii?Q?Iz3JqX4/GjqQ3QNxxp+mDgxrQiT/jqJtTb/iDe28NuewrjcO13WSVgjpyO/w?= =?us-ascii?Q?N8S8RMyNHQHnEMLz62uZbXz4tWfinkMEpL3wsxk2nTMVWa5ZHWtlYmGgUfgJ?= =?us-ascii?Q?24S6TGuoAGW8vCRJyv4ggseSysI+9z2Z4M2r5/PZgUBbZrRN1KwVP1H7iNh0?= =?us-ascii?Q?5RGSXsHpQQqfuomsRaKwREA600ny36B+eS+ZvPDDiMmP2KZRVz7ZXeVveKpY?= =?us-ascii?Q?ukeBQ95JqU7sdjFrK0Y=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)(366016)(7416014)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?GSONqKL0aXZb7jEVb0AJT/IhsIlA6KNQQCw1TAyrpRimolvHxHBujLclQGFo?= =?us-ascii?Q?eymUvljAP/8YhkAMsV5I0byDOlyg3vEPkdWh7XFF+igNxaSLIpJ43MoFttnq?= =?us-ascii?Q?SgjBpgwj0VIz9n/ia1rIdErV4YEordNcbyuGV4ySMLOsRLs1GJYao0v00y28?= =?us-ascii?Q?LEvn6qoBCliocwl0og/8Ou3gwn21harNVjrp11pRRbwOJ7nX0yDFOl8mOIl4?= =?us-ascii?Q?gmyU/Z86bNnIXp13UslbebhaEgMo4YwQLD/e1n/q0g9u+c11qRoXQXlop4H0?= =?us-ascii?Q?HgJw8mM1FQosPwPXPh5tFzaoSknP6+TyvCJGaneryZvM9b+BxvHwUAa5QMQ+?= =?us-ascii?Q?bXSIIHdqxEj/uVnDdiWNZXkzF3AZ79BqfwpceomZpOy3YQjJEB+VZHz8Qv4/?= =?us-ascii?Q?OBnyPRmCrL8Okk8IkdHGKCwTaPiDbPfHr5+NF1AMGHTm9P+e8GxshxKh78lA?= =?us-ascii?Q?nA6eilanvNGw/Ohv2Fsd5fHgl8sHGIMcExvpOr+rcMzArEtpdjz4Jkilg6uU?= =?us-ascii?Q?TdBA71q3DtPyT5dWqG6qrq2ndZUYZ7SrSxOOJXd/bIwD04/0r/BItbxcn4s0?= =?us-ascii?Q?zSblGr5uIxNNRYBvFc28Hs7wTzKFRbvCgPXzIJxr47P4duLKCQvpHm9/xEhA?= =?us-ascii?Q?pLFL0yCIgMGQrju3v0y2Z0acvXy+W5/ejDa14AYHzZ834ltE3VbYBjQjvJN2?= =?us-ascii?Q?DNpFqn5xumZ+N08OHYRkYRlB9x6mOC5CkxtIBqxfdod/9FHaq1G/Yt21aq8d?= =?us-ascii?Q?z27cP7Q1bWHdtegGaAw5b5QToGKnCBKJ6QwOgv4vj2yxMI48MUU1dKY04x1R?= =?us-ascii?Q?rsk2XeylO0QPqHrp56bjl+ZleaO5uw6xlXNLLQYoLZi7uHnBc2cceNsp4e1y?= =?us-ascii?Q?fFAdLG+zQGmDQkBFFIcjdDcOI9ELUKpWObkmSutrt6+ffJED3T1DbVHSACFy?= =?us-ascii?Q?U4/XDhjUo6t9gSyCnd4tvVnUezpfnicPozG95xWJT2iaymYYFTGDw8umNC3C?= =?us-ascii?Q?3p0ivkfAxBoH58bHahb1xnsLXVvg0NtGeILBfEo44FOqj8g9hXqv1uDGJd2W?= =?us-ascii?Q?ifje7Sd4Q64Pg+7ZG6+5XP53Vf9y5ur9T5h7xnIuya5pueVOLxs/FrjxLHba?= =?us-ascii?Q?Ubo13FW7LMLj7F0KeidZI451kAiZs321awdDHN6qYJwGsJ7CIdreFDVtj4fV?= =?us-ascii?Q?BqqbDI24cShwc7UCyRpBBWF9+Sd2h1PEbCb/WkJ4RPg6Rtm4h5A3y+cC6Zn3?= =?us-ascii?Q?Owb695wK/h0MxMLNwOYh335tEtCauyd911qM190TawSd/rvfpyJ4w9OepZce?= =?us-ascii?Q?1pAw1Vjzy8cmP67s7j24cP+kiDwuNK+Z5ZpPC4zWKS1c8MTdl50flUmx/iDX?= =?us-ascii?Q?cmOtIEw45rRD6+7XhPeJztCbv0s5tifQWah+4DmGAJ5nJsDSqtKxF2Gv+TLQ?= =?us-ascii?Q?Bz2hza24KAWyPlz5irvmr7Eek6ljgfjjVDyt6XF6bQMmb7N/gDk7OmVQDSi9?= =?us-ascii?Q?aylsGrPahLd1DUbcwdS5N++uZxD27ZjEl0DiX7ckodXHhXMaw6J6YTqtRVZG?= =?us-ascii?Q?zm0zAEEGWma8HIH58bjcfqVWtDgbyqUdOghLuyPM/yNCatdf0VtVFJQKtA3S?= =?us-ascii?Q?ZG5+3swRMwuZiKrjfNMgx+UT0qU/UGJyyGrg2UDupNWtq6lnFdhdoSn3spbB?= =?us-ascii?Q?o1lxDHFH3zPugYZVKvJujPju/aLrzscsqs8hsxUxx0u4KcnGXmEROpwt20sp?= =?us-ascii?Q?Ps0mtNn5mg=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 60b073e8-98b6-4ddc-089f-08de70ee519a X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:00.8275 (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: C/Jw3KLkw7jiKQSPZO6FjkN5aOLIwVJyJlGLlwt5e8upUJcpHME+dn8ESFCzgC8VM3aTjBJ9cml1obpIWDF18Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4106 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..e709affaa7e8 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 | AD102 | AD103 | AD104 | AD= 106 | AD107 | GH100 + | 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 9488a626352f..bc2243450989 100644 --- a/drivers/gpu/nova-core/firmware/gsp.rs +++ b/drivers/gpu/nova-core/firmware/gsp.rs @@ -222,6 +222,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 f5907c31a66d..b6a898008a59 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.53.0 From nobody Fri Apr 17 09:18:11 2026 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010002.outbound.protection.outlook.com [52.101.85.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B5C2E32573C; Sat, 21 Feb 2026 02:10:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639813; cv=fail; b=ql0ysr5PWFfkhXsQyRBvxbWeXgcz1O+H7nhsMlJVMAYkgyxxQtEq9Br78msMg2DzznPsyz1Q8RPr+WFTmREk0gYtTUUtYhWuvl2AyWsN3A6wCoJINhJVh9Ry++C/DuEsBwYvQfg/2tZWeuW244fBEbrmvqXa5a0KFU+bNb3mAKY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639813; c=relaxed/simple; bh=k+gpqAeUWYyO5kBTqMJkOzBX+/aocEv+vr18ueDemaU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=fSlG+vMCDmK90JtQxubtnLpcg18YfZVRVvSvSeJNq9c1GmLWa1nlXpULqaKzu9QsATpL2d0qxVtpmnS9oEPST6QZAyBphSIHgNjyv1kxEgE4CVnrtoZ6s74E7/7Pch77lpjOCU56KV3wKWO6LnbdKmD5OudOqv9ZsX+1pAxQ6/U= 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=HcxJKUGz; arc=fail smtp.client-ip=52.101.85.2 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="HcxJKUGz" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Y6RbtaWcxzlQ57sCO+a+v1hfi20Kc3oBJndEMh3JGPElLV89V58cyCky5vVbEcATMty7RxUFve19nLbf4s1kkn49kGgvEd4QFr6FYCGuQLXASgI/v3uSjoPBFfDXn7tuUpvVq/bIgxC/7vXCxS3totbZVoHS6ZC20TgbMTw/Hentd3VCQ54r1VPtldG8SF12yGqZISCkBvQc6K25TQ8/qOLK1keFo+J1WqxEGYQLTZNwGTxmi8xaVz0PSlurFM08it/euR9xH/8Pjw5GgX4cBRvgaOZw2JSZehX8iRHKXG5amdsBNrj/TAtrcAsjWqRT59iORiNJUff6dj/xkD5DxQ== 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=g5wxkVdqhigmMDDG5jyDgU9y0kjPNH6pefCIZy4Bkyk=; b=VEFFcn9jFXqAhHk1lQKzrepPEbguOoHtTPapvKPVpA07dhcwyPxlrQP842TmPHs7pcJfoGGrRJenRetW2moierVai8JFoyN0V9Qax+VAmr6F6sADHq1myZG+PeMuJsnajRptwvvyxiCim4lXarFnhENxdnqHeXnM4NHbRIv0I4v6kiKiglWK9StruJzXYAYgE27KaL8syTz79IdAmyR3v4JB/vWPVM0tI/dCmeOJzpzUBUZMJl9IFeENFam5g0Z3AiV0krBMr0FHJfEDLwWO4iaQdsNNgbPrUYBwkIvgg9KgpuRl+ygagWHbqm7kp9C0XbQpu09uHU0RB621GoTXbg== 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=g5wxkVdqhigmMDDG5jyDgU9y0kjPNH6pefCIZy4Bkyk=; b=HcxJKUGzBICEbRxUc4D8QCJ+fflEcdOG+AtBD80WNfqCRl01s7Z6oMxakc2BR6VfsxeRYA90ehyZXk14D/DsjPWC9cqH7kV3pET64Rp98CqxMWEBp9wP2V/OohIY6y90P/UHsebhtkkteKnkqCU/e00HTPRPjtYrSDRoMjbz4xM1fvTBxIGDT+J7ODoJ8H8PHC8LUi+hEwCT7/9EMSsWnUi9lgoZ16NO7W57QVZCU6S6KTB2fhCRRAOd2/qEzmpNAaR5u8tcbouW1xlh/z5S7aYdPM1ICUMSmeRgLZsvhZtFC+rlWskHoz5q/sC85I2O1JVkXkAYnTiezgUGN17mnw== 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 DM6PR12MB4106.namprd12.prod.outlook.com (2603:10b6:5:221::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Sat, 21 Feb 2026 02:10:02 +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.9632.017; Sat, 21 Feb 2026 02:10:02 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 06/38] gpu: nova-core: factor .fwsignature* selection into a new find_gsp_sigs_section() Date: Fri, 20 Feb 2026 18:09:20 -0800 Message-ID: <20260221020952.412352-7-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0126.namprd03.prod.outlook.com (2603:10b6:a03:33c::11) 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_|DM6PR12MB4106:EE_ X-MS-Office365-Filtering-Correlation-Id: 1acc85b0-75d8-494c-9767-08de70ee526d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|1800799024|376014|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?B3PtA+9wIoTsw5vII494fAWEaZZA+YyrY8u1nh7jqQYM+37VWUYDbC3rQAhi?= =?us-ascii?Q?QiAK8BId99HE8IyXgGKXcv/YbdxX13/YeOkg/gj4D/k0+s4INyj1rB+/uKSK?= =?us-ascii?Q?F+dUSXuS6qw+Q9nXuyQprkKcbCBkL1duc0iLiTaJqDRGBec8O/VneCZctuBW?= =?us-ascii?Q?IdP1c9j+ot8hoDwRwnpGQZ43/PG3xVmSiuGkSL7DeYVVD4Hxl07zi/y0OsI9?= =?us-ascii?Q?KER3PH/pglZYJjEPjscU1PgqdDPU4vnIGooTwMN9sxtHRh2QTS/htey9wjBW?= =?us-ascii?Q?ofIrKtC8izQ/Mc9u6BqDNexox7dqlBr2fcP9/OXxTxgZr+F9mn7PosGnSUVp?= =?us-ascii?Q?6slxywpdvD0XopNUJcbBp7b4giX9kKcnZc2Ep5yhEVuNM7xiuz/hQwB8Q16l?= =?us-ascii?Q?TTe6QfJpE3JofqWGxGRsOvgUOMOpuezaJgUfH500LGa2i7Zm9YIkVDM0Jpb1?= =?us-ascii?Q?utBMCn3vHIWP4ZNiH5a5rFfoYlgCkui3LkYU2Z5Gt7nC4T5gZfElBxTSfE7u?= =?us-ascii?Q?PeohtBp/zrM+CHEcVuu1ZUQpHPXBXIYyoRBAtVciALuo0xVfGbNWbF27XQJ7?= =?us-ascii?Q?PKU+rCbGcd320SLTB5RZfAroUMIniyf0z74dXEQs9jMrDVCkgUJndDacjkEb?= =?us-ascii?Q?IacL64ekaky4IJx4z2nPoTaFtF1bzlqC0yvHKXJ7FVytk8WsUfjZQPIyArpL?= =?us-ascii?Q?iDkz/Mu2II6eLHP6aTQ3sOkObyeZ15nk0sCgE5k07/fznNij3QbnOmnkswrI?= =?us-ascii?Q?L7NoHIZ2QYdzXaoErehtEdLul01/+0labC3OYoCdJDZ/2eA+/qGJv6Fb6992?= =?us-ascii?Q?1hbQT2l7vAmGdBiWrhWrCrtNlgN8cnbjmgEkNb/KaOy5MGtKCZFfyuu2cnlo?= =?us-ascii?Q?tKl4hogX0idix0JdDjO3VPIko5A5Lx/uA/1Vwh1QH56szXnRgB3Nf8qZ+vO6?= =?us-ascii?Q?wwLfZH1pHtYKBIK2Zxr4/5WiNRbfnd51wKewqxs+KVsayDLGhZNATRj/e8Wt?= =?us-ascii?Q?hIrCUL+KZOhalLWxMW+lDk8H1j/v/rX7eA3YGRNkNC0x39W+FTn1BYU9amNM?= =?us-ascii?Q?0NBD9sAFYC8le2+gcNafge+j3TnAskxMlXTPoA+IEni3gDQxOfnDdXj9ulTP?= =?us-ascii?Q?9WmtPgUOH67FRrs9VhZ6BDRM9d1JGMVQ5j3fUn3zYVXS6d3bnh35SzHSu4vN?= =?us-ascii?Q?p949tN65919oW6cIW6GUFA7vjdTZbhHQ7ArPvIzQupKCC/KgYYO584mnp5r7?= =?us-ascii?Q?6AkiqJjkjwmreBOhUj1QA8mNs4b/pe2otRTPQhwvNcBHwoYwozofxQ6fphye?= =?us-ascii?Q?4z37tKdR/Z3vAjaIWUi60aUd1yneVMKlxQBV9LREd+82Kn8L8Ka0sEd1tLet?= =?us-ascii?Q?QfM91SuBN2uW68MNylsm7qhOetOL4XEJs5JLg9Ri9l/HsRuabks2CoxcKWN2?= =?us-ascii?Q?rYS8azHh3dclPLbw3dkub0kuPWY8BFvj6uKgYw38+BsBoejjDgBaXoTc2HEc?= =?us-ascii?Q?31Cz/7cY8VuYSBXekMJXzJAZbqIlGdtBMzZbnWP0KXT54CiDE3qUNyW+lX5U?= =?us-ascii?Q?SA/+4G5KHle3BqoR6As=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)(366016)(7416014)(1800799024)(376014)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?hI5ycxHkEbxgQYQsaHRAdhnsn4WAm1aLn7N56h2xIoiAfvJoFu/mWAm8zs6A?= =?us-ascii?Q?XFf0FfOMxknbgVar0xBpCYyNfhUXyfAKS8vLf3gVu/4eiLCKLw3sKo3rFEi0?= =?us-ascii?Q?xzBuitkVn49tsK+V/gM+2b1Vp4JNBCuSMJXkJot67vpT6M6bSxQsbgIJ4IIJ?= =?us-ascii?Q?LXTqll8/TeDIuZzkcscY9oLXZs+P4+VGzTJRJd7Y2qoAaRTDGDi4kCYbVOOG?= =?us-ascii?Q?BY2xUve/3d5vnq8wPf37JqYRV1y1QH5adRTCe2uFxZwOdeuB5mQK2f7jxQMe?= =?us-ascii?Q?VtE7hZFgKcCnqjK54vgV20Jaa/6XcMkhB5GQpiRXlD76Dh5CQm5jdlsmbHlR?= =?us-ascii?Q?N1bdoQIcnf46SwsBiWAcwtXbZR4mKmQ7sYPndcXJJjeDfi5E2g7XBUxoGerq?= =?us-ascii?Q?miuHHuWc6/vNKrQKoaHfoP/XFE+5mccw3U7NryNizk42rh4Kxm8KyGeOrVqo?= =?us-ascii?Q?bKGuUrNPQ23T3ZWCdUX4P/Z0Rw58O1Y1w7IU3Dxdf7Br5MlulJnfnVh75z8V?= =?us-ascii?Q?wf8hi+xizycek7NLu8axwDJSBFhjVtrtoq/LWL2ifZvGFIY3Er1gA3+nwcAW?= =?us-ascii?Q?WR+cfYGC7of5/PsV3N0cg9B81fPA6Bgs8EqV7YpzAoSVVbPiIndtlSzusJwt?= =?us-ascii?Q?o91v+eqyzC+cFhtcf/pDwpZYQp32Ggs/w7Wshr2xYcXxMjGy//+89VdqQiPj?= =?us-ascii?Q?ggQF86NFURrtgMcCH3gIthCq85PzVIES2OQ9IaREuBVuioBqCI6koGMZR24r?= =?us-ascii?Q?GXn4Kb+FY78WqUivjoOZ+i+koecRc2/JGz4TfYch0MWtNuYu/qR8NW/77r9i?= =?us-ascii?Q?1Od2uYr9jR0/8Y2vxeOTeVItUXh9sAdPqmIclIJcHqTkx5QtADwSHqJ9iOWn?= =?us-ascii?Q?v9NcRW3U6HUUvqJS6q8VX94QVnzTiuaxJoh8gsYppUTMitjgDseJ3nvzDpC6?= =?us-ascii?Q?8iHmJkMc31zaHObqDdcybdYViNdyGw9rzLTXZAZbD728Gy2N7xG2BifzVLU3?= =?us-ascii?Q?IWFUVTfokw4PvQa0DIIRs1fsFJILIJx7BKuSQZY471MJflH5opTVXYzdVzax?= =?us-ascii?Q?60xdX1/Osgt0esL1KhUKj06rKB4g+vLB6ofeUNbNmO8z602dcxR4RP2Bn2lu?= =?us-ascii?Q?9HdAD37vgIw/G/bDEpIWN6ehTnhu8QoE75MfuW+BpI8vFGj6xOG7RMIYgK1K?= =?us-ascii?Q?ys5mPe7cBcswoJOsntZobbAARCA8pFE40bSi/khthE8/Bw+khu+rKy1ZpGyZ?= =?us-ascii?Q?65GsRfUN6Z98Tq0LeXxhGV0wvp6qWrSHNifZ+4TzjFLf4hvu+eGSqAJsBKbm?= =?us-ascii?Q?syKdqNhjsdcjHPNKG/uOmFBfM7ksl1wawm2TJ/3UoxxQXqzkob03V5QzvdaD?= =?us-ascii?Q?EOoFkbV0A9a7iUA7NVf9A/yE+cwanE6szBEhnYCzZ0xT1ZmrqpL8km7yVyRH?= =?us-ascii?Q?L6mH5w3H4J1p4diYAjDroKnm+w5HwWzws4r+95Bhc26tZsmaSXKgmaww7eBY?= =?us-ascii?Q?K7nuGD6I6XJrHkS3fxPIGDsVzgKcnEBSks1ldcE18OY91RjEPU1FAozfPJh7?= =?us-ascii?Q?nr8aCJCWy2tX8M+RdUWxC6qxBPUOVtpDtvNXJjzZ6CwxtbnCED0tCDAyaQ78?= =?us-ascii?Q?cBGcVuZSw8B2eAdcBLDT2E3FBvFG9v0Mk3yvQ9YHvDx0ocDF/WcdPI/8kvht?= =?us-ascii?Q?Cp+QA5sBZDIQiw1udH0mBocc7KjIToyoHk5bEgkmwXJqWhsOsdvNgsL+a/Qd?= =?us-ascii?Q?CJz7JTMEeQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1acc85b0-75d8-494c-9767-08de70ee526d X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:02.1723 (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: c8YFDeSGlwisQwIMcgjCJ21nNVqo0TNHEGQjY7q3eaSE7v9ySaDZn6bK8OMdlVYlCd+1A/P8S1ByjoMt9eKS7g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4106 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. Cc: Danilo Krummrich 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 bc2243450989..468f4b43574a 100644 --- a/drivers/gpu/nova-core/firmware/gsp.rs +++ b/drivers/gpu/nova-core/firmware/gsp.rs @@ -146,6 +146,36 @@ pub(crate) struct GspFirmware { } =20 impl GspFirmware { + fn find_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>( @@ -211,35 +241,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::find_gsp_sigs_section(chips= et).ok_or(ENOTSUPP)?; =20 elf::elf64_section(firmware.data(), sigs_section) .ok_or(EINVAL) --=20 2.53.0 From nobody Fri Apr 17 09:18:11 2026 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010002.outbound.protection.outlook.com [52.101.85.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 18CBC329370; Sat, 21 Feb 2026 02:10:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639818; cv=fail; b=b7BhADfcpSnVfcvASIxb5+Lm7hMnHdrYcPBqHY05/A4bf20YaiC0eFvRKuhV1sPvr5arSkPf1jnbb4kl7dK4wwuhGhuyf+IffkKMLacSpZNk/4l6sQRwxjsPAAvTi5OMPaCMxYy4erVN0uIFvqdDMKWEOpX/wi4EzOEOYr11/tg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639818; c=relaxed/simple; bh=+4Xb/L/PxsU52LTMC+CxKE9Ld8bo57h1cqm2zsJgNEA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=DiTT7UOEd3CaxSYRt7gKv7UxLtVAO2umL/EFKmcf07UHJSo1jQIFS6a5YCz+Daka9kKzjHqA/ITOeY0q7eGK/hRYBYbeddC567XunHm06fb1FLIMMHCw8f5HIg0o9LUCUoNMAf85jGSBgfpcLgqiiMyZPnTUhUP4sp/EmCw+W+0= 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=rP8A37w3; arc=fail smtp.client-ip=52.101.85.2 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="rP8A37w3" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tyqIAMyMZ6yzhkS473Ht6YKxVkJAAolChx6s8QIDI9m+A2y9ygH6mTQlE/6eT3VT9u8l3hROmaJUTSH+NAN9LbAb1oPL1537CN50Zg23flPgIChiP/ivp9Gb0lSv6rFvb3ZJ/9qAlpL1MBLFbRGVJIktQlrARcmuv58byyTXyfNOC1Wu/7WiTUbujRuJxXAFDLdQp98BHj1qxRaG1g+sbNl/a+dHDqMBSGjK5Xxh49dY1gFbppAOu7F7jYawSpxvj89hBJjCmgYjD3ErT5xWPh/aaAZ69FQcBD65+ACE3vyidNmp1XG6faa/Q5WRNmsH1u9BuPgiBCNTyUTOd6KA+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Umro4fHo9Bzum2jYOtZei8FzanFe22sCcDfKFHjLoZg=; b=LGu3HTYvZLq3uEHYNyypZJXMC6ZR65RmHr5YhRpmWl/etYT19o0dD6ootlySzf1F69BIAaZ3Do4qej0DVfdIziWh7HPderJ9TkqnhXE+OG7Ya1/k1igJCr5LYy6ZeEdCXRtEDViYQq8gvzeimAE1Ae7h9Lr3blisEeCCxqa31i8gJMsWRbkhyznaffG9dTTpAxIw077YoqSsRUKEYCPK8BwJQoFJ/0rPAel1o3LImzj86ErsbcCWigYlI81+7Z57JeL1Iwx6c4/Yy/T5P2wXvIr0EOqWMLVrfdm8qvAybV1fli+zGSYHUwVYG0PSQpgKkJsicfkBws4AiN+lf1wIig== 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=Umro4fHo9Bzum2jYOtZei8FzanFe22sCcDfKFHjLoZg=; b=rP8A37w3uhuuBMzyXge+6+W/7axWVlFOphdCVkpvvimxvb5UTL/ZLl3NoRDiH2oXDmvi/Y+xknrFbS9A4D8C8rTr+iPn/5cQRfp8izjKLaLqIKbNFVpZBDqxy+3mcwsqh6Ew64+s49uWGeR9QR8AhF4+3pWwreVnUnnyaSEMkdpKpfJHEpRCn2eGL0buv+6yZt4Tl1ApB3kDU2VBQdPN6P8UEdzOS2OY09I54iCMTz1ow478y5A5ygTY78lxQU6wRxVlIkHGLQbHNq7OCJgwGw5eIFq0MxJagqBdoYRSf1D1gG3JD9UAXaAWo50a48Ym2v9IFxo49zxYNesAvwp0Hw== 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 DM6PR12MB4106.namprd12.prod.outlook.com (2603:10b6:5:221::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Sat, 21 Feb 2026 02:10:03 +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.9632.017; Sat, 21 Feb 2026 02:10:03 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 07/38] gpu: nova-core: use GPU Architecture to simplify HAL selections Date: Fri, 20 Feb 2026 18:09:21 -0800 Message-ID: <20260221020952.412352-8-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0126.namprd03.prod.outlook.com (2603:10b6:a03:33c::11) 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_|DM6PR12MB4106:EE_ X-MS-Office365-Filtering-Correlation-Id: 12efed73-9ea1-44f9-abdf-08de70ee530a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?2eZoxBco9cvjIU1XvSyCNn6yCYmkj+V+A69PumS2eWllLR3XWAufgrdldeGz?= =?us-ascii?Q?OFK4cgBFieSobiDr8PDJiPGxeyAXve6I/qzc8yihyr55z8Fn1gxR5VbEqVSd?= =?us-ascii?Q?uaKG/aDKFgaKe87nQDR8UAX9LC3wNcpC1ufe473N6vHVWz+ODp1vuOApjN8Z?= =?us-ascii?Q?x8d5DPw8FEOVQC68NDtNmbAsA45+1g4nKpSXJmXIscNexv5rsyaezUerHmFU?= =?us-ascii?Q?5BM3dLaLKadl2mwKUfg9gLOVGNuCRxXHYWqHoAp+RWJPfhovwMfxhyoEN2CL?= =?us-ascii?Q?CT96SQx69GO2a8TPnvTquNMdoVxecpKUJuzrOs1uv9lbFYgXjWs76UT+GuSI?= =?us-ascii?Q?9k8Mxh+WqzmioMObsgqp6KYarHwiW1QLtjIYHNndtmIpjOEqVAcfKpN5B2HD?= =?us-ascii?Q?2ys4ZWciYtJr7hs98Osjz0U3qRkvsZ4uS4Q5aMec0MJPwFRqih2ZHjZSxslx?= =?us-ascii?Q?udGvSexxngChehi/GjHat5QYstw3Hk5lkYzx9M3LyF9/nADSWqyGX+7i9nEG?= =?us-ascii?Q?2O94lYZRuvzHAJ7F0ER78oRLrrT03ru0uFbs8qw2o285SSRG5zaXt26KmF/s?= =?us-ascii?Q?/zVadJt6lnzwfsk4vOAefwGT9ZY+UKe0Y5BkObGt9/TNvQZaHa0rTNMU4Hrg?= =?us-ascii?Q?3D57LVQca7KpwJIiXQCgmbuKkkKRi+d5TV8rctX+HjNIS8VZMtzKbaCcS19I?= =?us-ascii?Q?dW/+7H1shEg4OWY2DfQ4zCz3WF9dH3zR2kHPkHyu+1Z3LAMF5XVCX4orraCJ?= =?us-ascii?Q?+BMrTQAzkVWhtitPyjVt3bKc/Rp9RLcyzPm/J0AMLX5J0IKbQcCqe0FEqdcW?= =?us-ascii?Q?MDTCb065046nXyB13BUOwwDQDYCXSnQF6eS1+CRmkAN6WlPQQyx4I7YK/F0p?= =?us-ascii?Q?vLk2CF0KqKrpItdBm4U+LmswuQhAnV+BGYejc6tkghJ2ZAmsKX59dp8ixluW?= =?us-ascii?Q?Hwqlho/INGpF9SxpM3wJQ6s3qj85Fsi2ZqLpqbE4u1+kJKoU1OMPWffF5pVo?= =?us-ascii?Q?z3ZmxOiYxs2N1Rnryd0Vi/fZvg2Z8jUc655t2Z/zM4urUa0tFjO4I+RCu5uc?= =?us-ascii?Q?VRmGXBeCOR0Fo5xsR9MoERfNvJIGUhus8YWWVIM/xHoaAFub2dTsY0UPeKr5?= =?us-ascii?Q?qdS0IiVUQrzh0swm/i8YtPha1CGqPVb9+J1c41qg9R8+J7VRl79/YKLRfe+k?= =?us-ascii?Q?G5ykcT0liysgYtvwqNy2uAzQwdP+ZRumOp7PCLW6g1mhL2yI0nwnlB5ERBiq?= =?us-ascii?Q?G+pgPq6zsPg75gTmZBTfzl2qHE6xbVnS4xW8mwMnKUY/xrUmmYaj1mZRJdWb?= =?us-ascii?Q?wueGyRpy1tyQW59kb+A07b3Ivp/bTcGJw92VnxqgDgh570Du1Aerxf0hdW8m?= =?us-ascii?Q?OjxsrCwnt+zFdZ7CEqPPU0pNWYHbmD3TvaWqj6YUVa9+uLSIC2kiWc71Ma/I?= =?us-ascii?Q?uAmU+dnUxMJa/VaJJOaTPXAfznR5/uaabdWYgdP2br4rVbUKJpc+sugVjqtH?= =?us-ascii?Q?TadJYikEiEjoZAkxTZ16ZSE84lsbelRQO1Q3WgCBV80mx9HJQxi2RAkl1cd7?= =?us-ascii?Q?0dXtNc7RaRC26UxIHWc=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)(366016)(7416014)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?8RBnQ0mYjhtcfgKp6zpC+wA9fHN4l1r07tZk+QLHbG5BjVwTef0OB5FUDYvq?= =?us-ascii?Q?Q1HTS4VZDH4Wy9uGbnGRsPbd8D4bSGkTC1RycUfCO7nG4fjc3sFDREfEtJYS?= =?us-ascii?Q?92NAN8PLRXTFdaHAgpMFSbe3MJG70Fyx8dV7dUWdLLhJBnhXB64llxwX/c7x?= =?us-ascii?Q?RiZJkoLQ0G4+SCOGXGNzmb2Jpt2qy2mSoZGk17B83OSdejty1SICJaNGmEMd?= =?us-ascii?Q?EOFhMKIjMIu8PUGgjCmoLhD9+s74cG1X04enk5SBv/BMR4DpJlsfDxZogidW?= =?us-ascii?Q?Q9TSne19QmIzE/FCnbZK154uSlGK02yI8snGYBfMQO/gPO6/YLhpE7dA7OtT?= =?us-ascii?Q?jFUQ07fz0iiRL8a6FjgHG8djUXatwTOPcZYZH/aK8IszDC1rr8Smj6vLUpXW?= =?us-ascii?Q?Nc3m6Ho0xgFHBuODO+Hi4d3YJTSVbnVmLe/ilLvFRMgv7MiFUqBjt+7rocik?= =?us-ascii?Q?5AfvZcn9pZy7nft2ELD+D/tSwK07icq/ZKpgFnmdRWokXIRceF17eBoPcM8Y?= =?us-ascii?Q?Cwtgoh0YavMo9U8MLWAM1nY/6gZ3m+4wdXR/FoNCCXehOYAkNeB7kJU/xeOJ?= =?us-ascii?Q?/rnujPTuiceU/FDlezjF3rks5Av6Si0kW/nMo0JtbsbsnOTo0KVWsKUaFDO/?= =?us-ascii?Q?lLTAOWEaXuyJlLcOLmn5T4XyNlIrRVuA33JHt69D+7qxqrWswzlD9REwkawA?= =?us-ascii?Q?ieY3s7FRK9cvWyMbMtmciH+2UMY8RJTx2bb/RpzoQFdfwM0KadYUBQsLJvkS?= =?us-ascii?Q?ghfarsS35Qc2w4i8RvVmBjLuin2x9uBz9hfIXucFZYSATJ5vv0whuFXu+J+z?= =?us-ascii?Q?ILhxChn0iffIQqhdzOjWev9rnvOPw/qRVnnVIHjplPZXTwaHBionRLmtpn+j?= =?us-ascii?Q?m1xm40vBfY1PXR6WoOI812xv+U2fU4+kxCiF1ZvdYEM0cTpDmJaxFjxZqrDJ?= =?us-ascii?Q?qkCO6kcQJ3SCAkEyKsstwgOsHJPjfABFT+ZfpfHmd7Okmw177Tz3oFJVoMU2?= =?us-ascii?Q?vH6likH2y8v3wno88Biv6L9cvSElZBsW+1au9+HPEHelFmdh1oqEzQa+43g6?= =?us-ascii?Q?3kW2hOkQGGsAdsptNXs163lHAKwEf+3KwSb8KMzhCSci6ri/l7Wt6fBPULHF?= =?us-ascii?Q?20qF+ihJUGDPYjNDqpW5ZKFyGBQ86xfx+FU3uIhFisPdow/FNXD291gl1bnX?= =?us-ascii?Q?Kl+nyTLPC6WXQ5NwYqGWXDSGNABdYkIEoEJDgi84E9ozfQKj/FfDi7IXZZ/L?= =?us-ascii?Q?5BwWHKBfV+PIDmSeL8B59lswhgNmHKKs55i90qlPCabxxYc/XU75AlaDMXvV?= =?us-ascii?Q?AN1dG/Ala6FkBfQw7IJzPc1lt++J7Boi4W5ZhMfgQZtKOufV+gw/yT0ozkNP?= =?us-ascii?Q?Fn/Hboq+RybbfgNRDwEjG69Rj56eGhPbdu97w2ZdNNfY8GMLREudwHP2oUDR?= =?us-ascii?Q?gP37BVqrPp7rpjzqJ5o5IW3kzrQ6p58tPFhMaf8B61jfbvn/6rLZWpsANMre?= =?us-ascii?Q?etPR3ey9LiPnSjrI49iP7AMoWYaHnUwFFnF+vdmshmmHL/1l6q3/iZTi+gZ+?= =?us-ascii?Q?2RLrsxxZDGT5cIjOBLT6S8FJ4THJbQg5FhtcTxNnM6EzUz3By0kkRJN3CK/H?= =?us-ascii?Q?DiSmUXso6eArGwKWAwvz/LmHQQQvf/OaKS6ZTgN5x1aKE/15gjPbgncldHks?= =?us-ascii?Q?CegWVoUuYmsf4RzVEFGg3QJ0J4FHzBcVCkkRjjblkHAWQJu9BaarpfMb03Lc?= =?us-ascii?Q?AS3IeYUr1A=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 12efed73-9ea1-44f9-abdf-08de70ee530a X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:03.2121 (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: 3U3YPeSZwmZcOKu56UJO5M5xBbs0o5RJMCQPkvGUx9xyaEUpSsO7yc+lhGLfRVDwlTizXxlEwbbQHpDuet9ATQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4106 Content-Type: text/plain; charset="utf-8" Replace per-chipset match arms with Architecture-based matching in the falcon and FB HAL selection functions. This reduces the number of match arms that need updating when new chipsets are added within an existing architecture. 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 e709affaa7e8..d33ca0f96417 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 | AD102 | AD103 | AD104 | AD= 106 | AD107 | GH100 - | 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::Ada | Architecture::Hopper | Architecture::Blackwell= =3D> ga102::GA102_HAL, } } --=20 2.53.0 From nobody Fri Apr 17 09:18:11 2026 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11011019.outbound.protection.outlook.com [52.101.52.19]) (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 45315329C4F; Sat, 21 Feb 2026 02:10:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.19 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639817; cv=fail; b=Ciya5eCBII0PGSVP5jbMVeoCTTix/FiHltL0YVYilLpDp1APnil+kK6T9oSTNAsctSV5X8BBOVMcveKKZsQ3HlW8dg9KXhZrlAN57qzcn8ZCGH9ethzatw1uoB7YgEVxR3PDpIq0aQv5gesDfBS8iQC+fd025g7N8SJh8QnN4JY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639817; c=relaxed/simple; bh=aapzhsbZC1IXA+5MOa42AKcuMFwmqW/Fsr6wuDnyonA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=cKWeOK/fnsVFePMChPQCjII+m8KaRR/RuAR5Xr4CcP7iZoiyPe+otLdRzPWFmiZg64mWW2LZ7pm/P9weLYRe/95FCdMRso3GBoHvhBC0/917GlYYmy/sh8QlnqjwL8Fan2g+0FPfPE64S7PGcdHmRl/x8cT5nykyzkmQtqsU/GY= 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=cv0y3Dyg; arc=fail smtp.client-ip=52.101.52.19 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="cv0y3Dyg" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hyRq6iEwxNyjFo8FLstt43k+DcAr4rbtFl/dzzGe6IquM/zfOJpLiCdHfZxHwXgqvRtF3hxNtBwhpg2rV7HA9zaD9qjPpZF0nu+S2ePov81SpwAJVC152rtCrCWl1BZbcHWvmnUle5BNKWsZXMHGRWsOTVtCaL7FdeKsqS7kwa1OgvZjmLv39BeZCE3ABZoaFADbiLsywds6zn4ZzxsCyGgJlI6jqeXhJ+AGL4oQS7uRhEzIU0f3EMCWDFJ9FcSywfDOsBUc4nnYpW6HcFbfT3tmuNi4sW3H+MlY5W005uCJ7GbagzVW2OlVZKrEqnVGGF0V20oLY+96sBQVWM+r4Q== 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=CcDBKQ0DeM6Z8BsfCW4cH5KdWADfJDFN/n7GVOaRSAM=; b=mQGcDbt3uuk3hXFUsAhMChcW52u4M4Y3NtvRg6h9oyURFKiXiJoLZUdKo31atSBOeNDZGbi01l9zP5VO+TIXn9EBW1dBaf2DF/1UI2OsTxqaHlXap3me041kA/YQhOhIvpszAN/VO6pXMXgyZovXmKdMQnHlhexz4u5B2vmCXMMSjG1vYawLvjeQPbV4RKXx63q5YD80kIVkSXFmQ3lmorcCajjLqMZ1hIxswOZRk1FhyHGPEkQW41mrctA9If7V7YDhROD78ghuyErL8BYdobbbQw9EFiVPGMZhNQ/5jDaeFgPb7tINR4NV40UXQs+e9NNnKl5HNwyiOPf0KyPKdw== 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=CcDBKQ0DeM6Z8BsfCW4cH5KdWADfJDFN/n7GVOaRSAM=; b=cv0y3Dyg8CKESDOA3RyyIrzPt5PQCnSn0/I1ZZFn2abm6TM1t5YBwEkIO17y7SscudUqK0RxxmngrfNp5vxZ3c732KS5AaXTpFvkPYMtdR2D2TY/WKWmPBCSTaOmqC3Vvi/spR5+YDlQ88l0feUr6mGfYNMEbUz2x+RRx/A5pcM9OZQd2zoSuoTwgVO+qou9x/1Oc60GoKGIwyZ9GvaA/lcaN6wJb3fXla+LJBYOgVskxAm60YmXHJaH4x7IKHrIxaM2b1IwuUuToGRGruhzvYytfZHYlZf7Y0Psj8MOunWc9QSo0JXmgbn38GFapjdkExetOk+eZThyngHrY6U+UA== 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 DM6PR12MB4106.namprd12.prod.outlook.com (2603:10b6:5:221::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Sat, 21 Feb 2026 02:10:04 +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.9632.017; Sat, 21 Feb 2026 02:10:04 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 08/38] gpu: nova-core: apply the one "use" item per line policy to commands.rs Date: Fri, 20 Feb 2026 18:09:22 -0800 Message-ID: <20260221020952.412352-9-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR13CA0116.namprd13.prod.outlook.com (2603:10b6:a03:2c5::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_|DM6PR12MB4106:EE_ X-MS-Office365-Filtering-Correlation-Id: 06feb054-13f8-4ffb-d201-08de70ee53c8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?19bSTGhreN7VCkhswqfL1owd+j5YLA2+SGsf82SA26diSWg3Zonc648QPrdJ?= =?us-ascii?Q?XRhS8l6FcalkbyYZcGe1QGnfOan9T+4XWev0Fk7IuVzfWsa3FANnxnblmFS0?= =?us-ascii?Q?jZ5dbK+djf2Ehr2Ty0NUVVvQ7csJwrM8vANcuL0jo308okhgLTk+iQSlh/qx?= =?us-ascii?Q?nsmoKGXxfM5Ls1OtQ1PXxBhLNfNqYjgYxrm473HErshQY0J4GY+J7io4sfo9?= =?us-ascii?Q?R0j3y5wf8VLzj/fKIvKorQ0AmMbbQ2/M6xCWLwT3JVu6BSt/5z+kndP9bG9m?= =?us-ascii?Q?AygWtaMjrz4Jdb3VuDoDH/aiDGD4C99MwH8iYbH9fcw9kSbUS7LQUjCTJUQM?= =?us-ascii?Q?TdDAU0gtfIkMi491WhM7gR6jR818hKX/MY0cgsNRX4aUdWaD8gSyl+o4ocpU?= =?us-ascii?Q?5QGJXm+HeN1+GD/8Cz08mNq6inEkoHtuYiWuRWIadfuxMXRK6rMYRxkAemw6?= =?us-ascii?Q?VvKpORWfmMZ8Rt98IFfIpuU6da5GwlMXAKI+wWU+P3VyvTtHmJ/bmsloT8ij?= =?us-ascii?Q?yFp++gJK/MTmjg91Z3XosxUDtdECWyYWk2GJ66BzyhaoDLmuDaXrv9/Ukv3l?= =?us-ascii?Q?e5EP4/WO8yKLwb3+mtY1eXhGuMbtEmon4A98n24GuqJa8l/MT0lTuv3UflSN?= =?us-ascii?Q?G2D+vi2wJL8yYGrIhB1cScNJqEEBs7YldDIF9n/7danlRXBaJ4MAsv1bp/a3?= =?us-ascii?Q?k6sFQCxfodkLDreKt+aTi5oBM8oENJDwDEleDsckN1iM+GyV1keeaEpHd+cW?= =?us-ascii?Q?H4xfJtQ2TalLP6qpCQ6jcRTdFC+/hhYVX3EZk2aX057XbYmW5jHjvXR5tKsq?= =?us-ascii?Q?SDuAjz58QLWXHXnpMSbYo1o8ex8bvSYfnwNLatGkViXNeXtBuvv3Ittji7Gm?= =?us-ascii?Q?/OLp6iKRBhzm1m80gqMxacPkif4/NKA9K62C2ENYIs0K9dByc4C9iB3eYRpU?= =?us-ascii?Q?uDqU8/4DZHKF2q+N/IUVVnYkDG6xAnv3LrjYocXTIwL98Ci7gpNWzbUFuguG?= =?us-ascii?Q?IjtlvfjSOYuBO55GdNWiLIzWJRDxqcztuzKe4lZ2H+vmL2xOwDbAUTvj+8HJ?= =?us-ascii?Q?ptGiPi6je/uJx0+eRLoOWyK3rRCndD4HGXZdCijJViEEGb/Z7N/EajYRLxlh?= =?us-ascii?Q?8oIbPwwk/sT+/qXy46UlW6P6dYPEXPkJJoa2ACBpsqj5objdYA4UewflT/xp?= =?us-ascii?Q?9sgugOX34nbBmFZsXlrfpdGrtW6PJFTfuunhJI/6hXTYQVsSzDNJlNBfHE8y?= =?us-ascii?Q?6dDo6ujqz0Ha449VkqCmiZ2Xa6YbAr2ptgE42rApCtkzkbYztK6EnuFWfyl6?= =?us-ascii?Q?pWHORN+5PQXWfEHLRZSv5oPqy5ySZM99fvcPQLeG+Tv3BO/NWsmzJe5Oy8hc?= =?us-ascii?Q?EPKwdsJfaZnYclGOqlSXmRfkNRDMu/PjJnpQyv1fDaxefXLVti2KwwBNkZlh?= =?us-ascii?Q?VVo9DfBLIhrengeO/b6UhnF13DkSEE3Inl159Jv9vwVC3x2TJ6SEiI54F7I2?= =?us-ascii?Q?Xtd3AhPnjsO4hkJdStYRm4nZnnGLPO7dD9zAevvJD9s740ZeuKkn2EbhK7QY?= =?us-ascii?Q?A5//HP478RVau0/ameY=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)(366016)(7416014)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?QqlbmwuZZBfxUXUmfsaZZH230DZR+8KhOkOWW0Gcvp1D3w7BFD0icXwWC1Jf?= =?us-ascii?Q?cKiHRQnf15UYs9rKZj5+mlEJpDW1afYH1+XRbwp5xn/ksN6RH88ucgVr827x?= =?us-ascii?Q?MdfnG9YQYm/Kkjm9AWiiUdXPil0UCZRPk86x0GBFLSqvhONAMLd+5zPQG7IO?= =?us-ascii?Q?Wmhwemz6A/q99+b1RdR4bqPsIzwqP3na2of3iKm5eOd8vWIeADuvXU4PPQGg?= =?us-ascii?Q?CZ55kytieXJUOUiBoDjIioGjLkxTih00iePKAlTV8EXoOYJsQHfYBV+ABdMx?= =?us-ascii?Q?4xpfCVMALNDkP1jNiVzX0ZlciVV4oPXVoUhdXbH3vKYUHOQAok4jHH2OEJ1g?= =?us-ascii?Q?kQLcbCgPtl5aKVzZphaD91TidvONZ3/pjGOwx0xjDBmA9hJ5Jd9Sq1NhladC?= =?us-ascii?Q?1N4pTjV1gqPy+GqV7u3XfgQIIOFXrzjXQoV3YjZYqZUhvY72EgIX2Un9mxF+?= =?us-ascii?Q?6a1liX5WT+UJJ6dQf0GVGGismgBfSoQdDjrOrCWwKK6MK6uYh2aNZ8PIPdj0?= =?us-ascii?Q?mYk+DrIqe/zGcgfp4IWoTz/pi0BTea5dL2/7cDkwPZUlcM5nxMzh39VEpa3p?= =?us-ascii?Q?Z+7EzYGromH0wbgVzzJS0Da27f+ZqROu2U0IrKenABf2nj8Bx+i2FTJzse58?= =?us-ascii?Q?8O31hWTjUnwkwTCAzUtI+XYADZ4/wgABYrE+LY00Tv/cKW6TgEnBPcu3XsoN?= =?us-ascii?Q?/pGha+KpDoU5qk5ZJ/bbwvob1wT5VSIawH3MinNsdnz5XQTtHhb1Oxag15Zt?= =?us-ascii?Q?BQ13ygdCXQ/oic927zClek10GLQVh/tJ6CTtHW4mhL0dpQ44rWLD1/EixQfD?= =?us-ascii?Q?/r+1wxDqxAPe5F8o8KuAkztlfp2MDHvcAsWi3XYs2fyJEtmO+2sBqF6mqsXq?= =?us-ascii?Q?C8eCu9cjTidOIrelV0ArqkFx9CA/O1SxdkyU9Bd1mY8X9VwDpT5rqeQIf7bJ?= =?us-ascii?Q?0XLyenybL1JcQFFXuUfJj4ZQzNllc7U5KeNAutHAJ//vsQFspvf/vomEV+EP?= =?us-ascii?Q?4MjkPRbEnkddyxXluCZDlV6oXJp1/o3sC2khiE7riKjZ5w7yaIUEZcLbivt2?= =?us-ascii?Q?PW/70zRiPjSwoOfXOnYGg3ouo5N9XXZyrwMa3/PU6VK8fOxt4WP4Hly1iduO?= =?us-ascii?Q?1eQ16hpOGfy6RmlzFpvavIJbGp21KY+ERwMdqZRnu3i+Srh9+YplHvroE/dW?= =?us-ascii?Q?mxcY1pCviB84Y0S+mQ8VKS/W+6Y/IOv6TVGtluPZP1GGznGls3/42qZy1La1?= =?us-ascii?Q?mnVQH3VD3JRO3UZkuSmc0GEwenSBZZATi3xkHJk4l2uHMq+6qhwh0B7zZJtG?= =?us-ascii?Q?cKGpyA54+usEPy0Fp9a6H8oCiDGHOkXZ0FraOLVqpx1t7lEDeDN3uGqOq870?= =?us-ascii?Q?UoKzdUgANP2Mie5q4ajU/QrPPecpXcefj9FB6jIfDKk9TDX6+6ol1fVBvJvC?= =?us-ascii?Q?GKigHos3UJxAKhDh4llTh6dtwJFsCe0zwjO/e5/j7EDwBx0nrMwDMNib8a52?= =?us-ascii?Q?XOhSSUPAs66FLIXQyZUk0kKoOsK0yJaTHGu+ubWJxbXur/UCb7xXBm1q7Y6U?= =?us-ascii?Q?J6muLTr2OAhKzgYgj+VnjcP4+nZaOpSx4MpnPf/NpUa8/oh9BtXXbKJ8KMsx?= =?us-ascii?Q?nL3eDmk4TYwI8D50FeiqQXrazkKHE0B8SunUb+LVXFFJ2JhmDkzOP8Sa/bVL?= =?us-ascii?Q?ckh6jG0qFmke/BYm7xnv/vH5W6gjoEgUsDJ5TbzshcjlkkJajvdEmi66bsyu?= =?us-ascii?Q?srCRGCoRQA=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 06feb054-13f8-4ffb-d201-08de70ee53c8 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:04.4828 (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: ADxJ+ZZNP5nNZQejVDiFs1Dim7ZnaetNFSxFxWo1jpwkMyaATfL90J0yF7SR/rGMW8G4O/84YqWE1DG4ae0XtA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4106 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.53.0 From nobody Fri Apr 17 09:18:11 2026 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11011019.outbound.protection.outlook.com [52.101.52.19]) (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 AF163329E4F; Sat, 21 Feb 2026 02:10:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.19 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639819; cv=fail; b=IammsAR4eKIc1+TS1GugbJGMHf5Qk56mih7xFcEkovmfBjz+AOCz4dpvrd7wiioWVbpprR55Pem2EeMhGzfUYYsw9JjJAFc6y2WpD2wa0amown0c/x9Wx4DR/Kt3RY4dzlV2hEseJMzkxWSYDlzrfU/+ppWGjCYI2LX8UpMDAW4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639819; c=relaxed/simple; bh=LNADL88YrdPCytvI+T8oJ/QD/0uECJ6g0pedx+5zSwQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=I+OzLhy7eODGa2hmvQTRBC78qkdn/yBijCIYcfjMDGcXsWjL87fpWohgmpTRFgasGv/9Y/5O6Sg8jlUkNdcQWn9phO4CDOnq/vhWXjrIyR6Mgpk9JtS0oomHpVnkvsTvnvlRYDS05cZ/oJwqPDZxuRoNVns0XK8k77LN6ShawL8= 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=q7sbWQ5y; arc=fail smtp.client-ip=52.101.52.19 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="q7sbWQ5y" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QNln9DcpxCO+j1ukTe1zPYaY+OoRZ2owOTsVgfbs2LXgV2zxgIV4D1aUhr5bdjesoLoN9sZ8M0WbkmXDSgMO25Yt95ApimJLoyZGCDUS6FIoQmt3crCkjzYv89ArZFKqBfOHXEIF/uTr2UaESgtHeI3sAZbKY4CkotsI98Bcind0n0vGXuK410E85Q6atJXEgSg3vgjq0a+DuZ3y4zju3gGX6DyThIGV5AC8zMzqobUrRSYLG2eK8VfAmUp9kWe/2KP0a4YYF7P9Xhv1zUmTNpWhoRPz86yyqy6geUIuS9pC+iQ6JMqzF87Jj4w5PEuQ6HNBL0SzJAJrp+tLWj5r1A== 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=x7dcGOIOn7YtEnwKtdHI47HvlagiPXqVb+Aj3hvA7LU=; b=Q55qHIy1RZqtINHXv2xpkvJ+Ck58gk2Y4j7V7wUu4zvr1Br91jWtFhPOvGAwUbqz+uP4296bKJZCjs/nxnnS3VUtTV5eKBergZVrHXCy5eYulYszQR9fJ6yRnqoe7KKs8hIIV9ccNF+HGsKWCOdqEqZTrQeSlgA2It3olOum8x6OxWOmcKLIjVNT5rpYL8xA6wX1UQut5+ivDGqdIT9OfuuiMOECzSpa5SGTptkHMHPIKVaA7EoObfoO1WbM9T4v0QBCC1SNvH4+GYNcovZviBhy0PuHX/4exXn6X9RlX0N0Q3aN6vUhUzcPp19N6eWLvcDkXr74J2Q2M/Kgc2emGA== 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=x7dcGOIOn7YtEnwKtdHI47HvlagiPXqVb+Aj3hvA7LU=; b=q7sbWQ5yGUXhEzhMFc8ASNs67LGw5fOI5uSbRpnRmOVl3SlUjFUv58PtGytqVy1awM02P3uy7RudxIChrQyd1E11KvviP5pIJV0oQ0GOLq2voPbiFQvZvR91L/SPREBNUAqDshfhXi79XwXmyF0ITGtQtarBTHciUvbge7PBBtMFluMO+6r2307z8zm1fh+OSGU12erahEAla0R/hqa9Hmq11JJVOxQpbUq+nVnigunprYArYkV3KpMTLsYpizGRqXgfZWNVGiIxwlASBJckQJsSCcl6paey2lOMC6EB0MinNxmgMGj14hGvXaMsjUYJd9Vk6gDkgGZMU1WnF5lIKg== 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 DM6PR12MB4106.namprd12.prod.outlook.com (2603:10b6:5:221::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Sat, 21 Feb 2026 02:10:06 +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.9632.017; Sat, 21 Feb 2026 02:10:05 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 09/38] gpu: nova-core: move GPU init and DMA mask setup into Gpu::new() Date: Fri, 20 Feb 2026 18:09:23 -0800 Message-ID: <20260221020952.412352-10-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR04CA0016.namprd04.prod.outlook.com (2603:10b6:a03:1d0::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_|DM6PR12MB4106:EE_ X-MS-Office365-Filtering-Correlation-Id: 19799c5f-5918-4aec-aa6a-08de70ee548b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|1800799024|376014|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?7V62CjSb+9xQNZ/mLpo0Nn6toHpIorThjin8JVCK8Slcu8sSxrZPFh+0+cUk?= =?us-ascii?Q?pSekH3x/x1bawVDRmTy8nsRnMkh5a8BSu9WXkC7FTTY4mYF7oulQlHmIZost?= =?us-ascii?Q?umHS3fcorhLFhtBx56GWAxJTEkJkkzxputcdi9J8tzSF8R57kSdhR+OlZc6z?= =?us-ascii?Q?LiK3FK7KD4RWbWUfwgKAn5Rf/gS8L/F41pvPYhhGqxTaGcLD+K1Tl24wFCmS?= =?us-ascii?Q?a20+UzwrujBgQgOMEp1TShPT2nClJXQLITh7iucjG+gpEobu/X+M/gwsxI5t?= =?us-ascii?Q?F0avoebFj0YPDaDTjzUHQBOdNMIvByL8Yocqzdba+6YzqZnzkr9WRmy4BABb?= =?us-ascii?Q?X+JXn6/5AgOV+ZYUnaRT4PmEfifK3pstMHFlq+lzAJi+H75e2TKR1FPU28wJ?= =?us-ascii?Q?7OTap6coPGPNFg/Yq75gICs1yZE0Ntm7JdYzsLmdfLf7PC6LQemRShaX+fFF?= =?us-ascii?Q?nym5ScKRWG4SUtEQwPHtzeqX+RJoEXO+J1ovaLpnfCNJCsECQNp5Tk+EVssH?= =?us-ascii?Q?mv6rrGJ+T0k1ZfjxIkXJMu5RKfU8AWwr5k3XPFvwvge6GK1XNANS3Kw8A+I2?= =?us-ascii?Q?owlRpRMkkR7eVUdeW+CGDS3I0i5xO0uWHw+MrmNimK+z+lRGGgpMVqym970h?= =?us-ascii?Q?OVvgqjdXrltVpcCMLNHbBk0wLBnXwldREqcyvUd3GoDBfrydsRTmEBRhR5fP?= =?us-ascii?Q?3wDQsOkFoQzEvTR755KhDNrNVNGYIVrtP4yxFCxqB6luj2hw9lBSooKF9xnU?= =?us-ascii?Q?9aa24URkUjnAzrnDLtKN3k3FOpfH9BHHcgaFwYhOOGALovZLVckeLQNSQIxq?= =?us-ascii?Q?F+mummqtN7iuin0y775npziP+mb8RG8mO3ZeA/vb++TrWMvC2fLFYTASYQSL?= =?us-ascii?Q?sQGj9apyEoYxvWhJBGiCpVuOLCEDz6gUj/my6gmSdYYYewfmdSD4GLjX3gla?= =?us-ascii?Q?9XgmvENKbnTGhzkyDKblgzCUEK+sIVDpRKrKKbPXoja65Busaeiv/r4eQo0C?= =?us-ascii?Q?GyhYLylFAjAP8v2FNQ/9m85CcTNLONNjUB9We2e08mc+mktMZfKC5d674QgS?= =?us-ascii?Q?GYFFzEmAAGo65++iIKZRv/RM5LZx5/VfsfYJqZx1PKjurgOAGIfO3yVD6d0E?= =?us-ascii?Q?5k9cFZdG/yCpGvjfoF4IUfX5KQaX5JNqSflJUfSlpRz16HVHr+kJ4UhhT7N6?= =?us-ascii?Q?qrKtRR7pOmzWCnygbIKdIqP2zzfZCPfnXzJX7qbLw/UzPFOsSEklNtHyX5RG?= =?us-ascii?Q?Ht7YfYt/ParYSg62p7bikGPtjTNySwteU+gJZB//dDHzY8bM41qQ2HuGZxGc?= =?us-ascii?Q?8ikJ4Z+ES6UxIcGfmJYOiwzYyTAJZDO0LsPnWhyB+VYlEgmSDxqem4O9+d4J?= =?us-ascii?Q?TPUxyIo5ZwRgyYuV37VUClyYXii31pYdCNQbGOzEor7tIESEbJfwc+KrFftZ?= =?us-ascii?Q?Yiz+iFD6sxDMNqqilus8uSq2aBOk+Emj9rF8LPAb883cB6XUe/YGk47oeR6M?= =?us-ascii?Q?nI7RGGEabzhGFd2DVrmY6531SJrMFQ4YJnzJSTe7T+NJT3VGUxldyxFsLfjs?= =?us-ascii?Q?T7HiJCVBPaNcdi4x2Kw=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)(366016)(7416014)(1800799024)(376014)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?tFdpQwRZ3gIEtIHRGdh//3ufjF6tJOoZM9eHURZQwySg8XFNpgSY/qNMqLTW?= =?us-ascii?Q?cVD5PZd8eNR3c30kzRRgwQCHyiYcnu9lnxCF0suOTKydzAXrrw1prOZX/hCy?= =?us-ascii?Q?Aot9QzXJft+wDehr3/G5UtQ/zM9FXRU+Snwg//kt7DhuS3mfXESVKoCE3d9n?= =?us-ascii?Q?2F/isWC3eAifj6Zgd9ISIAnGIJSK6v+lKhJZYucSUedm4TqkeaIoeBxhjNDZ?= =?us-ascii?Q?1OkYQokoBAyFkPp81ZS6FxOVU/WBxkYotvqXz4kE3hCHdxs+fcIQNoy3XYJU?= =?us-ascii?Q?OTbxybfZ+mPlQULhC67gY0QhQSUq55pneQsN6LCgH44QwV/mzJGG7PHzdrrf?= =?us-ascii?Q?7zRrszKlyV4sj3tk0xKTu0Aa0WhYkgt0xzfnCtG9APvG2udIUNiV1WmpEP2o?= =?us-ascii?Q?K/En/ox6bOPK/xLpFpExYxAfvCqEuTrCzivzUGjxxi80XvCin0LuL1On61Uq?= =?us-ascii?Q?kkRWIaHjW6kOc1WHVdJUZEP0mhyWVEKIi4l+B67+093BvJ9EWVJ6MlCUrdEe?= =?us-ascii?Q?uP1hgffxoJICfKADfN7mre+xrqLO7/sZmETQ81crGrTngxaq5+QGQTtoVQIi?= =?us-ascii?Q?rN9Py8aUHMM8+8TNFzx9A6/8v3dwl5EiXu2MhTqzPUocRV9Vv1YjC9Tu3tMP?= =?us-ascii?Q?+bNAWUwhOLp2BwijMXc/LMCYlYdCrqgi+ewAPtEBvHYNnA44e1i9vCv3GNFX?= =?us-ascii?Q?KG6MgEkzMk5TXvC6QYE5jcJGPizffqp8J1gOF/94OGHDu8ozjHtPO9rA5gOE?= =?us-ascii?Q?B4fQiYqGsEn6OEVVGy7kJOU4hUrCAFK9bxMbOlMA6T8pddIBZbMCdXuPZ5II?= =?us-ascii?Q?6zYRzaH1UZUx7UmW0qJpeRkM9z2TVn1YrJ9untyE1dyrJ1+whDiyaqrvhsk0?= =?us-ascii?Q?vA8e7PwmOiGjj3aPo3QkviXIKfbVjtWTC5F5vlPhHAyfMP9ytCr7/8x3ins0?= =?us-ascii?Q?D8Ei5BfTc7G85+D7Z4qVWoCsoqYltaukoY4I1s/YvuTDbGpc5Izk4PBxAJjr?= =?us-ascii?Q?A6Amd5oOm5ET607Hm0DblBbU0m3M5HV30xYX4xvS9pBXzm1D2ZPn2/scHEsL?= =?us-ascii?Q?9FcVnqBgsoMnlUBbJFILn9baJ3+5aUxuxJtepXUOlnRZq5EG3CKXBZpOdIgf?= =?us-ascii?Q?4jDvyoDtoLS1D4xTW3y4sN6eQGmfyjc356lu65Er1cySxeNXujMG8XE2jGdu?= =?us-ascii?Q?Vog4XoCUhO7hz5wgdTaVVZxNl1O9HXpJnvU9jsOH+BCVD61dlaCRiT+87lrc?= =?us-ascii?Q?vr15Qgfzy9DjcYGDTa4xvaW4Z79NALz/IArn+mksSf5FXJZ312Agz1DEGJ06?= =?us-ascii?Q?0wqvLUq8DEC6rSU8MxY+4JuEDQ4F1TG2QqMvXHIh5arIRcmP3OGcPr92ucad?= =?us-ascii?Q?BOKDp2RLbX8YMdBmJKyKym1OYH2GcK3x5XRksKzAtuI1QTUc28HskKlG/1i3?= =?us-ascii?Q?Obt6OW2hq+7qUFGmYoK3TJJvrSDe+N8Q3hDPPclqkOmWsffuBULT2v5sSaaV?= =?us-ascii?Q?kSqUrt0BmgotonQDgpnVdYq5FDywcxSRgHp9nfXaeGAGHQYBdnYb0iX9sXGc?= =?us-ascii?Q?1Krw9PanLbgX6EiH2d2NLweRNQTJh5UnqjS6+e580tykUjr2i8N+gqerXhAo?= =?us-ascii?Q?wDyY11ASOa5VcZiPtKdIotQuENijowKl/MLFMWYN8VW8ZtE42SRIUgb9mBD0?= =?us-ascii?Q?h+PG+R56v4WoK4N2I1x2X0QlBIMIYCRv9oXEDklXu0Yg//fcqt2trIqnlfrm?= =?us-ascii?Q?duj0hMsx1Q=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 19799c5f-5918-4aec-aa6a-08de70ee548b X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:05.7365 (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: 7YHPvV4csubGicuHRFvzRZ/w75khZHPr2ydFh4wuJLVNvdTcRRBLPUlrNJJS9UYRtypJaVLf2pLvKOIhcdqT5g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4106 Content-Type: text/plain; charset="utf-8" Move Spec creation, the dev_info log, and DMA mask setup from the driver's probe() into Gpu::new(), so that all GPU-specific initialization lives in the Gpu constructor. This restructures Gpu::new() to use pin_init_scope wrapping try_pin_init!, which allows running fallible setup code (Spec::new, dma_set_mask_and_coherent) before the pin-initializer. The parameter type changes from pci::Device to pci::Device because the DMA call requires the Core device state. Also makes Chipset::arch() const, adds Spec::chipset() accessor, and makes Spec::new() pub(crate) for use by later patches. No functional change: the same 47-bit DMA mask is applied. Cc: Danilo Krummrich Cc: Gary Guo Signed-off-by: John Hubbard --- drivers/gpu/nova-core/driver.rs | 15 -------- drivers/gpu/nova-core/gpu.rs | 66 ++++++++++++++++++++++----------- 2 files changed, 44 insertions(+), 37 deletions(-) diff --git a/drivers/gpu/nova-core/driver.rs b/drivers/gpu/nova-core/driver= .rs index e887bcc3187f..a26777552710 100644 --- a/drivers/gpu/nova-core/driver.rs +++ b/drivers/gpu/nova-core/driver.rs @@ -9,8 +9,6 @@ auxiliary, device::Core, devres::Devres, - dma::Device, - dma::DmaMask, pci, pci::{ Class, @@ -37,14 +35,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!( @@ -83,11 +73,6 @@ fn probe(pdev: &pci::Device, _info: &Self::IdInfo)= -> impl PinInit())? }; - let bar =3D Arc::pin_init( pdev.iomap_region_sized::(0, c"nova-core/bar0"), GFP_KERNEL, diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index b6a898008a59..93bf1c7b3ea1 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -3,6 +3,10 @@ use kernel::{ device, devres::Devres, + dma::{ + Device, + DmaMask, // + }, fmt, pci, prelude::*, @@ -102,7 +106,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 +159,10 @@ pub(crate) enum Architecture { Blackwell =3D 0x1b, } =20 +// TODO: Set the DMA mask per-architecture. Hopper and Blackwell support 5= 2-bit +// DMA addresses. For now, use 47-bit which is correct for Turing, Ampere,= and Ada. +const GPU_DMA_BITS: u32 =3D 47; + impl TryFrom for Architecture { type Error =3D Error; =20 @@ -204,7 +212,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 +242,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 { @@ -278,36 +290,46 @@ pub(crate) struct Gpu { =20 impl Gpu { pub(crate) fn new<'a>( - pdev: &'a pci::Device, + pdev: &'a pci::Device, devres_bar: Arc>, bar: &'a Bar0, ) -> impl PinInit + 'a { - try_pin_init!(Self { - spec: Spec::new(pdev.as_ref(), bar).inspect(|spec| { - dev_info!(pdev, "NVIDIA ({})\n", spec); - })?, + pin_init::pin_init_scope(move || { + let spec =3D Spec::new(pdev.as_ref(), bar)?; + dev_info!(pdev, "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(DmaMask::new::())? }; + + let chipset =3D spec.chipset(); =20 - // 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, "GFW boot did not comp= lete\n"))?; - }, + Ok(try_pin_init!(Self { + // We must wait for GFW_BOOT completion before doing any s= ignificant setup + // on the GPU. + _: { + gfw::wait_gfw_boot_completion(bar) + .inspect_err(|_| dev_err!(pdev, "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, ch= ipset)?, =20 - gsp_falcon: Falcon::new( - pdev.as_ref(), - spec.chipset, - ) - .inspect(|falcon| falcon.clear_swgen0_intr(bar))?, + gsp_falcon: Falcon::new( + pdev.as_ref(), + 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), + 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, + bar: devres_bar, + spec, + })) }) } =20 --=20 2.53.0 From nobody Fri Apr 17 09:18:11 2026 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010002.outbound.protection.outlook.com [52.101.85.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F3957329E7B; Sat, 21 Feb 2026 02:10:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639820; cv=fail; b=UtWv3kRcw/YLBtTphZmzwpuMtnIaL0Wh3nOFCurqMSyWhYlqKCkDaeCq6zbeseKW4azdSufwB6WzDrk9Um7S0O2n2W3jv3QY3jiFwf1nnvYXz3BbEMkMboqI+bqO3aeAONVNuS4ETHk2gea9DYrf+hNP9Zowl1N/Yb8lW0Yrv7I= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639820; c=relaxed/simple; bh=6C4LrycisY2VvlXlNMCcMPgKrXYuRVW+vJmqE+NQiSc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=sbQj+D2RiOpNOvhO8LfMInGZliWnA/1gTkLAVSv2EHpzZvJZ15q0Be371ObWdmxcoZbmYTYd4aDnYIznQ3jc8u6Te3xZPJKjEEwDFCjjXpQEuAs42CdaOLXg18EONQr+IYJawHlrNajB1y2hiS6imxEeRzZsZaFKa7+IGZp3BsY= 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=GuRt2029; arc=fail smtp.client-ip=52.101.85.2 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="GuRt2029" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XJ7rS0fPQyvaw72UiEceI5PKoytNP15Lvjgwhoy+GrhExBqKbvw/jqk/hbsbWiQvD/oJCXeJLX1xhPK3AXAbHbqAfT5Vbdo/LBZ9o7DzyFPia1Y2ds4ZtSg52GobV0PJwl+mLLgJEQe87gOzYnud09XhBxFdlhx1Z5fXE2GS7RuYq9LSDhu74S3oqcU/+to/nGfOLXIVMHLhTaK8vbKES7leBMdfbID+5wkEeHGQukEDHqNuhZdsu66dejI+dCfITIAnjcAn0Dh+9dmidM5tbpQPAlwWTkJMTYl82HtMP+prxzIuklcmOsIUyCE3vP06ixu95chzJ/Ho8ZmuoSUI+Q== 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=YcsrhMxJlMTH36XLje+Js9yBRQLav8Ji8Yx9ILZDi0g=; b=C+lG/J12q7TsTRthKf5se1PmiCtnFj23DQS8sFrLPd4A69T2JawQjtgpFoj8q+fM2hWTZbtTqT+p+EhAhppmdnl3gogqAH5dnBNLGIBmD2aExLKb15ftCCa6cDjQ4ieWq2hn0tTVVRcAW8JAGr02+KI+de28BqjrtZOjagURLeg4HYHoKQtJ/IJOjLb4J2jhK+fowulxKBrt6JFAr/4xzcAF9lF0MqZv0J35M1avvDlbvFSO+7Il8T+DbxK4gxlulUUx7w54NvAJ4Mz/6lWpzoKl3pZmbUL0OIdcugzBluFf+tKDGrQ9wh7oyc0bQvQb6H/8LBd4i1emU2aWVsds6g== 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=YcsrhMxJlMTH36XLje+Js9yBRQLav8Ji8Yx9ILZDi0g=; b=GuRt2029PjkXli48lQlc4fbuMt0XMJrqOXV0inwhrc2Lu/T/gTLrbC4//JH7e+RXA40sg4A5nBg92ZfopQGSb5XbNfWk7AeyVXyuasFhBMhCPUqIDb/XV7OmuWf3f2Z5DL7I4KKkhncPr7SObtCRi5V6Grem/F/ND0zgOah8keCtOYX4JwKQY8zukAjf6Bj2JRvzu9BP7LPXzUzDr6uPnQsW3oa59kM4CfTtwD/2fxdyCvsH3D8bPdiRPGDlu7tiJS3OMhD25PW4VPysNxW6XXl4LwX3RnIMIeIhsMMnIw7ESwaQQIBeZ1UrJI2CLZhezX5FDlTLyUEAFO5+GMHVkg== 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 DM6PR12MB4106.namprd12.prod.outlook.com (2603:10b6:5:221::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Sat, 21 Feb 2026 02:10:07 +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.9632.017; Sat, 21 Feb 2026 02:10:06 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 10/38] gpu: nova-core: set DMA mask width based on GPU architecture Date: Fri, 20 Feb 2026 18:09:24 -0800 Message-ID: <20260221020952.412352-11-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0137.namprd03.prod.outlook.com (2603:10b6:a03:33c::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_|DM6PR12MB4106:EE_ X-MS-Office365-Filtering-Correlation-Id: b07a255f-41c3-47be-0e16-08de70ee5530 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|1800799024|376014|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?K+tFDigg5AkZLq+Ak0QRzxNATE7SHx2gdavVF4KiCbtxKLo25wg6f8KryhC+?= =?us-ascii?Q?VC/2i8KeGap6fficHZVTLyBnPYP8gvmj86i9Z4NDnpW92oZoFLbG2jWWkyH1?= =?us-ascii?Q?zVaKaLXyOQSKyzFrHjWGyFn2zyuPhblx3t1m/01a5pr4jF/fYyRGJMmhj/bs?= =?us-ascii?Q?q6yuUoiVUjpBvQB0L5Bg36mYiQ6pX+TXS+qJjUKHEoBkjelYtBDzx0Fos1WE?= =?us-ascii?Q?LnihGPmAkD++ZcxTV0gJ+5zNNiIeFAYhQZw4Gf5e+fNXIORxO3hAOqymh9Er?= =?us-ascii?Q?Q1apSZhZF117f3rCB9lf1jI38vMkCR8JhjAJPANmyzDU9DfVPG0nwsN8xCkj?= =?us-ascii?Q?ZrXbGrMHvpvO/bd4wRmc0uyOqFYnw1RfxHwf8cNllQoUwUWwTUxLAPVtk7oI?= =?us-ascii?Q?RsWeKGQ2aRlrTlk/a8L7xzVYOaPG9D6udbzx3CRNmFKxeH6L/j7smxkPkrK4?= =?us-ascii?Q?Hg3SRlGWcHAPLqcK8uK87Kh7hQckBEGRBtxg4a/0xNz82h4PQJJYkwQIMYgu?= =?us-ascii?Q?FYsj8G/RRv7UpTcUoyBc/a6YcHWqmAJLr7DH/vZL5auPvrKEn4Jznmu06+2I?= =?us-ascii?Q?8dkIdu9/L7RnKJtwxE6pn1vSJRRVQ2fCJ6+1cMTTZZgRAvIyfge8ORedByRo?= =?us-ascii?Q?gWinASzytaLq9+pAh3RyDeai1ZsM7fB05PDaK5dFeVhKc3ELcbCHnP33JfMf?= =?us-ascii?Q?0F+gTEnV1/5ByZGkJ0zAF6kDYGiZZEo5/dJrSebQUnKAJsd053WNqJObHgKb?= =?us-ascii?Q?RAWL/AER0y30Serb/4DgE2nUWdi7WV7Es1obX1wpyqiJju0LzlasMYfWRR9w?= =?us-ascii?Q?9TJCpRYB4yUWoa5nf3DlL9a/7bsyGI2/PfQlhk17qZAKSmhp1M6W88gOe71/?= =?us-ascii?Q?dEb5M6Iw2O5pRM45iesLN5ChhwCMc+jSOm1ODgW+IEr48W9528OAXWzjaItQ?= =?us-ascii?Q?3rO39oiylAdfUS77VqD/pXojXewrf9GknR860UCsYF5ZPRMlteml+ZpjYcyA?= =?us-ascii?Q?6At9L7smOqRa65te9C42u/ztwbY9EdviJNVz4nSnwdX1E/3dynRaQf/jTelz?= =?us-ascii?Q?WkgLGssvqy+ANOfBfnuymNJHfFuZhBI+9tJdL9ulbMl4UYnjX5G6hVqSpEYd?= =?us-ascii?Q?yVWRe/94FQmyMRu5BlNqIM8PjmpQdfzeuTyOcc8/OtjGwCIFR3EgQE726GKo?= =?us-ascii?Q?j+YnPbr91Hcw9Q63pJHW0yq634p5BTKv3BRugNQCesy9UeCQOqeb3auJ2IRh?= =?us-ascii?Q?YRZDC+0A9FERvLDokIbewWNwD+qjW0ecdmoQphX5ACLr4nex1ym+q9sNNLZ4?= =?us-ascii?Q?qgL/IoOW1lWX6BNbU3UcPf8AanbwVpvcXtfRYvwQs4ORiGlM0GGCNAn9xj0L?= =?us-ascii?Q?2fuyS6i3ONcM8fRRlPB4DI7pB5NJyxcX0BjxUHgA9cRfDJ/8CkhmntFqU4Dg?= =?us-ascii?Q?BMTzUkkvfy5q7lBpd+5DlTySnRIwUNXjcK35fDD7rKK7zH/NK15DiXxvZXNi?= =?us-ascii?Q?7x2quZ6nGumgsPYsgvbx4GKkKCyBobBJsa6tmhxMvZpk60SE6uR/XeTLnr19?= =?us-ascii?Q?dkLXO0uHHgsgBNvyf3c=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)(366016)(7416014)(1800799024)(376014)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?/gNiIdgGE6VcoLe7jQTegOXCImW9IsThEim14Cot5cePnJPcluDGZZB9F1VM?= =?us-ascii?Q?EuxN9J31HS/0FKRs3702P/lXUYB7XX49IEcS7G0sutAw9aG5k9t9VSghdfgN?= =?us-ascii?Q?BNS0JFUsxmOCgY7NzCbgCLQ2tRKXlDUlexVqShFqEqBWhYK5uS6+m1YAKVWo?= =?us-ascii?Q?pR3/IeZ/vAgBbBldBLtv7GQ1uHmsuRlrjfaBrq2ur/nSwHkKSMYK11XrjFAX?= =?us-ascii?Q?oXZKbmn5ylv3591bLNNFfitViH2/PDF8EvR2lPE+UnHoeI2odI6lWCyNal5N?= =?us-ascii?Q?R9dg1ph+BQJOPuyl1jNopPMuL4vpupUHj9jdoSOdX2ur95ayAO85H1e43kYc?= =?us-ascii?Q?+Nipq7AYmn5J3txhL7/o48m8gVBts3v0m70LKyiI+azrxvRHLSOYPB2rqiXt?= =?us-ascii?Q?RWrdbu/5icVTDdRoWfeMW5FiYcKQ/CJw5iickaUrq9S0C5JZXDKxlNCFumnn?= =?us-ascii?Q?+xYpvnImonFesLg0eyHaQW4Z7vzcBvgHQKp9xXdNJiwjonT7CczOGy+rkuSO?= =?us-ascii?Q?vECecN5IlQb7VtfAlfzNVsqABv94WbClwOE+kWk2rSQdCtxe3fk+RI+giRxU?= =?us-ascii?Q?hSPcKsvCMwd2/m1Kz+/cKYLeqzmPRAu+s06BRaxcFl3OgiC5zqYBD4JyTmhO?= =?us-ascii?Q?BePjiV4hWQUP74PYw3nIqcvb2p9yVmcxrooyqFUpMNbpxjAxTDY0r6OQ6Din?= =?us-ascii?Q?uPRvKGAvvPXrONyIFS1vzU1eDaZWw8i6lZbOYIta28hIvkgJGOY4xPHEK74F?= =?us-ascii?Q?NSy5od8BoF+zqqEC2UeL9IS9qCFyup+dfDgpPGgvOzCEHlDYuDxIFktmls4b?= =?us-ascii?Q?ImC6bu3Y+8p0DUBQkQ8Gm1+PCKcA43pigXKAG1VnKU9OiogsK46tLxiasUmK?= =?us-ascii?Q?YoQLwBerjBs/YMDRHl65LQaI71q3ahku9O2pqTYcYfvdxMsGsupWTyCsmrJW?= =?us-ascii?Q?79N6t+fOsTEk0j9K6D8DlrNFGd1Cw5nTcNhBH7HHdOmItlm+WPsUvAELj5e0?= =?us-ascii?Q?iyqfkbEr6/JnfTd8L5FBqrarVaBWFLZNHKdt7YTKZO80Id1CK+eCUahdeliZ?= =?us-ascii?Q?czUqxLMHJAmwFQamML+0divtKhBH3Tgex7A+OIOGH22i3JTfXPGhagPEvNMl?= =?us-ascii?Q?0ljzS+HFZEPRJpuHf8vPwOEthEAFNZ9vBE+9hvbUDTYUdo6q6HgloAkuFgC1?= =?us-ascii?Q?Iaxo17HcQtJ2sIaB8nxmcKSq9JBeAeaRlKyHrtsxDZ7UqvisWclHyfKPY68V?= =?us-ascii?Q?qMvgwuTNIIBbwhIqwxpqFaBSS90c/DtKwKx+41QWkm5u0gMzn2uxrjqEsC2w?= =?us-ascii?Q?LHHq1iqxUqE5w7jDG+UFDEuU73eb/dLBLvRTEI5dAkcqgmOhhfGEHpIkfzqL?= =?us-ascii?Q?c8QBb30AaGMqQSg1Ub/Ior1ADoi0bo7NWCIUpq0FyYum67eEnTolS8lbr+Af?= =?us-ascii?Q?uX5VTDbgst+6t3YIYNxnY0Q5YHTbteEGcNcgcFiACDdrfIfOfXP/EeW+U3gV?= =?us-ascii?Q?CF4gy/x4t4np4PNlQbzj56yk27lk9odVmDWx318vNvCTBI/+JWwu89YUclQP?= =?us-ascii?Q?0uTxnUderDSbSl5kpnUUY74vxj0UlE/BRtAJy/gHN6ysP4uZsj4wE7Tbbxhu?= =?us-ascii?Q?Qh+ZOyEyzOxwz8iVJsvY8uyqtETjLjMWBzzw1suX0I7ZP6rnrvKGd57nBKRq?= =?us-ascii?Q?psdtvD+VIxdGOaEMewGR734Cv06UyyfkpcV1wWIEJbPuUHKA4NO0NmjKJhIv?= =?us-ascii?Q?OwXb5xNpoA=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b07a255f-41c3-47be-0e16-08de70ee5530 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:06.8242 (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: kXO1rr+j4bmeLxG+iXxV93yZLjtElqaZXx++PNFpEo/Cz4fbeYxHE2T193dlWH43yZ5hSzW4kR/BAgaK2borlw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4106 Content-Type: text/plain; charset="utf-8" Replace the hardcoded 47-bit DMA mask with per-architecture values. Hopper and Blackwell support 52-bit DMA addresses, while Turing, Ampere, and Ada use 47-bit. Add Architecture::dma_mask() as a const method with an exhaustive match, so that new architectures will get a compile-time reminder to specify their DMA mask width. Cc: Danilo Krummrich Cc: Gary Guo Signed-off-by: John Hubbard --- drivers/gpu/nova-core/gpu.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index 93bf1c7b3ea1..f6af75656861 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -159,9 +159,18 @@ pub(crate) enum Architecture { Blackwell =3D 0x1b, } =20 -// TODO: Set the DMA mask per-architecture. Hopper and Blackwell support 5= 2-bit -// DMA addresses. For now, use 47-bit which is correct for Turing, Ampere,= and Ada. -const GPU_DMA_BITS: u32 =3D 47; +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>(), + } + } +} =20 impl TryFrom for Architecture { type Error =3D Error; @@ -301,7 +310,7 @@ pub(crate) fn new<'a>( // 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(DmaMask::new::())? }; + unsafe { pdev.dma_set_mask_and_coherent(spec.chipset().arch().= dma_mask())? }; =20 let chipset =3D spec.chipset(); =20 --=20 2.53.0 From nobody Fri Apr 17 09:18:11 2026 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11011019.outbound.protection.outlook.com [52.101.52.19]) (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 5478F327BEE; Sat, 21 Feb 2026 02:10:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.19 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639820; cv=fail; b=iIPzaytR4yqtpZU8GB3NxQz6gzd5BPPsKK+BGHHD3ehfnsplVephKbFlHqk4iTUztkxsR15krc+pTR2VyifFfxrnWKEhZTNjjRwfvH03YOqkDVBEFE2Z186TXjSWU+YarQmCwoB8cfqAkbStveexO4rdjhWbV44ZThcW+MBGFOg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639820; c=relaxed/simple; bh=2meA91L5u++JHLpHDeKoUhRMRZBxJC6jWGdrpj/GXPM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Q7lUOvyOY1uMsXLmJ+/zkSNZ5v/pETBZQ2rRmfRdsVReEkV02j3xnqO9kujFuTldVD5iuGlaNkwFMiQ3hCb7RPxf8r1En9Af5b8rMOdvSjIiDZY+JX+ccYM0rxMG9ehp6/nwTAelLZBqnoTqzf+b5FayQi7KAs78U02C1eh3fWA= 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=WUJviFO1; arc=fail smtp.client-ip=52.101.52.19 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="WUJviFO1" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xq/Aiby0jheOQ5HRwGhwbVDH5hAw2mjIi4DxjD4PSPmo56V1mPIHn4V4AOSzPD7nr5PDCFXtRCHqRyDPToRo+qC2qtWqGiftJYRmDa6FN4rNUiyh+nTJu53wf3OCMqSIQERlxZWLjozjOak8BFldH6Ahfm9mANzM8lUahMk/4xSp6nxyb8wueaZf64mUIpsEWCwIQDXXWnWOLcFFLvoh/xhzL8JLSd7Nbp66xOBrfn8M8VQgm2zXbpW7U05Jhc6Cy3TwAupgxWutya022t1ZBgoju+eZfbEQrYaKgQBlxWgMPG589KG928iLIJkfStU2m6MzYbz16GuPSoU5lnHQeg== 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=+R4aV4IYkR9k6fVtn8f5fdvlJs6hjyrrqMOk4mwU74c=; b=CI+W5854hjknqv+y79OAVieHDJz1YvIxyNUUsElCxxqI60smmdS7s9z57AC3PNH7n40kanueSYQlHIFPNkmUPwBpiBjZWrauvfzT5qlQXHnH9yVYgtUsqSLegW/aPFI2mLBIZ0SXz4BWKEcp5/n9Ga2KDvV7PmFbk5v/XTG4Pjiw5DR3Jm58VMzdNIn556w4zo3OhWIa43jnj4VhI8G6YuB3wUkMuXww6RI7pXZOmlNpA2T3TtRWIDQYKjTyJft1OEtapOJW6L7ZjLc3cW/Wh8GTbYDyA4FPDGzY9Y+KWsIH8KrEVYDORkbA6Y1hEbBxs7QmzcHnZgGdWfuQSj1KcA== 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=+R4aV4IYkR9k6fVtn8f5fdvlJs6hjyrrqMOk4mwU74c=; b=WUJviFO1k63KrGb0XDeABMuj5m34LeTAHPipVjiLvLMFpry/APcUAbp/IcX4Z6s90pRW/gKAxlVPRnmC7P0Yvk8gutBL3qmYQb4Cx4CByPlVS7QoyeFddkdDoekWA5lo5jOL0AYvfzcNf5fv2MKY2jswr61v71X0T2cNa3iKA/5UfRWS3Oq36BIJ5ARTAyin5cmjWeopAOOtQYap4rZZVTJTcHZl1zS2P2Z9uvmAzO+p3uBWIxh4nwyoTOotrUS/2WvDRlTFLRg6zTUhudyLsstjNAwFDO12Ly0syqG2i1owqd5tJLZKwzJBXIZ8VUk8I1LoLas1fgEciQO42FAEpQ== 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 DM6PR12MB4106.namprd12.prod.outlook.com (2603:10b6:5:221::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Sat, 21 Feb 2026 02:10:08 +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.9632.017; Sat, 21 Feb 2026 02:10:08 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 11/38] gpu: nova-core: Hopper/Blackwell: skip GFW boot waiting Date: Fri, 20 Feb 2026 18:09:25 -0800 Message-ID: <20260221020952.412352-12-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR13CA0092.namprd13.prod.outlook.com (2603:10b6:a03:2c5::7) 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_|DM6PR12MB4106:EE_ X-MS-Office365-Filtering-Correlation-Id: d3a29f73-3a61-4079-1ea9-08de70ee55ef X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|1800799024|376014|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?rn3aosGdxzDN5/aw3g1nrO34wSlEPCDinMqhmyynEd3QpdPIuAkshF3N7XoM?= =?us-ascii?Q?vPKOecgVvsv5stM/U0Cq0/wr6FzfbOnmVeLNmpsAY6W2Y62d5NRfeBeo4YYh?= =?us-ascii?Q?/pV/efLmnOGvmbLivUUAHYMJkJ9UExTff2A4ijcNHudvYKyDBWhXbkZT7pcZ?= =?us-ascii?Q?kDTBwPGCKWl34csjvVq9ZwMlqjYszSpZbAY7fS7BbdJnlZSsn68lAY9r9E/I?= =?us-ascii?Q?PC65cgD1MChF5o+NtcDj0uPinYpwsT2W11tJMvVzvHvSxmyLS2mnkxFAhb/v?= =?us-ascii?Q?UM+yL5klxeIFEcG1RlSaxkk2s7JPcfMH8UyxwSHw4xCXpycvWS4ubgteaF/u?= =?us-ascii?Q?EuPNFjijneSFRINPp+5KBRqHj+e09hrmlBoMcujkUMQ6K9uU540oz1l1Negu?= =?us-ascii?Q?jzQ0orXrAnszbTWrHCLvVq+oOWVj3FMo0NDwV51hyvvjoXdc7YzMYQ95YRlp?= =?us-ascii?Q?bu6K+KWcRaNj31SZhJNaPTni8a69peW5BhVmGwptEd7TPnEKhrgkrLVFzMKj?= =?us-ascii?Q?fm+m9w2VPa5XEL3S2NNQo/Rq3WL2WzGpuYVhKKmH/TOlvS0xE3ztz2zqbOmN?= =?us-ascii?Q?3uVut1zob+VDIqWzcN1TT0dl5f3OZd/fl/dvlWvUuryunMDqEBqTO3UXUGa8?= =?us-ascii?Q?zDslzKHjT+GaA9VR5plvlu0Kxyn6wgk9rnCsV7ov8qPbhHpipy1OKVBVRa34?= =?us-ascii?Q?KhrBt7h77GegogQI/19MmvnVKLL04RtN3OMdnDmIpuKDbUitnFOufI2gdy0L?= =?us-ascii?Q?Udr9EOsHNmeE4wNKQ/CfjS+KTjwhE05J4VOHfhRJc3MLL7fQs5Zu69w1snam?= =?us-ascii?Q?e8pTii4w1W7prP3X6zlWypGJb6CCh0ucVYIj9vTzuIt/kTpDDfLKrTHeyFdr?= =?us-ascii?Q?XhsgZAOcS0EDnAbFoD4RbvfWd0FpUgNfQv5fgPiOTzmMrIbENcuptoHiEfz1?= =?us-ascii?Q?YYH4bafdsdFhHtmcLzFUAuQTswNKQqi2HuNdOWitdvoCLLlHAfCylhgMvP6x?= =?us-ascii?Q?TIssT/4cQCBuUPKPgpSCbIhpcJnsKa/dYq3vSIF6ZlXYBL6XvUhsN0Ro4tEj?= =?us-ascii?Q?egWIUhbVjAFngIDvR8046g54RYfKIRF8XJPA5PrpyjDdKqV6muAK9+GvYuGT?= =?us-ascii?Q?t4Q84BoqJ17TJNVHDE4PirdMaxfQ/CkkesvHV6vPKP59P1xW9SHfE20ymL51?= =?us-ascii?Q?0JKL/7CzfpZd6grHbSJLIiYUl62qMU2WoBItZBlza7DJp6HsCbWNf4t/+wn6?= =?us-ascii?Q?jprIGP+RWYju0CgKcErvNc8NH7eMcsL5Jdb4OtTlHzzC+gEd7TA0190oFT5+?= =?us-ascii?Q?y0XW+s1rE7wkCWL6+j6RGH6D5lQgC19XLn5PecNFIBQyUpqHAY4WzXsKyqg7?= =?us-ascii?Q?zLFsynsnSQ9+dGi8y7oZeZEOi2Qsx/SWCp6/GqEcdsWiN0pSpmzQIWIXTscY?= =?us-ascii?Q?Uw4yVYzw9vosAjsljS84jr9iE0aQUG0LrCWzYrMfDFC/ai4hCLophhbhiFqB?= =?us-ascii?Q?v5NyGllsLm7tEXlADrhIkyPDQugd3Sr4k+Dydi2TM7hZYccj/Ffz1AXBfFiM?= =?us-ascii?Q?hBJcFFIT9k/zN2doYhg=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)(366016)(7416014)(1800799024)(376014)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?uRIjXX9kGDYMds9xDkkkcWGcy27Gy1AuKvu25z9vKik6zEhlHjGNFofyPZYc?= =?us-ascii?Q?WrQfQuYoAqYNaVHAfKXWlNWqblw5QScOIEvmEEivqw3xuzsBbRZtMKF/wLXs?= =?us-ascii?Q?m/PIdYjNMDCwfZkkgcCZrsYdWd96O/oACNcMJMG1yXBjK4cmxyFWvbmNbSrz?= =?us-ascii?Q?j4+NYC9qWSxACpqxtVefoz8MIzAL7UnDtsAOzk8+uaaAZa3LArJJFnwr7JSM?= =?us-ascii?Q?68HSz36tNRMBpqNsRkQZOdpyJPx2Bax/Cq4iNdUPiz4sXU+Ra7UOn7gPmqjg?= =?us-ascii?Q?/84rf+vaoVNraw+ia9HI21OqTOgu+sYXxh0stWaNAP8vRUoRI2ljvWJvmbt4?= =?us-ascii?Q?Yd625EqWMmJfGlQ2zmgrbWAdJncM/5dsghXtseV74hBBAFmq/4XzxZGQJAQ8?= =?us-ascii?Q?VO4/VdSs2k5egWKyTomwi5IfxPmy5s6iAOkHJ9DjpXbFFN1cvtQE+C3vy+LW?= =?us-ascii?Q?TeBVbmECeN75OIMwWK0XkpZHDty0Pwwh9vnK5GwnCQvPduyyQuTavx+GoQ3H?= =?us-ascii?Q?zO3Q26bP2CS2qvmBbGKAh08eV3D7AEmP0oK6BErw92rEz+ZbNO7VisSnW9uh?= =?us-ascii?Q?RiN0AI81KMDmLBarF0YXZOvjM/bocCfwEVkglLGq6hB6/fNdqS7oebdyRm+O?= =?us-ascii?Q?P5CeceLFccTu/vUre6197sgpNWqOLz7prfi6d+wogXwEdk+ZEa4MM93+1bVX?= =?us-ascii?Q?huSK6GC1QIwTe2IcqzBE1DzQgmMgvpLj/Dw0VngnQKNwUSkzxBN1gJG+U8ZA?= =?us-ascii?Q?HplLt1pFA2Z3SnAnL8sSsnJ/sHIWStcxEGAp1Z5AY+Or3VK3Cj2KZpFARcMI?= =?us-ascii?Q?Ss/qZEcBFbTPwoZM4bxvuL3fSDkbUOQhhvJqdfQooCKFEJptLkfsLUaq6yc7?= =?us-ascii?Q?T7PpQrCQjSwfUiEP0tNvMYHuq++wP3QG4l/UL11FWShGUUQSVlVs++TeT2nr?= =?us-ascii?Q?UdJCkZXkGAPYfyvNixss943C8Y3vBCvPn9yaoOBhz7t/FeFkyWAUnrMZLQRL?= =?us-ascii?Q?7zzHcS03h1ESwPgRDd90ousuRtu14mL1cxqeNKgo5f95VXRJ1IXRpNrD6At6?= =?us-ascii?Q?so4DDfLBH6FHjLCVPqVvk5uxvE3VoNRDjHxcO2hJzOMM9cY9TN/t6gp2mLW8?= =?us-ascii?Q?Hz1orOsEmutnUhKhx0jgwvy1eOeK1wU9u964a2rV5q4CnjQmDQ0MgCJpIjEp?= =?us-ascii?Q?cwxV4P20TAvhtwPjsw5HI7T0NJA0tc3u8PD0igeRBoejD0LjGfGJvu1Zyfht?= =?us-ascii?Q?ZR02hxmEZHAj/xVTP7cJnRKvrXDt3gTdYwH0hfXImFNE3YYAmrb/oO6Y06U9?= =?us-ascii?Q?oN7q7RwFmkF/IYRUxnfLn2ndXmlWa6gJIIbcHeJJcDdUQOOKOdOpRFaAyTWU?= =?us-ascii?Q?t399RQv1lT5Dv8L4Q2OKh+H+13moMk2MFVslySDKIC0ukY9pWaDmT/X/65/Y?= =?us-ascii?Q?FyApcSnB47pHyENzGU8cvnExYTXKk5CRiwZb+u1D15k/0I7TsltW0+jEq8MG?= =?us-ascii?Q?ID/LAeCX8X3jFMamO2aVkCV2qVS//20yKBsL3PA4Fxcy9ldDnFQsGpcnpGRn?= =?us-ascii?Q?0XOUaG4TyUxnaLT+ZXGf8Jh0clXt6kRqIxf6nnrIPe+knTOAKux+2zTtjugS?= =?us-ascii?Q?9OEPDWV9BnFhxVSGuEQSx4Ni4Tld6Kt4BczVMW9jqzMACOoqIUAE3V7gi/Jp?= =?us-ascii?Q?tsl6Mzx/QncIzp6aqJxxjjYM0rm6Cjc5tSNYIKKXmfQncKH7HWfmZrMEF1LY?= =?us-ascii?Q?7M3LD+7ctg=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d3a29f73-3a61-4079-1ea9-08de70ee55ef X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:08.0700 (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: j3APT20Yofe1PkaaUzWT4VX763qZo2Sc39ap1d3PR9vNZFF7HumsHwaAdVCzl7s3wfoEJxmQia8yUO6IJZYOXg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4106 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, and in fact for all future architectures, because we have moved on: there will not be any future GPUs using the older GFW_BOOT system. Cc: Danilo Krummrich Signed-off-by: John Hubbard --- drivers/gpu/nova-core/gpu.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index f6af75656861..50bf351b64cc 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -170,6 +170,15 @@ pub(crate) const fn dma_mask(&self) -> DmaMask { Self::Hopper | Self::Blackwell =3D> DmaMask::new::<52>(), } } + + /// Returns whether the GPU uses GFW_BOOT for firmware loading. + /// + /// Pre-Hopper architectures (Turing, Ampere, Ada) require waiting for= GFW_BOOT completion + /// before any significant GPU setup. Hopper and later use the FSP Cha= in of Trust boot path + /// instead. + pub(crate) const fn needs_gfw_boot(&self) -> bool { + matches!(self, Self::Turing | Self::Ampere | Self::Ada) + } } =20 impl TryFrom for Architecture { @@ -315,11 +324,11 @@ pub(crate) fn new<'a>( let chipset =3D spec.chipset(); =20 Ok(try_pin_init!(Self { - // We must wait for GFW_BOOT completion before doing any s= ignificant setup - // on the GPU. _: { - gfw::wait_gfw_boot_completion(bar) - .inspect_err(|_| dev_err!(pdev, "GFW boot did not = complete\n"))?; + if chipset.arch().needs_gfw_boot() { + gfw::wait_gfw_boot_completion(bar) + .inspect_err(|_| dev_err!(pdev, "GFW boot did = not complete\n"))?; + } }, =20 sysmem_flush: SysmemFlush::register(pdev.as_ref(), bar, ch= ipset)?, --=20 2.53.0 From nobody Fri Apr 17 09:18:11 2026 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010002.outbound.protection.outlook.com [52.101.85.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 74A1632ABFF; Sat, 21 Feb 2026 02:10:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639822; cv=fail; b=SK8S2yVgOD2wzKg9j0V9DtDhDlJuqmF+/Bue3p7jFE7yVyIx8WTLE6VstTSGdosnyMos3AK1y/6niBl9xTSj6kAkhIuipoPjOaPsGTfJNtJ9Oz39b5i8NkFyWP12rqxKKnnEK+Gn7veUKf8beKgmuLp6emqkU8l8golirbboI3k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639822; c=relaxed/simple; bh=I2HeAyt2lstAURSFoRO4NwWrxmPg4mamAcaUj6J4EE8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ioR11V5WtzR2BBFBHijtcp+36HrHYpAicgzC8/0wyhXXeFMOiXsesPXacdDCgGjAoP5eKV2gxklK2zBCPApFs8w+q+vFGxdcZ3VAYTVgdieIEZ9pc6+3zn++5sWVnpHn9ioMNHPKfoqwfJHItXc1sD5O1pvNxq3wjTs4OQ+ayyM= 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=SkW7mVVI; arc=fail smtp.client-ip=52.101.85.2 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="SkW7mVVI" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eCygdLLYf2t6KojSAUWdPgeOD9DE3xZT8clck/pl8oVCRnaTnMmhpEMBt+Xltw4BD2da7vWMGkN3NSYXwHVL+Fz0jPgcDLXPmmfJL6XzchX2sfC5DCFxMqOxPOx0YfCSVLpTJ5yqHwoYb9jTLcuLhxir0RtVsLmQxFs+wgRYM/+iByi5uQpWu8wPjz+0ADESbM3vSsF6jg4x+gqSOdCt3ISndEQgw99Kt/Qe+BawA74cHJuj1qS/6fmRoz7ZZiFTtdFaptVWO9fZA9DxAUq70XzwLuzm6iuqalVfKlvWOMnmkzwFXOAUqzyUtrkwNJTodHcijvSDyCvHJbIYd/GJqA== 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=t3naXq4lF3LhrMQkv6RGurDDwBhUFkOxhIl6ifxgU/8=; b=bzpSw3cJGXLlGcDu5ibzQXgBdfJRlUi6N7FMHvaXAML+/b6ICirG6EjP/6/AOI64Xv2syzHAUqod6S9g0oXyVmEu0vSWGoSng5hrtGkFpz8ttKGtKtMVLu/pOZwDvVV8QYJgwV6730lOU3Pnc+MINBLuKXZweX12AJ8lF5CwOIU6C4V5CurT9zJy69OEfy9EFE3GxdAf+s2HoExCJ1M+3YRtFvY9kEQmd8+Q1GJq+fV4xD406iLdc5qXrnTO7I5uLlNhiuzQu+CBxU2qA5iJAKrqrgbWCILw5WgUdpVqKKY7qaYO+15spSDEhjU0lGdqnX254xdXfPBPcF2DKhozKQ== 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=t3naXq4lF3LhrMQkv6RGurDDwBhUFkOxhIl6ifxgU/8=; b=SkW7mVVIvOqrh+9vaCsDxdHWOAgzff82nWMV+PlPyJM3o7lT6vvnbdVLDymvu6bGj1A9pPzGmMXhEFOC08dMhFK/2PU0OcGE/BQ96DnqVY1JSHlIvwX8zx/vSnFkOhuooV3PRH235H+hVhWEczIYF3Za92emV1KkoPSK25ObezyL8Wz9igYeRl7xkAh4ovpRxl0TAvDXsUXMpFEK/f1VhN0cPOVKCz/CwOpUO9LW5tPcTUpfeSFbK6mNXz4xMyz/b1O2YnmtKJnmI6EASP0qjAfZlbQanmGBVtL6g34YOJRv8j2l1G9sHYoBD6hEUHSzC6FXGb+jh0Izd9CH3rpLcg== 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 DM6PR12MB4106.namprd12.prod.outlook.com (2603:10b6:5:221::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Sat, 21 Feb 2026 02:10:09 +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.9632.017; Sat, 21 Feb 2026 02:10:09 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 12/38] gpu: nova-core: move firmware image parsing code to firmware.rs Date: Fri, 20 Feb 2026 18:09:26 -0800 Message-ID: <20260221020952.412352-13-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR04CA0012.namprd04.prod.outlook.com (2603:10b6:a03:1d0::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_|DM6PR12MB4106:EE_ X-MS-Office365-Filtering-Correlation-Id: 590f7ef7-1b6d-48fe-dc8a-08de70ee56c3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?7ZUW3cTzUVnU6Wkbh5LPGLZ9RKYC6cPZQe/5QGlzUfB+u/dSlvLBvv+QpUP+?= =?us-ascii?Q?3ksOU7pucZ0hq72HA6QCTzsR8jSyfrGz71KVqCzA1Z7yVwsibeEUeYJl+XiM?= =?us-ascii?Q?dLh6OscuEUSJRsSeYDpQZGYon/KV54ikIfzNVdjfNRmDwwtT3rgFL8HPnnUB?= =?us-ascii?Q?WCUvwBot9GsHncgvgg9ZsNpfJfQ84lLhwQhpzdKVU5u6zBBX7g/uoUIorNeh?= =?us-ascii?Q?9mracadGSKwRJ5jHxLNWLfRraPzfivvgbX9rTskIu+7yRQfQ62zABkkBO1V7?= =?us-ascii?Q?DbYsQp/hbvuuZ1SBaiHcUpdVIM58EDKfKJoIfRdQ0sA9J1MGeJy8f4lJrmWC?= =?us-ascii?Q?4Z/OJ0ggjTDumkr/cDFEFIaFCebS2XiZQHdHNNZ+bl08sNC513ZIopmqAWvI?= =?us-ascii?Q?Wz2oozOzTClJcI0Q+N62YTJfB5GK5FfDxrKgLlV5t61reBTftDULFC81BHGa?= =?us-ascii?Q?sbdbJmDjIOaDbOLZ5YHqnVT9P0up5YvQgaz7KwAuaksLUV7LE6JQySDfDbCp?= =?us-ascii?Q?kuYe5aYwuw/TWNoGzPGkIDN/jaRckEsXGsPiEizDuHuxn7pIrq76UHXMdEFD?= =?us-ascii?Q?W0c/aux0U3twexZ9Gprlt/fJaEkZd3PRpEMfyBr6CpkLwMdYBd8IbxQ/UgZb?= =?us-ascii?Q?4uMyzWmOjSXdxdLZkZX8TBkFlLcHqD84AZrcBIJe5VTxWNV2Is0KsbUZG53H?= =?us-ascii?Q?BggQ8dGjTSEtyXa4/geNGsBIjIf+AWFQ7/HuE9rQdfS1cyur936B6caWvNCw?= =?us-ascii?Q?gLFqcMQVypMyGSDzBNEcTLT9Mrm5fBVfNFhFSvHJ8GJrylZiI/d8N7ymNSJp?= =?us-ascii?Q?D/cTLP72W0snG8ziX5ngOnSz1+Cjw/nSRan+rpm9Mz8kQ/pHdj4QHAbv3lp9?= =?us-ascii?Q?pmNUpBhvhGUzOdG5Uo1XqdHpTzSMEEylvxATQrXQoUSyaz5Jh6plRKw7XgMY?= =?us-ascii?Q?npSqKXMQyqn7VHkAxyOPRTzaN36FiHTI+UmWSUCqpGFOFbVLZ6F86G+Opz1/?= =?us-ascii?Q?XNFhrHlk+uJixCkXKNIa4iqHnOmrLTg3wDOHcUAGHGWZQVs2GBOyAlWEaKv0?= =?us-ascii?Q?+aXwLKQTJknVxjiXlTx+N6ba930FLc8DTf8Ui9Y8k7GAyxPyKahRTtflz3+8?= =?us-ascii?Q?In/Q8JoBniHXhZWtp67ZMItWKp3P4dhKNA153GIaqumme11a2qLYXwPhAsLN?= =?us-ascii?Q?CPWsgcoYpDjJJPa8CveR0Auhmlppr1B7t4B+dvq/W8A+kVJwvGtIDXmlM9ON?= =?us-ascii?Q?yDqFuXLner3BQpNIvEcov3DdI3ffwNSJvk7FHycScJ3pzmNEStuOCWBf3fWB?= =?us-ascii?Q?1WQgxX1EodtD2KwORMgVlQ27Fev1zkua7XdiQgxwkRth0mRTGg2tRLQYlSvy?= =?us-ascii?Q?Q9xWSQznrOILCtRRpJWlzn41ysVpzfSyTjbLpzSaEiUQc8BTNmgTF2RR8XLG?= =?us-ascii?Q?bjZMPe8Y1ii23Ldo4e9zEpVGi1NsW20kTzHIvfE5dMzSojt/ttZ0Wdl65DLp?= =?us-ascii?Q?0wnchXk7dq7Tn075q26w3k3UMgWTtkcC9Rs5h6hmc8W/ZAddZkmFUrr5fSI4?= =?us-ascii?Q?fCom/lu77kqKHuW5uJo=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)(366016)(7416014)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?3sdn7LIbfk0o40nivtktKqe+gHbklVzlx6NqHQoYjERVK1kNTQADuGVfHcF+?= =?us-ascii?Q?Tdw5akC9893OwRDn8PYCApPhJqb3aRICM4luX6wdQOemkFa6+rt2D5fqweJm?= =?us-ascii?Q?JT02BddwwVv19iJ6VFAgPq9moLXvZ4P88Eo2kFFhDTYomTldlmm4VUV5WSo1?= =?us-ascii?Q?8YBiTmR21EP0frYtweUqGaQPDBJf3LSOcvSQMK/LycrwRQvCOFtLDFZXvxGO?= =?us-ascii?Q?y+P5513QssZC75/3eT9cFg6IutF/X6t9M7WrkLk3wSrfIU82/ckfxYC+3F4T?= =?us-ascii?Q?0rPU1/IVKekMq8tIqOP7StBHTHnbAyKWMyXxG4RSG7fSZ0pBrkjuJQrgOF1f?= =?us-ascii?Q?nZ697466vKmWJXX66vT7LnHxNvX/we4632g05cMP2eNAOKt1KQkaNZrHRmlW?= =?us-ascii?Q?Zm97gPHRTOBeNV4cFZagKuLlFgWKYCHa+Wxz+bhTeGlNkIeb99mn8a1kRL/z?= =?us-ascii?Q?RaWCsJWm3RPFjcrFapKXUtPl5ITQYEn8MsdpfAivE74UzHDI9jKqUFDYcxMR?= =?us-ascii?Q?ee6ys+FCh/hyPWx9yGbuPvEqJrhF5nzGZpjmBtd30c88xD+mBIoeU0bYrITe?= =?us-ascii?Q?azmdFvoCIqVz2ZDM2+QwfTW+wbKCe4xpTNqqc4GUNTEtqwFvZeJo6fIKiraq?= =?us-ascii?Q?H0VDCXM8fUtqSOsuJ+4HU6fQnXHIMcWmRzUCvFSaicFbzlPjWuSaHhiElX6W?= =?us-ascii?Q?WawzUMoT+lgFy+vPps+U6NRMZCLn5aXn0yVjy0r7stRY6e0BYohOKPOPhEZo?= =?us-ascii?Q?A11YQl5DOXhBAaNBlz7doM1d6NaF9Y/1RJmFsftuEvavKpF/Is6dsprhMdq6?= =?us-ascii?Q?F6GN4ewac3sWBwfCrlkVVPruPiPy9h76nopYkj1sbD9S3ZXu95X/+ZHIRi7w?= =?us-ascii?Q?Uhy8Ljs118mTBVajfoMb/nB8kfdCXtInm6TSwKJ2o/rprE5ZdRfz58i6KQpW?= =?us-ascii?Q?TVYZW9wASAJWBWRgmQI1ZNrOGJOYC/5DWjxG4Fa9BgP6dHKByOCFZ4FMKXet?= =?us-ascii?Q?4spCZwaK1Tw3fQTqRqLfAnmNqXWP6TFo5bdMZNE02sGM1xi9KIH0SF+Ub/tL?= =?us-ascii?Q?r9nPbjM36l6WG1N1kFPD71XtSH0XJZ5uwGyI0nr6c96wOrm9Yy7zFeYdjzXw?= =?us-ascii?Q?NYDuJ0uiGpyo3djTZ4V0g7hGsbcFQ7ZBCi1yKrxAIP7U4SoQ5SedVEtMShSG?= =?us-ascii?Q?y8C6ogwSUH1WmioVK8HByXmSBDHdQiKxOxqMvxbx5SqPMTGjWmnS65pYJia8?= =?us-ascii?Q?/MQRAV7lVbxxNPs2i6hJpWaI111D3vdtAyFs1SXcoVBIQRyD9dMUXnaMJNGR?= =?us-ascii?Q?6Qum0s2RAhDhYG/tEOds867C1FjXr2VC7Id98sCU0Dqogf3xi8of3NgXLfps?= =?us-ascii?Q?mAvwgvWv7zT8QSiCbvqtn83U1OjfFRToN4rCP4UpjZ363aAVMCZgRvt57oYQ?= =?us-ascii?Q?Q9h3hAEiAxJexS+Rc0zH3ml8MGcoylcVgDDKS8XdKQHuKiUS9pC9lD0uLEwt?= =?us-ascii?Q?ONDKzfjJyHF1Wt8hIJyBZS36JfeJ5wWYUEVfB3DCv5N4bJzEWYMNQROBB8Wq?= =?us-ascii?Q?Cfr+mwRcNiYL/dJCSUqbNSf9Vyb7rXAc4unH4dzKV2YgetB0tBL2DseW1c80?= =?us-ascii?Q?/FCBV5pY5gKa81pABFqRfX5ywydWcJpERN0ywAnzVmBhyzQTtfQsB+N/oz8X?= =?us-ascii?Q?fqR4cf/bAy8WrRK2UzGyEvm6mpwsUmBGOnHKBnREjra4VxIJa9K5WjVyLflQ?= =?us-ascii?Q?mGEe0ZnshQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 590f7ef7-1b6d-48fe-dc8a-08de70ee56c3 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:09.4631 (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: nknRT5s2hYbGnFFZvviQfS92ncMh3CwCntsCMF9pQF7H423PApy0Z6DksDTsnFtRGAZo+ixd79/IlUl6lSlLJQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4106 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 | 93 ++------------------------- 2 files changed, 94 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 468f4b43574a..f247deb06633 100644 --- a/drivers/gpu/nova-core/firmware/gsp.rs +++ b/drivers/gpu/nova-core/firmware/gsp.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 =20 +use core::mem::size_of_val; + use kernel::{ device, dma::{ @@ -16,7 +18,10 @@ =20 use crate::{ dma::DmaObject, - firmware::riscv::RiscvFirmware, + firmware::{ + elf, + riscv::RiscvFirmware, // + }, gpu::{ Architecture, Chipset, // @@ -25,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 kernel::{ - bindings, - prelude::*, - 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.53.0 From nobody Fri Apr 17 09:18:11 2026 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11011019.outbound.protection.outlook.com [52.101.52.19]) (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 DC13332C33E; Sat, 21 Feb 2026 02:10:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.19 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639822; cv=fail; b=JjH6wFy3uadKpAYwvGFcRGXsZ9XkBx1sIfR3XPRKXea84RGnnMXq3mZg9u4+SKw4kgWvyqN/TTR8SRQf7Xef/pvnwvRpusRfidTRfn7cu+rrGCRCt+C3T2rYOCKQurR+5nCcGGDLTBzPajVzdxBga20SmLAuzfi/XhGaHkrG4HE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639822; c=relaxed/simple; bh=HWd9IwpCrUXqR7dfS2u14hBdjEAYZCLH0SiUYJGxns4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=arS1aHBH6qukwM+OEG65pIgPa5j1rEBlPFC083nEWcV9+rq1kM4u54jq8ilQX3HSSyikXvbKEBzc1/KSPgIVicW9kUj2f/aOEOjbXm17XtPowYZ6OD4JaKGPKV1oqAAJ5syGuoRDqQJ8nZnagVTjje4gicYYt3TdJvoHu1Gh1m8= 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=Uo5DNBqb; arc=fail smtp.client-ip=52.101.52.19 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="Uo5DNBqb" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UOvJYZ0JfztsWTj13raxxGktGu+sEnstJc41aXpwKnDPArt5s0ZWEwZfJObC/4SYb53/dxO0g/Egop6VW8mX31lb+bRF1hg8NK9Buq7GDO3phf/fMS8k5WafIXNUfldYjIsJDCQnN/MR8tn9x/dS2JyInpOGpredlALtNTsH1ilu8vlFuGQ1T+NLEUSvNrF2ZcNTJKMc72GeDl59+hmeWIxFs44bAjIPYVsAdkTcS8lJmIhg2PLCVDzP5zTw/+7A/caI7euMDKHA8vXIp4i09l0QB2gvKBKgS1ohGrl8/bS34EyAn1ktltL9q9rcnMCHbUNzcuGmMKGAkwKtsdnLvg== 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=TD20Yi9ZNK5oTd2CkE+fdOZg0waIS/6zSDxO5l2iLnE=; b=E8p/KEbqTYipLqyMJiadtqC0J4sXcepy1hwdUb4rsJ9TeW4J1wq+YDx8B7imeZXydjHWNLDYPq5SgJHjrFTupYAfngbXM7bUlfMpJYC9+gviwYScyz1fpTtzgT/2CYdjXUDjhz82TpbvhfMD4zaVgcsmiPoISBO2tviA0WgzFHJQTdj2G7N5VSMMuL+fl3/9w2/CEt+xUN+IW/eQZRwW+bLhal4usxygZfeebP2Yqag4ogz967bBifpt2sClQ+r/YOi1x4/kzqXm4asXrn156haB33kX8YAw02bBPSpgZb1N3a1K9FiyrkuqH+YlB8XZoAxM+SXyUIV1Uf1c2GTefg== 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=TD20Yi9ZNK5oTd2CkE+fdOZg0waIS/6zSDxO5l2iLnE=; b=Uo5DNBqb+p+l+1FUqXU5pzjaeb6HydOJEotHmI2EVCl8Ah+5X4PkCja4ZTvYJ+8rZSC8YD5ky+adfgD9FXzdW6YRN8Ys3IlHkEhPO2LboPbbN7WikfJuWlcmxDs+JpK4WYhnHq3s31ZQlprIMILOGAkMKZp5Xl+dfk5uBXZ+UduD6znuH/YUQ1Px5RdNGk+J7pLi/ZupHhfqsjhpONTdb3kU9QzqURjgjJA+M4LncmO84rj1t96iZw7o3w4ySy0qUvvmRO6p+ck5gPs6+2U8UZn5OA1iA/S8nVaklGyc5khi5MiUDIw9GNI3U3Uob5goeUnFyj0EtEQijiwrAVQDFQ== 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 DM6PR12MB4106.namprd12.prod.outlook.com (2603:10b6:5:221::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Sat, 21 Feb 2026 02:10: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.9632.017; Sat, 21 Feb 2026 02:10:10 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 13/38] gpu: nova-core: factor out an elf_str() function Date: Fri, 20 Feb 2026 18:09:27 -0800 Message-ID: <20260221020952.412352-14-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR13CA0109.namprd13.prod.outlook.com (2603:10b6:a03:2c5::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_|DM6PR12MB4106:EE_ X-MS-Office365-Filtering-Correlation-Id: 52fd5ce8-f451-49b8-53af-08de70ee576b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?kL/r0Eu84BNfsHzOn8goyW+2ybRq04oqknLjXKohIncy7nwGrRqUV0lNuNdC?= =?us-ascii?Q?yp9fB33SXDtH74Lz7ljUXgddMpgSh8aqv6oGXYO7J5eGCqlcHva0SveK7NWL?= =?us-ascii?Q?bWXJF/FOKtFgvPcKI7GYvV+cUB1Dio9NpLWTPLqlM9iGJHn+KI/xJ/y77BpP?= =?us-ascii?Q?vW11zjAImi6wqDDu0adUsO2DD2CArKOeht41Eq/iAdJ8zJpi2QpQYjKuDXIG?= =?us-ascii?Q?SZVa4ThtDtnjQFD1Z9rQ4Sayw+Jt8cbiESdxkkPtD0UZcB95bOk5qbKGD5pa?= =?us-ascii?Q?mV4HBorAqqbVH4kFgeYrdAMMbY0VJe0FUWz8pM8dRd7BYyXXS1TYhgYQJmhb?= =?us-ascii?Q?oNWc8SdH6axTIqO2v0zt/WwWLpvOV3eE83+G3vxKmHHz0owEFJQ1zNZo5tbe?= =?us-ascii?Q?WJRJYod5hmMhX7wj6y6KhSE0xG5iYgJ6Eevw+jhdqxbmoqLvoOxENSZ5LG4R?= =?us-ascii?Q?TqHOR//DtyVyWG9NsAQQSJDdtmgVq95eue1MXRcje1/+KL5Dy2XFS6pcQyzH?= =?us-ascii?Q?bLqewEuF4q/JUlbztrjLeBukpZvi9HNZfCeimVkUv9/1w7ZeUx593LC9qBwU?= =?us-ascii?Q?Ts+AmoAHOo9Jn9HGVIOfVUupN/lfSoyjI1vMkDbfTD7UMNi5M196jVAaYWLk?= =?us-ascii?Q?pKEm9K8jOyolFCQ5aK+v9TvK05D0ZDkkqTyUAWhuK5LP9SOJ19vVomzQw3or?= =?us-ascii?Q?pYHvbNl5m9svubPX/+u9yydEdA2N3LK04X2lLt4hJX8nqqjoz4WYc8ro1Xaz?= =?us-ascii?Q?F3Lzjtyk5VVzSGotykTkcMN0dHgWcNZpqTGvcxAESuOoeYoLP4GIPEK4qDQ4?= =?us-ascii?Q?fcx/AInISWTPb9Pr3AlFDrDtBruhrevi9xx92ZigBp2PpauPFT4p5+SppmOx?= =?us-ascii?Q?0u2Qyb31zanU/BnfJwtS5m09+tt3p4/ST1E4K7S1rradQqFO3ePEVX6IY1m9?= =?us-ascii?Q?LKSIsSYXxeb02qT9KUZhVH1hpLwVALz1H69vBbm4v5OIzvfx+t77OSV3YmsJ?= =?us-ascii?Q?jm9x5gd3gP+ooe//BXoimlLAGEKPaFmcF2Z0iaWlXFma7UT9As7K4qHA0N/H?= =?us-ascii?Q?uc8WMCmCm2Kg4gavK25LJglm8M6AUYTDrkKA3NBE72tS+V6tPIcg8tC4dtCS?= =?us-ascii?Q?dYtywNIn2JK6TXgC5Tey2ErIsaFiHw/9KqCPMP1wqCbgxuQSwsPbPQb6Xbp2?= =?us-ascii?Q?diREbR6yINNLY9+AM9FrAxFjAv0NMvGx69g67Wb8HhocXYmThjGWBKD5Pa/0?= =?us-ascii?Q?dGeZAT1tDM8VKXLRRnfWxTYv64iLgKaSjWnjA9636B9sv00x/ziUvQDSNAVH?= =?us-ascii?Q?Z9gtCaGTMAIA5dhNFrHbhuePlUzuxQ7w7cg1KoNBTJm9xYjPe2IGicQ+0q55?= =?us-ascii?Q?z8xJDRU21MalLBl3TJ6OQL/RikFMgz8pdR9Ah7OJ+T4d9XggZBhBBnFA6zpp?= =?us-ascii?Q?GamYfVHywaAql/ndSkhXZ5TItMPRojWjP9jwjD1EDMBu7gLG0m3M+gY6EjhR?= =?us-ascii?Q?+I3OL6EBSn41thWuGY21nIua6AFJKK6ga3R+4z046xAdsX8WJwyVKq/e6xCY?= =?us-ascii?Q?5feDb8F3va8zg1B5GO0=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)(366016)(7416014)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?rfxAc4V9GLrb9W74OGJmgoWcR2JwsOYj0G/saAjoQPXcXAMinnKpzSPbi00H?= =?us-ascii?Q?TmMrUeyVcQ7C2qKefqHiIiUbIuvWba6G9p8XEV0LjUegddCQKAD2GR4PEYOR?= =?us-ascii?Q?DL/Ev7nQiK/2WaV6fB9SNC4Y9IySPaA2mmOPu17d8NRT+t0KOcErCjzEPp7e?= =?us-ascii?Q?0Q926ZBHGKDe2Jls2UiFiRgipgXUqsOlu1pEaEMbahnAkmMmiTA0ffPZw+jx?= =?us-ascii?Q?pPTL+bNxEBuEn8JMpzGZB8z+Hh/pcMvS7inrITiggSCozF9gHGA9sREnkZD6?= =?us-ascii?Q?ZkzX1v5h3oZYjW6B58KmfiimNOd4DZ3wG3k3L9Kg5lHBBeNwd5uezTZYhNbf?= =?us-ascii?Q?mmyMnnUMAzgnB7w71/uL6XqYmvjrQg8r8D6Obs49eScb85RAgOvK79tQYwdl?= =?us-ascii?Q?QVYNAYFqHNhvCP3Ci9/r9jIEt1fqJbQsllfo05aRALo3I4fj6yEojDpKlnqB?= =?us-ascii?Q?bQg7tAby+JyrH9BGlkaRhaGdFVo7QPfvJxmpLH6C/mE9TmnOnQCQFgZUgPN4?= =?us-ascii?Q?Bm3548wf7b92mlDzJ4XTCfIluKgMM4QqvVvJ687Lmlf+qeVtS7J0WiGqmNsl?= =?us-ascii?Q?yRMQMlkq6MxY01EdmDmUHBwFK1YpdiPvZyrhIbBp/AE+7vAVoa9VZs0MBPua?= =?us-ascii?Q?ZwZbBgjCtx5MXuCGHKIEhGTxjc6ZoVCQyMymiEb/KPHuBHuL5Zx4xlXIxkf6?= =?us-ascii?Q?/J2zBh8om0nwMZSU5lDndC9G9cOqFJD1M0ET4MlNCrC+rRI8ad55JEzEhqpE?= =?us-ascii?Q?UJinRFYi2Dz85WwRpcpZawskJ6Yrx+HI/rGIiMZaF7j3G0JWTydIZ8Mlswxg?= =?us-ascii?Q?A0B4XFQhzfKYtqYZrmISD0+KP8y1JbTGeut+eyUmT/0w0Vucb6FMssQ1WZQV?= =?us-ascii?Q?ut/EaNlry5o90egZ8cXeIDH0/DIIjh4J9DGmMdxfKCxhOT0tXLqYVv7i5P5T?= =?us-ascii?Q?Tt6pGUBXWpjYH0SYreSvp/BbKd//dA76rnfK5znm4M/7yevpHWGVsYL4uU9v?= =?us-ascii?Q?7smjfRP/iyOhhjIzPDJfpOVRHK+rILU20z3hbjGXAYEOdWtHXpo1NpfMVg/s?= =?us-ascii?Q?szBwHuouAF8GiJyeCTZWAS04294Z0otp5rTsEL1/Ojgp9+r/uBsoY1VZB1ja?= =?us-ascii?Q?9M/Np13vFnWc/M4o5CpoRHtkhc3bHSJjnBsweDQySOGC5oO05dhQ5gVNgAd4?= =?us-ascii?Q?CCIkRgXt0Lh3vN8IUNfDNDpI+jSv6Ie3MBgq1RV5fmUwXacJRrJtb6O9rrJ/?= =?us-ascii?Q?PR+nCXx8/mS716otWuwOoQDDTkkO3aeAJrXrPuNxBrwpIhqPKIdEaC018Hbx?= =?us-ascii?Q?peTLSglOb2hp3bPOOevfJCf9FMY0CW5tYShcVsCHEc0z7e/lvKlEd5uxPR1f?= =?us-ascii?Q?1NXfidXjNVJQXuT1Dt8elMq/ZI9zqp/zGLqKQmLtfUccMCu2bqih84WXd6sr?= =?us-ascii?Q?9vW6EmjJmrIg8L6+Qv+FT3ssrFeoipvdRpn26jWXxlSCoSxVd6WAEwuYHhsE?= =?us-ascii?Q?vJArpKo6l7Wadx8Iz3r1gZsy5sMu2EYTjA+c2HOBXz2/AmzkRdEZ3wE72PHR?= =?us-ascii?Q?PWaiZj9/PvPVFvQp0s6N8dO+ZN+TiJWczGFisptPFW85yD9mG9Klz6mcaKec?= =?us-ascii?Q?6lr36R5KFJDTMHb9GQoWdEYWcn6/J8erp/A3kocNME9Xgh/7a5Q8pmzP41tc?= =?us-ascii?Q?M6VjdZWYf1NuuJKllX9zUIbSg1S0Gtmke93M/PSSjFsl4/vwiK3LkQPws+Je?= =?us-ascii?Q?zYGhtVyzLw=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 52fd5ce8-f451-49b8-53af-08de70ee576b X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:10.5874 (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: vU2NW+W9mdZg5ShKphkBoVJjvl6bK3sKwU6O97CE+llFbOc8BgV6xwei1hht3ryYvYyNzEi+R80AUOIGty93aw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4106 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.53.0 From nobody Fri Apr 17 09:18:11 2026 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010002.outbound.protection.outlook.com [52.101.85.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3BC6932E13B; Sat, 21 Feb 2026 02:10:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639823; cv=fail; b=AgntvM0d7a5pWIp81ZP8DdLa5x6d3rZcGLcP1toV9i8RuAmS8FcezKjle9y1D/cPETS/Gcl5aZGrl6yXeSjehEXD/cwxYlQY29k+4zAJ1Typ3epuUIWs8uroQKUqe10itT1U2quL57cHBb1Wb4UE3ZKbKEq/WcU9bh/ooNQhe6c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639823; c=relaxed/simple; bh=CXr57zBO28GpZ1Q4UdpiRdgwKvDLzIU5tsKy2N0QzZI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=EwQJmdLnZOjfVEOGP0Bek8X/pBdBg9H2B0JGul3u/l+q3ohqh0H41KneQuHdlUj/m+QMRc5meAIMMipm+O4gbBND+1Uw74PnC+2TrfzYq6DPySsIfPS4cp+Y6NVyHsBoL2hBSCy/HouWlYSUSpC/vTTwA1owRnz6FWwQOUmmv0c= 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=Cc+mfnWg; arc=fail smtp.client-ip=52.101.85.2 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Cc+mfnWg" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=i75iSf6cYb50ztSmcuw5sl1e2n6u+P5NHCMCBHbDcH1zUVC4MZFhnUJjgpcI+KHls2zAA8slIwKq52TYDHQ2g/oNiaaW++lF5o66z4aciG8zHqdKvoVMSVvdY2/HSMM98ZARKtjLSAnqkSsAMPUKkEmDVy1SPQ6QKB1gz9HjXBrTYBhMwr8DhWgmfK4RAKmRsG9CPkOCQ28xhh1SQz3ZoE0sgrpcwh92nAtb/DFpqqty6d5RX6NEnFx2dlVLfgh99Mc3DkTiPR9us0tflBiPlB0Wfn7nxfErWIqNDpG0vR9AbFuBdS+M+Xjt3shy29xttSwcK8/b5KSoUganZvToBQ== 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=fWW2qX2qVKWz6Vd0/0rq/GpAxAHmJdzAS+Dvt+ESIUA=; b=pipWGQ16VOte7pasEsakQ7wOWblh9Zl2a4k5pMo61t91eb2kZk0UcN1wjHBFz2TGhvx+zJnMxRHxqRJJ9lJZOru9JZC8jmFyHnhZ/rCZufBAtOuwbtmxejn1F5JMGqoqKo3pSS+bZbcuEeiKGo6hFnbOsdUrxwKd6Rp1M2zcX6ivPklUZ85USorgD3RhKnNzyZnxl/s/wHzP8HfnzYx7JDrFOy6a7TYLAo5AsGplAPyYrO9F6M8QfBJUkLpg4zLf6g8mYSoD0Y0aMAX2kYQOjLobxVvRYo+JtDe0B+1ThHC53rW4WyerwhAsXi96Dl7hyW58BgXS1YP71qFV2azGvw== 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=fWW2qX2qVKWz6Vd0/0rq/GpAxAHmJdzAS+Dvt+ESIUA=; b=Cc+mfnWgpojh262S7JAGp+naN0X/0CRwn2VX6hg0EyiDkAoZ36fVsC0ASRhGFsYFfmJf2woH9vOs7TqJjaGknzeV98XQSZtbYeazCMHFEoFBYQQbmjyvCA+o0MBI4YhWkggWv0a8akeRBM3BToAqtYkh8XaPdS8IWHeBGeXnvbewnFZYa6MRDfzSalsWwYDl60PBwhek9ehQI0+ZY6qZ9JBdJwbcGcu6+HFoEpqCEMnadlCh61a1nBq17QIjnvjS6Q38kZx5S7SLQv91BGPfGSY7dwJUayY8toxKZJz6cOwCR4k1amuVjmQ0G0JcLREgXjuBVP5APXdBSjzEx7NvWg== 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 DM6PR12MB4106.namprd12.prod.outlook.com (2603:10b6:5:221::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Sat, 21 Feb 2026 02:10:11 +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.9632.017; Sat, 21 Feb 2026 02:10:11 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 14/38] gpu: nova-core: don't assume 64-bit firmware images Date: Fri, 20 Feb 2026 18:09:28 -0800 Message-ID: <20260221020952.412352-15-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR13CA0092.namprd13.prod.outlook.com (2603:10b6:a03:2c5::7) 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_|DM6PR12MB4106:EE_ X-MS-Office365-Filtering-Correlation-Id: a2b4b911-57a1-4a17-8451-08de70ee580f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?jaT/aIRnlFiPLZQK33jaeZRJ5JnU1uhSdKWX58y7YccUVXX6PuFK8bdD0Tqw?= =?us-ascii?Q?7oN8jt9p1crXwuHA95DdBWT91kVoLSuf40CSqwAP38YxY2Ald+gdOktTTjQz?= =?us-ascii?Q?8gK5N/eLZSqP8PNUbJZ4ytp89bLrK4VAxvqqNIH4/gKQB/0Dz9zCHB8hUW+r?= =?us-ascii?Q?ffrQnKEozHC14eV1dxdH+tOIIJGspD8iByDi/G/UsetYr3zjHJU3DyqKrS/z?= =?us-ascii?Q?RELpDSEwTKoNq24N4guFmzWHblawF8Y9rm595WJG71pL756ZHMkSC8mrtA+2?= =?us-ascii?Q?FrAl1xGXkKnalop0pad8kAUoArGo8mUKwOZqnXPlENgtZnnIoDIEAK7fhvH9?= =?us-ascii?Q?lGTOuQGUv6MkJZBHV9nGeWjIGYpgXYDyztZwX4rD9ZfrTF4SDIjG0gdKBoEO?= =?us-ascii?Q?gJXDKC9OKn1BRzcYtqh96E+WLIoobExjjKKQq/7KKHAaepHkeht1ErUc7SAu?= =?us-ascii?Q?6iNLFcuQG95MX2DwK7lnvTFY4r9dbke479LhtL2A14FBu6zqwZOPE6N47eKO?= =?us-ascii?Q?43Po4e7LIkwU3yWcZqT3ErRaRkFUQGKVrbz+91w5jLr4rexeE6J0j1NyksGm?= =?us-ascii?Q?UO7DDocIcgEt9h+wIH2hl55WhDsO2C7Tc8lNJNxHUcj/gX8txpDH4x0yoLTz?= =?us-ascii?Q?MmA4dXE8qeqt7OHWuRJD7ZicKrgGIPTfCqKP6QISCo/fGOX9B21Y/98K668q?= =?us-ascii?Q?d6ynPtQXmTfBVDvbuleySdzQ//2nfGPrheks9Vr+4Q+7zkGM0vquIo0HfAJu?= =?us-ascii?Q?chUx/KdyxzrHpNvw0/8RVqiIaaX3fhBr6SZg3gdp17Z4nlNxpGhwkVzzEJK9?= =?us-ascii?Q?LoR+Zuz6NxYSzxfShxOrcGMPdo0/BgzU4zuSzlMKUjQRCtwKzoGDAQJiN2aM?= =?us-ascii?Q?z+/9N6rtZR+BuCSMs/a/Pkzkiyr62187vvGHM11R0TW5KTOKEkFA6XYQv81N?= =?us-ascii?Q?aZqL83v6EnOOmSbvPfRN/m84eoto9t5A1964ca79gHE7xUjItH1VPvxA9U2I?= =?us-ascii?Q?k7smdt6MpTtykLXfP3akWbZZKlcDq/o9TSjnZvVFE8inomv4dEyS2cctimbm?= =?us-ascii?Q?M0aue/R5PyZ+Pbwwi6rv1MDAmi3i1yEgJufhVoRmGSd9oWMVrav4qI6RNKxX?= =?us-ascii?Q?jrvMkWZPkhAoBrBSNzMqTurf8uFxb3aTjMpScc7W+yKFVUzYYPEeDUsJJTRK?= =?us-ascii?Q?28kgiEHAd1VnDTQvOkciMz+Rtie4ijBI1+p/iQ3MdJjfZO4GYTCIOemYEFvn?= =?us-ascii?Q?yMOQ5gNhsIXjwx4F9TD6EFdijnp8Q2d6v8SKsFxKf14A0Z6OQ89BVHcbt7xo?= =?us-ascii?Q?fb2WyMiLV9VuPvw3LqBMlxhP4J3qPuSRGL3UVK70tMSsqzeDOFDM6nAinm+2?= =?us-ascii?Q?4kxzOU7OPo9iSpZNI490jvygEqE81u7IYslhq6487t3v2RULqhMQHzJbsD9k?= =?us-ascii?Q?4Ji/AFsSwrGzBH8aHtaiuXJaT6SWE1TsALX+VxaDzYJbGwnCk4fswENcCK0W?= =?us-ascii?Q?ATisvLCIJ5QV13ji4Zwg8yf4nSycM1qnXUbPruWVUVb551ndo96peBNxUoKM?= =?us-ascii?Q?TKUC+kfHwQT4avbhJZo=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)(366016)(7416014)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?5uWHbP/lkHqHodRq7Nki+gEzbjHatTDd5RGeeYlkQFQSlavmfSDchUf4ST/J?= =?us-ascii?Q?INjEIT1clWt13Uskc052qlLS6HvrHDuvwt6964gfhKRV9qfh0GvKEaOWkacq?= =?us-ascii?Q?QWOuUX0RB01wyTR08brtzAPeJcxZJAdawrRgyopXDEykOH2p5t6Vs7ytc7GE?= =?us-ascii?Q?UnD71gGU0YtA/3byYTYBcvjsqZTGTX6Q2SoKENEufI9xvnguv9iIldzEEOyp?= =?us-ascii?Q?riYaP2mVoJdFj8xHvL7yQ5C6v34oEd3pI8/1/gnhGxuw6nKLdfYubm5Gp73A?= =?us-ascii?Q?7roNMinGKDiTRjrzUU2RGsJhXmkqxruC+Bz6uSPUZwj9JYNergn9umDJlGnf?= =?us-ascii?Q?Lbboj65KtvvKkdOXx33IZQs6SxPU38O65f9UdP9d6UmiOgdCDxCq30aYkUMZ?= =?us-ascii?Q?lxLkme7xF2h78wCWo5HUFbCryb/7OTUFNk1nYQs/ddqX+HlV8YJUG1AFemSz?= =?us-ascii?Q?dASG6Xmpmxdd+qMWlqwFOdPfDLcA/q/gMywS/ni58f/rEg5r9cjZY0pDHqpU?= =?us-ascii?Q?ywFCgyz6d5w6QELdJnSUWmPgmp09Mu/r6634opH1nA/zQpm2cpMHYFMvMPj8?= =?us-ascii?Q?KM1KR2xmJ+6OduBNENfdREBqMia5SKrU/d77aLV3UmVW0NdTkfsIZtEZMTan?= =?us-ascii?Q?FgGrfdMCHAh2ifi3MwWkWZxz8lKT2rEQhwsuKwiOvvlBZxquhRGk8fYiwWom?= =?us-ascii?Q?C3+UnfafqK5JN2hezEtAyhR3Wdy3P215e0plQODpipw5JtEG+XvPtDODw2y6?= =?us-ascii?Q?HTVScEoofqCimlW+3j9HbFpfzVRrlH2eX/D4Du5feTMpQ1r4WQkjLXWJVgc5?= =?us-ascii?Q?L1juaqtREjS3f3oPZOxBBgQUZxfk5Awc73p9M2XKAwIe8X96C0AOgyyZ3eY0?= =?us-ascii?Q?3YzoZYfOKgdrb1nfoT51UdorLm60+e7xSxoMT9vS1CtsHIIFYeKr439bOQ1X?= =?us-ascii?Q?CxHxh3AMY4jKQPs4JbJzs6v+tVbuqHXmSXCMyz2V7nGzPLFG5IjULje0NKgg?= =?us-ascii?Q?WKc3vZUxFfAaMcIem7TMl2baGEXh7vBFG/uxXwKqxB/lGalrAnJzUa3ZqSM4?= =?us-ascii?Q?8z7BdAgpW8jg5HCcVCE3FEPtM64XdocKnK0n6EZcEP4f57a8QgMZMMka8YC+?= =?us-ascii?Q?CgTwuC3Zg+2LsgOBwo2dBOtnDuOocBO4sZpuuDRXFehFQhJlrScc0hyFghFt?= =?us-ascii?Q?4VmV6QuXhF22IvlfwT/C3GKTFLS4UD28OjGLBAcxl0bgOLmOOtX0VhOJJRWL?= =?us-ascii?Q?+t5uUdlPU/QEBVqTDoU1f4kHE0oWRzgeugQ+go7uxF/fOEfrBLshIt/DfZG+?= =?us-ascii?Q?/3Oo/sBMQJ+aU0afqNsrLDf9lNMWkdREIcFqjB/Rb8mnT2axvqLl+rUDVbsr?= =?us-ascii?Q?QmLauqDo8J9/jqsNcCoal57PSuyU/L7g59yvzIXQTZt/s1epOdcQUS+XlwVb?= =?us-ascii?Q?izKDDGBFmoiKzRdZD2Ajg8f0WSdRuXKWuSxQaIKQh3TXAvetUXCBo3eC+HkX?= =?us-ascii?Q?T6VI9jl+0+Ntfmk0vqZCjVUQC6qKYjhQN/fb7GkHcqbqAuYwN+EGTUVDEmDN?= =?us-ascii?Q?G6poYnoH3A+jFt/6GFh84euDkrvqc2/3TrVjV482v6FYqP0DwbhAy8nU7YGl?= =?us-ascii?Q?mo1UUWwlonFohKoD3eNyZHG8MIiqZSqYHQdJuKOe/5BJI4ptSLGVBbeY1i/E?= =?us-ascii?Q?EMNt0NC8yWtI+sLwPjst5uBYvi0xW4I+MAY5DAZRR8bfzLgnyHvoav1vltAO?= =?us-ascii?Q?9Hyl4LPKGw=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: a2b4b911-57a1-4a17-8451-08de70ee580f X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:11.6294 (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: JKDamdzWBwuV7ISAmIqj3nFrs0kpfmH9WAge1bEvPAhZ/4b+3ixsGiuE8X5dc3R1TOcDLi4AAt0GGo4RRrYCPw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4106 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.53.0 From nobody Fri Apr 17 09:18:11 2026 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11011019.outbound.protection.outlook.com [52.101.52.19]) (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 9602B32827D; Sat, 21 Feb 2026 02:10:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.19 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639824; cv=fail; b=nr3FIr+yFtFnvx1keHRNMArWJfja1gAh5REHErEzODkKS5X4rFOW+BtZ9cUSHbzsglwl2bSWRLZzBanDy4BUScuQaqjlZ/xnybEXbEe6Cep0lM1SCz/HfSicxbwKUshwM8KT/h1akv5+48GISfrvnUpUVhSCfv/MaIui5hH6PWM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639824; c=relaxed/simple; bh=1BQjTBsS1qeXvtzHGNZU+cZWQa1C6FBlgR3qml/VNBE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=rRO9G+gONYrNm9PXZdw94052HDE0T6jExy2v3UEmmgWh8jJytknv9wWtqXCLE/w3vYGR1GQumPmysXXz0qIUGnmG+oVQhiQlYhbvboC9rfMRgwL2Rkjt+NU+MG7eQ+ODK8vVniOQkPUyPJn+Tbhc/3Ark7OcpVBCcinC5ZyXjeo= 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=R8GyHyzP; arc=fail smtp.client-ip=52.101.52.19 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="R8GyHyzP" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pSYAOcTG5ZWOS0312f0fADZtq55XCi3tDiUvF2Ad7saKKzXXi46OjNWOAdGEjEXtNrreivTOmfY3n4fiKodFdIjYD8uFGjtxZJE3m1HtvsKU3GcVh81vRh8xuyqMGowXWNqyUf/Ef1YhYzj8IxvX+R27Gjk5qdQk4HjK/zXzkIr5dIb+YUeSOqIu1vGQaqPShHdSJwjOYdV9WRV3aIexs+PqstbkxfOT1G0K5hLr+ey9DIo0EfCYt4KSceEghwy6fU0IrFx32YeJ9Qj6BepmxLKdCYnU4Qh9eFRWpMNsLGAZuoJqGid1Q6oNeb64Ag8Iz24OvNLgBffrjihf2fqwNw== 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=CFQXhrk0BG0Wcm5xluB9UJO9Q6ZaiIs5SDUUdhSVVac=; b=q5O6KrbcqTO3eVCWIst/u1WyIkbRI9JgxU2rO8eqZxDcr7IpKFkHoviKQkQpbCh+D3d36ceBX3KMiA4qWUuXdMhVuNxGMmrgBw20BCc+7ACP1RYyTxburFubpjs0LYiHIIGstPob/uU1ay0JIFtsUiKEDenQfeFLVmdGeqo81bOErY2aNQQbW8c3XV6XjIaZ2W9u6JJD9OLKEtOM5AAwM8gUjNKMh9ergCHJRg72oVt3pcCIDju6TyYErImCAMRN8UX003+2CwXeH7cU41rg1u8ZqJPSP0jZD52uZnH0zK/iwes/QhF1vRJ4PhZpNeluZBn8yNwJS4Adn4i6iSi8AQ== 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=CFQXhrk0BG0Wcm5xluB9UJO9Q6ZaiIs5SDUUdhSVVac=; b=R8GyHyzPEAPX2MxoIqJubDpcvh4st8E4C0S50MpJP+6NmtEktm7wv/v35Nr5E2zWkDZWAn9TNGojY1E4OjoK8PkHOhojx6ERByEsOCbMNDAb9Krp3JvqQVpiZk/U0R8js9O2iWM6xgVUC8j9Iw1ZqvotLRpQYuhAVOCaDdF/YFUFtL6e6hjvmchoCqYj57/FMWbzwkkRHZWEq8X0a120ZLoIMuEK1lBlpSb9OjymOTHJGA88b+bC47HfOAwtoChpgPt3a5je7LXPBmYAyD/ZYzilbdbChfokqZE2wWUTOmZdwSGTJUr5CVz9llYhj0QiB7DY2N+2qzsQx0XVab+tJg== 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 DM6PR12MB4106.namprd12.prod.outlook.com (2603:10b6:5:221::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Sat, 21 Feb 2026 02:10: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.9632.017; Sat, 21 Feb 2026 02:10:13 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 15/38] gpu: nova-core: add support for 32-bit firmware images Date: Fri, 20 Feb 2026 18:09:29 -0800 Message-ID: <20260221020952.412352-16-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR04CA0023.namprd04.prod.outlook.com (2603:10b6:a03:1d0::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_|DM6PR12MB4106:EE_ X-MS-Office365-Filtering-Correlation-Id: 0ff0cc3f-1d27-415a-67d7-08de70ee58e4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?0kQA9PGegL8+OEfHlRucHqIVH0xL4iyGebAfyXmK8wWlOijKMrP8xoZS38gF?= =?us-ascii?Q?8/K8wq5/rRu4hVim5jIVCywHQsFoJpwGWm/D5mJOrU0c13AMMtcayazm8Wo0?= =?us-ascii?Q?9MIQuejwVnNRBb0B1HadVeORh0Iyu8iOhXWD1Mn2F0gQxe8CAzRPCOCG2OYE?= =?us-ascii?Q?YjBDe4tA7P1SgQ30D9/xW7C1gdl5kDrUQlMnj13kdRl5hbsaU7b6+4V0wY1I?= =?us-ascii?Q?I8rSTM1JnShg9a6GArWIshEHEARb3HwIabSi5pVlw7A7stWHihFUmwGsflRo?= =?us-ascii?Q?S3mNPbyTb3s+X/YhhNSeD1SPRrH5y2ohBEHlspQM8C3Iijz1TExSy+U0ZAM3?= =?us-ascii?Q?pGvSXMxFcxRbaPRzsDHfDYxH3UtFv0eIt1UNWzdz5Rdzy6Kb4jGIHZargUJ0?= =?us-ascii?Q?OTRUc3jnIOzV0ndb5o/udmXyB8df2/6CHbP9rfTUv853Hg71APuw2AjDMUn+?= =?us-ascii?Q?1RoKNJMNXhWk7BLje9hinOUPrId8TIwkM4cZS2xe6jXj6TBmIE2g/HcSNYk4?= =?us-ascii?Q?QEq2EpMerOX6VPA2gRwfpRJ1NUZGP+8Y/ZAetRsys/2GhcoFXFksu+j7MzEA?= =?us-ascii?Q?eVdB3LVdN5tu0AtgHZ0//i6BTfuHTxvszpeSpJISDRZmjngQDO/KflaikVRh?= =?us-ascii?Q?+3b3EvdzldPkQagb0XWLNxIXFH+rY/TYZb7oVbn2YDChNYm9zcgs3xAlNPOL?= =?us-ascii?Q?siQ0XjUf9QYmSVMKSr6dIvTvGxBnMxLyEQhwKhRotwHL6UM9lNDJJS+uzc/4?= =?us-ascii?Q?50GRnDy64GUMGKxnFbDBkLXzTzbUVacVAhdnFs0Szw31VBreWTP/HJ3g6QP/?= =?us-ascii?Q?DW4PFt+gDmDufPexVBoal3J/9ewvu8FW/S13ZQJ7nhrETk3NhXMPup3/xBfe?= =?us-ascii?Q?nfq8k7G6my4TQGHb+qOC+qXqzwBaecV80WXsp84B32wnb60RN7GgWaTw3ivI?= =?us-ascii?Q?4RLrE5HhsjU5BzTRHVkU6TQm+oZU9PiWVGr0U0nIUA8fBMVqJIVUu38iQrln?= =?us-ascii?Q?Jh8UzGhfOHMJoKWMgJVIT01hi8ovHXBSCB7MltOxDNDsJ0ifYZfJTyFQMaPc?= =?us-ascii?Q?tDSGwC8SPstR8Qu1WYotUsnacKq/oX11BymXW/YEa6OZb30ZaKXEuLhX90zJ?= =?us-ascii?Q?hJ0XUWC/beMjZw5lDxOQxajX/Siwc+IMAZOcCBO/mtjHNCbjgYkZyR++Razp?= =?us-ascii?Q?KOH207YkAGLFah3BQ8MmbjVV9Thc8BQegL9qpcJXm4PLlqdcO+jcxdK/8bee?= =?us-ascii?Q?mXi4qH8kW1SuHd8UMoHXsdNOtQ+HAFlSWg3BVr4/609Sn/uSBCNe87ss4mFO?= =?us-ascii?Q?5Eb/TtKq0KpGtRVEqv5cmPU8o934PmmtqXasbySdqhl3APyfWhaBnSo6BwS8?= =?us-ascii?Q?LfKM5diCrdjJBBd5RJb0gaAcbX3g5JRT8RZlua8NY68HxmJXGBVUzzcyJM8C?= =?us-ascii?Q?PIiwewYnW5eiAqYKiO7Xoh8+b5RLmt9kY2VnL3fRsI+oofpbVkQkEX+pCx2z?= =?us-ascii?Q?TpUJfZvN79WVUb3iMddRUL8l9+VNKiFEbwaKJ/xG6AEVUNXsP38fLv9T59B6?= =?us-ascii?Q?eWVIJgAuCi4RxaD0CfY=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)(366016)(7416014)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zXJlPgpKimVM9ObRwUDGAZI3ORd4N9FqxPFvyrbWYsevYHqU7c3eZuYHCYu6?= =?us-ascii?Q?0DQqpGngrpAqWovJfIdi90n/TBq53cqzfOI1OCEuApA21nJ+YIZ0iQeFMMZM?= =?us-ascii?Q?/R9ybslQlXeu5X8c0ySYwsuYcM378+su4n573/BWEm8o6cX39gJmU2ZXIU0E?= =?us-ascii?Q?p8BTrqHMopoWyr9XvFyhiOFtB3O75VURJWs2m7jBLI2fwFE6bjUbsOlGaFRh?= =?us-ascii?Q?EbG8O42dh9y+aeXAnM8fhsmbAUUnb0XAaa9GYF4UUjxSQKaf4QfPQp+dHE5F?= =?us-ascii?Q?spHdrzJh0gYQotWgMszWQwhdcLsbOiM3/uxUwPEgu1kXiuy5DVPoUbnZKi4p?= =?us-ascii?Q?yR1cYHSNL1U2R3tCj+V7Z04b4jxeC9S3WXswhMNXiVkvUu3kezxiaKPSN4o9?= =?us-ascii?Q?wzXnB3aTAxPKe80K8YtH+/BqK3BAlwnZTJK1dlNsv+p5jow320uUYpyIbYUE?= =?us-ascii?Q?H/PCjXa0jvBzUPTP8G2tuW81tpDWgVBWU1/f0m1VkO/9i68zX0gYK1l06Fkq?= =?us-ascii?Q?r2SDIk6GJXLeorUkQRygq9KrqfF69h9VdcLIARdSplE4amAl/iV0oMKlNRYt?= =?us-ascii?Q?+Da0LaSluiesGl6rSXoFiyi0/lXiGqeage0XUtFUc3ivCGVzwFnkaxaYLyw5?= =?us-ascii?Q?wn+bemYiPSjNB/dA0UklmjWc4cPdRMV83OHJ9sQqUQA6B5JjaU17wwETzfEr?= =?us-ascii?Q?r4qFWYCgkockiLdwwZgvzAk6QZ4w/vBThf4srHsm2h4nNBadGx5jaqeAiDOU?= =?us-ascii?Q?II2c1YM2lxdXU5zm4q9ZycjINZgUi32oTW72VaZ/2QPnKS5MI1BeADAA7mra?= =?us-ascii?Q?zHFUx7JraGxSkxgkVTqGQinjIsSD5OhJDP9SX49qiPgwqfw8pBvbpR3AmSBH?= =?us-ascii?Q?gxxOmwLG9eE+n0f4/iVkCvfXdM2S+B8m21RxQZ9cEmI1wTeZaJFuRj5iZ2Ho?= =?us-ascii?Q?b7D2DlMrh8B+5BMC1KvZPpidCz4gTj9y7IqKjXMpJbOlZyzeuou3Aaa8mpKA?= =?us-ascii?Q?NZk9RCRuEKbcTulqDaPhYGCSgbpBpn3yOZ6K+ANzrBNjl8HOSEJFwWWYIDyq?= =?us-ascii?Q?x/4mHlq80XiVpE5m3CLbNHeIuun82RHCdWSn5Xcx87Ii+F3RQrh4LbXjgWhz?= =?us-ascii?Q?KsYM9oMqBtkX80TUYHA3bIE/7cC1FfFkxRwVa/r1AdSziIJHRJsYLyN630+g?= =?us-ascii?Q?t3hP8h/WQeuP9qBX+L3qBj11GFYz8pCl01fLXhyUh/d5eKDeTBufljXttlLV?= =?us-ascii?Q?EVfxmpAmpEldkZuo9By0jyb9lT0ZyMlleJVDCBbRS5MIC+a2OXILGJsOEBfJ?= =?us-ascii?Q?GMrnI9olNdMSc758ngAhQEg3Z8mbzCbZ69DgYgSDVsT5v52uJQU7HPsVDh2I?= =?us-ascii?Q?bRxW/xe6DgWf9CcfHqlhmqQDj11bDJ4X0i5Ehvtt2uo/j/O2W7oyO5KWQ5gS?= =?us-ascii?Q?0j39uYYKHzJAU7TPb+y2J6VJixoY6DvEA00jj+BQjQDktJoynI9uEQEqWDVy?= =?us-ascii?Q?/PELYpMCIwwgSROyzCaJ6HHbYlfKHdQ67bADoKW8kZIhTjFALFuRfVxarzwk?= =?us-ascii?Q?b+MAF/InkpnmfFlg4UJzB1uCw/882rLcCH+zxTZMjx/w0S0cXgit3z31dFQu?= =?us-ascii?Q?1C2tCwP7SLlULZYFEMsVGV1jyDg3zdV7uDkYguv0+V2Hd9Kj8mTwinLI+58y?= =?us-ascii?Q?akCOwiyCG3oFnUrrlBB3cQ0VhAakdY2u2eCaHOA0bNDrL4dDlY5dOwDS5tqI?= =?us-ascii?Q?HE6yOnqm+Q=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0ff0cc3f-1d27-415a-67d7-08de70ee58e4 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:13.0399 (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: VTRpxTYAWysPKQ7jhqPhaaBzCtlOsjs0yWQwvUvLIB1s2sI78xsWretXeXpDIjJcrmNJxrzKk0pxoHhDu6u7ag== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4106 Content-Type: text/plain; charset="utf-8" Add ELF32 header and section header newtypes with ElfHeader and ElfSectionHeader trait implementations, mirroring the existing ELF64 support. Add elf32_section() for extracting sections from ELF32 images. 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..d94dd3468f3c 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 the 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.53.0 From nobody Fri Apr 17 09:18:11 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013016.outbound.protection.outlook.com [40.93.201.16]) (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 D9DEA31ED86; Sat, 21 Feb 2026 02:11:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639862; cv=fail; b=aQy4s7pOFGa/Gq5sNAiM+P2xC+Co3u9e4ZCbmCq+AB8GR+uI2V96dZJq0NESKebbXH68fRWHw9nIeDj2Hi/oBnh5s2pjGAgZvNATLW2SQM2olK18FJWzKjcLDAk2iMGbabUfQZcDC9w1XcIuYGPUNX+wkfMLjsz1cqGmc4750fA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639862; c=relaxed/simple; bh=9Vjz7b6cYxoJEtzCGYKGDuibMFoINIkP9nEsbzXb8oA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=PsGnQZv0Et5+nF7pboMrdvMjnFk7s+CMiKdAperRH2s6l9OnzWD0q8ejqhTNwhtgjH1d5flUU978tA7mBY5AVqCiLBNI4KZYveIe43xSOu5QNdNif7Q3G/ZTvWMeXiDQDSMPwQB+AywgyC1FP+ga/UcwgMcUKHg7Ab5DgDfH3Vo= 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=KYvvNM4n; arc=fail smtp.client-ip=40.93.201.16 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="KYvvNM4n" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pgfnTmKqWQERsTmghBpQpiINuZR6uzmrnzBczQAESpCr8eljvSiHo7C0g8xjfI/bJe02bGEpx40SsG43/ly4xJrNlHmVuzeu07ETNgIEJ8u8ZvLAsCNy7nddqs/zTKu8fjdty1xKjI5+OJdnwWWH7GvuvedRKOf9ExJDVHJ0fkWiolD364HRdnh7kM/wb2pVv9dFvVcRcJotyL9ATO9RMycrf5YF25LS2Nm3CtVWM+VnlFC+Sl9AbSaxsRmNkyzsdpYs96uCS1YaFQyGGXfiGg/J24vNwDU7Esx8IfbB/Jj0VThSCzpGH8+62LF3znp2AgnjvPGy0aeZ/p5WSOsZcg== 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=1inqL8SXzuatt7S21l/nZA5wmzArFoR5Qr6PTj4leLE=; b=xDbyuR+8FCsLnWvKlmcD0IBhcQSCVWnDK9Iie9AMP5g7SERqz1Zc8spzvt+6bDKn/ez7aT+ZBwnzQuREXQNpeXFV0eXfir3YDf3v5z95iwHTZZD+E/B4Y+CNhvKOc3kWynMx5w+2whzq5ekbwqmqIqQPks1zIiej5bMCfeVNHgdVslhvQ+rzQnh/2n3bQNHlv7cUq9dapqmuF0t2k2Zjza9xklROpSZ7eQnSyXkqa9fMR1+ykihVObZ76CwK6bV9YMud/ENXlAKWaKmPVOOFC01KXxQGaof2KXe+QdE/keuphDgIerWsqIaBdVBJ8rw1qj601To5w09cv+uR6BGnlA== 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=1inqL8SXzuatt7S21l/nZA5wmzArFoR5Qr6PTj4leLE=; b=KYvvNM4n839IJvboWQekDd2Nld4zPIBMjY61ODavrmjhtmmZ/yQ1Vpcf4PixHhOmLbSS9I43nuygRJPuPaBgFNlRBMKL6+LhrwQwuIsGalKGhIrwRnwR1SR0jYXPMb9xaA9mORuSvF7EGeLrq2WZjNVWv3SGyG8DB7FT07UyLixRyWsiJ73dqzvcNuUueldlmHaNm9e10WSo7QaJ6qmWHHgxDG9fZ19H/vVKq2ujuh2R9pNGnNYV4hZwJu3G4AbCoDsC94az6b5soSjaUv63evkgBP1ukkRCSknG56F7wtNt5DomccCChlc/1CQTYGTzjiT45zQyOb01n79uqyk/jw== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:10: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.9632.017; Sat, 21 Feb 2026 02:10:14 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 16/38] gpu: nova-core: add auto-detection of 32-bit, 64-bit firmware images Date: Fri, 20 Feb 2026 18:09:30 -0800 Message-ID: <20260221020952.412352-17-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY3PR05CA0059.namprd05.prod.outlook.com (2603:10b6:a03:39b::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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: 861c7e76-74a6-4d69-21d3-08de70ee598b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?IICXPaWGRxvHTEKGosGON2emrRGo6UhGpV1UDpfxiJmbSqIXog62RNqj1MuH?= =?us-ascii?Q?qLSB7XVUKoz9Q2Qft1UKVWEHyZzAkg9VQ+3rRvSLDB85oK8seq64iITCNiJO?= =?us-ascii?Q?9kowUcA+OTyzqYUn7jxgN3rDetr+i3pbSkiqZetNvvBUYCCr+4hFlmIJo570?= =?us-ascii?Q?4G/TrR5/XmUkUet5kMTZceJgcI57zslOX3iPycfvoCMX1kw2RQ1+gLu+wvha?= =?us-ascii?Q?ZXiFgbIuRQ7IoJnqSrLB8R2N06+NjSRdQZBtPqYRhUIIcj0xctQ0C0Ev5piy?= =?us-ascii?Q?6beYAXL6CTp9TtvA4PWuwVAmX1Mg54i2kPL8UeV9y7EAJOTnOxE3AEexbeJP?= =?us-ascii?Q?qAykXcVMa0rCrVeKHXeVzgDWXX3RH44hgxiAxKjMEJoZTK4sbKkozhEzG3oF?= =?us-ascii?Q?tjZQ5E4oQ23tVDK2em0qoqvzYIls/u+AX9YAui4GwgLVF7nVYW95nOe+KedU?= =?us-ascii?Q?d+8vHOq7d2nZQ6h4ZLOQ947EyKUgbWnL7Bm9sW2odXpE1PMkw0nKKeoaaKwz?= =?us-ascii?Q?D6V5iOrwUSQvgyrr9SoKhH5GdOfn3LoWZrlFZcbnb8L0dtOo2lTNr0lB8xDV?= =?us-ascii?Q?NAcRY2uAOiWZSp5jZ3UZ3GM/IrwXwGHYpervMayjUXb8C9eGM+opwzIM6Ixe?= =?us-ascii?Q?WGHO1waR8nbRX1qz7mCk6RXwQ3JxQwsShBNL2dP+/EOUX305jf3HnFzrv7mq?= =?us-ascii?Q?uuGybZMF6naM0Fv0anS3ZKKMmygjATfoucebED5IRHC0iEYuwInotSR3VVjP?= =?us-ascii?Q?aUeX+DSDALKoOH1BCVfMBI+sOdrC59FVfTv7PG6oAumeQ3qwsPiKp4Ep0I7u?= =?us-ascii?Q?wcCLJIISgoIsNTetnh9ZBfDPLy4ODe6kg0vhlTT3o2MilvZrYv1umlLNS+eo?= =?us-ascii?Q?pVGJZfi/+eQls1jwO6qstQ0cnxdUGFSmANTeJ2+AIF/QjDeXAvSAuatzBtyc?= =?us-ascii?Q?BaEcUg70IOms8J7Z20CcR6hWy7JEKTSQqCCeEnlDGMs4fk5AZ1/YYSQkT3yT?= =?us-ascii?Q?Q6htQgC1fkJ989BQ05eVaVCMLUcwZKNiVFV8ZcLwrVQ+fl14vASI72mzyomR?= =?us-ascii?Q?ZG8+M4+WLwDvB2i8KIKq9fBh3ObJ8Isg3Z0SasJImp38alanKAWNT6S3k4mA?= =?us-ascii?Q?xeK3zKqZzPSw8316vgWXSqPQjJUp9Dfq5DfWvpZX+ETDc6ThLCoAATT5dXWE?= =?us-ascii?Q?dBtfpW3xki9hamU6gpAeHd8Y0SKO8zNbBjSSa+MxL0nOmTmIOR7I1wb58Smo?= =?us-ascii?Q?Yb1AzPFUL6Y5Rbr3AbkmGl9J5PPY9J1cbziY2kIAFQtEG5GFZ9nHKUllua6I?= =?us-ascii?Q?hWbaMeF35OJ2myYMoH4EpVRho51l1wacCj0InVdcYhzUpUGFBf9WfWbYTc+a?= =?us-ascii?Q?yIMnvOfk8RTwsC2UXFNv/yYIfMHT94d+rJMEWz4Xe0ThSIXG9D44PXsRfcXc?= =?us-ascii?Q?ynCqDOYSVtq7kQB5Mq4J3/TKUvT5sRTcHXJbrM+hJzd1EJHrILIGmaxOxhzZ?= =?us-ascii?Q?YlebQE+s3AEp/xd0yEDRFLkSltyWWhQNII43ooGocT3cnIysV7XFh2tptHnT?= =?us-ascii?Q?3EWgfakLi36qPgmLP64=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)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?6DSuqMWdII0uSXz8D54nMETuPA3/B3pFiHvGnjQ6uFknBWkqTcMOeWe1jbea?= =?us-ascii?Q?jN2bI7CVyX9GZh3ye4DPXpp84qu+uVLVOe/NWaOS1RCmN1T4akTHrtpLCjMm?= =?us-ascii?Q?0BdsnQDzh+JCHp+P5YLNrIkLLYYG96adAq4NGNl77f9Fl1KpCfwKww9XP9uY?= =?us-ascii?Q?T4ckFsWA7bvt5u1WakQInFf9IWCxVhM4DB60/laKr07HIeNfsZW/WTSKiY/J?= =?us-ascii?Q?zzHs3QvYZxWVhcETFTrLSLf31FCwK/hyOQthp11Y+lfyI/UNndHuWNdInH4m?= =?us-ascii?Q?Emmorl/2fU3iRJYX+k1EVPIJs/jVsoJbndtnY3HnfvPUq7Z3CG9ZA2k9bYzC?= =?us-ascii?Q?QTgxRo20OVAgWN+nqux2MC0TwnJW8OkTGoAW/XxOPKgYtj8zthxQA0kesYbB?= =?us-ascii?Q?vRis/49RVDkPQUG+Fp0qQRT6BJPT8A+V/RCoXN+n/MIVJjtNgCF0ECLJ9x5R?= =?us-ascii?Q?dK2DYuYAOT1CyTCfZYUbSxkc6r+Ym4Ue0q8mUSi96zT6wf6lzcOQkr4MgJ6q?= =?us-ascii?Q?v7ZCNWgv8yW5gYypHO6ccQ38YoTe60taVl/+iaBlNwxewlvK10aScM9CdP1j?= =?us-ascii?Q?xyCjXV1YukYZPHwOedUxiPUZy+PHoLpQOPmpeG/XT34XoItKUEeVgVsoMw8a?= =?us-ascii?Q?pJKlAWKFe3AwRMp7LGX0E90RxH+Dn6KGcWWJOE8lCf/rSunfBmh1FRRpQkfa?= =?us-ascii?Q?njG9r0kLk1EdoBJ8vcSh69Zb6xBjM+nJ0Jw/UCV9Fwz0izAp0hj0HkUa3TIw?= =?us-ascii?Q?Br/W+gPMhFntePs5tCHZ4kf87zq7BTH17SAnPtuv+X9V02JtcO+hBuzkb1Q/?= =?us-ascii?Q?iiwF6T64EHZrAQqCwUdQmTLgN7lHnK7RmYtpYhIUgh6H/EPhabms6nfXEgy6?= =?us-ascii?Q?ad+/q2RkhN6SUNkmEgA3DNUB6MYl7hwxVahOk1v0xh5Yb6edhteNeoqrKRh2?= =?us-ascii?Q?5kBWFfFH3sOSLrElr9TPmOXkKJO/bxF7YnzudnqIGAhhbOkdO3RXXf8lXGs6?= =?us-ascii?Q?5BdVyhTzk4iaPJvbcRum11mXsObEt7m7mFOI5DXVUQUxg50kdI198x9vn9Jx?= =?us-ascii?Q?0OH85R1isDOGYiK9TSLAIFlMDXb8X/J881oPwWSQ+guYQt2Bo82jx9yI7URS?= =?us-ascii?Q?Lze+8Com1q1G/Hd/JHpR9HisqB17NeyBxOqnD/SnyEutlrZ9v2Bprjm0i4Ly?= =?us-ascii?Q?1Zyaap7XotXHL9mTcIBe6WxJWrWUv1LmMZCS60Tjcb5AVQzEzJ33LjEbm2gC?= =?us-ascii?Q?i5DAzAI1wO0qazFdcFBmv5C3OqWfpNbu26emJoF/NJjBGyBsF0COqt0zHrSL?= =?us-ascii?Q?xQyWkrM7xNAtK6bTs8NG2n2iRO91Uc1+HTp7r99rVIoloQCXw/Tx6ZFM7aWr?= =?us-ascii?Q?ASnR/uj8PBoH3wngMI7+hAuLr7sXxAaid/UFvWW+UXrIi0LrIFQbbxT3OiRs?= =?us-ascii?Q?wUsY1S4QeTCPQN7e0NheO6wgbXtN/IzKpz2ewFYK8SGwIH8iAfdvz49yjqvO?= =?us-ascii?Q?WGuFLl/NAGklF+VAmMO3govqaTovuDaUyNsFJNwcWMg8oCiO8Z7bIKsEv2DA?= =?us-ascii?Q?TuqUdJ6oNQt79VRy+KzEaWh225+49Em8XVX624YrwnhOe8HZAhZf/gHIuXIj?= =?us-ascii?Q?gJBlEr6SNSTizXvu94iGV1Yki+EFQI3wMvdhqsQtYLKW0AZS4hCRAfTqHW2a?= =?us-ascii?Q?SHHOVUMeb69piy9h5VHRJga+R8ennQdO+skoOTcE7gKDl6/FlmdO61dtfeK+?= =?us-ascii?Q?D5b8gxLJBg=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 861c7e76-74a6-4d69-21d3-08de70ee598b X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:14.0995 (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: EA6n/wvF5e5b93Z9oTNxLvDdMweAcbRhV6AWhRvY8hAyrWRMB/+E1uVKW9Lw+vR2w33o0EBHUAVoT0RLDXSD8A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 Content-Type: text/plain; charset="utf-8" Add elf_section() which automatically detects ELF32 vs ELF64 based on the ELF header's class byte, and dispatches to the appropriate parser. Switch gsp.rs callers from elf64_section() to elf_section(), making both elf32_section() and elf64_section() private. 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 d94dd3468f3c..57a919b7e0e8 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 the 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 f247deb06633..52e7337c041c 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::find_gsp_sigs_section(chips= et).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.53.0 From nobody Fri Apr 17 09:18:11 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013016.outbound.protection.outlook.com [40.93.201.16]) (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 3DFE732573F; Sat, 21 Feb 2026 02:11:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639863; cv=fail; b=Ropiq19/uxDCqPRZzB2G19ekKyaY1CnspLmVHmdkmnu/FkiCCJU+HpdkcqAICHbFVXiu7lNr6MafQcD7/OTnWosuNoQtNUUVcoReBk28dPboZ8eK9N4wthThN87yzS6Vt4KYJhOVorUZOV+YXkAqDWbOq9ub8MyL6/l0hrZ8uM0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639863; c=relaxed/simple; bh=KiWz/BgCIcKc1w7Qh9dGbjMtAZB31/H37QNVEuhmIlI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=CfAA4o2zhObUpEkFdvEx46pJAz5MCl+4kESaaRJS65TcZ4tnILE90WydBADDg+lGZLAc2P7Y1r3Y5BsejPeG1dw75Zepq/40SaEQ3jALQ2YCuIl4XVSP6tcyrrXlgo+pRHmrCDxq7S1NJ9+UKKZb8d+/aK9de9/7JLziB8o0Zt4= 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=IasNu1py; arc=fail smtp.client-ip=40.93.201.16 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="IasNu1py" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bToA+r4M3djCwgK+7BiYTNlOyIfNHZKXVQc3GJSvWvibxi3xX55pxu5kb/lDGLZix5uvtEZHr2lIxSw7JUti7dedndP/pOUNVp76IXOpymH98joPGz40yUl/yUhUevaefC9UmvluBkXyBCDl+lfu49B9fDo7mg3DPAoHSFW7Nag3IRTw7VoDVlDsXXsJijLDwkv6Hal8K2cW0wmziao6f3iMRabNaDQhTYSMJh50MdJTMoOzny8qgObtWGZ91i+/MW9eRNfJ8DPNZZ2QBMLD3V+v8kA0xNRDJL9NfrdVQWpwIK4sGNCXwaG4sGNSweGYp6NUnoGHC2I9+IiacojmEA== 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=uXeNMmFti5G/mamehuvx5Xr7KZ1L9DWhcBmORpPuMr8=; b=HMNgDY8PHNfvWYSFeWmPxw6tWXqHOOG4uArRgIM7DcN6bmuhmXV7eR29aUxc/SOEukYdnKu1+gF+LL4NkaZFoe7rDm6aiQB3nr4pbnoea6vOY+5li5AzoVK7JUDpbuIoY3KRIKjtOTL6bclj4xIx3q2PFXRVSa6ZiGFQ8aG9Fy8ePRVwTPf82ntlKfORRYqVrmyoknI6T3MRjPOBds/hAisUaUMnC3rG1L+tF9UKZZm6vS7UkOV6yOajweQ6cOepdhoPSSXbSZqKwQXTyM7yOwNjWwr0uT3VPcQ2aCKrNI/XOnhEL2uLSepvWdBvLs6TtklBOF+CiX3+MT5WTx7u0Q== 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=uXeNMmFti5G/mamehuvx5Xr7KZ1L9DWhcBmORpPuMr8=; b=IasNu1pyEQG22jJ6+uO0VROQgCQdvgzwAHw0Pg0kKkltDi7oaO2jKJVjJoX6NZg5ob1IJN5IGhSkY7FP6okXlQIbZsnrAcAE3aTd3Bia+YeXcwDWVPAIgG2NHQd/wF2HZLR0IHN2ja6TQFgyAnzMUQf7zhh7XQnaj7VEvyADmwxVNp03gQc5tBA4wx+MCyzTabaNMM5+vGylsGb+rm6g0rkroZADaBjYMDnW/TDAJ61lMhev1uMGWBGzhLbbc96OaXI3OIGHmdadD7spW9B15Gs1IjEH+cZchXsszhso9VBfoqyV2l124RJWwvJdicEVM0949LFacn35cmPzd5gzyw== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:10: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.9632.017; Sat, 21 Feb 2026 02:10:15 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 17/38] gpu: nova-core: Hopper/Blackwell: add FMC firmware image, in support of FSP Date: Fri, 20 Feb 2026 18:09:31 -0800 Message-ID: <20260221020952.412352-18-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY3PR05CA0056.namprd05.prod.outlook.com (2603:10b6:a03:39b::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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: 8ab0ae08-18c5-4412-596e-08de70ee5a1f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?CMVxIZPAUlie0ldQq5ScFQJNxZyOUwRE4asnoa5Wsz4IlE4BKCIWlrWhW+Xa?= =?us-ascii?Q?MIZgFclLqnrmMnHJz8sFEXHBTjkKvXUC94DZSvaE36Fr1bhmblWZLWgsfAvM?= =?us-ascii?Q?ZbTjMcBoz/mdxuQGqD12W90TIcJzHmqYuKtcM0XxISDUOPU53XraGYtIAh0s?= =?us-ascii?Q?HklUmSXy1/UajjBSOwiIXD4sXdFcntfMlV/84nYpFsMLaLjqPNLjjAyxAsj0?= =?us-ascii?Q?vYhA/s/ksEXp079/dOqOcPnFflG+IqgCTI5lPnAbhhQgo6eGuMWI6l+vdTuJ?= =?us-ascii?Q?EvZ/alKbc+EXx3ewPHUro/bhed0RkEwNjBwjmmKJlpu3G5tI13GYX/pQSV4t?= =?us-ascii?Q?pBkhn0+iRYqYqsvfW1WPXlZ7nKHobJzvaWB3/vUfjxZqECXRtPETaKsbDOyS?= =?us-ascii?Q?ylbQrTHEwtvr4SlRXpwTYrth5IUtqcw9J9ygVkX8aqFGTLxc4d861RmznUvP?= =?us-ascii?Q?jcJLakEUXD/Qx/vvbm++nq13T8pUIjMqUzJiPW6QDh/o51O3yQabXg2470Si?= =?us-ascii?Q?qaVqt239iNxubsE629rc8GYnJGMLYdqt6hZZKJiSbet96ep4CJswjXJ/JkS9?= =?us-ascii?Q?WyvrpRV5IneOQVzri69eLvFNv050H3+lYGRIMnlZACtDKcqLq7VUNUg82nh9?= =?us-ascii?Q?WKl0pXtZoKiyDdUYk6HetF0Q+zFn6GfxhJGVjSEoKpAnNieQfGMGxS1uHdVx?= =?us-ascii?Q?NDfICYn5lFEGdOGkPZkOOV5FQ+q/8yTue1hUDgztFu1RPDY3WXWq04zugyHz?= =?us-ascii?Q?B4fGHqVj84rzcAAa8BmFVqIkcCxlJlAqczUs56UpWrdV7+hPF8roicbuzkui?= =?us-ascii?Q?rTUUolrd78WjRyhxLR8dOB1CTSBaUVhyfQ8LHRrEcN+YuCDmYd1sFJRvbAGs?= =?us-ascii?Q?1E/Eo2EJN2oHr6YzukIBOWupqNtAXLIPu1O/CbGMtvYTMTPpo5xSYh5U9cWw?= =?us-ascii?Q?FLj2KWzFgy15/8KmLcg7PRb8clbA4gSJaG9HmiTiu9BWH6t1wt+E1fw08FdK?= =?us-ascii?Q?e5qTMiLtNnRIS1w7Afme42YERT+1XfK+3MtC+L/bCsTXaM54X8geJLz+lg8j?= =?us-ascii?Q?eOrYirghVXFMuugruU8AfeIAVYHLQXw8Rv0f5vWulXDdBrateC96/IVcmtBM?= =?us-ascii?Q?sLh33NGm4sPnKiopx4p74VKw4rYXGsdQGwocSWUhmErCVBEP8mebVeBDe1vz?= =?us-ascii?Q?N6Q/WJ60Jy2kaZbpxS1/z5+2VkeXz50hoz1rkyLMRC8JVZwR3UCbsM8L5AfC?= =?us-ascii?Q?HL3xvBzUkZOPeXneaQPLKGhZodlHLiC7qPh1OoXvcr20DgUXHURFoY/lQiUN?= =?us-ascii?Q?vmR5JGd9W8zOXshaptbBID2WBQA4ZDGNRQHeZzI/3RVaKlOL1F5dMU/dlhG+?= =?us-ascii?Q?cVwxjcXpFdu+booUSznoBwpfLz6vChY6iWk1z9F95l7S9ET1euNhzGHdQPK+?= =?us-ascii?Q?oaYNV3Gf2QU+JxJYkqJN3oXHeQyyZ7QzDx1fVhlDQMUzKni3p0t3g9DEsxiL?= =?us-ascii?Q?1b8XYNp4glKg3AHfU+1CvEK89ofgYC6hSDJXypWyWl+m6q1oPnd2/GVO0qpF?= =?us-ascii?Q?HnANTxRN2QieqClKFn0=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)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Nq5MeawCeGK0ViQ/PTeeONjAyFnUpfmPSjVUN8mwxmcuBSugt1l5aSdTEcWc?= =?us-ascii?Q?UT2U6MC2uJiQUWND72VBnN5qQGdOYgVZkYdQjMLkxcBQTHWfM1JKrTfEMsYU?= =?us-ascii?Q?mrpfTB9a8FDp3Q96l1GeAWqJm61XWjzgcde4NWbW9rFO9zfocEv0wk4Q1e3o?= =?us-ascii?Q?BFqlEGAzc/bp8GYuwUnmR38WAcYlb97Ryxnds0lI2yAEpBR2C0OR90DUO/Xb?= =?us-ascii?Q?wdlKGnjgqRIduXn77NUy/dTy01mSozSQE3RR5Cq0dByo0fxu9eps3wz3uwtI?= =?us-ascii?Q?1Bi7H9S91UaWLJi0WffmQUnea5VSqxZTU4O7UzHLf5ot099AwxGErMulNBcl?= =?us-ascii?Q?7P+dCa4JlXBgguep7og5cxnLU0HyGvRXKBh6+En1ykiMV1OM/gfhraecMz8c?= =?us-ascii?Q?4VFTJCMkiWQMl2bixnWbkjcbXyZOVPwJl38MfIxvVaxF3sSCud0WzA4P3I7E?= =?us-ascii?Q?Ejh7wKNCcftzVzUIQqPOko9u7nL01OCN0SW1rQvZE/Lq/UyhVAYJv+GsyjRN?= =?us-ascii?Q?++wVg0G1027FYq2Q+np00wGA3bF/CKIuYRlb6mTVEyJHaeB1TMviHNGiMXl9?= =?us-ascii?Q?wWYHlFSASPP4kCOFm4GAXxxzD+za17CQRMCkTe7ILx6LvIXMzv0OJQDavgf3?= =?us-ascii?Q?/kHvbslmw5/UW6s/b2dBCPBziP9BE+WQ3smmlefwjBWrnn8bogggqB1TyEn9?= =?us-ascii?Q?0Cq3Am+jOgg5PoP8YbAUCcpN0HO2WmhMjz+3bnD994wljv2OgPwnr6gYMaKM?= =?us-ascii?Q?xhnldfB8qU6KhCYL1L9CIqX84aoqcbcP4Ib7SdATMe5ZZcDsC2gMTjEdufYS?= =?us-ascii?Q?R8jtpcWkgim2OPdp2lKs3JQppP85y+H+evBTwuRAyK4vHQQdnQEBIPkHubDG?= =?us-ascii?Q?yIuP9Ss+QJq/osEcwyfQ1/TSPDKez1EI2S11L64NUAWW3lmJWf+yd0hHXl4N?= =?us-ascii?Q?0yIz+lVFLQVqoAqibi9uXGjwhWMSfNo9+BzougjWLbpKU4mvMCa1DqkXBftY?= =?us-ascii?Q?nV6JUWfvI8E5vBjNxk5AWMaoHM2qRZ7a262Z9bzSZKJFdfqBD72UF9o9ovio?= =?us-ascii?Q?ncn+t3ZjRPOqs3tQ1A8BVzpQqZbQg2TP1AtY6x4cTKAJ2zf7ZSpoFGOGm1E3?= =?us-ascii?Q?3kX9nonfJobhlfVMr+olbY2V+jaNPD96+u2AjUxig80zdqh4ozd7/+HD8jSW?= =?us-ascii?Q?E4GxaqqLEx3Yw5s4AoXntUfGwQJ920f/yIgREwId0jWDwq3CZlsp4jUvZqCa?= =?us-ascii?Q?F3AylD0crFg65yTZTaKsXv8/FArlRAaBaqoI2aee/DpBLqpbHGtYsy+DR+jc?= =?us-ascii?Q?0S3NPb6Z3AQDO1BRzNgcXzrZeZzT/fvSJqqQWsQIl6+Km4YOr0Iv4QkhPLiX?= =?us-ascii?Q?FTYNQ0ethJsnzDkUPRoCdnPGQ6qoMKafsSf+78yvf/mH3sDEnJxWmTp9yoql?= =?us-ascii?Q?2o90oaZUuA9VV7QYcSd9PPpSqlxDTJjBTE5AfA/pL5OEAkaLUUortkI46TvN?= =?us-ascii?Q?MXKO6gHZ9YSmDAK68eAF9SxOKFVtGq70zx5f9uJ1PxBsQVT8qsi/RIIMUNtA?= =?us-ascii?Q?Emvy29Cfvc0/WfXpxJknxVux93U/6eDHyVMHAaWzqvRBfPLnNCVAWhspqBMH?= =?us-ascii?Q?uZAKhO0oCHHf1exOZBJmzLEHKYiUrObSwlXO8lf9hraO9iSGvGPVhMKb3BnO?= =?us-ascii?Q?MFAJak6pJ80JSo7BoOzyMNMi9G9Lh1HW58wCvqQtn5xbjqBPuVAuVMX04aoS?= =?us-ascii?Q?D4Nc4JwBcw=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8ab0ae08-18c5-4412-596e-08de70ee5a1f X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:15.1229 (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: nhWuTWHWEiDC/wqosPm8+F8YhMw187Ib8pTp6LB5xfXwtKpWQtgW6YnSXMBPbAsO1AYqQBb+HrigQ+zF6YeWXA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 Content-Type: text/plain; charset="utf-8" FSP is a hardware unit that runs FMC firmware. The FMC ELF file is loaded and stored in two forms: the "image" ELF section alone (which FSP uses for boot) and the full ELF (needed later for signature extraction during Chain of Trust verification). 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 57a919b7e0e8..396f96716d6b 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..cea9532ba5ff --- /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" ELF 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.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013016.outbound.protection.outlook.com [40.93.201.16]) (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 AE03A32695E; Sat, 21 Feb 2026 02:11:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639865; cv=fail; b=LBXqDOnUk42w0O9cfnU5/8tGstZIzhOVnGAq78bJC1JJ4o1+lExfVD6TdOkmHrMtoak13/GbdMjLbNp5vn/L/BMl99ExDlrLqc82SC9TUbiGBdLhL8EojH8/Roij3bBUXqxi/hnnu3wHsWckeRUDtdrq8u2mN8QdB3KpKnzl3tQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639865; c=relaxed/simple; bh=GHP0lRM8zQ3go2BHVjJPcC2dqepDn28Wk1LLKGgph6Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=XngDXEZSxM9MviPmJKYzlr8htrRWIfXIbn9F2+ujlyBLMgKhEVYhH0jIeRx5lxJUFkUFTmHrVDbn01YsZ4LthcpngpSPb9zfKvGDIouHya7GpTHk0VvDsfdHKRKiW84w/Zq+CfSpGuHyJWtw8skFiqMvR8QFX26axbS0CEmzbn4= 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=UVppLMb/; arc=fail smtp.client-ip=40.93.201.16 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="UVppLMb/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HPNEWId8OOIhkZP7eHwzDqiq5Sb9LOk083eEsMusx5SZlcqwsQkx62FQaieSUWPtt+O0AA58XBdTdrmbRjJxkqZkg42NW7VSzs9asKaUkIRGC6XH2VcFZgDJLm09To5flz619i0GARHx17RBo1C/LpxlVVJJr0QeR8xEnoqSI7Q/Ipgd8j6XHT69VuDe3c7DLKaQFAFiWvAwovPuBkD1SUQZHTyN3mJEeezs/fvp8grSwga+abu0i/G5X10xJ6UTVaJtexiT7M7uhSeafTHFrDW4TyAyr4XwJ+wrjmyFj9WSg5SkU/HHbqLSpnbNxVTMv+RX7mLGkkP6zfSdZ1eNUA== 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=luB182UPf9eRW4Tx7aKyWpRE6DIWCLrH0PaNzHkw6tk=; b=KX/lnoxGmH+JjzMKlSSkQcYBGbUAJmBR12cDVhr+3Eu9LQ6oLNA2Z1F2BtIC0yEVL7BQTSJh5+saVhYZ7BuN+WtDJE9qJ5EDvsd3+U008ZybV6/NvSMkwyxtZJcA23C4dHkMm4GYZ/pgPwOUAE87aEyeuQB5emUbNtXhc1U8NWqAYD3irVftPGAL0yNdYRwaruS84ItFL7DK2viIvDPCicSemQn7lls7HX6xNrkQJ5k0e10UCuWDXaMu9p8GD/j94mBlBRpkKyypG43RuO/4D/wnyFT8pTxoWMXaKbvt/m4uyT/0LdOjEKDPSWMjwsn+e7m4Cy99ZNvUyM9Hw33p4Q== 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=luB182UPf9eRW4Tx7aKyWpRE6DIWCLrH0PaNzHkw6tk=; b=UVppLMb/gxYktAGT/fq/X4bDWsqNRgdDqgPGZp+fo27IlsprmRG3K1YDHHTseqm5WVNawJUaZH5RvPH7M0tcQNkhiDimOQkhUvKXNIi3n2uLg8vAkbI3KbXUAChxD797U2o+OJk0JMCd/IpJzLXTTRm8dL6yS9TAECOLvsvhJxba06JafCpZX2wRaaMRyoqGT88NY1Oa1FdovskcJmn6IaF7xm9J6GWM3prKoNqryiOplHL/ZvZW4mJgHWImHqhvNo5LASngwtEKcEeGTlEGTe3BQBZGESiiZMgj4KNcH8TALOKvmxPmfNlpKlh2YEAivkpIwNrcMYj4haAXBPo2wQ== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:10: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.9632.017; Sat, 21 Feb 2026 02:10:18 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 18/38] gpu: nova-core: Hopper/Blackwell: add FSP falcon engine stub Date: Fri, 20 Feb 2026 18:09:32 -0800 Message-ID: <20260221020952.412352-19-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR04CA0018.namprd04.prod.outlook.com (2603:10b6:a03:1d0::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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: 6d67fa51-ee9b-4b75-bdd8-08de70ee5ac3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ZP7+4wQsMZA4WZBQYQn8G0AOPP6wqYfgRXHN/IuGK7q68bY9SxZMTgukhPiz?= =?us-ascii?Q?p7vqK9H1tHDQwHNW6ikWLtbbP3KO2vOwA0cZ7l+lArYOFZDhBcR+KVMm7YIz?= =?us-ascii?Q?GV4bfCQ4iEiKZdC1h3IsqcMxcl3MJWDNDu25EgpXzsjEl7y/JTh4cFCm8KyK?= =?us-ascii?Q?SKF2z2KySn44DvUZh9YPRmJsF4pC+RBxnkfAvuBXemDWxsbR2LmGOfCdETcP?= =?us-ascii?Q?INSAOP3Qj8Ytv66GRG/159TUddBLyYG5sjZuXQXyv1HPCRK3DU8lQ9mlzXjI?= =?us-ascii?Q?K/VlhYyFU2j2DHEiXNc0webDcZEhSV3bGLfJg8ip7bxpW/KLMGCtmp3fn6UH?= =?us-ascii?Q?oH/qZmSGjCdWr7VAGLMLAgwqFeNTDbmS6z2yHqIm4j5QTOPcqSNOx8QYQHOw?= =?us-ascii?Q?v4klbsKToJnakXsz8VL14nYQMzpJ/dgrKdNFQOZkXeWe4i57pZ1JwU4xGeAD?= =?us-ascii?Q?9PV4Auk7sULQ92PPbeKG2Des48D7JJxA9IISQCOQ3hqGwUaSCcEmRi64y8HW?= =?us-ascii?Q?Ql4RkniiCYH2ItDeCqxfcJpM7CwKF//OTHMH4wGFqpMm/VZUF7OtOB7ZOr7g?= =?us-ascii?Q?MYroC0Y0ulk/5yuMamMGHupmYkdA0RKeirsEY1Zo/PWfM6u0/Mmb168bzS2c?= =?us-ascii?Q?/9JBzESdmiOtuzXVpL5H4OLJPbNqkMuiW+/PKn2X3HppJkwWe7pfOaeGNMBf?= =?us-ascii?Q?u+nFrxYlwp07kxlcPfr3c8yrhogYBmhtzWamv/yhiRMCZRIk3GHVbk4swvLA?= =?us-ascii?Q?vp34OB9vWtc4BVrHKYeahNB2l0NylZ1enfoWgIT2sOs9sCf633CNKWzrxLSU?= =?us-ascii?Q?2+RzUgPCmZDtZ42ZU3Dm/wrcLPS/rDc1EqkT3uuYPSdeD8q8myTt+8kN/afD?= =?us-ascii?Q?l1rQJb4UXy7poN/5KaEgK5tGnDXvVymSHL2oUF8EqXplmJduJ7daPSZvaT+d?= =?us-ascii?Q?HWFw5OY3hP3BgdugO40i3rn9OCSS1jF7iG+/ukvBXuzWWxStM6ExZcmsXUNd?= =?us-ascii?Q?N3oEkIVj+jx5RWLPuFFovyypi64A9+updA1xmIRyZlpp1HGOuFMBPgiDP3d2?= =?us-ascii?Q?VrWQK3igQ2Z4qR/7OG1Bf2ErLiEVphu9/+BlZK9hL5rq8OvI5fV2yYD9zmq9?= =?us-ascii?Q?lfTcE3FC3M3aTfkEvJQZaVx+n6qVszRv4ku/SvnABHVOn/Ym0Xhtyl20UmJM?= =?us-ascii?Q?cJn+LcmLbgRDTbOIll2YhYA2Bhfo+q5wR0MbIHQA6Cft5TJ53M0OrYXJhjVN?= =?us-ascii?Q?oESndkJnQbNMqCBjMGvlLFbBSFaGTIM2P9u3inJssCWCyWXus6VRpK6BAetB?= =?us-ascii?Q?P/Dz+Fg5vFUdL55UuQctX8xUm33DarNfk4ixRjfOwd6czgI4NWHlRiJqTe3D?= =?us-ascii?Q?KK9pCyeew9q5toMehfCzohQd4rhTse9eZ6Xi97kglyGU04aYywlwM6WA+URU?= =?us-ascii?Q?+9o+UWkrvIsWR0CDldo8+/lmSYBEXsunR6hswg/Pi6eRYlJRdFAjOvNhTUHJ?= =?us-ascii?Q?3MSmdpgjq+cYcH4r1SWuI/+VYu+W3X+w+P1IdxmN/6Mj6dCxCRBznFkelt4R?= =?us-ascii?Q?zPLolfOtJ+nsRpXO6qw=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)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?hVmmnLw+Gu+FUREGU0+/IBtCcKxrFTJXE9AtSDLbchCgywPvdXuvwII0aCLZ?= =?us-ascii?Q?2Of5mRxZriek+hPhZDuB1/m1qhnx5yjt1IJhHYk61xiXqvcigW7YhDQYe7jU?= =?us-ascii?Q?WtmAcUSUuxhuWOCDI1F2CIYAZnbs1KIZ76Wrevj/Vs6ggjED40SdAQyReLsK?= =?us-ascii?Q?yyF2bVUaQzIFFnvJbGlBr8D9GFkbu7PIYwaKLlYo4H84885bTSTxGUWG9kO4?= =?us-ascii?Q?ArdlD+ChyJu968yHsteBcccil/RIJSTWhIyEOhOfrObEtppJGYSRIPETKLZA?= =?us-ascii?Q?ZucKC6jmrpf8lvtGGt9SaedWZz+nCETTeO0G5AfG5Lhi5/JhOGMRaUW0udjn?= =?us-ascii?Q?BfPkC+WGzFy3nmXbHbOo8LB+RB3/mbZ0E4SlOCRSaOoClo5MDCkK2ArQKLMD?= =?us-ascii?Q?5EVTN7Aq7aAcrc+6c6wKccbmF9vWxXUxjrM4/prxUPtAESoE3UWD0R2YX8Du?= =?us-ascii?Q?YMKJagRhKnAJz1UHwO9HhcxoACSh1m1NubIm1NGrSFIgy2cxyaJy8kcn8OTb?= =?us-ascii?Q?YVmt8I28jkJpyBWyfjMwMHw1myVU8YGkFjHa7VCQS9In6LhB89q0MRWkrewi?= =?us-ascii?Q?aFcn/3PkA75Qzsn/R80siD8lwp3FGjdt1XT5IX+4OC3NwPDLIod5TCV8BT39?= =?us-ascii?Q?Qln+6vsLLtMk5MDw/ldyVkj3qruxT6F4ULv9Ht+lxntn4Co+/XXOWJA21Wr2?= =?us-ascii?Q?Yv6fCcqPvlG6xWrNbuuuftfpx8Bd5PN+whKhHOcM/3tp9kf/O8SdcZx0kSbc?= =?us-ascii?Q?pwrkP7UP/DBmDOJSfoNdfllL6G0Zkj1tpA0oTNSn58QtY9bl9cQ7n7TaK9x3?= =?us-ascii?Q?23K7KAyrPoB0kzNMQtab1rb65brAtVFO3wPAS0EHcjprb6wGXvZgeeTE/E1z?= =?us-ascii?Q?X2f4BUf7Y13KV1foupe7DSaftuxDc36UudHQH6+vNkrNTXun9k5wJQQChOty?= =?us-ascii?Q?kbykoQaseq+5CZvtiwhudul8tj9Tom7Xt5aURTyHxvTGHE5wazp0pR5LRY2+?= =?us-ascii?Q?8V4JotUeF7AjbTFDw+XHn3cAyaW57FaQAdMqztQAVv9+Q0fdyE8aSRXG2jVL?= =?us-ascii?Q?RsRZFJ3WBt08MuK3SW2AAZ446/pHOryz9fyTuHq77Um/MXB/eBkEEohQXfL2?= =?us-ascii?Q?mKZeVC7qpR5qrK5iJV8k3S1mqOh8y4+36Dqxd4WXMyj9+f4jPVu1+Jc2V4Zm?= =?us-ascii?Q?KWJJZmne47nuiryhZf8NjM8uSAIZ3Nf8XjT/qo7t5BYqVS0t9nHcEg0niHyG?= =?us-ascii?Q?rxrk8DAI/C+YmVQeMbv0gWcwtq24SFBhp/eZMU3xJ+p8XuT3Y5O6qhxwiWNg?= =?us-ascii?Q?kWrrmNVZX1H2EokWHeQGx+YR7HYS7B7t+albF9u/F/KEFUyAxkjVURmgH2Mj?= =?us-ascii?Q?o3TY8pki76HiGzARh1k3X/A1bZ/uZDy/VugiCy1hQf5K/X4wNw+dDdhZTvfb?= =?us-ascii?Q?hjcTCDZMWdmQIPuo0lFgqFEV9HVTne1SNprNyTbSQg8vkeRjKw3IgKrAwno2?= =?us-ascii?Q?FTGgftj8D8J++v9iQLNLYDODJ++le1W8LTp6MqVJCNUFXFfaxhLFo82yTZRJ?= =?us-ascii?Q?yOArj+siamiNx4xQhsCl3402WfC16k6RQGrNdGOWM4MzoNQll9S3FvcqxaOH?= =?us-ascii?Q?yZBZeT3gemN2K0TIs679j1VXg6mjD5ChFbhNQYLEtOm8EpsTCIMN8tltAlxH?= =?us-ascii?Q?p7mu1kCjkhmjuIf6MHjBlIBNaeolMUJSprUeC0r1tnwdBSZtcxa8zc/tGrSJ?= =?us-ascii?Q?+SHzBUvmvg=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6d67fa51-ee9b-4b75-bdd8-08de70ee5ac3 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:16.2073 (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: r5Qj8yDpn3LPQCjKMWI1PGjIyjhJ1TlzC3oKGEqhggMc/AO+d4r6SJW7UrAfZ69hZGCfjMMYVa1aXV5ZUD+RXw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 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 | 30 +++++++++++++++++++++++++++++ 2 files changed, 31 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..c5ba1c2412cd --- /dev/null +++ b/drivers/gpu/nova-core/falcon/fsp.rs @@ -0,0 +1,30 @@ +// 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 { + 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.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011050.outbound.protection.outlook.com [52.101.62.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DAABC327798; Sat, 21 Feb 2026 02:11:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639866; cv=fail; b=Fm1uytaeG5u6gyDtLvYhoynXvqD3ukqzDDfV7kdAG/wRgGO3kvMJv9Zu4h+kLn+PNl8GmjWuMLeEVMgIn0nbefhrFDMWv4Lzjvob2oUHpb8F5HSIQViOiZV6nDaejRaHZDVTYhMviiSxpbHscT56C9lFFVQ/v3G7jzQK0k77RzI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639866; c=relaxed/simple; bh=+EjrO/+3kilAKuL/7tww3kPU5NuK6Rogu/gwlb7FnqY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=OJIJUkz4rvo7KzSSirFSiXRWRokQA3l9181S/a/jKwdYehDNvPWL8eG7Q70Wlckn0TFlx450RSOabquNDzxwIoi5U6h7xPHu6kiGHYUUxv2rZimAvTlcBzqa+YMduwFDHVCQXNhe6Xw1lmK4PHRKtnig3XRDJg95/Ju+iyzGZdA= 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=HI/Kiy4J; arc=fail smtp.client-ip=52.101.62.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="HI/Kiy4J" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GlOX0+fucs49JWO18rg3khiblv+j2yVtEEoLhm7o88dCS5duFwGRI/IeOv7xYJxzv+VKFEe76j0zfj2txuvPfXZ3MeVgw4kuKsa4JVaQ2xo1h/TfK3N3koI50kCy951FmWtSigcFuDP6zqiQwHcbcyHTzOK7D+s3WF2OM+SqCabgT+GgRC5CSd+YGhfbtFeC4RteVn1ZqArN7JYaEtZlUpPn+QH9RGk/hgfFs9p77gkC2ZbHxMgnyAe2xjghX8pj5hChEwH8gq86ELVSQvM0pIN2N+iiEx6Xd3y9D3tM8PNl305Y/h/dem5i4BRlDtoFPzujR76e25MVzIzWKCzfoQ== 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=k27gWRVgZ4FhUhR3H4JHGrAda7/StCYEelvxPvcBRDI=; b=aWwe++pRcGTOpXZ/apxMPsvn4e5yhs7j4CnXnq2B7q9CJY9zV7NkjzR9AwQ0/zu3EEPmwuSnHgdAzX5mZ/iPBhyNizf5izA/DtZyAjvEpQiSduWKxqNUjFCkAvkV19YiOnbwy+GMiP/hNBel+aRIXSn6NJJ4GAGXLRTf9hVCApagcUZt/6Xq9y4VBQd5TKt5kCdtHca98GZBPma3ZrcdnLUyfUv55O7p4DroAk+MBASRWgUKuqWLi1P22DbFFP11jAyvJtL6uessq5OGVdNT96dUeWlBd522o/Dj3Ifvqf1+fOjNTZWOkE8hXh4/l7Xz4Jmhh4qH0oZ9naVkmQc5zg== 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=k27gWRVgZ4FhUhR3H4JHGrAda7/StCYEelvxPvcBRDI=; b=HI/Kiy4Jfu719eldr/47t3O4QtN2/RJdDrgr49LHZFpZ0FJqytJYcYh5wS58kQmnbAfBejXohbj4f5RGUUoZU25TVoKAc+ynAFGLhQ+D8tYX99LFq8i67dLvQyrscdOKHb2jWi0iaO5C2nq3G5lCdnWDknwFtX1pbA07YX0ZZUzjhxq81JvGTIge2PXfVmmi8CpkEyd37OXEbZJAufAQOOSctPiQTofT72PNVVb36vcQ96DVk6Heo3CHAmyL00lYCEZ5bUf3V2BqGBtXCmVlgVaveCBNmKZmfUlD0Os7yuR+c6mqz5wQ89OKZUD8qv/neaSzc9Emw6sk0jeAjUsaAQ== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:10: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.9632.017; Sat, 21 Feb 2026 02:10:18 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 19/38] gpu: nova-core: Hopper/Blackwell: add FSP falcon EMEM operations Date: Fri, 20 Feb 2026 18:09:33 -0800 Message-ID: <20260221020952.412352-20-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR04CA0022.namprd04.prod.outlook.com (2603:10b6:a03:1d0::32) 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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: aa053b22-d9a8-4e4d-d783-08de70ee5ba5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?TY1nTIadZqt0CFSYUDlSbnni6YI07oRruwbAzOg+8WFocYL8Xn9vGVBg/4ib?= =?us-ascii?Q?C2NcLkQVUM2uWCON+2gv3GjMizhyJMQUXnCDoadvRIIiNZOW51Imwb0UANwS?= =?us-ascii?Q?jN7/IZMthK4GieeEQJ2VDfTAysdre7kNNiZQXgcWM8BWPI+ODIWUa31am6P6?= =?us-ascii?Q?N1U+CqLYBLoi3Tr7OweHxoG6xEl53fDjNhn1HCWQldHKUaWaDKuGC3QbuXMO?= =?us-ascii?Q?lnACn0t/285p2UcaGsaulnsPLCVh1fkblJOEYHg5hiOlZAGw5IInydhNRFSi?= =?us-ascii?Q?fG5b130ehuRgltGRQpDlhJezMxw/taQ7wfWnNUYf5pTf+tcEhtapLIEvhYWa?= =?us-ascii?Q?n9qTugAI5MblPCc4pbOfo1TgbIh+2QuRH4ZyT8h+0F835ARQqjyxQOg6+w0V?= =?us-ascii?Q?ExycB6gs5TcLS95i/KNy+wWEKf5d85ygpfkNF42snnZjl5jMWOSaEzus992E?= =?us-ascii?Q?md4NcXG4Wd/yjp0i/0Gyvqw/xqd9kVOmM+V2WRXc9Od0SlQIrKE6+1ApTjql?= =?us-ascii?Q?7cH+bAQ1c2SMkZzX2aFd9thFUwQmzRDhQPz0x+zr8enBkPfwAni2iIZsBlsM?= =?us-ascii?Q?Mm8DRDf80jceLEmIR29pPAJB0VvTXYUoqJlezvMzg5BipHD7HXXSpA6viZf6?= =?us-ascii?Q?Px6W41QTTvIu/ybzyQT3u8T/HXzZEPt+EcSY2xNTSOkGcgDI/fmDsHxG6uOd?= =?us-ascii?Q?XdpmfOXsr5YPyBFWUVv5brbWylyxoZZPy7sM6hbeCc1GBv/A8bn4Pbw43gQM?= =?us-ascii?Q?8KgRPonzu69dM6H9qbGZp1dbw3oxVxa3wS0FDiXiZ8OzAulXtcex0YXdDht2?= =?us-ascii?Q?iE6BzhghwpHfIDhcoedDF6bBRTF947MYazchp1f+TNa8i4Wfu/A+a8/tIt5N?= =?us-ascii?Q?kIbR17JzJBjCybj3pR7vpld9k764caHsqb5We7yYnbEs4FRk4aX5sC76so7k?= =?us-ascii?Q?1H4viUGa81UOBITU98AC+pk57oQdkot1+VIx97d7dH8ZdHjY83PhAzAOQ4on?= =?us-ascii?Q?EVFdsisNrwyiMv8dT+sih+CkN7xiP/RraXl37evySiJLB1mWM9s7aByJjDSA?= =?us-ascii?Q?8P8o0KmRF85XjIeA4qdb82DXa49z9nvHbriFaQMMvCJrvcOjoSoilGXKAXjK?= =?us-ascii?Q?/DdY6tw++3eRev5r/Jhmim0Qu6be+3BDoasqnGRQILIwTYGoANjMJREeoz/s?= =?us-ascii?Q?29YB0KrGd3NGrh+UFAjj1NuZXjW+09g7bUdGFCqazKLUPJGypQjpsTP2OLaT?= =?us-ascii?Q?DhMxZnXI4rlUTziqg5M1baxadVbyJizqntQJqI/ALSBuo4V6PCBXc29vLT0S?= =?us-ascii?Q?JPim8cg4ekVK1VoAXApdaPFBqTuZz6oTDl1UzgCL7gkg323lZkGqnMMXHvnX?= =?us-ascii?Q?7U8nuBqlm+rhN2eRjZSxgCnuVzpas9HBu+JmvuuISPky5EaiO8VzVN9ZgO21?= =?us-ascii?Q?l/cmCm6prM//BTC7r40L4crYoD9HIRuveSPYwiWB5TqrjBuXI4XhLKfrEWay?= =?us-ascii?Q?j2eWe+WjPPUb2AbvBoafm/s7R+nbp0giXm0dCiqhuQwcJnhbxCwXe7oMQSMb?= =?us-ascii?Q?Ddh0gaTEsfmcVCu2/lU=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)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?VLGNE2NJFhiXzWUZbM82OnSfyRz0+U/39B4dkJD3pdTq6j8znuqkNacKpkMG?= =?us-ascii?Q?4hy80AnwTHTiygVqP4RFncGRPX3bdaVdo36YRdDsCyCT1kvHXSeUeYet4czh?= =?us-ascii?Q?QrC6NUX95FmyH1t7q8FE3ne86yat9e0J6a0nqHB7lD4U5aHVujjPScpG9cZX?= =?us-ascii?Q?VCA1RQNz+HGOrFCcUqZakanqbwBnDkYFFDj+2nUfKHxLum9yfFewaxXsR75G?= =?us-ascii?Q?9ogG2wXv+xziUeqHV0sQAOBnxadD5h0JP3VUC/U7PruN+fz7MBdbbfM7nKOW?= =?us-ascii?Q?ws3khLwZz666ocmgQ94gZSeV9/eORMvBdZof+iyBG+qhZ+ZYlvBuNtOgY3q5?= =?us-ascii?Q?BuDX5RiX3FAzSVrk7DUFPSTLVeSF45UqCrusBu0yr/O8+XANRD1krsjlEVMa?= =?us-ascii?Q?N+td15TWsAQgwkqyhLNi9Np39Ek+MCwVLqouDrpLFWhz7tCBu10QpK1K52CB?= =?us-ascii?Q?GsAF700Gjj4rK1ZuL60lZOI+J4rLhZei6X4SIC5+qFcN5R1Sfw5Ayqn76u+Y?= =?us-ascii?Q?/GCMXPOZcShUlCga0eBfWQsxPSjpek8jk/SEM0yXwruiJTIlWPpAvPumfDYm?= =?us-ascii?Q?ggx6GDN8/ZRsekL6/z3Y9lNaESMNg9pZV+AEq/25SSRJjZOioa2Xp+P4wsZG?= =?us-ascii?Q?NIC3IKgMPEkJv7aqTonBl8b7gzKO9DxX48OzfY0CQZ0KmtPe7YQhAR2VXIjW?= =?us-ascii?Q?H9t75ZeXc6JPsXw1puVFREQNn/jzPVZosprh83LEvwlksuAn3Xg21q+ERAkg?= =?us-ascii?Q?WWwtW/r0hZTV318WxeSqdFZuhFqy2NSLQOo4IOxrjPWBEE9Mhndoj9JMzSUz?= =?us-ascii?Q?oUkCKor9TkXZrvLf0ZS72gCCAcjigbMLKT/5PnsOrf0Plu43V57c8hJi/ET8?= =?us-ascii?Q?F+vvFKe2OYoBzVaTeDG9TuRABM5gRN/bYGeLKpDMDjhX7H67pJqc3/JidRop?= =?us-ascii?Q?XOqmcNjdYTZhOKu1sYx7T6JJfPas7VDhKPhUZC7sgL9uXv/BbbbfZ7TgIt5c?= =?us-ascii?Q?a7U8jhZoWPYRbQV+p1YtoYBv6pXZMEfYUDKBJijiYHpV0Yw1byR9G9xkATzf?= =?us-ascii?Q?5tvv4iGaQRyXfEWeCyQA6FIh1iodPBIXNOb0ZY8w6piRFY+eSMUeWfRkfvPl?= =?us-ascii?Q?9a6AfFuaW4J1gwDH9/30R3jXDbmiVHnPExJ2pkJ2cQdzjfSN/qPAw4zr11qd?= =?us-ascii?Q?B3Fwh2T/fTJBGqzqUR0T6YYwMroVGx9BndVoA5bmxECVwe9LwFHWzLQTYdsG?= =?us-ascii?Q?FE65VKYl7ckiBFEhtTq3gkuA3hsDtAlkLfVIJdMtS31NJSlGZx/O5ZowF48G?= =?us-ascii?Q?bjrNbH8A4Q8HWgoan/kN0jM86ETfOFM9NEoa6YPVJvSE6DidO/OANVDOnGHF?= =?us-ascii?Q?HNAZeFzxoSrOaAaFow7e3H+ApWrEGoe72C7eSe6AhKdVvk8ZqpL/Dy7FIqLF?= =?us-ascii?Q?5I/HuAItGt790gh6vaSW6KYdhMQpu6AMmjyDbywPtIIgYRA1KVYT3J3aCl8U?= =?us-ascii?Q?LVjduTgyUP78dTEUof9+bEjkTXE63tWIIQSkon6LweD+hOPTxtTROU4Mu+55?= =?us-ascii?Q?/6KNQPGc35qwPRE6D/6c7HRA7lrwqabNxBvL3eKmyyCI4I47AVUefkKgRnfW?= =?us-ascii?Q?1wYv7neoiR71GE41cPW5pTuW7H/KL6d06Hl6cWeKbdq6aZ3jv21IoCAbrP4D?= =?us-ascii?Q?Pi74IWJ/ZfDfMabKTUWlrU/YPs7hRtFSyJWylB4r4X9kTmOrOBvRoNUyD8BA?= =?us-ascii?Q?fWNsBgkcjg=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: aa053b22-d9a8-4e4d-d783-08de70ee5ba5 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:17.6652 (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: htLvqMGttfAOP3yut8LPhw32cyvveJBl4eYhtXl2xP1EragFmjoPWVnJg5XwqtDW2TkqrvA0nRip1CrrDQMkig== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 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 | 122 +++++++++++++++++++++++++++- drivers/gpu/nova-core/regs.rs | 12 +++ 2 files changed, 133 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/nova-core/falcon/fsp.rs b/drivers/gpu/nova-core/fa= lcon/fsp.rs index c5ba1c2412cd..4baeee68197b 100644 --- a/drivers/gpu/nova-core/falcon/fsp.rs +++ b/drivers/gpu/nova-core/falcon/fsp.rs @@ -5,13 +5,26 @@ //! The FSP falcon handles secure boot and Chain of Trust operations //! on Hopper and Blackwell architectures, replacing SEC2's role. =20 +use kernel::{ + io::{ + Io, + IoCapable, // + }, + prelude::*, // +}; + use crate::{ + driver::Bar0, falcon::{ + Falcon, FalconEngine, PFalcon2Base, PFalconBase, // }, - regs::macros::RegisterBase, + regs::{ + self, + macros::RegisterBase, // + }, }; =20 /// Type specifying the `Fsp` falcon engine. Cannot be instantiated. @@ -28,3 +41,110 @@ impl RegisterBase for Fsp { impl FalconEngine for Fsp { const ID: Self =3D Fsp(()); } + +/// Maximum addressable EMEM size, derived from the 24-bit offset field +/// in NV_PFALCON_FALCON_EMEM_CTL. +const EMEM_MAX_SIZE: usize =3D 1 << 24; + +/// I/O backend for the FSP falcon's external memory (EMEM). +/// +/// Each 32-bit access programs a byte offset via the EMEM_CTL register, +/// then reads or writes through the EMEM_DATA register. +pub(crate) struct Emem<'a> { + bar: &'a Bar0, +} + +impl<'a> Emem<'a> { + fn new(bar: &'a Bar0) -> Self { + Self { bar } + } +} + +impl IoCapable for Emem<'_> {} + +impl Io for Emem<'_> { + fn addr(&self) -> usize { + 0 + } + + fn maxsize(&self) -> usize { + EMEM_MAX_SIZE + } + + fn try_read32(&self, offset: usize) -> Result { + // io_addr validates offset < EMEM_MAX_SIZE (2^24), so the u32 cas= t is safe. + let offset =3D self.io_addr::(offset)? as u32; + + regs::NV_PFALCON_FALCON_EMEM_CTL::default() + .set_rd_mode(true) + .set_offset(offset) + .write(self.bar, &Fsp::ID); + + Ok(regs::NV_PFALCON_FALCON_EMEM_DATA::read(self.bar, &Fsp::ID).dat= a()) + } + + fn try_write32(&self, value: u32, offset: usize) -> Result { + // io_addr validates offset < EMEM_MAX_SIZE (2^24), so the u32 cas= t is safe. + let offset =3D self.io_addr::(offset)? as u32; + + regs::NV_PFALCON_FALCON_EMEM_CTL::default() + .set_wr_mode(true) + .set_offset(offset) + .write(self.bar, &Fsp::ID); + + regs::NV_PFALCON_FALCON_EMEM_DATA::default() + .set_data(value) + .write(self.bar, &Fsp::ID); + + Ok(()) + } +} + +impl Falcon { + /// Returns an EMEM I/O accessor for this FSP falcon. + pub(crate) fn emem<'a>(&self, bar: &'a Bar0) -> Emem<'a> { + Emem::new(bar) + } + + /// Writes `data` to FSP external memory at byte `offset`. + /// + /// Data is interpreted as little-endian 32-bit words. + /// 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 { + if offset % 4 !=3D 0 || data.len() % 4 !=3D 0 { + return Err(EINVAL); + } + + let emem =3D self.emem(bar); + let mut off =3D offset as usize; + for chunk in data.chunks_exact(4) { + let word =3D u32::from_le_bytes([chunk[0], chunk[1], chunk[2],= chunk[3]]); + emem.try_write32(word, off)?; + off +=3D 4; + } + + Ok(()) + } + + /// Reads FSP external memory at byte `offset` into `data`. + /// + /// Data is stored as little-endian 32-bit words. + /// 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 { + if offset % 4 !=3D 0 || data.len() % 4 !=3D 0 { + return Err(EINVAL); + } + + let emem =3D self.emem(bar); + let mut off =3D offset as usize; + for chunk in data.chunks_exact_mut(4) { + let word =3D emem.try_read32(off)?; + chunk.copy_from_slice(&word.to_le_bytes()); + off +=3D 4; + } + + Ok(()) + } +} diff --git a/drivers/gpu/nova-core/regs.rs b/drivers/gpu/nova-core/regs.rs index ea0d32f5396c..b939ec2d5bec 100644 --- a/drivers/gpu/nova-core/regs.rs +++ b/drivers/gpu/nova-core/regs.rs @@ -431,6 +431,18 @@ pub(crate) fn reset_engine(bar: &Bar0= ) { 8:8 br_fetch as bool; }); =20 +// Falcon EMEM PIO registers (used by FSP on Hopper/Blackwell). +// These provide the falcon external memory communication interface. +register!(NV_PFALCON_FALCON_EMEM_CTL @ PFalconBase[0x00000ac0] { + 23:0 offset as u32; // EMEM byte offset (must be 4-byte aligne= d) + 24:24 wr_mode as bool; // Write mode + 25:25 rd_mode as bool; // Read mode +}); + +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.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011050.outbound.protection.outlook.com [52.101.62.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7C93F32936B; Sat, 21 Feb 2026 02:11:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639868; cv=fail; b=RDhG58B2eS3vignFSDfL8FEuavZd47GahQlX3H/wYlsskPE2PLgmasBqke9d0+6mCDPMSJz3iItaG8XXJ4M899zVQGRgwzCN7w2LuVAlk0Hz8ks/9/xnjKfYVMX905TpOsukjzE2SVSqbVx26XSb530kOR5ObeFLCOC/ZQP5KPE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639868; c=relaxed/simple; bh=hyEbLYHGBN8dg3/lEn7diwuIz37+mBe0F5UBoXsNu6Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=oR/YRFGQCkSwgRLHEUQ8q+24hwmlSBm2HEloS2urzoN8nXzPDrgoUGnmvinC72JlBBfm0KNnSBTmyagYZIlE0mITSLQudp9R7EFcRIOGHIiKh3th59ypV4ivrM1DI1CR9B9Xg/d/Nin+WeZepZcMpgaEjDMKNbS1CsOvWP5o0WU= 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=tXiO0Xa/; arc=fail smtp.client-ip=52.101.62.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="tXiO0Xa/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=d1nmgjzAW3x+K8aWUInQ6r5R1P1yrS7orEHkyyTnthn8i/j2HPd+avpS/U2zEH3sXEzvYs8MLwHULEzH6dU2svHiLLBEp1TO3gAnhoKYAvoAKww0YOeJD/gYIqKitew/ZjzLhATsLLGGxUtHKgUi/JGpgwrxt+Q6rKFZQF6tNmY1EejOfB32T9Sa3qXFr6K/RqG65k7wIg/4xrAqiYlXYkaIY4GaasJZe4B1zVkr5Yg1wTRQkiJsPRF1DJTjglTbk/yk/oMTUUFTTT6ezz4/rMWd7+r9eMWOT+iRfQN9ijPaBeyZ5xmHTux8JywVwfAJ7xptMGQqZWR9P0HbWguEhA== 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=I0pfqZ/Zsc+2WbDodFECnYA1OtwLOwudUh1xZlV1Hio=; b=jjB7DeMBPqRdhJjofxAwXgLq7JUYX4Z4I3e5JfAWw8xAATTnVuV5nBuWwLbyfJUAOzzgu5Gh6hjauysoXrXLB0QTQncD/jjdcrJpYQ8s9IPef2BiNZc1EkITWtM+9mRCc8cPtat9wwZ9GwaC6Vo5wU+FuNOXFe504q1upYd5NreP9Rn3TOZ36SKQd6gOPW6Vsz+8VPm17YqJwviupi7FDM2ETbRK5fdkaM2JExR/XdBtA2MNvyLvau6rkfnYePBMLPYnyhF0UscXRQ7U2GMBT1WncJJjjei1cEto5a15DKTCxl9/YM/ECesoK6D9OXkrmB3c2rEmDMAJrAtgkY3AIg== 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=I0pfqZ/Zsc+2WbDodFECnYA1OtwLOwudUh1xZlV1Hio=; b=tXiO0Xa/wGyLWgyVGcMX2IcdZE2CQKQ6Kusp2K/t0s/kZtkYrtRLLloAMzocnO90ziLXWlgyZSeujQpSCtWNCJy6Tr4RmZamc2vOWESCK7sBIqrRakVq81JZf0e36DkLxJzfwR5kILgbDDeBKieRuCHzDMhSMpvHuS9ibX3xhSyG0hd6D013nAnHDW4TN/MGJsn15iI5sAgSqI9nhjPZxM4tEDutNGAGlHyYPcR8rYBdouOsnnEywQk/W6jw0oVnJBZt8jSSgQmiC0ft/bJkCzESaI1sSqhWpA0mXRJOYI7tWUuEBj2c4HeXlMPFCA39KyLhLfAfAam7d4v/yuE1Ag== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:10: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.9632.017; Sat, 21 Feb 2026 02:10:19 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 20/38] gpu: nova-core: Hopper/Blackwell: add FSP message infrastructure Date: Fri, 20 Feb 2026 18:09:34 -0800 Message-ID: <20260221020952.412352-21-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0075.namprd03.prod.outlook.com (2603:10b6:a03:331::20) 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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: d05db52f-e3a9-4089-3b7f-08de70ee5c49 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?1l2M/vucG5rZCYzOvtG4c2AnEpxlQ93n+mtjkYVlMaIOPkAeQzH5aCqZdDPS?= =?us-ascii?Q?1419VtWGZ3GNr/LPKRWZoVc5pocKhlznJWIE1SIWduWLoyzhCpY+sEsbM2qQ?= =?us-ascii?Q?3TnmnUX/ZqjNsxNEGQY6hVWIv4LppovOqpJwm1vZBrESI7J5Uch7Jl2exulV?= =?us-ascii?Q?E8oqtNSncaZU5dD4NyHXj2JulqA1L+eRHNUG1TJlFs49LOgnuSsxsgb2KRSq?= =?us-ascii?Q?wYQfufeaJha4bXlWz9qBuNz68MM/VofdDkfNHNKBn12jQa+uOPbCpRiLVIiM?= =?us-ascii?Q?OmqO5yrXiJrvjAYH0heU/U+YGtqag54yf0oA7JUTKpowTFfwx4KpUF6SQBtf?= =?us-ascii?Q?vi713F76A8vysDY/kybnhyJipimOW8XSaUOT61TV8oId/hAAeRfWHtljfZY1?= =?us-ascii?Q?/UNqvlX0Wv7pCRWY5PC5nwprs6fX3CicYPZqlJLXa6e3P+uBdnrkyfYXSYuw?= =?us-ascii?Q?uqOl/rl+Y53kFl1sPeYJWDndEyPjhuaN6obzOCzUXv9VRsuWMSmT7FhvYM7Z?= =?us-ascii?Q?EIpLeoqWUv+hPSEsRFZOpawl4h8vah7aM5Hvd8YZ7IwmiEa4s1RTWUxmY2FA?= =?us-ascii?Q?kpiCw0DH/Fv0tIFoTa0LNhBD47vDdThyLh3bF/1NsN6qGDSN9LRqlDd6D7ui?= =?us-ascii?Q?zyArGxwVVuXD3QDaOFbPN071tbskZLMiDTZM0L1pV12IHnq71owJLuGOB5lc?= =?us-ascii?Q?bLI/JKo5lEkxuoI38yx9O5TYlvssvToYkjhmUU/Yc2TRX025hJtbnKhJt9aQ?= =?us-ascii?Q?QzOTXblBeGVB2jV8+WM0UUAsxTTJAAbK5FR+sNP8CxoY/vFDruCgfxqOCp+6?= =?us-ascii?Q?zRsKN6BPstNlFoSqtw+P5jSx6klD7GhiQZJNLhqm50CdgbBQUke4GT6tRi8S?= =?us-ascii?Q?DrcKCrtennX2q18wsgBMFiW7C1OK4xPQIJwkIkCUF6uVAH1u7SlKlCEeGW6X?= =?us-ascii?Q?3azAm8Rd4vkUQuFJ+bRbdrSAChPlky/RKLbRVI06K6ymEGoqfJdKCK9uuQxe?= =?us-ascii?Q?Jcln3DMreXSu9NjyJ/vcDHyY6AywIU38W3f6Zj9iaeBsQtOwkIH1p/1ao4Tq?= =?us-ascii?Q?VtjH3Hikv9AAAg/zmqG8myWms7A4Ar/VbLQPVGhJgYPxZu3k8fNubLPo2VwW?= =?us-ascii?Q?eeYi9CPMOvOj6QvaINVOkBEUZLN86RXhkfQPRZfNm9v8RqnZFcNntsVW5BP6?= =?us-ascii?Q?JKo7iF9nfne5blLT8C/Gsyy6zJL/VLwUyszACvUEXn3WxdDif7680e0Edezn?= =?us-ascii?Q?fjxpwt/ux/9JvUqPWHfFZagFQ/VY1LPRD/q5ol8aXf4YbnBWDTTD3rGlPEqP?= =?us-ascii?Q?bK7ak3+SROvzS9zjT1QDHDUUl+zZj0KltY3OOIql6nC0i4wnhDD622AoiAaz?= =?us-ascii?Q?vp1qaXZG9qiAVGBRuSkA4eF1Q8ldSER+wFb1l56vPgjT4iQlFrMqZ85oklaZ?= =?us-ascii?Q?tx1LTCsX2rzdQV9rH8kKn8NOyD8ra6NHWSseoe+EgzGqzOHULh9bVkht3Kgd?= =?us-ascii?Q?3xtA98oX/4FTSoeCGIT16D5p4iIfDSAmF9dR6eZvx+8AmKSS3ZjkGqobklE6?= =?us-ascii?Q?VKPMfEBYrqgm5SDeHeI=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)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?eO5d7CEBUhVMhFPrQQukiq3dRd83qy9/OOSsUM1HC6i46ki5kktMqoU6srYM?= =?us-ascii?Q?N/w/eBD7ni4k8wsVyc6Kp69lep1hS3Cy3/pggTjAbVZte7MtjTPrYxncniru?= =?us-ascii?Q?c0ZnUVJVyneFAjTiUhQg9Rh1Htxl8+EyWtDoCh5UeF0Cn93WOufAINFI5mzq?= =?us-ascii?Q?E4Y6Ch+ilFP+OpgWhgi7HbVqNxe//jm+YmIainB6PEh1y4t/l7ZqU81BlnRS?= =?us-ascii?Q?Cqixieqif7tSx9CmNjO9BdhkI3bsQ+mELotNnyTEIuBPGTpctfLlDC7oMN+e?= =?us-ascii?Q?/aOAWGu8NQ0qxf8NGANl/Ap95CeElkmIJ0hi8++bZ/wHBAcahEjCFeE8aQ1I?= =?us-ascii?Q?o9b/7mYtZ6h6uBmNJroySqPhJbr/bO5qZ1MRaTuC239TJi59AbXCOrvFspQZ?= =?us-ascii?Q?nBSHnmIDL+fQTMVXEmhrTpJGj4uQV/fBe2CYSkgVtPNKoDQQRbairDpcWmA5?= =?us-ascii?Q?jHwX5JYD0ZjMJJdf29GOywLhPtCJKXwTBPMhuGCsqQkD25je8lBpBmt3lNCU?= =?us-ascii?Q?vXd7/boDs36EyBCuo5A8HBBL51HXh4Q0OShjRozCOe2mUHwKdw4WzV+vSoIy?= =?us-ascii?Q?8q+FxsYrg+YXSOdgtWko8mb1kczVl3zX2GFkBlih6ph0LYtvwEDqUq0+sX54?= =?us-ascii?Q?Y3ayWbK2Ue5U8wjJZlSLH2UL+6C4/EylGNhhTJGRrL3xWAleaZRtw282figq?= =?us-ascii?Q?5kPFUMSCQotxYUNUlspch7dtMFcfQrDLFhVj+/E3aAiddukhkOnmb3+fGwY6?= =?us-ascii?Q?pkudm7WKUM5y8RYG19Vo5iGNPQIZSzL/jbDiMxIM8pcAE3Am5FEbpHbrOYuy?= =?us-ascii?Q?wzXV6fdwVErcXCYRcC6csbHbKlGkjjtDJ4LoIACSxl2l2eSt0lrD7fUzL57o?= =?us-ascii?Q?y3RfcM0jKdovPgsSD7WWyhWJwcmJJwMTUzjiNot6xzXgze1i4yrHLuLQ2hnm?= =?us-ascii?Q?1XuO4/sLM8pbPnchPqfDsCQQ7U6kNPVaFkZ6anvH/XeUBYcMc7V7chPreRIz?= =?us-ascii?Q?+ranb8ygEcrMtrFUCj9D3jL1mOVBKGeMySh4mrsMdERR/QAsN9cWnEWb/g1l?= =?us-ascii?Q?27pMiglY0dxd/13tgxD4EiC5EROy0xFLJKCiEHM88rUT24XBUk2DeN4+3Me0?= =?us-ascii?Q?77pPruPduQrsL4tdX2FvraxjyY5Q37kWkPBAt1IuXJGlnPPsnGE9K/AmpPrq?= =?us-ascii?Q?JqsWV2dcgbTg0/A+pQMNfspMCZkiE4dGzyQGPvalOXLK0MG97akroLq2Y1cp?= =?us-ascii?Q?vFOuc2bSvdJ9uTMdNwnd1yz7Yf9dvfQIyZJkt8vnYzWiTeQUOh70WnzVw8iC?= =?us-ascii?Q?6ZnjxTZJJjpRqkEhGueCVO5WcRxATFBrLGBzfaGhh5Rvp/W5W/aENU7O/71N?= =?us-ascii?Q?eDCD2bYM6pcAF2GKGjswvaamEcbd/xN7+wm2DY/nkebvcORTf1nZoE8fmkOa?= =?us-ascii?Q?Bwm+ybzHk3MLhEkmV7HnE4irpy3NxW63N9p4jjKsaG5vF3+EakfP0naqFLq2?= =?us-ascii?Q?e2+SbLYCcbLOHdwOqlFoZY/9k/5SpjC/wLd3MYH099Xu7cZVCSM1hv6zGi1a?= =?us-ascii?Q?PP7T6JlLyF0xQ8q+3j/D8dfbKvXwf0cFiPR9H6gWC8kvGEjRHNa2at/XhYZZ?= =?us-ascii?Q?Pz38ks3Q0+XB1AnrwGj+obPgowZG3xH6NdxdYqOenOSujhA5S/yXBQI7fnmt?= =?us-ascii?Q?yGnCCoxeoTFqf/Wv6zwQuwvriWC3bjq7I0fWU/pw0KOVL7zPRCFI0BA62uHz?= =?us-ascii?Q?R2Y2nogV5w=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d05db52f-e3a9-4089-3b7f-08de70ee5c49 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:18.7318 (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: g16FdAbDIg75UXZXCFK2UDV16/DTy72NiUM387bSC2pmtlq7+q++8ZGYqSwrgGfvEjbA6r9cEuYl85Y5ZG17AA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 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 | 48 ++++++++++++++++++ 2 files changed, 125 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/nova-core/falcon/fsp.rs b/drivers/gpu/nova-core/fa= lcon/fsp.rs index 4baeee68197b..d68a75a121f0 100644 --- a/drivers/gpu/nova-core/falcon/fsp.rs +++ b/drivers/gpu/nova-core/falcon/fsp.rs @@ -110,7 +110,6 @@ pub(crate) fn emem<'a>(&self, bar: &'a Bar0) -> Emem<'a= > { /// /// Data is interpreted as little-endian 32-bit words. /// 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 { if offset % 4 !=3D 0 || data.len() % 4 !=3D 0 { return Err(EINVAL); @@ -131,7 +130,6 @@ pub(crate) fn write_emem(&self, bar: &Bar0, offset: u32= , data: &[u8]) -> Result /// /// Data is stored as little-endian 32-bit words. /// 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 { if offset % 4 !=3D 0 || data.len() % 4 !=3D 0 { return Err(EINVAL); @@ -147,4 +145,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 b939ec2d5bec..35639ea32e55 100644 --- a/drivers/gpu/nova-core/regs.rs +++ b/drivers/gpu/nova-core/regs.rs @@ -8,6 +8,7 @@ pub(crate) mod macros; =20 use kernel::{ + io::Io, prelude::*, time, // }; @@ -443,6 +444,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.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013016.outbound.protection.outlook.com [40.93.201.16]) (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 2E060327C12; Sat, 21 Feb 2026 02:11:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639866; cv=fail; b=a4I5onrbvJNEM5cz0oaL5Mnf3zyZ9BifSTh5muajWJgFCOFgAbpGeJZDH8cFz2E7VRqeBnR1ce6QbkjPSAH0fK8bxRqqeSQUWUm+BmgQYpamhy0YHZdKeCtw7Qx3eqlQCAZ+uIRqr/R3rIxJgjQ/eQSOdLnad25BY5BYXqaWcE4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639866; c=relaxed/simple; bh=yJEah6tS25njXSVSRCfgjlcd8d2e7xAtmsKnUdZ20rk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=g/LpsTjLtzwmrp1D3X0+PGTdqU7fFx9XkO/PbM+NeNc9rObTofQLCkWqypLqpU63nLuYsrJBwoaUeuBt66MDEdbx5UdC02py7YoFMQYCKczv3ssjNMml1Jopsgvugsd/ZcYm4wgHMmMzYoy35LOixWvMTQA2teeKPK2bQYlzAgA= 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=t1MYepVN; arc=fail smtp.client-ip=40.93.201.16 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="t1MYepVN" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VTaPY0Y+837qWo7gvrP5BO6c+g6ReixuhfoIT7ji09iOCtHu9mVKuDqKeQHQzHZc/wd0tQel0e+RszkBw6lhSqz4w122Mnwxqt5IaitHCkc/N8q98QE6fvlFJb7lj7zBY9ZDQKV2WV3l2NdYVHLb3ZreGB258iL1A4/ux19V5Y0mQL2rN4hpn3tSULlOsRBj7A8EsNZfYWF7HCx8Kna6e8eJ7ZRq4cax7YcjjvCYqCyGfrM8S04cn23nQLQ7npLgHO++R7bd77d32gWPyPfVyFo6HyC9xtjGJODMpVSrFDw/PBnssFHwp6CMYe/fEuwYkUFZOn8FGSiU/8rV1Qt7IQ== 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=jyhYfjNABYx4SIxjWxr2ScbGy0P7FnISSHhvCU6HkP8=; b=uGCHYKRkMZO0bhWV0YeliZEaljeiaEuZxXe1lCEfypQq2IRywjG02K+kAIWSkl9h4/C6YdNmWeS2e7ee09O5ceCrbgDTktonEnrNs9pWy67xXRYBtRYjUZ4G74ojdJxnXvhx94wAVmB4a2ST+5VptT8KJWqeFqU1zXWhQjUMmeVF2QqzxnITT7Mwx0A32yOY9ndMfrMQKhzge/14UB/nASHWW7sM61uxWm3L3SEgzHFPmPgTr7fzoBzGO2OnHqOyzRkfO31GQ7jLbzs396vcWJXV3isNQZ17XUm6LQZh1lbX41CwgIHe80zddjV1GWCL0QsFLNPGYU61h3bPk1J+eg== 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=jyhYfjNABYx4SIxjWxr2ScbGy0P7FnISSHhvCU6HkP8=; b=t1MYepVNTAgarZzy+rAuEt24RV7bm+WI+uO3C9zytC5bhAvsWZW+ubus1nDxjjc3B2LCvjXrahetWOxOvglaE37A6Cpcxl3z00Ccw/s0OPXN1lTDPiZ5EMYnULm13sdfIVUGDUNcPT4KuqlbrhRzi0Ublc0gzTOF48NAzvQHKDCAUDCe7PeX/DdgPrTuccO0gUbY7z9pSSwPPKuRDaBDQZpK49GHgLFl0qcczsTyceEs6JP8Z9k++U579bJTAwKImowLQlB2OBWE3ENglse4NoR75kbTih0fTq0WmHKeHUVAU2ZcuIAMIs6dkNUcimg73rcrBA5fJ/bRdPy2O0sZPg== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:10: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.9632.017; Sat, 21 Feb 2026 02:10:20 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 21/38] rust: ptr: add const_align_up() and enable inline_const feature Date: Fri, 20 Feb 2026 18:09:35 -0800 Message-ID: <20260221020952.412352-22-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR04CA0005.namprd04.prod.outlook.com (2603:10b6:a03:1d0::15) 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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: 0ffda54c-a331-48f1-05fb-08de70ee5d15 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?2de8dHZVdq7I0X+aVPfVAmf4YFS2svuYvgBGbgpHBUkvEhbkOoP5Ei8rNVJ8?= =?us-ascii?Q?hIH9p5GU5VKM78IkgKqYW7cFITEpSxDrvikvKVYWCyEcR69Rwf2h8ulHHmxd?= =?us-ascii?Q?3104XVDTs+/f/QisJlhdkvxDJ402QK9as6EGYK7YEno0R9mK8lQesEITZ8f5?= =?us-ascii?Q?QJ+Tpqf94yIIHpRR8pP2CVVUZ+raxy8CW9FSNF5dx7pbttD6LUnU02o/+YWy?= =?us-ascii?Q?9j0rOjJd/4VKTge/Hm4Pk8godsxEc5DCXyxx4LfdOgCjYRKBC3GTxc8mP84v?= =?us-ascii?Q?xafAgi67r6dznI4hF0DDuGbL6xdABYYEnEDsWeY4fdV27tDDUBMsVGW/fwpK?= =?us-ascii?Q?c+sm1JfHb4IG742heQqOLhlXZNaGFsgj4v50TfXpBjfAGiiSn+rv4QnDaZDx?= =?us-ascii?Q?w8ao1YVty9sVxNn1LKddbccjLdfAny6BgX9YCihhkGz2xdHy5SztWz2Nc3Bq?= =?us-ascii?Q?LpLH0hf/DXTjHBZPo13F9iUJFsyuUaNTLHfg9UBSNsPrjOUT9sgRWDtq7/Nm?= =?us-ascii?Q?+y3fjJOSIGp8zKhbR4EshfJjFLwyxfm9ZNG50+Sk3ZwQls+sROqSnt0aPk0+?= =?us-ascii?Q?a8GoIlavQLdbPwAorJfL3JwtKqbY1ZeRrM/P3eVwgRI0uxQmrvPzd7cjubOM?= =?us-ascii?Q?ebBPIEOWCyClX0ZoP8UkGDqa29lwMh2rMT76TMX+GCGnOHwiX3ErtwH7UF5Y?= =?us-ascii?Q?tu/IUJNW0X76kgK8ma65j8vmgVoP97JRHsxL0LSx6n8n51tYe0GwCWdsWQJc?= =?us-ascii?Q?KDZtSJfWtg4ZSDjw1Ve7ymhr9f1FRcOrCnawpvhHJQiKBjYEBfc3+KhI5J9d?= =?us-ascii?Q?0l2oPK8vMcH0Bpxn3RoGWQ5dZ4HMosbTklmAFVxTOgOE1xo9XmLiU9yEC4Dy?= =?us-ascii?Q?q2axoQnTFC4fnhiWnuF3blQ1DPejT7Jh3djK+lGY46X+7sqHhecTZ4SdG+IN?= =?us-ascii?Q?6kD0YziWFaINlAzXzFdMFdwL0rDyO8t3CcgLr8PUYGtl4EHQVfU/84IpaNNZ?= =?us-ascii?Q?25yCXdmNL8qPr6y5FU0bJ0LHKSUukn83pddZbyNsQx/gA1j4TVwrv/Os97jO?= =?us-ascii?Q?bZ942gL0VFTwdXYMnCe96cwUrdezPVdESTlRYpXCFCzWq31LTowqPeOs9k+2?= =?us-ascii?Q?K58l6Z3xcypIu+k/hsBVSxZSKp9UuEXABMvPRn5/abHL7XIl7q/OAnbE2o77?= =?us-ascii?Q?W6/Eyy2SX7x3b8UVLg2SAZpJ1vTz+ld5DD2MHr6cX/IXtRdphKdf3wzB4Rst?= =?us-ascii?Q?2bs6DNS/aondKxs6QnBu+LEqjg0kF0EpqyBF3QUWfm7SncF4RI0d8Szv7Ele?= =?us-ascii?Q?RAlV6c7Ajdqs/xSxgBRb1SIBN/FkkIyLZb/XMPZF0NH8QymmWVRHtq0merAE?= =?us-ascii?Q?8pmp996YIUqahKuVO9vghBN2O+rA/QXipeyfmyWqI6sIm7rBZ+kT14RBnHIF?= =?us-ascii?Q?7JRYJ8PoC+zzPnSwe5pBRihz5A3yPCzwLuiTROjM5o+J/pOCzhIYsHrq3teD?= =?us-ascii?Q?g/Ziv6qd46ceBMsHqIzcpOJIBLMqlpw84d9JphGsGzoGnHmpo5YT3AnDonBG?= =?us-ascii?Q?q+BadX4MSs7GhJv6mbs=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)(7416014)(1800799024)(366016)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?3rP08T/r4OE+t3RmFbBPNx/UnjGZ/GGam6OtXam/mGx5V5yGCM33P34vw1QS?= =?us-ascii?Q?T7iOFMT/YGtJ1AUPDIwxQ0BM4TTuxN59LOZmX8GNhcF0D5Evv8dFcI8k4GFO?= =?us-ascii?Q?iC1xBqBcCg5FF34I7jwjj6MerwmesQCIlmzn+bLFbTeYJujlKHP3vxAbAxJb?= =?us-ascii?Q?WcC+AQiTfWrRKYnTABD41No3zajGcDjhRVA6pWhpMZ3tCEGTBX1Ktat9Xhpg?= =?us-ascii?Q?8wW4Y+X/Kqem45rsOrC2LqtBizsOMgnqtA4lTLzIU0+zNgcYvHsO433TFqWI?= =?us-ascii?Q?K4g4poQRiJYNwGah19jyHpwiUA71Tltdnez9YI7JMZQtGzYRDg55sVe0F25o?= =?us-ascii?Q?kKe1k2yXBV8Vz7jFte3EurQ3koseN6+/l5vWbwdAZ8l50oUazQIK+vQyvQqz?= =?us-ascii?Q?kYHVaM3pkLayVViV72vNLzviqBXP5rCxZTVfQ3MYoVPQZ+phXGKDv6R1KNrg?= =?us-ascii?Q?YfuT188JVaLgx4ngJ6J4bSXXz3thN7+CryW2oEHSiwyY7Mr+tGOYwVNi13Vw?= =?us-ascii?Q?zO3jBftS7ihKqiKVC2uNgYmjll06bDIDEIlJxBi7GlT8qiTYDMZhPOPJk3Ox?= =?us-ascii?Q?USPCgP66/6j5z1QZBuqaE2J5zCK3fyezsRMVcOoJn8063W87eTg8YrTwCqPY?= =?us-ascii?Q?bqdUDlLKwaL+uSxpOeWDG+YtcAdz2sDLKjA9N0lQ11Hw+06zg88EI6zJL3qK?= =?us-ascii?Q?dhj07Ckh973RAyvICGlR+uj7LfbfwRf/vD20dS9xYrIArWW5udehhNY87cmt?= =?us-ascii?Q?u1hL7fckxfOzZ9KGbGYflUApctxqIMiQHJ3qLxSv9gAxWFBeucQ3GNMLu0e0?= =?us-ascii?Q?2Wpn47q8jBNPqWNyxjmA9yfhMTk+Tegh0WHLibvq4kgjEBP2JXD3fKOiyrkj?= =?us-ascii?Q?6IOo0h/fOXlGNI8wS0s43Wjnw6DadpFW4WR1Rb3na5aYqKdGA1wA+57lgvkw?= =?us-ascii?Q?6Nn3M6Aq9qqT0h5yzRYLzRa9CDDR71SCbFpdzPeWJBI0kg1xWK6tUQ8nlvEL?= =?us-ascii?Q?O2cEm03xYiz+be6+JoR/FQVNAnIn6B3O48cKNPHEHpHxNnBCWqrgqied+jfy?= =?us-ascii?Q?MmD8ruHmF4m9EoaT7fgyTSgxi1mqy4xk7IwqNXzrTSDEtf5h9Tr3/H8Yb7cE?= =?us-ascii?Q?xZU7tRsXy5G0v9z01A6K96SBZLsDghWcZrsLM7Vgn3xcD0EIU1iVg1a6PSoG?= =?us-ascii?Q?Iyl1vmFFjHqflFKU6cD+uUyThGWotq98k073IUAcYHLtpdBwKT950/8FEgsk?= =?us-ascii?Q?wfqkAwc57VJXftJL0VNt6XW7nkdB2tO1pMdRX62ywWDqYVQUTLy80xRLUFfW?= =?us-ascii?Q?Fl95VXjE33U163DfnrvbOAIWIBR4jw3U5N0WALi7c92fy7GgK8GGnGL3XXU6?= =?us-ascii?Q?/G4jLwB66tkYlUnXL8aeiCSJ/aaqljBU0yzvZI28QvQ4N2lNJ104crGTCPLH?= =?us-ascii?Q?6mFbRxT1B3cLmU+MPl3Y2MKlRF3uNLaaV+d5sLzTVGPfbJos52aHKxKeJNFw?= =?us-ascii?Q?iochToryA6PQMk3/7QsQnwZDuFVroIVFTn97slEg4jWKITH5Tdm+vFOvBf54?= =?us-ascii?Q?7wp0W8gqiquoef/E3YnPwA+5RUH8XiP0sZ5IH/cWiMWrPlM6JCce0tjorzRI?= =?us-ascii?Q?cY+heWMRLL8s+4M35V8Ea0ema2Bz/ApLOXBR4plq2yNhxmHnmY2nOOMG0JvE?= =?us-ascii?Q?RVCd7IMcCoam61QKPhgtzOcQw/JGgq5sFt5HNK3oE2RXitdtP5wqxQQcTpoa?= =?us-ascii?Q?AGynE2D4Ug=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0ffda54c-a331-48f1-05fb-08de70ee5d15 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:20.1306 (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: I2HnqVYBszC1zHpJxv0lh1Z8XQ675WOAWMhtOhA8l4WyuiZ23UVXFaF8OsOANg/d0L9AjvHzO4fdMNsLA6Q08w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 Content-Type: text/plain; charset="utf-8" Add const_align_up() to kernel::ptr as the const-compatible equivalent of Alignable::align_up(). This uses inline_const to validate the alignment at compile time with a clear error message. Add inline_const to rust_allowed_features in scripts/Makefile.build, following the approach in [1]. [1] https://lore.kernel.org/rust-for-linux/20260206171253.2704684-2-gary@ke= rnel.org/ Suggested-by: Danilo Krummrich Suggested-by: Miguel Ojeda Signed-off-by: John Hubbard --- rust/kernel/ptr.rs | 27 +++++++++++++++++++++++++++ scripts/Makefile.build | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/rust/kernel/ptr.rs b/rust/kernel/ptr.rs index 5b6a382637fe..b3509caa5ad7 100644 --- a/rust/kernel/ptr.rs +++ b/rust/kernel/ptr.rs @@ -225,3 +225,30 @@ fn align_up(self, alignment: Alignment) -> Option { } =20 impl_alignable_uint!(u8, u16, u32, u64, usize); + +/// Aligns `value` up to `ALIGN` at compile time. +/// +/// This is the const-compatible equivalent of [`Alignable::align_up`]. +/// `ALIGN` must be a power of two (enforced at compile time). +/// +/// Panics on overflow, which becomes a compile-time error when called in a +/// const context. +/// +/// # Examples +/// +/// ``` +/// use kernel::ptr::const_align_up; +/// use kernel::sizes::SZ_4K; +/// +/// assert_eq!(const_align_up::<16>(0x4f), 0x50); +/// assert_eq!(const_align_up::<16>(0x40), 0x40); +/// assert_eq!(const_align_up::(1), SZ_4K); +/// ``` +#[inline(always)] +pub const fn const_align_up(value: usize) -> usize { + const { assert!(ALIGN.is_power_of_two(), "ALIGN must be a power of two= ") }; + match value.checked_add(ALIGN - 1) { + Some(v) =3D> v & !(ALIGN - 1), + None =3D> panic!("const_align_up: overflow"), + } +} diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 32e209bc7985..a58a7d079710 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -319,7 +319,7 @@ $(obj)/%.lst: $(obj)/%.c FORCE # # Please see https://github.com/Rust-for-Linux/linux/issues/2 for details = on # the unstable features in use. -rust_allowed_features :=3D asm_const,asm_goto,arbitrary_self_types,lint_re= asons,offset_of_nested,raw_ref_op,used_with_arg +rust_allowed_features :=3D asm_const,asm_goto,arbitrary_self_types,inline_= const,lint_reasons,offset_of_nested,raw_ref_op,used_with_arg =20 # `--out-dir` is required to avoid temporaries being created by `rustc` in= the # current working directory, which may be not accessible in the out-of-tree --=20 2.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011050.outbound.protection.outlook.com [52.101.62.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5AE5432C939; Sat, 21 Feb 2026 02:11:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639872; cv=fail; b=fIu9tV7BNY7JgYHHkCsbdLAeIlt9sm+OAGZbHH8h69uFOTouxxjrRKVjTUjzc3LEg8fBGlZ+IDXNXQxLeNoVokPm+A7Sm3tb3bdeg2xFANx3F5Vp7zzULlc/HCnrLLlXHmiqFrxybmVi/G0vxUPeXyE8MzyR6iZ46HfzTNRi2gI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639872; c=relaxed/simple; bh=/aEKGjK0h1dw/1z33BZ/KrdAiSyijq86Nbm5bVqjI5A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=jz2INJH7uk595d1ngYYKBZSTlUT1pacBgX5+fpoQjja2cux7hqzjRRaczNjfDK9xomrfi7kwaB9McxfpWMTk7V4k5Fasee5Q3zOenn3h7OgztJRUnqUNChULSJw7SpxciaqUT9pCSrbeXB0sA3CpBsVXtAaxDTehXIT+SzUN5T8= 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=M578MVOG; arc=fail smtp.client-ip=52.101.62.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="M578MVOG" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GWt4Re87QGCiN+/YmQTCT8yMEVvoocIhGsGFbB2soLZTmOx9Eo/GGF69Tkvxr4hcLFje/FTbcb0fCeL92yXlTJkYRkU0sqb4t3jgej8vQMKQBCsvO3oHD53pQli5mKs6Q4JcPy/bAhLi37na7AQ1XseJgFBEN2rEsYf410yBwAsixn3p/Ke4EfxDiUBwP6ALXGdz+q4J+SNd2s7IdX7ujoPJjCe0snrqCznAYnM0kQ2yjmUwNMdJ+D+7th8h/rBQlf3QURgKbs7cpI/1CGdMeFCsQQ0jQXLFn11QMME9eRfOJpAjnXtQBMkuZyfnYTyix8FESCjOkLexuPny7JTdRw== 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=bwnIZ6j1FOXq9jGs/q9smrLSfUfZybyTrDBAQC9X6ss=; b=Sff/2YvdURA6H7k22ueq6sh7EqbYEba+9KV9iLbp2O2fpkzmMHJ5cijOt7Vqex9NSbC/RzKM+Lt2aFxCTUCRxqNVh4U4nDrSmBYkxSL9fyj7/GwEUWXoqfC0iHAzryM4VZbEo5nU9NS8PDyYpcoJFyQy3WzAwlUwXp9RVHZQihIiIFnxuq+IEvyJTTQH1NKm2FauaIPUuPIuREd5xlaynOM6JiFO7VWxMcefmJ/bQgXskF5XIk/auW3RTdekHT5rKcReXao6oQnWmLjHV/eCdAT8KZXHyfPfpExewl8f52jEtWb+uOkOcIaqMH2qblwK6aFtK2CH2cfNGDtiyPN0IA== 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=bwnIZ6j1FOXq9jGs/q9smrLSfUfZybyTrDBAQC9X6ss=; b=M578MVOGoRL/JDBOdAXkP9mnkK60MpHYsy2OYFcx1bDc1CFmF7Muk0iVAgQsf54Zr4GzEz6frUWDDgOdUk1WhroaifH7q4K78oyNUEZswFcajQYSTiQJI/VXnLMLhMDoxZ/yvIwiBH+oRnigE1LmqSLUzdlWVzqkoo91RlTuUS3l/TCr0O6jMuVXKTfuAN/EhqqKAsvjxPEOGtIKfHrnwGVba9CH6i1hSaR2u9cNJFjcW7iND4NjyqlL7SQBGMKEqcNOHDJW1Leb334RZUkvZ1Nze95y/B5pIZuik6z46wcZSj4WWOwLLNgfYOxvPmHnYzNXUyBAgLFav2/sHlnmSQ== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:10: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.9632.017; Sat, 21 Feb 2026 02:10:21 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 22/38] gpu: nova-core: Hopper/Blackwell: calculate reserved FB heap size Date: Fri, 20 Feb 2026 18:09:36 -0800 Message-ID: <20260221020952.412352-23-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR04CA0027.namprd04.prod.outlook.com (2603:10b6:a03:1d0::37) 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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: 964eecdf-01b0-4398-bfcd-08de70ee5dc7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?qxKihXf/JYltCpwYEmTgGJtv7n4Ghnprv3GD6xyVzJbP/U5CJvHHV40cjeA/?= =?us-ascii?Q?CozqYgdbVqxlQKld8prxBaFqdlm7dCNKwGYRod3Z7ZO7WwoNOfLXRY0yrPRH?= =?us-ascii?Q?pjWbaZe3s64tSgqBdgmIG0ODPyxb5YbCMDXOM+Q6ILZBlANWLqNd9B8sr7pI?= =?us-ascii?Q?itrLpqXe0u9ndpG5+0szZkwb2k0Pag8acj6fRFieMdQMo7EVn/k8N9F1C7wt?= =?us-ascii?Q?mhUf87VcUWr+jgXBvBgvoeNrk5mUWCkPnpDLAx7LHfAlFchYJ4dj9/jODsA4?= =?us-ascii?Q?0/Rcp54VK2BfcjSN2eTkOp2flpVwgq+qIiWP8Bz1sETIktywYb7sw5YSmBmp?= =?us-ascii?Q?29uMGsF90YQXjOOMbNTvURqlTIYgd03zvmopu/XCn8xackQC3E2RUwZTfQnn?= =?us-ascii?Q?TlCy9oj35S5LNJQs6hXinpntw7VtlIkdxg9lLQ93EhujdiAFQIwmHxDOul1G?= =?us-ascii?Q?9WAzexfPo19zpl+2diTS0mhxqKVvvWSnm7JE8jvK+14CQCNNze52GYKkc502?= =?us-ascii?Q?22xPbVFCEx9sViQocluSS5yKINn2Z85abbywRUZgorg78KdweEui43PdPz+p?= =?us-ascii?Q?oviiT0O0aE5pywT4x6T1vTk7vQx89LYUM4p1Gn4/ph2MnOL37rVaqfJg7lQt?= =?us-ascii?Q?eyQtvKtkvo9hzav2z0cyKdhtnkP+amSWL7y/CJZR3DiuHpUbYPZLJpZZJdU/?= =?us-ascii?Q?WleX0Xmfw1luDAsYKtkWONJgARdS01wKJabjeMyZvntFPBOVAvZ10kRJ5MhM?= =?us-ascii?Q?3srZXUDdPCjA5eHVMohQRMAM85rPdHRjxZRz4sp6DxmBf3nw0V9NrTxgKHOh?= =?us-ascii?Q?iUNjovRQQPqP5XjavSQ7RrYjOKFWBZuZovQdfNLIinQrx88S+5LIcx+EAjsy?= =?us-ascii?Q?fzRLE8gbFoKoMMn5fGukMzCNPaifA8bMq34DhqG8cE4gdk2wQouKaAf6byRp?= =?us-ascii?Q?BY71Dutg9OVB4Mk9Sg0DCS/zQTH7QI/aO8d6UfONerZ9SWl0bY+K9vAhz9dy?= =?us-ascii?Q?VB9i74w8T4y4v1tAD6vzz0baPmFP3tzYiZk8VVbR2Zs47xpb1aNSA2uF2sCF?= =?us-ascii?Q?LYBoD1gu7eARPGb9qnS5m7jJ6jGvJU5I9KzElT8UHwXn5I4A7SnbNDH7TiLD?= =?us-ascii?Q?BTskBDIKeJTS5nsWXRsdvbQ2ByqCT6koozg5RD1g36rxJPd1n1QGUfN6XmnG?= =?us-ascii?Q?a/GwOhhwDfThqh8ONRMFYzwf5VQChvX2E2atJ6cB8k8N1CRjp4ay0AcEOYuW?= =?us-ascii?Q?9o4GfsXM1rFWcFQQkb7hGivXMPhCajeSDEZZ/lX1I1sKF6bckThwcgr7kEwk?= =?us-ascii?Q?oQgtYoZqCVEfvFfNMiIM4aFa/KjBMsSsD3hvtl5wBp/eyufvlwC9JsUchjA8?= =?us-ascii?Q?tqup7O9EwuWYEHINlvwjyijOsOkhcjPRT/PuHWPu/BH7djqeN1DivcBV/cEJ?= =?us-ascii?Q?SZvTXkrNQpUREMNxpuaerNqU+MkjdH7pNMFX5/xPHx68GBysA46pLn9OpJ4p?= =?us-ascii?Q?oetiPfNppKsAxoD1v2Q8UnHtnpXP0fGIrPJdhPQ0CaJoXRfkEcKFnqZzBrlk?= =?us-ascii?Q?miWwjGgxpNDT1c/RNdw=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)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ACHcBrF/1H0B00em4+x4cpFTDfkWieOf9WAoiYWqzP1n/5umVBVTNHpdL7BY?= =?us-ascii?Q?4lS1P/FgiUCCJA2G4NmxFP8huki4I1LNV+GfOP7icEvk3ebbecYCgN1FZISX?= =?us-ascii?Q?bh8kFMGuzH57mAbO/vX9b1VWaTt42p8LkZtTghpY0EUw1NThV4U4DsZ+w4jn?= =?us-ascii?Q?/MzZZXdUD2PjGSNTHqIgZpUUkUnnKfFjtHuhmXk93LJw9noA/J/WbwR8GX9t?= =?us-ascii?Q?ts3pV+SRyB3XGGIWNIOhMnewehlFEK9Cb9tgWSctoxtK1sS+VcXPPV9q9uWn?= =?us-ascii?Q?jApbyHpiN9ei7tM+VuuJaK4z7EjU1ZvdSwyJ2cp7T2Kojmlf03NMkAJXdjV0?= =?us-ascii?Q?tZSo/UD6kUDDSVsiFqcxmVRvB6blDJd9A1aeXlDhdObZlrOEc2VQJDp7i404?= =?us-ascii?Q?JHr2GdzEp9IVIXDxTW1KfrOS5AAIDFMlbWNsnR2fwRgCmkiS9yKIT3U9WVah?= =?us-ascii?Q?28S32MWDSQs4I2EtlWEIZsmQEb0wFt3BpdYbwzA8ZkgnigGJtLgRq9ZL+mlN?= =?us-ascii?Q?M6vqMcAQdSgMFfz8AnMb/uMsFWvO1VRS3okLlxKXCfW0OofLgbFJgeQrWICO?= =?us-ascii?Q?wjgGhna/Nl3W6S16UPNxFs6C4oxcs3RZC7XWHa0cTyOYSBMvr7HCAIodXVEG?= =?us-ascii?Q?p4bY4vNELIuw3CPgIGUrbiX3eDZWUAQM4wXRXmMMXcBt8J0KbNhpzsdFVsdR?= =?us-ascii?Q?u4nsF+rHIChZ4vOvbpC8ObPoFIuNwS0gWxxUEUQIrnBSA2MGDn9dnEBhhd7g?= =?us-ascii?Q?Ec1upGCVbr0TZTy3Bv83EdHqQOlNauBGsUOwhtUWKHYXY4SjNaSHm0mQjSwm?= =?us-ascii?Q?+2SAjXHOZWExzyhMBQBkiR6og8Zs9X07HJ5YjZH0X+R4Hu3H4/uToc0gel8x?= =?us-ascii?Q?Y9c1UEieP+qG9CNzrHkNIPV9JqRp96TFiZt+sFuvAbfQEV/cWjBPAnUzWL45?= =?us-ascii?Q?LRmiusOiNdEuMrruyqIql9+tOh9QozzcWcMDygdrH1Zdf/VAv91lWYO9CbR9?= =?us-ascii?Q?Uh+Su8WRTi9ykqqQfyKrjg9fAxEiITatWltOO/z05+/NcbqbOStOToF7zLjL?= =?us-ascii?Q?2ijq8wQApYsmEG08EubJ1Dlr8CmgXhki/8zVYZTLqz36uu1qF8yeNatx261n?= =?us-ascii?Q?V+wa33Axco0HWhJyfZf4ddQXZtZUxjMMslm28Wi5c10z4JFqO0YF/ctbZ+YT?= =?us-ascii?Q?F33ezvlhsR9Hb/2Myf62Vv/buXUmHz12VOsEKqyV5EKylLU+H2texURHHlj+?= =?us-ascii?Q?vYpBtAuyPoYKUpJWrHWUk376LvJUTgp+wDuqMOiUIC0IBnHyaLJf5O4/3UUs?= =?us-ascii?Q?dZ3RegOkV5t4aypSVKHgZfgjvJc0Yk9Puc3/23IC40i7j0ZGzhkK2GYBHJSo?= =?us-ascii?Q?YtethSAmIjDDKngakipLzWUiIHlFn7gGDTmUj28E5W9V6namERIjZ+st+Y8b?= =?us-ascii?Q?8Mz9ogj4hdRyvhald1Xd0TLpiSB9AiutoSiAqy9bfu9lK6XExO6sfJTIpRwx?= =?us-ascii?Q?n9CzlmQsYRLTXAlTCOv+KNcL5t511kd/6vDS8+ieRS6V257XAhp1ZzbiLAfr?= =?us-ascii?Q?gMp5IzFSsQpjBX9NegLXvseAMmGzMmCZAF4VcBiFXDNlF3400S9YdKgzporg?= =?us-ascii?Q?8o5fCwURRWx5KfV1ODA5e1lpuc2MWZsDbWRbxUqg+UI0Gg9DF5+JTxkS+3GM?= =?us-ascii?Q?yuOuizi670A9etbEudfjGdpdeTOz4MtleIbIGt2AmrgIjUm2YvX6xATivd8o?= =?us-ascii?Q?SmAzOnkq/w=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 964eecdf-01b0-4398-bfcd-08de70ee5dc7 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:21.2456 (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: 7Cu9N6jfBLtzakf3cmpeSAPX+Tv09MFDrI3WDk29P8Fz+eClTacEhjYssP9XAs034wk4R4yxUX88xSjSF09RwA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 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. PMU_RESERVED_SIZE is computed at compile time using const_align_up(). The total reserved size is computed at runtime using Alignable::align_up because it depends on the heap layout. Cc: Timur Tabi Cc: Gary Guo Signed-off-by: John Hubbard --- drivers/gpu/nova-core/fb.rs | 7 ++++++- drivers/gpu/nova-core/gsp/fw.rs | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/nova-core/fb.rs b/drivers/gpu/nova-core/fb.rs index 6536d0035cb1..0e3519e5ccc0 100644 --- a/drivers/gpu/nova-core/fb.rs +++ b/drivers/gpu/nova-core/fb.rs @@ -11,7 +11,8 @@ prelude::*, ptr::{ Alignable, - Alignment, // + Alignment, + const_align_up, // }, sizes::*, sync::aref::ARef, // @@ -270,3 +271,7 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0, gsp_fw:= &GspFirmware) -> Result< }) } } + +/// PMU reserved size, aligned to 128KB. +pub(crate) const PMU_RESERVED_SIZE: u32 =3D + 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() }) } --=20 2.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013016.outbound.protection.outlook.com [40.93.201.16]) (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 3D238329E65; Sat, 21 Feb 2026 02:11:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639870; cv=fail; b=O4WzTW+jppqhWEAVK9ZAsULhMHXjZ3HZn3Qk+qVwSYpN6MFNUQYAxZbVam54PZPc2oAeBNN7CHWcLwfjrENMVvrM938Jx2D0b4YenSaOS4q17qAfymlt5vhYOeJ/apXz6sQ4/V+wr7aqNKUCecDZVgs7lO3MpwirgZ4AsilsyxI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639870; c=relaxed/simple; bh=wEwqEx4y49Edxjaaiv/4uoJbWSgfV+tliRn/0n9y5wg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=XUFm9wJaYVprikCPkfNppzNF0VLHThPUXfBRDxRjTCZlu4/jWFbQuIAK6zmxURgv07AvIGANn3rhERKADjTa+bjxLuPCj0OPXHdRQ+37J8BVZ1W7h4CpU/4tu7htImPuPxdf/sb9huTVzMEj0G36dTRxqU2VFG4dOUmvD9JQ1mk= 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=lBehClYL; arc=fail smtp.client-ip=40.93.201.16 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="lBehClYL" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=G+z1vUwsbOcZ6/dYnVqwKI+4HF2KvKLmgWV2OcnIax6E51/Mql4AnrstKWpdu8jDsHBV34AD74Q4ZwIt4CsCKAluaQ9FAyzI/ykOCL/18tsL8tMTZ6Kp8YsaJCY9iA/SYI2bmN4mMtLOdxPI/fTAd75QVwuuw6lpnQjVQ04MwYecfoexPzmzwYEDAFEltviIPc2Kpj9eB5ZaqZt0iDedn0qsfzTxkMDpxqny8MJcmII4Ub/CraEnimrHPxclf4ZJHcl1T7NBf1xVFx8XtF2G6xXT+zVA1lIivZnRiR7m6D666o8R09Yn9z0RqFgrxAl7wyXnhcmjOagtU1Cq2tic8A== 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=b1e0gzITEGIhDYTzH8X6XQarnWqgYgVERza3tDxcAns=; b=TA7wX28QJHWNjvrVagkhiuQkrtkNsA+b8zuMhhGUZfbJiYmnQeG84IKZ1nOzNlxdKQvoGEbTzqYmnQfyefYjPjNQ4cRAoQrvgm4KFqVxPbEe2s/Dc26iVaT66JPekq2NsbL5RsE+qiMq87GE0dUNwFGEhS4RHNoAXcngD+Sjz6vgaSTfRT9dxzz0dkfvgJtVmFf469T8YoHW0OC1sLY3iV1S6liqSpTvHyNKFI2sBkKy4C/xLcLxm8N5h/D7Ps3TsJeyxi1QEDTC9MxJt0Va/qfglr93MGrk3TAyMzfMmcQt25MEE4TvGD5y0ZwR49+YafQz83D4nGdmIrEJ1a2Mcg== 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=b1e0gzITEGIhDYTzH8X6XQarnWqgYgVERza3tDxcAns=; b=lBehClYLqRE9kwdP97FKpIVERLFSCJPi7N/ir0ApM2o1c0KyYHeTNPGLjP78qTV8EGtjePw4uTv8OKpYxTUtyy8Z5qoGmmX6cv/vSifH1GwnjHhEHAYVfAVMHaMnC0nc/GqRYZDxL+MA0enP/AqdzVT9YoichXJicZrpPaf3dvM6PQrDOrpZ1VpjymIoNTgiYhabFhHbrj6NfYKEvDyvjUzv8F8TidIObF6VnVW+Gr1xiP5z5HbrS8ZDZSewsIMFeO0rifCgBZ68IZp4Q2L8mMWsUl9vPgxOECq+t1xNH0mR4jxogAHjRLsyZYDB5T3NLDyY5ZuNtBLDFAQ9Tl3ZAw== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:10:22 +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.9632.017; Sat, 21 Feb 2026 02:10:22 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 23/38] gpu: nova-core: add MCTP/NVDM protocol types for firmware communication Date: Fri, 20 Feb 2026 18:09:37 -0800 Message-ID: <20260221020952.412352-24-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY3PR05CA0031.namprd05.prod.outlook.com (2603:10b6:a03:39b::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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: f73ca7ac-c1ff-4c78-3ed6-08de70ee5e67 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?IKxg+wVPpBUEOCROZ7//hiNJfhXdmnXyaQ2mPBx9uH2RxqSAwWfBa/IXbxkZ?= =?us-ascii?Q?hGgy76Q+SaHNpNpGii02hb3ikQjSi0bYV0JKvRIIxYZcetk0lcnNbqHTT1Ls?= =?us-ascii?Q?T8k0mk0KG9Y9CUoKr7UGpvpoGYE9K0JrdzAV1NxPOVyoMJ4LoaSjuP0qzufP?= =?us-ascii?Q?dIivauMBR9njRTq7W4peQWlSAIrhnKkkrJa7Bht1pe6U2FzQcB27OnqfaVv9?= =?us-ascii?Q?yAS4f0+S3X/D/LKqHxO58kDx8A2D6W9GMiZKY/tqddQv63Q76YAqCrw1z0AZ?= =?us-ascii?Q?lZLyUGLh5bMM3bdHk5eXBApa+rb+K+GfGw7If8Z4WLKrBJ6gP+5EVxn1C0O8?= =?us-ascii?Q?JzCnwX5bkoKG77o5hD9atv3iQdMeKa1kcEhGIGUyJmK6hYaD2xUd4GnE5Ujz?= =?us-ascii?Q?/cI4YDvdDhbL8YcFfzdfpU/kY/QqR14dIqmte90UWewykWfaWbyfc0qKdomR?= =?us-ascii?Q?XPVIrvAYSJ3yk7Q8BK2kiXqkVRaf+QZGVwMy/8YNjbWVMGb4ckYIQG2MnFZI?= =?us-ascii?Q?VYmFuFoSkO13K+6odePMyvilXzrcfNxNgEGuWuIqElan8gd6ugBvYHh5x8Pm?= =?us-ascii?Q?sbAXfLLlrSL8vhFMWCwTVqfROybj9zx6ibTV7Ayh3//y6FNPGy/Fgcy6NdHM?= =?us-ascii?Q?blAmxSOFanzqN6kepHru/qZyeJiTVaRFs9eCvIK0OSwrAE9gprc/mU50ntDs?= =?us-ascii?Q?2XOwnfPnRdKJdU8XFgePRbXqD5XDn1uQJePduk/QAwG7vxtz35lb5K0k/Ls0?= =?us-ascii?Q?dVKeo4TDI+3tAWyH58XIdxm2mqaFc09AkvY2vRTdCDhEVD7Bp6mE6xz5fjeO?= =?us-ascii?Q?PsDM5niUzPvZxMmnwmqKLUyGIBnixoJVCIEzHTV34zg3Q7rqivyBsJl48JwV?= =?us-ascii?Q?XYV+IbfGL8OAglxyOgHyI8NfCbOjUvdeZqXsZx5BcOnuDTY3KlJsk/mTo/1g?= =?us-ascii?Q?nOe84Izqp8+kkmoCqasm3uDDB5oez9PFJlPSekFi2HMt0qjTYkryzmKQA/gv?= =?us-ascii?Q?QPMg3FWS1OIBbYR//miGDUfJpFT4Wq17u6MwNMrhM0E5ViPPNFFET/z1Qmql?= =?us-ascii?Q?WN/Uikqm0gJCpCEWRwag9VSaJxGMt0ODU5nkF9JrdFbA9cVZLbqvpuiDgNAq?= =?us-ascii?Q?SLgPs0x8MeEnKt734vHddbZuEcme4K1/qQaH07eFfdoqN0DwLIXW67o8Drhr?= =?us-ascii?Q?M8Fvwn5fSbalMMIpCPVAl1AubrZGbGOOuI788tUvuTEF0r9VAMPYcnu7CV+w?= =?us-ascii?Q?p389VqJ0YcDFo+8NLkRuXnp0lb+UE0Yryv6YCf9/14uTFc9yzbKnGdYS92kC?= =?us-ascii?Q?bTs0DH7/c1R5r6YoC71hxcrBEQWehreLTnZhiZJTGHG7TBjRFfhbCyEKsKjV?= =?us-ascii?Q?qVEYZI6cdKMJaKqWTp3ySQICb0GQaKZRNkXcm8/34ThUhfPNlufTuJpJaDD6?= =?us-ascii?Q?tmv9kVbgA6JPVOLOhTZVTmhD/tRyXo3OmuFtD65U15LtTRq3AUooJPurA+g/?= =?us-ascii?Q?S2fOVJskRWdBKm/JyLo+x0sOv3ZH22/tcQyLnT7u6tYCUQphty0QisGLRZaG?= =?us-ascii?Q?W5d0TMtY9Iwdmrm1xKQ=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)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?iQSBjuEI7/+RaLCwlwRGLCbOR6sMDqzHHl6qG2eQLUlgKNVLYCiccl4IZsUv?= =?us-ascii?Q?VZSeDi6ksh2fI+Xu4QhjZPitmXYdUYIATNZA4oPO/1QW8ryq5rlBYOZHh7Az?= =?us-ascii?Q?jSi3swOPNKqsy6Zqrrz3htGDRCQkcCrXttUqGxwCJP1wZLYCkzFWdt7FKkj9?= =?us-ascii?Q?XRlXzUq6yTOlyiqPULVNVRu4iXz/j38eI6yaeWnEaCz3aGWOTH4pQciJpJGj?= =?us-ascii?Q?tM+ABnaUlwHaYWwFVx0aP0X74+EDiTkx3TsDAdP1AZCg43R4fEfjkaoYTmSY?= =?us-ascii?Q?IafZaA6A7gzjLhNn9N6eQM/qXD4L69BLzMHZpd87dM0LQ2oJA30vruR/8aNj?= =?us-ascii?Q?C0zySasmvV1sMBlHpN/SnCabv8KunsjOebLQNhbps6t7Ta5Icx9n3PRJPwRL?= =?us-ascii?Q?VyBtLVLnv4Pq8AL+08caT7KANysdlgQXp72EUSFfYeCzLOlsut1MENEXhTMD?= =?us-ascii?Q?3caBIgDcZIPTVgwHtW89e3t1l+euWsgGkdlF+sisO97FkVOWB85d2186hYOH?= =?us-ascii?Q?ixYRZ3cGd9+EuqCcS3oPDQ+uMXEIiJ9PQ2kSxQ6Z2VP6hLQeeUo+qCMCWKB2?= =?us-ascii?Q?QzDRLo6eMpbtN7SPKtW6vDmrsY1MCU74mYiBTeOdHFE38hKzBxzkYe9gO7h+?= =?us-ascii?Q?fN7QqXF0L7/EO6yUoEDbjaJrr3WCiJsTZ6FExw/26ZacM127GrSUdw7UQ8F6?= =?us-ascii?Q?bjjBVUudrIMgJ1txtad/tK01GDpL7vtj8KbtAlNXeoo2j0qfP9sO49QiJxZp?= =?us-ascii?Q?H2S2ZKz1hd072FiYZV4vQdsH11ZNCyPZkANl+2jVQXg9USUOSsvSVlB7oYTM?= =?us-ascii?Q?JLn9959nfjDgcytD9ceYP46tQF1CfyP20jh3c5khBSNrMzgyuEAzRCgENk3K?= =?us-ascii?Q?rApN6TtnN0Zf8RmMUrgQuJh+Nqw7Kjg1dgw/3MvQ01npIGvGer2OS/uC+yvv?= =?us-ascii?Q?nN9k2r1/LX0WcxLJtUv0ARSs680iFg3gXDQM2Lqf15CK3cCvH8YhRf+cAvT0?= =?us-ascii?Q?M7kdT8PfHkB9GWhzOiNwVyDDAWlkm5AcXSJj6H87IUy9t6wQZq3GnjnmPeej?= =?us-ascii?Q?UeOE5n+rrKNK3HjicYVyvKVVRz/JfjFe4ayYZ8EvQe4mXEUaaff8xAglb7wy?= =?us-ascii?Q?jvCqnSP6Lo9mS1ctDi4d2fnjuiHDXXxroYpMnYoRKQ1a0oD5EXc41XUZkr+K?= =?us-ascii?Q?GrVFwOjB4aev45bk74iEsDndBbCpbS03tH+Wp3VQzAtTAkIllnuD8SDmbhNh?= =?us-ascii?Q?0LlE8PMa2ONfbvdoxe/wPcE6ft76HVqgvNt80ToJbhuLPtC+80v9yddzUJMr?= =?us-ascii?Q?8bTE+uAQsAsqzAcdBLLYwDfY2BOP0lbpQ/16XCaN2WkOsldTb0gSRgW8k7MB?= =?us-ascii?Q?QtslEMFJSJgwMhCCTVlUg8qYwmx9eV36qs4R9oPpoOvAXGe4lPMk6lcn8czk?= =?us-ascii?Q?uBlzE1lCSyPaCwmnw3La3vFBkjREkjRmh1UGvAwCtmqOQc9iHSWQDrIfwn7P?= =?us-ascii?Q?gsR4HzNFnqGLitaWfAyBzMVcPSEVQIIxjaG71rFmBc/779BWEtsKxz/EeA2Q?= =?us-ascii?Q?59kLl+igunf8C7RXw8Yt91v26yqxpEkoX1y1UrgC5lgP5GHRJpmzfCo2z7uX?= =?us-ascii?Q?AAJP0HWNWHUI7xDagkSorBVV3pO8mAazwiPnPGJ64/x7zNPpnmPItOKuaMlC?= =?us-ascii?Q?VHob/gmWkrXoDpC2LalSOKmyP2Qhi1OA95x3SfkA8IBEf86RIaG3Y3wuCVki?= =?us-ascii?Q?26LFFjexDQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f73ca7ac-c1ff-4c78-3ed6-08de70ee5e67 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:22.6642 (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: fFda1+//uBzWis1gPEmBINIadi5Bjld7bx/fUMRSzS34am8iExRIzvhranO3XkKtlxtP6UZBJWTu7o5GRp3wJw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 Content-Type: text/plain; charset="utf-8" Add the MCTP (Management Component Transport Protocol) and NVDM (NVIDIA Device Management) wire-format types used for communication between the kernel driver and GPU firmware processors. This includes typed MCTP transport headers, NVDM message headers, and NVDM message type identifiers. Both the FSP boot path and the upcoming GSP RPC message queue share this protocol layer. Cc: Joel Fernandes Signed-off-by: John Hubbard --- drivers/gpu/nova-core/mctp.rs | 107 +++++++++++++++++++++++++++++ drivers/gpu/nova-core/nova_core.rs | 1 + 2 files changed, 108 insertions(+) create mode 100644 drivers/gpu/nova-core/mctp.rs diff --git a/drivers/gpu/nova-core/mctp.rs b/drivers/gpu/nova-core/mctp.rs new file mode 100644 index 000000000000..0dafc31b230c --- /dev/null +++ b/drivers/gpu/nova-core/mctp.rs @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! MCTP/NVDM protocol types for NVIDIA GPU firmware communication. +//! +//! MCTP (Management Component Transport Protocol) carries NVDM (NVIDIA +//! Device Management) messages between the kernel driver and GPU firmware +//! processors such as FSP and GSP. + +#![expect(dead_code)] + +/// NVDM message type identifiers carried over MCTP. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(u32)] +pub(crate) enum NvdmType { + /// Chain of Trust boot message. + Cot =3D 0x14, + /// FSP command response. + FspResponse =3D 0x15, +} + +/// MCTP transport header for NVIDIA firmware messages. +/// +/// Bit layout: `[31] SOM | [30] EOM | [29:28] SEQ | [23:16] SEID`. +#[derive(Debug, Clone, Copy)] +pub(crate) struct MctpHeader(u32); + +impl MctpHeader { + const SOM_SHIFT: u32 =3D 31; + const EOM_SHIFT: u32 =3D 30; + + /// Build a single-packet MCTP header (SOM=3D1, EOM=3D1, SEQ=3D0, SEID= =3D0). + pub(crate) const fn single_packet() -> Self { + Self((1 << Self::SOM_SHIFT) | (1 << Self::EOM_SHIFT)) + } + + /// Return the raw packed u32. + pub(crate) const fn raw(self) -> u32 { + self.0 + } + + /// Check if this is a complete single-packet message (SOM=3D1 and EOM= =3D1). + pub(crate) const fn is_single_packet(self) -> bool { + let som =3D (self.0 >> Self::SOM_SHIFT) & 1; + let eom =3D (self.0 >> Self::EOM_SHIFT) & 1; + som =3D=3D 1 && eom =3D=3D 1 + } +} + +impl From for MctpHeader { + fn from(raw: u32) -> Self { + Self(raw) + } +} + +/// MCTP message type for PCI vendor-defined messages. +const MSG_TYPE_VENDOR_PCI: u32 =3D 0x7e; + +/// NVIDIA PCI vendor ID. +const VENDOR_ID_NV: u32 =3D 0x10de; + +/// NVIDIA Vendor-Defined Message (NVDM) header over MCTP. +/// +/// Bit layout: `[6:0] msg_type | [23:8] vendor_id | [31:24] nvdm_type`. +#[derive(Debug, Clone, Copy)] +pub(crate) struct NvdmHeader(u32); + +impl NvdmHeader { + const MSG_TYPE_MASK: u32 =3D 0x7f; + const VENDOR_ID_SHIFT: u32 =3D 8; + const VENDOR_ID_MASK: u32 =3D 0xffff; + const TYPE_SHIFT: u32 =3D 24; + const TYPE_MASK: u32 =3D 0xff; + + /// Build an NVDM header for the given message type. + pub(crate) const fn new(nvdm_type: NvdmType) -> Self { + Self( + MSG_TYPE_VENDOR_PCI + | (VENDOR_ID_NV << Self::VENDOR_ID_SHIFT) + | ((nvdm_type as u32) << Self::TYPE_SHIFT), + ) + } + + /// Return the raw packed u32. + pub(crate) const fn raw(self) -> u32 { + self.0 + } + + /// Extract the NVDM type field as a raw value. + pub(crate) const fn nvdm_type_raw(self) -> u32 { + (self.0 >> Self::TYPE_SHIFT) & Self::TYPE_MASK + } + + /// Validate this header against the expected NVIDIA NVDM format and t= ype. + pub(crate) const fn validate(self, expected_type: NvdmType) -> bool { + let msg_type =3D self.0 & Self::MSG_TYPE_MASK; + let vendor_id =3D (self.0 >> Self::VENDOR_ID_SHIFT) & Self::VENDOR= _ID_MASK; + msg_type =3D=3D MSG_TYPE_VENDOR_PCI + && vendor_id =3D=3D VENDOR_ID_NV + && self.nvdm_type_raw() =3D=3D expected_type as u32 + } +} + +impl From for NvdmHeader { + fn from(raw: u32) -> Self { + Self(raw) + } +} diff --git a/drivers/gpu/nova-core/nova_core.rs b/drivers/gpu/nova-core/nov= a_core.rs index c1121e7c64c5..7350c2069bcc 100644 --- a/drivers/gpu/nova-core/nova_core.rs +++ b/drivers/gpu/nova-core/nova_core.rs @@ -13,6 +13,7 @@ mod gfw; mod gpu; mod gsp; +mod mctp; mod num; mod regs; mod sbuffer; --=20 2.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013016.outbound.protection.outlook.com [40.93.201.16]) (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 33CF73321A6; Sat, 21 Feb 2026 02:11:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639874; cv=fail; b=cASAmRjSphx5AdKvACvGiLxq2aKtkdp/dAVIku8OU2wfJrQ4L7WEinUq6QyaWegCsotNz0AWQNXyX2QWupGUSTO0hmLcHoaarabJTBE7tZs0uVKOFXqxSxQN2EdKZ36TJ2suwbltjCIybvuTI/MmXaBMWBWQyOss95qWtW2YC20= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639874; c=relaxed/simple; bh=97njuFxrYjeXPycqlr800KK9Y48zgmQo5u/q4RH5yzQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=OHmwKcaCW9DTG8tqiBjFH9UX3nGBCR01f+uiriWxSGMTR3hksnnmyQQWaoNfmSFw/7n/rADQvsagJLzYAc24A+zJvO3kijs+8ITGweHoVHiaqSrcPXs2LKrr3owRga8CgHkjUh6HoVZPaeK7yK0wXLc3+ln65vjccFlrw9IPLZw= 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=BbyyjUCr; arc=fail smtp.client-ip=40.93.201.16 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="BbyyjUCr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=m3fdFvcS+QiN9j/46GAdvbtJMzz8gXSxNGpoiRiflcWopdT+L/kPP1Ys5ZNC1sUWq9DPfDs2IrHth+8JFqjByHl/oyXArpJllr/D75FtBr/P5SxZ4YUUG3ZvmZGT6+6+rU4JqJSBYunaTp1G1nyOuAEZ///BCtQWsxJYlCx4lt8G5tp1BqSefJWpONgCnYFBG4fNWrEB6TXWaF04p2/cUlv0k2ZGc3F+pgCLJa/DvybJJaZoOrImVGFVze0shMFpv8eaQFvmD6Yj9/flmgAyOz0i13xZCOTATrEBewMQfox3gI1AzULDTqG2L3Sy9ealcJqBvUM2d6fmnT4rFrRdGQ== 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=MOUSLABF27Y9lwvmzx1QOKVDvWBmFY37Y+DmDVCqAJo=; b=SgtUoXxhQz4tn+F9fwcdZJ4xMvE2MeEKteTlm1a9iJaqGkdha+yYsLAuUkRX2mVV1YDFeza/7+qRXOrwh9NVcDZL8bZ6mE890MlKGJ7l1FTJdVSK/MDMinrcwaIzF0+47WPdeCwNSkPCyyU64RLAUr+X3yV5XfevIX0QDJCP6d1DUEYlqLj4u+2ihXmrdz/2eq9mFBaBBXLTD12gdsIEDEFyEaK/cw9tYfW6DfbSkmYrn/UuyTDsucchDkojGlGF8JnbymoRHklD6dmGRaPLxEHwF++sQ0D3YhQkLGzOXRLxwrC2X9sFg1sFmg1l3kLCownKu408RsbuPbOxwinrlA== 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=MOUSLABF27Y9lwvmzx1QOKVDvWBmFY37Y+DmDVCqAJo=; b=BbyyjUCrhrsslVIHnbheU5ZxnE9BbASig1drontR2NS3ON959Bq4Bb3Bo3M10jT0quK69lUbgwmzk0+LNF7ecb14qQJOU7vzZHf82MMasjHhco3ulvi25/A0/HWPkUsPJE5VufHtGEfUx18ElsMNzNMIm55uUdIa4GwxY/cCWmyIp8jmeDY/AXkprIwnYWkjIommWPO8NkFnOTYRQFxlGgTRnpRT8RntYyoRF9a0RZnG943PzlgLbEUdNov3102PKgeTtM9ujBytLxXG1LcbgAxf74v3XBl/NQSXxZq86Kwz2XfsnWMHIxDKihuUzicqgdnrBdE/oKGKf+gii++JLg== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:10: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.9632.017; Sat, 21 Feb 2026 02:10:23 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 24/38] gpu: nova-core: Hopper/Blackwell: add FSP secure boot completion waiting Date: Fri, 20 Feb 2026 18:09:38 -0800 Message-ID: <20260221020952.412352-25-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY3PR05CA0049.namprd05.prod.outlook.com (2603:10b6:a03:39b::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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: 994850cd-af3e-4a33-4814-08de70ee5f55 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?0oXit/ABlGQEq3rBhRFAiayXLEjeYM3xu5agcX+yMx4XOhulMu3/HSKTtTCR?= =?us-ascii?Q?xlWdavfk1UuJ/WDc2eVtHKgIu+s2yu6krv+ZFr9ui54vgDBPivqjhij+ZuX0?= =?us-ascii?Q?vOktybhEYmZLGf6ToFy5H5pnS5olZCi7SKpBdoYN7mKoHnWHsqacgOSYE5VK?= =?us-ascii?Q?YA7HD9x1ow7BePMZyokDS0A9tkziz0wLpEGDwrOe3JNyKYygP2AZGMVT7gFJ?= =?us-ascii?Q?xLS9J04Z3hY4lhrH9kDwuAL1zKHACxzwW06D6K0MZ+6o02N6K718tPN+QzSo?= =?us-ascii?Q?175PlRDhB7sHTvI25Ey4XjJKan/PXxa/lWXcV6Kyezy0r5KYFW98v+Ka3KQc?= =?us-ascii?Q?dIMJd0vYAcXTE1FLsTjZ3m/a5xIugDiHcoc0RJFILaJp0c4eCwsKvPEL+7Gf?= =?us-ascii?Q?5D0u2p19yIIbm2UOaDGAvA5d9V5UhS4iA2hjO+bFtF9SR5VWl1oqmuByW+lD?= =?us-ascii?Q?vM+tMdCBSqwpFfaq0Us76S3IwFnygYroPl5Olp6hmPtz5xjueOQAAuYbL+Z9?= =?us-ascii?Q?SvSdxlOKvqqetnYPObhryp1yyzBolK2QCT/OD7K63FrIrGKfgVtpJ4G5uJD/?= =?us-ascii?Q?0czcSQqfXOmgmz+9Jleqgt41OMmUZHFQIIUwXNoYHNBjoNa72UD3OOYfWxFe?= =?us-ascii?Q?Pxw0qHfJ7oyUGxLnMhDmPY6UyHekJH32pBOVt9BOpAAqoYpwdM72OEtoUQI5?= =?us-ascii?Q?AlgzyH+lE7X5+f6rjCa+Bvp07D+TC+3eqbOYf0YskV3zPxOx2AgFRxVIr428?= =?us-ascii?Q?3fPF/K0WnnloWpDFHDu6kxyrr7ZIsL6cuKonXQn6nXD9vRzKPnphNjp0BMED?= =?us-ascii?Q?GdFW5eAeFV975MmEQmnS5jagCY79up2GVUsQvexlidPop5qzBuZQxyaKYZjw?= =?us-ascii?Q?JERa/DHezfEnNq5AucoYoPYlFGXS6lDkNzUi5/b0pybDZDOVn5sKicU7WBUb?= =?us-ascii?Q?6zvsuvqHnWRfMvRp7+oR0W2W7rl/AixcYcTwthwPcHu8g2z1TK4kJUtyFls8?= =?us-ascii?Q?7umAKTqJN/4pmFMEwgiT1bdPWJWc33dpWh3EcjJ27Nq/n5Z2poIupjKNCR8n?= =?us-ascii?Q?KYJlv/uG9pf6/Tpqj9kq3IaKTfEuYrqc+NVBFWyQHjnVPW5oDLBftru6gF7+?= =?us-ascii?Q?vbGWgyDg7ZPYxVJuPB8PnzbKmVY2oTxGn7pWVQcVnPWiKSRw7s8PU9gogcOe?= =?us-ascii?Q?KIrKy5gO+eMtLUJxnUEvfS7XyrCJ/mdsY5/9/KANaqVxcDHXItGASmLN73f+?= =?us-ascii?Q?uuKeSnix2DuyJ9naTTP3gR74GACUmJvicD9CM+vagj/6nWQ8dD7rqbdk9i6J?= =?us-ascii?Q?+2utBI0GY/2t0c8nn2eEQOCuNs3H4NYpSEY2s7XG+GS1rqNQloT8koNBFu5+?= =?us-ascii?Q?zuyQOUyKHMvzRKk47xHpDrLxerf10vpwXVrGg6nprxQ/3qFj83CRinrIC0Kp?= =?us-ascii?Q?ZBp2dJWKK+Zw4+ovzf39fVG+ZfGLOws1DdcuRwdj3hyQAFu5iRqiYtOt33mY?= =?us-ascii?Q?UNs4knLc0DYRfzOybCci4TWpFpaLr3/59oZTE7MaDXeLAvRqp0cp90RPTBki?= =?us-ascii?Q?K1eYVniaDTM7ATOO2oU=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)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?+hnjhFZoO9Zs0dWKsgw3kQZ0pqMIf/FG/41OqXf6QnxYMENqX5siitRoICr3?= =?us-ascii?Q?90SQZs9YuGJ9x5BkzELd8Bv96jJwckxr7Va/FpzL/AybKJyeNtFyOW69rhmo?= =?us-ascii?Q?q92GmXuPG0cE91HQP0e3M1pRJTOawVJmPiOStsy2ezm6POZwxULw8yvtSBfm?= =?us-ascii?Q?tTK8xXTE9ELdOlBDgqBw8puTwBrnoo+WsHRTG/4IHDjQg6HAZK+EAYo+omol?= =?us-ascii?Q?6DBKDUem/e8VrkhLw5OSz1XAwDNjzj6mlvWSiIMaxoR7VtT7EH70i9tFUbZ/?= =?us-ascii?Q?6ampaO7QpkcCXOYJ/WN5TJqn+ti+onxTXHV2Hv2wPvdtZyvVj02/G+vmLqW/?= =?us-ascii?Q?TT57rMxpJ93zm/b5f5loSS5wnawcxha4TLTFRJf+6ZrTG+XdsUnicOuRezYA?= =?us-ascii?Q?QlkDnxxGsxCozhqOe06rNLJ4nbnbznh2NOMkZEKeS4LFzbtjKVIK16KWqk82?= =?us-ascii?Q?3nJ4YuOnArmtKKeZLtPQmm04npZR7jhAFA9f/Of8iODs+Qyu9VOi2tze/72l?= =?us-ascii?Q?2xMLHDFav3LqP69VNVJyb7FAkaNoc0b1t/D0Aiw0qbZ3gdCe8NdkW3cS+R/C?= =?us-ascii?Q?orT2INr1flkg6DeYW6LcqiQXKzLf21P7zhOBBFbf+2C5tIudgZeTg2uUMJYc?= =?us-ascii?Q?ap3RyOs6yQHjpE1PVpU1KsE6a1tgh6RqOiqpzj+ZO8YzLXDJNyHVPhuvjLb1?= =?us-ascii?Q?HJE7u3LBYCB9/XgGNF/uRH4FTjIz2/A3DYVHmxmPSB1qRBk15w6v6FjluOQ4?= =?us-ascii?Q?T/l7vyyaeclUq/EdC6C71eRieJeUDSdC4S/Ag1HpsabuTDnQry3pAEY1NJEY?= =?us-ascii?Q?VR3V/fTX8RzafnJOJsLsciNRm51XBwKd9fS33kZtNYAQEN6jnZs4yyPrBpoA?= =?us-ascii?Q?oC6G/23idx2P9hxykVf1mblKzTOAGRZJaBtrQbgVRoQKr8IahbkT9E9dbRal?= =?us-ascii?Q?naDMX0nhfCA9fQ1fVuXlTxd23UwNS7urYbkzUvVxPjdralFc4zBRnV4TFRXV?= =?us-ascii?Q?VOu9Sfv2EB3H5/ykG2vQytth7s79Omt1A44ZzlczgpE++PmknjLoxsXXbaVG?= =?us-ascii?Q?2xyqNrl2Qiswp0kHLnCkcw0KEnHQtGaWXS0HnC4h6AF9RRWr43HgESThNsr5?= =?us-ascii?Q?wVnJvRxDVH4VBIXx9poWUYtMUqodVHCxE8OYGcbe8qXz7D/BsQWHj0hVmVbG?= =?us-ascii?Q?5KbNneVQqRaQJMAyQjvTDJjzEpmiaB+WeNi8VBBEz8VRPvnNQkO0boUsa+V+?= =?us-ascii?Q?FXDsJXhnrKTUCSwryjbtDHZFjq3+T1yh0+zPNdlOp+WMt1c+smoEnThRY6Nu?= =?us-ascii?Q?6nPgvQiEcYPDf4TGZiBL965z/IBOyYR+wvCd91TTfN80/Uzbq6Uf/SMqHrjZ?= =?us-ascii?Q?qiPkbRrtx38GIzhQK99ttxSen80uBosvGMk6PgtIRXqtcsy+fpqubBq5RCB5?= =?us-ascii?Q?PTSuoKHvpkeigvicLMedugHpcUStpUA6FBQ3MbEtZrEtTNlMA8Ns4oy1NcjW?= =?us-ascii?Q?yLFMA2iNSYgwuzlYIjwzwlkmDZhxA5bJRIFWL4cNp6BbR77MLvhMFSQC6Va/?= =?us-ascii?Q?mmR7I3a8vIwIBcNnQyMxn/ratCbndQ8qy72Bf1aoo4P5mygFOQ6f82g+ss8q?= =?us-ascii?Q?WZmqORC/Hv6paX2nZMVmo2BoPblUilgGOT5Hti4BrqSrLuaFE6a0hKZp87/p?= =?us-ascii?Q?oXHgBHeZJHv9QtPaCpwSHYBQEm8IU8RdIBgnsDy7xe8LvOGgQ671d7vT9YRL?= =?us-ascii?Q?1xSfxx2ZMQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 994850cd-af3e-4a33-4814-08de70ee5f55 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:23.8308 (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: jOLVkqnrtgah1L/JGdiUXPLpzrIvlgyA00vEDugqzq/VY5IxLduINEa6XpnQNa8qI0bmYFSE0XZ/Oofj7YFptA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 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 | 141 +++++++++++++++++++++++++++++ drivers/gpu/nova-core/nova_core.rs | 1 + drivers/gpu/nova-core/regs.rs | 12 +-- 3 files changed, 148 insertions(+), 6 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..d464ad325881 --- /dev/null +++ b/drivers/gpu/nova-core/fsp.rs @@ -0,0 +1,141 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! 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 secure boot completion timeout in milliseconds. +const FSP_SECURE_BOOT_TIMEOUT_MS: i64 =3D 4000; + +/// 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-R= M. + 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 passed to FSP. +#[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. + #[expect(dead_code)] + pub(crate) fn wait_secure_boot( + dev: &device::Device, + bar: &crate::driver::Bar0, + arch: crate::gpu::Architecture, + ) -> Result { + debug_assert!( + regs::read_fsp_boot_complete_status(bar, arch).is_some(), + "wait_secure_boot called on non-FSP architecture" + ); + + let timeout =3D Delta::from_millis(FSP_SECURE_BOOT_TIMEOUT_MS); + + read_poll_timeout( + || regs::read_fsp_boot_complete_status(bar, arch).ok_or(ENOTSU= PP), + |&status| status =3D=3D regs::FSP_BOOT_COMPLETE_SUCCESS, + Delta::from_millis(10), + timeout, + ) + .map_err(|_| { + dev_err!(dev, "FSP secure boot completion timeout\n"); + ETIMEDOUT + }) + .map(|_| ()) + } +} diff --git a/drivers/gpu/nova-core/nova_core.rs b/drivers/gpu/nova-core/nov= a_core.rs index 7350c2069bcc..3b2109ebe9b6 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 35639ea32e55..77d590887ee7 100644 --- a/drivers/gpu/nova-core/regs.rs +++ b/drivers/gpu/nova-core/regs.rs @@ -478,17 +478,17 @@ pub(crate) fn fsp_thermal_scratch_reg_addr(arch: Arch= itecture) -> 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)] +/// Read FSP boot completion status from the architecture-specific thermal= scratch register. +/// +/// Returns `None` if the architecture does not have an FSP. 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)) +) -> Option { + let addr =3D fsp_thermal_scratch_reg_addr(arch).ok()?; + Some(bar.read32(addr)) } =20 // The modules below provide registers that are not identical on all suppo= rted chips. They should --=20 2.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013016.outbound.protection.outlook.com [40.93.201.16]) (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 6479D32D0C2; Sat, 21 Feb 2026 02:11:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639872; cv=fail; b=HGaXP0AXSbN0ED8ZcHZ7yDymvDnuPKCrYaTzVw3+qTOiSHYD5f3ib7b7Jt+bT2ypv0uigskHN3qbTpy4piQnfzxHJi95ROw8tZAJnhTBUPpZNUq9Z6Q92OQOjff8dWiman0oFF2TJyBLzwLvk8oBpXM69JjL6H9TH1c66D9B7Es= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639872; c=relaxed/simple; bh=SCLWtA4uWS1bv3+aPT+SsaQedufnv93axFuETrz318A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=R0TTf2ZUTB9Pd5BKDKGQ3eICu/ydAH8vOY6hI/WoU5XU+vvxdysZ2ZZW63nHb7gXoPc3hmNn7+eYSgAfn7hKDU+R+2jjgcDEgc882BDtOeytdcwJxnP2ifyArndAiAYIAnzJweS1i0vKk13Fsq73/nazmcTNAD5fOew+gjncjAE= 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=Ojv7Up0Z; arc=fail smtp.client-ip=40.93.201.16 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="Ojv7Up0Z" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Sop8BlugKN0nGpotV59FfxgOgHQcOGT6F4VRN8uURxOQ87NGnUBew1mfvsm2SYnc5GpcWIn96P/yqEGYJ/UYhHAt5/vWYB4NEurIqb3UiZOcSXRbB3y753VXFM6lY23t672dhUZ5LL3TsvIjxk4ahh5YvjyWP6KRL3tNK8avEWKlKeYLKDyXgCDKVUS/UWuphCLt1hzACWF+kkieEpOuZAFp0CeXH7Sa0jOW2NjEPpX9FlKuzK4YvfR8OWPN9yRMam+Bhb640Kjt5HD2nbx+Pnntmrsrp4mrb0LMHIRxL2hVthph/L1JtyvCiwlnGwL7NI5UYEMJn9loF8pavypAXg== 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=4HSkX6JkhjjOE7N0j2Q+7hz3jUrLNURhamo0wmlKil8=; b=GFYlKyyuMUuayVrZj4QJoLmwPYZeshXdFVuviB2nc2GqmBxm8NPLqcQQiTPcDWVMStWjOq86/Q15yVWgm3kPz+GfTdgxMDYqcPwXGIrQnH0AhXtA31LL1f/dsxjOMxMx1cJR2ZaQDjtXo6jfyTZS6k7Wo+QuNraYnm8k44cGwEdooQyoBNMJFpyhv8JTI13LjtqXJpnTA0Sk+xinWYz+NoprE8C2oxYArssRLXhX7o774fuZI2uhsH1ktow47Pyvm/sj9+8nLHU5txQ1bEGfqb7vnGYYUL35NkKdfa6lQa8Sk39IMynG/8USVcQV/eowSQUh1noWRFKE2UNx82gXHg== 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=4HSkX6JkhjjOE7N0j2Q+7hz3jUrLNURhamo0wmlKil8=; b=Ojv7Up0Z4iLyxyHQy0XoI2KszxaPVNaTFT04Y+luOxKmekRaRVrpZjN2+XPIqZVF+0ATj2YeHjQRPlu6i0sUegq0v0KREHyatJyyX4K4nKmi2AOd+zKLrsWseTFMseQfeJ73lySNMqsec2vukWPaIZ+o+lHn0ECgxDoc9RXaLOqIFs9wTkJJvsrStPP8KC1tOXYK/1z1zAWurci0X7DGw6PkLgpTVInB9ww/VR1JRcql6iw1xxZMtrqbpnqK57HUbWcXk1t9mp0bIvPeqHrcXRYPdTkoku2bdW7hooHOmVwHcUJ8ZYAh/VG+ODXex000j7rj4BSrhcaYSb8TrhhmUw== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:10:25 +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.9632.017; Sat, 21 Feb 2026 02:10:25 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 25/38] gpu: nova-core: Hopper/Blackwell: add FSP message structures Date: Fri, 20 Feb 2026 18:09:39 -0800 Message-ID: <20260221020952.412352-26-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0079.namprd03.prod.outlook.com (2603:10b6:a03:331::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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: fdd0dbb0-e1c3-4ee0-494b-08de70ee600f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016|7142099003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?MJ3qpuqJHLzwmsiUYagx7WuExSljMxK7ZP0vH0Dfu9E30Wg1T/Cy1Bb4JBMV?= =?us-ascii?Q?AwqJxNbVsZSv2GEtoGagj1SqYHIYlD3RksRPm+U5H3uUAzkC7KVvxEtoMAjW?= =?us-ascii?Q?pnoQEm/1nd+29XSDcmQdGwXoTRBVndJhdz64v3Iy9MaZ87fI3jiOsvfPVld2?= =?us-ascii?Q?nMIxnejfb5ygFb/wGkNPZE2DR3kt2bU43Ns01ajxqRbRUuu/rK0BzrH0/Iyz?= =?us-ascii?Q?nGfyj0qwTwyfBwurxt9cTeD2PKIbawUFVF+Bgki6qTXjCuG7ObWTyPQEHVeR?= =?us-ascii?Q?XAlZTyYJcYeoV7GpfBx+aVrbhRiOVCOeaNgCwZLN8veMz64P3oaO1g3TRrR1?= =?us-ascii?Q?R4+4gF6DIpN/yK6gOqmnLzpey+y30kX4UJskiC42a/YQaodcwunz4Q+gu9C5?= =?us-ascii?Q?fygj6+6gyj4uO915kbwolyi0067LH3tIyMuc6trXnHbFOL/z++acwfzVJNfl?= =?us-ascii?Q?k7rQbIPEBDYcuUNpXmL1to6JToNTuuFfJz5Fon1mSKYHykb/P+bGVXdY9vnV?= =?us-ascii?Q?N2grnruz56EYlYdoFw36jMPRVpG8OeFZFGgbmB6rZzvD8XSalpYpD1N2yRRc?= =?us-ascii?Q?tc+Dj0HcMk+SgxXQVKvs+HZcoW/6mmPcW42EhTpfyd2kxRJvdzptQg2n6NxB?= =?us-ascii?Q?/qcTLzuxkv92gaWwTyiKSyniXSN90GbAMZBwGhMPbIaljRGhsOLlg+V+XdeC?= =?us-ascii?Q?TDk9LH5IQ7oOm5H5OkBl1XQVvClCUlisfUozpyxfWmBfUG9lDEaZXfoNtEyK?= =?us-ascii?Q?BdkhB5Si3gx4g7vz3d+wRKZJCCzrnu3TnbVJC2P6vIj5dNYoHL0912vEcjHM?= =?us-ascii?Q?oQv4u1jtME5VNL7svmbB2wOglMBjIMGWumldjIJDzWGwBBOckuhgednhwpPA?= =?us-ascii?Q?jCdM1T9UiLR9HIJUbC7kznUd9gdniq20xz8FHP9QsvH5yKvbxZWGuxe2/ssX?= =?us-ascii?Q?xaa9TYBAofdlCjjvdFxihqMvjfIe/KpZW0CdQRxhZ2wjcseOrpZSd69Lgmip?= =?us-ascii?Q?RzM1GFwxs16TPkRLpp/P2EL5yQSzZiDlHFIYFxEw6wzgxAzlrOQpjOO87X6R?= =?us-ascii?Q?+BiZDRdad25oV1/CnC4Yjf9YuEMrEOqr/8MKd6P1oi2VFPtxMqJDiIhn9czr?= =?us-ascii?Q?kGXYilT3fqp4PsarZXHLetYFCueodAO3NCre2jQEcINgIHwAVsbMayBynn2J?= =?us-ascii?Q?fyyDAVrq7OSu/QqQsCB7xIYTw7EE/31oSXqWBinLhZuS087xtw0GMuo0jWLv?= =?us-ascii?Q?NDwHm1sm5SCEMsj2bINztJq/T0EnGH0wuw0KHqQkTxkp9YanDzlQX2QUYQij?= =?us-ascii?Q?YqYStZ62CAsmxtV5GeAqt8//ByoYcdWLNYCx7ATROwYIDMhlxb5bCruSArP6?= =?us-ascii?Q?qWJCuend07zzt+9PPkvKEj27eju9MI4fYMb8/iWYvKhu2QNAxNdk86WwelkR?= =?us-ascii?Q?UM5xQeJi85gYrxXpuJMfICeV3BBUk5lB9UwHhr09NmvizIlI0b8+WhtV/9tp?= =?us-ascii?Q?zDvC9nxDq7T1NtO29LdFxJ4l9VrqJf+nMeCqfssy5iImbLqYhjuc/GedIMUC?= =?us-ascii?Q?dtfGvgCCWh+XlOapZng=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)(7416014)(1800799024)(366016)(7142099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?NLH3w/oVhrOhbNq2W8cNNwNpwcBgw6Q4DlCOgeB819lrgpCNOYjgZFilWSjI?= =?us-ascii?Q?9epJAW9suE2GRdML8n3xvrXrdUXLgTABkr6XXxuUnp/Jvl75s3EZayDXFudt?= =?us-ascii?Q?+Vzj1amjr4ZpuY0nPAFy6JBXqmHHVcS4opAxiNpjxU2TFluxWD/5Zova/txK?= =?us-ascii?Q?1dS55N5h5eXQvSNMF1DofBmuiJwV+n+oinhOsz/XGieXqIF97cWXBL2VkJ2S?= =?us-ascii?Q?MoNhsDdz5tem52JeayAgxFzQLpVR57ABi9wjvij9iTrd41lSoyheTIq0XCYG?= =?us-ascii?Q?vXGplKP9A7bj+k+lTRASgut5nB61Cbv3s97zzo7GEVeTmGnVW2QHRRzfkxc8?= =?us-ascii?Q?FPnJ6iyP3GxRfOr6ghdXtKV2+SaxWeuYPETAW5MOtwwf+0a+XMJBiZJy+bad?= =?us-ascii?Q?ccgLBAVgw6xOHksHRLW/bgxl4mLezBo8zHEwFnmJGX5IsmaMC47I6//BVPqw?= =?us-ascii?Q?QkQdPnPPlXXr9Bx/1Se0Q6rFUQGRgL2KL2wwynv1fMisd4VIB/Y8uQ5GWc3s?= =?us-ascii?Q?7CDecJBxkjEfNeR9M7UB3geDrd1onJ2QhStd0hQXGnGIipAcgFcjN5tsMTAE?= =?us-ascii?Q?xPy8kvvFPNluo1FabJ4LraT5K4SFYeHMyRV9zkSxPTzl4I9/IkhXGe05ty77?= =?us-ascii?Q?sBE5urRk7YepXvNsNVqtFeXusub9ARF/qUUNY1E1iNryFDyADUbcfhYneyqN?= =?us-ascii?Q?oXVknMQaq2Y61/Q+o/KyXWqCgDDLhKNJULGxrvuCeGP3HqHoEf39k/sjFknf?= =?us-ascii?Q?o27VE84nhGhSnxnWrwT9gbzOeR+q5n5waOmfDsba55wZ+sxafB98RHcTQZVj?= =?us-ascii?Q?fJrKKrE/3KvQ5cZP6oVnBzKO8eHUdWfw9eo3rW4/EDNfzjZgECB0Phv+S5bc?= =?us-ascii?Q?coTp/nQ+B9GLKjwfq/HsSA+rzTpMPXaukDlZoh1HNfCH6NsOK/5BK8Rtxx7L?= =?us-ascii?Q?v60y7woFENRkoxBjROqGs/u3bubyVX2SVYkEwcyvajhe3nfiB/u2D6LWSaoJ?= =?us-ascii?Q?UM0y5/lY749GRQysnEWIiiCP5TmIcubEs0EkH4BlbB16IoNb0MlLw1jqvVbC?= =?us-ascii?Q?fYlw8x4tW25/P6xW/zSKvrNBZTqKqIwud+nwjWq5xpLSPpsnGoWAYrs0WCMS?= =?us-ascii?Q?Y3U9HP7CZ/dfmpGlIFttDPZeGbDAwm7Age+yz0yXPjZ7A8LM+SkYjocYzIqP?= =?us-ascii?Q?BZEdYAblqWx0egx6TatXi8ZHGmYLXYprLZ2BoZWDMs+ybTfQxGb6pCGcjjyz?= =?us-ascii?Q?ibg3IY0dPXIwxQvlUYOBrIUNFZNmKdzwII213Y4h9sy7DHvBaoxVF+IFZhvH?= =?us-ascii?Q?Bv7MwIOECFP/IRt9wFB+g8ySlwUtdIH5zhgyGUi1VGJXWY/zHowUBCKOBJNM?= =?us-ascii?Q?l9Yy2zsHvKCSqi0nPBuiDW8rAzeMjsCrvrFRjNifDQuqCat9SMFfq7TvpF2l?= =?us-ascii?Q?Zzl2VRm444ZGUSjdaFTW9kMI277BUxPQFskHopGr+1ZAd+btvXUcTSgzggDN?= =?us-ascii?Q?0djLzDjjFi7NXZl9SEQBWXxHhixQctqngJdR8CcNdU1dNMEwmcQqzn1UY3tw?= =?us-ascii?Q?aPmBOV+BX6jqcsbdnHxR8GHnB5QSPYfO/uBkRay36xMQcE4duE80IZbA6NNM?= =?us-ascii?Q?5eRgavM7UX/UngGBjB3UE1RYE46NE6/mErZOygdm81aI7gz9+PFtiL/lsm/w?= =?us-ascii?Q?stdZv/tZ3E7PI5Tg7elzrS8G0PMkbwc7W1V0+rm6rq5166gYsEqn/qPWQyF1?= =?us-ascii?Q?QOnsLW7bPA=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: fdd0dbb0-e1c3-4ee0-494b-08de70ee600f X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:25.0851 (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: pQJdotdEWK6BE6jk1P3a9JMkfRvwFSJRqVscid23fsea7zENmF7vuAw43vA1YyWYQEEFnlJowwo6GrGWlmEPew== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 Content-Type: text/plain; charset="utf-8" Add the NVDM COT payload, FSP message, and FSP response structures needed for FSP Chain of Trust communication. Also add FmcSignatures to hold the hash, public key, and signature extracted from FMC firmware. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/firmware.rs | 5 +- drivers/gpu/nova-core/fsp.rs | 78 +++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/nova-core/firmware.rs b/drivers/gpu/nova-core/firm= ware.rs index 396f96716d6b..823d2232081e 100644 --- a/drivers/gpu/nova-core/firmware.rs +++ b/drivers/gpu/nova-core/firmware.rs @@ -27,6 +27,9 @@ }, }; =20 +#[expect(unused)] +pub(crate) use elf::elf_section; + pub(crate) mod booter; pub(crate) mod fsp; pub(crate) mod fwsec; @@ -607,7 +610,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 d464ad325881..15731d24d0c5 100644 --- a/drivers/gpu/nova-core/fsp.rs +++ b/drivers/gpu/nova-core/fsp.rs @@ -105,6 +105,84 @@ 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 (Hopper/Blackwell). +const FSP_HASH_SIZE: usize =3D 48; // SHA-384 hash +const FSP_PKEY_SIZE: usize =3D 384; // RSA-3072 public key +const FSP_SIG_SIZE: usize =3D 384; // RSA-3072 signature + +/// Structure to hold FMC signatures. +#[derive(Debug, Clone, Copy)] +#[expect(dead_code)] +pub(crate) struct FmcSignatures { + hash384: [u8; FSP_HASH_SIZE], + public_key: [u8; FSP_PKEY_SIZE], + signature: [u8; FSP_SIG_SIZE], +} + +impl Default for FmcSignatures { + fn default() -> Self { + Self { + hash384: [0u8; FSP_HASH_SIZE], + public_key: [0u8; FSP_PKEY_SIZE], + signature: [0u8; FSP_SIG_SIZE], + } + } +} + +/// 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, + size: u16, + gsp_fmc_sysmem_offset: u64, + frts_sysmem_offset: u64, + frts_sysmem_size: u32, + frts_vidmem_offset: u64, + frts_vidmem_size: u32, + hash384: [u8; FSP_HASH_SIZE], + public_key: [u8; FSP_PKEY_SIZE], + signature: [u8; FSP_SIG_SIZE], + gsp_boot_args_sysmem_offset: u64, +} + +/// Complete FSP message structure with MCTP and NVDM headers. +#[repr(C, packed)] +#[derive(Clone, Copy)] +#[expect(dead_code)] +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)] +#[expect(dead_code)] +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.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011050.outbound.protection.outlook.com [52.101.62.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5B05C32573F; Sat, 21 Feb 2026 02:11:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639870; cv=fail; b=lkQZJ2fw7VGAR25q5AjUHIsoq6pjOLm73eurqOTBzp1/KDzqfuUsO/HRXnE0NCx7sEYgRMNHSb/DsejpC3wMY713UdWMgBls3qeYxWhEsEYa9pFNBIh/L2ao5mKpjzhsZneYXw/TnSm2tGbuzAXYxlSZuOFRUtEgxsO9GBkA49M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639870; c=relaxed/simple; bh=V4koz3Lywn4qsW0iZ6K5P3lZWxeWOajWjQp9Uuszw4M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=dT+eq0U0PLW29rqT3WQI34CFpvjlwIndz+ejMDee7S9YxB8QUW+7ImID9IXD49VJN8bDLSh7jHhf3x9yZ+Fdw1RX7rBV9gKNvbkJ+dQhyx3qkpVdo9ZGMICvRrZnZgrtWDY/uBbETXYgPusRW9O0sG7A6kkwZF5txdA9FHKrRx8= 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=SW0/ywI1; arc=fail smtp.client-ip=52.101.62.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="SW0/ywI1" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VyVI4OACqyaY+0EFQXUpWnd9bMGNwxmQfja4Zfz6/f6FLNii2a3LH3jh9nm1HWg4If/8+LXc6yA7cVsWQnLa697O4VO2NQjCj8Q2ESCT//Mq1Na7gmtDS09pjjQrlwsiIjvCmBSlS9scCL9ddlGBA/SqH5Q1PYj9R7d1Pz2L8R/9dxacQeHGZYj1KKUjqK0ynMSjXqW69vphVP964C/jRxF147GSaGCyuGwCQwYgoLWwtt5pQQgxppmmkzXPeNDvDX3Te++S589EKXcIGr5vyMqRAk7uKNMtxDi7SMjCRAbaMuRw2kXjvZx1EFXsMUy0cK6jS2lHeIXSxY/wcjWuWA== 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=Stlew29ruY0iMYXkA9A7sq0TjjeB6Uuy5BuHxoniCkA=; b=cvme0amz1xoFk/t7vVsloluBVa7ju/ky5v5d48LFcQtLvOQlewXAq3OlxHBp58ycz7F1/4UceV3Olz+cUJjmU5NJCDYMCk6TTxmU49p9he9wl1xXx+D0+ujgU23foOehF1bPWxzHzHWNkRNMJBofUbaS1tyIT/U1YijgK954CI4J8T8e+hkOd5X8bcnXM3yYFrXAH29ZtoArp2KUkz2lSvpQfLbxxRHVg6lP6VOnTRtpPXKTQVmNX/DFAp9SDPHop/Drvzvjxgcn29TQE/XT87GBRZD622M6ysg4+wjP1qc9KvwZyae8XEx0xJZtsJ/egZaVnSAjhMVTNLLl1f5+dw== 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=Stlew29ruY0iMYXkA9A7sq0TjjeB6Uuy5BuHxoniCkA=; b=SW0/ywI1j34HVtB8zaTufl73E9m8CWas6sv5Em/EDaw6iDosPrsCl4ZBjhQIunxPXCRqGzFvjLhSG0KGT6YwHPXEJrqIdClDeg19tsEeWSf3k7uzp155LaV47kyOi45/L9ylkE6oqQ7WL6V/kHaVMjugH8XQbffQB6N0SbpKFIsopqziP6MSjyOwO1svbmNtKG1DBKi+Z2SICp/8ujxGcI8UCnpfrWwz99H1WZ7AyWKzkGEbXP33SbNqVMTZ3VC8h+xIoZzYec1jQYzYB09d3KadHzWnWMb+dMFuKeQKTnoqHFU/yYbTvcDZCkYxEnFlHEN+p4ytBLhG23X6dOrsuQ== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:10: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.9632.017; Sat, 21 Feb 2026 02:10:26 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 26/38] gpu: nova-core: Hopper/Blackwell: add FMC signature extraction Date: Fri, 20 Feb 2026 18:09:40 -0800 Message-ID: <20260221020952.412352-27-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ2PR07CA0008.namprd07.prod.outlook.com (2603:10b6:a03:505::8) 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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: 65d1683d-b98b-4a45-5eec-08de70ee60e4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016|7142099003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?YgtLb2+yxJUoa9hfXcFAv9bL7fDuFA1Wd32ZwD6k9KDMxknU1U5KDEar0I9g?= =?us-ascii?Q?h84nyzWfSPOvcyWow9pYV/Jvse/TzFlBmgJ9If3QDqJnlE/qGt3juELNTrco?= =?us-ascii?Q?SsoN3DscD+7CUMysefGVCoFuFofPWzXz/3l8k1AU5ptF+MMXuYrXEVlILZHK?= =?us-ascii?Q?kfa3/tpssnhUMvrMHvP7BAAAZXvv0UTGUtfLxWjNDn1Whga3rSF7AobvoHQw?= =?us-ascii?Q?jrt6geczWpdvKqM+c26o1EOpYrrslVRehi679OHl/uED/dbDr5nbK6Weh9jR?= =?us-ascii?Q?dJ/RyeQWJpF0buw7P14r81lKaYGsE3+QsFueMFrnNSyt4hA2oW7M5dqjHjAO?= =?us-ascii?Q?sX4dUV37Xp4WgOZAzjFweEPoewAUw51IBkw3RkbPUEE/rEiN/7jsT39mOYVz?= =?us-ascii?Q?vjM+rMwSJbdBnXYnqWw3Pockle1tBxFO1tApYhUsl+503bzKRyvqNcG4iXRA?= =?us-ascii?Q?oUkuF6Y4mzTeIGXD8Sv4OfQrARhIsHdc3+btL/XEm3AyyCa4VTavkJJinrn9?= =?us-ascii?Q?me40FQigFoJUqh2qsoUyjiLEO7SMWxHP/8us6EZewOurR1edbTUx5Zmn7XA5?= =?us-ascii?Q?T0ZNtbmZOZ4TCPRm7EyHaoToVIlKojzkvsPTN/ipFVrdFVLZIBH9hR7xKexb?= =?us-ascii?Q?hG5zA3amnK/an66g5yK0r0iWTHCOY6TcJ6OQYZFc2H+gOHCIrj9o5LRYp4Ie?= =?us-ascii?Q?V5UopPSUKwdgqNg/T/2+posYbWZ3aQLjxBbzrOj329m8HEOc1p9p3oMbypib?= =?us-ascii?Q?3PdHoFdqi/dh3srkQpnX2RxMTI5lLmGJQgQ+8ZVGrD3nMnG++H4buCr9gT46?= =?us-ascii?Q?0xvsHc7w/YBziklveAEnrObSl+Q2K5MfLTEBroRLsycy+v3zIw42UGfWREvG?= =?us-ascii?Q?AZVs2YX8WKdTsBKHAxru2bQSF9VKFK2dVQaSc3ptDJ69aCZvRH1Jn22R2AI6?= =?us-ascii?Q?ua1OHzrVMhbSpSy3chUdBAmgMqeXmlfEmi5IVssC7d0hj4gb+T04JGnpoEA4?= =?us-ascii?Q?Dzbu34m5Oque0L0bGtdpxbnJGOn+wH1GIp4wyN9B+w01CK3pgiESeZpg3a7l?= =?us-ascii?Q?miKNBzpsCAH8O4eWZTBMK5CPUL4dMuv/Wr6KtBBct3uP2+UV+x+o6QGCWtGn?= =?us-ascii?Q?bW9qCMANhkt2911k2ugZXqHoPk6y4USJuwmgo5WRLk4p31my+G4gMP00qkCv?= =?us-ascii?Q?Akl8T+T+O6/Wnsp6iNxlmON2OZIZ57iE4qti4KWmKHYewnRUxTF8DUpTsyAO?= =?us-ascii?Q?NAQzNMoeWAmhQCs8CImPSuri1doKBRAJkb0BPCXklZyrD0v+jUa920I7pF8K?= =?us-ascii?Q?Ha0ZzN1ynL3eDC1xjgPprr/NM0013ky0TpTArHmtRohJOp2zRV5bInkFMlul?= =?us-ascii?Q?cZ34TBbztdO4QscO2jAAts3zYWb1R0IRNYuQ9jYM7c4d0U3/F3/NFYIxf7Sq?= =?us-ascii?Q?uL5r94Pee2VSFLCJjE4uqlDPajw6i56xToLjZq4izekDX70j+JE/5S9BDm77?= =?us-ascii?Q?LOHZIO0af62BIHO1OXLKEPsPl8PGhl6UdoWA9Htrt089/Kqm1OxOSSCSNCjG?= =?us-ascii?Q?KuRq1EAiupaNkXMZ/vA=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)(7416014)(1800799024)(366016)(7142099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?og6uIYHGdjLa8tXQa+VqQ/QTcPFbJjp2AhxWz/6o7xqcxgZPUL7+TfiI7om9?= =?us-ascii?Q?1sDfqviiBnsQZs3WU8/4yt8HD/0cWuPz4O/i3lbOLit+CkszuJh9cvxtmZNM?= =?us-ascii?Q?cn5OLlh1K4wIbb6WdzGzJiAEtGFzPoiEBRJ+BoZeYDiW7o5R+QJTvGpZDQIg?= =?us-ascii?Q?Ji+e4l47U6IkaJd+SbEUNN5hbftQ9sVIVTspQ31HPiapjubx/t4f6xYfvQYa?= =?us-ascii?Q?lgIGjGdncsxLwFwHhu+6BbjztEqsrOIN/VjyeyvD1vMuarzJl8NCs2+XvizZ?= =?us-ascii?Q?7tOEhNz7DgkluKSbezU0KUK5HFVyQEoAZeT8DNLARKi+S9fZ6m35RoEIbdmu?= =?us-ascii?Q?R2jPswYuPWTiBHV1XTAC5ZpsMR1NejPvZBVvLkeRMDAm1nb5jMENvlX4l8kD?= =?us-ascii?Q?6NTQwezbdQRbKcDvw7v1U5EX/DCdhE5RcWyzWwZxfFflpGuw3TBPvu+A4WyY?= =?us-ascii?Q?yNai9Sza9+3NiK0gWg71XEUaan+znTyeAtMdG3iDjcAdbFB5FvxlEYjoKmlJ?= =?us-ascii?Q?e/inOdijb6NH1YU6d4AoJZ5I60xQMOYZEPt2lKw38kr9laIqkNtO2svJiJSy?= =?us-ascii?Q?K6bTkeZMVd/vBl4KKF4LicXJZzL9odxSXs9xHBEq1/Vgm2EDXooQJa8gLlzO?= =?us-ascii?Q?sOZNVbo78Pxfi5yxC7dgR7pZe3qFm7B5sjcP1xZoPjCqh+uI9/Cd6r+VFCXu?= =?us-ascii?Q?e1TDYlZSJFz99lH64O7WpnzSirvtdX3j7TAVJiMx3fog6atcraUqDO+iK4pH?= =?us-ascii?Q?9A2TjwZ1lHnRyxePBziQiOuzZeKF8IHhYbCtfRniyXvRgSiMyPgjApxGI4Bw?= =?us-ascii?Q?8hyEq0WRTQ6xqAc8qduwggug9xMH6Ex+59nU2nqgmU98ek08hCkS0K+QhGEK?= =?us-ascii?Q?9aqAs3aVJtbnFkwrgQDB9PiwRwr0ALCjvZVRFYB3h69FKxYVczNu9m0/XebY?= =?us-ascii?Q?pv1l5Crz4mMuFt5AEKhHJEy7RpJ+DdwHmMD+M/PnQyT7+hjjvKzoUDALwasL?= =?us-ascii?Q?niKbg7xsM9/m10+BL0Mjl4uIFrHeQFbJ3q4aoQ96PzI47gaxWwK39sw9hVir?= =?us-ascii?Q?1VgZ/j9MsyDPfZp8xnnawrfBG6fUOeCOSUyT7sSCYcWPVFjXZrpAOkCLizBC?= =?us-ascii?Q?GOeUwyTqgX4X3g2lmar5Fv9cxj0Pd6j9IABxUmiSIkUVAt9ZqL+eco3m/PJG?= =?us-ascii?Q?2btKv5lGQP25wEOLxvRkmoHwEo6ky6Fo3C32WqBO/DBEKDuoBB7m5hcO6PAo?= =?us-ascii?Q?2FQwRpr9BPx7tpIEnlxS6c7pczn0KboTNWuBgfo23p4g45Z+DQ9mVZPDNsmA?= =?us-ascii?Q?zQy6uSwygPaXhPUxFEhPS9aD9XFYvZOg94z9xPihqSElhzZrIihu9l1tcyqT?= =?us-ascii?Q?4WHazhrkNBMi3xzR32gjBntAkxmW5B/SBwDJQ5l0uozBdYieNok2n8Tr2qjt?= =?us-ascii?Q?TaNIjgcWNJIm4qdO2zFVIaeHHyAUfy4vAATsjApunxIAeT1Wq0XZ9V6ewheB?= =?us-ascii?Q?QZac34bwS52DLHp+0faPjqq94w8XrFUGKLpvpItTaqOwvR+IHsKKjBOOnhq1?= =?us-ascii?Q?EYmFY7NDmixip1HsSbL99Xjp4p+VE2xzRhy2AchOzoXXhtUwCOXpMopCW5tL?= =?us-ascii?Q?9xYNt6ODuhIdEvOA2AP57lNdzS6vmSUty10r34VLhd8XE33F4JnXXb4H5FZf?= =?us-ascii?Q?8qc636UfoR7ygLQYrmF08Bl3RzQMuIMC34aFyA77JsPw2iGNfhW9ORo1DCPq?= =?us-ascii?Q?eIEFBww8Aw=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 65d1683d-b98b-4a45-5eec-08de70ee60e4 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:26.7479 (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: 5DMx7pvPHZp5VpU4SYew9ISa3RcMbR+zXzoaFOkMmTljlx8geG8EclJKqlU3Y9OomQ/Q8bG9ud5/6D3yUx6uyg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 Content-Type: text/plain; charset="utf-8" Add extract_fmc_signatures() which extracts SHA-384 hash, RSA public key, and RSA signature from FMC ELF32 firmware sections. These are needed for FSP Chain of Trust verification. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/firmware.rs | 1 - drivers/gpu/nova-core/fsp.rs | 61 ++++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/nova-core/firmware.rs b/drivers/gpu/nova-core/firm= ware.rs index 823d2232081e..eaced3d42728 100644 --- a/drivers/gpu/nova-core/firmware.rs +++ b/drivers/gpu/nova-core/firmware.rs @@ -27,7 +27,6 @@ }, }; =20 -#[expect(unused)] pub(crate) use elf::elf_section; =20 pub(crate) mod booter; diff --git a/drivers/gpu/nova-core/fsp.rs b/drivers/gpu/nova-core/fsp.rs index 15731d24d0c5..29707578d4d4 100644 --- a/drivers/gpu/nova-core/fsp.rs +++ b/drivers/gpu/nova-core/fsp.rs @@ -112,7 +112,6 @@ unsafe impl FromBytes for GspFmcBootParams {} =20 /// Structure to hold FMC signatures. #[derive(Debug, Clone, Copy)] -#[expect(dead_code)] pub(crate) struct FmcSignatures { hash384: [u8; FSP_HASH_SIZE], public_key: [u8; FSP_PKEY_SIZE], @@ -216,4 +215,64 @@ 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. + #[expect(dead_code)] + pub(crate) fn extract_fmc_signatures( + dev: &device::Device, + fmc_fw_data: &[u8], + ) -> Result> { + 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"))?; + + 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"))?; + + 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"))?; + + 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); + } + + 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); + } + + let mut signatures =3D KBox::new(FmcSignatures::default(), GFP_KER= NEL)?; + + signatures.hash384.copy_from_slice(hash_section); + signatures.public_key[..pkey_section.len()].copy_from_slice(pkey_s= ection); + signatures.signature[..sig_section.len()].copy_from_slice(sig_sect= ion); + + Ok(signatures) + } } --=20 2.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011050.outbound.protection.outlook.com [52.101.62.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 87DC83321DC; Sat, 21 Feb 2026 02:11:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639874; cv=fail; b=mS11HCij68AdUqPut+jbS3BOLAueZxjnHo/6A04D0l0gn4jcSYdD0C7eenT7IfWpkYKM2R23NrA9CbB6pxlKbeK7hFXSOTd6snj9o73Taq5bxMCUbMDItIq/LY/TxtCvHpIs3/VA3U98VZNNuq8QLJzvv298JWW+oqCifmiH47A= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639874; c=relaxed/simple; bh=sShggRMd+ekMGUkfd/CVxgHl8AozYqJ2DZPOp63KH9c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=DWUEpNoV9LCwQZ00Y32tqZoRYuwFNRCNYzG0lVo7BuBGahMTwv3JCzM8BEnNv+O6Aoko7osor8y6M2GHCAy7g+RZfq8MCTIs16W8EucN2eSRglJWeQnUynhJhXfhBpZPVeixTBXkdUcpVNK37xacx9NsgEX2o+1REC/AXvyAaAY= 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=U700G49s; arc=fail smtp.client-ip=52.101.62.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="U700G49s" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Q+4ceEpniKyQYPCenN8lQgYXX39SQNNzh5tGNHSfhMRBSJJugxWOp875W5FdJItLefrOp6nOjHbXnkJ9F+nOaeIJF49TnEyZ+hieCoSJcwi8OrlkxlrTpU9CUvGwqBzLt13ZVpxS/rKYfIunNrNBoNeBRJjnsD8GTx83ouMcB6KTSLkRaqJpNvSMuoL07zUGny/WpiHA0xg/BupinuwaimXzwG+/QePyYvRGTU0SEmCMScopG7N+KjpPUouHRqjR0/c39cRhTt6v9NOH3Fk4FZ5Irmb9WjMKjiALMcpturWNhll4+n0l4qYARe4YzTR9U1RPx8S7Shl8W8zWqT0b1Q== 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=IiiW9n8Rju6DW1/5dbzF0tRCqtkd2RZzkTQJ6TrG9bQ=; b=BbdwQm+imzktOKu6ed/wOciZ5bs3422ZetyrfLNz4i+qBMEjSBypPlrmPpJpYOT6uZhq8tpGFR2wDfa2UVVLRphWgT3F3i9WzSvgJJzpywuhDokvIpM9KLz1VTt7JUyt3JKWqMGDkkQUSHRUWLVj3xmPqwcJyojcWzcpII2W15TiNJZdUyRgFhwrftl+OI62MwpLy0Ac0VOee8RqBVBQAGZ5NluZipvlB96rz6J7eHOnzLg/9efCS/5FWxRfqZVzWCklzExSmPj91F8yTFh+rrn98IUwF/619oiob0aQFDIsq0wit+cH+XKdBoH7oq6X/gHLx7xByXdusdQrSHA6Cg== 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=IiiW9n8Rju6DW1/5dbzF0tRCqtkd2RZzkTQJ6TrG9bQ=; b=U700G49shPAptob6hYzXEj9fegKm+IzOfLkCv/uFezojbtcqQbEUWJQt52Lj2Z4hLjb4zxmswGqEjLZuCOU1J79J58cgP1MmHpFesqDHXA7Jc9ZfVCaqgHrTfk2iV8S/xzGd8a2w+u4V1U/dSHXd3TtLPZF6J9VMcI5TPacRHB6Cjc2I/81ZpvJ00Z6ttZaAtoftYCyP34yLy+Fv7dLXF6Ynzmr71jRt/c4frkh4kuc5jYM456o0ksAFn+MSAurwMPa7ufaEHByHgykoPx0nmZTI+yHLtdqv808Jh9jDbpokCvNqTOGT75gaB03wfVHQuCsDtgYdU91/rRzosvaa3w== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:10: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.9632.017; Sat, 21 Feb 2026 02:10:28 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 27/38] gpu: nova-core: Hopper/Blackwell: add FSP send/receive messaging Date: Fri, 20 Feb 2026 18:09:41 -0800 Message-ID: <20260221020952.412352-28-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR04CA0012.namprd04.prod.outlook.com (2603:10b6:a03:1d0::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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: 34f19014-ae7c-472f-75a6-08de70ee61bc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?laYx6C9U3HNysiXfuF2E85PMsNx3jU5MmW9hSJ7YdPYZVtZPU/d4lxE3BgJd?= =?us-ascii?Q?N7BH5DvniPweENDnoVSVLbSwg1Ah9u4qhbilq5gnIBopozVTsRJS9LhAyPT2?= =?us-ascii?Q?Gba/QrjwFySJKtrxbgksTAetBf7CJghcy1RWbk9m68N2yg1wup1bT1rTXlFj?= =?us-ascii?Q?aCUaCwe8D7BdL7gRkiwTpIk8elCJprsnAASAfClM4p/Sp/6Aj3PJss9ioh80?= =?us-ascii?Q?nZAHj3i+gVjD5H1MVFzrx/k4iqK2vAPs+9T+wSSnF2JEM/6vonSxS/nMop3/?= =?us-ascii?Q?VmP5nTZq9SiGIsAYgRMj+DXBzpjdyBegSTXB8GeXHNuL9tl8iMuS+60B6sEQ?= =?us-ascii?Q?C+zaz9+90fLdZmp2ji41I+LNilj5ii1k/fF2MYzYSVTp/c+a3FkATWN/+xrw?= =?us-ascii?Q?LSAMn0+7IzXOnKJ4iyE/1569boGzhMWPk0ljCBQEEcV9YC2//Gs9sYjci/8Q?= =?us-ascii?Q?W54ymF/madlD/yFQL8GEZKr7M2tmPh6zVUoEAxE3nhPZVL6Z8QBYDupa6EqX?= =?us-ascii?Q?++DP/yh/EEw8DkGqDztwbYULh0upMeCnUmqRCcTfw1fQppodZMGNeRcrmSKm?= =?us-ascii?Q?y6+L4XdPmzDkZNUjf8vFHI2x2OMV9EM73uFw3d72JwSSgyya6PYOic/s9J6a?= =?us-ascii?Q?GVH8/4NQbkn1ne73yS86f0sTs3wJOGmGzpqBuxiVFGJnGwTu0dC3WfrVNR3I?= =?us-ascii?Q?9xi1smWOnuYK5sH/UXz5rHw/LC367fG12Xx/n85YzvZtzzHi9E+kKTlWAkpI?= =?us-ascii?Q?pmcjn48vefcEpv/k+o+jWs8vLbHDWxzXAW5anWCl08TJPg0nTfBiZsosUU3I?= =?us-ascii?Q?wcA9+18xudghO+n2DmOJxKQlCwnD2ap2d3kpteJ0qbqroFykaQ9hKtGmVt4Z?= =?us-ascii?Q?CGpO+JWEhmTrsu0aMuNGyqgUVqJimZfqiR1yxaDven+P97/dCjAvIBzHxh5N?= =?us-ascii?Q?doVcAzZu2kpPyF1ncpjcooHFovv7AH4VSAv0q7haaeU8e34OxnotYv7tyyBK?= =?us-ascii?Q?HY6uNFfmg+o5GnsN+JOqg8HbeePtQI0Snnwl5btayBEowcgKEPh5A2Dz2Lwm?= =?us-ascii?Q?/OB8kjx80nH5ULY77boIiwHfAHFA8a4I4WhPXgbRob901bbVOBRT/Czc1p1r?= =?us-ascii?Q?Y0ZvqZhd6r4M/Pk2P5Ida4Gp7aeZEvOnRyeTX90n9aTqSc5JzpDTSo0gpJ2N?= =?us-ascii?Q?0JMlXQcUglJJ4Bg+gsH73sa3YNQTGw5nB1RNZoIbLHs3hudM0unx6x9OF2Su?= =?us-ascii?Q?TPKDQcj/0BSTyr5HmpclSMrrF5CRr57YeQ1sMFJekWhopAQbffJIhZPnwXX3?= =?us-ascii?Q?zPgtuU/AtT6u3K0SPAaYQiqDBPRUspx+I6Vkk9xs10B6WylqkXtJvmv+57/S?= =?us-ascii?Q?JJkTPH71sRDv7sTdKw5sbg7lDMpc78jSsgXgSWE4Gevcu9UTi+mHVOm2utpy?= =?us-ascii?Q?bjUHbo8Ww5uEpdLtQUCNS94R7xKZNCDYkT/hgjdRJJ+Q9ETXIEJKtJQ4Tlvh?= =?us-ascii?Q?cyGfzVhACL6JsWY/2QB/hQ46FkzscYmJ5MVtHwr9bGzvyar9o71i/OPWKHmk?= =?us-ascii?Q?qkSb2Ur2aiLmd8/ERyc=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)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?3ePqxSqemGCjIA7IIMCHvY7AHXNBEbAmtKmImu0uSYQwVFP6grYECIMLVOAI?= =?us-ascii?Q?9xTdifD2hJSnHAcngHfOQq0Twb5VSTs4LN/k+yX+mHYm8JbxLajGvnTcqCQP?= =?us-ascii?Q?Kt7MBdMwv9lmF4rOi0LDQIxBAjmiLuOgpBPOZP9MTaYRbChEM5edeu1saLDB?= =?us-ascii?Q?oFEmm/3aMeYl74GJAgfbow6LRfocEQYLQt0Q9YPgx1DDj8C/iMplmu7r1ztg?= =?us-ascii?Q?Je7oT9PIp6tsgAdTp5AUW3WJ8C/bpxfOEUCjKnlOIRBc8batuFh8817ydxD2?= =?us-ascii?Q?mQJQ+i3+2qjoc2HCvgd6x7iLvkxWsHE31wSawUdo8mnW4LHEqlhw+lNTHZg2?= =?us-ascii?Q?HLGPpnVsb3kCqT8ThrV9utp9W63jBUbK+UL+HZnvToMYLiMSNdp/ovKoDf5w?= =?us-ascii?Q?Mw8e2zzkQclyAFhHJkGGkVZuCGBj3HzNwDIkpdzdyihNSreB6QMOQgzd2v4Y?= =?us-ascii?Q?y0eQoZZOLtabxc18VhcQ/G5lm0h+IOV+MmPSe8O8n8x0ej+2/eAB1A68MXWW?= =?us-ascii?Q?dWgAgxnN+235WKfuStkP5lpiYisPSx+JFLVqf+8OqhvF729jzfh0KB4w0hEo?= =?us-ascii?Q?QA8qxmYauPTHyKUxOowxNshgJvS3N06Ud5CfVuk2sQJp9PqwI4ndWWz+wP26?= =?us-ascii?Q?YFTRc4fKD7eQzA7OmiwlCQflzdswDsMIX6i5mGfli3GNeOqmlUCJ5tboI243?= =?us-ascii?Q?bJ6XQEUBh2zvZ4RQDO9Je1g+kfcpN0mGHJotYtVtIRh7S1fdo8gaGPzDVYot?= =?us-ascii?Q?RGmv4nlfDUxbADEx/OpxWFhtS2fWJFuqG2V+88vL5zJi/AQEYqM4e284yFpt?= =?us-ascii?Q?+FVEX151HMK7U5R3KruVGji/AYI27oZPvV2jRc6YFUVWGtsTCDDHil+3024N?= =?us-ascii?Q?NPlYtU9XqxkZWhyz7n4hTFJ2NdAySrriQ7KIxSWTY2c2L01HbIEQTULPMd5x?= =?us-ascii?Q?kvbQ5t+Xt/OGiCfFgKN7VbaPXHuLCiwK2lCyqf2fQXPo8toU8di0PgeTNkKd?= =?us-ascii?Q?8jG2Os5cwbGGKB9QXR0EyAPkHWSqujUUPYmSVfQvZPmXZlVjxiJxDR12u6Dk?= =?us-ascii?Q?f3dKagRBSbk9ZDbhiYw4FYfAjxVXaKO0GQ6nFG64eS/qWZdF4na5HfNBaDk+?= =?us-ascii?Q?E6TZGckRJF/YElYHKVtKvNzA3NxlZy2WJV2PvrMKxTe87JH7jjdUJOlWETRw?= =?us-ascii?Q?YbqFbiM3Hkm3Y++PKKfNHXopx2bIT5dUowiAGs4KoKWGTfcTYkgQlsJSDaMg?= =?us-ascii?Q?x2vrK2qW048UvTDq0BuwFoE6K8gi1woSTpcMfyUxrHCKar3jJzKKkL4eDQRU?= =?us-ascii?Q?gFpkeLQoLe3uNMA4/7tme1eXUN1DPdH3I/IBSWL7en5OtvAyYbU3XvHYBvZF?= =?us-ascii?Q?6qH4rkz5feWgTKzc8zpdLXhHKKTw4lAaflNbT7qbXN0kwPeRljvSUgNshAZN?= =?us-ascii?Q?o2WHRYLPJ6h21Zej9VTHzPMZQbpoMneEYYr0j+K1usiQRTdc/HMIWYOn8248?= =?us-ascii?Q?BnToGN/00lM9vwp0ZZ9Mf1dvROIZpUzRT0a2cpk9oTGpdvKwlM5h+ZGyBm9Q?= =?us-ascii?Q?Iu6EW7svs7kg61yJtoV7LNAtcaZfMMK43ephIS9DwPHzogj/AvcNcLv4Idnm?= =?us-ascii?Q?ZrQoI5mMlWUWibGlXdVeug0dkstEpdHfCak2t4YMsCU4r/NPOEGE6qtQZQqs?= =?us-ascii?Q?UrXR4BTEhLsWmHM1y5gemzxP8kDuaen+faxbT97SjjuriqX7Wcv+ziEubRKv?= =?us-ascii?Q?1xqqEF8A5Q=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 34f19014-ae7c-472f-75a6-08de70ee61bc X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:27.9346 (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: /GkjETAPu3/n7pR/N3Ez19M2r0UzJJ452r61o2GGlHDfsKE5W+MFSiI8yu6ZwigW4yQSws1QPuZirCX9dhVaNg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 Content-Type: text/plain; charset="utf-8" Add send_sync_fsp() which sends an MCTP/NVDM message to FSP and waits for the response. Response validation uses the typed MctpHeader and NvdmHeader wrappers from the previous commit. A MessageToFsp trait provides the NVDM type constant for each message struct, so send_sync_fsp() can verify that the response matches the request. Cc: Timur Tabi Signed-off-by: John Hubbard --- drivers/gpu/nova-core/falcon/fsp.rs | 3 - drivers/gpu/nova-core/fsp.rs | 107 +++++++++++++++++++++++++++- 2 files changed, 105 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/nova-core/falcon/fsp.rs b/drivers/gpu/nova-core/fa= lcon/fsp.rs index d68a75a121f0..b5a0a2631ec7 100644 --- a/drivers/gpu/nova-core/falcon/fsp.rs +++ b/drivers/gpu/nova-core/falcon/fsp.rs @@ -152,7 +152,6 @@ pub(crate) fn read_emem(&self, bar: &Bar0, offset: u32,= data: &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(); @@ -175,7 +174,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); @@ -207,7 +205,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 29707578d4d4..20c439fc7f7b 100644 --- a/drivers/gpu/nova-core/fsp.rs +++ b/drivers/gpu/nova-core/fsp.rs @@ -19,6 +19,15 @@ =20 use crate::regs; =20 +use crate::mctp::{ + MctpHeader, + NvdmHeader, + NvdmType, // +}; + +/// 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 @@ -159,7 +168,6 @@ struct NvdmPayloadCot { /// Complete FSP message structure with MCTP and NVDM headers. #[repr(C, packed)] #[derive(Clone, Copy)] -#[expect(dead_code)] struct FspMessage { mctp_header: u32, nvdm_header: u32, @@ -172,7 +180,6 @@ unsafe impl AsBytes for FspMessage {} /// Complete FSP response structure with MCTP and NVDM headers. #[repr(C, packed)] #[derive(Clone, Copy)] -#[expect(dead_code)] struct FspResponse { mctp_header: u32, nvdm_header: u32, @@ -182,6 +189,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 NvdmType::Cot as u32; +} + /// FSP interface for Hopper/Blackwell GPUs. pub(crate) struct Fsp; =20 @@ -275,4 +295,87 @@ pub(crate) fn extract_fmc_signatures( =20 Ok(signatures) } + + /// Send message to FSP and wait for response. + #[expect(dead_code)] + fn send_sync_fsp( + dev: &device::Device, + bar: &crate::driver::Bar0, + fsp_falcon: &crate::falcon::Falcon, + msg: &M, + ) -> Result + where + M: MessageToFsp, + { + fsp_falcon.send_msg(bar, msg.as_bytes())?; + + 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::from_millis(10), + timeout, + ) + .map_err(|_| { + dev_err!(dev, "FSP response timeout\n"); + ETIMEDOUT + })?; + + 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)?; + + 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)?; + + let mctp_header: MctpHeader =3D response.mctp_header.into(); + let nvdm_header: NvdmHeader =3D response.nvdm_header.into(); + let command_nvdm_type =3D response.response.command_nvdm_type; + let error_code =3D response.response.error_code; + + if !mctp_header.is_single_packet() { + dev_err!( + dev, + "Unexpected MCTP header in FSP reply: {:#x}\n", + mctp_header.raw() + ); + return Err(EIO); + } + + if !nvdm_header.validate(NvdmType::FspResponse) { + dev_err!( + dev, + "Unexpected NVDM header in FSP reply: {:#x}\n", + nvdm_header.raw() + ); + return Err(EIO); + } + + if command_nvdm_type !=3D M::NVDM_TYPE { + dev_err!( + dev, + "Expected NVDM type {:#x} in reply, got {:#x}\n", + M::NVDM_TYPE, + command_nvdm_type + ); + return Err(EIO); + } + + if error_code !=3D 0 { + dev_err!( + dev, + "NVDM command {:#x} failed with error {:#x}\n", + M::NVDM_TYPE, + error_code + ); + return Err(EIO); + } + + Ok(()) + } } --=20 2.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013016.outbound.protection.outlook.com [40.93.201.16]) (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 B719E32938A; Sat, 21 Feb 2026 02:11:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639868; cv=fail; b=jZpZVpj8MtgpV28z8YPLx00Ut15JtOreM8bx0aXh5f4vxF107WRLZAAwyT5+vPTPEBYNM932tm/TuXjzOF7xVvrvzR/GwT1QLzTnV4Xm+MMBhe9WhLFOgqumm/t7Z1N2Enj4iiDRfAavjDqfs1vyGI8ag9IyPBxdau8HcSDvmsQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639868; c=relaxed/simple; bh=1eQxi486dD83xmbuhfFT3R79HJMnhsTWXATojFFgmJQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=pzfvX2d40SzCxcyOup6saU2vOxpxHO+7vzE3B9YFgvIlO/8MbPOT83Z8pRZf/vuCXk0piONqQ60e4e2INe0P+FtKs0LIPA6QlczUL29InCxZ9H3Yg0eUuA9x5H+N3r2TsSYr7ZOdXX8k6V2ZXhcgQ/fjR4AiFJ97luWWDJGvmig= 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=n1h/J5J7; arc=fail smtp.client-ip=40.93.201.16 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="n1h/J5J7" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rFbWHhIwEPX1mTu5b0qP7jc9VN8aheHilrVdgZMwY5hSxm5IvTQ1iu0EerbwiDidbBVjLDnu5bQ6NfIA/0X4xVu0EyIUk8E2HJJLuXzG3kGszOrOoHUABONuFx7aVygXAmOlFTnbpyo4d2yI1cbsjEEYE3zENUDIfo2UhLpmLPCzEw1Fm2OPy/HmZB6xOuyzhDkP1EpazVrmo/44CDLJ1rBpaC8TWFn9Eal7npKJfjkghH36eeyVXnN3lY55OCkLsQhOo6G+xF56ALnkLKTGWkzp3E84b8FipNaYdxffRZ4eo369GqIjdjeSH5V/F0JaMamm1T0sf/t1xwr7tdPlSA== 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=DlropBU43v8RhzG9lU7aSK4ogvX4xvWImf70be71S+c=; b=miAhrO+YNuKpiKfb+GbVVMuE0SysaHcuwLfcQDfR/5Fv6aIzUiyjYk6BgptlIOnAUivmGMMdiJKoY95rzM+aUmEgbY7JMqmdYyZ7qm+cNw7ImEg4k1mQc2ounC4VD+yaOvFQBTK1CT2xdNqSTIAN6EnfcY1li0HQR2QXr74wtLFyvt1sR7KJ3qG2NiWG2GUmOY1JR0UBehmsOvtNF3aKITSJZa7oZd+Vs8bRYVF+xHdWY66BEO+7b4Q7rcCgRWk8EyZntw0kgUgjZgA7DCO1xzZlQuZkUfE4Iv92JhvBS42uBhzgIubI+TQMxVhU6fLo/GnLd13I3Xr963/YI2j/gA== 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=DlropBU43v8RhzG9lU7aSK4ogvX4xvWImf70be71S+c=; b=n1h/J5J7b7JUwuEdLQyOGSGCox69yD5XBl+kgSLU0Fenaqn4BjfI2YdgCwhcZEqexhZKXzTOMzgadn/P/MRaU9QfuxOwV6H0G3p7OMqDY1kYLNqbsEBSd7D06JoGbG7xkMu17Nk2Bs49CJV81AMCB4nl4EwdrOXLa1kIobl1RJXbMPL74ymhGCOh+MR47/DDzzVmTJvHlRUgE+/Donn4i0Dyk7EFzeAbkYnqSIYNHn+Ph60Isc8LoOvZCq4vwjwMMMcy8h5I3XdyWsXuTmjh8Davb4nPeMTwBuiGyuWlEzfo/DgQqrhJSSAuFdkldyJkJu3WZtbuRz1fzoo8PVYEXA== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:10: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.9632.017; Sat, 21 Feb 2026 02:10:29 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 28/38] gpu: nova-core: Hopper/Blackwell: add FspCotVersion type Date: Fri, 20 Feb 2026 18:09:42 -0800 Message-ID: <20260221020952.412352-29-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR04CA0010.namprd04.prod.outlook.com (2603:10b6:a03:1d0::20) 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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: 45bef685-a50a-42ce-30d7-08de70ee6267 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?JDLvUMl3OUudr1Yo33EpJTRowYEQdmksyLN50rNuxM90npxI+CXW7+EpZ8Hl?= =?us-ascii?Q?dQ0DqdIMlaj2DYtHQFqWpdG332E06UW0xamwmbkMyJ0Rqldh4aX9jpHMwERv?= =?us-ascii?Q?njOaxPxJSul6yGmiVCW2BSY/HUuENhTakyUA81Iqisr/gM+FuxHKiydl7CIS?= =?us-ascii?Q?kbgNie7NjEf6YHVBotxJiPzsjOgFBKL9TWvWIuKwD3r4/KPzeIDZsI4rGmRP?= =?us-ascii?Q?mrDYz3iv7yn8KKx4AlA32JH28bgnDfWfXsO7xRy3zD81JsAaE1VAWRiJCk9W?= =?us-ascii?Q?CMDU4bB0dE5zvcTL2UJgAMCxytwo84AzNU3QWUR5uvC6ohnwkdOC4HZMEiue?= =?us-ascii?Q?78wRavq83ibnjtsuyDGbv6qFr4/UpQ5xuAYfochLWqO+OUAeyWOqTDBAXJpF?= =?us-ascii?Q?MMLBbYMaKRQuSoNhwIjnfBP+GrIZ+ucNf7Ys+f9OpoABdnltn8IMlrJHxrH4?= =?us-ascii?Q?LnWDvJabEPBPHPkLmuBGXR4uaLdzUD2pBB6M3b4p82V8boscW8S1+z6TrC/q?= =?us-ascii?Q?kK8uezpBFj+0UD/iFVFx7AcPcVvtwGgF1cTJlW/voVIkOJm5CPiOvnNbnvXI?= =?us-ascii?Q?OdGwwjnUaXaeN6SokW7Dm7YayFPI8jtaDp407sP97P2+cwVIPQgGdtfImCjz?= =?us-ascii?Q?QZKeEEEag9bbc/AZK+TFl2H7WTiGmZYt2nVTpYEDup3KIn6asqu+pQSpoDT/?= =?us-ascii?Q?0vvMo+jMsWHTnCxBH2/V/hHmxMR/aaX/AfPzAgvPpi33UDHJpodLWm4cw3fg?= =?us-ascii?Q?+ciak6nLJ+/m3YJ4r2H5fgfPIYdnYjRcjdUA7vF5PwGY8hJHcNdQQzI5DFj+?= =?us-ascii?Q?Z62KHad16mlZDGgNT2esgY5KYiZt0z+wtfLn8ldb4eO/cymL5mYGPh+VhcK8?= =?us-ascii?Q?mola0DdRdGGCVChYnI9RVJYsZKi+PH5WWfNc7MY5CtjnezIQ4Jr0wvrQhYZc?= =?us-ascii?Q?Qxi9gjCF2m51ss2Z9IvRxyIhnJymH1jdQm0+m6Vb8WAnthBHW5PFdqqcZkSk?= =?us-ascii?Q?8ebsJ4+8wbwsLUTkRofPD4V5cqxR5ysPSpGPwJlrPyG8n8wEuLQ3SMtlg5KI?= =?us-ascii?Q?BpcodS1ISSIPPpesXXTqUBkLtLUWwSvmKCEOWrzrWIWddMuNTOyvw74YKlBs?= =?us-ascii?Q?xbTy92NJyZjwGfYpERJF8H/J2zCuuSmiMBV86GfEn6k38iF8vFmQqUHr2uAW?= =?us-ascii?Q?RkttVMgEe59fwVzwFAnJ6Cj0I6OxCmeBC2SmVMcV/Bx0tH9CgVPfjfSe2z00?= =?us-ascii?Q?IbvRIplc8fdoaOcTfuw+AWUsFvcSEtRju3aOBx91/pj7TU+1QP4m6uvaFNBv?= =?us-ascii?Q?NfMCd+XKiZueROYtLpdvzvY1QBYGMZrWFpnUWJVxrFqiufzLgD7T0XRRRq9a?= =?us-ascii?Q?mctT4VSCWlarHcOG0smtDxQuAlfvaoAaVypFrFUKlMy7vGh8iG/H7xhlc1K2?= =?us-ascii?Q?Wxa11ZD0iLrllg9pSjPpRn8fPkIhN/ba6MJrfOxYgcaHCGuITvdD3wLSRM7/?= =?us-ascii?Q?U4yQYlNsFXVhgIR863+GBRDWlU2+NyI2qKIf4e8mK5MY2JdpAtwL/MrmCBQ9?= =?us-ascii?Q?w43QXfCxjpctYHXTVxM=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)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?95d7c3V6oQZRHnMrcw3txsCmLZkKDZNtnnpYtOO9+aDdavOFiUoHVRgGYjdW?= =?us-ascii?Q?HwtFY0h9wweU1dfyZ/KjVGUemjk3Eav2iamkuGctzXKK4ILrRnL4M40XxENq?= =?us-ascii?Q?2aTbwi7G9KJ1mEMJFzvwWHAQSQslP9OH8fIB7LfytIzGzORGlsoiDkq6P4Gp?= =?us-ascii?Q?h5AHVdizdMPvOeioNaGjGW96ugD5dpEZpgLPrGdmdfrNw1YvXF1Osn3t1/9F?= =?us-ascii?Q?Y/2ptAv56UgVw34tz42z+1Vo033jQIvWrDtoe2ZmCx5QqplXu2xhbSNf8GgA?= =?us-ascii?Q?uhp+GdtqqeGTrpvG6fp8mZeDm6skGam2O4/KA3NYUbzdYLoDzTcPYrlZ4YXV?= =?us-ascii?Q?f/lOJ7buEVBw1CxJedbEv9VplXNkXTh6jaAcrpA7LvO4FDLLyuXKCftCYIEJ?= =?us-ascii?Q?9wGQHqTOBSJkHSGTMRJ5lh8fwrBgvyj4xeZqpq56IQu6ODKsLCJAZuQhrAps?= =?us-ascii?Q?5BoFvq/O9d1MYZX+/1TvilA92gOsrdTlzoPnkBt+i8HGfcSJgYKy0Vfh4Bwk?= =?us-ascii?Q?82pbv0b834bcWGKsIEjK6R97k5sndlFL1IPqK9VKB2gDGvW+97JEuGH2zsjm?= =?us-ascii?Q?miJUpk5KF/Ki79ZfMpa/7ds/UvLatu9Vx4VU6FIJdP/+/agh7mXmkQGePz0G?= =?us-ascii?Q?eF0YbqouzvKddYhGF4e/WXzbqiDwaatu1FoNp0GKtBChlWwF1uMX2EtAQ3M/?= =?us-ascii?Q?HKJFsw0TWIQfd+Kla8EgKPJIG+KrpUi/fGyGrc3F+Lb0wzsqOk2tEJQljjga?= =?us-ascii?Q?9Ho/bPLUBlF+MAxBTGRQXkAaxAZCBR+HXLtlM2QU14Cwgcm9isFB1wZ39T5U?= =?us-ascii?Q?Q5AHYn/uf+/icdTf9wVrvaqr5/jqC81aqZnqX7QGgflA4jSdHtaHs6R/JKN6?= =?us-ascii?Q?VxrSGvrcpbmZZfzhBzv0UjBq785Kb5MZa507ZXDg8oF1cag39iZgayLU+9I3?= =?us-ascii?Q?htkuMUI+3x9DtQjEoGHFjrNZLops0lsDmWSKGE0TLhM9a81uK6zsz22wlU2+?= =?us-ascii?Q?VswdBBdNUZv35YTEQ7x9zXhaZi0ER47plDXujAG/Xi1AbPhW4mMtzuxDxT/o?= =?us-ascii?Q?pcnaiwqJk4qNDqrdXnrudtfhPA0y0PfjoNjWiSbXq4EPFzAx/yPZ2yNXyKA7?= =?us-ascii?Q?b1YxaLU0DnBrnqbwEYaV+PifaWNZm1ddVsWeE2IBUFtRhWOAi7nOZp5w/Yh2?= =?us-ascii?Q?bfi00Lr7g53052yrJxs6FMLzk/9ZwNybPokODK15UfrDKbJQgSFxVJIh742O?= =?us-ascii?Q?grOJHQVi7sma0/u//dOr3AGRvEgtIxnq9G+ZjhGF+xCdtgxWFXrerPQtPRab?= =?us-ascii?Q?6s3fatfKGMa5kj11ad8mS5pUrRuNQKyszU6DSoexwXtL/x6lQl501oR5YzS+?= =?us-ascii?Q?jOxV5pOfuQVZWO4EciAjDjL3MPByZtbSbiqsjnbb375T3sXcQDcVHmKIh8cU?= =?us-ascii?Q?MasixIJRXRb536NPvzpeJ35is+9uF0Zlz2Im2k4XkUDK/qlnQKRCiiYGG0oT?= =?us-ascii?Q?2Ffbz+bnvPBwM+4IclS8T4KLjNxC2FV1PUpkcNgHfEkNV2M4NgNr3xKDe1FI?= =?us-ascii?Q?uOppjniNKPfgOPKiKYW9lpp6QMyCYrTJG2MrsPRWgv7mwU9aKJ05sTPqQwuh?= =?us-ascii?Q?04mETGHwM97XrXVCwBvHfZFE9ut4GVQr33a+t9yWRCPDveVMhoV1ir8RB39R?= =?us-ascii?Q?gvEaOFOSgd1TTbcz9XOqh2ctiIIAlAkMujvnmIVGL0zZaY0CrAfXMfyuEirZ?= =?us-ascii?Q?SmEEnrcb2A=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 45bef685-a50a-42ce-30d7-08de70ee6267 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:29.0245 (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: B8brQLEn8FbI1ivOO1BBw9W6ob0SOdfjFenzeOF4a2f1TrfVJ9auKupw4OiN4brArWvS51eLN6ucNu0Ka7k90w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 Content-Type: text/plain; charset="utf-8" Add FspCotVersion to represent the FSP Chain of Trust protocol version, and Chipset::fsp_cot_version() which returns the version for each architecture. Hopper uses version 1, Blackwell uses version 2. Non-FSP architectures return None. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/fsp.rs | 19 +++++++++++++++++++ drivers/gpu/nova-core/gpu.rs | 14 ++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/drivers/gpu/nova-core/fsp.rs b/drivers/gpu/nova-core/fsp.rs index 20c439fc7f7b..8926dd814a83 100644 --- a/drivers/gpu/nova-core/fsp.rs +++ b/drivers/gpu/nova-core/fsp.rs @@ -25,6 +25,25 @@ NvdmType, // }; =20 +/// FSP Chain of Trust protocol version. +/// +/// Hopper (GH100) uses version 1, Blackwell uses version 2. +#[derive(Debug, Clone, Copy)] +pub(crate) struct FspCotVersion(u16); + +impl FspCotVersion { + /// Create a new FSP COT version. + pub(crate) const fn new(version: u16) -> Self { + Self(version) + } + + /// Return the raw protocol version number for the wire format. + #[expect(dead_code)] + pub(crate) const fn raw(self) -> u16 { + self.0 + } +} + /// FSP message timeout in milliseconds. const FSP_MSG_TIMEOUT_MS: i64 =3D 2000; =20 diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index 50bf351b64cc..fc34c97a61fc 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -21,6 +21,7 @@ Falcon, // }, fb::SysmemFlush, + fsp::FspCotVersion, gfw, gsp::Gsp, regs, @@ -127,6 +128,19 @@ 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. + /// Returns `None` for architectures that do not use FSP. + #[expect(dead_code)] + pub(crate) const fn fsp_cot_version(&self) -> Option { + match self.arch() { + Architecture::Hopper =3D> Some(FspCotVersion::new(1)), + Architecture::Blackwell =3D> Some(FspCotVersion::new(2)), + _ =3D> None, + } + } } =20 // TODO --=20 2.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012018.outbound.protection.outlook.com [52.101.53.18]) (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 4CA8F31A068; Sat, 21 Feb 2026 02:12:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639943; cv=fail; b=ra3jvERG1YlYwXNmSwyiCt7Dh9fpz/Q55ybGfxbNJZrXSCnrPLftG0iN9VQfw4Uy8gg6N3YZ+HLq071SA8uPWUMcZtb0/O/MpBvSqpp3C2wcVovml5kjYyiXlZ474mTFSszfofkdYh52PUAAE70EVvlV0JEuuDwsZdnqleKz6fU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639943; c=relaxed/simple; bh=5mnvKXL8Ts8RF+1oe2q47QkVY6DRmxwrmYIBKS+jkEU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=pqLLm2+MCMkUs9BmxT559tQaPgxE5XrxQN5iVwIJQ7QMK1dlAVojuPiyRZsR5OYaCO84edz9DiI39XLvZ+NTLslEr4jD5XrM/56mqC/+CmIW8zhuipj88fRo6efU9NIEx1zjWCHp1t9vnXk0UBSbMP4AyX9qH/35rkEz0qJypqE= 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=VpURkDrx; arc=fail smtp.client-ip=52.101.53.18 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="VpURkDrx" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=j/v548if9ARkc/3XNKfZGkcPboGW9mW8SF0JBzaQHkPVuQJ5Zik759Lp+FHbAla7TYCj4tE4XSRHi271ErN3t8QLGcFYkhJAQFBIGXrTWFv9rtnOq4ZjRNc+P0f3MfEqsJCJII47O956eIurCdrKTNFx6jbH/yMODJoUZnLvZkhsf/lq7ukJelKYoUapR6OscbahIk7Pe1963oDQp8IgFSzmZma3bCgzAhJ6h3bFIdR5ZjnOy6pPxmMybCnwf5I340nqEmAl3ouXofrXdMfRgb3APBF+Az5flyybvVLfgWOlcNlkBBsLiMDqZfVhCbxz3uaeAY6hAQ0cPFAZzBuqlQ== 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=e6n4yNfeWWtXLDUIX0DocwaYuUwAzaRA72WguG1NQFc=; b=INPVsG2/UOT0Br4d4mlV6/gzEQKhg/sFjc7Fex47DqkzprRNS/O+RjIOuzF8iqXIkRQOAvmpcrq5GHuhr8J0K3qYXkcgcKNjBaNyqf0XvlBZVQSOnnNYxCnRUP7So1UeiA+hfcpy6l3rutnN7rIge7TRVqQ45Tbk0O57x86gC9v1xoIJPMZF34L86B0BnArXxaGSy3D0/ag5XrUEhAUzaafj7J4r3aXJCHb0EEU1EdGCxYoKbf7YTp8Gr5AdjxVOIT/BTiEAgIBktme2o70jIKkMNZy2sNcRlIm+bMTpxWmpjLayhqAa900sF4Jm6sS+YIPCk8sZNlc+x05TvzEH7w== 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=e6n4yNfeWWtXLDUIX0DocwaYuUwAzaRA72WguG1NQFc=; b=VpURkDrxLdPN05jKFDFUJ42hSHPYys/IjJ1Gaf3sL8QHjAAIBHzum4nTxz8kfX3KoYhSLWLqf2fSb4wLykyX9+x9GhD8bdJTsony/zIyKiQapnutusoEShrxAM6M8tEz5ZcifJ6fzsOHtSrZvR8c0Wv1+Cz8A1p62yd8zqzH9O9Vk4eEDe3Yc8lqYDZmwoPzg9zHVkjOphXftPV0efAlHsz+yPbNqQX70jBWRqJbu3/8MMZpT8pPjhThK6iQYXw94hRJ+qGpQiLyJndziSM4H6flKdAP+4T9QLaZZImd/EGwm2UlMLhMmGMRK50jUF9aONGbREHGyy0aLzwjAZuBCw== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:10:30 +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.9632.017; Sat, 21 Feb 2026 02:10:30 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 29/38] gpu: nova-core: Hopper/Blackwell: larger non-WPR heap Date: Fri, 20 Feb 2026 18:09:43 -0800 Message-ID: <20260221020952.412352-30-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ2PR07CA0023.namprd07.prod.outlook.com (2603:10b6:a03:505::9) 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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: 08238378-e7f8-4e09-bbbd-08de70ee6329 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?QlpD+DYHsGJ9UQLY0pNp6Vm7xjgD0XadMc5m9Zoc+J9AESSQtzWUIGqN4VKr?= =?us-ascii?Q?pbAyBqyTUkntwqWspUU75NmFn14TQHoyt3EZtpcRQrQBmzRMNtVYW1ioAHCt?= =?us-ascii?Q?jOoCu8yiNpWgAcG48PWQJPqOil/WXSDUESPE2yM/q1Qe7GjWNkQggKJD1TSQ?= =?us-ascii?Q?8bGmMT2oGLf8f2v8twTp85DXeFrkxdwHpGcXnFI0bwnAIRRo34qN5lsJxCv9?= =?us-ascii?Q?8c3diRpZoMFfRvnEmFZ+uk7k+SEEBLVvvLFTYWv3t6/bmks7aNqzZr4sUUEw?= =?us-ascii?Q?kzfgy9UCMHoZf7V5d+C5lhKPNv1MPDZYoi1KQJ0+MFDcxHVkkwN++RUtpPRk?= =?us-ascii?Q?WzcDdaqnWVLsb9pui+gBuVW+gUwudSz/gnakUMDzXjlHBUc+kZmajOlols/T?= =?us-ascii?Q?WOCpGhPDlhWLG9twqtDszIno3rP5eukdA3TMI3jfoOyPuUppMNiPeqNjHRzt?= =?us-ascii?Q?px4Jg4mXYnOiJLDRT+6uilxpfLC3EcO10KYyq97iwQ8WYrsRX9uh3qw7Q4Yq?= =?us-ascii?Q?sh80ncHYF+ZdKAI+6YNXKIfZ5yMuhFrTfMASRGSOUN1g/gPuGjCguHkBEX/o?= =?us-ascii?Q?wBjrXBVNCta47DXbitipYT1md44QVIFbCCqNreU5BFEKPqDHsz5FXJrumxQQ?= =?us-ascii?Q?6cFCOpU2Yk701iM0u+kMQKffPJugYDgEKOJ6EfG5pNYuebeT5zR5rNnyjeFW?= =?us-ascii?Q?pw4Dbbod0tQgpTm9RdckrRRPVyg5j6q8oMdtFo2b1UOihcyJr1BS0NnSWciQ?= =?us-ascii?Q?rT9W0kGiu6VlouOTNo7FFDWaUh8LH6OI5AYdqnh8NuQlTv6+cy2WxZM3Rx0o?= =?us-ascii?Q?L+PZLfSVVyAZhn89ExW7FE3/Rfa1ZWUNks/nOE2tm5nLAzRyeaGb/A7JqWuQ?= =?us-ascii?Q?8l/QxyABB0lh5ZwcAxBppYAE6q0zdN2kTTlF/TqzfH8JTgY7kGEy/nYmqR01?= =?us-ascii?Q?iTG/7vp8/jO7CLuGlBFOxeSTyznE0wXANchQIVERgVQlX8cqVfN2wK1pXOoD?= =?us-ascii?Q?ATsA3stKAvRYFhbAF5pjJt/IkHc/vzBnmrcatNsG5KAP/eomeQBBSBhvRXvS?= =?us-ascii?Q?D6aH3f23XqFtS180L2o2n674Rc/tWdObo1w0d2/4mmf/UtX2u0vy3SjGBgw8?= =?us-ascii?Q?5OiXTdugYbi/opCaShirNmzgiZQfb969U+vFSfA5pU00B6wO+s0TaiNvvgfg?= =?us-ascii?Q?WQbODHUEHlPWHY5A/0hNrdzgUEahRjpi6ktw4H7qC8q61/eHsNoRRMqY9ec5?= =?us-ascii?Q?B9k40+PfjcGpbZnWvHSbKYRYUD2vtNPu1lOhD4nRAhN8UvA7ePDx387lTxnP?= =?us-ascii?Q?Ti3jTnrzp4D6ZAHyvmhweNGz/4bqcRVQXMRVqlEUCB/IqRt4gjg1RaUNyoaw?= =?us-ascii?Q?9yOGfVndf9L0SWTHo4WUTscrzRJ5l9H0qHtYZiZ4Rfwmw8TS+vVc+bfrkYc0?= =?us-ascii?Q?0n08Bf1hjEgetcHakRb8aIQt2corQzudaW13Tgb/haOMU230u+FyCsfvIU3s?= =?us-ascii?Q?0xMKSpW+JYK6Y7wOdNaxQN1k3lDQYvBVXoHL+wVRlutQl5nMHNifUWHLORcT?= =?us-ascii?Q?iXSTmW/N8UF8Bu60IGI=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)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?/Z2Ed5epozgoqRLO2TIfKINmFquvFmOUWKtR1Jz0DAqhwP+/3iVDBkT2J6CR?= =?us-ascii?Q?gFLDj0tyK6FWKWAqV4bndqzDP0B16VIvjqsVMqggwzApM4WT7IIqGHPTDv+i?= =?us-ascii?Q?ZesyU7Ezh3Hk8DZHABTuLtpbyB0MFAuwriluEKYtBCK28N7PL1M2kFHAJsNM?= =?us-ascii?Q?MoSfzGDcPVwDJrhnuzD4Ttud7x8rgB1JKxyDuxm3mCMk2zrZjY1PEcreyVgW?= =?us-ascii?Q?3FuF+dYCse5EYKypeKb2gZyrHwhqpYsSU9OmGFrPmevWWgWjnr1aq6GgXk9X?= =?us-ascii?Q?nYb/ULPFAr6a0e6o5ThF4ETrU3FYjEd19U4lVZoOxl6ct0JEVosrsJATefnL?= =?us-ascii?Q?JJaGtMU0lj1NCTGb/iwbMMTMryz/YU3ro2XII26Boetu5jAZnv+fZjDTDBCF?= =?us-ascii?Q?eXfp3cop9crIwtaBVkx744SjlMUv/L0VCrWe4XjcYUBUOn1Q7Pc8phe05h+f?= =?us-ascii?Q?NNt6oiQky/1on55yZ4NyqbVb3lHe5shMpBImEl6Dw33xaq9lMhXrBdRNT71O?= =?us-ascii?Q?fTcaHCgGyB3a3lzL2YE8rr9F95Zadqh1rO8y8rY3tl0ju8l2JTGgPZ2VbiEh?= =?us-ascii?Q?aH6x8tBdb9U8ct4ZV7Xc9+yFDKAsmGWKOHpkryKMIu9Zt6Asr6vs0uhPlhxW?= =?us-ascii?Q?M7vMG1/LRkoW96kO/qqJl6WdvXA/nbZCId9BnCfFaYyG7OXn3fUWvLcD0qyl?= =?us-ascii?Q?kQoz4cUTNbE8ITPSzzMR+WLRfWP6lquFVVZAxiJlGc6YJqFYK5xOUEg7sl/9?= =?us-ascii?Q?iRS5KxNq+PzaIlXGXtRaRt0wsMETuBul0/+PwJhhoaSuwovnqI1oMu7FIR+s?= =?us-ascii?Q?5uQeDqR9y01Zqr0jQ8Y5NMS12TJm8gd4L86wzb7g7T1dZCtt6wlegOUWWzaC?= =?us-ascii?Q?kOBJK/h01tnkrzTvQVjB4yhY2LO2P05KzAbSy7kPQf2MlYItm/kAm8RAQ+2o?= =?us-ascii?Q?ACC/aYV0Ht7Kw9fq1p5PK9j6s492BCf7VpHYy0I/Dn0JZV/PmQWZDrXdpx4N?= =?us-ascii?Q?6hT4yFZX2GRKsNSJeLJSW7hiI4pGKT04mirjy4qmDeAiaZqumwhnWfpDpiJR?= =?us-ascii?Q?eo1Uk9cvXSnWAcdjTJaPMDc2Vxj0yM36lP4UfdJnNitp3UJJjT8XVbeLnGao?= =?us-ascii?Q?0EG+V5KBRGD0y/SqHR2uOomNRM8D/R3uGxSeQGRWZA2oTY0aTRplTwAGQ5Y0?= =?us-ascii?Q?NvGw93qSiD2/dEHJMnyeQOEcOl4gPfSV6dFkCGf9egixsMG0UVK+T6MLLGex?= =?us-ascii?Q?UM3fUEqlKrl1rGT/61GZPnIuJkd2ITIfuGFX1BOjrH5wEgcVJUmswCfN/cWh?= =?us-ascii?Q?NLnTMXPFJH3WZF8Tf/gRwicXK6uF/E4qfi8SysH7WxyUWXcS12zQDwgZpvHR?= =?us-ascii?Q?m30zcR1SSa5gs4njK+/r4tQJJ3ak5Mu9teC61Fefris8GpZt4KWwmdVbnL0x?= =?us-ascii?Q?ta7b58DXL3/aHkt65jQ9dky5pqxjEiXLUKOw+C+geEWOL3PZIc/yafXAYU5T?= =?us-ascii?Q?U4jfQ3zCTgMl2apccNYkWkR4f3p3ySptfXKP5eE9BGqipyRT0V3LF1IAN76X?= =?us-ascii?Q?11ejoicTQD9uBNSUcndTwsAc+Fe05czonq86t5Ex3XWZ9aUGmt1jeLcekxT1?= =?us-ascii?Q?8/PHn/vXVWtuyRaYJai2M7CMiU8diuzpYsjCLpBawbJRkr4N2CsOExvo721/?= =?us-ascii?Q?OJUgEA+MXMyWl/giU/9cs8q8I2bvNY+uCKw8JdU4NjPhUkCxGo8St7FICtMp?= =?us-ascii?Q?WKj77JhOSQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 08238378-e7f8-4e09-bbbd-08de70ee6329 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:30.2587 (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: rZspnp6viBTuoiqLdq9gcIUvYGuYWsPvw53mIptlJuKy7ddZlXtk8qkNi06xjos+gDDmJvgUrLft2GFu7OdaFg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 Content-Type: text/plain; charset="utf-8" Add dedicated FB HALs for Hopper (GH100) and Blackwell (GB100) with architecture-specific non-WPR heap sizes. Hopper uses 2 MiB, Blackwell uses 2 MiB + 128 KiB. These are needed for the larger reserved memory regions that Hopper/Blackwell GPUs require. Also adds the non_wpr_heap_size() method to the FbHal trait, and the total_reserved_size field to FbLayout. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/fb.rs | 16 ++++++++--- drivers/gpu/nova-core/fb/hal.rs | 16 ++++++++--- drivers/gpu/nova-core/fb/hal/ga102.rs | 2 +- drivers/gpu/nova-core/fb/hal/gb100.rs | 38 +++++++++++++++++++++++++++ drivers/gpu/nova-core/fb/hal/gh100.rs | 38 +++++++++++++++++++++++++++ 5 files changed, 102 insertions(+), 8 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 0e3519e5ccc0..8b3ba9c9f464 100644 --- a/drivers/gpu/nova-core/fb.rs +++ b/drivers/gpu/nova-core/fb.rs @@ -31,7 +31,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. @@ -99,6 +99,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(usize_as_u64(SZ_1M)) +} + pub(crate) struct FbRange(Range); =20 impl FbRange { @@ -253,9 +262,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 Ok(Self { diff --git a/drivers/gpu/nova-core/fb/hal.rs b/drivers/gpu/nova-core/fb/hal= .rs index d33ca0f96417..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 { @@ -28,14 +30,22 @@ 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, - Architecture::Ampere =3D> ga102::GA102_HAL, - Architecture::Ada | Architecture::Hopper | 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..bead99a6ca76 --- /dev/null +++ b/drivers/gpu/nova-core/fb/hal/gb100.rs @@ -0,0 +1,38 @@ +// 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 { + // 2 MiB + 128 KiB non-WPR heap for Blackwell (see Open RM: kgspCa= lculateFbLayout_GB100). + 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..32d7414e6243 --- /dev/null +++ b/drivers/gpu/nova-core/fb/hal/gh100.rs @@ -0,0 +1,38 @@ +// 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 { + // 2 MiB non-WPR heap for Hopper (see Open RM: kgspCalculateFbLayo= ut_GH100). + Some(0x200000) + } +} + +const GH100: Gh100 =3D Gh100; +pub(super) const GH100_HAL: &dyn FbHal =3D &GH100; --=20 2.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013016.outbound.protection.outlook.com [40.93.201.16]) (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 9112932E745; Sat, 21 Feb 2026 02:11:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639876; cv=fail; b=ZGoygd59CCo5ZRmP4rtlk0zMBWKKUkMnfuJ+zMjKElcV3Z+sYFf/eP3z+9m6n330qEG8Ifqu0IWfP4o+Q4l5n1PUlJQtL8fnNGFCSAUT8HOHLOXP5+m6i0OOuNb7gwPXYLQ0Y6eQPvppIQ23UHxQF5/zZq085wi1xiQUbR/FftU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639876; c=relaxed/simple; bh=kEa3CP1hElzaRc0mqwSxT8dnuhv1f7AxevSR2hyTyPg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Tj5RTAH9nn51GuDcPXyLMVXqCan1FURhYSgxhSAWztYFB/3q+vqMTFoY2Jcyiy3FCc6oY+rHvkowDYRlHeo66CnwkX2Ma77hEB9Aw4MjCKZjU+SQbq++c/ngUW/9GOoHzTlYXScqtbwe2wRkYvGH/6/W2kstdupLWxmxCwTXVdY= 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=LNMZK1PA; arc=fail smtp.client-ip=40.93.201.16 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="LNMZK1PA" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vj+E2isuRK1XZgW9UERwcAZT6OD1cuhIl4KhI9NgpRxoF7UOcGHmv5q073pk1gsKxHBXeVS4QDf/IucCno97w5DhZiaydeLIJpt0YKuqpvcFGiEBF7+FGFQ3B78plQMYWDZMzTZPNDmE61tlpxH9QFoSSoRnX4+rkP+Yj9vNikl6AQrJpEcC4LaGfKssU9fOpB7mvQET2VSHjXHRy6r4IHf3E8gNKRH1Q55NYIbUNW+/+qz/xcSOM8cTQyROYBQTl+eDKAMwB/X2U2lzEtu9F+NltXF2ZgJzae1OYLP++jjxniZ09QF/TfMUoPCQjvtaLAoprH8hOTwTZbvpmo/cyg== 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=88ZFIBMoN+f5Gb6jNtOLMQqr0gvfeuYQaPTlIijEyVI=; b=fw34e38nvR2af2tuKIIYLpRGXv2ci2oDMSuHERBUlcNXinAyIjGVZES7mDL7Fmz5O0zdwGDXm4nQ4E6PZX28OwrsOEz8RdWjFBQu8rmOqUbiGIUzgKnn2qr5Ghji3Hr/YEGXypyBxHOsVri2VpkuCrP7GhAfoUaYCMB/QYGbpnXxTm850gea2SIyvuLlvWqVkNocwwbSCfTcVf6YSaOSnvv9eTUmSvYC1uPYDSVCCta7zZcd3hU3WocXG58hoyEaWcT+oAPhpm0d7S3q+8fjKCvdMds/ppBd2M/I0CaHSL43F9/ZvrNeXOP0oUzSQlIv/Q9btQ8sdYOFym0oBoMtpQ== 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=88ZFIBMoN+f5Gb6jNtOLMQqr0gvfeuYQaPTlIijEyVI=; b=LNMZK1PAlyeR63UDJsBbVlFi54AYfFhFRhm18Yeu58+i7X630ZKsbd5riiuklgolb/aFIkLdJOhpHwoGgPI7EKzX1GDqaCs16i4Fh8WvKUONptYXG+63J+RkpZqZapu/cRqe/gEONs4t8yV9FP4qNP2mVRcBUaJffN2QkO0D6BRD2UaiSdRypTKR5Ez18IUcpEfkEtZ8s6SmOPF6S9uQUbwHijv1y1nKfu2bGYLdHfYZnXy0RHrH0OudBSrdYxY9G9x7OUz/nb13kGTevXv3rQwJc4EFKoVst+Njfd6wgWzHKTEW+Vv75u1T8/T4FbKudCXhmsdBI9kQoaGXVf96lw== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:11:01 +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.9632.017; Sat, 21 Feb 2026 02:11:01 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 30/38] gpu: nova-core: Hopper/Blackwell: add FSP Chain of Trust boot Date: Fri, 20 Feb 2026 18:09:44 -0800 Message-ID: <20260221020952.412352-31-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY3PR05CA0058.namprd05.prod.outlook.com (2603:10b6:a03:39b::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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: 57ceb54b-fb90-44c9-9a65-08de70ee63c2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?OQXFyJCfbHFXPrRgQyZrC08AY+P8Yibgc4L7YrgzRyG4c3jKVjnrcYpASGm+?= =?us-ascii?Q?FQOUG81SM7A0EeQqrypH2Q6iA7LKfLmcHguww5YZ4UWPSLMBJrL+zNFyWJbU?= =?us-ascii?Q?MZ+3BP/iKFhJwi+D6mq7Zep2whXvtGUn/u2E+i6/MMYVPHn4idc7/4ZZsV7D?= =?us-ascii?Q?SzbhreusXDrMJ5yezZY8APmBqcItAgtu2q/KRd4eCODkT1+xFWmPUPvPW/UX?= =?us-ascii?Q?UBhdETYJSspw1Zv4t9bexL2iYVByn8XAWEWTTo+7EHmYHdKEnhA5bMAuCz3B?= =?us-ascii?Q?XP/GLsnHFqkAW0FkuAKnDkgF77m4Bi55Z3HYctrxxL6U65KEnhkhh3WvdFrJ?= =?us-ascii?Q?lEn0g9LzPaQf+hxDkbbhN/YKF5rmTqqAKF1KY8OpsWzdMutcmeGWzbCEA2rG?= =?us-ascii?Q?50VrchMH3beoBsFGDurlW+0AIoTt48F5hmySO8ZRdTGF+5S4sSVWV6dKU1kQ?= =?us-ascii?Q?5DaDQgAOqHn1xFbv4gBk+2wz7gluYGS44A1JSfr+nw4cSHXdQYbR7yRHYLZ0?= =?us-ascii?Q?ouFfdZumzFD8IIyBBAAmK7NAhs5rPtM62Sn6ZlYuozXsCjMPOnF5JOFJhQEH?= =?us-ascii?Q?muJqPypfNwRothuY+GdhaaGeJ3etUYsXAY5AxzmEN/8dICl9hJphu9YvtCrm?= =?us-ascii?Q?yEf8qEZlVoWyaq2vBrtbHsCdAmpnzpVLvLhScaOzHLF6NDyokfMlzDEktzbY?= =?us-ascii?Q?NptXT+gYSCdy4YIzMOygo4CdiKfw5Qe17VOQDlE1uh112wGXlmyyHvXDJk3Q?= =?us-ascii?Q?zfZg1ks8zIDVekGDwSkEvCVaQba/xSYv+h/6OxxeJTrXNZ5jO6Y1YzTdj5JJ?= =?us-ascii?Q?H7fGxjtEvsSxJnzlurU9MFAtWsVIIAJtE4cMmm/k7gyX7CXnmE9AwGdsneSp?= =?us-ascii?Q?W2BIuxzQntpJXXx4LnUP/C6E2p8B1r2xdJ9BpYrj5up0IT5RRqlOKa4cNRXl?= =?us-ascii?Q?ECPWYNabW+i6rFJQX87B6Nyn4C6cUqaPRslnwllPtxySgokfcaX1wpNKPi/J?= =?us-ascii?Q?jjMds9Ci7OePd/8pUo+Ot7R18tfUsGZ/du0yh9+dfwhtpIq5IprimCt6mnDi?= =?us-ascii?Q?9UBMlIq6mn3LLZ37szIxXw6GPb3EX0nNq5TSuswcvbx7HMzi19RhoePXZYVl?= =?us-ascii?Q?iHrEh76GskH6s8jaxj439qsDonms7y2rT9ijW0ac6kTFX3fZF5TNLU+2jUJB?= =?us-ascii?Q?MsXlNDi23ZdpQsZbNE2vSl6x2aSWuvx5Oqa43OrHMkx11hSWVOXZLda52naQ?= =?us-ascii?Q?kuhSWPzVt6Gw732yJMW+khl2bA+NT75olAaHUQD7/8qYCLSDxduRXuxoK0RY?= =?us-ascii?Q?+10GPn8hlnvHz4U0ESJKgN9Xs3PzrRWLFlcviU/OoC7/tyGbLLm7/qt1zWyj?= =?us-ascii?Q?bqQYFvINOZYVq0/8++5Xu+ePmPY247BjEVvQCZ1P9DdncxHaHb6XyvCXgqK2?= =?us-ascii?Q?kTARIqFiWcF95ncDB4VAwThH5pN1TXDXFdhlIG+X0E6Q0v7KjJYkX1sA+CT5?= =?us-ascii?Q?L7llqXGW2/Z1laiaaUzE4o/pEkfis7/p85WFivK7kXYezB5kVT3NZg6E+i85?= =?us-ascii?Q?pefC4muVY8jqUuzhwBI=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)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?E4zdJmG8yVO7NIf4SNLIke8+7Cecu7kPv7Vp0uYAVWmzmgNEQ29I+2AWKAhq?= =?us-ascii?Q?buQ7zQx6Tf6NNUBWSnNCqY09yTGkxbxL6XjqJ3PoFM+GQWphMtuzzXojlght?= =?us-ascii?Q?nZZJKgSjXLsudOD6jM7UBlI9y/7H3eJAN616ZPRhQZx6xkeXnU7F6019UreB?= =?us-ascii?Q?o1ypUKo285F9qes1a8m8mJ+tUePIeIUWyVMsQEmFaLSmwqmv34aGgAD1+y64?= =?us-ascii?Q?QBBds2MAe0yqT2b4ukcdsL1D9KIgPPbYOrOxhJqtxV0RZbH5w/8yCefzZep6?= =?us-ascii?Q?/iQervbY6REjxPfIyWTOtepxqy+vc7HwZ0rGMMhLNOSiFBA921iHH55nAI8/?= =?us-ascii?Q?yEj6nx+R2+uHkzKnV1hTtmvm7L9XMgyGqF6B6knh6/GoytMTUj2SC+spvqRo?= =?us-ascii?Q?NQDKUEA0sLgLWKi0RXKMYGlpP042rJ5nNNtwAZYieeQ4Hrawye7V+93BqZTV?= =?us-ascii?Q?EPePTWZH3tuxGG3XJ9QzkbsWP2gQoanOi6PT1NLNXoyQyi+WpWwD2I4W6IY1?= =?us-ascii?Q?V3vE25z1K9VfYHw0d6BGsIdchVX9YQvO3eGmuNCpT76cIMxCen14DGudPopU?= =?us-ascii?Q?pevvjaaY5bJ4B7tlJYqlzbdgBvPHqRrKEEKfgEg9uDRk6vtB9o5/38XgSOCa?= =?us-ascii?Q?8U0Yx2C7QFZPgsLHYN0BDAljWUSZZJgMvJ9oTNZxkKArYhRNJvW+6DetOeHt?= =?us-ascii?Q?ts6n1wom5n9V0Pr14SCD5Yii7xdrEYhEFUSeDbcnCsWcecC9DNu6R66Tjv4Z?= =?us-ascii?Q?Nok9DzX8GoEfbk2heYU4K0VtHBnp/tTdFDy0jBufMTbNK5UYCTZCdZ1M28ml?= =?us-ascii?Q?7JUD45WGn/MNMkBosLrWQWQBF68GVvSDgTDwL6WOLZ7TQoOUwAb/Fs8bez9I?= =?us-ascii?Q?qcTL0uDkP+GsVmg4FryjWux47ZGPmcsrnsBgluOZbslhm/6HAInNqPe2lKPk?= =?us-ascii?Q?JpEuQTQ5T8dYVRKQ+fZYDni+YCdlmMhBRAOvPolpxW7p4MeFwDZN/ZTwA1gY?= =?us-ascii?Q?4pWCvVKfIhAreQfr8d1UNEsrd2IN1RSEYFf+a7ClVjHNqhowXqSTW0hU1veO?= =?us-ascii?Q?QY47ZiMgfvf+9BmKh536VhqXlzrLTn5328W6ySBLT4J4Cr4GOwdmHbtJAkuw?= =?us-ascii?Q?jjaxYsV5EwpuLBJLEx4Vy3w2ZaanzR8daQUJOXjxYQDqeq26h9WIKibeG0yG?= =?us-ascii?Q?nnybmfZ+qDNVQ5gthFAgCAxu5RPxJ1L+EVsfCU2U70LQDylDBUOFhvsMxAwr?= =?us-ascii?Q?nYAMOm0cr0aOJEMNRManXGWcafJCt2BL+aKeSfyPXSicKQVnbCffq712pm57?= =?us-ascii?Q?vYu0TSXzFyJpqpl7UD4SELFbGp+FcvnJkbAwT2vq9DUvliG1R9wM+7R6ELQh?= =?us-ascii?Q?MoXwthPvuCYUiCjLeyjFwRDBnAim4s0iVc4hH/fIEo863bc4mVbrYSG63jnr?= =?us-ascii?Q?2QUaTeYGDbdfm7GwoQppUrfUEo1ukJJ2Hn/0FTuNNHVz3bRb9UmbuM0SdeH3?= =?us-ascii?Q?s1KxhlXVTExEac1r4G7l1yyv8Yl8av8XfaWFAxHK+ke8ub8ydugh2W83oFw8?= =?us-ascii?Q?K8YT26LllLS/YjUzDBPTyLBsg/6UF4xeTXIyVJvp622+34/unvrDUI3r2pZJ?= =?us-ascii?Q?01PA2TAqdmcdSvpo6YiKdyFDeLiGDYyO3fePfYkssvqrTK33yNvltya/FK41?= =?us-ascii?Q?LsuvM6yqyCc3wm1pseSXKqgu7+ImhDnyomHp95BRV+/TUNA05atfhaq9+9Ws?= =?us-ascii?Q?bgnS5YaaKQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 57ceb54b-fb90-44c9-9a65-08de70ee63c2 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:31.2689 (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: 8MCmbu6t31QkGCbpddoRux57oiMMDV5pPHGpPhpax8noTpm94krMg1euHLJnnT//XXbKIVmR5UWdG4EM0dos1g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 Content-Type: text/plain; charset="utf-8" Add boot_fmc() which builds and sends the Chain of Trust message to FSP, and FmcBootArgs which bundles the DMA-coherent boot parameters that FSP reads at boot time. The FspFirmware struct fields become pub(crate) and fmc_full changes from DmaObject to KVec for CPU-side signature extraction. Co-developed-by: Alexandre Courbot Signed-off-by: Alexandre Courbot Signed-off-by: John Hubbard --- drivers/gpu/nova-core/firmware/fsp.rs | 14 ++- drivers/gpu/nova-core/fsp.rs | 134 +++++++++++++++++++++++++- drivers/gpu/nova-core/gpu.rs | 1 - drivers/gpu/nova-core/mctp.rs | 2 - 4 files changed, 141 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/nova-core/firmware/fsp.rs b/drivers/gpu/nova-core/= firmware/fsp.rs index cea9532ba5ff..bb35f363b998 100644 --- a/drivers/gpu/nova-core/firmware/fsp.rs +++ b/drivers/gpu/nova-core/firmware/fsp.rs @@ -13,16 +13,16 @@ gpu::Chipset, // }; =20 -#[expect(unused)] +#[expect(dead_code)] pub(crate) struct FspFirmware { /// FMC firmware image data (only the "image" ELF section). - fmc_image: DmaObject, + pub(crate) fmc_image: DmaObject, /// Full FMC ELF data (for signature extraction). - fmc_full: DmaObject, + pub(crate) fmc_full: KVec, } =20 impl FspFirmware { - #[expect(unused)] + #[expect(dead_code)] pub(crate) fn new( dev: &device::Device, chipset: Chipset, @@ -36,9 +36,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 8926dd814a83..c66ad0a102a6 100644 --- a/drivers/gpu/nova-core/fsp.rs +++ b/drivers/gpu/nova-core/fsp.rs @@ -8,8 +8,14 @@ =20 use kernel::{ device, + dma::CoherentAllocation, io::poll::read_poll_timeout, prelude::*, + ptr::{ + Alignable, + Alignment, // + }, + sizes::{SZ_1M, SZ_2M}, time::Delta, transmute::{ AsBytes, @@ -38,7 +44,6 @@ pub(crate) const fn new(version: u16) -> Self { } =20 /// Return the raw protocol version number for the wire format. - #[expect(dead_code)] pub(crate) const fn raw(self) -> u16 { self.0 } @@ -221,6 +226,73 @@ impl MessageToFsp for FspMessage { const NVDM_TYPE: u32 =3D NvdmType::Cot as u32; } =20 +/// Bundled arguments for FMC boot via FSP Chain of Trust. +pub(crate) struct FmcBootArgs<'a> { + chipset: crate::gpu::Chipset, + fmc_image_fw: &'a crate::dma::DmaObject, + fmc_boot_params: kernel::dma::CoherentAllocation, + resume: bool, + signatures: &'a FmcSignatures, +} + +impl<'a> FmcBootArgs<'a> { + /// Build FMC boot arguments, allocating the DMA-coherent boot paramet= er + /// structure that FSP will read. + #[expect(dead_code)] + #[allow(clippy::too_many_arguments)] + pub(crate) fn new( + dev: &device::Device, + chipset: crate::gpu::Chipset, + fmc_image_fw: &'a crate::dma::DmaObject, + wpr_meta_addr: u64, + wpr_meta_size: u32, + libos_addr: u64, + resume: bool, + signatures: &'a FmcSignatures, + ) -> Result { + 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, + )?; + + 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)?; + + 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(Self { + chipset, + fmc_image_fw, + fmc_boot_params, + resume, + signatures, + }) + } + + /// DMA address of the FMC boot parameters, needed after boot for lock= down + /// release polling. + #[expect(dead_code)] + pub(crate) fn boot_params_dma_handle(&self) -> u64 { + self.fmc_boot_params.dma_handle() + } +} + /// FSP interface for Hopper/Blackwell GPUs. pub(crate) struct Fsp; =20 @@ -315,8 +387,66 @@ pub(crate) fn extract_fmc_signatures( Ok(signatures) } =20 - /// Send message to FSP and wait for response. + /// Boot GSP FMC via FSP Chain of Trust. + /// + /// Builds the COT message from the pre-configured [`FmcBootArgs`], se= nds it + /// to FSP, and waits for the response. #[expect(dead_code)] + pub(crate) fn boot_fmc( + dev: &device::Device, + bar: &crate::driver::Bar0, + fsp_falcon: &crate::falcon::Falcon, + args: &FmcBootArgs<'_>, + ) -> Result { + dev_dbg!(dev, "Starting FSP boot sequence for {}\n", args.chipset); + + let fmc_addr =3D args.fmc_image_fw.dma_handle(); + let fmc_boot_params_addr =3D args.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 !args.resume { + let mut frts_reserved_size =3D crate::fb::calc_non_wpr_heap_si= ze(args.chipset); + + frts_reserved_size +=3D u64::from(crate::fb::PMU_RESERVED_SIZE= ); + + frts_reserved_size + .align_up(Alignment::new::()) + .ok_or(EINVAL)? + } else { + 0 + }; + let frts_size: u32 =3D if !args.resume { SZ_1M as u32 } else { 0 }; + + let msg =3D KBox::new( + FspMessage { + mctp_header: MctpHeader::single_packet().raw(), + nvdm_header: NvdmHeader::new(NvdmType::Cot).raw(), + + cot: NvdmPayloadCot { + version: args.chipset.fsp_cot_version().ok_or(ENOTSUPP= )?.raw(), + size: u16::try_from(core::mem::size_of::()) + .map_err(|_| EINVAL)?, + 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: args.signatures.hash384, + public_key: args.signatures.public_key, + signature: args.signatures.signature, + gsp_boot_args_sysmem_offset: fmc_boot_params_addr, + }, + }, + GFP_KERNEL, + )?; + + 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, diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index fc34c97a61fc..51a91dc98415 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -133,7 +133,6 @@ pub(crate) const fn arch(&self) -> Architecture { /// /// Hopper (GH100) uses version 1, Blackwell uses version 2. /// Returns `None` for architectures that do not use FSP. - #[expect(dead_code)] pub(crate) const fn fsp_cot_version(&self) -> Option { match self.arch() { Architecture::Hopper =3D> Some(FspCotVersion::new(1)), diff --git a/drivers/gpu/nova-core/mctp.rs b/drivers/gpu/nova-core/mctp.rs index 0dafc31b230c..c4e36a46fd69 100644 --- a/drivers/gpu/nova-core/mctp.rs +++ b/drivers/gpu/nova-core/mctp.rs @@ -6,8 +6,6 @@ //! Device Management) messages between the kernel driver and GPU firmware //! processors such as FSP and GSP. =20 -#![expect(dead_code)] - /// NVDM message type identifiers carried over MCTP. #[derive(Debug, Clone, Copy, PartialEq, Eq)] #[repr(u32)] --=20 2.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011050.outbound.protection.outlook.com [52.101.62.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B0CE1334C1F; Sat, 21 Feb 2026 02:11:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639876; cv=fail; b=hNYM81YzV/oy1CyS+wmV5/qNS7WjSJQxd8uuf2jZHR1Jxw0SCrqOlGAR0yM5DMmvG9W92zaWixnPGERxv4i6jhPFeMELnYVrY3alEHjAybNkod1bmAF1x/jZm3m8KsvqOIDH7vDSaVEW5qBtARcsIlg7qhvLrgIMlJ4aS426Dwo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639876; c=relaxed/simple; bh=MG3tqbtcFh4fO2qXNiVzKJffexuectiBH7YxCzR3n/0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=AfTuV8rq84Qzot5W8Cc02BfYrOKFTiv1F9U3HXkn0UrDh7gcLxV5e7/Bs5B5vnJziiSibMjfeh7V/qhJowHklcbHVTu4rwqjEyNkytpLAsSRBq18iF1rnb0OAzspHnesQm+V7m63xss5P0ItuIsF+jjePRlB0pHeEGjNoT7B2Aw= 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=EWd+Yt6p; arc=fail smtp.client-ip=52.101.62.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="EWd+Yt6p" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RbscgFD6/psZZA/TRE9a3lwd7V/vkpM2N/B9dvoN164ooR/wKrwYVcZBc3WDI0xNjZIA2DgeOsAVmHhkgHLtLUl0g/2S2qikYXKvUNlDfjqydtC50/39XBWjQMup9QR+orZ0RP0v4+pzx8hC5whTVUtN1TMLCbE+IouqAA8kFpmMJG15hxmN3et0O76cpa+Ir5ELd3vkjkRVBPw6OeBnPybf21gPBZmVZDhk8EdtPYMM7Ik485hjZW2c15YX+hh0lRqupQmcE4medoiSmXRNcnYN3em19JiVHwhITlBtwdtcmO0Psl7rQrrPi3m65fPbODys06sPNp5odUIy6U8dAw== 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=PFXbYAyvF5YBYbm2Wi/gbYiKAVR63NzziCjue+b6xA0=; b=eWjPxtassOLLOPWtXj7aiHMDQ4mrLG/UIiy50eZnYe/U1z2hCq3Ln7vJCc1R3ld56GIzcDBRfw3vGy1rZRWrU+M5PF+tYX7YEjyOaNxAYkCtdyyMVVhX1eA0c8gpNQAAbVa8ZDfUBfK4fjDZoERCccgid01fU5b7WRRzgCiFizAZf8qDgDa7LCfnceINkY7u2cUxIpEgr/L+2R4O04mGvwwhTc+i+LDREORjhL/PNxEMNUGthwO6CDRiiwu0xXbBjrz1DPUeyHpaPYzNjNPMixGef4C0M1wyI3SQc7H6QUG4bo3SmoW10qUSIAUwEHRYhu3xmbxc10b4g5t0+qdoow== 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=PFXbYAyvF5YBYbm2Wi/gbYiKAVR63NzziCjue+b6xA0=; b=EWd+Yt6poCqagxtTT2aENIJNmHziLnh+v4Dw4ffQN2xJVqIHpFx7yPmeVtI3vT2MlSBx8QjwPhlkIn3VjlzPuSM0uOC15RDzyPGCM+W/kC3usSVv/fp+gTxyDkyZ5GokL0wRS7R4WkH5U5S6RUYzsMENOrvz4LDOONwfmb1u/J1vQVO85XqhsBHT7M1qVFto/kVZPaalJiro7L5GE9Ez2nR2vxuVe6VLHxBR2PNfn2bnH2mlEmPOq+VQ0xPbyf7DRtcT11Jt0hi0DgkCSI+eReQibLGylJAXghh+0OV+jPVnBerGDY5CaH1Dmp/RFPA6IpPKTBMjJEFZ+6cMqzaGXw== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:11:02 +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.9632.017; Sat, 21 Feb 2026 02:11:01 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 31/38] gpu: nova-core: Blackwell: use correct sysmem flush registers Date: Fri, 20 Feb 2026 18:09:45 -0800 Message-ID: <20260221020952.412352-32-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ2PR07CA0021.namprd07.prod.outlook.com (2603:10b6:a03:505::23) 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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: 130d6b33-6da1-4f41-a45d-08de70ee6483 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?9NC4O5n/2ovrS4IxE/gn72uMi32nIpEZUIFwIm8xgpLBKBfoui3yf8lH/ks6?= =?us-ascii?Q?Ggoa/2PO6C+CDjHTCcQjDdHtA1C6xL9/+a+ZYZQvZclrrqymx+KucjJ3Tjme?= =?us-ascii?Q?cafrLz6OIFlHr64rogvj7gBctCEamJ/4W2AfRZXOghY1am4wU3ZGiOugbyMH?= =?us-ascii?Q?objBXjjkcHmVXT7wW7dAnffMzCpvJOfAXiOAWeRLVyl3gH/RJOBaKuFbGQTe?= =?us-ascii?Q?K4RZofmlHB2HQktVXsPpyJMDeKis7y/R/gZONe1zfvFpjYKRdpqJKtGUciOc?= =?us-ascii?Q?CUzZZfMMrQI3gqrAagn4BZrPyCOmxAgtjW/MvIO1Adh1QWTe7JFCwAK9GwXP?= =?us-ascii?Q?YLFQbAFFlH7EAuRLW2VPX3lcNhsSff4sQZEb/uSYBpAfr8G+EXOyTSng1Uni?= =?us-ascii?Q?yuS1A5wTJ7PZfhbiCmYiX/hWG0dbfiz3gcZyAXQU+2wHP9IRgYKPLhQvjb9s?= =?us-ascii?Q?3TGqw1diT86+znrlYjYcajZIo90lKcwtSSQWhjkP21Ap1UEFDmNH6K7OMPdK?= =?us-ascii?Q?vPHeh0mOorgyur2ldPnvllO1HbbZZeGxW3cGEVsx6ZCU9AekHO9QTF40EFzz?= =?us-ascii?Q?L84KSBzgiG3ualtMoMVB7PP+4nNfmD0i3bA9sD76iTV64xX9UEMuW8O6eLfE?= =?us-ascii?Q?sbLKzujUFhQLd2NX34CtFmK328grPEHpN6iLo5G+If9Wse3Hf6jasnVMgeYo?= =?us-ascii?Q?0NHfUE/8Uh0u7dI9+3VCN6rYifQ0B3f9YGIIPbc2H+arfw9ez9oTJtQ2I8XR?= =?us-ascii?Q?rnIkrxN0xi6sfcYiN0Zldk4MK/BPoJ12oBZcU0YeYQ16jXuvPdb/yPINwQYB?= =?us-ascii?Q?QrKt3xm0vdvOzRHX2Whv/s3OoJghn/kaot+b81Y1q5TOndTr6j7Y0iZNxg8X?= =?us-ascii?Q?6DI+MZwMB+8JZ9AgLxtDjoBp7L+5iRH6FFmbpl7dtgy5eM8j8IYVG1DMDfvl?= =?us-ascii?Q?w40BcnyOqaAiO+irA9NIy2NtJQh8akAZTIKG3yOn1N0Cq9tQB4NwG/2lPfHw?= =?us-ascii?Q?LhHN0lbAaN+IkAxgxRbpIjfUlt55ldM9hBk1J8l58SF+xiUcqXFSD2shiN46?= =?us-ascii?Q?vvMX1rud3+E9FTHB1Kmgzzkpe+RfmV3Hrv1/L1LLkxdyVYyla3Imiia5vAu6?= =?us-ascii?Q?qm8me2zx9tpP87iglm+A51M3I4x5yP5PeDc6Pa5xfv0teCycWDoTFlmEH/z+?= =?us-ascii?Q?P1jvvmlTFqg7CilbBXJpgHMUOT6BwqweFtkZLyrOkhOf53UiNV2LM4sa83Fb?= =?us-ascii?Q?2gJRHYTh4Jkp5aYS4m/ir2KhxCxugYdqpdUzVWrcsUfVnLTCSODHq815fvyi?= =?us-ascii?Q?K//o9CEbYv3FD0DEaGH9LsEAvumkQZ/J/Hso85MvpjqD2jj30LlLzom71DF4?= =?us-ascii?Q?V98oHZVvhXv6sf4IO7aTp1WwOOefALOnP/hMS+bLxAWvmmKQbj5cbZniVW9N?= =?us-ascii?Q?ICEx5YHeRGF+4G9ThJaVGg+tKOQZj/7PXhqYd7ZmCxnvi9aAkKlbViBHuyJF?= =?us-ascii?Q?s7Uf77bYG93XGkd2/DZjn3VNYpJAL1f39famddnBw8ISa4KPrEXqQ6O8IhBy?= =?us-ascii?Q?VPkAYZvc614zeQ/vmZU=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)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?11kgi0oTKSQAsKm+9BVKWiJYZ5E51q57oThSWXjVv+yVXY3qCnB96ht7Sug+?= =?us-ascii?Q?p5ehSNeItLhVJEd0PcwdqyN+K8N0oYoR4XR+X0/+USJElqVMMT/zIreZTORo?= =?us-ascii?Q?VqyKc6bFCt8tWJ+0ZzW8Sb1S/z+FmweJGGyY11OOdIoyjTijQOE1c85FqAyg?= =?us-ascii?Q?/IlDhFo9Csb0bYENV2FWzYc2+yGq0+/v9+vuD47hoKYNIP0m7FywB5Q+sjnR?= =?us-ascii?Q?SXfULV0P63SPRV1I9khYA5I0XGdkR/VfUn1vwkszZ24IpLIeVBo7INs9Qfu5?= =?us-ascii?Q?pfGHXVlX1pB+1U145xqWXgtha4G8zLa29oLJh49qWfyHJ0n7MN0OHBTUEZ42?= =?us-ascii?Q?fBv3o+CDKDZyuW3C/IAyBuVJTqZ0KwIZMro470p4jVTK3uHUhuaAUSm+RHKa?= =?us-ascii?Q?cfiHxDg9Nh5DHS8rNn2WPGcAteCz6jV7SjVplQOBcXwdaxPciygt9BSvIrq1?= =?us-ascii?Q?XjPwvNrVcFPSBZ6Od0iFyt+TV6YuIAHd7mXnmMn/xr97RabzOu5aZWwn5aDg?= =?us-ascii?Q?mZxmvQauJ4tGdL8PLW3bAZVoOQvFPERIyXQfZNSi09AcflHqfnxXoYvvndu7?= =?us-ascii?Q?MsE9bwH0oAYdYSJqOjTJ20NEzgwsd4tnfrfgwI+v95QLRbHZocLG/Bb7rSvm?= =?us-ascii?Q?54nH1N8gTxGGt5K9IBj2cyEegwdHKtSDemvKbnkBFFzXX30LO5mHnotQXvqo?= =?us-ascii?Q?u3S7VIDPRo1kZ8GmHYcR9rokOKwpf5+Iokwg1asFSFPcTJUm52Zha6serXCi?= =?us-ascii?Q?weI4bCKzsLE74kT8ZKiQFoxUhaM3bKcAKq6E0MX036aOVZ4DfWr52i0nkZrK?= =?us-ascii?Q?i2rs5GlKmp8eQrSAFXLkrf6oEiHMDwgCVE4JA9+hGfH2/ZgBDHDQF/dNhNef?= =?us-ascii?Q?NdBtDYtOSEQ2/5nFNY0nh4Y1stpxf/0+zEcQ52Gd92hd2POSr1RwX9lRYAjx?= =?us-ascii?Q?KdFcDDVIMEyPQp/esfjQayGYNmQw2D0BrNVUTE6gtqY2298oIJV9xD4kWMwP?= =?us-ascii?Q?LQzqtCbfclJwQ25PKodm5jupHcu8LddO71lr2Il2Y2P5obUvnLNWanN9iGPT?= =?us-ascii?Q?sEUJpinUOQrHUdsU7pHVOtF9yOkQkZPvLQ33dlU5xYwmBmMX+EsixqEu6zUf?= =?us-ascii?Q?sRBdriyNHWrGb4FQFGb0lxK1SArapbhywKE2yXrYq3b2Gb1AFuA5KIzvJjcD?= =?us-ascii?Q?4eu1qZswc31cYPb2klEoM3/7c8NoGmLySsxPhxsA8HQzn+Uay/zGSgRYISju?= =?us-ascii?Q?43CHIoSeoVfADnEcnQtI/8FYMzP05PW9o0Ku1gUFnA+VkvDFtElbu/TwtuoQ?= =?us-ascii?Q?lVbBaZ2zW5kgY09jRdLJNNM5cx72QaueY9IpTbl1RJZqoDDcVs6KBM0x5aoL?= =?us-ascii?Q?t2AldrX/vgXA1RLZDctwvYKU6kD4OpXqnnhOOSA0jRDtO+mLwet20m/vfhXt?= =?us-ascii?Q?PjIzg6MLWQmJGQDlQqeSVvOnDiuRRUz97+BnjpUPJ8qYsbXU87g+tUiOq9yH?= =?us-ascii?Q?fxFCxUyPiI0U76as9nHc3Dl2+eaCahrE7YuBI7KLRIqg4iSWzDlDe62WVUbl?= =?us-ascii?Q?pJp0YeqmaloYiU8fphOII3A02YWmDA2AgHMdx9hLUp5tHHrIILJ1QjouPlPZ?= =?us-ascii?Q?yA4LeNycWgOnJh/Wz3pC8vefcboYMFRVY/GZrVO8IEnJSODK4UQN+Mq8zatH?= =?us-ascii?Q?39TxyhGfqUf8vXDZoSBJQbX1UMJu5YqTysq2x0xce7DNXI9VxmgUbDVurBk6?= =?us-ascii?Q?X64bzQDSqw=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 130d6b33-6da1-4f41-a45d-08de70ee6483 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:32.5576 (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: D17eX/CGyJtMLeBri0sI+6YRdH2IzTbhHOJoa4aIDHV8TuhV0yMODjolTCeIxT+Vpwdcz+OnkP3vk/CxJG8Wzw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 Content-Type: text/plain; charset="utf-8" Blackwell GPUs moved the sysmem flush page registers away from the legacy NV_PFB_NISO_FLUSH_SYSMEM_ADDR used by Ampere/Ada. GB10x uses HSHUB0 registers, with both a primary and EG (egress) pair that must be programmed to the same address. GB20x uses FBHUB0 registers. Add separate GB100 and GB202 fb HALs, and split the Blackwell HAL dispatch so that each uses its respective registers. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/fb/hal.rs | 10 ++++- drivers/gpu/nova-core/fb/hal/gb100.rs | 47 +++++++++++++++++--- drivers/gpu/nova-core/fb/hal/gb202.rs | 62 +++++++++++++++++++++++++++ drivers/gpu/nova-core/regs.rs | 36 ++++++++++++++++ 4 files changed, 149 insertions(+), 6 deletions(-) create mode 100644 drivers/gpu/nova-core/fb/hal/gb202.rs diff --git a/drivers/gpu/nova-core/fb/hal.rs b/drivers/gpu/nova-core/fb/hal= .rs index ebd12247f771..844b00868832 100644 --- a/drivers/gpu/nova-core/fb/hal.rs +++ b/drivers/gpu/nova-core/fb/hal.rs @@ -13,9 +13,14 @@ mod ga100; mod ga102; mod gb100; +mod gb202; mod gh100; mod tu102; =20 +/// Non-WPR heap size for Blackwell (2 MiB + 128 KiB). +/// See Open RM: kgspCalculateFbLayout_GB100. +const BLACKWELL_NON_WPR_HEAP_SIZE: u32 =3D 0x220000; + pub(crate) trait FbHal { /// Returns the address of the currently-registered sysmem flush page. fn read_sysmem_flush_page(&self, bar: &Bar0) -> u64; @@ -46,6 +51,9 @@ pub(crate) fn fb_hal(chipset: Chipset) -> &'static dyn Fb= Hal { Architecture::Ampere if chipset =3D=3D Chipset::GA100 =3D> ga100::= GA100_HAL, Architecture::Ampere | Architecture::Ada =3D> ga102::GA102_HAL, Architecture::Hopper =3D> gh100::GH100_HAL, - Architecture::Blackwell =3D> gb100::GB100_HAL, + Architecture::Blackwell =3D> match chipset { + Chipset::GB100 | Chipset::GB102 =3D> gb100::GB100_HAL, + _ =3D> gb202::GB202_HAL, + }, } } diff --git a/drivers/gpu/nova-core/fb/hal/gb100.rs b/drivers/gpu/nova-core/= fb/hal/gb100.rs index bead99a6ca76..831a058a388b 100644 --- a/drivers/gpu/nova-core/fb/hal/gb100.rs +++ b/drivers/gpu/nova-core/fb/hal/gb100.rs @@ -1,21 +1,59 @@ // SPDX-License-Identifier: GPL-2.0 =20 +//! Blackwell GB10x framebuffer HAL. +//! +//! GB10x GPUs use HSHUB0 registers for the sysmem flush page. Both the pr= imary and EG (egress) +//! register pairs must be programmed to the same address, as required by = hardware. + use kernel::prelude::*; =20 use crate::{ driver::Bar0, - fb::hal::FbHal, // + fb::hal::FbHal, + regs, // }; =20 struct Gb100; =20 +fn read_sysmem_flush_page_gb100(bar: &Bar0) -> u64 { + let lo =3D u64::from(regs::NV_PFB_HSHUB0_PCIE_FLUSH_SYSMEM_ADDR_LO::re= ad(bar).adr()); + let hi =3D u64::from(regs::NV_PFB_HSHUB0_PCIE_FLUSH_SYSMEM_ADDR_HI::re= ad(bar).adr()); + + lo | (hi << 32) +} + +fn write_sysmem_flush_page_gb100(bar: &Bar0, addr: u64) { + // CAST: lower 32 bits. Hardware ignores bits 7:0. + let addr_lo =3D addr as u32; + // CAST: upper 32 bits, then masked to 20 bits by the register field. + let addr_hi =3D (addr >> 32) as u32; + + // Write HI first. The hardware will trigger the flush on the LO write. + + // Primary HSHUB pair. + regs::NV_PFB_HSHUB0_PCIE_FLUSH_SYSMEM_ADDR_HI::default() + .set_adr(addr_hi) + .write(bar); + regs::NV_PFB_HSHUB0_PCIE_FLUSH_SYSMEM_ADDR_LO::default() + .set_adr(addr_lo) + .write(bar); + + // EG (egress) pair -- must match the primary pair. + regs::NV_PFB_HSHUB0_EG_PCIE_FLUSH_SYSMEM_ADDR_HI::default() + .set_adr(addr_hi) + .write(bar); + regs::NV_PFB_HSHUB0_EG_PCIE_FLUSH_SYSMEM_ADDR_LO::default() + .set_adr(addr_lo) + .write(bar); +} + impl FbHal for Gb100 { fn read_sysmem_flush_page(&self, bar: &Bar0) -> u64 { - super::ga100::read_sysmem_flush_page_ga100(bar) + read_sysmem_flush_page_gb100(bar) } =20 fn write_sysmem_flush_page(&self, bar: &Bar0, addr: u64) -> Result { - super::ga100::write_sysmem_flush_page_ga100(bar, addr); + write_sysmem_flush_page_gb100(bar, addr); =20 Ok(()) } @@ -29,8 +67,7 @@ fn vidmem_size(&self, bar: &Bar0) -> u64 { } =20 fn non_wpr_heap_size(&self) -> Option { - // 2 MiB + 128 KiB non-WPR heap for Blackwell (see Open RM: kgspCa= lculateFbLayout_GB100). - Some(0x220000) + Some(super::BLACKWELL_NON_WPR_HEAP_SIZE) } } =20 diff --git a/drivers/gpu/nova-core/fb/hal/gb202.rs b/drivers/gpu/nova-core/= fb/hal/gb202.rs new file mode 100644 index 000000000000..2a4c3e7961b2 --- /dev/null +++ b/drivers/gpu/nova-core/fb/hal/gb202.rs @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! Blackwell GB20x framebuffer HAL. +//! +//! GB20x GPUs moved the sysmem flush registers from `NV_PFB_NISO_FLUSH_SY= SMEM_ADDR` to +//! `NV_PFB_FBHUB0_PCIE_FLUSH_SYSMEM_ADDR_{LO,HI}`. + +use kernel::prelude::*; + +use crate::{ + driver::Bar0, + fb::hal::FbHal, + regs, // +}; + +struct Gb202; + +fn read_sysmem_flush_page_gb202(bar: &Bar0) -> u64 { + let lo =3D u64::from(regs::NV_PFB_FBHUB0_PCIE_FLUSH_SYSMEM_ADDR_LO::re= ad(bar).adr()); + let hi =3D u64::from(regs::NV_PFB_FBHUB0_PCIE_FLUSH_SYSMEM_ADDR_HI::re= ad(bar).adr()); + + lo | (hi << 32) +} + +fn write_sysmem_flush_page_gb202(bar: &Bar0, addr: u64) { + // Write HI first. The hardware will trigger the flush on the LO write. + regs::NV_PFB_FBHUB0_PCIE_FLUSH_SYSMEM_ADDR_HI::default() + // CAST: upper 32 bits, then masked to 20 bits by the register fie= ld. + .set_adr((addr >> 32) as u32) + .write(bar); + regs::NV_PFB_FBHUB0_PCIE_FLUSH_SYSMEM_ADDR_LO::default() + // CAST: lower 32 bits. Hardware ignores bits 7:0. + .set_adr(addr as u32) + .write(bar); +} + +impl FbHal for Gb202 { + fn read_sysmem_flush_page(&self, bar: &Bar0) -> u64 { + read_sysmem_flush_page_gb202(bar) + } + + fn write_sysmem_flush_page(&self, bar: &Bar0, addr: u64) -> Result { + write_sysmem_flush_page_gb202(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(super::BLACKWELL_NON_WPR_HEAP_SIZE) + } +} + +const GB202: Gb202 =3D Gb202; +pub(super) const GB202_HAL: &dyn FbHal =3D &GB202; diff --git a/drivers/gpu/nova-core/regs.rs b/drivers/gpu/nova-core/regs.rs index 77d590887ee7..91911f9b32ca 100644 --- a/drivers/gpu/nova-core/regs.rs +++ b/drivers/gpu/nova-core/regs.rs @@ -116,6 +116,42 @@ fn fmt(&self, f: &mut kernel::fmt::Formatter<'_>) -> k= ernel::fmt::Result { 23:0 adr_63_40 as u32; }); =20 +// Blackwell GB10x sysmem flush registers (HSHUB0). +// +// GB10x GPUs use two pairs of HSHUB registers for sysmembar: a primary pa= ir and an EG +// (egress) pair. Both must be programmed to the same address. Hardware ig= nores bits 7:0 +// of each LO register. HSHUB0 base is 0x00891000. + +register!(NV_PFB_HSHUB0_PCIE_FLUSH_SYSMEM_ADDR_LO @ 0x00891e50 { + 31:0 adr as u32; +}); + +register!(NV_PFB_HSHUB0_PCIE_FLUSH_SYSMEM_ADDR_HI @ 0x00891e54 { + 19:0 adr as u32; +}); + +register!(NV_PFB_HSHUB0_EG_PCIE_FLUSH_SYSMEM_ADDR_LO @ 0x008916c0 { + 31:0 adr as u32; +}); + +register!(NV_PFB_HSHUB0_EG_PCIE_FLUSH_SYSMEM_ADDR_HI @ 0x008916c4 { + 19:0 adr as u32; +}); + +// Blackwell GB20x sysmem flush registers (FBHUB0). +// +// Unlike the older NV_PFB_NISO_FLUSH_SYSMEM_ADDR registers which encode t= he address with an +// 8-bit right-shift, these registers take the raw address split into lowe= r/upper 32-bit halves. +// The hardware ignores bits 7:0 of the LO register. + +register!(NV_PFB_FBHUB0_PCIE_FLUSH_SYSMEM_ADDR_LO @ 0x008a1d58 { + 31:0 adr as u32; +}); + +register!(NV_PFB_FBHUB0_PCIE_FLUSH_SYSMEM_ADDR_HI @ 0x008a1d5c { + 19:0 adr as u32; +}); + register!(NV_PFB_PRI_MMU_LOCAL_MEMORY_RANGE @ 0x00100ce0 { 3:0 lower_scale as u8; 9:4 lower_mag as u8; --=20 2.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013016.outbound.protection.outlook.com [40.93.201.16]) (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 C4329336EFF; Sat, 21 Feb 2026 02:11:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639878; cv=fail; b=ZWIQGpx5ghQYS18VOTWssfB9RToAARrdbMn0KzkuyJqJ7zjPjP8D04fx3VUMtX/X+D9L4B7GxmSTjILOHn2Z5uCagQorJ4BeAUi/4Q5vom3emzDvre5KsdETZaGsq9mhYGiM0WZ62j3LEKwSjdZy3MABR9NKvwZ7OFoskDIh5pQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639878; c=relaxed/simple; bh=gwmPNOyixa9r/wG5ZZ4WO2GReTD+JcsXLeqCuK7YBH8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=rJaVOnQg41ax//R3bNgrEkyyZRVYnP9DjZYj093dKD7NGB9WTpqVnDMMTvlinIijckdhle87bY58Ixgco9qqIpCDyBgDXxuhQIdNFSJ9CkP3FwxZjvfSnt0jrBIKbEKwWvjcQXlmK/JxGrBgO5j2nHYbRdE1oYpmb6nkQE3dFiE= 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=QmqiOtoa; arc=fail smtp.client-ip=40.93.201.16 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="QmqiOtoa" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Zy2XsIr+jnMoa36NpzZutg5UPmizkKg8Jx3w+PGqjyZfAvkMv887zCrVm2FP21c95fyPQjvww3SFtI0TEtP1Mq49J15NKprGCAmtryKKsYQVVuJ1tUTr1egzejnVkvrrrNuVIlzvNIKKg8uBys1MTmF61FrmU0/hZMfpIJci8CRp5Pt/HcGYk1RswEOUzeP6jlse8hx4idGEPMm6FZ/IpIIQOZaoEcghekW6zqqh5TURWUeWfgIpQTtH0U15scwmvxmCRQU3Cwr3fVbNn8h3WAftd/AWeaR25fTvveNwZBMM1yahO35HoT7z4r8eAIowdXYSgjpwALqx7QDDed/7aw== 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=AunlqujvY84Q6eymalF/skwHqryE4JKqsB3XzcOfNxE=; b=tyVrik53WRYBxCr2XPYzOOyfu2cp/+BQEDf53+THLOIciwKu3ArFAu6A4ZooD8OgWOZTzH0cXga6j2eatvRfcvwsO0sqi9dssTnU5wU+YaDq1+0yaEMgeMob+GJVS2ZIgH0GkGQ2xhSMHcMgE5rTz1hqkyCYQOXSdi32LSnFWHQjoQhA39iUqe0jildij4t9agNRWrOdAjFMLBIHLDEJioNX6QYsPcRB2hI2iccYtqDaHvT+jgvAzrVghNwSacD42f//FyUMvpkfYbVvTaV4A+3+39CAJzgp6TxrWcl6WnrKI2gP/2hDdT+mXZ0pzMBCFPdNl695AbfLidhW8Ze7Cw== 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=AunlqujvY84Q6eymalF/skwHqryE4JKqsB3XzcOfNxE=; b=QmqiOtoaiIt9guQ13HKcHvFde78T3SMp2Jyehtwftk5soe70K5DTU2doiexFkxljbiLMxFN57r7oXQwzy++1HJK/+IERzAdfhUMo4MGs72iZ1IlAawysE6KY/6GmZRPFCE7Y/nHKicbb98Fxp45T70+rKwK7dFz4JxEJuLock5jxC7luTEiXe9FhzNmTdn2BWVmqN9H7I0CPPX7slLdFRGDtMc08MnCzymK6Nl3qFr4nGx0uhw84SrnuoSU6Dty/dWtH/Lpu/6+NtPddabG0t0IoM6sd/DWkLWHIlWQnXVN2NrB63fal9zu6o7NAJxbYnqeYtYwJqgpiZ3n/ka0J4g== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:11:02 +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.9632.017; Sat, 21 Feb 2026 02:11:02 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 32/38] gpu: nova-core: Hopper/Blackwell: larger WPR2 (GSP) heap Date: Fri, 20 Feb 2026 18:09:46 -0800 Message-ID: <20260221020952.412352-33-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR04CA0028.namprd04.prod.outlook.com (2603:10b6:a03:1d0::38) 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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: 78c90d65-4081-4073-a0c9-08de70ee652a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?7gH1et/dWmFUOg761Qkc3L60kzS48f9MOGs/aNroEE2oDvTEpwdhUfoCqejz?= =?us-ascii?Q?U4ajC1uwqkxV73w5zHLhobMRbzXUWouyrfKpEqCrRnjVMO+yfTIuA46EQuPs?= =?us-ascii?Q?aE5r3O4bfZREy9ZyFlybU3QV4pX4JO9FbP0yzsXN2jF+XwmCWL/kihw7b71X?= =?us-ascii?Q?i8BKk4sJagGxis1VYngmXiqBSzZ2vNyPOde4bPa3pAxEkfPPjc0S0YUegw7N?= =?us-ascii?Q?Y9pmNw3xSSp1CCroj+zeHq5FP4jlqGalzzlqfH0GrLHBV+aGRQ/lmLkaZdz6?= =?us-ascii?Q?0pdxaeTDCrhy55jHIHRM/1NZcy+v8In2UioWtmMgq2CveI2cLZ7dI2IxIVdr?= =?us-ascii?Q?tQ3L4Mr0nGpSB5a9iK0Jx6VihXci9Th4iHHbr3+BMfwEfx8iOelLBe+Zuqaq?= =?us-ascii?Q?48z1W4/6KiYunJjVCni/vNkZLxG9mc6u1gJbsNZXthOrB7drRxCuDo3n2JIF?= =?us-ascii?Q?mofboMGvJ9v3UfgHmCnHHDqEfh2K6wb8OVSjZV2vmxloJPDUyLuQpR+Nwhaw?= =?us-ascii?Q?tfu8ap2xHFOknIGU9Se8PBx085ZsQCKTOcfTB/L4Ym9nmsiYKT1Yt3xbeELS?= =?us-ascii?Q?2DxRLs+x4MR/UMboEG7GoGx0MAIHqxhYmbtQm0fawcfSkeOeuwEB5Dymaq16?= =?us-ascii?Q?9pruSIDEtlqUvr6/6ctH5tsvpGIpYtaS/YqUsfc1+MhHdeJajfnCMXDulnts?= =?us-ascii?Q?Up1IuzUJgA8iv4V9ccnnJuM/2+hF+uJ3mKPsQCqMbwmwXfWYcI3PqA8wBLXb?= =?us-ascii?Q?sj9r92T8bHu21T5qE00Nj1wXsN/XJ+9ATAHxKSJ1QKWTncslmN2XDNux6uWn?= =?us-ascii?Q?skRC/J7WY4ek0mJZh4ksbIvR6A6F6wBmSoA64qJjkZKTuJUPqATjuMfPXbMR?= =?us-ascii?Q?MyCGgc/Rq2wxVrqQKHWJnEG535ZOa2/eyPXXR38EVKEQu3AoapPyTBxdp8pd?= =?us-ascii?Q?uZqwQs5xON+QioTYX0k1UcjYoLE4Ba8NHqvnuS59wXJer2FE5nFnv0/4K9zg?= =?us-ascii?Q?P+vj96DxUIa6pmRM/+32c8WLq2F+snjbucIhhOdr6ObWGwRKKg73gSo/xTvE?= =?us-ascii?Q?ruOR5iVbjJApGkB64DLThJCOJJvFJBm+9CElayZ5Mzdi12oysXtWZG3ewsKs?= =?us-ascii?Q?l+o1/T0apGdQv2dU/9yRHFg1M/kWH+by92OeckmD1RuCcaJP2nBpRiW6Vkq6?= =?us-ascii?Q?5XDmIBdYNNsMS56llE+Lnzm42t8Mg8h07P9PTVxIi3fOs6stdv8KBLiXrVWG?= =?us-ascii?Q?Xa8PH325vXhSTCuYpvRH0EuvPlwLLHV02Jb8BgkYKPiTa7naYatNQsljnLmM?= =?us-ascii?Q?qwZCHKhP+O3zjiqlBXJS7FO501NjqR4IEMXnTSHU2S6elkjNnAO0ADELqDca?= =?us-ascii?Q?JvLG9KjDYwrnueuKL/B6kfnx+xSayS3TRH6RH4m4Ft0UfjFf8XsTLiGwFdMj?= =?us-ascii?Q?8LCKyNNFj6EOgfIwR01EHi/7b4ITTyBkRg1wIeAiD4bU8mL8B4eTo1frdfqs?= =?us-ascii?Q?otAW8BrjqKveXkI3IUFgPPxJeIlcRpUH7+51Ao7ByXb8fWWAtcAj88FOt82M?= =?us-ascii?Q?GATY8IXuibxKauu+inw=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)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?TWUGINhtkfB63qoXB6MZhu0l0hRuLY/HOkYPOFbWYXN4kh3yJoqdTNMOFuPq?= =?us-ascii?Q?5dcDA28gI4EXCkaLHUYARv2CG4Ra4IB0AxtbrvURIxwGoe++RddyKEiCS688?= =?us-ascii?Q?xrEBVNUMdEmQFMAspwCt4ODuMGTY+V0pJf2JpoPpge2WHKPLFUcnYmrBN/b9?= =?us-ascii?Q?GgRZjYQNYFX7Dp/6KyQPYbtylVggyb3VwkBEFgFerxjIUnPHxq8e9xeiSoaK?= =?us-ascii?Q?TuHfmELkxm6ww1eOJEjy7E6UVVMxmJ9IW3ZIN3aYW8COr55N8aneoUzwTLaG?= =?us-ascii?Q?YrBCvKKegAVJ6/+b0qjPbX0fXwK5X0JSLb6njRYjK97ZJ+EPuecZZ4XhyffF?= =?us-ascii?Q?dICfe6NjZjHUTl8Qi0+Z/ekica27p9Mk05GTSuKVvyemytxAPb93ju4eFTvC?= =?us-ascii?Q?ResLY+9gghu9mZsafxCtvEvboyxXykAyt20pqmSGEW+YSuf+FhFKOYr41bEb?= =?us-ascii?Q?W8LGVnkhRRs4oQDlFTWzWsXXAQhmmnYfHLuoR9F4NBP4pE1u2ti25sncu8WL?= =?us-ascii?Q?Saeh4+DKrL6NDxBX5mjhxZ9IWORQRzZLfZbEAbX+4quDLTz6vj6RnXV++REd?= =?us-ascii?Q?RSHiaX1mYfVtSkjtgAYSlBLxeNvEta7aXyDc9aE9jXFkQUTw6GD7ENf7e+Q0?= =?us-ascii?Q?3sBqvFOTNKN85E7xr3zayBoytdvbNULCmjY9l5RUu9szrgIxP0xD4+ZuMQ3p?= =?us-ascii?Q?b356+dsGh0T0pc8EwFyE/xtJLQyf5dZQefLMisRT3GMIHtDEoeJXn3bva7NU?= =?us-ascii?Q?5V2T5u9B+IcUZW7IpFNLVf9fMmU0bob+ZwNutz+LAD3RsmeyEz9Fyq2mk7vu?= =?us-ascii?Q?RHOOpRqF15RFS4h3pW6bx5CKWEnc4xZePWk481W61oa2XycMASduM5S5aTlx?= =?us-ascii?Q?uCeU59mojagII8EQurv+0tcHr0AqInLh2TtPSrhlqRWsSfIkDmAotpJpE4A9?= =?us-ascii?Q?+Y5mJD8F/qUM47QgC6F4LJTblJmIqtdiH02xViBPmcOibqAcc89XEbXZgAGq?= =?us-ascii?Q?aBhbABqDEb9YVSQjsOAHSMlKJ20d1/u5IGPEWdjh7r6j+f3xdJwo4dsizpGH?= =?us-ascii?Q?SZ2rPgdrjHy4aPtFPBq+lEXatvr+cIYKyS3syokMUhzmWvcA3szwtLxgqPuO?= =?us-ascii?Q?+VQfMohKNvasX50gDvZXEdZfytuK1DXOJe/NUdH1YPangy+4hU+JWuRuhmF5?= =?us-ascii?Q?p3RTFfCbDfWEY4XcXs92vtBQ0iYBEbap0df8nMaJAbO5656cL7XmZ3pECaS1?= =?us-ascii?Q?1mHOwcx6w+YLMJXoe8w9NbuqooAtJFZnxuts/EZZwFyCTKG9ctZ6Syk2B26b?= =?us-ascii?Q?SIWyvZcLm6M9mqWViEZJ5N2UQ5+V4pFZWlBM7p+AJ+HCQ/ewQLbWqCnFdt4I?= =?us-ascii?Q?jdgVRRRymIfyeSIhRURvngfNvZtRRgiEyDrQtrRwmiPf2cM0xIjZAeGnNw0w?= =?us-ascii?Q?M16zxGELtzYvhWa1DQfZ5S/jBJ1xpu73Ugqb7vQnmGvjA2SSApmr++K++dbA?= =?us-ascii?Q?jjucjmeizLE8/j4jYLvftnpX/pNSrvuzmulL20PoLjxWGpsDIZTsl5gI4G5z?= =?us-ascii?Q?YcGyA2O5eCqQ+sLtRNOBHnDTDUYn05PbSQMkkU2m/ybR2HyK5Q8xdhyzY74w?= =?us-ascii?Q?3tCBoEOGPir0DhZzF4PnGsSFTR4wmZ+vq4qs+EorWXxkU5CDD4yfMJT4pSkO?= =?us-ascii?Q?oBJqXqDxLTAjip/55a9xKjCqnDmoFXfaDmc0kkr/hui0pU/CwR99lOlvGN4E?= =?us-ascii?Q?doz5ruJ/YQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 78c90d65-4081-4073-a0c9-08de70ee652a X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:33.6559 (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: FUnNiFYffpHeWRh8XJY5gZEWucfkn7R3I+NCXpttJnHPFVpDeGTSCmk4at2xSgImtT8NFKT/MxfM6u+oENMq8w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 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/fb.rs | 2 +- drivers/gpu/nova-core/gsp/fw.rs | 74 ++++++++++++++++++++++++--------- 2 files changed, 55 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/nova-core/fb.rs b/drivers/gpu/nova-core/fb.rs index 8b3ba9c9f464..08e6dd815352 100644 --- a/drivers/gpu/nova-core/fb.rs +++ b/drivers/gpu/nova-core/fb.rs @@ -247,7 +247,7 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0, gsp_fw:= &GspFirmware) -> Result< let wpr2_heap =3D { const WPR2_HEAP_DOWN_ALIGN: Alignment =3D Alignment::new::(); let wpr2_heap_size =3D - gsp::LibosParams::from_chipset(chipset).wpr_heap_size(chip= set, fb.end); + 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 FbRange(wpr2_heap_addr..(elf.start).align_down(WPR2_HEAP_DOWN_= ALIGN)) diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index 086153edfa86..7fa9d3b1a592 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -49,32 +49,52 @@ 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. +// See Open RM: kgspCalculateGspFwHeapSize and related functions. +// +// 14MB for Hopper/Blackwell+. +const GSP_FW_HEAP_PARAM_BASE_RM_SIZE_GH100: u64 =3D 14 * num::usize_as_u64= (SZ_1M); +// 142MB client alloc for ~188MB total. +const GSP_FW_HEAP_PARAM_CLIENT_ALLOC_SIZE_GH100: u64 =3D 142 * num::usize_= as_u64(SZ_1M); +// Hopper/Blackwell+ minimum heap size: 170MB (88 + 12 + 70). +// See Open RM: GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS3_BAREMETAL_MIN_MB for the = base 88MB, +// plus Hopper+ additions in kgspCalculateGspFwHeapSize_GH100. +const GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS3_BAREMETAL_MIN_MB_HOPPER: u64 =3D 17= 0; + 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 { + use crate::gpu::Architecture; + match chipset.arch() { + Architecture::Hopper | Architecture::Blackwell =3D> { + GSP_FW_HEAP_PARAM_BASE_RM_SIZE_GH100 + } + _ =3D> u64::from(bindings::GSP_FW_HEAP_PARAM_BASE_RM_SIZE_TU10= X), + } } =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) -> Result { + use crate::gpu::Architecture; + let size =3D match chipset.arch() { + Architecture::Hopper | Architecture::Blackwell =3D> { + GSP_FW_HEAP_PARAM_CLIENT_ALLOC_SIZE_GH100 + } + _ =3D> u64::from(bindings::GSP_FW_HEAP_PARAM_CLIENT_ALLOC_SIZE= ), + }; + size.align_up(GSP_HEAP_ALIGNMENT).ok_or(EINVAL) } =20 /// Returns the amount of memory to reserve for management purposes fo= r a framebuffer of size /// `fb_size`. - fn management_overhead(fb_size: u64) -> u64 { + fn management_overhead(fb_size: u64) -> Result { let fb_size_gb =3D fb_size.div_ceil(u64::from_safe_cast(kernel::si= zes::SZ_1G)); =20 u64::from(bindings::GSP_FW_HEAP_PARAM_SIZE_PER_GB_FB) .saturating_mul(fb_size_gb) .align_up(GSP_HEAP_ALIGNMENT) - .unwrap_or(u64::MAX) + .ok_or(EINVAL) } } =20 @@ -106,29 +126,43 @@ 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_HOPPER: 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_HOPPER + * 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 { - &Self::LIBOS3 + use crate::gpu::Architecture; + match chipset.arch() { + Architecture::Turing =3D> &Self::LIBOS2, + Architecture::Ampere if chipset =3D=3D Chipset::GA100 =3D> &Se= lf::LIBOS2, + Architecture::Ampere | Architecture::Ada =3D> &Self::LIBOS3, + Architecture::Hopper | Architecture::Blackwell =3D> &Self::LIB= OS_HOPPER, } } =20 /// Returns the amount of memory (in bytes) to allocate for the WPR he= ap for a framebuffer size /// of `fb_size` (in bytes) for `chipset`. - pub(crate) fn wpr_heap_size(&self, chipset: Chipset, fb_size: u64) -> = u64 { + pub(crate) fn wpr_heap_size(&self, chipset: Chipset, fb_size: u64) -> = Result { // The WPR heap will contain the following: // LIBOS carveout, - self.carveout_size + Ok(self + .carveout_size // 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)) + .saturating_add(GspFwHeapParams::management_overhead(fb_size)?) // Clamp to the supported heap sizes. - .clamp(self.allowed_heap_size.start, self.allowed_heap_size.en= d - 1) + .clamp(self.allowed_heap_size.start, self.allowed_heap_size.en= d - 1)) } } =20 --=20 2.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011050.outbound.protection.outlook.com [52.101.62.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EC781337113; Sat, 21 Feb 2026 02:11:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639878; cv=fail; b=tgVdlF6xBa9tgsh30J0SdOi1BcXoVcPoexwffWHSJpEpbUVLxhRtsOKPi6RVPY9KX4NiJLY0G7RkJWqzfsx9nfZoED3zRGWQN9CrfHdwK8h4GLuwFhzt6h3hmR/7jXPDKj+NblR+EocmigqAgg9+r9x8VUcD1mWc5QdZzirnJ5w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639878; c=relaxed/simple; bh=8B9KI0h/SOXfdxyDLcQwFhVHoZyk51khN1LQjKxWP2I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=nbNqQT+B1MNgSV/zjuHx1uVvcE1PgvQe8TU7QNLzRr0LVxV+PiO2+ARBDuIeoDtJGZRfN2pzne0bmK9lLpJcos7dDrIi8pd9CQTWnAOsw3X6UGzwbuVCHu78wcladzLVsg0jZdLT00+eVrSMi6M6dG0RVLzaU7anrUrlfmMoDUE= 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=h3comIVu; arc=fail smtp.client-ip=52.101.62.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="h3comIVu" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KAmrdVNryW11KWzD4MITGjeh9xIbBFxiI56nBN6XL66dsyoPzsQzV8xOhSx82fCtzpxuJO0A1AfHYaIWK8ouS1jzTHSB0BXJWHIb4StwnsHw1BTQGYXsQBfLmmAmA2T8uffA466MOdoUSzRtaUyhTlPYhl8G/hitLVHglLL/aResR+rl6LyOoX/xRXya4rAsw+qBGqVSIrqK84NylWkJX6fAQM8HKDdQE5/chDqJbxUlld+zlUMG7NuWpf9S+5JVVV6oQ2kNhKkSDBG1fYzbIJ9Joo/elh6N4Da4FkjE8KkMzXd7AfMJiEULwY3xkr0OrPAJWU919VTl5Cfgyla2Lg== 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=Lr37DCGkyqreoG6sk+9a5tUpfH4R6PPfQACuwPwSy2U=; b=dMDSPUTN8bUvnj32YyEpfh+7Qb9J7+546Lw9iOL8jB9zOqSMMsjF9FsR3ML8dMW1uCVoKIGM2uJeGqUleSCGqmMwlvKJkd/UuAMtkU2yNWdmrsIZlXcAc/ZNrOvDq55uXnkjk//etwlBfHtXQrsX6bsUepzevAMF0i1wJbs2XZrn5HEwMZvNLvdAcawbfkkr98TB20cmsZpcf8i2rIl6ot2XVpmAShrdTnKlief9XU3XFFa9po1wJ+PBnwxKuUrnNMcRqTcUzyQh8XPy9TnxylzTMoKDxpo2JQsFOENfq2YBuKeIsZ7Hq68KW2BszDGU1kJegzJc7Gru15d1PBz4wg== 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=Lr37DCGkyqreoG6sk+9a5tUpfH4R6PPfQACuwPwSy2U=; b=h3comIVu3zHcOUNngcEI51eD7XOCosQWfe2h1AHyxZc77hN1TdnBaJdaoyYjjHy4pj8o/Dvtq6R5ynLTzALn7vD9sFYRdf5Exck8yCKVGLajEwDk//juhcHd2eV/4UqQ5/80L1/AbdYHMzcLskRs3CWdRyPUh3fg1KjXNhWKzArjRZWntXVBLQUiQeA8kDvOjiQxhl+YXt1VHJJU8+RU2ymSapNbN49j98AhnWk6fAVKJTtIP6CoNQW+WWh+UcSq58M/AazZ05yuN+ldN0SreQu8bVuSEy7kxmmPNFDb90vVMBWFnF3f2W3881j8aEm0UHGAyhuwyd5LYhapW1duxw== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:11:02 +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.9632.017; Sat, 21 Feb 2026 02:11:02 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 33/38] gpu: nova-core: refactor SEC2 booter loading into BooterFirmware::run() Date: Fri, 20 Feb 2026 18:09:47 -0800 Message-ID: <20260221020952.412352-34-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ2PR07CA0024.namprd07.prod.outlook.com (2603:10b6:a03:505::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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: 5b15f893-0f38-4559-454c-08de70ee65cf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?YlIB3EhizRGseNO1EZqVO/X+8gTpmuhRT3mAhSsHD6e/0/a21VK93KAtXoBA?= =?us-ascii?Q?rAoQVSEX4MNKG1qCtQwV2Pw+3fE4JL1GioFBMzqiL4M0jX3HWdg4CnOqM4SY?= =?us-ascii?Q?GTUPvEaco1ery7iU7bLKfRdaC6IadpT3QSlPw34JDiJJvrJhzNXNyMxEPEro?= =?us-ascii?Q?aYA4J6Rj34/etLgg9ERGpbL08A9jouE5o/VvWVdpgywJv12gW0G7npn3hgYt?= =?us-ascii?Q?tM3JHtw6wOBEY+c1dZlA5SVo87NU+2HdJB+CL28DlO08ZohPTUBK0WSBfTMP?= =?us-ascii?Q?9v3ucZdrMC9jVloE3rXe6rQA+22iRo16/XM/S/gcRL5rsT3HFaiN4Iq+hRsK?= =?us-ascii?Q?b/SRdy3f/gVLQezmq7dvn7YpNLFlhDbXQDwDVH1DNZGaOmQA6SJmZOz83kOT?= =?us-ascii?Q?PKQdfs02dFoRv/hjbHIYcmqhjLZRJ861Xcj2znqX/17SpX88J4d52YjfT1l4?= =?us-ascii?Q?v/0nlH04v/amrjLB5g/pjnEmR07P+noUkuQ0xMrsWGgKOv4U0glHTUIDPzid?= =?us-ascii?Q?dQqUIMORmear0mUW5v8hdTQdOwh08f5VGwjPxM/jqAXkJ6DhuMObENKxArs1?= =?us-ascii?Q?30t4DCYdD818kOLIznfqQ1IPEYr1kTXvWVLnoAmAAlTh5pl9i94gbvUm/TFC?= =?us-ascii?Q?EB4audxBolYFzNuc6zDRFNOgxgjAq+dp9m2KSwibv8LKhxzP11ch7LchYtRZ?= =?us-ascii?Q?hQ8RORlYXtmOpm56xLgfRBbRGUd+3W6G2Okuvmkzw7aFD5cd1OTG5SaeWU+H?= =?us-ascii?Q?d/cjpQTmohsKn/FrEmma99YZo5An8PvcQasBc+6rlUP5EuW6jJl81XcMSjho?= =?us-ascii?Q?AELWaeJ/xICqs3OKQL+qPGArAO3Bko79L+7ux3D23u+r0JTLD/n3un4aPdbW?= =?us-ascii?Q?eNn9wQukCltdi4454VyUtAxCSqQ8w+5t1cxWen0yzsKGuTO/+n/luyQ2x+3L?= =?us-ascii?Q?JUBRob4x5o/tACnru5FuKN27SKn/3zvE5EWw3wMoQ4wV7PMel5gBRIJ4Plax?= =?us-ascii?Q?/6rzO8VjadatKXivciCvbn2fFdxC1DqvZ3lAyOfTWlEI9IU3VrZC9y9w/cn8?= =?us-ascii?Q?mD10mQJn8g8YMxM9z8Nigy3seJ0SFvOM5vk4/LXkY7vzkFipZ5//FY4XpLZB?= =?us-ascii?Q?MDLR4r0p2fpWoYwM0/D8p/fZzJeifPSdFIPcLjP/pKY5mxwpn2tiREei+hYb?= =?us-ascii?Q?tL8+JLeLx9lH5C4OHx+TH4dMtjToavCJIMtJTZRIPmrse9kUgyEYdX+U5UlS?= =?us-ascii?Q?OwMudD61SWFG8h2/g2NmIZe5Vq+w/Ib11MFxPeZJwwey3JygqT1RK+vJzzNZ?= =?us-ascii?Q?pmMCOdFJARRqys1JevPJcLhQScrGzySCMSZ7EYUzGluRm/dBnIq2FzDbpmBk?= =?us-ascii?Q?hEDkqiwSm5k4rRlyOZXtQmp+tl2PhVKnr4wGaV1NQGOY1upYtK+Sa9X2YYR6?= =?us-ascii?Q?AotaTI/qc0kteQ5sdykRRfKA2ZuiFwm0ZECBmOKtTSnBv5LHApZTbKqKTYy7?= =?us-ascii?Q?QVkdqS00+E8SKHaF3hJ/l5BZ8BWmCrCUKIMWp5CCRrXjeasMJgcIZa2GwNhv?= =?us-ascii?Q?FznoH1iTxeSiEF97tDE=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)(7416014)(1800799024)(366016)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?tO9JiwcyLjDvU/S+EPAGitP1f9qNUCPHaAPSBI6HO6e51lrgGAAFIrmF6YvU?= =?us-ascii?Q?RFO4tMk2LTI6LdoWt7wAYJSl3ZvyRdKpmpxEkN2MtlxBnvfHXeNwHAwYnA1R?= =?us-ascii?Q?26FpwrU3CC+rE5S0MhMpmDotVAZOueCj63kyv0AHCpgK86oPa5SZs5uYQkMx?= =?us-ascii?Q?dI10N+Pvkbh1x/2bIUrUQwHb0TmGE9Os1RXnSpfioSAwQXJM5Cqtv5kjIAYy?= =?us-ascii?Q?DB8IWmHUu6jfQqK2xJmZbGxwita6gC+qFbU1l+WS+MS9vih5/ZgnjGpK9Wh7?= =?us-ascii?Q?w8uB/KndyyJhwE59XDFr4f+VJcqJ+m4Xaj9H1ymxawkjHeZTES6xefeFhENZ?= =?us-ascii?Q?VAYvTRXYJ9oz4ooKJkM6vR9Tq5EwfW+iH4QeWaCo0J5B+FUM4fCUF323hsy9?= =?us-ascii?Q?wI0RcmGbSSXus4f5UnpkU+9L4JjiCrhjiZ1feUjkhPPfYZDjDZDM4Oy7IBop?= =?us-ascii?Q?SSdprArCGwqasMZ901RwhZ93Sw/V/E8Eo02zhhrZwqN/ZPv6n2urwuAdfo6w?= =?us-ascii?Q?KPnWtnWgr/TReI8EroFe0PHIlcrH2n6c3MRCchtqd5ILW+DnskGLO0ms4LWq?= =?us-ascii?Q?T9vDGQtbiR8GWRYVLVntOg7GaZc0GLumnIePZiT1GrGt3tbyMuTDTwQN+Aq9?= =?us-ascii?Q?FVElbHuUmCoS/AKxg5cZB4yrzkRB62BsLGWCdv2I/PwJrBMS4+JchoJpQxxr?= =?us-ascii?Q?YdbwlHgpHCHAzxAy7+3Mn+gS5kpSG/X3a5AtCR4dB0cQ54CVZtDC4p/U2VnA?= =?us-ascii?Q?qUzPHapjI3p+4Xp6c3KM828pRzqamodwRyGXjkBYHWY4dWtrqnyZneHU8DNH?= =?us-ascii?Q?tq6Dxi1WEJapZl3rLA9at7hSyFd+igvY0tQZozyOPFaC2ganrEuakkUv7MT/?= =?us-ascii?Q?+98sKjDKo81XTOrcXQbUY7zTqceZM/DvDZLdXc8OYCU6eLdJb83AOo1qx9Hg?= =?us-ascii?Q?uuaIURe3m6JnopHSlQFtbVAQpowZVPvY9suBMt0d99BtOou3jxjjxWucE8fM?= =?us-ascii?Q?yUk4kuHiixIWrhvr6X1gPMZYnOTJPCoxpIYF/o04VistCF5TrrS8OjFhWwcR?= =?us-ascii?Q?wGZbMVlr04xESfugc+saHKStuLpzVOexF+TFQyjGgRnUbYQhavrs8HA23qxl?= =?us-ascii?Q?+/bGsf0lq8TpNeWgps25MR8lkPbA6YPR4uAM/D9RoD3RP7ObT8SPe0bVWJV6?= =?us-ascii?Q?bMNMsrTU17ezYD9f2NBHxcwVkH6kkH9bIifTKxpY0Sdja1AAbFmuWz6VSrD7?= =?us-ascii?Q?wA7HoXhp7m2Kc8+5268xwzjsvmYliy8lzD5FGO80gewTL2nhxANOdmGkV/gh?= =?us-ascii?Q?pK25//5H3qExLO+Fc3gvJnwq5CxyjAUvaX9/e/Niczhx8q4dG/FF77DXKz37?= =?us-ascii?Q?xwLodSn9flzuuh3zKAQP2nCkQk09HI42KGqVOcsW/4EJFqVziDhelxpDwD/U?= =?us-ascii?Q?GfUwAN8uTjvncNOB7oTIenFjHwpClzECp/Jejtv+B4VGtk+MeFYBX2ojqXqr?= =?us-ascii?Q?/DuFg9z33VYAkzh836GaBJgXZNQMTiAOCDYX4Zp7W8LWmTK4bh5nLZMWWvw8?= =?us-ascii?Q?uZfzDFKYItRtudts2SsouAPj7buF+XK5LnfPtdqi6ndCXz+PGkNxQFHQeTMi?= =?us-ascii?Q?5+ygYi+c229zeJz5rUNoCrT9gZM+2+JpQGNvlvPZ2nnGHlFCyxlHSqCuV2lG?= =?us-ascii?Q?SqdLSiXvY1d2NEgv9GcLrka/eHIy5D+KJM8nGDMQy+73P2jPrMdTedMwMXyJ?= =?us-ascii?Q?0JGdkK6T/Q=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5b15f893-0f38-4559-454c-08de70ee65cf X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:34.7572 (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: z5Lc8XbDxUhaKY99A7SWXEZdcwmRLQkSpXjqame8NX7RM+fbZrS2lBDN914+0aC7D/noZUifPda8EH5SNlkGMw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 Content-Type: text/plain; charset="utf-8" Move the SEC2 reset/load/boot sequence into a BooterFirmware::run() method, and call it from a thin run_booter() helper on Gsp. This is almost a 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 Suggested-by: Danilo Krummrich Co-developed-by: Alexandre Courbot Signed-off-by: Alexandre Courbot Signed-off-by: John Hubbard --- drivers/gpu/nova-core/firmware/booter.rs | 35 +++++++++++++++- drivers/gpu/nova-core/gsp/boot.rs | 52 +++++++++--------------- 2 files changed, 54 insertions(+), 33 deletions(-) diff --git a/drivers/gpu/nova-core/firmware/booter.rs b/drivers/gpu/nova-co= re/firmware/booter.rs index 86556cee8e67..b3ac3b826e9f 100644 --- a/drivers/gpu/nova-core/firmware/booter.rs +++ b/drivers/gpu/nova-core/firmware/booter.rs @@ -11,8 +11,12 @@ =20 use kernel::{ device, + dma::CoherentAllocation, prelude::*, - transmute::FromBytes, // + transmute::{ + AsBytes, + FromBytes, // + }, }; =20 use crate::{ @@ -389,6 +393,35 @@ pub(crate) fn new( ucode: ucode_signed, }) } + + /// Load and run the booter firmware on SEC2. + /// + /// Resets SEC2, loads this firmware image, then boots with the WPR me= tadata + /// address passed via the SEC2 mailboxes. + pub(crate) fn run( + &self, + dev: &device::Device, + bar: &Bar0, + sec2_falcon: &Falcon, + wpr_meta: &CoherentAllocation, + ) -> Result { + sec2_falcon.reset(bar)?; + sec2_falcon.load(bar, self)?; + 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(()) + } } =20 impl FalconLoadParams for BooterFirmware { diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index 465c18e4c888..7b177756d16d 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -120,6 +120,25 @@ fn run_fwsec_frts( } } =20 + fn run_booter( + dev: &device::Device, + bar: &Bar0, + chipset: Chipset, + sec2_falcon: &Falcon, + wpr_meta: &CoherentAllocation, + ) -> Result { + let booter =3D BooterFirmware::new( + dev, + BooterKind::Loader, + chipset, + FIRMWARE_VERSION, + sec2_falcon, + bar, + )?; + + booter.run(dev, bar, sec2_falcon, wpr_meta) + } + /// Attempt to boot the GSP. /// /// This is a GPU-dependent and complex procedure that involves loadin= g firmware files from @@ -146,15 +165,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 +192,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, - "SEC2 MBOX0: {:#x}, MBOX1{:#x}\n", - mbox0, - mbox1 - ); - - if mbox0 !=3D 0 { - dev_err!( - pdev, - "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.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013016.outbound.protection.outlook.com [40.93.201.16]) (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 C53323370E4; Sat, 21 Feb 2026 02:11:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639880; cv=fail; b=KL147Odw3Re58lLL5W+dNHb02+UNvNuM7VyjgpCHlKT+/zCGsCGJIY2lrRkq2F/z6Q4YCpZT4/QjUiV1xBUs6d2bJQw3xl2YaMtNUqqhbjUUqrPin2fghrK1DPULyQ6S4FaLjxXMyPyN0WTaVfR7UX1QDZCeZS8xDgk1StyRBtw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639880; c=relaxed/simple; bh=lzqpiPzaTY+BBLkKfSrRdWf+vH6Oe2pEodox4tuo+/A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=DYaudDPBc8UM6hjeiu0z49k2+Gmlutai25jjfR19RxYSU9sEtyJdC0FqcadL0dlnyHJVFG83Ux1AfXH3+QBF1p0TysBqgpgepXI+avF5xFPXX+Dwnk4hPGMxZbn+BMeOOr26VP06fMIy1mw//SPotDsAeS8BpF5phLz7OjW3IFI= 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=oxS79qX/; arc=fail smtp.client-ip=40.93.201.16 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="oxS79qX/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sO28iqFJDn0QKFtT9guXVQjhOjp+mpOFNFxSCNCi+fWOuy9PFNjNEraiOLDYes6GBzBZZqaqws5AybVUi/oueH2r1ghPB3pWBPjAHcwNfxoJx3SI9PT7/VBSOjiZZ+cJRgi+WhnodQdVb//FjBt2xK/XMPoMEC2ULKjclz9Dg3tWCXVEgj9y1sWunYM5EU8oxrFRh41ujoOxayYlP5ir/xBW5G3ssdQj9Sr2IU//WjU0mXxu8S6921vfiWYEDK6aeheXWs2H29YeCrDXxmn3AiU5ZFmTLUyRHrMIzpIVj8PdePEl90r0GaT7m8b9Ivm36A91KxGZEx49ZDgorWaRPg== 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=2ZXs611y+D5vvFvY6PCjyvtnr8lSx3H1/9stYdMndig=; b=vzAfnx3ifWG7v01XrunTBcDzJE66dJwq7VVLcb1TzoFgTuG0Si+IX7BoRVZY5vZeBwPRqm/KseW0jCGb0IPlFQGGJtiYQLFPytTRopfIW3x4cJt2bPxZgrDuLyBS1syLbCqcueUXZS6ipPF5S69aRPsaWi4pShokluQ/s9BLy9uA5h/l8V7VcWKBxg+gSI0Pz78NFN4nzw/1QKDWDD+B0b05c0WeRmy56cCA1hu0NV+LcsrI0t/TLFOjHQuRmGd/sIvkcmPYQEOew2QW26sAsjmWD9Ty+qxEPniBac/reZYoSQLAQDk2x0B9DwFHJ7W79w9FvM3TnlSA1PuP0jKWWQ== 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=2ZXs611y+D5vvFvY6PCjyvtnr8lSx3H1/9stYdMndig=; b=oxS79qX/iSbsLgKo8JRY+b1+KWBdbbKOphPCqvWll9v5Es+KAlWpB/hKbbO9rknt5zhMACbK40sVgtYpHmTHpydtmKnKCnJxh/T97z63DVEs66bxCFOHajrc3FjJW/3F1CN9WZmnHWXzlEnVAVpUXG+eyT28ng/HO6NEgxnuT4Xi8khKUYcADO2FXvLdfBVRu3Tu48nc8I+kYrR0BAIpsz3uaSTTAoOmkegdLHPsYcVuGXjpOI4xFQLhbrIrPJlbyUnUKNjxf2Pbl0XqrumiOAF6cILt9DkLHEk7Yp79f1OmaSNWMXLe0C+FFZmYnItGkGO54wOUMpAE+34M37Sw+w== 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 SA1PR12MB6996.namprd12.prod.outlook.com (2603:10b6:806:24f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.14; Sat, 21 Feb 2026 02:11:03 +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.9632.017; Sat, 21 Feb 2026 02:11:03 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 34/38] gpu: nova-core: Hopper/Blackwell: add GSP lockdown release polling Date: Fri, 20 Feb 2026 18:09:48 -0800 Message-ID: <20260221020952.412352-35-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ2PR07CA0018.namprd07.prod.outlook.com (2603:10b6:a03:505::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_|SA1PR12MB6996:EE_ X-MS-Office365-Filtering-Correlation-Id: 45d8787c-2e16-41cb-2aa8-08de70ee669c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?VPCXZNGWXd4dlVyBtZ/f/AkuEg+g1LwCotQ6NfqUs7j2qF80EVwwXuaj0yW/?= =?us-ascii?Q?PQ8Uvm4j6oVOl+bo+Cnvh4ZXlso0wYvoTX2nFo1PkK/N0qWq0orkPeQ6JHVI?= =?us-ascii?Q?m6hSfxiJoj5E2qZaKLbzLSrDGjkehDdreknvmwlEKd64Y6ti/RF80RVbKUJW?= =?us-ascii?Q?3377g7IKs53jEf+SOT/rmvrGsnrylCd+A3lvn9R/LUue8qEJJihN82+LY6dx?= =?us-ascii?Q?AXFGRTkUVLhOKZncxPviCtKL0tH22/o3ozvvkIL7Tu/QG6DYC2yI0GXDn0Cr?= =?us-ascii?Q?r36YEqGSou16OYB2heHsCC11xn8v5tGOR7oCTc0Rqh+JMnTmWjmElMRWuYZB?= =?us-ascii?Q?8w4GiVLmBYIp5DoxrYIXMzYFxOJRmY5VnAmir0RnMXFSBB8fae3mVJoHeIQt?= =?us-ascii?Q?0RVaHeZVRArjlt7SjYFiJEb0uSgpcGRMUDkV9ZmTTxeS3ZO3Ibiu5aOnFuvO?= =?us-ascii?Q?Rxw7WKvIWjM7oQLP/Ct8YCCFT0Iq5HUtF4vh+1CFD+bSEc52ac0MP/qM7tXz?= =?us-ascii?Q?MmE+E7djmFJz3bECFcP+PzYTo9+V8Lz0vFSTZxisIPWS104K5g2dR2rkcx6J?= =?us-ascii?Q?RrQGobwscntsk/pACIo6dHj53lAUGAb2WqKeuWfOoCP7ez+/XUzMMsLtIdc0?= =?us-ascii?Q?SVWxyDzNeBAxpc3Q5A5TFWdiLXhKY3OWiiK0ysxJIl929GWM/EIkFYUjMnRK?= =?us-ascii?Q?O9Ow1lQmEXlSvFXRKUNGAlrmMo/OF4MpdKMzdjCXKj9eAw/iuK2Gamz3e/E5?= =?us-ascii?Q?xO3ZRMEeSJseYdZUKB5GCfYWEgnmB+Vp6NQEOtYojSC6AhcWkxG0bNiInVRY?= =?us-ascii?Q?AI7Aa+IOlLTVJY9wRAZ5vttml4XsatZGgIn+vg9ETorOVCvcpoR5maS3It5w?= =?us-ascii?Q?W8SU/00rHvTe5mub3pzqGpAiNra/dTuLpW02ZuLZJgQ+in06EuKkqVs1yqaB?= =?us-ascii?Q?ccBopooXaHJKtF+GOeN9ejCWjcRW9kekts550x7DMr08Eifr8BHYE5g6hRJJ?= =?us-ascii?Q?6kV4X+nrq5MFYE27AWsAPjTahnswdtSG2L4VAcUpVlNmhTyrJ95DwdB5VhVO?= =?us-ascii?Q?hfoYjPdbrQskb4aJ3LJkTU00/xIPFaVrBxpm+Ij3F0vYwsbpvSONbwdLbYIb?= =?us-ascii?Q?aWpCoxOsbrwxfhH5rLcfSZQ0e2E9vxABjTTg2SBblABf5xGKbKM4CYm6RI1p?= =?us-ascii?Q?67fYVbZEMsSohsYDgk9lQ8xOzpZFexMBPPCUYNKPdnd6LdMmLwmnrRcTTfdl?= =?us-ascii?Q?KosKQiTxw37HaOi84VFvQ2hEBy4YlCx0wPR8kfEHF/WUT6EnBxRHI0wiBGt7?= =?us-ascii?Q?/5r9rozF/c1jEJ3C335YclaWt1fX6nQtHLbI0aYmDPonIS3It9iR6LJ3Tyw7?= =?us-ascii?Q?65YbzT0wHkHuGb0GnJKdIgqixObVMOZZRtgPzTGt5zppz++6ZRddHyWKRztn?= =?us-ascii?Q?tueh/TFAwvI0erY1zxU+AzU5kPOGafh2m1aP/EYxNfSz48YB/lkJVhOn+n6G?= =?us-ascii?Q?60B8lg6Oqz0OmFQPA+MK8nNUvp5CgbTo8s8JLfPb0aCaWbHU3f2WbO0mE+mx?= =?us-ascii?Q?BbYofwa7qKV8KWfuhwE=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)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?YercFifs9v2zuxP3AYph21E7Hpojbmu+T8baOTScJwCcQvWoeqq6pCONLnFo?= =?us-ascii?Q?exHBvrFo6CYDbiON4kDcMwc2sycVuTTNzz0oC8QS7/Fw18uiy1iSTUWXIf5I?= =?us-ascii?Q?QlNPccqewOM9hEa5wocWrpeuGBGC7vBJTrwnzPDH02A2g0hGDzp6XKbclkUi?= =?us-ascii?Q?4vyoYLmUrADZEhyGypQ4tAX7ch0VUhdtEmsOLpBOlcRaXZMPxyfivbWye4WA?= =?us-ascii?Q?/9oqJ9UdfqxqIqq/E7dRTpDLMqr6R16ThiWQymtLDQu5od9IEqI1hYX6l2E+?= =?us-ascii?Q?RHQajSyPEiJ0yvi3h0P/EGEyDTDU83sswmCnpGeJy14XTtfySgUzaqGRe2cB?= =?us-ascii?Q?UoD+TjPlylgRvzRFWrQg370st2piiFUPU4x3/LbZzbbPFHiWiMAZ2A+Qv3dU?= =?us-ascii?Q?G5M55uSLV/FdntVQme8DyaBNw2umc+dvdfgant4dd2Cl+JO0vqaQQDSsZRjf?= =?us-ascii?Q?d6bnE2MAyA36bsdHlTSo83Nd/SoS3yGYvuhrlVKmNsjmTC/CUG8ku10qe7tc?= =?us-ascii?Q?bFVYbXh3ZviVuQ97duAgpLqFdAcrHxSZrgMqyAD7aK/ZG1w2xq3hqWvDOTZw?= =?us-ascii?Q?kkWLq7kUCB1CRNsMWNW4Mn7XEA616+g5TlqghyocnAI5geD1DttfpVwSUbP/?= =?us-ascii?Q?RE1alq9dvDSHl5RhwfNEkPgrflFglA1WkYq2+T/pkEwqBVJs9ZUbHK00kcg4?= =?us-ascii?Q?09WV2J3WbFiAqrr9g+gFTtEDhCHUQ3F9Ipdbx0mYuLK/DcAix5ykBk5r4BMh?= =?us-ascii?Q?MJ20Yu+NTYhZ2wv83vm9PwCNeZXdVZWyYs6nrM2sXofuhTlekCTrxfWWDHYJ?= =?us-ascii?Q?E1XAxkqMzGrCRExPCHaVfwQ2y3uN+6L2OaO8tUUuQ5WmhqGuHQfBqYGVsAwC?= =?us-ascii?Q?LrCaSWy7Ob0jk97t5ZnUyB+heQZO/3HsuLuXRGr27gIYJTVi0+QTnn+S5MAN?= =?us-ascii?Q?XbjKVYD1eqKeBynuDBdiiky6AMKVhou3OrmdNSe94aSbzzeNzvADxwa1oY9j?= =?us-ascii?Q?Sd9USgGgDMRkQUru3JlkB4EUieQRrc4AuPZVxrH5A08TH0F7e1+U71miYD6y?= =?us-ascii?Q?kq8kO4Ohj87ZUGEYxwoLt2LHYs3daza2GSEUEBEECRxJY+eROQ99ly+t3KfA?= =?us-ascii?Q?XW/JYG1SA9BljaE2UOSHogipN87xXtcArM9vqRVLT34aBj2QzpbKbFYgQX0T?= =?us-ascii?Q?wiiFAWbj4v706hcx5dhOc+12x+FdEK7WbZ9T0HGe0NNQUZJph0LE2mdK67aj?= =?us-ascii?Q?A7zzuja45yN1nU3kYaAyNcIjARdKyWR+yAU6YHwvm5hKrDOD/vjhvvtQvQNK?= =?us-ascii?Q?gozP98H4ZrPOJxLlXCJpVcNEEmvLK/T4/8iKzd9Z9PhVZKZ4VOrxWn5KQjeK?= =?us-ascii?Q?wlZscFog5Akh/wecKhcJKkgPDOzRD4v4jLLZ2n/mjnKz6p+bFJKJKs6+E1Sh?= =?us-ascii?Q?+otuDbvx7OK2E2K/crzoIoSt86Ue8d4L7B3AifNoPVM19d3MGfnPe3itoRel?= =?us-ascii?Q?iuON9pFAI5Yd/FVsGuQebPbwh2tKOJmgABnLBoNlfQiFx8TmLNbTXYj0MMBR?= =?us-ascii?Q?XFdAtkxjN+jzWiApUExeM16xcAusZdlx7qai091P1AYt24n8Bl+u9kpNAs6q?= =?us-ascii?Q?mdwR00mRQfk2fJ0QXzC7+ByoSjlF74KCrd+sgDpzRIbRhuMcrifffDrmSCgB?= =?us-ascii?Q?H8BUSZDpStKONXgOtK+nyYGN/VzzNe7JK3ZgeUEzLwHcoobgec5FI7ZmKYAA?= =?us-ascii?Q?J/EnyILLFQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 45d8787c-2e16-41cb-2aa8-08de70ee669c X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:36.0495 (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: oAWW8jQtTNeeTP8YQuY4HohXlWtym6Dd8rwYCK+vuN1YrHjkC55k5ewYBuI8BIS8B3j8rQhPs1pD5QjjgfjtTA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6996 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 | 80 ++++++++++++++++++++++++++++++- drivers/gpu/nova-core/regs.rs | 1 + 2 files changed, 80 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index 7b177756d16d..5f3207bf7797 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::{ @@ -43,6 +44,54 @@ vbios::Vbios, }; =20 +/// GSP lockdown pattern written by firmware to mbox0 while RISC-V branch = privilege +/// lockdown is active. The low byte varies, the upper 24 bits are fixed. +const GSP_LOCKDOWN_PATTERN: u32 =3D 0xbadf4100; +const GSP_LOCKDOWN_MASK: u32 =3D 0xffffff00; + +/// GSP falcon mailbox state, used to track lockdown release status. +struct GspMbox { + mbox0: u32, + mbox1: u32, +} + +impl GspMbox { + /// Read both mailboxes from the GSP falcon. + fn read(gsp_falcon: &Falcon, bar: &Bar0) -> Self { + Self { + mbox0: gsp_falcon.read_mailbox0(bar), + mbox1: gsp_falcon.read_mailbox1(bar), + } + } + + /// Returns true if the lockdown pattern is present in mbox0. + fn is_locked_down(&self) -> bool { + self.mbox0 !=3D 0 && (self.mbox0 & GSP_LOCKDOWN_MASK) =3D=3D GSP_L= OCKDOWN_PATTERN + } + + /// Combines mailbox0 and mailbox1 into a 64-bit address. + fn combined_addr(&self) -> u64 { + (u64::from(self.mbox1) << 32) | u64::from(self.mbox0) + } + + /// Returns true if GSP lockdown has been released. + /// + /// Checks the lockdown pattern, validates the boot params address, + /// and verifies the HWCFG2 lockdown bit is clear. + fn lockdown_released(&self, bar: &Bar0, fmc_boot_params_addr: u64) -> = bool { + if self.is_locked_down() { + return false; + } + + if self.mbox0 !=3D 0 && self.combined_addr() !=3D fmc_boot_params_= addr { + return true; + } + + let hwcfg2 =3D regs::NV_PFALCON_FALCON_HWCFG2::read(bar, &crate::f= alcon::gsp::Gsp::ID); + !hwcfg2.riscv_br_priv_lockdown() + } +} + impl super::Gsp { /// Helper function to load and run the FWSEC-FRTS firmware and confir= m that it has properly /// created the WPR2 region. @@ -139,6 +188,35 @@ fn run_booter( booter.run(dev, bar, sec2_falcon, wpr_meta) } =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, + gsp_falcon: &Falcon, + fmc_boot_params_addr: u64, + ) -> Result { + dev_dbg!(dev, "Waiting for GSP lockdown release\n"); + + let mbox =3D read_poll_timeout( + || Ok(GspMbox::read(gsp_falcon, bar)), + |mbox| mbox.lockdown_released(bar, fmc_boot_params_addr), + Delta::from_millis(10), + Delta::from_millis(4000), + ) + .inspect_err(|_| { + dev_err!(dev, "GSP lockdown release timeout\n"); + })?; + + if mbox.mbox0 !=3D 0 { + dev_err!(dev, "GSP-FMC boot failed (mbox: {:#x})\n", mbox.mbox= 0); + return Err(EIO); + } + + dev_dbg!(dev, "GSP lockdown released\n"); + Ok(()) + } + /// 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 91911f9b32ca..8e4922399569 100644 --- a/drivers/gpu/nova-core/regs.rs +++ b/drivers/gpu/nova-core/regs.rs @@ -321,6 +321,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.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011055.outbound.protection.outlook.com [52.101.62.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 ACC3132D443; Sat, 21 Feb 2026 02:11:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.55 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639872; cv=fail; b=tWNLEYksEycf2JJ5aCmxIv23mHlRW/bfhKOc/fXmox6YPCtuNdYW30o98i0R3TvtomJ7IDEVwbdRrWJzT+fErbdpXbGOELd9k/Ftisb34h69hQUBKmgyzhosmC295lrTg5jXhPVkJSz1s8Qej7vZy4pJwNV4tscOzVfScO8AMXU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639872; c=relaxed/simple; bh=DZoHgOSPHh39Pka19wA4MXFYdUWV4OI1AOMDJxwPRr8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=S0z253NJsiYj184O/kZvJGvxeuuJ/9pBITHefDLbQwdS1jSW77UHAATuFHO5xvtvFccE0pwCnU1ug+gIKS4nOONpISYOFH4tFpkpnr9l5slsCSsdDMuE0FPRbfaseO96el3pQ31T57H3PaaiXLeF4x0IDUEmojKvgH2+8oKA3Ys= 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=eQq9w5PR; arc=fail smtp.client-ip=52.101.62.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="eQq9w5PR" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=V8IY4sTIj+fWYEYTa1B6qADlDk570hfbHIMUAddQ5zleMDM9j9UBIVMJe94zPKJDkVxT4d6e2lASWIS/gm6m/4OG7KMSmfz4jOOz31ykCkf/OIdtfrzKfkX6rGEThFbDoi/rI0qgE18nmeHnfbUzqK1pUgccryjKVsH+qVTAd8z2uA86whlgoQQwRUkFaEddZBlPJMMNKBXTJX453KvwzKQG3kX4z7EFEZCm8X7Z6qiMkdcZury9V18wqVd7MfUskTq2Plh6LUW7HS1nArP7/8icsEPzwOL+PGGSGFWltNOPW020I5G2hcmIEjqPeO+pi/SHXV2B2ACyushXEjCAVA== 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=jN5NsxO3NKLBobzcrwckLoEkVMh/rRKRwtkmV0EOSow=; b=blOSuds/0EOEeMxWK0vexlvBpSsNj7LTnRF4aDP6HMH7QNyByyIe2l+2n/7AQE7PCFiHfrCdMZ3Kqcb3zfAX71fgUVDKad5LLVpMWZADZ3p1hv6Le+O9KaPFBEmXp4Fgf3NBS/UsJtMq8AGBHOykUCnNeFZlrMynrqBd5Ds5WTsEfXmPR4Y/ZL3wVHoAohEQqm3JoQxQKLGILdTni+eiXpYV34nZzW7wYWWSTdDUZAW4MQ3pLUXLc4znzcK0n5pMRGiVsQVX/xigg7kP+kCPR0i/kgqTtBiQUZv0TpRGogaeHRqlSj6lRLjxGQsC46+Omv7SBr8/P/CXAzM/ZxM+sQ== 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=jN5NsxO3NKLBobzcrwckLoEkVMh/rRKRwtkmV0EOSow=; b=eQq9w5PRrdahOgnf1Jut1aNEcXiG6QR0GGtT4QJ+VOhVpFmqwO4lsCXarfKQgY9ZW7Zx1cKocdcofNxz+1GhxkpVESypaJOUdilKAvkaEndJU1f5R+hqFdRvuqyDUVOhJGk0esult9ciAN+nFEBDBP4//1Pq2P+OguLnz5d1LjIbAxrZ4t0wI7Ry9rhzCMm2Xt1o2GR7kx6Y9zC6h1Hyvrz/whAfDkdO/OmatNLjd94uY5yYZSHZuVHnkjue6ylZ72PI9/2i/F8vINsmVByPSZ93roCLmUrt+RpLZDjIlEo1UIeKjSlW3e5kEVO5dopl1atiPVp9FP+Lym5PaXzc5w== 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 PH7PR12MB7378.namprd12.prod.outlook.com (2603:10b6:510:20d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.16; Sat, 21 Feb 2026 02:11:04 +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.9632.017; Sat, 21 Feb 2026 02:11:03 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 35/38] gpu: nova-core: Hopper/Blackwell: new location for PCI config mirror Date: Fri, 20 Feb 2026 18:09:49 -0800 Message-ID: <20260221020952.412352-36-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR04CA0003.namprd04.prod.outlook.com (2603:10b6:a03:1d0::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_|PH7PR12MB7378:EE_ X-MS-Office365-Filtering-Correlation-Id: 3f4718f0-03c6-4836-33b9-08de70ee6778 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?MuM/y6sli7yAbrW8ie6X2Wr/xCBTdBou5BuSHGGxM8J8JVVVygllgpjQWlI0?= =?us-ascii?Q?EL9sqj/Nk4WLoTDmLnEMp7glpRmR9bXR0dHo15kSCrf/CE3uruvasKO1hiIG?= =?us-ascii?Q?9XvHnKd7OzNcijLxD1nInnIHsgmw7UoqZ10qjPgE2zBv0Fht0CYo+n7HblXX?= =?us-ascii?Q?4RJSYGS6hLKjx4/bhP+ffYgQzf3NePwn4yEIDcpr93i5M1tazmyEagH7pdUz?= =?us-ascii?Q?/B7T/WxxK8VJBqMVH74npd+ISwBTcPE1kjTFf8p2w+QhtmrdiHFjLuT+2UBO?= =?us-ascii?Q?tGqahGe5uyI3bybAsmivMilI50uMuT0AkNu/x39jDg2uf3Tgyr+hNePHWnLH?= =?us-ascii?Q?kbKGMOXPM64cOJORFEqmFBByp8/ZCpomv9OMnVMZV+Vw0RPx183G5Fpo+Mzq?= =?us-ascii?Q?IaPWwGnQQuZkjzZvB2szPuF3+Cf4cBa2PhdJBMsICkDeke4K1F78MGbx8Uvk?= =?us-ascii?Q?VVF5XugdsBgmoJv4IiTX9oR/L7Hhmjpi4ANTfvINZc1083nJzc+bJY6Zp/71?= =?us-ascii?Q?DzDePhsKjsPjDufsc8ondLfXjxRsxhzKB2E1exB7KB1p0teGNLJyAgWYuQGs?= =?us-ascii?Q?eD4bgvgNuL9V2LpKGjYRKWmKXmVwEuu95VTnqJaF7a9moY+06syfkCwemLa1?= =?us-ascii?Q?w5CE8hIuxA2E8hUANz877KR+uTXoGXkscNYD9gLKFQNSLJTGySOB61adlXsK?= =?us-ascii?Q?BXRqiYabxt1h19yx4H7cmWjTo1Vhk+hg4yvfXz+7cx3VJgX9RpYLfZTGzQcc?= =?us-ascii?Q?Q2dq4BjZA1FFcPKghr7hjxDCWM6rdbzQQwECCWMkTn5MvffZ2eh5liZ3sMWu?= =?us-ascii?Q?E4MX415vnm1b96XBJ+d/e3h7qthGq1akzrukHlCda+cK5KpYwrxEG5LANZ5O?= =?us-ascii?Q?XoyX4YyDcR7buKY0ksX8RSqhsBj+P+76xjVpUzLWoCZOo1PwE4diP4CSj/CC?= =?us-ascii?Q?qKJD99HvNwaa3EV2CtJq28MyqfbEb2k5w+RvQN+f71xMkQ+aIRtVQgJXBgD+?= =?us-ascii?Q?9DmIG2Xd5ETurbaYKzd2oQy6sM6CS6If7ONHT32W5WN6cnBUufRjisqPRBZ2?= =?us-ascii?Q?KQw0GeZqUWay4MwuHQrH2CN4Kc0ZETA2+2y2My2WyLQNs+J2vCx1PResKzP7?= =?us-ascii?Q?p3EfoVL3OqbT67WHp6+0b41WEW69jgfh0+1atRSrBMrpM/qXZYsbD37UAhd8?= =?us-ascii?Q?xwylz4Ui9gH/0FH6mcoAoC3eAxEX8HIZ1Nyi/KbnD1QFBEFjqRc3jVmJlqUI?= =?us-ascii?Q?j+x42o+66X6fjT5k2MOGyIxYQenFUPGMwbqDm2+CMBm5dKAJFRmTNYi8T14u?= =?us-ascii?Q?AzpWxC/ow0wVb5by3OgnoiZP/7t8WmzYbEbeuYaOOGCy0j3siIdCqNVw3sGx?= =?us-ascii?Q?9thv0sxZiPL1SGqnla8Euaj4gzaXx0V+Zm/izaUAyHlIhYcuOwHdYiYGs3Tx?= =?us-ascii?Q?9tLPpyW6BUAQm9AfnF5nJ+1TTGlxZngM/Hcwqn5RkE8YYoJHQKLKPD+slI+S?= =?us-ascii?Q?1daCcgOEhCx8kr5nUr0LQUgYwKIFBomguyWD1+tXC/rDWx+FZkLKPPslVq8M?= =?us-ascii?Q?YC3Oogy1RrTew4ktNCY=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)(1800799024)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?sAe1g5e1AQLQ0KWENsY0ttPZifY9e3SX14yLgOXX0O0KM5vhJzPIVEz3RqCR?= =?us-ascii?Q?BzeuRQLxKEo/s9vVPpusSvt2JRmpny8jMutynnAXF/AQKkEkyq5FsIU4RP4n?= =?us-ascii?Q?BqZBeBdKz05jiUkpGwMjBdEKzyZw5HeZ3ZB85/fn0sF3gy1uSKkK63rctR1r?= =?us-ascii?Q?ObLbyHy9tKlqZfrfh6oS7kHv4bna6kzuaVhBkZ+7+09+cQfB55elVlwe14mn?= =?us-ascii?Q?DsC7klB2p9NXUYBQq/+8k3n/HLRUU670xjIEcIMFlS997dyoHxrYU7N+hvqV?= =?us-ascii?Q?aUq/VZvZUVAk4WUEPOn2ugyUIJVqVnCQDInXAvZuA3LFyu4DoBxflFklRe3O?= =?us-ascii?Q?L1P6EXToChHUiqZOpbKwO+6PN29yjslMnUD+AiBAy/xB+xdbf+BSEEpJHVVI?= =?us-ascii?Q?ejv+rOGZX7k0p5NxCZh0zySSUKLMcM8odE17g67p1ZSUJRdaNCnDqilEO1ch?= =?us-ascii?Q?R23jpNMtY6JYOWDKyXtLDiVqvGl/0gRf1N/PqaFoJPOARPB44KM8gwhO5+UE?= =?us-ascii?Q?lMpnmfqdOdHsR9gIi77V3zSZE1vpXDH29ByKs+skpfG9YbI6ie2UrZZA732r?= =?us-ascii?Q?VyF7h02jq8Hbvxmavs3dhhfx5TRXTOaG2of5Kbfs0dLN17vjLX1bDYuulwEn?= =?us-ascii?Q?Fq9qtrD6ebwXokxJlHd1wD6A4lqg8TXRlmU6pKlkWLVbB3d53LoBtZYkqK6x?= =?us-ascii?Q?nqE58JpUHtlJe08Yoi0BI7FIbWKwqb8gmENTb5tDR+86x2Qoaj4n3lP3xyGT?= =?us-ascii?Q?k/LGu7UjpUgqnytyR126tABmhvjR6yvTdYRwu0dSEy0PAlnUh8OLPdI1hEN4?= =?us-ascii?Q?i8QC22Tczm3b/N09Aop4e+dGiiaRHVDfj5YfKqzZKCpPxW18xu9fEa9aFIYK?= =?us-ascii?Q?V60zhJ6sRmPqtraB6uXcTOm0jpseNy1uB7A61e19ihv8UqBkkQVA74u8SFo8?= =?us-ascii?Q?Wnh/4aOsO4/5QNlC4aR4tSm094xE3Dmt5wBSnrWLyDcq6qQ5cE10qWsbmCJ0?= =?us-ascii?Q?ZLkg++E93rVd0B4nqz1qJHGZCaQiLSVYZ1YQ4uLW5vcfB5oAQtGPBDsbV0W0?= =?us-ascii?Q?sg3JxOWZSU8tM1uWIX8yycRoXDLe9YRAhpeMbCVi5Mk7lkj7jvRobdWIqCJQ?= =?us-ascii?Q?RRLHoNYb0Zj5eiBLPhWcEM2PBpf6jC/H1dNTgNHP0fGl/QALV4vO7H4q+3Uu?= =?us-ascii?Q?KrMj5Ma58s5Vm6FxbtjDR5JonBrNBIHJZRfsqiml3hRZU0rUFSIoq2GbONDa?= =?us-ascii?Q?WkjxvKhKOWZNEQh0kwj2I9bZPwBf5uu0NYRVi1myEG5rBm+kN9i4rl1inI6w?= =?us-ascii?Q?7cTso1Kqw0VWy9FU7cjW50kWnWqGk4Bd5IeTxzHcKVRonDiX82nBuP79hlTJ?= =?us-ascii?Q?ARrgpgkJ4RwoaGq25Mvi5WYBCO0DkH3W7genuJq06+g4E4LluIFjSaKAxoCY?= =?us-ascii?Q?Zm8gUKK3FCmGawP+LBqkp05nkbTgNBokVvMHqvW/6jXsSuhinixxhylGgl/D?= =?us-ascii?Q?V23TV0N2xvImLzWlSwO6/3lLjpRjwRX1CNhRlHvBfrgk4QQSw74qy5HDeTFM?= =?us-ascii?Q?Y6vDT4YfUIH+sa5nLlfY2FBmyZYQ04CCi6i0bA+E7xInOUv19c/0JR3kdOMu?= =?us-ascii?Q?0WtfCkfjClTuBTRTO12BbznTAYMtiKYtY+djjXBymSgwAeMJKEpotqUnwHOu?= =?us-ascii?Q?z3z9ZpdgqvZg9aOY3HljZ+ZK0tY+CLIXbeRDjexxFUiAm/FzmmlCnP6sKDUX?= =?us-ascii?Q?2w6EMwnkGg=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3f4718f0-03c6-4836-33b9-08de70ee6778 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:37.5227 (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: 0E+6yL1jSwgRFFiMnffLs2kDnrwXeZ/6Vc2MlhRwm/7Au2q8LA5Dr3PmeN8YuVHp06wR1mAoFXChzmuBFTOW5A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7378 Content-Type: text/plain; charset="utf-8" Hopper and Blackwell GPUs use a different PCI config space mirror address (0x088000) compared to older architectures (0x088480). Update SetSystemInfo to accept a chipset parameter and select the correct address based on architecture. 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 5f3207bf7797..0db2c58e0765 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -248,7 +248,7 @@ pub(crate) fn boot( dma_write!(wpr_meta[0] =3D GspFwWprMeta::new(&gsp_fw, &fb_layout))= ?; =20 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 gsp_falcon.reset(bar)?; diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/= gsp/commands.rs index 8f270eca33be..e6a9a1fc6296 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.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011055.outbound.protection.outlook.com [52.101.62.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 1E814335547; Sat, 21 Feb 2026 02:11:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.55 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639877; cv=fail; b=AYldZvgLEffH5atm+h2ufTgWDAINMr375qfAcmgJjk71jwZyPRuELJmwK1kIo0ajSqladKCAiuz4Dw7goEAIsBfAcQfht0Kcllxi0sVIo4K0lQxJBWBKeMbqEDPrtdPGf0BDmvqCfFTxInqQ6/lb4M+IVMOicGinKM2vuBq+Z4E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639877; c=relaxed/simple; bh=L17fv4lddZByoHdQBjFDYwYYChTh1eFwvaMV7GiAhmA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=KMx+V+oXrcdliCgwlXuHJmICOq4sMBJa5kSWF+9OX/6JsRWWIC7HMjWapJs04eQe9oSLlyzrtSFUT5D+sHHKh8wtQ3EZ2V4QOA77/Qozk6sE6Qipnol+UFDi55CdAX0FVUy3aVbP6fCYNfkCI1b2X2Kbl5V+wrM1S352/xpq08E= 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=JxdPoQMs; arc=fail smtp.client-ip=52.101.62.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="JxdPoQMs" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iMfQNXHAgVc3Z6FJP7pRcnXSoJE5l7xGpgiFxi5DunrUerDNisJ930WPaXLWi0DAChn8N/B5LMPClDXHmhYuh3tfTKPSkaFBgEq2UV9TFSSORoly/8KXICa+jwdAsiSQ7MjV6724f/eEKLHiHEuGvRdSyBVxRjnFITyIRIrbl/OfjkYiHc3IfNZnogVq2mIGHTrsI4tzEWnlwmQGuNI1z2b886WQ5Zj6iMybRoy6t+uCKSdV7BSVJ2B/BwElM8aCQ7uW+vp0TUizHdfWMTdtLocksjsjzzSWhE6xm+GtgxqPO9oiQ1OhfvEsxE+lVF7btLo+A+7Up3iRKyJUlCpeHg== 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=rg3pmjqEw/ruiPsg2UsmwGOX5sKPA38C7hEUjPR40/I=; b=AHIzYEaCjkxzo++oa+Od5rd2eH0f/ij9fEdwinSqLFlPkPX8WBWoaeZb3cY8WW24bBCCfjxAETq4LkojWy3Wn6OTAgmKHc5OU5QKh11TPH4WOHRZrFcVPxQTbtqn0ULwz22JM1MVf7UEhPG/nn/3apqSM1MSyD+1oGlPBsAVt9/pwai8jMjvmTbuMh0fzXKbJw0ua0Zf9azB3TQ/MFRN3aPK/sAvoF8KzZOQqtN5czccHQau6ooSyxUZQUfMEBoqC4vbbpfY9XhHkWhjKGvAu+6Pt3makCL8PgEDS7tEfaeS2xuY3BkHTj5yHEPENp+BbRsTVkU1n2i2Q6JJOOJ9XQ== 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=rg3pmjqEw/ruiPsg2UsmwGOX5sKPA38C7hEUjPR40/I=; b=JxdPoQMstQZ2NSQj9T8dkR7DSO2ITkW1U1id8Vwewdj90U8hXslIicvs1l/oLqfcQ+d+YYSzpuntaY7+PFGxD+GkfTsjp8c+7yQtAG9H6cC/iKe5WgcSZoDTONG2vpGFn2eVA8epekPgJPY0S/4Z4N+T4WnB00Nu/iVUT1pBx4ExlZOayA82sKc1ovTFt3DA5n80hgsQygu58r/YVudAEJ8r7k03V20RxHhcu3Ow3trJ6HdmZxSSw4qUmXii+nenk3nt2UBhaM9lJa2arZJop8W7Ldp0vgXL510DfhPZhNzU91Lhp4LnQqiP4Da5VtyKhoL3Q+0dxCcm6z7mv+eqxg== 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 PH7PR12MB7378.namprd12.prod.outlook.com (2603:10b6:510:20d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.16; Sat, 21 Feb 2026 02:11:04 +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.9632.017; Sat, 21 Feb 2026 02:11:04 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 36/38] gpu: nova-core: Hopper/Blackwell: integrate FSP boot path into boot() Date: Fri, 20 Feb 2026 18:09:50 -0800 Message-ID: <20260221020952.412352-37-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY3PR05CA0037.namprd05.prod.outlook.com (2603:10b6:a03:39b::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_|PH7PR12MB7378:EE_ X-MS-Office365-Filtering-Correlation-Id: 5596b5d6-1e6d-416e-d6e4-08de70ee6842 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?9Dv4dSF7xYZXqnC2AxTV4MnS0Tr7G9AfV1nZu8LwtJdMWYxfA+ETrbeYMJ/x?= =?us-ascii?Q?cXLFZvheTL6Oi2nrqFsHQDx3JigRsP+17B51R0ViJh2Jn7M9XVsLkTcIs/BD?= =?us-ascii?Q?iMDSpzbvlXP7OvvsQ26Y525zHIZ7IrNxXFFK+YAJ1mnJH2XvNR5LvPSZE0AO?= =?us-ascii?Q?iY7HjcVOVzd96TLZAzcYPyklL8Xcl6pSO90rVyiU0CWMNQxcf3130oyoyWhl?= =?us-ascii?Q?7MjI9Osd5hKgHykTd+nFSmpr5UBGF++2+NpL9gKf2qh6Pa5Ye59foxx1I04G?= =?us-ascii?Q?jIqtCzoz3otmhDQjIkCULIwhDcV5WIs6Dhm2P1vaXVPlOA+FKuJOsZ/IAhhw?= =?us-ascii?Q?pgc7ClKD06KeuUDSgcRs0U8AvHPw84JvjEMgsqxtizORwhwyz9SnipL8mcry?= =?us-ascii?Q?1UENYlg5MLQ1seK3VzIhL548I8ofYCmaJnH3X012wyQq2mW7nQpJKgWhF9o6?= =?us-ascii?Q?U5rDBNXA55iPRfJFNUNefYLZOeo7WyUHXb8WtqZTzrHD82ZyT6ERDkTf6qel?= =?us-ascii?Q?tpT1pV2J/1T0sAb/Jt8t08ElKKGimkp+PlHisr/hXz5v8stXTqA0S/PMthMe?= =?us-ascii?Q?xtmWDf5sYgQV+U/x0C5oaoflxjCMz1XTr1Y3pWp1PkGILsOa5HwG7qAl1CaH?= =?us-ascii?Q?gMCfPMeWe/6eCWsKsAgPrGwdUTik4ayjYKmBRFkgHfjJX/CkRwz1PbTmtK1Y?= =?us-ascii?Q?jPDdRci5Z/2IQxkuqC7Xg7wUt0Z1uuB8/6SAgXJiTulImilU6ztKfKakCgLS?= =?us-ascii?Q?E/o5D/b/XRJbPzrW8XbkZy8PdJEKeNnRSMZG8EPNsekJJ5KsZvh6g8myWYSI?= =?us-ascii?Q?5eqDyT689Pmjf5aoJSKzq/K9a/7v8PBKLnImsflQZoXx1xAk42Bk6tGY+Wqq?= =?us-ascii?Q?dSo5XcmAl29lRWJmNXjyGmTRYriMKV20GIlnVpg15vs53S8U8Mm2YZ5c63qD?= =?us-ascii?Q?WP7/KayHeRopgrrSKDkye6t/95yBvYL8kG97+kQdDvojAsKIkRZQE6V3Y4Q4?= =?us-ascii?Q?A9a1WCR/NqOYzkJgASg79LQ1hlEsccl3YYi02VZ6Ubkdusw6tIll+xEKHxUt?= =?us-ascii?Q?whHjQn/sUdCSc5IF7Yx94q2gfwhUtVOhhDNGFcGitNRo+DqBmvH46TazFyku?= =?us-ascii?Q?v0LnUIBianE2RKH1arZBqq9juqAcdxRfybKH9DETt6IBurhhKafCBH8veGnl?= =?us-ascii?Q?iz9Uo5hlTWv85xl5EX9Ye4cnxBZ8IY1+Eq8M8g/B+0xYkxYrNa1sfW4RnkfB?= =?us-ascii?Q?jxFebA0tAnQWVA9SGI3iiMA4pwNdWXKTGEATqrXHUELUrvJuYvmFuEVH2A2d?= =?us-ascii?Q?L4zhvTWNhE58YNooDxPcD5j4MaqhEUGmQERHWO6WWXcutdZ+1RO4xzm0jBdX?= =?us-ascii?Q?0xXOng2FkjWfmWgU3YCzKFl18qaNapz03lCUXKCuhR6/xJGCAgkoVQCcckle?= =?us-ascii?Q?c2ULWMIm14nNo0bGO94h145nMUkfWg/U2oNZzgGCM2GZ0k1G/tD/gN8diYX8?= =?us-ascii?Q?hB9YwpETHlEhFcgvrUqBKa2ReZ0krZHcs7F4t/wb7ALcfrtx94tTzFYHjN2t?= =?us-ascii?Q?zdQxzglx2orDya7bkqY=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)(1800799024)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?QPGeEgfZDj16XFBMvM8FyhqqZtHwkqmfyn8rDxzqh8geS/NcwvRggi8rxEq/?= =?us-ascii?Q?FHgEA9DbnWsd6H24GSZ2G8yQf/wQ6eYaY9cuDtoPnrT2XnnZQa4nt/MKP3YL?= =?us-ascii?Q?k+rcnS48ozhP+JPWnFqKJ7GYgbtwoaT2HpreMPgWaPx/dxZAfpU51ewqnYmw?= =?us-ascii?Q?kFw+3LKes+KuQ0TfIIxDn70UU6IcPn+LwvISOmIX3rPCb7bk3wC5Og9tQAhc?= =?us-ascii?Q?/TvOjxzZ7mjK/3s8kty6k57LS42GzYG3NEKu5lgIK0oOm8U9S7vzAVaplRxN?= =?us-ascii?Q?xCIYtRc3Zj5rousYIhBNRxE69uXBWXC0wLxZfSwXvS9KzVC+aenKuQha9yGA?= =?us-ascii?Q?kc2TRpP6Ku1BRZuHsNKe/Tdn4UEy9vvvEfC3ZuDS/7WEzk1Bk1rEDZvRMJJw?= =?us-ascii?Q?YZFgJ9xFriXRSn7ECm9U/+IoJFAe0aCEy9qkXSQ62l0K4z+6QVxzm5Mpvkae?= =?us-ascii?Q?Ziv21J3+jCnz/wvX4Y2QyB/qeXzuycChdCUSQKEZUmvWP/pidg5oEZ9fgLQF?= =?us-ascii?Q?vkuawCmy+NISylbnawH9g5ZrJrpL0tGsZ2FZe479Y8m09ehmVnzkpAAb2tfo?= =?us-ascii?Q?R1wE1+jGJS0N+k5fpmed36ZCYrPAkN94A4nv97TdKEhTjN++O8NWguLmvErV?= =?us-ascii?Q?UxDyNpqAoP0kXMbEvbzJfdSITyK/u4lY3k9HXn62X2aSDLi7xNN4s+IZhUMy?= =?us-ascii?Q?m9Qh65TZpr3Il+AERCfvl3vicO5zKGyDW1KalwQsKtwUrhpB8UT4l3hXZsh5?= =?us-ascii?Q?XH5eUKPgvw5cPnzn4KB0mBYdI4oOOuFyiOj9R4ILJ/Ij/4mWJ7Icpm5Km3/Q?= =?us-ascii?Q?y/yQFrWRe0hjrnYyPdIIVZgqVoHpGPatkwZ1h3k8xkyIIutxbBiOk1L8vZpA?= =?us-ascii?Q?xsKfzy2qLam0J37Cs8YYjv9EAmA1U0AvMyljXzEc0To+fNEhmjzlGXNUrz4L?= =?us-ascii?Q?V+vgU2cNq6i0nYix2sn4jmREZ5/cEIGhg3H1NMPgk5nqMR/4cIIRf28+dM84?= =?us-ascii?Q?L5SkMZWTR28pZqxgZ8gUUjbgOdENSVfs3yno6i/o67GRYt4ELHF88LJ8D2Ck?= =?us-ascii?Q?MYFy0e//8Syb9xao2SfAG2ZoBmIcyoi/ez6/FeKI9MJ4SXS7en3szT9gZ626?= =?us-ascii?Q?OnKGQlfYxbgGB5KjTxH1ExsmHxxQ9WFZ1ECVWI6Lq9hS94PKs8tYgm/3O+WX?= =?us-ascii?Q?27PqoL/hJwK3/I+24/GtXirD5gIaPA5c7qlaCh1ahgB4LPkVa+MSPEzN8PF2?= =?us-ascii?Q?vjkiM2RCB9xrhqG3anSjsDPU15k/I+qim5lezKqK6fMr8sM3TLCj8IHDV4/o?= =?us-ascii?Q?5YONaW+Oy6BrIxgxeEZncgCiFr4G0fJBWrAx7QM3pud7QOTL0OJxU7JA0OiJ?= =?us-ascii?Q?0o2yqlrpU0R3lIqMEPyaj8ov7nnQzSky/12/xDwmOBVE1lUOsE7lwihRPNSf?= =?us-ascii?Q?RXtwtP/He/9n3tNbcH9cUOH92k2RtUtaeYy1MtiodvzPT89hNNx339zUTbni?= =?us-ascii?Q?XWd1dCTt+O+jIdFreEY4w+TO9Wy0SkSueEqvl9ejx/+S1rDGW5pO32bVaAx2?= =?us-ascii?Q?8MqyeVyrmQG3qazqU7GIi2vEcD/z0Q22Bf2nxZkuTFjmpl1iUjEl1y9y2ZYW?= =?us-ascii?Q?u0v2W2lqb6JwXvdW+mYT5UBexHbXbg088+9RMK/FgmeKUQQFCqtDVn6Kdac3?= =?us-ascii?Q?rUMN+XhQKjxOixFaNCbxjIfjbsL+ewwSMJFAGygHJxKI7iot2JxAqHCsRw2V?= =?us-ascii?Q?fxP/8ER6+g=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5596b5d6-1e6d-416e-d6e4-08de70ee6842 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:38.8175 (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: MSWAztKl/uVJsTeKuFArW5eiM5XpCrTr5cHy4SsaQ6UxZ6MD5JVcHoJZ/VavVH9xjsHlTkZ7rmPSygcBkwPWIw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7378 Content-Type: text/plain; charset="utf-8" Add the FSP boot path for Hopper and Blackwell GPUs. These architectures use FSP with FMC firmware for Chain of Trust boot, rather than SEC2. boot() now dispatches to boot_via_sec2() or boot_via_fsp() based on architecture. The SEC2 path keeps its original command ordering. The FSP path sends SetSystemInfo/SetRegistry after GSP becomes active. The GSP sequencer only runs for SEC2-based architectures. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/firmware/fsp.rs | 2 - drivers/gpu/nova-core/fsp.rs | 5 - drivers/gpu/nova-core/gsp/boot.rs | 190 +++++++++++++++++++------- 3 files changed, 144 insertions(+), 53 deletions(-) diff --git a/drivers/gpu/nova-core/firmware/fsp.rs b/drivers/gpu/nova-core/= firmware/fsp.rs index bb35f363b998..0e72f1378ef0 100644 --- a/drivers/gpu/nova-core/firmware/fsp.rs +++ b/drivers/gpu/nova-core/firmware/fsp.rs @@ -13,7 +13,6 @@ gpu::Chipset, // }; =20 -#[expect(dead_code)] pub(crate) struct FspFirmware { /// FMC firmware image data (only the "image" ELF section). pub(crate) fmc_image: DmaObject, @@ -22,7 +21,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 c66ad0a102a6..3749b5e3a677 100644 --- a/drivers/gpu/nova-core/fsp.rs +++ b/drivers/gpu/nova-core/fsp.rs @@ -238,7 +238,6 @@ pub(crate) struct FmcBootArgs<'a> { impl<'a> FmcBootArgs<'a> { /// Build FMC boot arguments, allocating the DMA-coherent boot paramet= er /// structure that FSP will read. - #[expect(dead_code)] #[allow(clippy::too_many_arguments)] pub(crate) fn new( dev: &device::Device, @@ -287,7 +286,6 @@ pub(crate) fn new( =20 /// DMA address of the FMC boot parameters, needed after boot for lock= down /// release polling. - #[expect(dead_code)] pub(crate) fn boot_params_dma_handle(&self) -> u64 { self.fmc_boot_params.dma_handle() } @@ -301,7 +299,6 @@ impl Fsp { /// /// Polls the thermal scratch register until FSP signals boot completi= on /// or timeout occurs. - #[expect(dead_code)] pub(crate) fn wait_secure_boot( dev: &device::Device, bar: &crate::driver::Bar0, @@ -331,7 +328,6 @@ pub(crate) fn wait_secure_boot( /// /// Extracts real cryptographic signatures from FMC ELF32 firmware sec= tions. /// Returns signatures in a heap-allocated structure to prevent stack = overflow. - #[expect(dead_code)] pub(crate) fn extract_fmc_signatures( dev: &device::Device, fmc_fw_data: &[u8], @@ -391,7 +387,6 @@ pub(crate) fn extract_fmc_signatures( /// /// Builds the COT message from the pre-configured [`FmcBootArgs`], se= nds it /// to FSP, and waits for the response. - #[expect(dead_code)] pub(crate) fn boot_fmc( dev: &device::Device, bar: &crate::driver::Bar0, diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index 0db2c58e0765..1fdcb72ce163 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,17 @@ gsp::GspFirmware, FIRMWARE_VERSION, // }, - gpu::Chipset, + fsp::{ + FmcBootArgs, + Fsp, // + }, + gpu::{ + Architecture, + Chipset, // + }, gsp::{ commands, + fw::LibosMemoryRegionInitArgument, sequencer::{ GspSequencer, GspSequencerParams, // @@ -188,8 +198,83 @@ fn run_booter( booter.run(dev, bar, sec2_falcon, wpr_meta) } =20 + /// 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, + gsp_falcon: &Falcon, + wpr_meta: &CoherentAllocation, + libos: &CoherentAllocation, + ) -> 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)?; + + let signatures =3D Fsp::extract_fmc_signatures(dev, &fsp_fw.fmc_fu= ll)?; + + let args =3D FmcBootArgs::new( + dev, + chipset, + &fsp_fw.fmc_image, + wpr_meta.dma_handle(), + core::mem::size_of::() as u32, + libos.dma_handle(), + false, + &signatures, + )?; + + Fsp::boot_fmc(dev, bar, &fsp_falcon, &args)?; + + let fmc_boot_params_addr =3D args.boot_params_dma_handle(); + Self::wait_for_gsp_lockdown_release(dev, bar, gsp_falcon, fmc_boot= _params_addr)?; + + Ok(()) + } + /// 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, @@ -233,45 +318,49 @@ pub(crate) fn boot( sec2_falcon: &Falcon, ) -> Result { let dev =3D pdev.as_ref(); - - let bios =3D Vbios::new(dev, bar)?; + 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 - 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 - self.cmdq - .send_command(bar, commands::SetSystemInfo::new(pdev, chipset)= )?; - self.cmdq.send_command(bar, commands::SetRegistry::new())?; - - 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, - "GSP MBOX0: {:#x}, MBOX1: {:#x}\n", - mbox0, - mbox1 - ); - - dev_dbg!( - pdev, - "Using SEC2 to load and run the booter_load firmware...\n" - ); + // Architecture-specific boot path + if uses_sec2 { + // SEC2 path: send commands before GSP reset/boot (original or= der). + self.cmdq + .send_command(bar, commands::SetSystemInfo::new(pdev, chip= set))?; + self.cmdq.send_command(bar, commands::SetRegistry::new())?; =20 - Self::run_booter(dev, bar, chipset, sec2_falcon, &wpr_meta)?; + Self::boot_via_sec2( + dev, + bar, + chipset, + gsp_falcon, + sec2_falcon, + &fb_layout, + &self.libos, + &wpr_meta, + )?; + } else { + Self::boot_via_fsp( + dev, + bar, + chipset, + gsp_falcon, + &wpr_meta, + &self.libos, + )?; + } =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 @@ -282,22 +371,31 @@ pub(crate) fn boot( Delta::from_secs(5), )?; =20 - dev_dbg!( - pdev, - "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 - // 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)?; + // For FSP path, send commands after GSP becomes active. + if matches!( + chipset.arch(), + Architecture::Hopper | Architecture::Blackwell + ) { + self.cmdq + .send_command(bar, commands::SetSystemInfo::new(pdev, chip= set))?; + self.cmdq.send_command(bar, commands::SetRegistry::new())?; + } + + // SEC2-based architectures need to run the GSP sequencer + if uses_sec2 { + let libos_handle =3D self.libos.dma_handle(); + let seq_params =3D GspSequencerParams { + bootloader_app_version: gsp_fw.bootloader.app_version, + libos_dma_handle: libos_handle, + gsp_falcon, + sec2_falcon, + dev: dev.into(), + bar, + }; + GspSequencer::run(&mut self.cmdq, seq_params)?; + } =20 // Wait until GSP is fully initialized. commands::wait_gsp_init_done(&mut self.cmdq)?; @@ -305,8 +403,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, "GPU name: {}\n", name), - Err(e) =3D> dev_warn!(pdev, "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.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011055.outbound.protection.outlook.com [52.101.62.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 0C37832AACD; Sat, 21 Feb 2026 02:11:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.55 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639870; cv=fail; b=TZw3VgaIz59QB9vYV9sPOQEN4sCyXcWlRxSRKNLXpcQ0EEhJ+OjKNkKCi6K2bVeDX3WP0mRkRd8Srzjqmws8bzUiWZvmTugB3y+ggU1p6aRPebpTvUIPMpOz3CFNdExATVyEFKx9XJc2y8XXqmIveEWU0ATzIxDaRI0uZwFC/aM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639870; c=relaxed/simple; bh=X8FDbgUB/DE/li9pRqU3WL+8q9N0/BklxGMH/y1D0NA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=hit/Sd/NN/6n98ZBjLGBGi/kbC3O7ZRsxeK+obIL9M+6o6EKwWKSq2aZ+huibNCKMfadJkxHgq9B8U1OdLTekOhTZpjHtpWFwFXCDE9v3kAXnm+9E4FYN2Bkb+lplmE0ttrhjVnaOHdmugAPB/966RK0HNCiJBcaqO0rGhYOQ+E= 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=YkDweHyi; arc=fail smtp.client-ip=52.101.62.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="YkDweHyi" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WcWBgq5tnBjrWbjwo7LRec5kftHhE0qHQY1LcWUXSuN2xG0UDVb1ogy3EsCi8sHHPisxeSMtCvqIgZOCYaT1Ro7cAlZvEWBeKo9MEV3QIo37xtHYliIk69TIv8icp9DcRHe0z+7kPVuS8fwhtwbVI4Jj5f9BQ+aHe1At5Ss1gWihJSMmw/zcDbmeX5lJvjKOtBKDv8YwRr0xwMianb2jI8LsuoBOU8o7n6vO/hJ0Bc85VtDOcEdIdewKhWo50XJFwtjm3bi/ZgISv/TeHQjfHL8SNxRqfJzYRCWGZyqhfyE/tP5WyvG55r99xP/P1/WDXyNlOX3MWax4lDfcW9PTaA== 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=sGrbTVD4hWmXFMy0ksrTgIQyTrjH2c3pELJht/hKJg4=; b=psq9/ydIa4WgMd0O/k8HCAYUioWwH8LUzerjHMPopuw/C6RtM3VYXKkmZrF3JA9dFptFM24B+ihDx+DkrB+Pe5Rj9ikExfL8fM0lnEdJTde2Fy6pj1QOgcIN6Ak5H9uSyeIenONbGdXThpR6QC44dc3QDZByuvmFCMJcNw8mJnUPs+c6UxU3+MNaoqoNyCiJ0lrpz1/+ratzelmlx6AIaqOA9Sdm3+Mf7zdnxuZpY+K6ifsPXnQTpXQXI5Gfk4uVxoHzLXYyJVmdwkjLEUOmoSpYXQupaKXFo8vUsk9ugYGEK+utScwx3peGsFE//yXFRp5a30Hv+KK6hBkWJc52CQ== 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=sGrbTVD4hWmXFMy0ksrTgIQyTrjH2c3pELJht/hKJg4=; b=YkDweHyieTtm38e9kgC1yavL94Ia+jISKGO+V+tsoyaFhp5W/F6TBHdCIzYk1vvybF/WklNbNnyv+sAZcOj4p328cWXvGbpCYcsJhcwdi6teHXBw+KHz6PGP8SvhUFYahxCcCw64v0BXf7VxsJMuVqYY1jm+gJ8a28Sl1BpvWBiXQ55ll1kwXiI4E+mYsSeCy6HqbyTA+Zj6E2fTBWnEjQElsAXiyr70vxT97bdpl31kKHivFfl4bTZuGMW+t+NxEJs/cid2QFfJXkRCImv7atIscTewjWmFjaR88J55WD10sCyF6X9Iybmzzgis7gBwhrO9XSeZZNt3J9PoJTF2JQ== 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 PH7PR12MB7378.namprd12.prod.outlook.com (2603:10b6:510:20d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.16; Sat, 21 Feb 2026 02:11:05 +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.9632.017; Sat, 21 Feb 2026 02:11:05 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 37/38] rust: sizes: add u64 variants of SZ_* constants Date: Fri, 20 Feb 2026 18:09:51 -0800 Message-ID: <20260221020952.412352-38-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR04CA0014.namprd04.prod.outlook.com (2603:10b6:a03:1d0::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_|PH7PR12MB7378:EE_ X-MS-Office365-Filtering-Correlation-Id: 36fa5eaf-c38b-4e66-5f31-08de70ee68dc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?xN8Nku8posi+WMElD6R+WvAr9/GtoFvqR3pXu/pmrOMRBCKUnJJMuf0NjoCO?= =?us-ascii?Q?2wxW3lDntjL8h+ksACV1S49sVn8Qky/gYJIcrcPCIP7gJNwhf4wq0ZCsNOh7?= =?us-ascii?Q?61dKiJ6odurpWJ2ISBEKTEp7B0ovJ9mHajnKtUeGsbk818yIbEqJhy2TH0Z1?= =?us-ascii?Q?pUwXjQerlR/LB7iR8Gtv79rBTNfTVEgdXJ3OHEJdP2aT2ODLaGmIokkVd35k?= =?us-ascii?Q?jXitPjrosCjjPO+Vn/OxsQMryzdsrhJLWxhGfMZUkWYOZbO/at3gdw2FBO7j?= =?us-ascii?Q?AYner8b36T3j9HAoe0ncf0JaNAAvCzvAMzmpch/RONgW1KvK5uy9K/5W4VtC?= =?us-ascii?Q?NZoaGxazz/Q5WwHn87oiZJsimJf2DctTmsizHFno7lAFteuEXlBo6wRpED5E?= =?us-ascii?Q?hhNQ3l4iAKlxyUdKvqt+Fd8nHVNwC89iziAhlTnxHbGGj55Tdo+LCvC9MWHR?= =?us-ascii?Q?nm3lTk89+Xas5G+li0yVErTGf1mXqZIoxf4p+U2OlUeLoENxYsz0E0KXIJok?= =?us-ascii?Q?V57PFcpEIXDaHnyNKl6dTOUSXe4hrnZ6GuU7FxSZ67kDmFn7OlaeqjpKtIai?= =?us-ascii?Q?e7VWbHEDMueKvPXU1HbOUMp77G3ABdlHmoUkudFSgFhDBjB0nw740Ec9aHLB?= =?us-ascii?Q?cKdHYcqnPN4HvMWfT/3D5TnaxC3dbqxRtvFkqcanqyZWpN2bVJepblC4Mc3E?= =?us-ascii?Q?pk7mOB8378LBcGIC2Ia+62yKviePZK/xn8aE5oWkcn4Hvy8//Msi2+mQx/MB?= =?us-ascii?Q?9yzhGRyCJtrlq1jZvq3DIibep1jz8WeViRf7OCtk6ZemLCftHmHz5nP0wbbo?= =?us-ascii?Q?DAUnnFiba1AK0myoUSS2XhJYN4rTlkKD/Qw9bY4+4d5TKh8RiAV9KMrKlcr6?= =?us-ascii?Q?FHbnJk1dkM6NnpvnjJl2elLzT/EFc+RxBPRaYyrd1cbk6657vyTdj1tymIjy?= =?us-ascii?Q?YYsAhfg768DzH0pj3LdqN04Zl6NWjwl1KCAvBzYMJ3T1Gw5A/IMWJpG3ycHk?= =?us-ascii?Q?XGZOGH5Zi0VjN3sQPWgS3+XeINI8ibM6HiyzIltZp3C8dZHScB9GW3AA19Ol?= =?us-ascii?Q?lKHM78TPHJbOdULkNZMAvZJTor7e4estFyZLyrm8iVe+e92vXjcdDutXUuYD?= =?us-ascii?Q?vUW1s8+0txRSenaeyAbQafQNTYvnfxuaNR99+OOMnlGGf3qqNm3WqZDnP4rd?= =?us-ascii?Q?AxPra0Sv5RinXRg3OVzuAxdqacXIJMhDdSAdKlEuNAc4sQtytOrJAhsYFF6f?= =?us-ascii?Q?FysXseKyxkyas74EIsCk2GpntvMJKGeXyzfVnXHDOwlcRaSrT3ORndYxf8rM?= =?us-ascii?Q?mDIlJ7hjEY2gynJ7iXLMDgiOi8GaY0KYeyVsZ4ynm1KSfpiyIM27lPbhijQ2?= =?us-ascii?Q?2lGLEFFjtjT3gi9L2+l6mG1AQmjWvVXt0e5a9qzp0bqeLOFWLSoJdRsBWAAs?= =?us-ascii?Q?0NoU3EK6BfrSF2wHXsoKUxPkUsRaHQrwagjG1k4ETgy/Yt3XTO+qi0OaKCQ+?= =?us-ascii?Q?CVzGsb7v4E8x2Ka1mbLwrxH8mqONWDLd0CUqL8cXSfdqy9/yT+qSOwcsQhDP?= =?us-ascii?Q?6wOmUfdCO45reUqUJvw=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)(1800799024)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?a74Qf0/uye1XhGxSWGwAwfRxVKKzR7eZrCJzXIinwIvtrIzssgj9kdUEcxBG?= =?us-ascii?Q?b7gq+3uanputzk1goAJnPMm/63YAlNfWU8R149dgzp2RWFDyOnuNcKl9ZVMd?= =?us-ascii?Q?MXFkViZbSTR+ZGrw4DjhklcemNwHQKHfkRTCLj5V8spHCLgvwvxTr8a0xt+V?= =?us-ascii?Q?m1VltLyYDBtxb+px59xwChaBGFlm75jHmEhUDa3t4T5xz5U5AJorbfnVqjCU?= =?us-ascii?Q?GXBz0lq9egTpQMa7bWkd3dJPPysv6w4O/NJTPMx9oSz2eoFMg0etwM8dCiZj?= =?us-ascii?Q?uIUtp4MafKaHyI8BTflWZkkZ239w0YxC5fk8HE6QAoBzWpBIwrW7kjsCrSfY?= =?us-ascii?Q?yQpy4GaP6UjtTE9BAcMlZ3nsnqNX4t0InLGC44qNQ9v9uw3FF7LzCb6N84Tp?= =?us-ascii?Q?bCKpulb6No+MU1tEkPln9KY/7wqjLdHcuJM7naISJW/Dou3es04R8TVw//n6?= =?us-ascii?Q?3a+QJm/s7/IN3AYtjlDffHdQUdoSCnf7mMUPZ28FuFLDKmo8rf/0m79td1rr?= =?us-ascii?Q?mHxGzBqsGDk2bb9qX+qSxrg+T86dhzWH688A0ckEQ8/9qzYPPW3Y8DVzDvgV?= =?us-ascii?Q?UWCqmfO0+wx6/xJWjWikLW4gb04who4jYqUcQ01tSIs7ijwpOed6BrHdgXV/?= =?us-ascii?Q?1WeT8ZalKTon7infyM/LfHUTo+7WlPLZjyXbSZvR+jPdCAkA5+DRDWG37z77?= =?us-ascii?Q?WvP6fdCu5SFsD16oxph7FZnfk+H/PsqBhtDeZMrNa7AoI/XZjgtY/GCj9+WK?= =?us-ascii?Q?PmxJXMA7ZYvn7eK2mhLcgQ/mSpHUMW2bumW4Qax07I7tC3/9iLddzMPuFsei?= =?us-ascii?Q?f3FSii8IoyLxok11JZbE3bHMrmQ/bfj/MMyxdqoy8xNJi6ModLf/BJt4Tyh+?= =?us-ascii?Q?hDP6aPM0XzqGLmc1Of1MgYuClz5rS6wc0K8fnCLdHJ97sQweRtg4d3n4NyuM?= =?us-ascii?Q?p2uycmW36kex8aqC6wMx3z7zyQQlA+xjtlurOy+t3pDrXr/QfJKAcSlotIBL?= =?us-ascii?Q?dZx5vpj4Gvk4Xdgnre3RsXbDcQRtPTU2xgcccmlazVTAbQyDs3689LRwBGgh?= =?us-ascii?Q?16M3jswwKIIT8+mstOjftloj8GSA9sXdLhTbT1QshZjlZcWyj2QbYZ2oD9mQ?= =?us-ascii?Q?X+cp0FZhfQw8HLRghnM1wIv+PO04zvVr/aD54YwqH3/2PbsZHk77E7++J5z8?= =?us-ascii?Q?m4liq00D/yeDXLqG5CA/7jJu1mrkaL2VY+AOb1k1MzMl9gdSiW/5M0JyD39Z?= =?us-ascii?Q?AM27Iv8DLOyV3Dmgyrzv8F8knrRodOlI8dMcAFU7VaMjpm+gzTkn6ozuW7In?= =?us-ascii?Q?pRKgnV3lCjD8pv7TbFVZoqHz831OMdY+e21BfqnkNjS+4kWToR5u6DO3J2+j?= =?us-ascii?Q?pkxvTzsDvop4dstdDb4JvVKRgWxGj8j3x2CVsJCjJ9r8+YPSUj/OyQ2p3k+6?= =?us-ascii?Q?uVdc/XIcwU6zhpAcEUh9yOXnaYSVnMqKlOuyqoZylAdILK5qwRAVTHrsDQET?= =?us-ascii?Q?4KOZnAFb8RgIOpfpMQmLpiCQly0mYz10jS0oKwK7sIeiVg1POH69nL0kC13v?= =?us-ascii?Q?MeLFN4E0Ab7g/uBrlwMGzJMYTdP9215kx1jUhNlwoxHDc/iiyyBBooiZwtQX?= =?us-ascii?Q?4CkU1SuC4FhvcTDR2uAXFJxTC3cj7ErG5cBktrGFTIdKiHNkHmCU+IplPOQK?= =?us-ascii?Q?HzxiCVaZWqVwos4p/ZymbLjDZL1EwvwZ0T7JNV7rqx5/Rkz8ChSzWl5qL7oJ?= =?us-ascii?Q?Y8uXrL+Cbw=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 36fa5eaf-c38b-4e66-5f31-08de70ee68dc X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:39.8458 (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: eMSw2EqiH9JFDsiiQEPbfqWqF9JHHID+6/GorZB4cr5ygzcE4f05ZKlbWlP05iPPmQ5NSjRqNF9AODAaQXRLEw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7378 Content-Type: text/plain; charset="utf-8" Drivers that operate on 64-bit address spaces (GPU framebuffer layouts, DMA regions, etc.) frequently need these size constants as a u64 type. Today this requires repeated usize-to-u64 conversion calls like usize_as_u64(SZ_1M) or u64::from_safe_cast(SZ_1M), which adds boilerplate without any safety benefit. Add u64-typed constants (SZ_1K_U64 through SZ_2G_U64) alongside the existing usize constants. Every value fits in u64 (actually, within a u32 for that matter), so the as-cast is always lossless. Signed-off-by: John Hubbard --- rust/kernel/sizes.rs | 51 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/rust/kernel/sizes.rs b/rust/kernel/sizes.rs index 661e680d9330..a11c134be64e 100644 --- a/rust/kernel/sizes.rs +++ b/rust/kernel/sizes.rs @@ -48,3 +48,54 @@ pub const SZ_1G: usize =3D bindings::SZ_1G as usize; /// 0x80000000 pub const SZ_2G: usize =3D bindings::SZ_2G as usize; + +// `u64` variants of the size constants. These are the same values as the +// `usize` constants above, but typed as `u64` to avoid repeated conversion +// boilerplate in code that operates on 64-bit address spaces. +// +// CAST: every SZ_* value below fits in u64, so `as u64` is always lossles= s. + +/// [`SZ_1K`] as a [`u64`]. +pub const SZ_1K_U64: u64 =3D SZ_1K as u64; +/// [`SZ_2K`] as a [`u64`]. +pub const SZ_2K_U64: u64 =3D SZ_2K as u64; +/// [`SZ_4K`] as a [`u64`]. +pub const SZ_4K_U64: u64 =3D SZ_4K as u64; +/// [`SZ_8K`] as a [`u64`]. +pub const SZ_8K_U64: u64 =3D SZ_8K as u64; +/// [`SZ_16K`] as a [`u64`]. +pub const SZ_16K_U64: u64 =3D SZ_16K as u64; +/// [`SZ_32K`] as a [`u64`]. +pub const SZ_32K_U64: u64 =3D SZ_32K as u64; +/// [`SZ_64K`] as a [`u64`]. +pub const SZ_64K_U64: u64 =3D SZ_64K as u64; +/// [`SZ_128K`] as a [`u64`]. +pub const SZ_128K_U64: u64 =3D SZ_128K as u64; +/// [`SZ_256K`] as a [`u64`]. +pub const SZ_256K_U64: u64 =3D SZ_256K as u64; +/// [`SZ_512K`] as a [`u64`]. +pub const SZ_512K_U64: u64 =3D SZ_512K as u64; +/// [`SZ_1M`] as a [`u64`]. +pub const SZ_1M_U64: u64 =3D SZ_1M as u64; +/// [`SZ_2M`] as a [`u64`]. +pub const SZ_2M_U64: u64 =3D SZ_2M as u64; +/// [`SZ_4M`] as a [`u64`]. +pub const SZ_4M_U64: u64 =3D SZ_4M as u64; +/// [`SZ_8M`] as a [`u64`]. +pub const SZ_8M_U64: u64 =3D SZ_8M as u64; +/// [`SZ_16M`] as a [`u64`]. +pub const SZ_16M_U64: u64 =3D SZ_16M as u64; +/// [`SZ_32M`] as a [`u64`]. +pub const SZ_32M_U64: u64 =3D SZ_32M as u64; +/// [`SZ_64M`] as a [`u64`]. +pub const SZ_64M_U64: u64 =3D SZ_64M as u64; +/// [`SZ_128M`] as a [`u64`]. +pub const SZ_128M_U64: u64 =3D SZ_128M as u64; +/// [`SZ_256M`] as a [`u64`]. +pub const SZ_256M_U64: u64 =3D SZ_256M as u64; +/// [`SZ_512M`] as a [`u64`]. +pub const SZ_512M_U64: u64 =3D SZ_512M as u64; +/// [`SZ_1G`] as a [`u64`]. +pub const SZ_1G_U64: u64 =3D SZ_1G as u64; +/// [`SZ_2G`] as a [`u64`]. +pub const SZ_2G_U64: u64 =3D SZ_2G as u64; --=20 2.53.0 From nobody Fri Apr 17 09:18:12 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011055.outbound.protection.outlook.com [52.101.62.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 BAE2F33291B; Sat, 21 Feb 2026 02:11:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.55 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639874; cv=fail; b=Krt05+6gpIYh+4LXYOL6jTz4ZL5R2oD74Cev3vMyin3syLmgcQSXaiP/pOv2fkNYgbgITIPOc4oJ1fJ9ul9sOALeqOdIJgSkmPkouLwn35y4B8TBFTXbyzL+y0tEEKs6UzJ0AyYvEMMQOd1PrcCBFTsmxlpGlB9vNxZk2jRG9Wk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771639874; c=relaxed/simple; bh=bVNIpTCZT6/bAWLPx0eNuwWnnDdXhciEfoQ9CJbBvIE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=OBjRDiTNA9F22bL5VYtjxs1XXXUn6652aQXxlfc+7scERXIQsX9ar1z173Gt90+l1sVTQdthsRPf7xYQQx8ruAfN5Ylz/6PWZmokROntaJ+CCCxR8Zvwf2ChsuLAbfWP2y9HTpEIY899E2FyT4xF2wsvolkcNq1hOkVQMdJZ8wQ= 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=WY0gmNDQ; arc=fail smtp.client-ip=52.101.62.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="WY0gmNDQ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mIUzyKbCjMB3+eCuFADkNl832QqrmDrT46AJsZzGnq2AlU3uUCfrZ9aJW2fwQRI21UsoB0s50Z1Jyln6+wQXFH+TiiNIJaOTpto4Lwe3Qhk/JGpPvf05hOsODadOpvvpAzMPhPAVFEIeYo3jzNQr+AqOYieROjo6kFAsTlghebnVniEgChpP4z4dst+V1s9CdPs7Xb/SbV+h2lLlPGBpIhbsWg+UNUsphcZ4AUi2D5amvFqakihQU/enbc4o5OsfMCF8Hd8j+CDcrsA6nBe5IWAM8D87Fo/E97xHDjVAztI3pciHCOlFodu2tY68Kc82eDxHuzexU3Nej2k8QaszkQ== 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=2zPAx6cP/WQttGVBccy6pyyPo0kn3UaOfaw+OuTKqBc=; b=mHQhMAi0Fz5KS3wO7HeLxb4IpJ6zteEecevvi5cEUO7K3C/WkowPjXym6XipO3i7MqkNbmf4K2bkR4A/puIYD/ZtSF4TqjAtO04dpCrQGXHerfLVjoAHX14LjuErrMssDLUW0icTIooavkNOjHYDuxz97eaRzKyxEUrJHf5rOTNeGfD5mG62EbUv4K2b1BebXKpYOHHqyypSTsiQ/LzmCNEEzMDuKvFHnvj7Gc6gseNsD3VRoICYkWW/CwLQBFf/7vw5ciVxb5ZjiaZ561gkuvOChCpVqtA3Qmxj4ZCubY4Jwt9xKtJyp7+EqeF3yNFYZ6bMo0GeKyYaBTflCerxmA== 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=2zPAx6cP/WQttGVBccy6pyyPo0kn3UaOfaw+OuTKqBc=; b=WY0gmNDQJpgyKCDP3zkC01G/T6LprQepqEPbkRzrlD3qdpXbLQx/u9v7CwVNxGRyiG25F2B93qSW+0ioPK+9C/tFEZr03lCJsPPQ9R8DCEdZHh+mRfDhbI8MKQbPAzcj7/trw+v5/oUrN+QteZBknhz/clT+nH/pkIgA2JfS8ef5P8ufqjn+/3eqRu6T66mKog7Rgj+OU1Ue93YH9t/wgSz7kRVp8kWeZc4VZtWTsBV4LdvZnjNT1mICnskjFyxsJB3Ag2rYE9JPCM9EE0Ech2ncvmL2zUgKaflApPGWB+/VyWeW+b20jPHxeUxnngeW0HBL6UNKoJzNch5PJ0NNnA== 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 PH7PR12MB7378.namprd12.prod.outlook.com (2603:10b6:510:20d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.16; Sat, 21 Feb 2026 02:11:05 +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.9632.017; Sat, 21 Feb 2026 02:11:05 +0000 From: John Hubbard To: Danilo Krummrich , Alexandre Courbot Cc: 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 v5 38/38] gpu: nova-core: use SZ_*_U64 constants from kernel::sizes Date: Fri, 20 Feb 2026 18:09:52 -0800 Message-ID: <20260221020952.412352-39-jhubbard@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260221020952.412352-1-jhubbard@nvidia.com> References: <20260221020952.412352-1-jhubbard@nvidia.com> X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0082.namprd03.prod.outlook.com (2603:10b6:a03:331::27) 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_|PH7PR12MB7378:EE_ X-MS-Office365-Filtering-Correlation-Id: 87f1584f-7561-4868-1665-08de70ee69b1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?P4W/UOOqnuuSo8ggacue7/qi9d87ic/NCzIVCWoL5GpmA1IhUOi7j2rvj0q5?= =?us-ascii?Q?hw0/SB5mNcCHiJ0P6gf5aXtGqeG0jIidDf1nNTxZ+5o7J41kusl4UfnBOeBr?= =?us-ascii?Q?/WsGFF22O0hk2qkAJCPScMn1Zj1/g93B/OSSEUP9GSm/18zMyRiHMs7U8URE?= =?us-ascii?Q?JqFg4+GkycBjMPE0J4KBROLhIpZOdpZ3DL/6Kdh7rcKJPYJLiBEqWSAlsuOc?= =?us-ascii?Q?OjF99pY7NPtRyAs+ThchMUEVg28zVs/U88i6whlFJeCVG4BkgmrH1gL37zto?= =?us-ascii?Q?HW3iWT4dKeDpOwTuW7d9GIK2cA+xrx7dMjWoCEoJzyz6I2FNy4wPBqwRef5W?= =?us-ascii?Q?GsQ7CrNC5zZf+1IMXyNUYjJbmo/EGW15XfT5pMU2U6zl269tTun1UsALZ1US?= =?us-ascii?Q?Zgu1ZesBaJpaB/NgrtqVKKwn72pIZ4BZGDk4VUlYdFZj8muKurbqCdZN8fWB?= =?us-ascii?Q?/HtGVCNFm6AsJ+9zUeet9E4vWGedyTBKTwyeKleDMl8C8blKuS9KtHmSXZ05?= =?us-ascii?Q?DnYf8BAujkvaIis3PNR51bkfuuv/UbDjfWY+98jN+G2zgc0mMOhLi1tIZkTF?= =?us-ascii?Q?bjN9qExjfHVd56ENLB0MPtNk25q7CXzGl6qMe+1R4z/KjQpx7OFAVvjciC27?= =?us-ascii?Q?7dq2pNIrGKvUTJAC98cOtb8GzyjwQX+0t2lmXAcJpG0sF0LgJl/k8/bij8fT?= =?us-ascii?Q?/c2UKrrRr5gXRXuTaFyDOJSafeKRIyT89sGCUADmln36bC6KxeX/0u97UEMX?= =?us-ascii?Q?ZKMI0TEHZ/gxf0POvcXfVCqlTiPfVkdvVtLyUCbm++OaZKxuUdZcRB452qdD?= =?us-ascii?Q?bpYPrJuXSBLjJ6xtX9xyo1VgVl55G3WfLerJVENIb6MUnC/9+Ne5Xd05N77Q?= =?us-ascii?Q?J0NY/asud1NHNIeG7+jhfWEFes3dg1RVELyLBjKNOEsBH4sEYCfB+9J2YwwM?= =?us-ascii?Q?n0RRdtwEG4j6eFAvJ/Gq/lEE4Ckfu7UEANyPKz/tWzw+lj/IkseyPM4Ztnab?= =?us-ascii?Q?ccI41SLqbSV5g8kGOOv/PwKAHzZpSrsjh2qMsigI8O7k3ra7I0xqY/ibZdFG?= =?us-ascii?Q?U/OH90ntXlJkrp8GB2yxy4rhImdoMdEC7QY4xV+vtio65kGm5xF9nB0Oc4x/?= =?us-ascii?Q?avkm7tRo6wffDH6eBm4YuYpT9yHsEe7v8u21r1l6ejudxVDLkHWf0wmqSFBB?= =?us-ascii?Q?ZcJ0GvS9V9uEcft3u51SYdgdowCgiCG0IIE3gJlUqsoqv8hlv/uONPDTWAH2?= =?us-ascii?Q?bxjXbNuwTL+ZIEbbPdMJWoj+obNh86f46lq67HdcW450LL7fgIW3VYH8NY+i?= =?us-ascii?Q?etiAr/d6jtIw9VWUP4g3lnQzTzoqSIP2i1gHUuOBXfaoAZWwwH45xcZkBr7T?= =?us-ascii?Q?Z8HXwgr77UmvWQlgw7TnNC1yWAQmT/duMS1ZqU/Wq6RbshiWgT7Kvo6fBwUe?= =?us-ascii?Q?6ckf4moUet3JWOlPMWdrqhU+ogJ02jxTESGwqF58eX65cAJLJUqdklkMukO8?= =?us-ascii?Q?BEI+n5xsKbLV7deevOtHUU3sq8SiuSl94At8VrVxoJS/VniVlpNz3Ges6pYs?= =?us-ascii?Q?orD2MWjKKZvDCKN2acw=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)(1800799024)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?8Ta4kQgcFL2oHfviJdOWpoxTaP5B06PWFQenbQ5BDqqRoMHvVFRRJgdx/OqU?= =?us-ascii?Q?JitRl5gfOy5LB3XNVX/oYa5pufeFBO+F6SBfGBK0xJHmyTfA4dde6JOnqKV/?= =?us-ascii?Q?Q5nHxlJo+jc8sjhvLcE8z0g1Ss/kgdtpyPQcpQ56DUYWlbwfXitfLPwQ1J+2?= =?us-ascii?Q?Mo/iXa2TtbRpxrUVQx8ezERZYSAMLLPu4Og/cNUN+NfCJGpzYkGBwaHwqHyk?= =?us-ascii?Q?SD1/IJslb4oE+LSLBCO+CR5KApkUS1UVHJPnRzRCQc7qvaflm014VI+NGPfL?= =?us-ascii?Q?CT2ir9sJqHIITDJdipRDZd+x+u2+BUCqwghNDW6HBXosI8m+vp78Emuoiuwu?= =?us-ascii?Q?cJsOExcD5y6PEpp1l7yLeNOGPgpgjlpS5j/27Dq1rtRaejL+Vrgy6ZDJ4hHG?= =?us-ascii?Q?mtswgzmej6veH+00GMBCt3Huy2vJ1qaUKux5C39BDPaXbVMDO2g1yErrmcpF?= =?us-ascii?Q?TO1Dsl0G6vs5cWncw7LmoXtu/J/fdV676BSP0JwOIZ8j1yNRbzYLWtI70MRM?= =?us-ascii?Q?nT85xazy0N3JU6zJ33HOxPef24dCZrzRQ9Z39BBboLajtgj+3lGOjh61Fjys?= =?us-ascii?Q?EA0yc8pWL/Xnzb+CfUSzuWeM7BaBwPRr18g0BfxWXddjA+aJVTnkT9QwDYag?= =?us-ascii?Q?Z+zWGi+zH9c0yTj8s63unZ6/7pyP0a/9WARY9TBCSbF/TQyO3Di+azsL1KpA?= =?us-ascii?Q?Fw7twiB7SOXAt1jX1NEtz6HOz0tNGJwWB0R5intIW2QFgUfEElnK99b4ezsq?= =?us-ascii?Q?4J0Ylx4sKUXQijLfsmhxjVgedgc06KZNiUksjvKlJQvEN1eXQVBNOq4guFPM?= =?us-ascii?Q?Tf3HMu+i6Cmy1SbSVmvJ72arKozlSMSvEkAB9wmARcGtKHSb9ejaGVvdHZkE?= =?us-ascii?Q?DKecyf/41DNprhhglRU3R1vECPX8v8CA/wgi0qwcnjl95/xclZlUQugprZkQ?= =?us-ascii?Q?vGe6hg/5mWPZk5+uL1o+JryQohraH3NVWv030BIXU9gNl83JCspDONVBX9+7?= =?us-ascii?Q?Uqx+37jha0jhyY/qCsNh473iRQjCalNEwkeXdYaDSbW3iTa1uyeoUSSXittf?= =?us-ascii?Q?HZFmc9xo6xZ3dvvZsNoqGfGY/1nDDr67zpnYewllENYGRxZ+iIGHRfDKaO/f?= =?us-ascii?Q?kfr/zZQQIPjXdSTWewS91pr6/PRE1KKySaByFEC7YwkRgoVYNtDhdANJ+c6Y?= =?us-ascii?Q?z/70cLR3p6kJv9Z/hv/DJDSM1VNijm3N0oAqnkIDMMAuSSklOLErpGoln1+n?= =?us-ascii?Q?XF7erBCJWBYyGR+Hdsqd3tJ5ezvfu7jDZFi5nYiUPECrdq6OM17BxMdtwUvR?= =?us-ascii?Q?YeQVlNysy28c3sXvM2EzDgZFBFuyeJB41EXYXW4nW509QmYXMtfRtGkbpKxK?= =?us-ascii?Q?gVK3w6SWWD9EAIGYzuimkX2SmK4qhbF4M3T/CWfnReebOPSs3qVcoiujGMte?= =?us-ascii?Q?oqhWvPruKyTUNCKNor1mjFN1N5Gk3VuCR9+K0aI7dzO+RgP2eeK6oV7oujCp?= =?us-ascii?Q?hvzwr1LgFNMrBXOefqnPnyxp5ZKCpvWRKkxhEDf6VvmZse7+fmf0R55/Vv+r?= =?us-ascii?Q?N8L5I7Xfo75Um0/N86lvwyb5BvAZAGb1QOqyfXhU24hk5WIDwFH+30KGq9ZI?= =?us-ascii?Q?fM0S6FxlK54YA4DUQHvAm9ELdTbICa6hhxoa+6UKkubq9cXkzgGGj7pEYwUC?= =?us-ascii?Q?KbQMozRhWLIo5fOAyoQQpWAv5DJ5BGJmVI1nSxp9j0objmrYYKUYMMGNEbZk?= =?us-ascii?Q?ktVrDkjDYw=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 87f1584f-7561-4868-1665-08de70ee69b1 X-MS-Exchange-CrossTenant-AuthSource: DM3PR12MB9416.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2026 02:10:41.2415 (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: HxMtv1tvJPkENW+w6mxBX2JjptifomN42Ac+VxVIOnVM9X5DYkE5hEtudnXD50zqHhKBJwsfKWOJCJLMS69hBA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7378 Content-Type: text/plain; charset="utf-8" Replace manual usize_as_u64(SZ_*) and u64::from_safe_cast(SZ_*) conversions with the new SZ_*_U64 constants throughout fb.rs, gsp/fw.rs, and regs.rs. This removes the conversion boilerplate and the now-unused usize_as_u64 import in fb.rs. Signed-off-by: John Hubbard --- drivers/gpu/nova-core/fb.rs | 19 ++++++++----------- drivers/gpu/nova-core/gsp/fw.rs | 23 ++++++++++------------- drivers/gpu/nova-core/regs.rs | 6 +++--- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/drivers/gpu/nova-core/fb.rs b/drivers/gpu/nova-core/fb.rs index 08e6dd815352..ab52a82e21a4 100644 --- a/drivers/gpu/nova-core/fb.rs +++ b/drivers/gpu/nova-core/fb.rs @@ -24,10 +24,7 @@ firmware::gsp::GspFirmware, gpu::Chipset, gsp, - num::{ - usize_as_u64, - FromSafeCast, // - }, + num::FromSafeCast, regs, }; =20 @@ -105,7 +102,7 @@ pub(crate) fn calc_non_wpr_heap_size(chipset: Chipset) = -> u64 { hal::fb_hal(chipset) .non_wpr_heap_size() .map(u64::from) - .unwrap_or(usize_as_u64(SZ_1M)) + .unwrap_or(SZ_1M_U64) } =20 pub(crate) struct FbRange(Range); @@ -136,8 +133,8 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Resul= t { if f.alternate() { let size =3D self.len(); =20 - if size < usize_as_u64(SZ_1M) { - let size_kib =3D size / usize_as_u64(SZ_1K); + if size < SZ_1M_U64 { + let size_kib =3D size / SZ_1K_U64; f.write_fmt(fmt!( "{:#x}..{:#x} ({} KiB)", self.0.start, @@ -145,7 +142,7 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Resul= t { size_kib )) } else { - let size_mib =3D size / usize_as_u64(SZ_1M); + let size_mib =3D size / SZ_1M_U64; f.write_fmt(fmt!( "{:#x}..{:#x} ({} MiB)", self.0.start, @@ -195,14 +192,14 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0, gsp_f= w: &GspFirmware) -> Result< =20 let vga_workspace =3D { let vga_base =3D { - const NV_PRAMIN_SIZE: u64 =3D usize_as_u64(SZ_1M); + const NV_PRAMIN_SIZE: u64 =3D SZ_1M_U64; let base =3D fb.end - NV_PRAMIN_SIZE; =20 if hal.supports_display(bar) { match regs::NV_PDISP_VGA_WORKSPACE_BASE::read(bar).vga= _workspace_addr() { Some(addr) =3D> { if addr < base { - const VBIOS_WORKSPACE_SIZE: u64 =3D usize_= as_u64(SZ_128K); + const VBIOS_WORKSPACE_SIZE: u64 =3D SZ_128= K_U64; =20 // Point workspace address to end of frame= buffer. fb.end - VBIOS_WORKSPACE_SIZE @@ -222,7 +219,7 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0, gsp_fw:= &GspFirmware) -> Result< =20 let frts =3D { const FRTS_DOWN_ALIGN: Alignment =3D Alignment::new::= (); - const FRTS_SIZE: u64 =3D usize_as_u64(SZ_1M); + const FRTS_SIZE: u64 =3D SZ_1M_U64; let frts_base =3D vga_workspace.start.align_down(FRTS_DOWN_ALI= GN) - FRTS_SIZE; =20 FbRange(frts_base..frts_base + FRTS_SIZE) diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index 7fa9d3b1a592..6ab0586d5e85 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -16,10 +16,7 @@ Alignable, Alignment, // }, - sizes::{ - SZ_128K, - SZ_1M, // - }, + sizes::*, transmute::{ AsBytes, FromBytes, // @@ -53,9 +50,9 @@ enum GspFwHeapParams {} // See Open RM: kgspCalculateGspFwHeapSize and related functions. // // 14MB for Hopper/Blackwell+. -const GSP_FW_HEAP_PARAM_BASE_RM_SIZE_GH100: u64 =3D 14 * num::usize_as_u64= (SZ_1M); +const GSP_FW_HEAP_PARAM_BASE_RM_SIZE_GH100: u64 =3D 14 * SZ_1M_U64; // 142MB client alloc for ~188MB total. -const GSP_FW_HEAP_PARAM_CLIENT_ALLOC_SIZE_GH100: u64 =3D 142 * num::usize_= as_u64(SZ_1M); +const GSP_FW_HEAP_PARAM_CLIENT_ALLOC_SIZE_GH100: u64 =3D 142 * SZ_1M_U64; // Hopper/Blackwell+ minimum heap size: 170MB (88 + 12 + 70). // See Open RM: GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS3_BAREMETAL_MIN_MB for the = base 88MB, // plus Hopper+ additions in kgspCalculateGspFwHeapSize_GH100. @@ -89,7 +86,7 @@ fn client_alloc_size(chipset: Chipset) -> Result { /// Returns the amount of memory to reserve for management purposes fo= r a framebuffer of size /// `fb_size`. fn management_overhead(fb_size: u64) -> Result { - let fb_size_gb =3D fb_size.div_ceil(u64::from_safe_cast(kernel::si= zes::SZ_1G)); + let fb_size_gb =3D fb_size.div_ceil(SZ_1G_U64); =20 u64::from(bindings::GSP_FW_HEAP_PARAM_SIZE_PER_GB_FB) .saturating_mul(fb_size_gb) @@ -111,9 +108,9 @@ impl LibosParams { const LIBOS2: LibosParams =3D LibosParams { carveout_size: num::u32_as_u64(bindings::GSP_FW_HEAP_PARAM_OS_SIZE= _LIBOS2), allowed_heap_size: num::u32_as_u64(bindings::GSP_FW_HEAP_SIZE_OVER= RIDE_LIBOS2_MIN_MB) - * num::usize_as_u64(SZ_1M) + * SZ_1M_U64 ..num::u32_as_u64(bindings::GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS2_M= AX_MB) - * num::usize_as_u64(SZ_1M), + * SZ_1M_U64, }; =20 /// Version 3 of the GSP LIBOS (GA102+) @@ -121,9 +118,9 @@ impl LibosParams { carveout_size: num::u32_as_u64(bindings::GSP_FW_HEAP_PARAM_OS_SIZE= _LIBOS3_BAREMETAL), allowed_heap_size: num::u32_as_u64( bindings::GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS3_BAREMETAL_MIN_MB, - ) * num::usize_as_u64(SZ_1M) + ) * SZ_1M_U64 ..num::u32_as_u64(bindings::GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS3_B= AREMETAL_MAX_MB) - * num::usize_as_u64(SZ_1M), + * SZ_1M_U64, }; =20 /// Hopper/Blackwell+ GPUs need a larger minimum heap size than the bi= ndings specify. @@ -132,9 +129,9 @@ impl LibosParams { const LIBOS_HOPPER: 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_HOPPER - * num::usize_as_u64(SZ_1M) + * SZ_1M_U64 ..num::u32_as_u64(bindings::GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS3_B= AREMETAL_MAX_MB) - * num::usize_as_u64(SZ_1M), + * SZ_1M_U64, }; =20 /// Returns the libos parameters corresponding to `chipset`. diff --git a/drivers/gpu/nova-core/regs.rs b/drivers/gpu/nova-core/regs.rs index 8e4922399569..7b075ddd3ccf 100644 --- a/drivers/gpu/nova-core/regs.rs +++ b/drivers/gpu/nova-core/regs.rs @@ -10,6 +10,7 @@ use kernel::{ io::Io, prelude::*, + sizes::*, time, // }; =20 @@ -33,7 +34,6 @@ Architecture, Chipset, // }, - num::FromSafeCast, }; =20 // PMC @@ -166,7 +166,7 @@ impl NV_PFB_PRI_MMU_LOCAL_MEMORY_RANGE { /// Returns the usable framebuffer size, in bytes. pub(crate) fn usable_fb_size(self) -> u64 { let size =3D (u64::from(self.lower_mag()) << u64::from(self.lower_= scale())) - * u64::from_safe_cast(kernel::sizes::SZ_1M); + * SZ_1M_U64; =20 if self.ecc_mode_enabled() { // Remove the amount of memory reserved for ECC (one per 16 un= its). @@ -255,7 +255,7 @@ pub(crate) fn completed(self) -> bool { impl NV_USABLE_FB_SIZE_IN_MB { /// Returns the usable framebuffer size, in bytes. pub(crate) fn usable_fb_size(self) -> u64 { - u64::from(self.value()) * u64::from_safe_cast(kernel::sizes::SZ_1M) + u64::from(self.value()) * SZ_1M_U64 } } =20 --=20 2.53.0