[RFC v2 03/10] gpu: nova-core: return FSP response buffer to caller
From: Zhi Wang
Date: Fri Mar 13 2026 - 12:56:47 EST
Change send_sync_fsp() to return the raw response buffer after
validating the common MCTP/NVDM headers and error code. This allows
callers to perform protocol-specific parsing on the response payload,
which is needed for the upcoming PRC protocol support.
For the existing COT caller, the response buffer is unused.
Signed-off-by: Zhi Wang <zhiw@xxxxxxxxxx>
---
drivers/gpu/nova-core/fsp.rs | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/nova-core/fsp.rs b/drivers/gpu/nova-core/fsp.rs
index 477ed719b757..69e48b655879 100644
--- a/drivers/gpu/nova-core/fsp.rs
+++ b/drivers/gpu/nova-core/fsp.rs
@@ -454,12 +454,13 @@ pub(crate) fn boot_fmc(
}
/// Send message to FSP and wait for response.
+ /// Returns the raw response buffer for protocol-specific parsing.
fn send_sync_fsp<M>(
dev: &device::Device<device::Bound>,
bar: &crate::driver::Bar0,
fsp_falcon: &crate::falcon::Falcon<crate::falcon::fsp::Fsp>,
msg: &M,
- ) -> Result
+ ) -> Result<KVec<u8>>
where
M: MessageToFsp,
{
@@ -482,12 +483,13 @@ fn send_sync_fsp<M>(
response_buf.resize(packet_size, 0, GFP_KERNEL)?;
fsp_falcon.recv_msg(bar, &mut response_buf, packet_size)?;
- if response_buf.len() < core::mem::size_of::<FspResponse>() {
+ let min_size = core::mem::size_of::<FspResponse>();
+ if response_buf.len() < min_size {
dev_err!(dev, "FSP response too small: {}\n", response_buf.len());
return Err(EIO);
}
- let response = FspResponse::from_bytes(&response_buf[..]).ok_or(EIO)?;
+ let response = FspResponse::from_bytes(&response_buf[..min_size]).ok_or(EIO)?;
let mctp_header: MctpHeader = response.header.mctp_header.into();
let nvdm_header: NvdmHeader = response.header.nvdm_header.into();
@@ -532,6 +534,6 @@ fn send_sync_fsp<M>(
return Err(EIO);
}
- Ok(())
+ Ok(response_buf)
}
}
--
2.51.0