[PATCH 13/13] gpu: nova-core: reserve the 48-VM WPR2 heap
flat view
COLD33d
From: Zhi Wang <zhiw@nvidia.com>
Date: 2026-09-05 08:13:47
Also in:
lkml
Subsystem:
core driver for nvidia gpus [rust], drm drivers, drm drivers and common infrastructure [rust], the rest · Maintainers:
Danilo Krummrich, Alexandre Courbot, David Airlie, Simona Vetter, Alice Ryhl, Linus Torvalds
GSP-RM needs the larger r000 vGPU WPR2 heap on devices that advertise more than 32 VFs. The default heap is too small for the 48-VF GB202 configuration and GSP-RM fails to start. Select the firmware-defined 48-VM size from the detected VF count while retaining the default size for configurations with 2 through 32 VFs. Signed-off-by: Zhi Wang <zhiw@nvidia.com> --- drivers/gpu/nova-core/fb.rs | 2 +- drivers/gpu/nova-core/gsp/fw.rs | 7 +++++-- drivers/gpu/nova-core/gsp/fw/r000_00/bindings.rs | 1 + 3 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/nova-core/fb.rs b/drivers/gpu/nova-core/fb.rs
index 4aaa46eb65fd..b82821f2a6b1 100644
--- a/drivers/gpu/nova-core/fb.rs
+++ b/drivers/gpu/nova-core/fb.rs@@ -306,7 +306,7 @@ fn wpr2_heap_params(chipset: Chipset, vgpu_state: VgpuState, fb_size: u64) -> Re ), VgpuState::Enabled { total_vfs } => ( u8::try_from(total_vfs.get()).map_err(|_| EINVAL)?, - gsp::LibosParams::vgpu_wpr_heap_size(), + gsp::LibosParams::vgpu_wpr_heap_size(total_vfs.get()), ), }) }
diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw.rs
index e6c0fac55bad..083066287dfd 100644
--- a/drivers/gpu/nova-core/gsp/fw.rs
+++ b/drivers/gpu/nova-core/gsp/fw.rs@@ -166,8 +166,11 @@ pub(crate) fn from_chipset(chipset: Chipset) -> &'static LibosParams { } /// Returns the WPR heap size to reserve when vGPU is enabled. - pub(crate) fn vgpu_wpr_heap_size() -> u64 { - u64::from(bindings::GSP_FW_HEAP_SIZE_VGPU_DEFAULT) + pub(crate) fn vgpu_wpr_heap_size(total_vfs: u16) -> u64 { + u64::from(match total_vfs { + 2..=32 => bindings::GSP_FW_HEAP_SIZE_VGPU_DEFAULT, + _ => r000_00::GSP_FW_HEAP_SIZE_VGPU_48VMS, + }) } /// Returns the amount of memory (in bytes) to allocate for the WPR heap for a framebuffer size
diff --git a/drivers/gpu/nova-core/gsp/fw/r000_00/bindings.rs b/drivers/gpu/nova-core/gsp/fw/r000_00/bindings.rs
index 01e84dfc4b88..83105b37f317 100644
--- a/drivers/gpu/nova-core/gsp/fw/r000_00/bindings.rs
+++ b/drivers/gpu/nova-core/gsp/fw/r000_00/bindings.rs@@ -85,6 +85,7 @@ impl<T> ::core::cmp::Eq for __BindgenUnionField<T> {} pub const GSP_FW_HEAP_PARAM_SIZE_PER_GB: u32 = 98304; pub const GSP_FW_HEAP_PARAM_CLIENT_ALLOC_SIZE: u32 = 100663296; pub const GSP_FW_HEAP_SIZE_VGPU_DEFAULT: u32 = 609222656; +pub const GSP_FW_HEAP_SIZE_VGPU_48VMS: u32 = 1436549120; pub const GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS2_MIN_MB: u32 = 64; pub const GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS2_MAX_MB: u32 = 256; pub const GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS3_BAREMETAL_MIN_MB: u32 = 88;
--
2.53.0