mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-28 16:54:57 -04:00
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:
committed by
Danilo Krummrich
parent
c0ce158096
commit
f6f0d2d461
@@ -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,
|
||||
}
|
||||
|
||||
|
||||
@@ -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)?;
|
||||
|
||||
|
||||
@@ -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 })
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user