From: "Alexandre Courbot" <acourbot@nvidia.com>
To: "Danilo Krummrich" <dakr@kernel.org>
Cc: "Miguel Ojeda" <ojeda@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
"David Airlie" <airlied@gmail.com>,
"Simona Vetter" <simona@ffwll.ch>,
"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Maxime Ripard" <mripard@kernel.org>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"Benno Lossin" <lossin@kernel.org>,
"John Hubbard" <jhubbard@nvidia.com>,
"Ben Skeggs" <bskeggs@nvidia.com>,
"Joel Fernandes" <joelagnelf@nvidia.com>,
"Timur Tabi" <ttabi@nvidia.com>,
"Alistair Popple" <apopple@nvidia.com>,
linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org,
nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
"Lyude Paul" <lyude@redhat.com>
Subject: Re: [PATCH v5 23/23] gpu: nova-core: load and run FWSEC-FRTS
Date: Thu, 19 Jun 2025 21:35:57 +0900 [thread overview]
Message-ID: <DAQIIXV4SHGV.11VXZCUNADMX9@nvidia.com> (raw)
In-Reply-To: <aFMgiYzDXwHXVn8X@cassiopeiae>
On Thu Jun 19, 2025 at 5:24 AM JST, Danilo Krummrich wrote:
> On Wed, Jun 18, 2025 at 10:23:15PM +0200, Danilo Krummrich wrote:
>> On Thu, Jun 12, 2025 at 11:01:51PM +0900, Alexandre Courbot wrote:
>> > @@ -237,6 +237,67 @@ pub(crate) fn new(
>> > },
>> > )?;
>> >
>> > + // Check that the WPR2 region does not already exists - if it does, the GPU needs to be
>> > + // reset.
>> > + if regs::NV_PFB_PRI_MMU_WPR2_ADDR_HI::read(bar).hi_val() != 0 {
>> > + dev_err!(
>> > + pdev.as_ref(),
>> > + "WPR2 region already exists - GPU needs to be reset to proceed\n"
>> > + );
>> > + return Err(EBUSY);
>> > + }
>> > +
>> > + // Reset falcon, load FWSEC-FRTS, and run it.
>> > + gsp_falcon
>> > + .reset(bar)
>> > + .inspect_err(|e| dev_err!(pdev.as_ref(), "Failed to reset GSP falcon: {:?}\n", e))?;
>> > + gsp_falcon
>> > + .dma_load(bar, &fwsec_frts)
>> > + .inspect_err(|e| dev_err!(pdev.as_ref(), "Failed to load FWSEC-FRTS: {:?}\n", e))?;
>> > + let (mbox0, _) = gsp_falcon
>> > + .boot(bar, Some(0), None)
>> > + .inspect_err(|e| dev_err!(pdev.as_ref(), "Failed to boot FWSEC-FRTS: {:?}\n", e))?;
>> > + if mbox0 != 0 {
>> > + dev_err!(pdev.as_ref(), "FWSEC firmware returned error {}\n", mbox0);
>> > + return Err(EIO);
>> > + }
>> > +
>> > + // SCRATCH_E contains FWSEC-FRTS' error code, if any.
>> > + let frts_status = regs::NV_PBUS_SW_SCRATCH_0E::read(bar).frts_err_code();
>> > + if frts_status != 0 {
>> > + dev_err!(
>> > + pdev.as_ref(),
>> > + "FWSEC-FRTS returned with error code {:#x}",
>> > + frts_status
>> > + );
>> > + return Err(EIO);
>> > + }
>> > +
>> > + // Check the WPR2 has been created as we requested.
>> > + let (wpr2_lo, wpr2_hi) = (
>> > + (regs::NV_PFB_PRI_MMU_WPR2_ADDR_LO::read(bar).lo_val() as u64) << 12,
>> > + (regs::NV_PFB_PRI_MMU_WPR2_ADDR_HI::read(bar).hi_val() as u64) << 12,
>> > + );
>> > + if wpr2_hi == 0 {
>> > + dev_err!(
>> > + pdev.as_ref(),
>> > + "WPR2 region not created after running FWSEC-FRTS\n"
>> > + );
>> > +
>> > + return Err(EIO);
>> > + } else if wpr2_lo != fb_layout.frts.start {
>> > + dev_err!(
>> > + pdev.as_ref(),
>> > + "WPR2 region created at unexpected address {:#x}; expected {:#x}\n",
>> > + wpr2_lo,
>> > + fb_layout.frts.start,
>> > + );
>> > + return Err(EIO);
>> > + }
>> > +
>> > + dev_dbg!(pdev.as_ref(), "WPR2: {:#x}-{:#x}\n", wpr2_lo, wpr2_hi);
>> > + dev_dbg!(pdev.as_ref(), "GPU instance built\n");
>> > +
>>
>> This makes Gpu::new() quite messy, can we move this to a separate function
>> please?
>
> Actually, can't this just be a method of FwsecFirmware?
Yes and no. :) FWSEC can run two commands, `Frts` and `Sb`, and some of
the code here is specific to `Frts`. The code that is not specific to it
(loading the firmware into the falcon, booting and checking MBOX) can be
moved into a method of `FwsecFirmware`, and it makes sense to do so
actually.
All of this code is going to be moved out of `Gpu::new()` eventually
(i.e. the follow-up patchset), but we are still figuring out where it
will eventually land. We will need some other entity to manage the GSP
boot (GspBooter?), and I am still learning which parts are common to all
GPU families and which ones should be a HAL. So for now I'd rather keep
it here, modulo the part that can be moved into `FwsecFirmware`.
next prev parent reply other threads:[~2025-06-19 12:36 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-12 14:01 [PATCH v5 00/23] nova-core: run FWSEC-FRTS to perform first stage of GSP initialization Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 01/23] rust: dma: expose the count and size of CoherentAllocation Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 02/23] rust: make ETIMEDOUT error available Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 03/23] rust: sizes: add constants up to SZ_2G Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 04/23] rust: add new `num` module with `PowerOfTwo` type Alexandre Courbot
2025-06-12 15:07 ` Boqun Feng
2025-06-12 20:00 ` John Hubbard
2025-06-12 20:05 ` Boqun Feng
2025-06-12 20:08 ` John Hubbard
2025-06-12 20:12 ` Boqun Feng
2025-06-13 14:16 ` Alexandre Courbot
2025-06-13 15:25 ` Boqun Feng
2025-06-14 17:08 ` Boqun Feng
2025-06-16 5:14 ` Alexandre Courbot
2025-06-14 17:31 ` Boqun Feng
2025-06-16 5:19 ` Alexandre Courbot
2025-06-14 19:09 ` Benno Lossin
2025-06-15 13:32 ` Miguel Ojeda
2025-06-16 5:13 ` Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 05/23] rust: num: add the `fls` operation Alexandre Courbot
2025-06-14 19:16 ` Benno Lossin
2025-06-16 6:41 ` Alexandre Courbot
2025-06-18 19:24 ` Benno Lossin
2025-06-19 13:26 ` Alexandre Courbot
2025-06-19 13:28 ` Benno Lossin
2025-06-15 9:37 ` Miguel Ojeda
2025-06-15 10:51 ` Alexandre Courbot
2025-06-15 10:58 ` Alexandre Courbot
2025-06-15 13:25 ` Miguel Ojeda
2025-06-16 6:36 ` Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 06/23] gpu: nova-core: use absolute paths in register!() macro Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 07/23] gpu: nova-core: add delimiter for helper rules " Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 08/23] gpu: nova-core: expose the offset of each register as a type constant Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 09/23] gpu: nova-core: allow register aliases Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 10/23] gpu: nova-core: increase BAR0 size to 16MB Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 11/23] gpu: nova-core: add helper function to wait on condition Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 12/23] gpu: nova-core: wait for GFW_BOOT completion Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 13/23] gpu: nova-core: add DMA object struct Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 14/23] gpu: nova-core: register sysmem flush page Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 15/23] gpu: nova-core: add falcon register definitions and base code Alexandre Courbot
2025-06-17 16:33 ` Danilo Krummrich
2025-06-18 5:26 ` Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 16/23] gpu: nova-core: firmware: add ucode descriptor used by FWSEC-FRTS Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 17/23] gpu: nova-core: vbios: Add base support for VBIOS construction and iteration Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 18/23] gpu: nova-core: vbios: Add support to look up PMU table in FWSEC Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 19/23] gpu: nova-core: vbios: Add support for FWSEC ucode extraction Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 20/23] gpu: nova-core: compute layout of the FRTS region Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 21/23] gpu: nova-core: add types for patching firmware binaries Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 22/23] gpu: nova-core: extract FWSEC from BIOS and patch it to run FWSEC-FRTS Alexandre Courbot
2025-06-12 14:01 ` [PATCH v5 23/23] gpu: nova-core: load and " Alexandre Courbot
2025-06-18 20:23 ` Danilo Krummrich
2025-06-18 20:24 ` Danilo Krummrich
2025-06-19 12:35 ` Alexandre Courbot [this message]
2025-06-19 12:43 ` Danilo Krummrich
2025-06-17 20:14 ` [PATCH v5 00/23] nova-core: run FWSEC-FRTS to perform first stage of GSP initialization Danilo Krummrich
2025-06-18 8:25 ` Alexandre Courbot
2025-06-18 20:14 ` Danilo Krummrich
2025-06-19 7:14 ` Alexandre Courbot
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=DAQIIXV4SHGV.11VXZCUNADMX9@nvidia.com \
--to=acourbot@nvidia.com \
--cc=a.hindborg@kernel.org \
--cc=airlied@gmail.com \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=apopple@nvidia.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=bskeggs@nvidia.com \
--cc=dakr@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=gary@garyguo.net \
--cc=jhubbard@nvidia.com \
--cc=joelagnelf@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=lyude@redhat.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=nouveau@lists.freedesktop.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=simona@ffwll.ch \
--cc=tmgross@umich.edu \
--cc=ttabi@nvidia.com \
--cc=tzimmermann@suse.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.