get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2225520/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2225520,
    "url": "http://patchwork.ozlabs.org/api/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/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/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/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"
    ]
}