Re: [PATCH v10 03/21] gpu: nova-core: gsp: Expose total physical VRAM end from FB region info

From: Joel Fernandes

Date: Mon Apr 06 2026 - 17:08:37 EST




On 4/2/2026 1:37 AM, Eliot Courtney wrote:
> 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 <joelagnelf@xxxxxxxxxx>
>> ---
>> 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.
>

Done, thanks.

--
Joel Fernandes