gpu: nova-core: set RMSetSriovMode for vGPU

The GSP registry setup needs to advertise SR-IOV mode when nova-core boots
GSP for an enabled vGPU configuration. Without the registry entry, GSP-RM
is not told to initialize in the mode required by NVIDIA vGPU.

Append RMSetSriovMode to the SetRegistry command when the vGPU state
detected before GSP boot is enabled. Keep the existing registry entries
unchanged for non-vGPU boots.

Cc: Alexandre Courbot <acourbot@nvidia.com>
Signed-off-by: Zhi Wang <zhiw@nvidia.com>
Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>
Link: https://patch.msgid.link/20260722073913.1807677-6-zhiw@nvidia.com
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
This commit is contained in:
Zhi Wang
2026-07-22 10:39:12 +03:00
committed by Danilo Krummrich
parent c0ce158096
commit f6f0d2d461
4 changed files with 14 additions and 4 deletions

View File

@@ -68,7 +68,6 @@ pub(crate) struct GspBootContext<'ctx, 'gpu> {
pub(crate) gsp_falcon: &'ctx Falcon<'gpu, GspFalcon>,
pub(crate) sec2_falcon: &'ctx Falcon<'gpu, Sec2Falcon>,
pub(crate) fsp: Option<&'ctx mut Fsp<'gpu>>,
#[expect(dead_code)]
pub(crate) vgpu: &'ctx VgpuManager,
}

View File

@@ -89,7 +89,7 @@ pub(crate) fn boot(
self.cmdq
.send_command_no_wait(bar, commands::SetSystemInfo::new(pdev, chipset))?;
self.cmdq
.send_command_no_wait(bar, commands::SetRegistry::new()?)?;
.send_command_no_wait(bar, commands::SetRegistry::new(ctx.vgpu.state())?)?;
hal.post_boot(&self, ctx, &gsp_fw)?;

View File

@@ -34,6 +34,7 @@
},
},
sbuffer::SBufferIter,
vgpu::VgpuState, //
};
/// The `GspSetSystemInfo` command.
@@ -72,7 +73,7 @@ pub(crate) struct SetRegistry {
impl SetRegistry {
/// Creates a new `SetRegistry` command, using a set of hardcoded entries.
pub(crate) fn new() -> Result<Self> {
pub(crate) fn new(vgpu_state: VgpuState) -> Result<Self> {
let mut entries = KVec::new();
// RMSecBusResetEnable - enables PCI secondary bus reset
@@ -104,6 +105,17 @@ pub(crate) fn new() -> Result<Self> {
GFP_KERNEL,
)?;
if matches!(vgpu_state, VgpuState::Enabled { .. }) {
// RMSetSriovMode - required when vGPU is enabled.
entries.push(
RegistryEntry {
key: "RMSetSriovMode",
value: 1,
},
GFP_KERNEL,
)?;
}
Ok(Self { entries })
}
}

View File

@@ -86,7 +86,6 @@ fn detect_state(
}
/// Returns the detected vGPU state for this boot.
#[expect(dead_code)]
pub(crate) fn state(&self) -> VgpuState {
self.state
}