summaryrefslogtreecommitdiff
path: root/drivers/gpu/nova-core/gsp.rs
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nova-core/gsp.rs')
-rw-r--r--drivers/gpu/nova-core/gsp.rs38
1 files changed, 34 insertions, 4 deletions
diff --git a/drivers/gpu/nova-core/gsp.rs b/drivers/gpu/nova-core/gsp.rs
index 69175ca3315c..b4ac4156056e 100644
--- a/drivers/gpu/nova-core/gsp.rs
+++ b/drivers/gpu/nova-core/gsp.rs
@@ -22,6 +22,7 @@ use kernel::{
pub(crate) mod cmdq;
pub(crate) mod commands;
mod fw;
+mod regs;
mod sequencer;
pub(crate) use fw::{
@@ -31,10 +32,19 @@ pub(crate) use fw::{
};
use crate::{
- gsp::cmdq::Cmdq,
- gsp::fw::{
- GspArgumentsPadded,
- LibosMemoryRegionInitArgument, //
+ driver::Bar0,
+ falcon::{
+ gsp::Gsp as GspFalcon,
+ sec2::Sec2 as Sec2Falcon,
+ Falcon, //
+ },
+ gpu::Chipset,
+ gsp::{
+ cmdq::Cmdq,
+ fw::{
+ GspArgumentsPadded,
+ LibosMemoryRegionInitArgument, //
+ },
},
num,
};
@@ -42,6 +52,21 @@ use crate::{
pub(crate) const GSP_PAGE_SHIFT: usize = 12;
pub(crate) const GSP_PAGE_SIZE: usize = 1 << GSP_PAGE_SHIFT;
+/// Common context for the GSP boot process.
+pub(crate) struct GspBootContext<'a> {
+ pub(crate) pdev: &'a pci::Device<device::Bound>,
+ pub(crate) bar: Bar0<'a>,
+ pub(crate) chipset: Chipset,
+ pub(crate) gsp_falcon: &'a Falcon<'a, GspFalcon>,
+ pub(crate) sec2_falcon: &'a Falcon<'a, Sec2Falcon>,
+}
+
+impl<'a> GspBootContext<'a> {
+ pub(crate) fn dev(&self) -> &'a device::Device<device::Bound> {
+ self.pdev.as_ref()
+ }
+}
+
/// Number of GSP pages to use in a RM log buffer.
const RM_LOG_BUFFER_NUM_PAGES: usize = 0x10;
const LOG_BUFFER_SIZE: usize = RM_LOG_BUFFER_NUM_PAGES * GSP_PAGE_SIZE;
@@ -185,6 +210,11 @@ impl Gsp {
}))
})
}
+
+ /// 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`].