[PATCH 1/3] gpu: nova-core: fsp: wait to consume message before sending another

From: Eliot Courtney

Date: Thu Apr 09 2026 - 10:20:49 EST


FSP can only get one message at a time, so make sure it has consumed the
previous one before trying to give it another.

Signed-off-by: Eliot Courtney <ecourtney@xxxxxxxxxx>
---
drivers/gpu/nova-core/falcon/fsp.rs | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/nova-core/falcon/fsp.rs b/drivers/gpu/nova-core/falcon/fsp.rs
index f618a681ff28..1497f163806e 100644
--- a/drivers/gpu/nova-core/falcon/fsp.rs
+++ b/drivers/gpu/nova-core/falcon/fsp.rs
@@ -7,12 +7,14 @@

use kernel::{
io::{
+ poll::read_poll_timeout,
register::WithBase,
Io,
IoCapable, //
},
num::Bounded,
- prelude::*, //
+ prelude::*,
+ time::Delta, //
};

use kernel::io::register::RegisterBase;
@@ -186,6 +188,18 @@ pub(crate) fn send_msg(&self, bar: &Bar0, packet: &[u8]) -> Result {
return Err(EINVAL);
}

+ // Wait for FSP to consume any previous message before sending.
+ read_poll_timeout(
+ || {
+ let head = bar.read(regs::NV_PFSP_QUEUE_HEAD).address().get();
+ let tail = bar.read(regs::NV_PFSP_QUEUE_TAIL).address().get();
+ Ok(head == tail)
+ },
+ |&ready| ready,
+ Delta::from_millis(1),
+ Delta::from_secs(2),
+ )?;
+
// Write message to EMEM at offset 0 (validates 4-byte alignment)
self.write_emem(bar, 0, packet)?;


--
2.53.0