[{"id":3680231,"web_url":"http://patchwork.ozlabs.org/comment/3680231/","msgid":"<DHZGE2KGUBJB.3LDRIKUMDMSRN@nvidia.com>","list_archive_url":null,"date":"2026-04-22T06:01:22","subject":"Re: [PATCH v2 5/5] gpu: nova-core: run Booter Unloader and FWSEC-SB\n upon unbinding","submitter":{"id":93201,"url":"http://patchwork.ozlabs.org/api/people/93201/","name":"Eliot Courtney","email":"ecourtney@nvidia.com"},"content":"On Tue Apr 21, 2026 at 3:16 PM JST, Alexandre Courbot wrote:\n> When probing the driver, the FWSEC-FRTS firmware creates a WPR2 secure\n> memory region to store the GSP firmware, and the Booter Loader loads and\n> starts that firmware into the GSP, making it run in RISC-V mode.\n>\n> These operations need to be reverted upon unloading, particularly the\n> WPR2 secure region creation, as its presence prevents the driver from\n> subsequently probing.\n>\n> Thus, load and run the Booter Unloader and FWSEC-SB firmwares at unbind\n> time to put the GPU into a state where it can be probed again.\n>\n> Signed-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(-)\n>\n> diff --git a/drivers/gpu/nova-core/firmware/booter.rs b/drivers/gpu/nova-core/firmware/booter.rs\n> index 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>  \n> diff --git a/drivers/gpu/nova-core/firmware/fwsec.rs b/drivers/gpu/nova-core/firmware/fwsec.rs\n> index 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>  \n> diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs\n> index 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>      }\n> diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/boot.rs\n> index 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\nWhat about a named constant if you can think of a good name for 0xff or\na comment explaining why we need to write 0xff into the two mailboxes?\nPresumably we don't care about the return value here since we check\nsuccess using the register read below.\n\nThanks for working on this, this will be a great help for avoiding\nreboots during development (since pcie reset sometimes has issues).\n\nReviewed-by: Eliot Courtney <ecourtney@nvidia.com>\n\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>  }\n> diff --git a/drivers/gpu/nova-core/regs.rs b/drivers/gpu/nova-core/regs.rs\n> index 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","headers":{"Return-Path":"\n <linux-pci+bounces-52916-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=X9mm7mqv;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.105.105.114; helo=tor.lore.kernel.org;\n envelope-from=linux-pci+bounces-52916-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=\"X9mm7mqv\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=40.93.201.29","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 tor.lore.kernel.org (tor.lore.kernel.org [172.105.105.114])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g0pWp05X7z1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 16:01:41 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id 1B8A53010BBE\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 06:01:39 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 291652773FF;\n\tWed, 22 Apr 2026 06:01:36 +0000 (UTC)","from CY3PR05CU001.outbound.protection.outlook.com\n (mail-westcentralusazon11013029.outbound.protection.outlook.com\n [40.93.201.29])\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 87EEC2505AA;\n\tWed, 22 Apr 2026 06:01:34 +0000 (UTC)","from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31)\n by DM4PR12MB7720.namprd12.prod.outlook.com (2603:10b6:8:100::12) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.17; Wed, 22 Apr\n 2026 06:01:26 +0000","from BL0PR12MB2353.namprd12.prod.outlook.com\n ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com\n ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9846.016; Wed, 22 Apr 2026\n 06:01:26 +0000"],"ARC-Seal":["i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1776837696; cv=fail;\n b=NMjrepi030VX3EW1L/9bqjatVgoPqx89ZGosvaODbM4DkNILbxo+XtO+mrqEh1BcUqe/D5iyi+nv6rdDqdjFF2IHUTq6CB6U4qAmtd9m2yIErR8s8XkTrKZqdMLgueV7uW4L8/RyVsgO9M6Z1k9m9lv1eCmD4+d3pAIoC54MJNY=","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=bV0FvVIARNT9zkvm0X2Zfv6pGjH9Hic70oBNl6a98G9Sx5UmzC8QPdUXUStuuv91t6QYuPJex/q0HyWzfDFAUenHPLiXAOlDayfFrkZu6x8LHsnPgf0yHeZnjcmn8KPCjdNAJnNkR1/b7brNPFwpIne33q5pPK4uAbG79OIRfKEn60oItkJADNdt9DUddE5KanFQUfB6ojU5mQpO6NvV06ZBjYL2k5GEGISOgHesyZ/J4yOrSp/XfC2rWyRg9cH2zO8J7TUOdSXqfGXu4wkX8gvakN9rUTIMeV+w2syhp0t657YRIJfxr/gwnh8vlXgzE+UDP0/ajwKebGfyHM1Lvw=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1776837696; c=relaxed/simple;\n\tbh=o78YrVNq12n2sdXyz2lrH0fO6Ov2V/eaxVEJGEdEhyQ=;\n\th=Content-Type:Date:Message-Id:Cc:Subject:From:To:References:\n\t In-Reply-To:MIME-Version;\n b=VDuGmipTlFJ+SBIfNI/xGoHMVojjc1FEonTsoGQFW7aCBHtzrld5IecxtQxn9dymq78+06ai9wNtFGIWFru+qRRAPqL4Y5AOxqisZx+TPRr/0Ky509PoZVkiU6j4l1/yUXRr8TCKIfN7TN/72V/fPHWY9NtRaJQ4hAHlUVyP+iA=","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=R8PJZBvzIQB5fmT8SJT1BSG/TgjTM6uErsrY+GygjEE=;\n b=bTHBOjt25g7XVF9g4n1Th2KeusrKtgp2byWNYCLgTnIKDKOsgOXq0cc4w/QG0zSuZWun/8nTaeoAeIZYJv4H2yPWmFIQLg3qYaoWne8guTWq8Wcvb/62rOabSDathRDphADv8s51Es/BuSTxXQEDdQhcQaUsBMW/H+DHP+lqpXtrBYsiVSsQFOSCRWbIaMFAXT+NwN6bYSzFvTEzKHptVqRGM8RrNeoRhfZnHWnNlC+W9pePxuJI02AJ/W7D1SH6CLAkdQr6vEKRXJXHJIT+iJ9RzYRWrj+uaNMPrmWyROHnXo21pc/5yEUBvl462v937pO2vGlibDyNXgR1PHPtqA=="],"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=X9mm7mqv; arc=fail smtp.client-ip=40.93.201.29","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=R8PJZBvzIQB5fmT8SJT1BSG/TgjTM6uErsrY+GygjEE=;\n b=X9mm7mqv1Io2QUJX3Secj221ytq8rDDuq0aR0+6TIiQxw28QNt+NpiBfMJo959c2UfFKlMG6MSTwW2TF2SD0vUYMc0jSBYI8n4U+PUjE6HpzkWGu6iWvaqRT7Eg0a98L/Leg8Qt3MuTrFmtPNCjeGMxqSxIYzFvtW4Aq83io7sCW6zJS8z53tQJvXEhVHXiGzvmVlbpC71T9XcDkAWTHKkoZ20o9uCv9/qsLrajTduLfw+h9VA/pFxKuDZSOGxc+LXw+PCWKp/A5yYF6glRhum80fE5C9rlrzGOj1aUMPU39fR0I4J3sWByzVezBnYXWUEO8kMJHikiNyYqJnaRwqA==","Content-Transfer-Encoding":"quoted-printable","Content-Type":"text/plain; charset=UTF-8","Date":"Wed, 22 Apr 2026 15:01:22 +0900","Message-Id":"<DHZGE2KGUBJB.3LDRIKUMDMSRN@nvidia.com>","Cc":"\"John Hubbard\" <jhubbard@nvidia.com>, \"Alistair Popple\"\n <apopple@nvidia.com>, \"Joel Fernandes\" <joelagnelf@nvidia.com>, \"Timur\n Tabi\" <ttabi@nvidia.com>, \"Eliot Courtney\" <ecourtney@nvidia.com>,\n <nouveau@lists.freedesktop.org>, <dri-devel@lists.freedesktop.org>,\n <linux-kernel@vger.kernel.org>, <linux-pci@vger.kernel.org>,\n <rust-for-linux@vger.kernel.org>","Subject":"Re: [PATCH v2 5/5] gpu: nova-core: run Booter Unloader and FWSEC-SB\n upon unbinding","From":"\"Eliot Courtney\" <ecourtney@nvidia.com>","To":"\"Alexandre Courbot\" <acourbot@nvidia.com>,\n \"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>,\n\t=?utf-8?q?Bj=C3=B6rn_Roy_Baron?= <bjorn3_gh@protonmail.com>,\n \"Benno Lossin\" <lossin@kernel.org>,\n \"Andreas Hindborg\" <a.hindborg@kernel.org>,\n \"Trevor Gross\" <tmgross@umich.edu>, \"Boqun Feng\" <boqun@kernel.org>","X-Mailer":"aerc 0.21.0-0-g5549850facc2","References":"<20260421-nova-unload-v2-0-2fe54963af8b@nvidia.com>\n <20260421-nova-unload-v2-5-2fe54963af8b@nvidia.com>","In-Reply-To":"<20260421-nova-unload-v2-5-2fe54963af8b@nvidia.com>","X-ClientProxiedBy":"TY4P286CA0136.JPNP286.PROD.OUTLOOK.COM\n (2603:1096:405:37f::13) To BL0PR12MB2353.namprd12.prod.outlook.com\n (2603:10b6:207:4c::31)","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":"BL0PR12MB2353:EE_|DM4PR12MB7720:EE_","X-MS-Office365-Filtering-Correlation-Id":"83e2027c-e740-409a-b96d-08dea03496c3","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"\n\tBCL:0;ARA:13230040|366016|376014|7416014|1800799024|10070799003|56012099003|18002099003|921020|22082099003;","X-Microsoft-Antispam-Message-Info":"\n\tNeJQ419T566Zk9+Gdae+N54j2fgsuSzFhSSBoRrTfrxjN2J4w4BTYVWSuU8ZHho4aExuXkZcn4JY/Jg161dB+gtxLEMSHmdtpTHosUMsZEQpDmKTpjMrLidukzWQ/t1e2dL8XAp/kWp7/1GLtVIuBjlisFAn6vptTsAp5eAznw/fJiTt0pT2RGTmy3WgFBD7Uk2/txuXR/qxVqj8W/E64cXwq/UqgJxMaa7TnTDPrcHtn+QHCKjXOhTWQQb6d2kiMmiN2BsBAMGXr8Tdw21kp8A+k11+m3F+hkd2jXZRkNlJGMaSSshEc35wBojORdXeKZ7p8cRRWpq/29cORfUX5Tr9Ew2TrSq76Vq/mTw5+5J6p10RqCGPTYXUs9P4LKFHbRQy6os1IM/d6biAgJJQKGn2Pftg+0n1YbvYORuBnGjdy9SUs/QWuRm4Y8qUVz59oZKY5rQkc9jpWBjT8FLeEawMi7U9mIG8zog5qm2ZG0Pz/+Pxhy6uEVd1EiYTJrnkPRr55pOmU0a2mO2Cf8AsJedNPrhjimSXRDxm/Aug4WyCK6PNH3onQ8W9efm6c+PH5tCnDNnZYTWAyueFynzcBj/l4dfYkip1UaGNMJg4wq5cZNCZ64tHFaOy13PpUGE/o14lz+OcyZuRoHbIZ8LbUIXItdW6bZc2/EI/iCYTJNO65qjNX2Ub73glbGQWGjzzIxsY7FVE2KpVUZLWPl00cxPUfa47RqOnnn9v3vvyB8wHfZh6YL71rVWvM4dvZQDtEbItL5djiYPFXIvQ0MdQ4A==","X-Forefront-Antispam-Report":"\n\tCIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(7416014)(1800799024)(10070799003)(56012099003)(18002099003)(921020)(22082099003);DIR:OUT;SFP:1101;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"2","X-MS-Exchange-AntiSpam-MessageData-0":"=?utf-8?q?/eFzB3aOLUHTvb6XkRBGCCDMZTGH?=\n\t=?utf-8?q?VI9e5Bbar+WaHYNcD5M2J0H50pSnJ5rA5Gp7dQgZPdemkFl4rJwS77QfsS6VeVVKS?=\n\t=?utf-8?q?qhynFhsZDbz1Gd9wAWrvNGBDNCNxdorWC3z8KhYRugtWgFq+Jg5rqvTp+zsXB8Lge?=\n\t=?utf-8?q?K5/J4k4DAzarJlG4+++b/IVCIuLcTPkKkhGoJNSkC5koxs8s4XrPId3E24XTxJ7hL?=\n\t=?utf-8?q?x5Q4m29bnbW6lna6k+3NuWRFL6+p1mxle4Bo6wlaKbYGZGBTHLqzuteRkrCjSNmkg?=\n\t=?utf-8?q?mNwnso9uuadCpGDr5xNuMGDjMAJnfZiOm6BjWHVltmuXADTCrrUdOnc0yl8eSU8Ml?=\n\t=?utf-8?q?WsnN1a/k/B/ak+PcvKadcqUErGecGtCfhr4azo6ln7mjd2tQBnR+kSjrOa0uirH+Y?=\n\t=?utf-8?q?Q8JrTF0lCzKG9rjLMhvyjuAjjXAThfZfk10sCz9I1TrPjFRn75HdHrfN9KvqmL2wn?=\n\t=?utf-8?q?dxFIJC+eZdQa0mdn70USn03DAW0sBE6xqgiCQKAuI2fFdeDVsL+F+j3kKDyeFV7Io?=\n\t=?utf-8?q?1mqZRAQfeDnyruAFx1qYluU3jl1VHXQ9yxRiJ1Fl0JVMv3M5IawHp++R/8ewAFIcP?=\n\t=?utf-8?q?eLxmm5O72hLtFYN+5PA7GSTc2FLvKKv6MChhB+6ENtan5ioYva4KTtHNJqqsGOmDl?=\n\t=?utf-8?q?gwtAo6wLybCrWpOAo+T8ED/LjPCDcSyquiKSNwWtBVQtd7QU359S8oZuq+sDfp0m4?=\n\t=?utf-8?q?SoksqRtWVFa6XUTvlpbX8zBR8FForknK/J/8IVXExx9xQV8fjAC5sCo8ZZN9LHoMJ?=\n\t=?utf-8?q?5f0/EYbCdoI2zorBIlK3hExV1gqo3A2DYnpPbH355MdphhLthFWdzaezlr/6AuBIP?=\n\t=?utf-8?q?tmg2hz26sMn0m7X80hopS74NMWuRVLZ2yVfIbFL2JK+WndCwdzAFPkvUwonpvqCuf?=\n\t=?utf-8?q?IpBRNi9li/vDKuUVYbmVSl7EyKG0aku+ZWRPpS1xcbOG5MV5/BWndJbBgQvWPDM3L?=\n\t=?utf-8?q?zBrbChO7M7KKNfRVQvpFTkvqdjdRQWNNN+kRFGTv2QsamH4Y8j6IIgQnBo8f96Mbj?=\n\t=?utf-8?q?QAIxKWYEXoYxDvg6a2v0uWy7l//Hmji/GgBwB6hoE/EWnFDn0ufJRqPdzPh3sLkxu?=\n\t=?utf-8?q?FT7RlWsKmdppg8G+6K6JzG69Gwm1j5+nzR2aaXIO4zSmuq6V+Zln5xdvGEgRHLdbn?=\n\t=?utf-8?q?yTnlBiY1oKhXBclLydyzHrUZn+vgB4BIMOwST6+r9T9ZY7B97OSOuwRsdWH5RQcNJ?=\n\t=?utf-8?q?KZeSdyfNBTObIVMBgeDy9WWpAdvWeKZaMjiElDE5QDIg0uSSR49pDHkBG4TOJ0oSW?=\n\t=?utf-8?q?of9i/VKN/E70ZOPB6kChCjzzD/NuQ2JR1jiCepOcgmWMAhJAE90umzMfMGZa5FmZY?=\n\t=?utf-8?q?OUbruyCSDh23Y2MzqqNgpUdWGAUO1GPz9ftcxIA+3PWbuXwytGyZBS/zH63bKzoeS?=\n\t=?utf-8?q?qpMn4IkOxsonzOGR5txJMlsVa2PgrPFVwxTom9NnxhSUmDwL5OJ/6SPeWodgHbWuX?=\n\t=?utf-8?q?JhG5of66nmoPO6Jy8TMGpTHfDHPU6rSO8SwQ29oDFmye59LS+Erv/f6H3vMM2bl+D?=\n\t=?utf-8?q?yRGVxj72d+fMkEJTAPbtIPqu6LxC4isGcxmbYQWyptRVWHyjEj9gyVbODkAuPYfzZ?=\n\t=?utf-8?q?gIXomnprgbckt2rFkkgFcrXzl/iAqFKdt9iL2d0aSKqxtiXjBTsRUiSbRWUzLD2vL?=\n\t=?utf-8?q?y1lNYLpz5hqJHwxCsJEimLXk4qMSENQzQNeJqFkos+rw80aiE5S9T5RCOq8m3LQ/V?=\n\t=?utf-8?q?ybSHfNC5ulKH/LKKz?=","X-MS-Exchange-AntiSpam-MessageData-1":"NIBT9HO49Hm7Vg==","X-OriginatorOrg":"Nvidia.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 83e2027c-e740-409a-b96d-08dea03496c3","X-MS-Exchange-CrossTenant-AuthSource":"BL0PR12MB2353.namprd12.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"22 Apr 2026 06:01:26.5339\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 xMb0v1W/TyOln7U80Jq9ZYXLhfKgCQFWc9/wo0/RQrJcgc6GZ1d5mBype+EI0qouSCKgU+A6srJhWjaD8w/Ijg==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"DM4PR12MB7720"}},{"id":3680463,"web_url":"http://patchwork.ozlabs.org/comment/3680463/","msgid":"<DHZMGJ0XY7EM.KFGGA9SYO74Y@nvidia.com>","list_archive_url":null,"date":"2026-04-22T10:46:41","subject":"Re: [PATCH v2 5/5] gpu: nova-core: run Booter Unloader and FWSEC-SB\n upon unbinding","submitter":{"id":13521,"url":"http://patchwork.ozlabs.org/api/people/13521/","name":"Alexandre Courbot","email":"acourbot@nvidia.com"},"content":"On Wed Apr 22, 2026 at 3:01 PM JST, Eliot Courtney wrote:\n> On Tue Apr 21, 2026 at 3:16 PM JST, Alexandre Courbot wrote:\n>> When probing the driver, the FWSEC-FRTS firmware creates a WPR2 secure\n>> memory region to store the GSP firmware, and the Booter Loader loads and\n>> starts that firmware into the GSP, making it run in RISC-V mode.\n>>\n>> These operations need to be reverted upon unloading, particularly the\n>> WPR2 secure region creation, as its presence prevents the driver from\n>> subsequently probing.\n>>\n>> Thus, load and run the Booter Unloader and FWSEC-SB firmwares at unbind\n>> time to put the GPU into a state where it can be probed again.\n>>\n>> Signed-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(-)\n>>\n>> diff --git a/drivers/gpu/nova-core/firmware/booter.rs b/drivers/gpu/nova-core/firmware/booter.rs\n>> index 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>>  \n>> diff --git a/drivers/gpu/nova-core/firmware/fwsec.rs b/drivers/gpu/nova-core/firmware/fwsec.rs\n>> index 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>>  \n>> diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs\n>> index 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>>      }\n>> diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/boot.rs\n>> index 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> What about a named constant if you can think of a good name for 0xff or\n> a comment explaining why we need to write 0xff into the two mailboxes?\n> Presumably we don't care about the return value here since we check\n> success using the register read below.\n\nOpenRM also does directly use `0xff`. These appear to be sentinel\nvalues, as Booter Unloader is supposed to return an exit status in\n`mbox0`. So if the value of `mbox0` has changed, this means that Booter\nhas indeed run.\n\nLet me add a constant to actually carry that intent through its name,\nand also add the missing check that the `mbox0` value has changed upon\nreturn.\n\nAlso the sentinel value is only useful for mbox0, so let's skip it for\nmbox1.\n\n>\n> Thanks for working on this, this will be a great help for avoiding\n> reboots during development (since pcie reset sometimes has issues).\n\nYes, and this only happens on Blackwell, which you have kindly covered!\n:) Which is the whole reason for sending this patchset now, so thanks to\nyou!","headers":{"Return-Path":"\n <linux-pci+bounces-52952-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=AcrR8Qyf;\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-52952-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=\"AcrR8Qyf\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.53.29","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 4g0ww252Tgz1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 20:49:38 +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 014593017038\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 10:46:59 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 780F42F6565;\n\tWed, 22 Apr 2026 10:46:58 +0000 (UTC)","from BL0PR03CU003.outbound.protection.outlook.com\n (mail-eastusazon11012029.outbound.protection.outlook.com [52.101.53.29])\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 CFC3D35F60F;\n\tWed, 22 Apr 2026 10:46:56 +0000 (UTC)","from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18)\n by MN0PR12MB6125.namprd12.prod.outlook.com (2603:10b6:208:3c7::15) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.19; Wed, 22 Apr\n 2026 10:46:47 +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.019; Wed, 22 Apr 2026\n 10:46:46 +0000"],"ARC-Seal":["i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1776854818; cv=fail;\n b=rJARGy2o8rEBRHGlYUhxCf9rFQ3zRLA57pCBGbP6o7q2wKtBBwu4dgaJEqmRaOQat91UgCbkIA+LVApLtRSFbS0wlIXBLGiMVvu3L9v2bQ1B1Ap9sqAZyct+tZvR88GcO/qYJeibvLxvH+rujAzrYH+iVRf6L1P3mqWBNdPiBU4=","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=XqPlxGwPCYmLxo0JwnvXqTxK7ldIaNquBbeuw278DAj0X7OTTkfGdiJmrs7kU8lh/cvgjiy1lm7I+OHxtWkinxER9dwPq12zWR6mrHnrPVqJrVZXks4G9KKulsyg+t+s3Ys9gUXq6k2qfE/NmRDfAWG8J2KHnJ2gJ960HxozF+DXGMyJNY1byd2LMZjg+IFLHldGzwqBwVNyi2Q6yW6Y7KM9gZgyKhVvIprc5NACLTwj+ZWf023SFSBRue/uIci1/x+nKejjNqN9u0+jLBHfjhn0MKSVJcTn5xuZRftwX3il8BcwOIzKCt0zYaAkaNypxDDwB8TM25Y8u6nrZ2DNSA=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1776854818; c=relaxed/simple;\n\tbh=e/LKZAbNcArdHnw2haUzZZJzS9HB9s+MmV6T7hilUoE=;\n\th=Content-Type:Date:Message-Id:Cc:Subject:From:To:References:\n\t In-Reply-To:MIME-Version;\n b=dZ/+tXXVH1RtC9IUXPhRJ0JOKdgWuAbrH91nEBTIcZaBPFGjV+xqrCUqOfMHjNK4/WNilswR8yyMARlo9Ie50nW0b8wVj8HuzDaYCzZFoa6Z+n/G7G6F8CEDNb3TA/Z3z80n5DE5lnIpUTLfYEdpotIW5I/z4SISUaM8eE8rhhA=","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=VnDCQHN5BFwFDqL7Jdd4gYiXRITXN6FHp/DhQESc4kA=;\n b=Na6RNDEyzNYFspwO17tkCntFyal92KmzNZ3btQMjrt8tt1uq1w/LLmD29Z0kwUCcXpzCp6yhzAlUSKS/Usf9cjhuSs/o7Le1icaNTnYRU4+E94eNBIK6974O0PDuZ13fKSj2nMTvVzDlJVgMAf6k6vsby76TPi0vPCcqiAdmzMXz15L+iXtco/iJFwMEjeece/IsnaGJMhXl5s5zS0XqPTDfqlhteXsTfkvBgqErV+gNyJXrZvsoy7dz4RTG6WF0cU1ppHf9OTQzRirwlY8CfXdd+/2zVz6DevKzX1NLLAd+L7m9j/IuO/VI7h7eteqBof55R4AUI0z+NVM3CU3e6A=="],"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=AcrR8Qyf; arc=fail smtp.client-ip=52.101.53.29","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=VnDCQHN5BFwFDqL7Jdd4gYiXRITXN6FHp/DhQESc4kA=;\n b=AcrR8QyfTxZMNMFGT1Bs0NTe/ybXj9eCnrHHVUE1vjI2eL+x5MrbDQWx414DTHg1i0hBPviCYeWukf4/0UiXlWdn3kT8jJoi0+GQBEP6TZo+HeYqnYXBI/dJX6OWZxmt88Km3kHl23fpBRssVwFc+fCOX6zFFo6GhsSnQ1BwyKW+mwwV6EgFgls6aXWrrm7OAIVc3NTQE1zo6GY45Rozc9UUuk4buS/OOyLy3CPDZVcWevHZYKJoo/c1w3pG561N2SrDKFqn3YdmW373K0+gYNgnkVdZc3uc92I+reYk1+O2G3bXx6kobRMjbTWcU5zzPgQ7MiZ2zwDHCtFAMdWWBQ==","Content-Transfer-Encoding":"quoted-printable","Content-Type":"text/plain; charset=UTF-8","Date":"Wed, 22 Apr 2026 19:46:41 +0900","Message-Id":"<DHZMGJ0XY7EM.KFGGA9SYO74Y@nvidia.com>","Cc":"\"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>,\n\t=?utf-8?q?Bj=C3=B6rn_Roy_Baron?= <bjorn3_gh@protonmail.com>,\n \"Benno Lossin\" <lossin@kernel.org>,\n \"Andreas Hindborg\" <a.hindborg@kernel.org>,\n \"Trevor Gross\" <tmgross@umich.edu>, \"Boqun Feng\" <boqun@kernel.org>,\n \"John Hubbard\" <jhubbard@nvidia.com>, \"Alistair Popple\" <apopple@nvidia.com>,\n \"Joel Fernandes\" <joelagnelf@nvidia.com>, \"Timur Tabi\" <ttabi@nvidia.com>,\n <nouveau@lists.freedesktop.org>, <dri-devel@lists.freedesktop.org>,\n <linux-kernel@vger.kernel.org>, <linux-pci@vger.kernel.org>,\n <rust-for-linux@vger.kernel.org>","Subject":"Re: [PATCH v2 5/5] gpu: nova-core: run Booter Unloader and FWSEC-SB\n upon unbinding","From":"\"Alexandre Courbot\" <acourbot@nvidia.com>","To":"\"Eliot Courtney\" <ecourtney@nvidia.com>","References":"<20260421-nova-unload-v2-0-2fe54963af8b@nvidia.com>\n <20260421-nova-unload-v2-5-2fe54963af8b@nvidia.com>\n <DHZGE2KGUBJB.3LDRIKUMDMSRN@nvidia.com>","In-Reply-To":"<DHZGE2KGUBJB.3LDRIKUMDMSRN@nvidia.com>","X-ClientProxiedBy":"TY4P286CA0053.JPNP286.PROD.OUTLOOK.COM\n (2603:1096:405:36e::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_|MN0PR12MB6125:EE_","X-MS-Office365-Filtering-Correlation-Id":"370a57be-7260-4c3f-d9a7-08dea05c732a","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"\n\tBCL:0;ARA:13230040|366016|7416014|1800799024|10070799003|376014|18002099003|56012099003|22082099003;","X-Microsoft-Antispam-Message-Info":"\n\tq1MbUYFjKdAziwMFYa6dcYo/YWRWjLrG8N/oxXQNBW2EqtMvVB4zjDBEWUfAAoRLn98cDk1xbWmsNx5Ls8cHY/sjOyxUWjbOofRN4+vw84UgpNuD2MSEVPHLzkxWYuax8QX4uVFUctG8VEFufJlic9dBZaSlnWBdX2rmjqYKqR3Wlf4JkcXjj3p0Ian/7M7vajr6l0GiAUucBfAfIcCQAODlIF8K4tTYzhhL1YfB0YrtsyUsv6MfVsU8Tl942lul5nCQHxCTO2BLYtmFcHiqFXqVAMp/OBUqBUYYiuvLDEyeE3M+oZoShQdndKH/q0xYuSlacENG6g5QZoz999DTFQSM+5t0MT98F71ur+tuZuwqmsRLlFFDI8FZM0VUh7n34s5d1pHMyeNDXZMFQ2mFaYoierRuVL+feAu34yRQEno7+xfNnQ/sNZ4qxcqLnr1sLhLLBlqDodUDSBXZmUI+dHyVsnKaX9o2VXVpvqjadTwJgkVTkDRT2V6827cq1uWl3bES+pEe+9/vB5QMGrPpc0cCCusVp1IrMoEBMoBhEe2CJroenJXZNeggFn8ihoodgrnF45589gVmusqRsf+M/AKTI8KuB+otCkXxtZVX3m6vFwcdjL7V9xqn6e1MtaQUD+N1BRoLsufLm8Zv5lXG6rM6/PEBb2qCankVJ9MQSOqsbk1QZ3cPE41YX3mjOOENeFpgqjW0BgV2VUQ81qmFaTZTcm7D0+xqNXkO2dKhCUs=","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)(366016)(7416014)(1800799024)(10070799003)(376014)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"2","X-MS-Exchange-AntiSpam-MessageData-0":"=?utf-8?q?MYycD4yPHL7huBxHMy3rjzvyi4MD?=\n\t=?utf-8?q?fIGvoAAaiAc8TLMuNXUjiX8EoYq73LGayVp4Z5uTonkVEA54fN+AASqVXg1KnVUi4?=\n\t=?utf-8?q?ATgSoECwPShFdoPIn5zrG3WzMFiqBpUg+1hYhq7nDTZBCpTPkHxTYko527tbFvRc0?=\n\t=?utf-8?q?FocV8Q0v/QIVlGB8hCZ+Rjfi0SCTW591HVgWxDxIDEMmKoZcRNd1SSsr+HU0HYptv?=\n\t=?utf-8?q?NhYmYQRebkqsuK3XeWF1PHXXfA7AJqEDkLEjA2WIclqy8q1ffbPyjoPLv7O5zvsNf?=\n\t=?utf-8?q?npJEV+F718e8V0ch2W+CJLIQgcx82JdMdS+7Vgpzw2gXDERPdmk5mESIy8d0AwwlJ?=\n\t=?utf-8?q?+uK0Ia3VBhEzGpx0JahlBAiEUKimRJ3JIm6bVxrktSqUWkwD/PZbyQaTQ224nOp5g?=\n\t=?utf-8?q?8IAw5LBW2sB2MovoMPeWVbpYF/VA/qlhpxQ3EemAbqftvyU9yK5eTvbG+hWQFr08N?=\n\t=?utf-8?q?Tf4dUhaCEYIdciyFWC0+pkI05wDJHTzD/8Sor2TaJd8BFrB81noRT4iBuZ0U8aoP4?=\n\t=?utf-8?q?pyf88HbGAzCG5AXOrbFukWL1lNaW4UR2GFfhxlSH3MUfHS6xlSWJqDEoHduZRierY?=\n\t=?utf-8?q?VRn6S8yHUgsDCNxyFBo4p1ZvuSbcneZj7ZTlBxOCfUL1ubYLNt3CspCyQRzSuZnPC?=\n\t=?utf-8?q?kvU132AixNvuRJFZk5Nkt0Z9e+Uc72wFipTkNZUn1iuLnUnv+IXVDOOlgj94sXM2I?=\n\t=?utf-8?q?YKSgNbhB7GSJrOoooXMwCArF0hBLOLhToir8zGDvZJgSCL4FqOYVFhy2oID6gLnUO?=\n\t=?utf-8?q?lTZDCbSfbOnLz3/yiIti7JhZvB5baTHxdzCZpqjjsd1fVI04+sTzHheImOCN1/NER?=\n\t=?utf-8?q?CJQB2GsXdaIt2X6RF2QYMACocGHTzO0x2nty8ijOI/ltahn1nZya7/5ikq2POoW5t?=\n\t=?utf-8?q?UQPYHtg20UqnYnKFKHl1XNm04xts2sR2nwjn23sl6HT9w5cC5dmtZXfl7n4kLlPbl?=\n\t=?utf-8?q?Wq7BrcddZKsXma7VcTDqOOJ3cjc0oIbqIRTljEuKgswM/kwbf7F1w/Uh4ZS9bvBk+?=\n\t=?utf-8?q?Tx2Ms+lKEkWsZi9m3ZXOn3oZQUWLEfGTvIWh2U5YhwtURH7Hs9LSvaaREUmNvY0Xd?=\n\t=?utf-8?q?LfWP6JLh5vPR6lLHblmRdKuB5rvj/yqJfRgytnmbLsAYQ31r8Sy79mchD1LFdpn48?=\n\t=?utf-8?q?3b5J/v1H34pQc0drtd3sbh8cJbDvWdvLlG9aah831/76eKU3hZSdKtKnJa/igPF8T?=\n\t=?utf-8?q?75r6pYztKPK49YdZXe73pw7Rbn6oXlm59MRgl5i8ad0nDgfBtXPg3q435qB6kakXa?=\n\t=?utf-8?q?LDAetJVplQ20BnzHd2rLJ5pVwBb5uZc67uCM/YDDpW7+Rf93kxcqH8tmu4nnKPeWc?=\n\t=?utf-8?q?0PJ+yknC60yl7hASz/wbxIdljEDKtzvIPL7PYCY4L5a6/1Q49Pas/EYFNRoqP6gHL?=\n\t=?utf-8?q?j5ZRJGfCPrap0SB60d/nveVhEcODxyrfyHNeOw6U/wsEmrhV1DjrHwWDo9F0ZpS8w?=\n\t=?utf-8?q?XOdUkrzQbVf3CS/iYkQ6TWH+HaWvyQUCWQJEVHKJtkZrtSHEnjdPLxZGletEciC5d?=\n\t=?utf-8?q?nDiXozP0QJnZrqDKDfQ4uuL6tZiC8W1r6vM7/Fje/5EDH+hthLnAfd7g/nONBLHs1?=\n\t=?utf-8?q?wWrjR6X7AT6Ssk88mPjKmPputV+87Epth8CY47ZIE+5obRygICCIAzOFBQPynC5DO?=\n\t=?utf-8?q?1GNri3Z2ckh1oqZse1yRq00x+ELwDpt+coXGvxSfSKQ7j7wRWgcde4hnRkIU1JQtb?=\n\t=?utf-8?q?GbaFcaVidv2E0N3bG?=","X-MS-Exchange-AntiSpam-MessageData-1":"+tlDVOUc1Na6VA==","X-OriginatorOrg":"Nvidia.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 370a57be-7260-4c3f-d9a7-08dea05c732a","X-MS-Exchange-CrossTenant-AuthSource":"CH2PR12MB3990.namprd12.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"22 Apr 2026 10:46:46.7350\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 2B6xLj3RlLvZSToxvNS5aS71QeRpMxKpmgJbDzvxGSgn/okbfD5gZrVoyuAX7cuNBssE1u0AyhnRXsBLltpBfQ==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"MN0PR12MB6125"}}]