[PATCH 2/3] gpu: nova-core: trace driver probe and firmware messages

Zhi Wang <[email protected]>
Newsgroups dev.linux.lists.nova-gpu,org.kernel.vger.linux-kernel
Message-ID <31b82553743082add89f2e4434b82c6a291cac71.1785907106.git.zhiw@nvidia.com>
Use independently selectable trace streams for driver, GSP and FSP
activity. Replace the probe and GSP dev_dbg() calls with formatted
traces, and add FSP NVDM send and receive traces with the message type
and length.

Signed-off-by: Zhi Wang <[email protected]>
---
 drivers/gpu/nova-core/driver.rs   |  7 +++++--
 drivers/gpu/nova-core/fsp.rs      | 16 +++++++++++++++-
 drivers/gpu/nova-core/gsp/cmdq.rs | 11 ++++++-----
 drivers/gpu/nova-core/trace.rs    |  9 ---------
 4 files changed, 26 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/nova-core/driver.rs b/drivers/gpu/nova-core/driver.rs
index 5738d4ac521b..cb92ce9a594e 100644
--- a/drivers/gpu/nova-core/driver.rs
+++ b/drivers/gpu/nova-core/driver.rs
@@ -18,7 +18,10 @@
     types::ForLt,
 };
 
-use crate::gpu::Gpu;
+use crate::{
+    gpu::Gpu,
+    trace::nova_core_trace_driver, //
+};
 
 /// Counter for generating unique auxiliary device IDs.
 static AUXILIARY_ID_COUNTER: Atomic<u32> = Atomic::new(0);
@@ -73,7 +76,7 @@ fn probe<'bound>(
         _info: &'bound Self::IdInfo,
     ) -> impl PinInit<Self::Data<'bound>, Error> + 'bound {
         pin_init::pin_init_scope(move || {
-            dev_dbg!(pdev, "Probe Nova Core GPU driver.\n");
+            nova_core_trace_driver!(pdev, "Probe Nova Core GPU driver.");
 
             pdev.enable_device_mem()?;
             pdev.set_master();
diff --git a/drivers/gpu/nova-core/fsp.rs b/drivers/gpu/nova-core/fsp.rs
index ba4544210e40..9dc919de2200 100644
--- a/drivers/gpu/nova-core/fsp.rs
+++ b/drivers/gpu/nova-core/fsp.rs
@@ -51,7 +51,8 @@
         NvdmType, //
     },
     num,
-    regs, //
+    regs,
+    trace::nova_core_trace_fsp, //
 };
 
 mod hal;
@@ -434,6 +435,12 @@ fn send_sync_fsp<M>(&mut self, dev: &device::Device, msg: &M) -> Result<KVec<u8>
     where
         M: MessageToFsp,
     {
+        nova_core_trace_fsp!(
+            dev,
+            "FSP NVDM: send: type={:?}, length=0x{:x}",
+            M::NVDM_TYPE,
+            msg.as_bytes().len(),
+        );
         self.falcon.send_msg(msg.as_bytes())?;
 
         let response_buf = self.falcon.recv_msg().inspect_err(|e| {
@@ -489,6 +496,13 @@ fn send_sync_fsp<M>(&mut self, dev: &device::Device, msg: &M) -> Result<KVec<u8>
             return Err(EIO);
         }
 
+        nova_core_trace_fsp!(
+            dev,
+            "FSP NVDM: receive: type={:?}, length=0x{:x}",
+            M::NVDM_TYPE,
+            response_buf.len(),
+        );
+
         Ok(response_buf)
     }
 
diff --git a/drivers/gpu/nova-core/gsp/cmdq.rs b/drivers/gpu/nova-core/gsp/cmdq.rs
index cd844fe48f05..6137c60b6231 100644
--- a/drivers/gpu/nova-core/gsp/cmdq.rs
+++ b/drivers/gpu/nova-core/gsp/cmdq.rs
@@ -58,7 +58,8 @@
         GSP_PAGE_SIZE, //
     },
     num,
-    sbuffer::SBufferIter, //
+    sbuffer::SBufferIter,
+    trace::nova_core_trace_gsp, //
 };
 
 use super::regs;
@@ -675,9 +676,9 @@ fn send_single_command<M>(&mut self, bar: Bar0<'_>, command: M) -> Result
                 dst.contents.1,
             ])));
 
-        dev_dbg!(
+        nova_core_trace_gsp!(
             &self.dev,
-            "GSP RPC: send: seq# {}, function={:?}, length=0x{:x}\n",
+            "GSP RPC: send: seq# {}, function={:?}, length=0x{:x}",
             self.seq,
             M::FUNCTION,
             dst.header.length(),
@@ -754,9 +755,9 @@ fn wait_for_msg(&self, timeout: Delta) -> Result<GspMessage<'_>> {
         // Extract the `GspMsgElement`.
         let (header, slice_1) = GspMsgElement::from_bytes_prefix(slice_1).ok_or(EIO)?;
 
-        dev_dbg!(
+        nova_core_trace_gsp!(
             &self.dev,
-            "GSP RPC: receive: seq# {}, function={:?}, length=0x{:x}\n",
+            "GSP RPC: receive: seq# {}, function={:?}, length=0x{:x}",
             header.sequence(),
             header.function(),
             header.length(),
diff --git a/drivers/gpu/nova-core/trace.rs b/drivers/gpu/nova-core/trace.rs
index 893479b3fcb5..db975804f855 100644
--- a/drivers/gpu/nova-core/trace.rs
+++ b/drivers/gpu/nova-core/trace.rs
@@ -55,7 +55,6 @@ pub(crate) unsafe fn $event(
 ///
 /// `trace` must synchronously consume `dev`, `message`, and `message_len`
 /// according to the `nova_core_trace_class` event prototype.
-#[expect(dead_code)]
 pub(crate) unsafe fn nova_core_trace_fmt(
     dev: &CStr,
     args: fmt::Arguments<'_>,
@@ -81,7 +80,6 @@ pub(crate) unsafe fn nova_core_trace_fmt(
     }
 }
 
-#[expect(unused_macros)]
 macro_rules! nova_core_trace_impl {
     ($event:ident, $dev:expr, $($arg:tt)*) => {{
         #[cfg(CONFIG_TRACEPOINTS)]
@@ -121,24 +119,20 @@ macro_rules! nova_core_trace_impl {
 
 // Frontend macros expand in their caller's module and invoke this helper by
 // path, so the re-export must be visible from the parent module.
-#[expect(unused_imports)]
 pub(super) use nova_core_trace_impl;
 
-#[expect(unused_macros)]
 macro_rules! nova_core_trace_driver {
     ($dev:expr, $($arg:tt)*) => {
         $crate::trace::nova_core_trace_impl!(nova_core_trace_driver, $dev, $($arg)*)
     };
 }
 
-#[expect(unused_macros)]
 macro_rules! nova_core_trace_fsp {
     ($dev:expr, $($arg:tt)*) => {
         $crate::trace::nova_core_trace_impl!(nova_core_trace_fsp, $dev, $($arg)*)
     };
 }
 
-#[expect(unused_macros)]
 macro_rules! nova_core_trace_gsp {
     ($dev:expr, $($arg:tt)*) => {
         $crate::trace::nova_core_trace_impl!(nova_core_trace_gsp, $dev, $($arg)*)
@@ -152,11 +146,8 @@ macro_rules! nova_core_trace_vgpu {
     };
 }
 
-#[expect(unused_imports)]
 pub(crate) use nova_core_trace_driver;
-#[expect(unused_imports)]
 pub(crate) use nova_core_trace_fsp;
-#[expect(unused_imports)]
 pub(crate) use nova_core_trace_gsp;
 #[expect(unused_imports)]
 pub(crate) use nova_core_trace_vgpu;
-- 
2.53.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.