[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