154e6baf1SDanilo Krummrich // SPDX-License-Identifier: GPL-2.0 254e6baf1SDanilo Krummrich 3*2cd5769fSLinus Torvalds use kernel::{bindings, c_str, device::Core, pci, prelude::*}; 454e6baf1SDanilo Krummrich 554e6baf1SDanilo Krummrich use crate::gpu::Gpu; 654e6baf1SDanilo Krummrich 754e6baf1SDanilo Krummrich #[pin_data] 854e6baf1SDanilo Krummrich pub(crate) struct NovaCore { 954e6baf1SDanilo Krummrich #[pin] 1054e6baf1SDanilo Krummrich pub(crate) gpu: Gpu, 1154e6baf1SDanilo Krummrich } 1254e6baf1SDanilo Krummrich 1354e6baf1SDanilo Krummrich const BAR0_SIZE: usize = 8; 1454e6baf1SDanilo Krummrich pub(crate) type Bar0 = pci::Bar<BAR0_SIZE>; 1554e6baf1SDanilo Krummrich 1654e6baf1SDanilo Krummrich kernel::pci_device_table!( 1754e6baf1SDanilo Krummrich PCI_TABLE, 1854e6baf1SDanilo Krummrich MODULE_PCI_TABLE, 1954e6baf1SDanilo Krummrich <NovaCore as pci::Driver>::IdInfo, 2054e6baf1SDanilo Krummrich [( 2154e6baf1SDanilo Krummrich pci::DeviceId::from_id(bindings::PCI_VENDOR_ID_NVIDIA, bindings::PCI_ANY_ID as _), 2254e6baf1SDanilo Krummrich () 2354e6baf1SDanilo Krummrich )] 2454e6baf1SDanilo Krummrich ); 2554e6baf1SDanilo Krummrich 2654e6baf1SDanilo Krummrich impl pci::Driver for NovaCore { 2754e6baf1SDanilo Krummrich type IdInfo = (); 2854e6baf1SDanilo Krummrich const ID_TABLE: pci::IdTable<Self::IdInfo> = &PCI_TABLE; 2954e6baf1SDanilo Krummrich 30*2cd5769fSLinus Torvalds fn probe(pdev: &pci::Device<Core>, _info: &Self::IdInfo) -> Result<Pin<KBox<Self>>> { 3154e6baf1SDanilo Krummrich dev_dbg!(pdev.as_ref(), "Probe Nova Core GPU driver.\n"); 3254e6baf1SDanilo Krummrich 3354e6baf1SDanilo Krummrich pdev.enable_device_mem()?; 3454e6baf1SDanilo Krummrich pdev.set_master(); 3554e6baf1SDanilo Krummrich 3654e6baf1SDanilo Krummrich let bar = pdev.iomap_region_sized::<BAR0_SIZE>(0, c_str!("nova-core/bar0"))?; 3754e6baf1SDanilo Krummrich 3854e6baf1SDanilo Krummrich let this = KBox::pin_init( 3954e6baf1SDanilo Krummrich try_pin_init!(Self { 4054e6baf1SDanilo Krummrich gpu <- Gpu::new(pdev, bar)?, 4154e6baf1SDanilo Krummrich }), 4254e6baf1SDanilo Krummrich GFP_KERNEL, 4354e6baf1SDanilo Krummrich )?; 4454e6baf1SDanilo Krummrich 4554e6baf1SDanilo Krummrich Ok(this) 4654e6baf1SDanilo Krummrich } 4754e6baf1SDanilo Krummrich } 48