mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-04 20:32:27 -04:00
gpu: nova-core: gsp: get rid of redundant Result in Gsp::new()
In Gsp::new(), utilize pin_init_scope() to get rid of the Result in the returned Result<impl PinInit<T, Error>> which is unnecessarily redundant. Reviewed-by: Joel Fernandes <joelagnelf@nvidia.com> Link: https://patch.msgid.link/20251218155239.25243-4-dakr@kernel.org Signed-off-by: Danilo Krummrich <dakr@kernel.org>
This commit is contained in:
@@ -281,7 +281,7 @@ pub(crate) fn new<'a>(
|
||||
|
||||
sec2_falcon: Falcon::new(pdev.as_ref(), spec.chipset)?,
|
||||
|
||||
gsp <- Gsp::new(pdev)?,
|
||||
gsp <- Gsp::new(pdev),
|
||||
|
||||
_: { gsp.boot(pdev, bar, spec.chipset, gsp_falcon, sec2_falcon)? },
|
||||
|
||||
|
||||
@@ -119,43 +119,45 @@ pub(crate) struct Gsp {
|
||||
|
||||
impl Gsp {
|
||||
// Creates an in-place initializer for a `Gsp` manager for `pdev`.
|
||||
pub(crate) fn new(pdev: &pci::Device<device::Bound>) -> Result<impl PinInit<Self, Error>> {
|
||||
let dev = pdev.as_ref();
|
||||
let libos = CoherentAllocation::<LibosMemoryRegionInitArgument>::alloc_coherent(
|
||||
dev,
|
||||
GSP_PAGE_SIZE / size_of::<LibosMemoryRegionInitArgument>(),
|
||||
GFP_KERNEL | __GFP_ZERO,
|
||||
)?;
|
||||
pub(crate) fn new(pdev: &pci::Device<device::Bound>) -> impl PinInit<Self, Error> + '_ {
|
||||
pin_init::pin_init_scope(move || {
|
||||
let dev = pdev.as_ref();
|
||||
let libos = CoherentAllocation::<LibosMemoryRegionInitArgument>::alloc_coherent(
|
||||
dev,
|
||||
GSP_PAGE_SIZE / size_of::<LibosMemoryRegionInitArgument>(),
|
||||
GFP_KERNEL | __GFP_ZERO,
|
||||
)?;
|
||||
|
||||
// Initialise the logging structures. The OpenRM equivalents are in:
|
||||
// _kgspInitLibosLoggingStructures (allocates memory for buffers)
|
||||
// kgspSetupLibosInitArgs_IMPL (creates pLibosInitArgs[] array)
|
||||
let loginit = LogBuffer::new(dev)?;
|
||||
dma_write!(libos[0] = LibosMemoryRegionInitArgument::new("LOGINIT", &loginit.0))?;
|
||||
// Initialise the logging structures. The OpenRM equivalents are in:
|
||||
// _kgspInitLibosLoggingStructures (allocates memory for buffers)
|
||||
// kgspSetupLibosInitArgs_IMPL (creates pLibosInitArgs[] array)
|
||||
let loginit = LogBuffer::new(dev)?;
|
||||
dma_write!(libos[0] = LibosMemoryRegionInitArgument::new("LOGINIT", &loginit.0))?;
|
||||
|
||||
let logintr = LogBuffer::new(dev)?;
|
||||
dma_write!(libos[1] = LibosMemoryRegionInitArgument::new("LOGINTR", &logintr.0))?;
|
||||
let logintr = LogBuffer::new(dev)?;
|
||||
dma_write!(libos[1] = LibosMemoryRegionInitArgument::new("LOGINTR", &logintr.0))?;
|
||||
|
||||
let logrm = LogBuffer::new(dev)?;
|
||||
dma_write!(libos[2] = LibosMemoryRegionInitArgument::new("LOGRM", &logrm.0))?;
|
||||
let logrm = LogBuffer::new(dev)?;
|
||||
dma_write!(libos[2] = LibosMemoryRegionInitArgument::new("LOGRM", &logrm.0))?;
|
||||
|
||||
let cmdq = Cmdq::new(dev)?;
|
||||
let cmdq = Cmdq::new(dev)?;
|
||||
|
||||
let rmargs = CoherentAllocation::<GspArgumentsCached>::alloc_coherent(
|
||||
dev,
|
||||
1,
|
||||
GFP_KERNEL | __GFP_ZERO,
|
||||
)?;
|
||||
dma_write!(rmargs[0] = fw::GspArgumentsCached::new(&cmdq))?;
|
||||
dma_write!(libos[3] = LibosMemoryRegionInitArgument::new("RMARGS", &rmargs))?;
|
||||
let rmargs = CoherentAllocation::<GspArgumentsCached>::alloc_coherent(
|
||||
dev,
|
||||
1,
|
||||
GFP_KERNEL | __GFP_ZERO,
|
||||
)?;
|
||||
dma_write!(rmargs[0] = fw::GspArgumentsCached::new(&cmdq))?;
|
||||
dma_write!(libos[3] = LibosMemoryRegionInitArgument::new("RMARGS", &rmargs))?;
|
||||
|
||||
Ok(try_pin_init!(Self {
|
||||
libos,
|
||||
loginit,
|
||||
logintr,
|
||||
logrm,
|
||||
rmargs,
|
||||
cmdq,
|
||||
}))
|
||||
Ok(try_pin_init!(Self {
|
||||
libos,
|
||||
loginit,
|
||||
logintr,
|
||||
logrm,
|
||||
rmargs,
|
||||
cmdq,
|
||||
}))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user