On Wed Sep 10, 2025 at 8:18 PM JST, Alexandre Courbot wrote: >>> here is what it looks like when I got it to compile: >> >> This looks great! >> >>> pub(crate) fn new<'a>( >>> pdev: &'a pci::Device<device::Bound>, >>> devres_bar: Arc<Devres<Bar0>>, >>> bar: &'a Bar0, >>> ) -> impl PinInit<Self, Error> + 'a { >>> try_pin_init!(Self { >>> spec: Spec::new(bar).inspect(|spec| { >>> dev_info!( >>> pdev.as_ref(), >>> "NVIDIA (Chipset: {}, Architecture: {:?}, Revision: >>> {})\n", >>> spec.chipset, >>> spec.chipset.arch(), >>> spec.revision >>> ); >>> })?, >> >> + _: { >> + gfw::wait_gfw_boot_completion(bar) >> + .inspect_err(|_| dev_err!(pdev.as_ref(), "GFW boot did >> not complete"))?; >> + }, >>> >>> sysmem_flush: SysmemFlush::register(pdev.as_ref(), bar, >>> spec.chipset)?, >>> >>> gsp_falcon: Falcon::<Gsp>::new( >>> pdev.as_ref(), >>> spec.chipset, >>> bar, >>> spec.chipset > Chipset::GA100, >>> ) >>> .inspect(|falcon| falcon.clear_swgen0_intr(bar))?, >>> >>> sec2_falcon: Falcon::<Sec2>::new(pdev.as_ref(), spec.chipset, >>> bar, true)?, >>> >> - gsp: Self::start_gsp(pdev, bar, spec.chipset, gsp_falcon, >> sec2_falcon)?, >> + gsp <- Self::start_gsp(pdev, bar, spec.chipset, gsp_falcon, >> sec2_falcon), >>> >>> bar: devres_bar, >>> }) >>> } >>> >>> The wait for GFW initialization had to be moved to `probe`, but that's >>> fine IMO. >> >> That's not necessary, you can keep it in Gpu::new() -- I don't see what's >> preventing us from that. I inserted it in the code above. > > This one didn't work for me, but maybe you have a newer version of the > internal references patch: > > error: no rules expected reserved identifier `_` > --> drivers/gpu/nova-core/gpu.rs:323:13 > | > 323 | _: { > | ^ no rules expected this token in macro call > | > note: while trying to match `)`
Ah, just found out about this, neat! https://lore.kernel.org/rust-for-linux/20250905140534.3328297-1-los...@kernel.org/