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-24 01:15:57 +02:00
committed by Danilo Krummrich
parent c0ce158096
commit f6f0d2d461
4 changed files with 14 additions and 4 deletions
-1
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,
}
+1 -1
View File
@@ -89,7 +89,7 @@ impl super::Gsp {
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)?;
+13 -1
View File
@@ -34,6 +34,7 @@ use crate::{
},
},
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 @@ impl SetRegistry {
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 })
}
}
-1
View File
@@ -86,7 +86,6 @@ impl VgpuManager {
}
/// Returns the detected vGPU state for this boot.
#[expect(dead_code)]
pub(crate) fn state(&self) -> VgpuState {
self.state
}