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/gpu.rs | 11 ++++++++++- drivers/gpu/nova-core/gsp/commands.rs | 5 +++++ drivers/gpu/nova-core/gsp/fw/commands.rs | 7 +++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index 775cdb653830..d9d1a7417a2e 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -8,6 +8,7 @@ num::Bounded, pci, prelude::*, + sizes::SizeConstants, sync::Arc, // }; @@ -295,7 +296,15 @@ pub(crate) fn new<'a>( gsp <- Gsp::new(pdev), - gsp_static_info: { gsp.boot(pdev, bar, spec.chipset, gsp_falcon, sec2_falcon)? }, + gsp_static_info: gsp + .boot(pdev, bar, spec.chipset, gsp_falcon, sec2_falcon) + .inspect(|info| { + dev_info!( + pdev.as_ref(), + "Total physical VRAM: {} MiB\n", + info.total_fb_end / u64::SZ_1M + ); + })?, bar: devres_bar, }) diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/gsp/commands.rs index 049fff337611..172411d7b475 100644 --- a/drivers/gpu/nova-core/gsp/commands.rs +++ b/drivers/gpu/nova-core/gsp/commands.rs @@ -196,6 +196,8 @@ 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. + pub(crate) total_fb_end: u64, } impl MessageFromGsp for GetGspStaticInfoReply { @@ -207,9 +209,12 @@ fn read( msg: &Self::Message, _sbuffer: &mut SBufferIter<array::IntoIter<&[u8], 2>>, ) -> Result<Self, Self::InitError> { + let total_fb_end = msg.total_fb_end().ok_or(ENODEV)?; + Ok(GetGspStaticInfoReply { gpu_name: msg.gpu_name_str(), usable_fb_region: msg.usable_fb_regions_iter().next().ok_or(ENODEV)?, + total_fb_end, }) } } diff --git a/drivers/gpu/nova-core/gsp/fw/commands.rs b/drivers/gpu/nova-core/gsp/fw/commands.rs index 50b9c205566f..ea663079d95c 100644 --- a/drivers/gpu/nova-core/gsp/fw/commands.rs +++ b/drivers/gpu/nova-core/gsp/fw/commands.rs @@ -161,6 +161,13 @@ pub(crate) fn usable_fb_regions_iter(&self) -> impl Iterator<Item = Range<u64>> } }) } + + /// Compute the end of physical VRAM from all FB regions. + pub(crate) fn total_fb_end(&self) -> Option<u64> { + self.fb_regions() + .filter_map(|reg| reg.limit.checked_add(1)) + .max() + } } // SAFETY: Padding is explicit and will not contain uninitialized data. -- 2.34.1
