From: "Eliot Courtney" <ecourtney@nvidia.com>
To: "Alexandre Courbot" <acourbot@nvidia.com>,
"Danilo Krummrich" <dakr@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"David Airlie" <airlied@gmail.com>,
"Simona Vetter" <simona@ffwll.ch>, "Gary Guo" <gary@garyguo.net>,
"John Hubbard" <jhubbard@nvidia.com>,
"Alistair Popple" <apopple@nvidia.com>,
"Timur Tabi" <ttabi@nvidia.com>,
"Eliot Courtney" <ecourtney@nvidia.com>,
"Zhi Wang" <zhiw@nvidia.com>
Cc: <nova-gpu@lists.linux.dev>, <dri-devel@lists.freedesktop.org>,
<linux-kernel@vger.kernel.org>, <rust-for-linux@vger.kernel.org>,
"dri-devel" <dri-devel-bounces@lists.freedesktop.org>
Subject: Re: [PATCH v4 06/13] gpu: nova-core: gsp: fold TU102 unload bundle construction into HAL method
Date: Wed, 01 Jul 2026 13:15:54 +0900 [thread overview]
Message-ID: <DJMXZGIY5QJR.8QZK8SCDL29B@nvidia.com> (raw)
In-Reply-To: <20260629-nova-bootcontext-v4-6-5539d8469590@nvidia.com>
On Mon Jun 29, 2026 at 11:09 PM JST, Alexandre Courbot wrote:
> 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 <acourbot@nvidia.com>
> ---
> drivers/gpu/nova-core/gsp/hal/tu102.rs | 87 ++++++++++++++++------------------
> 1 file changed, 41 insertions(+), 46 deletions(-)
>
> diff --git a/drivers/gpu/nova-core/gsp/hal/tu102.rs b/drivers/gpu/nova-core/gsp/hal/tu102.rs
> index ef465b99af05..0505a5beee6e 100644
> --- a/drivers/gpu/nova-core/gsp/hal/tu102.rs
> +++ b/drivers/gpu/nova-core/gsp/hal/tu102.rs
> @@ -56,22 +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<device::Bound>,
> - chipset: Chipset,
> - bios: &Vbios,
> - gsp_falcon: &Falcon<'_, GspEngine>,
> - ) -> Result<Self> {
> - let fwsec_sb = FwsecFirmware::new(dev, gsp_falcon, 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,
> @@ -93,33 +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<device::Bound>,
> - chipset: Chipset,
> - bios: &Vbios,
> - gsp_falcon: &Falcon<'_, GspEngine>,
> - sec2_falcon: &Falcon<'_, Sec2>,
> - ) -> Result<KBox<dyn UnloadBundle>> {
> - KBox::new(
> - Self {
> - fwsec_sb: FwsecUnloadFirmware::new(dev, chipset, bios, gsp_falcon)?,
> - booter_unloader: BooterFirmware::new(
> - dev,
> - BooterKind::Unloader,
> - chipset,
> - FIRMWARE_VERSION,
> - sec2_falcon,
> - )?,
> - },
> - GFP_KERNEL,
> - )
> - .map(|b| b as KBox<dyn UnloadBundle>)
> - .map_err(Into::into)
> - }
> -}
> -
> impl UnloadBundle for Sec2UnloadBundle {
> fn run(&self, ctx: &GspBootContext<'_>) -> Result {
> let dev = ctx.dev();
> @@ -257,6 +214,44 @@ 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<device::Bound>,
> + chipset: Chipset,
> + bios: &Vbios,
> + gsp_falcon: &Falcon<'_, GspEngine>,
> + sec2_falcon: &Falcon<'_, Sec2>,
> + ) -> Result<crate::gsp::UnloadBundle> {
> + // Load the FWSEC SB firmware, as well as its bootloader if required.
> + let fwsec_sb =
> + FwsecFirmware::new(dev, gsp_falcon, 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)
> + })
> + })?;
nit: Maybe nicer to write this like:
```
// Load the FWSEC SB firmware, as well as its bootloader if required.
let fwsec_sb = FwsecFirmware::new(dev, gsp_falcon, bios, FwsecCommand::Sb)?;
let fwsec_sb = if self.needs_fwsec_bootloader {
FwsecUnloadFirmware::WithBl(FwsecFirmwareWithBl::new(fwsec_sb, dev, chipset)?)
} else {
FwsecUnloadFirmware::WithoutBl(fwsec_sb)
};
```
With that,
Reviewed-by: Eliot Courtney <ecourtney@nvidia.com>
> +
> + KBox::new(
> + Sec2UnloadBundle {
> + fwsec_sb,
> + booter_unloader: BooterFirmware::new(
> + dev,
> + BooterKind::Unloader,
> + chipset,
> + FIRMWARE_VERSION,
> + sec2_falcon,
> + )?,
> + },
> + GFP_KERNEL,
> + )
> + .map(|b| crate::gsp::UnloadBundle(b))
> + .map_err(Into::into)
> + }
> +}
> +
> impl GspHal for Tu102 {
> fn boot(
> &self,
> @@ -277,10 +272,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, chipset, &bios, gsp_falcon, sec2_falcon)
> + let unload_bundle = self
> + .build_unload_bundle(dev, chipset, &bios, gsp_falcon, sec2_falcon)
> .inspect_err(|e| dev_warn!(dev, "Failed to prepare unload firmware: {:?}\n", e))
> - .ok()
> - .map(crate::gsp::UnloadBundle);
> + .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| {
next prev parent reply other threads:[~2026-07-01 4:16 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-29 14:09 [PATCH v4 00/13] gpu: nova-core: consolidate and streamline GSP boot process Alexandre Courbot
2026-06-29 14:09 ` [PATCH v4 01/13] gpu: nova-core: gsp: sequencer: use GspBootContext Alexandre Courbot
2026-06-29 14:09 ` [PATCH v4 02/13] gpu: nova-core: gsp: sequencer: do not store sequence into GspSequencer Alexandre Courbot
2026-06-29 14:09 ` [PATCH v4 03/13] gpu: nova-core: gsp: replace BootUnloadGuard with local handlers Alexandre Courbot
2026-07-01 2:54 ` Eliot Courtney
2026-06-29 14:09 ` [PATCH v4 04/13] gpu: nova-core: gsp: pass GspBootContext to unload methods Alexandre Courbot
2026-07-01 3:57 ` Eliot Courtney
2026-06-29 14:09 ` [PATCH v4 05/13] gpu: nova-core: gsp: centralize missing unload bundle warnings Alexandre Courbot
2026-07-01 4:06 ` Eliot Courtney
2026-06-29 14:09 ` [PATCH v4 06/13] gpu: nova-core: gsp: fold TU102 unload bundle construction into HAL method Alexandre Courbot
2026-07-01 4:15 ` Eliot Courtney [this message]
2026-06-29 14:09 ` [PATCH v4 07/13] gpu: nova-core: gsp: turn FWSEC execution " Alexandre Courbot
2026-07-01 4:16 ` Eliot Courtney
2026-06-29 14:09 ` [PATCH v4 08/13] gpu: nova-core: gsp: make use of FWSEC bootloader a property of the TU102 HAL Alexandre Courbot
2026-06-29 14:09 ` [PATCH v4 09/13] gpu: nova-core: introduce GspBootMethod Alexandre Courbot
2026-06-29 14:09 ` [PATCH v4 10/13] gpu: nova-core: avoid repeated calls to pci::Device::as_ref Alexandre Courbot
2026-07-01 6:38 ` Eliot Courtney
2026-06-29 14:09 ` [PATCH v4 11/13] gpu: nova-core: gsp: pass GspBootContext mutably Alexandre Courbot
2026-07-01 6:40 ` Eliot Courtney
2026-06-29 14:09 ` [PATCH v4 12/13] gpu: nova-core: gsp: separate context and GPU lifetimes in GspBootContext Alexandre Courbot
2026-07-01 6:52 ` Eliot Courtney
2026-06-29 14:09 ` [PATCH v4 13/13] gpu: nova-core: store Fsp instance in Gpu Alexandre Courbot
2026-07-01 6:46 ` Eliot Courtney
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=DJMXZGIY5QJR.8QZK8SCDL29B@nvidia.com \
--to=ecourtney@nvidia.com \
--cc=acourbot@nvidia.com \
--cc=airlied@gmail.com \
--cc=aliceryhl@google.com \
--cc=apopple@nvidia.com \
--cc=dakr@kernel.org \
--cc=dri-devel-bounces@lists.freedesktop.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=gary@garyguo.net \
--cc=jhubbard@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nova-gpu@lists.linux.dev \
--cc=rust-for-linux@vger.kernel.org \
--cc=simona@ffwll.ch \
--cc=ttabi@nvidia.com \
--cc=zhiw@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox