Add accessor methods to GspStaticConfigInfo for retrieving the BAR1 Page Directory Entry base addresses from GSP-RM firmware.
These addresses point to the root page tables for BAR1 virtual memory spaces. The page tables are set up by GSP-RM during GPU initialization. Cc: Nikola Djukic <[email protected]> Signed-off-by: Joel Fernandes <[email protected]> --- drivers/gpu/nova-core/gsp/commands.rs | 8 ++++++++ drivers/gpu/nova-core/gsp/fw/commands.rs | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/gsp/commands.rs index fc9ba08f9f8d..22bd61e2a67e 100644 --- a/drivers/gpu/nova-core/gsp/commands.rs +++ b/drivers/gpu/nova-core/gsp/commands.rs @@ -189,6 +189,7 @@ fn init(&self) -> impl Init<Self::Command, Self::InitError> { /// The reply from the GSP to the [`GetGspStaticInfo`] command. pub(crate) struct GetGspStaticInfoReply { gpu_name: [u8; 64], + bar1_pde_base: u64, /// First usable FB region `(base, size)` for memory allocation. usable_fb_region: Option<(u64, u64)>, } @@ -204,6 +205,7 @@ fn read( ) -> Result<Self, Self::InitError> { Ok(GetGspStaticInfoReply { gpu_name: msg.gpu_name_str(), + bar1_pde_base: msg.bar1_pde_base(), usable_fb_region: msg.first_usable_fb_region(), }) } @@ -232,6 +234,12 @@ pub(crate) fn gpu_name(&self) -> core::result::Result<&str, GpuNameError> { .map_err(GpuNameError::InvalidUtf8) } + /// Returns the BAR1 Page Directory Entry base address. + #[expect(dead_code)] + pub(crate) fn bar1_pde_base(&self) -> u64 { + self.bar1_pde_base + } + /// Returns the usable FB region `(base, size)` for driver allocation which is /// already retrieved from the GSP. pub(crate) fn usable_fb_region(&self) -> Option<(u64, u64)> { diff --git a/drivers/gpu/nova-core/gsp/fw/commands.rs b/drivers/gpu/nova-core/gsp/fw/commands.rs index ff771a4aba4f..307f48670e6d 100644 --- a/drivers/gpu/nova-core/gsp/fw/commands.rs +++ b/drivers/gpu/nova-core/gsp/fw/commands.rs @@ -116,6 +116,14 @@ impl GspStaticConfigInfo { self.0.gpuNameString } + /// Returns the BAR1 Page Directory Entry base address. + /// + /// This is the root page table address for BAR1 virtual memory, + /// set up by GSP-RM firmware. + pub(crate) fn bar1_pde_base(&self) -> u64 { + self.0.bar1PdeBase + } + /// Extract the first usable FB region from GSP firmware data. /// /// Returns the first region suitable for driver memory allocation as a `(base, size)` tuple. -- 2.34.1
