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 > + } > }
