mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 05:04:02 +02:00
gpu: nova-core: move GPU static information acquisition to a GSP method
The GSP static information is useful during regular driver runtime; however it is currently obtained from `Gsp::boot`, with no elegant way to pass it back to the caller. Solve this by moving the code acquiring it to a dedicated method of `Gsp` that can be called as soon as the `Gsp` is booted. This allows us to obtain and display the static information from the `Gpu` constructor, and to store the static information for later use. Its location at the end of `Gsp::boot` was a bit out-of-place anyway: technically, the GSP is considered booted after we have received the `GspInitDone` message, so anything that happens afterwards is not part of the boot sequence anymore. Reviewed-by: Eliot Courtney <ecourtney@nvidia.com> Link: https://patch.msgid.link/20260617-boot-vram-v3-2-20b9ec5fe9f2@nvidia.com [acourbot: add documentation to `get_static_info` method.] Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
This commit is contained in:
parent
b3e079288b
commit
f0c1bb8ead
|
|
@ -23,6 +23,7 @@
|
|||
fb::SysmemFlush,
|
||||
gsp::{
|
||||
self,
|
||||
commands::GetGspStaticInfoReply,
|
||||
Gsp,
|
||||
GspBootContext, //
|
||||
},
|
||||
|
|
@ -285,6 +286,8 @@ struct GspResources<'gpu> {
|
|||
#[pin_data]
|
||||
pub(crate) struct Gpu<'gpu> {
|
||||
spec: Spec,
|
||||
/// Static GPU information as provided by the GSP.
|
||||
gsp_static_info: GetGspStaticInfoReply,
|
||||
/// GSP and its resources.
|
||||
#[pin]
|
||||
gsp_resources: GspResources<'gpu>,
|
||||
|
|
@ -365,6 +368,17 @@ pub(crate) fn new(
|
|||
sec2_falcon,
|
||||
})?,
|
||||
}),
|
||||
|
||||
gsp_static_info: {
|
||||
// Obtain and display basic GPU information.
|
||||
let info = gsp_resources.gsp.get_static_info(bar)?;
|
||||
match info.gpu_name() {
|
||||
Ok(name) => dev_info!(pdev, "GPU name: {}\n", name),
|
||||
Err(e) => dev_warn!(pdev, "GPU name unavailable: {:?}\n", e),
|
||||
}
|
||||
|
||||
info
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,10 +39,12 @@
|
|||
Falcon, //
|
||||
},
|
||||
gpu::Chipset,
|
||||
gsp::cmdq::Cmdq,
|
||||
gsp::fw::{
|
||||
GspArgumentsPadded,
|
||||
LibosMemoryRegionInitArgument, //
|
||||
gsp::{
|
||||
cmdq::Cmdq,
|
||||
fw::{
|
||||
GspArgumentsPadded,
|
||||
LibosMemoryRegionInitArgument, //
|
||||
},
|
||||
},
|
||||
num,
|
||||
};
|
||||
|
|
@ -208,6 +210,11 @@ pub(crate) fn new(pdev: &pci::Device<device::Bound>) -> impl PinInit<Self, Error
|
|||
}))
|
||||
})
|
||||
}
|
||||
|
||||
/// Query the GSP for the static GPU information.
|
||||
pub(crate) fn get_static_info(&self, bar: Bar0<'_>) -> Result<commands::GetGspStaticInfoReply> {
|
||||
self.cmdq.send_command(bar, commands::GetGspStaticInfo)
|
||||
}
|
||||
}
|
||||
|
||||
/// Opaque bundle required to unload the GSP. Created by [`Gsp::boot`], consumed by [`Gsp::unload`].
|
||||
|
|
|
|||
|
|
@ -142,13 +142,6 @@ pub(crate) fn boot(
|
|||
// Wait until GSP is fully initialized.
|
||||
commands::wait_gsp_init_done(&self.cmdq)?;
|
||||
|
||||
// Obtain and display basic GPU information.
|
||||
let info = self.cmdq.send_command(bar, commands::GetGspStaticInfo)?;
|
||||
match info.gpu_name() {
|
||||
Ok(name) => dev_info!(pdev, "GPU name: {}\n", name),
|
||||
Err(e) => dev_warn!(pdev, "GPU name unavailable: {:?}\n", e),
|
||||
}
|
||||
|
||||
Ok(unload_guard.dismiss())
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user