[PATCH v5 00/13] nova-core: Complete GSP boot and begin RPC communication

Joel Fernandes posted 13 patches 3 weeks, 3 days ago
drivers/gpu/nova-core/falcon.rs               | 101 +++--
drivers/gpu/nova-core/falcon/gsp.rs           |  17 +
drivers/gpu/nova-core/gsp.rs                  |   1 +
drivers/gpu/nova-core/gsp/boot.rs             |  24 ++
drivers/gpu/nova-core/gsp/cmdq.rs             |   1 -
drivers/gpu/nova-core/gsp/commands.rs         | 113 ++++-
drivers/gpu/nova-core/gsp/fw.rs               | 323 +++++++++++++-
.../gpu/nova-core/gsp/fw/r570_144/bindings.rs | 248 +++++++++++
drivers/gpu/nova-core/gsp/sequencer.rs        | 403 ++++++++++++++++++
drivers/gpu/nova-core/nova_core.rs            |   1 +
drivers/gpu/nova-core/regs.rs                 |   6 +
drivers/gpu/nova-core/sbuffer.rs              |   1 -
drivers/gpu/nova-core/util.rs                 |  16 +
13 files changed, 1218 insertions(+), 37 deletions(-)
create mode 100644 drivers/gpu/nova-core/gsp/sequencer.rs
create mode 100644 drivers/gpu/nova-core/util.rs
[PATCH v5 00/13] nova-core: Complete GSP boot and begin RPC communication
Posted by Joel Fernandes 3 weeks, 3 days ago
Changes from v4 to v5:
- Fixed 2 import nits.
- Squashed a fixup to adjust GspStaticConfig (13th patch) to use wrapper instead of directly using firmware bindings.
- Rebased on drm-rust-next.

These patches a refresh of the series adding support for final stages of the
GSP boot process where a sequencer which inteprets firmware instructions needs
to run to boot the GSP processor, followed by waiting for an INIT_DONE message
from the GSP and finally retrieving GPU information from the GSP.

The entire tree can be found at the git repository:
git: git://git.kernel.org/pub/scm/linux/kernel/git/jfern/linux.git
tag: seq-v5-4

Tested on my Ampere GA102 and I see in dmesg:
NovaCore 0000:00:07.0: GPU name: NVIDIA GeForce RTX 3090 Ti

Changes from v3 to v4:
- Several changes to adapt to Alexandre Courbot's GSP boot v9 series which
  had changes to the RPC command queue.
- Several changes based on feedback from Alexandre Courbot, Lyude Paul.

Changes from v2 to v3:
- Added several tags.
- Fixed commit messages, style errors.
- Added GspStaticInfo patch.
- Fixed bug found by Timur in the sequencer code (related to ignoring messages).
- Removed excessive dev_dbg prints in sequencer code (John Hubbard).

Previous series:
Link to v4: https://lore.kernel.org/all/20251113014119.1286886-1-joelagnelf@nvidia.com/
v3: https://lore.kernel.org/all/20251106231153.2925637-1-joelagnelf@nvidia.com/
v2: https://lore.kernel.org/all/20251102235920.3784592-1-joelagnelf@nvidia.com/
v1: https://lore.kernel.org/all/20250829173254.2068763-1-joelagnelf@nvidia.com/

Alistair Popple (2):
  gpu: nova-core: gsp: Wait for gsp initialization to complete
  gpu: nova-core: gsp: Retrieve GSP static info to gather GPU
    information

Joel Fernandes (11):
  gpu: nova-core: falcon: Move waiting until halted to a helper
  gpu: nova-core: falcon: Move start functionality into separate helper
  gpu: nova-core: falcon: Move mbox functionalities into helper
  gpu: nova-core: falcon: Move dma_reset functionality into helper
  gpu: nova-core: gsp: Add support for checking if GSP reloaded
  gpu: nova-core: Add bindings required by GSP sequencer
  gpu: nova-core: Implement the GSP sequencer
  gpu: nova-core: sequencer: Add register opcodes
  gpu: nova-core: sequencer: Add delay opcode support
  gpu: nova-core: sequencer: Implement basic core operations
  gpu: nova-core: sequencer: Implement core resume operation

 drivers/gpu/nova-core/falcon.rs               | 101 +++--
 drivers/gpu/nova-core/falcon/gsp.rs           |  17 +
 drivers/gpu/nova-core/gsp.rs                  |   1 +
 drivers/gpu/nova-core/gsp/boot.rs             |  24 ++
 drivers/gpu/nova-core/gsp/cmdq.rs             |   1 -
 drivers/gpu/nova-core/gsp/commands.rs         | 113 ++++-
 drivers/gpu/nova-core/gsp/fw.rs               | 323 +++++++++++++-
 .../gpu/nova-core/gsp/fw/r570_144/bindings.rs | 248 +++++++++++
 drivers/gpu/nova-core/gsp/sequencer.rs        | 403 ++++++++++++++++++
 drivers/gpu/nova-core/nova_core.rs            |   1 +
 drivers/gpu/nova-core/regs.rs                 |   6 +
 drivers/gpu/nova-core/sbuffer.rs              |   1 -
 drivers/gpu/nova-core/util.rs                 |  16 +
 13 files changed, 1218 insertions(+), 37 deletions(-)
 create mode 100644 drivers/gpu/nova-core/gsp/sequencer.rs
 create mode 100644 drivers/gpu/nova-core/util.rs

-- 
2.34.1
Re: [PATCH v5 00/13] nova-core: Complete GSP boot and begin RPC communication
Posted by Alexandre Courbot 3 weeks, 2 days ago
On Sat Nov 15, 2025 at 4:55 AM JST, Joel Fernandes wrote:
> Changes from v4 to v5:
> - Fixed 2 import nits.
> - Squashed a fixup to adjust GspStaticConfig (13th patch) to use wrapper instead of directly using firmware bindings.
> - Rebased on drm-rust-next.
>
> These patches a refresh of the series adding support for final stages of the
> GSP boot process where a sequencer which inteprets firmware instructions needs
> to run to boot the GSP processor, followed by waiting for an INIT_DONE message
> from the GSP and finally retrieving GPU information from the GSP.
>
> The entire tree can be found at the git repository:
> git: git://git.kernel.org/pub/scm/linux/kernel/git/jfern/linux.git
> tag: seq-v5-4
>
> Tested on my Ampere GA102 and I see in dmesg:
> NovaCore 0000:00:07.0: GPU name: NVIDIA GeForce RTX 3090 Ti

Pushed to drm-rust-next with the changes I mentioned inline, thanks!

We will definitely want to make our interfaces evolves some more
(notably the command queue), and there are still a few nits to address,
but we have been kicking the can down the road for quite some time with
this one and in its current shape it provides a good foundation for the
next stuff to build upon.

The GSP is now initialized - not that it does anything beyond telling us
its name, but it's a milestone nonetheless! :)
Re: [PATCH v5 00/13] nova-core: Complete GSP boot and begin RPC communication
Posted by John Hubbard 3 weeks, 2 days ago
On 11/15/25 5:31 AM, Alexandre Courbot wrote:
> On Sat Nov 15, 2025 at 4:55 AM JST, Joel Fernandes wrote:
...
> Pushed to drm-rust-next with the changes I mentioned inline, thanks!
> 
> We will definitely want to make our interfaces evolves some more
> (notably the command queue), and there are still a few nits to address,
> but we have been kicking the can down the road for quite some time with
> this one and in its current shape it provides a good foundation for the
> next stuff to build upon.
> 
> The GSP is now initialized - not that it does anything beyond telling us
> its name, but it's a milestone nonetheless! :)

Yes, a wonderful milestone, congratulations to everyone involved!

And a special thanks to the many Rust for Linux reviewers (that includes Alex
Courbot here), who have been as patient as saints while our Nova team learns
Rust at the same time as writing the driver (!).

Here's the latest dmesg verbose output from today's drm-rust-next running on my
local test machine:

NovaCore 0000:e1:00.0: Probe Nova Core GPU driver.
NovaCore 0000:e1:00.0: NVIDIA (Chipset: GA104, Architecture: Ampere, Revision: a.1)
...
NovaCore 0000:e1:00.0: RISC-V active? true
NovaCore 0000:e1:00.0: GSP RPC: receive: seq# 0, function=Ok(GspRunCpuSequencer), length=0x18e8
NovaCore 0000:e1:00.0: Running CPU Sequencer commands
NovaCore 0000:e1:00.0: CPU Sequencer commands completed successfully
NovaCore 0000:e1:00.0: GSP RPC: receive: seq# 0, function=Ok(GspPostNoCat), length=0x50c
NovaCore 0000:e1:00.0: GSP RPC: receive: seq# 0, function=Ok(UcodeLibOsPrint), length=0x68
NovaCore 0000:e1:00.0: GSP RPC: receive: seq# 0, function=Ok(UcodeLibOsPrint), length=0x70
NovaCore 0000:e1:00.0: GSP RPC: receive: seq# 0, function=Ok(GspInitDone), length=0x50
NovaCore 0000:e1:00.0: GSP RPC: send: seq# 2, function=GET_GSP_STATIC_INFO, length=0x6c8
NovaCore 0000:e1:00.0: GSP RPC: receive: seq# 0, function=Ok(GetGspStaticInfo), length=0x6c8
NovaCore 0000:e1:00.0: GPU name: NVIDIA RTX A4000

Beautiful!

It is so great to finally see this emitted from a driver built from top of tree
drm-rust-next, at last. :)


thanks,
-- 
John Hubbard