Changes since v3: The main change for v4 is to switch to using the `init!` macros to ensure all fields on in-place initialised structs get initialised. This will require our bindings to derive the `Zeroable` trait, however for now I have left this as a TODO with manual implementations for each trait. That is because rebasing the binding changes is a bit of a pain, so I want to give reviewers a change to see if deriving `Zeroable` for all bindings makes sense or not.
Other changes include addressing most of the outstanding TODOs left in v3 and addressing review comments from v2 and v3. In particular some of the comments by Timur that had not been picked up. Changes since v2: The main change since v2 has been to make all firmware bindings completely opaque. It has been made clear this is a pre-requisite for this series to progress upstream as it should make supporting different firmware versions easier in future. Overall the extra constructors and accessors add a couple of hundred lines of code and a few extra unsafe statements. Other changes include addressing a bunch of other comments - see the individual patches for further details. There are also still some outstanding comments and TODO's to address which I have not gotten to yet - these will be done in the next version of this series. Changes since v1: - Based on feed back from Alex the GSP command queue logic was reworked extensively. This involved creating a new data struct (DmaGspMem) to manage the shared memory areas between CPU and GSP. - This data structure helps ensure the safety constraints are meet when the CPU is reading/writing the shared memory queues. - Several other minor comments were addressed, as noted in the individual patches. This series builds on top of Alex's series[1], most of which has been merged into drm-rust-next, to continue initialising the GSP into a state where it becomes active and it starts communicating with the host. A tree including these patches with the prerequisite patches is available at [2]. It includes patches to initialise several important data structures required to boot the GSP. The biggest change is the implementation of the command/message circular queue used to establish communication between GSP and host in patch 6. Admittedly this patch is rather large - if necessary it could be split into send and receive patches if people prefer. This is required to configure and boot the GSP. However this series does not get the GSP to a fully active state. Instead it gets it to a state where the GSP sends a message to the host with a sequence of instructions which need running to get to the active state. A subsequent series will implement processing of this message and allow the GSP to get to the fully active state. A full tree including the prerequisites for this patch series is available at https://github.com/apopple-nvidia/linux/tree/nova-core-for-upstream. [1] - https://lore.kernel.org/rust-for-linux/[email protected]/ [2] - https://github.com/apopple-nvidia/linux/tree/nova-core-for-upstream-v2 To: [email protected] To: [email protected] To: Danilo Krummrich <[email protected]> To: Alexandre Courbot <[email protected]> Cc: Miguel Ojeda <[email protected]> Cc: Alex Gaynor <[email protected]> Cc: Boqun Feng <[email protected]> Cc: Gary Guo <[email protected]> Cc: Björn Roy Baron <[email protected]> Cc: Benno Lossin <[email protected]> Cc: Andreas Hindborg <[email protected]> Cc: Alice Ryhl <[email protected]> Cc: Trevor Gross <[email protected]> Cc: David Airlie <[email protected]> Cc: Simona Vetter <[email protected]> Cc: Maarten Lankhorst <[email protected]> Cc: Maxime Ripard <[email protected]> Cc: Thomas Zimmermann <[email protected]> Cc: John Hubbard <[email protected]> Cc: Joel Fernandes <[email protected]> Cc: Timur Tabi <[email protected]> Cc: [email protected] Cc: [email protected] Alistair Popple (10): gpu: nova-core: Set correct DMA mask gpu: nova-core: Create initial Gsp gpu: nova-core: gsp: Create wpr metadata gpu: nova-core: Add GSP command queue bindings gpu: nova-core: gsp: Add GSP command queue handling gpu: nova-core: gsp: Create rmargs gpu: nova-core: Add bindings and accessors for GspSystemInfo gpu: nova-core: Add bindings for the GSP RM registry tables gpu: nova-core: gsp: Create RM registry and sysinfo commands nova-core: gsp: Boot GSP Joel Fernandes (3): gpu: nova-core: Add a slice-buffer (sbuffer) datastructure nova-core: falcon: Add support to check if RISC-V is active nova-core: falcon: Add support to write firmware version drivers/gpu/nova-core/driver.rs | 9 + drivers/gpu/nova-core/falcon.rs | 16 + drivers/gpu/nova-core/fb.rs | 1 - drivers/gpu/nova-core/firmware/gsp.rs | 3 +- drivers/gpu/nova-core/firmware/riscv.rs | 9 +- drivers/gpu/nova-core/gpu.rs | 2 +- drivers/gpu/nova-core/gsp.rs | 107 +++- drivers/gpu/nova-core/gsp/boot.rs | 76 ++- drivers/gpu/nova-core/gsp/cmdq.rs | 509 +++++++++++++++ drivers/gpu/nova-core/gsp/commands.rs | 115 ++++ drivers/gpu/nova-core/gsp/fw.rs | 434 ++++++++++++- drivers/gpu/nova-core/gsp/fw/commands.rs | 104 ++++ .../gpu/nova-core/gsp/fw/r570_144/bindings.rs | 577 ++++++++++++++++++ drivers/gpu/nova-core/nova_core.rs | 1 + drivers/gpu/nova-core/regs.rs | 17 +- drivers/gpu/nova-core/sbuffer.rs | 188 ++++++ scripts/Makefile.build | 2 +- 17 files changed, 2150 insertions(+), 20 deletions(-) create mode 100644 drivers/gpu/nova-core/gsp/cmdq.rs create mode 100644 drivers/gpu/nova-core/gsp/commands.rs create mode 100644 drivers/gpu/nova-core/gsp/fw/commands.rs create mode 100644 drivers/gpu/nova-core/sbuffer.rs -- 2.50.1
