Add `total_fb_end()` to `GspStaticConfigInfo` that computes the exclusive end address of the highest valid FB region covering both usable and GSP-reserved areas.
This allows callers to know the full physical VRAM extent, not just the allocatable portion. Signed-off-by: Joel Fernandes <[email protected]> --- drivers/gpu/nova-core/gsp/commands.rs | 6 ++++++ drivers/gpu/nova-core/gsp/fw/commands.rs | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/gsp/commands.rs index 41742c1633c8..5e0649024637 100644 --- a/drivers/gpu/nova-core/gsp/commands.rs +++ b/drivers/gpu/nova-core/gsp/commands.rs @@ -196,6 +196,9 @@ pub(crate) struct GetGspStaticInfoReply { /// Usable FB (VRAM) region for driver memory allocation. #[expect(dead_code)] pub(crate) usable_fb_region: Range<u64>, + /// End of VRAM. + #[expect(dead_code)] + pub(crate) total_fb_end: u64, } impl MessageFromGsp for GetGspStaticInfoReply { @@ -209,9 +212,12 @@ fn read( ) -> Result<Self, Self::InitError> { let (base, size) = msg.first_usable_fb_region().ok_or(ENODEV)?; + let total_fb_end = msg.total_fb_end().ok_or(ENODEV)?; + Ok(GetGspStaticInfoReply { gpu_name: msg.gpu_name_str(), usable_fb_region: base..base.saturating_add(size), + total_fb_end, }) } } diff --git a/drivers/gpu/nova-core/gsp/fw/commands.rs b/drivers/gpu/nova-core/gsp/fw/commands.rs index 9fffa74d03f9..46932d5c8c1d 100644 --- a/drivers/gpu/nova-core/gsp/fw/commands.rs +++ b/drivers/gpu/nova-core/gsp/fw/commands.rs @@ -163,6 +163,13 @@ pub(crate) fn first_usable_fb_region(&self) -> Option<(u64, u64)> { } }) } + + /// Compute the end of physical VRAM from all FB regions. + pub(crate) fn total_fb_end(&self) -> Option<u64> { + self.fb_regions() + .map(|reg| reg.limit.saturating_add(1)) + .max() + } } // SAFETY: Padding is explicit and will not contain uninitialized data. -- 2.34.1
