From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from SJ2PR03CU001.outbound.protection.outlook.com (mail-westusazon11012019.outbound.protection.outlook.com [52.101.43.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 5427D403B08; Mon, 29 Jun 2026 12:32:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.43.19 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782736344; cv=fail; b=I8q9xpNqejA1/8Y6k8qklnUbAGgmKEW1rABDIpqHqIJRAOu47aflFs0kk0NHJ6v1tiLARGO6jKUiynutI9Y2ND8kLmLWngNNynj0ykf1CP3osILbAVXavdcjFoIO1fNYswr+nwFJQ8uxkusRcrK4BrY9PkcY5XyCwcb37NNXp0A= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782736344; c=relaxed/simple; bh=ycx2JVG4Sa0kYfCBujFlGqF3fU6avWZehgCjJ7woKZ4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=JU3bYAeznCGnvXjY3cW1kJDjgsEBASzX4hU2YliepamXGVjYgB1h3qa+flTVhy4wFN5bHQqZlqYoJx7Nn154u3tFSk/PM6xO/rpOlBrFqxdDQLXYsYPwrmcogYLxPkFomBXeEdU2FEYEsX/FzcdmgvwIFhv/zEy4VAKgBh7b3TI= 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=AxzBu+xL; arc=fail smtp.client-ip=52.101.43.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="AxzBu+xL" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=It5nzpyFq8otH7jf3BEOMlcAbXm5KigtMU13P3zcMYJMbvwbGVJkfvTX4sYwNn+gHGzGOZZOXe1zoRrD4CENoXX8AeBWs+8ROA80oYztEdjEVjn2+ZERSh7BZAT/uxqB1XT/eamwCFFNRre/fNFSLJ6ZIrXBTs7Hdi85x6dzAOASlS1KWPaaQLfwVSBgzyoAyFa4Ok8a3R854A0IFrOTjozvaAtCfs5zqVAk6Ximse7ob0lifXhkFZIhAH6lTrJWd3aFbSlEPYcQS0h1VQ46GjoFbC9+uflx1+UFJ4lhacofcatQ5Rv9+bJ06kd3cKjhEmqi+0DvyrdzFf9ltNAZSA== 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=0rDfO/8OsTfUXmFa4QGyreI+SWDcdgMHeaz9khwpJrw=; b=n6X8frGt8fAVup9hpZTdiavBUPxW6XTM33240O+RhP3nvwUzWQKIcLcUSW80/ry6O8fIPesA+BmU9NDF9G9pYPFxbXDr/kiWAOxrt5sWET0d+aeKejkcuvCDrLZwKya0AvTvYYu4JwSo7CA3WyhoRIunw2+9bzSBhyHWQD6iDyNDDC+qfhUY4pgMmu+YqwJjyXihWXumahkE+Il4AglVtk+h8YHtYpVgLnvmDiU0Hwb2eKa/dk4XImzEsNg5qdrf4MkNV74OhCXa+R7gjYifZCrQKTnZiEAnZStnpMzisx6XzKKoPvNUI7PZIlaSVZMDARf5MoJr9mK+KG0FUE8O3w== 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=0rDfO/8OsTfUXmFa4QGyreI+SWDcdgMHeaz9khwpJrw=; b=AxzBu+xLCRf/y5S9ALsqzAK0emE5PwFmAaRgEyL6xjIy2MNqx6QnRB7UwbpS8ei98HN5K9xPaiSOamW3oljO/JWbS9jeA0ag5Xp+3eqwFYqroCl+iaIggnNdPzO5c6qichWTdBEWNYKx2lvivtrOqMKqnZ9v+LHKvNp9mZIT/0TkAFCP7Z+/J+x2KZiWlSfUDgmFwDsq9LGXnabR4FNgbIWWWPBoSvWJl6dhBvcc0XCa7iBBLHOiy+NYsaDY68Rn/KUx3MJWvoRFrNxx7fYvnjn6ABAFqafY9Tlog+R4Hi16k/8wBZAfI1Ns0Pjv99lkchDo/Xk8LD1Ur3Ds6msCzw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by PH7PR12MB8122.namprd12.prod.outlook.com (2603:10b6:510:2b7::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.12; Mon, 29 Jun 2026 12:32:18 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%4]) with mapi id 15.21.0159.018; Mon, 29 Jun 2026 12:32:18 +0000 From: Alexandre Courbot Date: Mon, 29 Jun 2026 21:31:49 +0900 Subject: [PATCH v3 06/12] gpu: nova-core: gsp: fold TU102 unload bundle construction into HAL method Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260629-nova-bootcontext-v3-6-26cb29ee8dee@nvidia.com> References: <20260629-nova-bootcontext-v3-0-26cb29ee8dee@nvidia.com> In-Reply-To: <20260629-nova-bootcontext-v3-0-26cb29ee8dee@nvidia.com> To: Danilo Krummrich , Alice Ryhl , David Airlie , Simona Vetter , Gary Guo , John Hubbard , Alistair Popple , Timur Tabi , Eliot Courtney , Zhi Wang Cc: nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Alexandre Courbot X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCP286CA0273.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c9::12) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|PH7PR12MB8122:EE_ X-MS-Office365-Filtering-Correlation-Id: 7c050561-acd8-4ee3-7671-08ded5da7561 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|23010399003|366016|1800799024|22082099003|11063799006|56012099006|18002099003|921020; X-Microsoft-Antispam-Message-Info: 3noz3xBFBmXAfh0gcd8CoNKdB2KpzePzscNkY2vFUVh2dRn9QnSCA3VxhCkAHzfdIP3Epi1XHBXPHTZa6d4udqgMSzYqft4KSWbNhL2X7sV9qGB1+hs+k6DNaalihm49EXqn5krDJVAIY+FHyc+10SP186PiqdOIH0HYg2rUgNhGrMK6eSbHmKLBNr+6f2sAyPLQFU7OgKh3idcKLlvhyOEkqRhRa4Mcc61B4mWhst5WCG9EU8HIl6Xs5UlmqJhu+7p5FNW7VrxEzgEFFoHZiJNmWZtizJKSNUWUbr6SBhYeSMeUH5Y99b2iYaVNaaSVonlUXUAMp0jnm86LfZ2kOHrG/5I9F1cwt00D+ucrjOpw6AwmCNR7GwDMVTYllrbl68B4U68GLV138Vy3dXV12VEEewYLpEpFGgioTML0mspraEFJDjQ3z+PFXhsTgcGM2i+F+oLJ/XMcSkAjF11uqEQMGWdU/BAGk5GQesVcagijm41ga8avyfy8Nb0msmMU24MAKjBBeb1plzHIvaiyoFoWB7G6ouMExS2KGdlCAoSVthH4z0DPNKhqGjWhLFgG4WiQONiSZsV+iVi9fpRi+euTEldsZlwSv5ibTKVdnbcJwWISidgRuCHXQBUxeX+i+KjiRWcDV+nmYecKN9bDOgzARKRUyV1bt/O0eCf/XcsKwKxu3Cib3r/yvfPH/1/C3gsKJnguJP+04R/f+1csRg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(23010399003)(366016)(1800799024)(22082099003)(11063799006)(56012099006)(18002099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Qnp3NXQ5WWIrd2tJOHdlSS85UnNDRklWY1YwQVkyUlFjVzlyZ0VVLzVEQzNm?= =?utf-8?B?QXBUcnpaa0JVRThpeEcvZVNHZDJVaHQwTkNGeU1LYVlDTXFBNTI5MEFDYXU4?= =?utf-8?B?T0N1N1pIeVZ5ajJqcEZscUNsYkdUaUpoeVd2U1lsVlhqRnkzNlB4WE5DcW94?= =?utf-8?B?UkxIbHUvdWxkVWVMTzVEeUpMVU9wejFkMEdYcmhyRkhXZkxaWWM5dE40OWlJ?= =?utf-8?B?OG9DS1g0NllGck91UmhYOGhTZWhIWkI2N0s4dFZkcEo5V1VnK2VrR3BtdGJ3?= =?utf-8?B?cE1nY2d5V0t3Y3A3Q2h4eCtDTEJXU1JHWk1uT3FSekk1czJ6eEFUamo2ZnQx?= =?utf-8?B?SzVVNVo0MlRBV09Mc2NwY1o0WGtaV00xaTM5Ni9NaytrcU9CRlNUcEdwUGtn?= =?utf-8?B?TlgvaDR3Sldwa080Y3NzYmlyZW1nVm9rQmNzc3IxYUUwdFA5Nlg2Q0h4dFlr?= =?utf-8?B?QW9uc3FPYzh1SVNwMUNZdms1VTR2NENTYy9HYTA3ZXJvWXI4S1VBdlY5Rktl?= =?utf-8?B?aTQ5akJQMkZSVVI2emYwbmpZU1RDckw3VXhzbVpLU2dsNjdDc01pNldDYnRm?= =?utf-8?B?WlhRaXJHYkVJNlI0dVJMaVovTUdXM25VbFdnVnp2OXAyZjFhY2M3RGJEaW5h?= =?utf-8?B?dktnd21oTndDUmhUdWNXb1dZZ2E5V0tKeDk5TmM0QXY4bC82ZEZVU29FYVk4?= =?utf-8?B?SUhFVEg0V2gwT0ZUclZDV0pGOEpPVkdsRnNXNmFQcm9ieW00N1RtWmNIc3VY?= =?utf-8?B?dmFndkZqYWd0Uk9OUHhGMGJUUDA2eUNsL1RKZ0FXLy84U2pjNmt6QktPNndX?= =?utf-8?B?aERvcHcwa05Kc0FDRnhmSSt0V0JEdUVUeDZZWGliQ2hzaEg4dlR5QzA0U0tm?= =?utf-8?B?MTE1a0NuM3lPTndLeHM3WXNxT2hJaXprVDlIWnRMcmFWYktvNGJvZlB6RHN6?= =?utf-8?B?MmNiK1BjclE0dTFlMmREaFdxQWpvMHZGUFVld2lXZExRNEt0TnVOWmtaTXoz?= =?utf-8?B?dktHQVhsMG1sTzJLeXB6YWZzZXVxZTVmNElrSEs5WmNCVkV0UzFnWWFQRkl1?= =?utf-8?B?K0NSN2Q5SlBPMUpVcWNzYlA1WDlndzZUakMvK014SDBua0pFUFAySE1wbWNp?= =?utf-8?B?aVR1YWpDclpNdWYrZWszTmJHR2dvTUNTTzBseld4cVRlcFBLcUwrR1ViL0pP?= =?utf-8?B?Vm9DcWVndm5lV2pNMU1KZ2hSUUR5T0NkUXhqei82M0ZDdU5TUUt1U0tlSWNC?= =?utf-8?B?d2FBQ3hxUXJnQ1psTTZsSFovdDVHU2ROVmR3Nzg0akx6Wi9LV3NISlVYc1U3?= =?utf-8?B?cDBUNWxLQkxuL3pFTlkzSXZoTVZycUd3MmdiTlRCdmprTTJiSDVNOUkwcitZ?= =?utf-8?B?Zjl2L3Boakx1QnJoeU01MmJVWll5Wjc4WUVaQUhlV1pEcW9WMG1EejBaVUdn?= =?utf-8?B?WHVqcVNkbmFWK3ZvajEwRytzL2gzVmFJSTd5MloyR1hJZmJROG1odlRmTHMy?= =?utf-8?B?TU9iSHFGR21wRFZsam5uZEpPOXB4eVYrdmtlZ1hhTUFIY1VINGU4TzVkRmlK?= =?utf-8?B?MnQvcWV3RE1WU1V4OTNzM1pPQzdMck1yZ2dYcEp4akQ0ZCtCdm1tdkpWYXEy?= =?utf-8?B?ekp6SkVHalVUT0M1MUpTMEQrNzJGWWVqZ3poWWkzV0lhaEU5ejBBRGZrcXVL?= =?utf-8?B?VzVmZ2VzNUFldkhxR2ZrUHZTaG45ZEJ2UGRhOUpGYmxmVzNiKzcxRGZvdk5U?= =?utf-8?B?OTJYM3BQaTdRcnFjeDFLajgvQ2tZcE9nN2lPQmVEYTBHcUJGZ1U4YkxkaHdX?= =?utf-8?B?Tll3V2NDMXFmckhKRk9RVVBUVG1RcjVoU0pUaFdYKzlQc24yQVc1OFVGUkt2?= =?utf-8?B?cXBqSUFUZmRDcXo2Yyt0TTl2eXZZelYxTFNNbktDbUN2dkwrUlFhNThyclhz?= =?utf-8?B?VGFqSFU2NjNPQnlsMGo3dEhOWXhXMEpNcDM1WDZkWkZYRkJtZE9BamVEalJI?= =?utf-8?B?WFljckdVLzFCUWxxU2RIM2dLQVBYUXF3eEpaUHpTOHpzcTdFazBsOW0vbXph?= =?utf-8?B?UUNJVWVZcUFLUGRndmtkU2o3WjFlczc4dlF1Y1o3MTVoSDBob2J6ODdUdS80?= =?utf-8?B?WXhJRGRFdGNISEdqWFhzQzlRYVA5OGcvdEdTa0tuRXpId0x0L1VKOGkvY3Zw?= =?utf-8?B?ZG95am1NM0tDQklSaVhPbENvbi9XRVhuRkcvSmRQbGRKNFZObWVNQlgrSmhj?= =?utf-8?B?ai9MUEdCcFRpMHR1RU9HdGZoS0hFam5lcG5jYlpMYVd0b2IyaGtXQjE1Y1VJ?= =?utf-8?B?Mmpvb2F1enpZQTUxdmtpL3JXSEpva3VVL2Y5eC8yNjVXaWNLcCtBcFl3UWtR?= =?utf-8?Q?NFP6eWvu2fskqVSYX0jBnN/OLW/71UGqwKbLXVfso5F2c?= X-MS-Exchange-AntiSpam-MessageData-1: aeOh4+4Q2qH7jQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7c050561-acd8-4ee3-7671-08ded5da7561 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jun 2026 12:32:18.3223 (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: YOblAiH0Wpj809VMkpPpVko30OjHze8vwTNmjjQh/4OkFKMKSVdvaiIUdTlkmIpdfG5tkNpdXMc41BcLfsKCHQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB8122 The construction of the unload bundle is currently a bit convoluted and could be done in one function instead of two. Additionally, turn that function into a method of `Tu102`. A following patch will turn the "use FWSEC bootloader" property into a flag of the TU102 HAL itself, and making this a method will allow the code to access it instead of querying `Chipset`. Signed-off-by: Alexandre Courbot --- drivers/gpu/nova-core/gsp/hal/tu102.rs | 96 ++++++++++++++++------------------ 1 file changed, 45 insertions(+), 51 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/hal/tu102.rs b/drivers/gpu/nova-core/gsp/hal/tu102.rs index d669ce7625a8..22b4927cbaa6 100644 --- a/drivers/gpu/nova-core/gsp/hal/tu102.rs +++ b/drivers/gpu/nova-core/gsp/hal/tu102.rs @@ -56,23 +56,6 @@ enum FwsecUnloadFirmware { } impl FwsecUnloadFirmware { - /// Loads the FWSEC SB firmware, as well as its bootloader if `chipset` requires it. - fn new( - dev: &device::Device, - bar: Bar0<'_>, - chipset: Chipset, - bios: &Vbios, - gsp_falcon: &Falcon, - ) -> Result { - let fwsec_sb = FwsecFirmware::new(dev, gsp_falcon, bar, bios, FwsecCommand::Sb)?; - - Ok(if chipset.needs_fwsec_bootloader() { - Self::WithBl(FwsecFirmwareWithBl::new(fwsec_sb, dev, chipset)?) - } else { - Self::WithoutBl(fwsec_sb) - }) - } - /// Runs the FWSEC SB firmware. fn run( &self, @@ -94,35 +77,6 @@ struct Sec2UnloadBundle { booter_unloader: BooterFirmware, } -impl Sec2UnloadBundle { - /// Load and prepare the resources required to properly reset the GSP after it has been stopped. - fn build( - dev: &device::Device, - bar: Bar0<'_>, - chipset: Chipset, - bios: &Vbios, - gsp_falcon: &Falcon, - sec2_falcon: &Falcon, - ) -> Result> { - KBox::new( - Self { - fwsec_sb: FwsecUnloadFirmware::new(dev, bar, chipset, bios, gsp_falcon)?, - booter_unloader: BooterFirmware::new( - dev, - BooterKind::Unloader, - chipset, - FIRMWARE_VERSION, - sec2_falcon, - bar, - )?, - }, - GFP_KERNEL, - ) - .map(|b| b as KBox) - .map_err(Into::into) - } -} - impl UnloadBundle for Sec2UnloadBundle { fn run(&self, ctx: &GspBootContext<'_>) -> Result { let dev = ctx.dev(); @@ -261,6 +215,47 @@ fn run_fwsec_frts( struct Tu102; +impl Tu102 { + /// Load and prepare the resources required to properly reset the GSP after it has been stopped. + fn build_unload_bundle( + &self, + dev: &device::Device, + bar: Bar0<'_>, + chipset: Chipset, + bios: &Vbios, + gsp_falcon: &Falcon, + sec2_falcon: &Falcon, + ) -> Result { + // Load the FWSEC SB firmware, as well as its bootloader if required. + let fwsec_sb = FwsecFirmware::new(dev, gsp_falcon, bar, bios, FwsecCommand::Sb).and_then( + |fwsec_sb| { + Ok(if chipset.needs_fwsec_bootloader() { + FwsecUnloadFirmware::WithBl(FwsecFirmwareWithBl::new(fwsec_sb, dev, chipset)?) + } else { + FwsecUnloadFirmware::WithoutBl(fwsec_sb) + }) + }, + )?; + + KBox::new( + Sec2UnloadBundle { + fwsec_sb, + booter_unloader: BooterFirmware::new( + dev, + BooterKind::Unloader, + chipset, + FIRMWARE_VERSION, + sec2_falcon, + bar, + )?, + }, + GFP_KERNEL, + ) + .map(|b| crate::gsp::UnloadBundle(b)) + .map_err(Into::into) + } +} + impl GspHal for Tu102 { fn boot( &self, @@ -281,11 +276,10 @@ fn boot( // // If the unload bundle creation fails, the GPU will need to be reset before the driver can // be probed again. - let unload_bundle = - Sec2UnloadBundle::build(dev, bar, chipset, &bios, gsp_falcon, sec2_falcon) - .inspect_err(|e| dev_warn!(dev, "Failed to prepare unload firmware: {:?}\n", e)) - .ok() - .map(crate::gsp::UnloadBundle); + let unload_bundle = self + .build_unload_bundle(dev, bar, chipset, &bios, gsp_falcon, sec2_falcon) + .inspect_err(|e| dev_warn!(dev, "Failed to prepare unload firmware: {:?}\n", e)) + .ok(); // Run the unload bundle to try and recover the GSP if an error occurs. let unload_guard = ScopeGuard::new_with_data(unload_bundle, |unload_bundle| { -- 2.54.0