Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.2/patches/2225520/?format=api
{ "id": 2225520, "url": "http://patchwork.ozlabs.org/api/1.2/patches/2225520/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260421-nova-unload-v2-5-2fe54963af8b@nvidia.com/", "project": { "id": 28, "url": "http://patchwork.ozlabs.org/api/1.2/projects/28/?format=api", "name": "Linux PCI development", "link_name": "linux-pci", "list_id": "linux-pci.vger.kernel.org", "list_email": "linux-pci@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260421-nova-unload-v2-5-2fe54963af8b@nvidia.com>", "list_archive_url": null, "date": "2026-04-21T06:16:15", "name": "[v2,5/5] gpu: nova-core: run Booter Unloader and FWSEC-SB upon unbinding", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "b3bf5ebf91f242ecfa8ecdf010420c5cb03e8a99", "submitter": { "id": 13521, "url": "http://patchwork.ozlabs.org/api/1.2/people/13521/?format=api", "name": "Alexandre Courbot", "email": "acourbot@nvidia.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260421-nova-unload-v2-5-2fe54963af8b@nvidia.com/mbox/", "series": [ { "id": 500739, "url": "http://patchwork.ozlabs.org/api/1.2/series/500739/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-pci/list/?series=500739", "date": "2026-04-21T06:16:10", "name": "gpu: nova-core: run unload sequence upon unbinding", "version": 2, "mbox": "http://patchwork.ozlabs.org/series/500739/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2225520/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2225520/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "\n <linux-pci+bounces-52816-incoming=patchwork.ozlabs.org@vger.kernel.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "linux-pci@vger.kernel.org" ], "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256\n header.s=selector2 header.b=umGMcs8J;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.234.253.10; helo=sea.lore.kernel.org;\n envelope-from=linux-pci+bounces-52816-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)", "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com\n header.b=\"umGMcs8J\"", "smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=40.93.194.62", "smtp.subspace.kernel.org;\n dmarc=pass (p=reject dis=none) header.from=nvidia.com", "smtp.subspace.kernel.org;\n spf=fail smtp.mailfrom=nvidia.com", "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=nvidia.com;" ], "Received": [ "from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g0C2g3kdXz1yGt\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 16:22:51 +1000 (AEST)", "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 2B3F330684C0\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 06:16:48 +0000 (UTC)", "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id C51EE223336;\n\tTue, 21 Apr 2026 06:16:47 +0000 (UTC)", "from SN4PR0501CU005.outbound.protection.outlook.com\n (mail-southcentralusazon11011062.outbound.protection.outlook.com\n [40.93.194.62])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 4C6F3369236;\n\tTue, 21 Apr 2026 06:16:46 +0000 (UTC)", "from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18)\n by CYYPR12MB8749.namprd12.prod.outlook.com (2603:10b6:930:c6::12) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.15; Tue, 21 Apr\n 2026 06:16:40 +0000", "from CH2PR12MB3990.namprd12.prod.outlook.com\n ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com\n ([fe80::7de1:4fe5:8ead:5989%4]) with mapi id 15.20.9846.016; Tue, 21 Apr 2026\n 06:16:37 +0000" ], "ARC-Seal": [ "i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1776752207; cv=fail;\n b=ttRmDLpLQMOlotPSEbmvH1S92PV3d52uN+urhDNlQdHtcI12iAcsiMKknGzUU52a/mCdKoNxe+cEH+cJ+TLJzMXOqAQqo2Yy5NUXiUw3ELJ/j5v0vmlbTk5YXgQ6DDjSoV8snznCWRucsDF11WTok3XwLTRwC/9uSVDP+9UffLU=", "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=ZoPPiuV/yQWJJ3Md+Go5uHaVO6i80mFCfVAOwnmcQXpMncx79aD+czVLl0MKoKaUYVrpXeiVNkKSjoZhEFGLUmoxoHXZ3mzbNa22ufnvMyCLSiYmmrBISGUQTB4pHr3hBDQ7G4dT3Y56wayOV5YxPsPTCcns4nLO/ycdS78gTKzvOEkSJbvmqeC109uhAQekPiX9bR36zkuaPFBnl8kI//4j9fi2Mle76o/zgqXsdEqBJbrSbSDRfAQbqEixG4I3sZpWQ4C+7FfQbKJcYqrqOnxDNj9kPNyJ1GQpT1otFzCohCusNGikQJl39ibOU8MqMVNWh3rkgIQ/VZNf2D7Maw==" ], "ARC-Message-Signature": [ "i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1776752207; c=relaxed/simple;\n\tbh=xjQW6zbG81wJLIjPC/UyEsqVGkpk/K4kHBNs4grfZwU=;\n\th=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To:\n\t To:Cc:MIME-Version;\n b=oaYyJlmnvNpxFMvFD5m2VkOo8WRHZnZ/o0HjP0RQO5LHqNDkOdKE8RYYkNMBVT5CE3vqVT2iiK5YnSbFxb6X5zFAthtB10R6OBYtyCR+eJZj5UBNCE6DYSSm9+/TKrD17SKSfvTOyjGdn/aBbDCFaqXRr3dY6r5742rhpgYdGS4=", "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=RmfhwgQCCTErv+j2CvALJmbXp9bRliRBt6dRbZo8INU=;\n b=jKRPTXJ3X02IKMJ7okAVcUQNRkcAklL69U/9visq45vU8wWXPPoGkrFTcwwauRAENw7cOzLLUT6/Hr27ae8U7eVvZBFhf19fQGAsDx+l6ik+ae/dhRHPdzFZVs4cuEl6xaZ5QxqJcLlxuY5xuJrdQpCkIemWgph7X+0CPkPRz1cL/K/7ZPE0YHBl0w7opSy3ntOKSrK9dRBNUMnmE49Ll9kyGTfKDsxLWDooqPSnGN/SEsnU9gHRrK5v663/df/hkBJBH0vzxyhwrRQteGbh8LH/ozw26svpyzbORO3DRFft228cZhwUx6Nfve+U2d71jaNzTY8TM+Z5uYKD6LOyfg==" ], "ARC-Authentication-Results": [ "i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=reject dis=none) header.from=nvidia.com;\n spf=fail smtp.mailfrom=nvidia.com;\n dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com\n header.b=umGMcs8J; arc=fail smtp.client-ip=40.93.194.62", "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com;\n dkim=pass header.d=nvidia.com; arc=none" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=RmfhwgQCCTErv+j2CvALJmbXp9bRliRBt6dRbZo8INU=;\n b=umGMcs8JUXWQlXE2fxYTHWzwpXDeGIIYc7iYHvkXK3vatIe+vN4gpPU1pxT+hNcX5rDRaF8nG7iiSeiqY/ho1TW9cNlyN3xtYdgfeZJTMXXNt6r0XnMG1xFf+y4IVn8V4pMI1Tikun4wTlfXgtZnMtBKoUspmpKVioJrcMSJnpAy4y01a4xvnRzQOfhIiiOrsgCriMZ4hnqPbznobdFR2aPruu6vNT/qG65c6FbsGmOBMydWLznAV/3mmWuVHjw+Vds4umlhWySExIBRQxvSuAgQC1b5gOVDsqxVrvTs5xnvsLBzviGg9Ojrjo0asb/azTNi78xBUmAEYWOPsqOtlA==", "From": "Alexandre Courbot <acourbot@nvidia.com>", "Date": "Tue, 21 Apr 2026 15:16:15 +0900", "Subject": "[PATCH v2 5/5] gpu: nova-core: run Booter Unloader and FWSEC-SB\n upon unbinding", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "7bit", "Message-Id": "<20260421-nova-unload-v2-5-2fe54963af8b@nvidia.com>", "References": "<20260421-nova-unload-v2-0-2fe54963af8b@nvidia.com>", "In-Reply-To": "<20260421-nova-unload-v2-0-2fe54963af8b@nvidia.com>", "To": "Danilo Krummrich <dakr@kernel.org>, Alice Ryhl <aliceryhl@google.com>,\n David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,\n Bjorn Helgaas <bhelgaas@google.com>,\n =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= <kwilczynski@kernel.org>,\n Miguel Ojeda <ojeda@kernel.org>, Gary Guo <gary@garyguo.net>, =?utf-8?q?Bj?=\n\t=?utf-8?q?=C3=B6rn_Roy_Baron?= <bjorn3_gh@protonmail.com>,\n Benno Lossin <lossin@kernel.org>, Andreas Hindborg <a.hindborg@kernel.org>,\n Trevor Gross <tmgross@umich.edu>, Boqun Feng <boqun@kernel.org>", "Cc": "John Hubbard <jhubbard@nvidia.com>,\n Alistair Popple <apopple@nvidia.com>,\n Joel Fernandes <joelagnelf@nvidia.com>, Timur Tabi <ttabi@nvidia.com>,\n Eliot Courtney <ecourtney@nvidia.com>, nouveau@lists.freedesktop.org,\n dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,\n linux-pci@vger.kernel.org, rust-for-linux@vger.kernel.org,\n Alexandre Courbot <acourbot@nvidia.com>", "X-Mailer": "b4 0.15.2", "X-ClientProxiedBy": "OS7PR01CA0249.jpnprd01.prod.outlook.com\n (2603:1096:604:24b::18) To CH2PR12MB3990.namprd12.prod.outlook.com\n (2603:10b6:610:28::18)", "Precedence": "bulk", "X-Mailing-List": "linux-pci@vger.kernel.org", "List-Id": "<linux-pci.vger.kernel.org>", "List-Subscribe": "<mailto:linux-pci+subscribe@vger.kernel.org>", "List-Unsubscribe": "<mailto:linux-pci+unsubscribe@vger.kernel.org>", "MIME-Version": "1.0", "X-MS-PublicTrafficType": "Email", "X-MS-TrafficTypeDiagnostic": "CH2PR12MB3990:EE_|CYYPR12MB8749:EE_", "X-MS-Office365-Filtering-Correlation-Id": "e3c1417f-98f5-4dd0-ee2c-08de9f6d8b49", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "\n\tBCL:0;ARA:13230040|376014|7416014|1800799024|10070799003|366016|921020|56012099003|18002099003|22082099003;", "X-Microsoft-Antispam-Message-Info": "\n\tv2fKXLpXjGrDM+ooJ1Bg6cWGurVqMjPXXOVwCD15s72Vts6dsBvt6yKynrHh4X4oph1/3EXUUYEmJQ4zjEVrl0sIFLChWajXKz8AVMutN91e4jlez0MOjXKJt1XYSsJmeI9O6MCdoHICLj8F4xb8uDnoSfVJtrmV2GO//qKFIZoMvsQO8f/GJJ7BxIdHyCp57BR7VJHP+5uFLSlO7UGMoAsScog+ODTzx7i6YAsjNJOtafCIWAhthElLvXS1ZqFe0C945Zfp5ZH1/3KAmyuu3/zEI75qON6hCD5KnbWeuiwo/eOzmczwzSLyDGD+1hPxhY4BW+Xh3CHwrpj6vZYqWC0LDRie6JwQWPg6ETyA2EubXVMU3FkUtHPWSwB8ZknrocmuitsWZR8sqbFR7jkyi7AHqSpjD3o2mONdCXxrjtiRWvndAOxUoCtrUZUA2g8VTd3QzpwN4tHtEIWcS1F0InGLlpBhLXUFiWoEKbZ3ZRIlYJGRgUpnnm09kqVhCL8HWcKHXKhjM2QtiIbBJnoiwQqKf2vVK6IPsiXuNCIO/x56qabUSyHmuv+707zeEs62KYNeaIXjjN96stH9LlXZTD1FBe+6DEKS2qdYmF2KYUNc5DIn7Jcq0Wzx5XKWR+QLutONu5htuLmRX5+HUsE2lnN2M8JLEy3fpmOlH+wh0KkThu0Bai/H1Ozrd3nEw0IwVSDmTMpeTnIfEUJdNjOGo0fiaOehrYURZFVvEygLKtZ4gEyeqSPbLQ79e/GatI16lp2pX5dsk61U3DvVaMYbwQ==", "X-Forefront-Antispam-Report": "\n\tCIP: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)(7416014)(1800799024)(10070799003)(366016)(921020)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1101;", "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "2", "X-MS-Exchange-AntiSpam-MessageData-0": "=?utf-8?q?Yr1Evn1IX0JVpepGb1yJoJIyYLGM?=\n\t=?utf-8?q?c9/22Zt9PBnvf8pAoEPLXF3Dl5zj8GvM76YuZtDLh6JA6cVbfZY2rrcj/BGPYSoXQ?=\n\t=?utf-8?q?6QCL1VunE79rHPAflJ4/DKfAGiUzRZxufhe4x2/r3RAgiZFiTXHHsuviibH4bw+AN?=\n\t=?utf-8?q?ztdr1AIo8hJK/lGb3njK5lGuR9kpeJ8XGCWl/dXLTTfh/Jkhfs2sPnmCeMH8jp09s?=\n\t=?utf-8?q?C/AH7PhPgQQI3LdUk3c9nEYh5E6kw2Qf1VNOdiVcNDuksA169nJK7kxhwbUDnbyOW?=\n\t=?utf-8?q?zvOThJm81H+tXEu2naFRzm2XHuCT7GF9/Wm3e0AQRwK1jmmZL0eRaL+UzoppZSjEl?=\n\t=?utf-8?q?agC0X1r6C758C/mycA6+FpGfueIQ6RbiSIYT64IRo8sD/U1ehlKIRrGVeSV4qsNuX?=\n\t=?utf-8?q?sr9GdzVn0UJDx7L2xSv6YufRBk8mxTGbgPyAWCdJiujSKlVA2W/H7lu7B+CMu9ffh?=\n\t=?utf-8?q?ptdp8nV8SOIqKzbrgsmSSPsqiTHe49XN8mGj+1xWr9oM3irBB8y1hCCbhZ6IhGXyd?=\n\t=?utf-8?q?ebBTHDkxgB1YKoy5ZRlbME4FKrL1FqvAVXyfweT4wJyM+DgSF0u4xUdeVPUT8wmmq?=\n\t=?utf-8?q?iq1vLuOQ11t//kpMmEq7wviJ04Eg7Byp80dnFm/+A1nZXjDwNz45sOgAqnenSgR6A?=\n\t=?utf-8?q?5plTREsPHVD2pOTNOOE45REgPayi9qAoNwzWcF8PtwcbeZHklAkUpr4E/7ToQZ0xj?=\n\t=?utf-8?q?EoyoJQXDXhnuSxgC/1IVq0ROqTHYOSpapzv9NZMzXVO7gdJECOHCC14Ga7gDEnhwH?=\n\t=?utf-8?q?FrgXhghaepcpc4TrxPul0TvqtDeTva8eZ77sMcMRZd2l/018v4UQOiRO3v+rdG/zK?=\n\t=?utf-8?q?SA3Mq9wj7ADHAUwKp6rBUg4971SRbt8rVZVC1/bMYGS5y55UrIRKZp5Pqi6dKx5fS?=\n\t=?utf-8?q?knTrdCirY7YfCt3bVzf7rJwrE9sy2gn/i9sEOgzyNsvwHOipEQMo0YOxRWKIY0Stp?=\n\t=?utf-8?q?7SAgAO8f5i9BhkWADOlzvhHK2Gk2QW0MZj+iOoyAXwmCk7sUjyFud0N0OvGnIYMDQ?=\n\t=?utf-8?q?mJzPsXTfl0JV4Ab6V/bM5ar0ptyMQx8JzcFRIXqMLSVt1aU5AFXMjztSqy4csXZ0F?=\n\t=?utf-8?q?dxruEVWvrzCOdNID4dlFIErlhTAjRymAe9zV4wRpWBN5NtxfMEskUGCnMvYq/n9F7?=\n\t=?utf-8?q?lQs6mAXNMTUCdPNKwuZLPVg3NTYJAcHgVrHZPz1iZTdBDTPXbfK6MdFq258LG/rQk?=\n\t=?utf-8?q?qnsmLhOgQLtEKktp4WO9Wx0uZyoCUOqRYMWPkGbQ3vkzPl2aLc3q0keGrC4dcNNgF?=\n\t=?utf-8?q?FFRmFNDbCx9eoeSJNtSWiQ8hcyIsSt1xWP/Nff67LbWU3u1+sJsDbCtgPtfxUKPuJ?=\n\t=?utf-8?q?HJ3SF6kWenQqAFVJNXwWQQ555F8VnMF3J3l1dIY2rnxatoYyzt539v1z4iTOUSUld?=\n\t=?utf-8?q?A6U+eMumeey+gqhVRuTLEb2ty08rgKfF4TKlPKyVfqi8WG3UlOKW8oH6fwneDd85g?=\n\t=?utf-8?q?ayXKX44V0FcDWHovp4vjBhhC1R0s/qWazqefYxnLCHiXcDmIGJEL035ZzS9HJGsxm?=\n\t=?utf-8?q?vA+aKKGFjgc1YsIzZ55RFrvqkyese+ibBhVTvvt5ZJqbbzaFNea08LB+H3K1lonCP?=\n\t=?utf-8?q?/WiYVkmLryPkn/nAcznDBJhiacSYcGb6cCh0kmUIJF3YBswGAajMBxQ+eOzEhc759?=\n\t=?utf-8?q?yAhWHRSN6Smpg4y5BtIo0vqShH71UQEDgJdJmpfZEqCMdpyfKWJLj8aNU8/uTbQYK?=\n\t=?utf-8?q?KI7GgkKZzu4pVGQTM?=", "X-MS-Exchange-AntiSpam-MessageData-1": "zjJ+XaYao6TlzQ==", "X-OriginatorOrg": "Nvidia.com", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n e3c1417f-98f5-4dd0-ee2c-08de9f6d8b49", "X-MS-Exchange-CrossTenant-AuthSource": "CH2PR12MB3990.namprd12.prod.outlook.com", "X-MS-Exchange-CrossTenant-AuthAs": "Internal", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "21 Apr 2026 06:16:37.2052\n (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": "\n 0orbsCHImjx2Pd6Up1o578FvjNTIV0ZWEhAh8AivbnsLUT8rJ10jW5UF6oFGZ8BTZB/iSYBZodMrRvzxS55GMw==", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CYYPR12MB8749" }, "content": "When probing the driver, the FWSEC-FRTS firmware creates a WPR2 secure\nmemory region to store the GSP firmware, and the Booter Loader loads and\nstarts that firmware into the GSP, making it run in RISC-V mode.\n\nThese operations need to be reverted upon unloading, particularly the\nWPR2 secure region creation, as its presence prevents the driver from\nsubsequently probing.\n\nThus, load and run the Booter Unloader and FWSEC-SB firmwares at unbind\ntime to put the GPU into a state where it can be probed again.\n\nSigned-off-by: Alexandre Courbot <acourbot@nvidia.com>\n---\n drivers/gpu/nova-core/firmware/booter.rs | 1 -\n drivers/gpu/nova-core/firmware/fwsec.rs | 1 -\n drivers/gpu/nova-core/gpu.rs | 8 +++++-\n drivers/gpu/nova-core/gsp/boot.rs | 43 ++++++++++++++++++++++++++++++++\n drivers/gpu/nova-core/regs.rs | 5 ++++\n 5 files changed, 55 insertions(+), 3 deletions(-)", "diff": "diff --git a/drivers/gpu/nova-core/firmware/booter.rs b/drivers/gpu/nova-core/firmware/booter.rs\nindex de2a4536b532..771b018ba580 100644\n--- a/drivers/gpu/nova-core/firmware/booter.rs\n+++ b/drivers/gpu/nova-core/firmware/booter.rs\n@@ -280,7 +280,6 @@ fn new_booter(data: &[u8]) -> Result<Self> {\n #[derive(Copy, Clone, Debug, PartialEq)]\n pub(crate) enum BooterKind {\n Loader,\n- #[expect(unused)]\n Unloader,\n }\n \ndiff --git a/drivers/gpu/nova-core/firmware/fwsec.rs b/drivers/gpu/nova-core/firmware/fwsec.rs\nindex 8810cb49db67..4108f28cd338 100644\n--- a/drivers/gpu/nova-core/firmware/fwsec.rs\n+++ b/drivers/gpu/nova-core/firmware/fwsec.rs\n@@ -144,7 +144,6 @@ pub(crate) enum FwsecCommand {\n /// image into it.\n Frts { frts_addr: u64, frts_size: u64 },\n /// Asks [`FwsecFirmware`] to load pre-OS apps on the PMU.\n- #[expect(dead_code)]\n Sb,\n }\n \ndiff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs\nindex 8f2ae9e8a519..37d0e4587ed3 100644\n--- a/drivers/gpu/nova-core/gpu.rs\n+++ b/drivers/gpu/nova-core/gpu.rs\n@@ -286,7 +286,13 @@ pub(crate) fn unbind(&self, dev: &device::Device<device::Core>) {\n return;\n };\n \n- let _ = kernel::warn_on_err!(self.gsp.unload(dev, bar, &self.gsp_falcon));\n+ let _ = kernel::warn_on_err!(self.gsp.unload(\n+ dev,\n+ bar,\n+ self.spec.chipset,\n+ &self.gsp_falcon,\n+ &self.sec2_falcon,\n+ ));\n \n self.sysmem_flush.unregister(bar);\n }\ndiff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/boot.rs\nindex 3f4e99b2497b..e00cfebe5d11 100644\n--- a/drivers/gpu/nova-core/gsp/boot.rs\n+++ b/drivers/gpu/nova-core/gsp/boot.rs\n@@ -267,7 +267,9 @@ pub(crate) fn unload(\n &self,\n dev: &device::Device<device::Bound>,\n bar: &Bar0,\n+ chipset: Chipset,\n gsp_falcon: &Falcon<Gsp>,\n+ sec2_falcon: &Falcon<Sec2>,\n ) -> Result {\n // Shut down the GSP.\n \n@@ -275,6 +277,47 @@ pub(crate) fn unload(\n .inspect_err(|e| dev_err!(dev, \"unload guest driver failed: {:?}\", e))?;\n dev_dbg!(dev, \"GSP shut down\\n\");\n \n+ // Run FWSEC-SB to reset the GSP falcon to its pre-libos state.\n+\n+ let bios = Vbios::new(dev, bar)?;\n+ let fwsec_sb = FwsecFirmware::new(dev, gsp_falcon, bar, &bios, FwsecCommand::Sb)?;\n+\n+ if chipset.needs_fwsec_bootloader() {\n+ let fwsec_sb_bl = FwsecFirmwareWithBl::new(fwsec_sb, dev, chipset)?;\n+ // Load and run the bootloader, which will load FWSEC-SB and run it.\n+ fwsec_sb_bl.run(dev, gsp_falcon, bar)?;\n+ } else {\n+ // Load and run FWSEC-SB directly.\n+ fwsec_sb.run(dev, gsp_falcon, bar)?;\n+ }\n+ dev_dbg!(dev, \"FWSEC SB completed\\n\");\n+\n+ // Remove WPR2 region if set.\n+\n+ let wpr2_hi = bar.read(regs::NV_PFB_PRI_MMU_WPR2_ADDR_HI);\n+ if wpr2_hi.is_wpr2_set() {\n+ let booter_unloader = BooterFirmware::new(\n+ dev,\n+ BooterKind::Unloader,\n+ chipset,\n+ FIRMWARE_VERSION,\n+ sec2_falcon,\n+ bar,\n+ )?;\n+\n+ sec2_falcon.reset(bar)?;\n+ sec2_falcon.load(dev, bar, &booter_unloader)?;\n+ let _ = sec2_falcon.boot(bar, Some(0xff), Some(0xff))?;\n+\n+ let wpr2_hi = bar.read(regs::NV_PFB_PRI_MMU_WPR2_ADDR_HI);\n+ if wpr2_hi.is_wpr2_set() {\n+ dev_err!(dev, \"WPR2 region still set after Booter Unloader ran\\n\");\n+ return Err(EBUSY);\n+ }\n+ }\n+\n+ dev_info!(dev, \"successfully unloaded\\n\");\n+\n Ok(())\n }\n }\ndiff --git a/drivers/gpu/nova-core/regs.rs b/drivers/gpu/nova-core/regs.rs\nindex 2f171a4ff9ba..21ff5d15f648 100644\n--- a/drivers/gpu/nova-core/regs.rs\n+++ b/drivers/gpu/nova-core/regs.rs\n@@ -176,6 +176,11 @@ impl NV_PFB_PRI_MMU_WPR2_ADDR_HI {\n pub(crate) fn higher_bound(self) -> u64 {\n u64::from(self.hi_val()) << 12\n }\n+\n+ /// Returns whether the WPR2 region is currently set.\n+ pub(crate) fn is_wpr2_set(self) -> bool {\n+ self.hi_val() != 0\n+ }\n }\n \n // PGSP\n", "prefixes": [ "v2", "5/5" ] }