drivers/gpu/nova-core/falcon/hal/ga102.rs

Source file repositories/reference/linux-study-clean/drivers/gpu/nova-core/falcon/hal/ga102.rs

File Facts

System
Linux kernel
Corpus path
drivers/gpu/nova-core/falcon/hal/ga102.rs
Extension
.rs
Size
5097 bytes
Lines
174
Domain
Driver Families
Bucket
drivers/gpu
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

fn program_brom(&self, _falcon: &Falcon<E>, bar: Bar0<'_>, params: &FalconBromParams) {
        program_brom_ga102::<E>(bar, params);
    }

    fn is_riscv_active(&self, bar: Bar0<'_>) -> bool {
        bar.read(regs::NV_PRISCV_RISCV_CPUCTL::of::<E>())
            .active_stat()
    }

    fn reset_wait_mem_scrubbing(&self, bar: Bar0<'_>) -> Result {
        // TIMEOUT: memory scrubbing should complete in less than 20ms.
        read_poll_timeout(
            || Ok(bar.read(regs::NV_PFALCON_FALCON_HWCFG2::of::<E>())),
            |r| r.mem_scrubbing_done(),
            Delta::ZERO,
            Delta::from_millis(20),
        )
        .map(|_| ())
    }

    fn reset_eng(&self, bar: Bar0<'_>) -> Result {
        let _ = bar.read(regs::NV_PFALCON_FALCON_HWCFG2::of::<E>());

        // According to OpenRM's `kflcnPreResetWait_GA102` documentation, HW sometimes does not set
        // RESET_READY so a non-failing timeout is used.
        let _ = read_poll_timeout(
            || Ok(bar.read(regs::NV_PFALCON_FALCON_HWCFG2::of::<E>())),
            |r| r.reset_ready(),
            Delta::ZERO,
            Delta::from_micros(150),
        );

        regs::NV_PFALCON_FALCON_ENGINE::reset_engine::<E>(bar);
        self.reset_wait_mem_scrubbing(bar)?;

        Ok(())
    }

    fn load_method(&self) -> LoadMethod {
        LoadMethod::Dma
    }
}

Annotation

Implementation Notes