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 <[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.
> 

Done, thanks.

--
Joel Fernandes

Reply via email to