From: Joel Fernandes <joelagnelf@nvidia.com>
To: Lyude Paul <lyude@redhat.com>,
linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org,
dri-devel@lists.freedesktop.org, dakr@kernel.org,
acourbot@nvidia.com
Cc: Alistair Popple <apopple@nvidia.com>,
Miguel Ojeda <ojeda@kernel.org>,
Alex Gaynor <alex.gaynor@gmail.com>,
Boqun Feng <boqun.feng@gmail.com>, Gary Guo <gary@garyguo.net>,
bjorn3_gh@protonmail.com, Benno Lossin <lossin@kernel.org>,
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>,
John Hubbard <jhubbard@nvidia.com>, Timur Tabi <ttabi@nvidia.com>,
joel@joelfernandes.org,
Daniel Almeida <daniel.almeida@collabora.com>,
nouveau@lists.freedesktop.org
Subject: Re: [PATCH v3 07/14] gpu: nova-core: Implement the GSP sequencer
Date: Wed, 12 Nov 2025 20:24:22 -0500 [thread overview]
Message-ID: <51d2ccf4-9ca5-42a3-8ebc-d32729b6f059@nvidia.com> (raw)
In-Reply-To: <912e319f6d5d4d4c1261a02242c1b74b838e5692.camel@redhat.com>
Hi Lyude,
On 11/11/2025 3:57 PM, Lyude Paul wrote:
> On Thu, 2025-11-06 at 18:11 -0500, Joel Fernandes wrote:
>> Implement the GSP sequencer which culminates in INIT_DONE message being
>> received from the GSP indicating that the GSP has successfully booted.
>>
>> This is just initial sequencer support, the actual commands will be
>> added in the next patches.
>>
>> Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com>
>> ---
>> drivers/gpu/nova-core/gsp.rs | 1 +
>> drivers/gpu/nova-core/gsp/boot.rs | 19 ++-
>> drivers/gpu/nova-core/gsp/cmdq.rs | 1 -
>> drivers/gpu/nova-core/gsp/sequencer.rs | 205 +++++++++++++++++++++++++
>> drivers/gpu/nova-core/sbuffer.rs | 1 -
>> 5 files changed, 224 insertions(+), 3 deletions(-)
>> create mode 100644 drivers/gpu/nova-core/gsp/sequencer.rs
>>
>> diff --git a/drivers/gpu/nova-core/gsp.rs b/drivers/gpu/nova-core/gsp.rs
>> index 36175eafaf2e..9d62aea3c782 100644
>> --- a/drivers/gpu/nova-core/gsp.rs
>> +++ b/drivers/gpu/nova-core/gsp.rs
>> @@ -16,6 +16,7 @@
>> pub(crate) mod cmdq;
>> pub(crate) mod commands;
>> mod fw;
>> +mod sequencer;
>>
>> use fw::GspArgumentsCached;
>> use fw::LibosMemoryRegionInitArgument;
>> diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/boot.rs
>> index 649c758eda70..761020a11153 100644
>> --- a/drivers/gpu/nova-core/gsp/boot.rs
>> +++ b/drivers/gpu/nova-core/gsp/boot.rs
>> @@ -19,7 +19,13 @@
>> };
>> use crate::gpu::Chipset;
>> use crate::gsp::commands::{build_registry, set_system_info};
>> -use crate::gsp::GspFwWprMeta;
>> +use crate::gsp::{
>> + sequencer::{
>> + GspSequencer,
>> + GspSequencerParams, //
>> + },
>> + GspFwWprMeta, //
>> +};
>> use crate::regs;
>> use crate::vbios::Vbios;
>>
>> @@ -204,6 +210,17 @@ pub(crate) fn boot(
>> gsp_falcon.is_riscv_active(bar),
>> );
>>
>> + // Create and run the GSP sequencer.
>> + let seq_params = GspSequencerParams {
>> + gsp_fw: &gsp_fw,
>> + libos_dma_handle: libos_handle,
>> + gsp_falcon,
>> + sec2_falcon,
>> + dev: pdev.as_ref(),
>> + bar,
>> + };
>> + GspSequencer::run(&mut self.cmdq, seq_params, Delta::from_secs(10))?;
>> +
>> Ok(())
>> }
>> }
>> diff --git a/drivers/gpu/nova-core/gsp/cmdq.rs b/drivers/gpu/nova-core/gsp/cmdq.rs
>> index 0fb8ff26ba2f..0185629a3b5c 100644
>> --- a/drivers/gpu/nova-core/gsp/cmdq.rs
>> +++ b/drivers/gpu/nova-core/gsp/cmdq.rs
>> @@ -418,7 +418,6 @@ struct FullCommand<M> {
>> Ok(())
>> }
>>
>> - #[expect(unused)]
>> pub(crate) fn receive_msg_from_gsp<M: MessageFromGsp, R>(
>> &mut self,
>> timeout: Delta,
>> diff --git a/drivers/gpu/nova-core/gsp/sequencer.rs b/drivers/gpu/nova-core/gsp/sequencer.rs
>> new file mode 100644
>> index 000000000000..ee096c04d9eb
>> --- /dev/null
>> +++ b/drivers/gpu/nova-core/gsp/sequencer.rs
>> @@ -0,0 +1,205 @@
>> +// SPDX-License-Identifier: GPL-2.0
>> +
>> +//! GSP Sequencer implementation for Pre-hopper GSP boot sequence.
>
> Any way we could get a brief explanation in the docs here for what the
> sequencer is?
>
Great suggestion, I added a few paragraphs here, thanks!
>> +
>> +use core::mem::size_of;
>> +use kernel::alloc::flags::GFP_KERNEL;
>> +use kernel::device;
>> +use kernel::prelude::*;
>> +use kernel::time::Delta;
>> +use kernel::transmute::FromBytes;
>> +
>> +use crate::driver::Bar0;
>> +use crate::falcon::{
>> + gsp::Gsp,
>> + sec2::Sec2,
>> + Falcon, //
>> +};
>> +use crate::firmware::gsp::GspFirmware;
>> +use crate::gsp::cmdq::{
>> + Cmdq,
>> + MessageFromGsp, //
>> +};
>> +use crate::gsp::fw;
>> +
>> +use kernel::{
>> + dev_dbg,
>> + dev_err, //
>> +};
>> +
>> +impl MessageFromGsp for fw::rpc_run_cpu_sequencer_v17_00 {
>> + const FUNCTION: fw::MsgFunction = fw::MsgFunction::GspRunCpuSequencer;
>> +}
>> +
>> +const CMD_SIZE: usize = size_of::<fw::GSP_SEQUENCER_BUFFER_CMD>();
>> +
>> +struct GspSequencerInfo<'a> {
>> + info: &'a fw::rpc_run_cpu_sequencer_v17_00,
>> + cmd_data: KVec<u8>,
>> +}
>> +
>> +/// GSP Sequencer Command types with payload data.
>> +/// Commands have an opcode and a opcode-dependent struct.
>> +#[allow(dead_code)]
>> +pub(crate) enum GspSeqCmd {}
>> +
>> +impl GspSeqCmd {
>> + /// Creates a new GspSeqCmd from a firmware GSP_SEQUENCER_BUFFER_CMD.
>> + pub(crate) fn from_fw_cmd(_cmd: &fw::GSP_SEQUENCER_BUFFER_CMD) -> Result<Self> {
>> + Err(EINVAL)
>
> Is this just because this is a TODO? If so, it might be better to use todo!()
> or unimplemented!() for spots like this instead of returning an error.
I am not finding examples of other usages of this in kernel code, looking at
their implementations, they call panic!. Are we Ok with using them in kernel
code, even temporarily?
Though I'd say, since this goes away in the next few commits, its Ok to leave as
is, if that works for you.
[..]>> +impl<'a, 'b> IntoIterator for &'b GspSequencer<'a> {
>> + type Item = Result<GspSeqCmd>;
>> + type IntoIter = GspSeqIter<'b>;
>> +
>> + fn into_iter(self) -> Self::IntoIter {
>> + let cmd_data = &self.seq_info.cmd_data[..];
>
> I think just using .as_slice() would be clearer here
>
Ack, I changed to this.
Thanks!
next prev parent reply other threads:[~2025-11-13 1:24 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-02 23:59 [PATCH v2 00/12] nova-core: Complete GSP boot and begin RPC communication Joel Fernandes
2025-11-02 23:59 ` [PATCH v2 01/12] nova-core: falcon: Move waiting until halted to a helper Joel Fernandes
2025-11-05 23:12 ` Lyude Paul
2025-11-02 23:59 ` [PATCH v2 02/12] nova-core: falcon: Move start functionality into separate helper Joel Fernandes
2025-11-05 23:13 ` Lyude Paul
2025-11-02 23:59 ` [PATCH v2 03/12] nova-core: falcon: Move mbox functionalities into helper Joel Fernandes
2025-11-05 23:16 ` Lyude Paul
2025-11-02 23:59 ` [PATCH v2 04/12] nova-core: falcon: Move dma_reset functionality " Joel Fernandes
2025-11-05 23:16 ` Lyude Paul
2025-11-02 23:59 ` [PATCH v2 05/12] nova-core: gsp: Add support for checking if GSP reloaded Joel Fernandes
2025-11-05 23:18 ` Lyude Paul
2025-11-05 23:29 ` John Hubbard
2025-11-06 0:26 ` Alexandre Courbot
2025-11-02 23:59 ` [PATCH v2 06/12] nova-core: Add bindings required by GSP sequencer Joel Fernandes
2025-11-05 23:23 ` Lyude Paul
2025-11-10 13:39 ` Alexandre Courbot
2025-11-11 22:06 ` Joel Fernandes
2025-11-12 1:12 ` Alexandre Courbot
2025-11-12 2:53 ` Joel Fernandes
2025-11-02 23:59 ` [PATCH v2 07/12] nova-core: Implement the " Joel Fernandes
2025-11-10 13:43 ` Alexandre Courbot
2025-11-11 22:51 ` Joel Fernandes
2025-11-11 23:02 ` Joel Fernandes
2025-11-12 0:42 ` Alexandre Courbot
2025-11-12 2:57 ` Joel Fernandes
2025-11-02 23:59 ` [PATCH v2 08/12] nova-core: sequencer: Add register opcodes Joel Fernandes
2025-11-05 2:50 ` John Hubbard
2025-11-05 3:45 ` Joel Fernandes
2025-11-05 16:30 ` Timur Tabi
2025-11-05 21:55 ` John Hubbard
2025-11-05 23:19 ` Timur Tabi
2025-11-05 23:27 ` John Hubbard
2025-11-10 15:16 ` Joel Fernandes
2025-11-10 15:16 ` Joel Fernandes
2025-11-10 16:59 ` Steven Rostedt
2025-11-10 17:09 ` Joel Fernandes
2025-11-11 18:42 ` Lyude Paul
2025-11-12 0:45 ` Alexandre Courbot
2025-11-10 13:50 ` Alexandre Courbot
2025-11-11 23:39 ` Joel Fernandes
2025-11-02 23:59 ` [PATCH v2 09/12] nova-core: sequencer: Add delay opcode support Joel Fernandes
2025-11-10 13:51 ` Alexandre Courbot
2025-11-02 23:59 ` [PATCH v2 10/12] nova-core: sequencer: Implement basic core operations Joel Fernandes
2025-11-11 19:04 ` Lyude Paul
2025-11-02 23:59 ` [PATCH v2 11/12] nova-core: sequencer: Implement core resume operation Joel Fernandes
2025-11-02 23:59 ` [PATCH v2 12/12] gpu: nova-core: gsp: Wait for gsp initialization to complete Joel Fernandes
2025-11-10 13:51 ` Alexandre Courbot
2025-11-03 19:12 ` [PATCH v2 00/12] nova-core: Complete GSP boot and begin RPC communication Timur Tabi
2025-11-03 19:35 ` Joel Fernandes
2025-11-03 19:54 ` Timur Tabi
2025-11-04 23:26 ` [PATCH v2 13/12] nova-core: sequencer: Refactor run() to handle unknown messages Joel Fernandes
2025-11-10 13:52 ` Alexandre Courbot
2025-11-06 23:11 ` [PATCH v3 00/14] nova-core: Complete GSP boot and begin RPC communication Joel Fernandes
2025-11-06 23:11 ` [PATCH v3 01/14] gpu: nova-core: falcon: Move waiting until halted to a helper Joel Fernandes
2025-11-06 23:11 ` [PATCH v3 02/14] gpu: nova-core: falcon: Move start functionality into separate helper Joel Fernandes
2025-11-06 23:11 ` [PATCH v3 03/14] gpu: nova-core: falcon: Move mbox functionalities into helper Joel Fernandes
2025-11-06 23:11 ` [PATCH v3 04/14] gpu: nova-core: falcon: Move dma_reset functionality " Joel Fernandes
2025-11-06 23:11 ` [PATCH v3 05/14] gpu: nova-core: gsp: Add support for checking if GSP reloaded Joel Fernandes
2025-11-06 23:11 ` [PATCH v3 06/14] gpu: nova-core: Add bindings required by GSP sequencer Joel Fernandes
2025-11-11 21:43 ` Lyude Paul
2025-11-13 0:48 ` Joel Fernandes
2025-11-06 23:11 ` [PATCH v3 07/14] gpu: nova-core: Implement the " Joel Fernandes
2025-11-11 20:57 ` Lyude Paul
2025-11-13 1:24 ` Joel Fernandes [this message]
2025-11-06 23:11 ` [PATCH v3 08/14] gpu: nova-core: sequencer: Add register opcodes Joel Fernandes
2025-11-11 21:09 ` Lyude Paul
2025-11-06 23:11 ` [PATCH v3 09/14] gpu: nova-core: sequencer: Add delay opcode support Joel Fernandes
2025-11-11 21:11 ` Lyude Paul
2025-11-06 23:11 ` [PATCH v3 10/14] gpu: nova-core: sequencer: Implement basic core operations Joel Fernandes
2025-11-11 21:12 ` Lyude Paul
2025-11-13 0:49 ` Joel Fernandes
2025-11-06 23:11 ` [PATCH v3 11/14] gpu: nova-core: sequencer: Implement core resume operation Joel Fernandes
2025-11-11 21:44 ` Lyude Paul
2025-11-06 23:11 ` [PATCH v3 12/14] gpu: nova-core: gsp: Wait for gsp initialization to complete Joel Fernandes
2025-11-11 21:47 ` Lyude Paul
2025-11-06 23:11 ` [PATCH v3 13/14] gpu: nova-core: sequencer: Refactor run() to handle unknown messages Joel Fernandes
2025-11-11 21:49 ` Lyude Paul
2025-11-06 23:11 ` [PATCH v3 14/14] gpu: nova-core: gsp: Retrieve GSP static info to gather GPU information Joel Fernandes
2025-11-11 22:02 ` Lyude Paul
2025-11-12 20:22 ` Joel Fernandes
2025-11-12 20:35 ` Joel Fernandes
2025-11-06 2:06 ` [PATCH v2 00/12] nova-core: Complete GSP boot and begin RPC communication John Hubbard
2025-11-11 20:24 ` Lyude Paul
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=51d2ccf4-9ca5-42a3-8ebc-d32729b6f059@nvidia.com \
--to=joelagnelf@nvidia.com \
--cc=a.hindborg@kernel.org \
--cc=acourbot@nvidia.com \
--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=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=gary@garyguo.net \
--cc=jhubbard@nvidia.com \
--cc=joel@joelfernandes.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox