On Wed Apr 1, 2026 at 6:20 AM JST, Joel Fernandes wrote: > 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))
I think it would be better to used checked_add here. > + .max() > + } > } > > // SAFETY: Padding is explicit and will not contain uninitialized data.
