In the fullness of time, it has become clear that these two types are not actually needed for anything, after all. Remove them both, and use boot0.chipset directly, instead.
This deletes a net total of 33 lines of code and simplifies the code as well. Signed-off-by: John Hubbard <[email protected]> --- drivers/gpu/nova-core/gpu.rs | 67 +++++++++--------------------------- 1 file changed, 17 insertions(+), 50 deletions(-) diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index af20e2daea24..a8a993424771 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -129,48 +129,10 @@ fn try_from(value: u8) -> Result<Self> { } } -pub(crate) struct Revision { - major: u8, - minor: u8, -} - -impl Revision { - fn from_boot0(boot0: regs::NV_PMC_BOOT_0) -> Self { - Self { - major: boot0.major_revision(), - minor: boot0.minor_revision(), - } - } -} - -impl fmt::Display for Revision { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{:x}.{:x}", self.major, self.minor) - } -} - -/// Structure holding the metadata of the GPU. -pub(crate) struct Spec { - chipset: Chipset, - /// The revision of the chipset. - revision: Revision, -} - -impl Spec { - fn new(bar: &Bar0) -> Result<Spec> { - let boot0 = regs::NV_PMC_BOOT_0::read(bar); - - Ok(Self { - chipset: boot0.chipset()?, - revision: Revision::from_boot0(boot0), - }) - } -} - /// Structure holding the resources required to operate the GPU. #[pin_data] pub(crate) struct Gpu { - spec: Spec, + chipset: Chipset, /// MMIO mapping of PCI BAR 0 bar: Arc<Devres<Bar0>>, /// System memory page required for flushing all pending GPU-side memory writes done through @@ -191,16 +153,21 @@ pub(crate) fn new<'a>( devres_bar: Arc<Devres<Bar0>>, bar: &'a Bar0, ) -> impl PinInit<Self, Error> + 'a { + let boot0 = regs::NV_PMC_BOOT_0::read(bar); + try_pin_init!(Self { - spec: Spec::new(bar).inspect(|spec| { + chipset: { + let chipset = boot0.chipset()?; dev_info!( pdev.as_ref(), - "NVIDIA (Chipset: {}, Architecture: {:?}, Revision: {})\n", - spec.chipset, - spec.chipset.arch(), - spec.revision + "NVIDIA (Chipset: {}, Architecture: {:?}, Revision: {:x}.{:x})\n", + chipset, + chipset.arch(), + boot0.major_revision(), + boot0.minor_revision() ); - })?, + chipset + }, // We must wait for GFW_BOOT completion before doing any significant setup on the GPU. _: { @@ -208,21 +175,21 @@ pub(crate) fn new<'a>( .inspect_err(|_| dev_err!(pdev.as_ref(), "GFW boot did not complete"))?; }, - sysmem_flush: SysmemFlush::register(pdev.as_ref(), bar, spec.chipset)?, + sysmem_flush: SysmemFlush::register(pdev.as_ref(), bar, boot0.chipset()?)?, gsp_falcon: Falcon::new( pdev.as_ref(), - spec.chipset, + boot0.chipset()?, bar, - spec.chipset > Chipset::GA100, + boot0.chipset()? > Chipset::GA100, ) .inspect(|falcon| falcon.clear_swgen0_intr(bar))?, - sec2_falcon: Falcon::new(pdev.as_ref(), spec.chipset, bar, true)?, + sec2_falcon: Falcon::new(pdev.as_ref(), boot0.chipset()?, bar, true)?, gsp <- Gsp::new(), - _: { gsp.boot(pdev, bar, spec.chipset, gsp_falcon, sec2_falcon)? }, + _: { gsp.boot(pdev, bar, boot0.chipset()?, gsp_falcon, sec2_falcon)? }, bar: devres_bar, }) -- 2.51.1
