On Fri Jan 2, 2026 at 8:59 PM PST, Timur Tabi wrote:
> Some GPUs do not support using DMA to transfer code/data from system
> memory to Falcon memory, and instead must use programmed I/O (PIO).
> Add a function to the Falcon HAL to indicate whether a given GPU's
> Falcons support DMA for this purpose.
>
> Signed-off-by: Timur Tabi <[email protected]>
> ---
>  drivers/gpu/nova-core/falcon.rs           | 7 +++++++
>  drivers/gpu/nova-core/falcon/hal.rs       | 3 +++
>  drivers/gpu/nova-core/falcon/hal/ga102.rs | 4 ++++
>  drivers/gpu/nova-core/falcon/hal/tu102.rs | 4 ++++
>  4 files changed, 18 insertions(+)

Seems simple and clear. I know there was some exploration of alternative
ways to structure this, and I haven't read the following patches yet, so
maybe I'll eventually notice an opportunity for improving the Rust HAL
code here. But at this point, it looks good to me, so:

Reviewed-by: John Hubbard <[email protected]>

thanks,
-- 
John Hubbard

>
> diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon.rs
> index 1669a7d19b1b..744f513da9cd 100644
> --- a/drivers/gpu/nova-core/falcon.rs
> +++ b/drivers/gpu/nova-core/falcon.rs
> @@ -629,6 +629,13 @@ pub(crate) fn is_riscv_active(&self, bar: &Bar0) -> bool 
> {
>          self.hal.is_riscv_active(bar)
>      }
>  
> +    /// Check if this Falcon supports DMA for loading firmware.
> +    ///
> +    /// Returns `true` if DMA is supported, `false` if PIO must be used 
> instead.
> +    pub(crate) fn supports_dma(&self) -> bool {
> +        self.hal.supports_dma()
> +    }
> +
>      /// Write the application version to the OS register.
>      pub(crate) fn write_os_version(&self, bar: &Bar0, app_version: u32) {
>          regs::NV_PFALCON_FALCON_OS::default()
> diff --git a/drivers/gpu/nova-core/falcon/hal.rs 
> b/drivers/gpu/nova-core/falcon/hal.rs
> index c886ba03d1f6..49501aa6ff7f 100644
> --- a/drivers/gpu/nova-core/falcon/hal.rs
> +++ b/drivers/gpu/nova-core/falcon/hal.rs
> @@ -48,6 +48,9 @@ fn signature_reg_fuse_version(
>  
>      /// Reset the falcon engine.
>      fn reset_eng(&self, bar: &Bar0) -> Result;
> +
> +    /// Returns true of this Falcon supports DMA transfer from system memory 
> to Falcon memory
> +    fn supports_dma(&self) -> bool;
>  }
>  
>  /// Returns a boxed falcon HAL adequate for `chipset`.
> diff --git a/drivers/gpu/nova-core/falcon/hal/ga102.rs 
> b/drivers/gpu/nova-core/falcon/hal/ga102.rs
> index 5a263dc37d63..b2857293e653 100644
> --- a/drivers/gpu/nova-core/falcon/hal/ga102.rs
> +++ b/drivers/gpu/nova-core/falcon/hal/ga102.rs
> @@ -158,4 +158,8 @@ fn reset_eng(&self, bar: &Bar0) -> Result {
>  
>          Ok(())
>      }
> +
> +    fn supports_dma(&self) -> bool {
> +        true
> +    }
>  }
> diff --git a/drivers/gpu/nova-core/falcon/hal/tu102.rs 
> b/drivers/gpu/nova-core/falcon/hal/tu102.rs
> index 586d5dc6b417..28dc03db8240 100644
> --- a/drivers/gpu/nova-core/falcon/hal/tu102.rs
> +++ b/drivers/gpu/nova-core/falcon/hal/tu102.rs
> @@ -76,4 +76,8 @@ fn reset_eng(&self, bar: &Bar0) -> Result {
>  
>          Ok(())
>      }
> +
> +    fn supports_dma(&self) -> bool {
> +        false
> +    }
>  }

Reply via email to