From: Alexandre Courbot Date: Wed, 7 May 2025 13:52:31 +0000 (+0900) Subject: gpu: nova-core: take bound device in Gpu::new X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=a2a637ffdf8692e9a376383ca82a990036424fe0;p=users%2Fjedix%2Flinux-maple.git gpu: nova-core: take bound device in Gpu::new We will need to perform things like allocating DMA memory during device creation, so make sure to take the device context that will allow us to perform these actions. This also allows us to use Devres::access to obtain the BAR without holding a RCU lock. Signed-off-by: Alexandre Courbot Link: https://lore.kernel.org/r/20250507-nova-frts-v3-4-fcb02749754d@nvidia.com Signed-off-by: Danilo Krummrich --- diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index 9fe6aedaa956..a64a306e0ec8 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -134,9 +134,8 @@ pub(crate) struct Spec { } impl Spec { - fn new(bar: &Devres) -> Result { - let bar = bar.try_access().ok_or(ENXIO)?; - let boot0 = regs::Boot0::read(&bar); + fn new(bar: &Bar0) -> Result { + let boot0 = regs::Boot0::read(bar); Ok(Self { chipset: boot0.chipset().try_into()?, @@ -183,8 +182,12 @@ pub(crate) struct Gpu { } impl Gpu { - pub(crate) fn new(pdev: &pci::Device, bar: Devres) -> Result> { - let spec = Spec::new(&bar)?; + pub(crate) fn new( + pdev: &pci::Device, + devres_bar: Devres, + ) -> Result> { + let bar = devres_bar.access(pdev.as_ref())?; + let spec = Spec::new(bar)?; let fw = Firmware::new(pdev.as_ref(), &spec, "535.113.01")?; dev_info!( @@ -195,6 +198,10 @@ impl Gpu { spec.revision ); - Ok(pin_init!(Self { spec, bar, fw })) + Ok(pin_init!(Self { + spec, + bar: devres_bar, + fw + })) } }