From cc49f737637e7607e9608f4c4a7345e02b3e14f3 Mon Sep 17 00:00:00 2001 From: fraunak Date: Mon, 30 Sep 2024 15:53:46 -0700 Subject: [PATCH] nvidia-oot: add tracing support to identify isp This change adds the isp logging to identify which isp instance is being run in the rtcpu traces. Jira CT26X-1790 Change-Id: I87744fd15629bb9faa96f5970b5f5ecea4b59937 Signed-off-by: fraunak Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3221517 Reviewed-by: Semi Malinen GVS: buildbot_gerritrpt Reviewed-by: Frank Chen Reviewed-by: Chinniah Poosapadi --- .../platform/tegra/rtcpu/tegra-rtcpu-trace.c | 32 +++++++++--- include/trace/events/tegra_rtcpu.h | 50 +++++++++++-------- 2 files changed, 55 insertions(+), 27 deletions(-) diff --git a/drivers/platform/tegra/rtcpu/tegra-rtcpu-trace.c b/drivers/platform/tegra/rtcpu/tegra-rtcpu-trace.c index ca70bb91..4fc7b7ec 100644 --- a/drivers/platform/tegra/rtcpu/tegra-rtcpu-trace.c +++ b/drivers/platform/tegra/rtcpu/tegra-rtcpu-trace.c @@ -95,6 +95,7 @@ struct tegra_rtcpu_trace { struct platform_device *vi_platform_device; struct platform_device *vi1_platform_device; struct platform_device *isp_platform_device; + struct platform_device *isp1_platform_device; /* printk logging */ const char *log_prefix; @@ -822,11 +823,20 @@ static void rtcpu_trace_isp_task_event(struct tegra_rtcpu_trace *tracer, struct camrtc_event_struct *event) { struct nvhost_device_data *pdata = NULL; + struct platform_device *pdev = NULL; + u32 isp_unit_id = event->data.data32[4]; - if (tracer->isp_platform_device == NULL) + if (isp_unit_id == 0U) + pdev = tracer->isp_platform_device; + else if (isp_unit_id == 1U) + pdev = tracer->isp1_platform_device; + else + pdev = NULL; + + if (pdev == NULL) return; - pdata = platform_get_drvdata(tracer->isp_platform_device); + pdata = platform_get_drvdata(pdev); if (pdata == NULL) return; @@ -882,11 +892,12 @@ static void rtcpu_trace_isp_falcon_event(struct camrtc_event_struct *event) u8 ch = (u8) ((event->data.data32[0] & 0xFF00) >> 8U); u8 seq = (u8) ((event->data.data32[0] & 0xFF0000) >> 16U); u32 tstamp = event->data.data32[1]; + u32 isp_unit_id = event->data.data32[4]; switch (ispfalcon_tag) { case TRACE_ISP_FALCON_EVENT_TS: trace_rtcpu_isp_falcon_tile_start( - ch, seq, tstamp, + ch, seq, tstamp, isp_unit_id, (u8) (event->data.data32[3] & 0xFF), (u8) ((event->data.data32[3] & 0xFF00) >> 8U), (u16) (event->data.data32[2] & 0xFFFF), @@ -894,23 +905,23 @@ static void rtcpu_trace_isp_falcon_event(struct camrtc_event_struct *event) break; case TRACE_ISP_FALCON_EVENT_TE: trace_rtcpu_isp_falcon_tile_end( - ch, seq, tstamp, + ch, seq, tstamp, isp_unit_id, (u8) (event->data.data32[3] & 0xFF), (u8) ((event->data.data32[3] & 0xFF00) >> 8U)); break; case TRACE_ISP_FALCON_PROFILE_START: trace_rtcpu_isp_falcon_task_start( - ch, tstamp, + ch, tstamp, isp_unit_id, event->data.data32[2]); break; case TRACE_ISP_FALCON_PROFILE_END: trace_rtcpu_isp_falcon_task_end( - tstamp, + tstamp, isp_unit_id, event->data.data32[2]); break; default: trace_rtcpu_isp_falcon( - ispfalcon_tag, ch, seq, tstamp, + ispfalcon_tag, ch, seq, tstamp, isp_unit_id, event->data.data32[2], event->data.data32[3]); break; @@ -1430,6 +1441,13 @@ struct tegra_rtcpu_trace *tegra_rtcpu_trace_create(struct device *dev, tracer->isp_platform_device = NULL; } + tracer->isp1_platform_device = + camrtc_device_get_byname(camera_devices, "isp1"); + if (IS_ERR(tracer->isp1_platform_device)) { + dev_info(dev, "no camera-device \"%s\"\n", "isp1"); + tracer->isp1_platform_device = NULL; + } + tracer->vi_platform_device = camrtc_device_get_byname(camera_devices, "vi0"); if (IS_ERR(tracer->vi_platform_device)) { diff --git a/include/trace/events/tegra_rtcpu.h b/include/trace/events/tegra_rtcpu.h index f82046ac..28e6a8f1 100644 --- a/include/trace/events/tegra_rtcpu.h +++ b/include/trace/events/tegra_rtcpu.h @@ -433,13 +433,14 @@ TRACE_EVENT(rtcpu_nvcsi_intr, */ TRACE_EVENT(rtcpu_isp_falcon, - TP_PROTO(u8 tag, u8 ch, u8 seq, u32 tstamp, u32 data, u32 ext_data), - TP_ARGS(tag, ch, seq, tstamp, data, ext_data), + TP_PROTO(u8 tag, u8 ch, u8 seq, u32 tstamp, u32 isp_unit_id, u32 data, u32 ext_data), + TP_ARGS(tag, ch, seq, tstamp, isp_unit_id, data, ext_data), TP_STRUCT__entry( __field(u8, tag) __field(u8, ch) __field(u8, seq) __field(u32, tstamp) + __field(u32, isp_unit_id) __field(u32, data) __field(u32, ext_data) ), @@ -448,12 +449,13 @@ TRACE_EVENT(rtcpu_isp_falcon, __entry->ch = ch; __entry->seq = seq; __entry->tstamp = tstamp; + __entry->isp_unit_id = isp_unit_id; __entry->data = data; __entry->ext_data = ext_data; ), TP_printk( - "tag:0x%x tstamp:%u ch:%u seq:%u data:0x%08x ext_data:0x%08x", - __entry->tag, __entry->tstamp, __entry->ch, __entry->seq, + "tag:0x%x tstamp:%u ch:%u isp:%u seq:%u data:0x%08x ext_data:0x%08x", + __entry->tag, __entry->tstamp, __entry->ch, __entry->isp_unit_id, __entry->seq, __entry->data, __entry->ext_data ) ); @@ -462,21 +464,23 @@ extern const char * const g_trace_isp_falcon_task_strs[]; extern const unsigned int g_trace_isp_falcon_task_str_count; TRACE_EVENT(rtcpu_isp_falcon_task_start, - TP_PROTO(u8 ch, u32 tstamp, u32 task), - TP_ARGS(ch, tstamp, task), + TP_PROTO(u8 ch, u32 tstamp, u32 isp_unit_id, u32 task), + TP_ARGS(ch, tstamp, isp_unit_id, task), TP_STRUCT__entry( __field(u8, ch) __field(u32, tstamp) + __field(u32, isp_unit_id) __field(u32, task) ), TP_fast_assign( __entry->ch = ch; __entry->tstamp = tstamp; + __entry->isp_unit_id = isp_unit_id; __entry->task = task; ), TP_printk( - "tstamp:%u ch:%u task:%s", - __entry->tstamp, __entry->ch, + "tstamp:%u ch:%u isp:%u task:%s", + __entry->tstamp, __entry->ch, __entry->isp_unit_id, (__entry->task < g_trace_isp_falcon_task_str_count) ? g_trace_isp_falcon_task_strs[__entry->task] : "UNKNOWN" @@ -484,19 +488,21 @@ TRACE_EVENT(rtcpu_isp_falcon_task_start, ); TRACE_EVENT(rtcpu_isp_falcon_task_end, - TP_PROTO(u32 tstamp, u32 task), - TP_ARGS(tstamp, task), + TP_PROTO(u32 tstamp, u32 isp_unit_id, u32 task), + TP_ARGS(tstamp, isp_unit_id, task), TP_STRUCT__entry( __field(u32, tstamp) + __field(u32, isp_unit_id) __field(u32, task) ), TP_fast_assign( __entry->tstamp = tstamp; + __entry->isp_unit_id = isp_unit_id; __entry->task = task; ), TP_printk( - "tstamp:%u task:%s", - __entry->tstamp, + "tstamp:%u isp:%u task:%s", + __entry->tstamp, __entry->isp_unit_id, (__entry->task < g_trace_isp_falcon_task_str_count) ? g_trace_isp_falcon_task_strs[__entry->task] : "UNKNOWN" @@ -506,14 +512,15 @@ TRACE_EVENT(rtcpu_isp_falcon_task_end, TRACE_EVENT(rtcpu_isp_falcon_tile_start, TP_PROTO( - u8 ch, u8 seq, u32 tstamp, + u8 ch, u8 seq, u32 tstamp, u32 isp_unit_id, u8 tile_x, u8 tile_y, u16 tile_w, u16 tile_h), - TP_ARGS(ch, seq, tstamp, tile_x, tile_y, tile_w, tile_h), + TP_ARGS(ch, seq, tstamp, isp_unit_id, tile_x, tile_y, tile_w, tile_h), TP_STRUCT__entry( __field(u8, ch) __field(u8, seq) __field(u32, tstamp) + __field(u32, isp_unit_id) __field(u8, tile_x) __field(u8, tile_y) __field(u16, tile_w) @@ -524,26 +531,28 @@ TRACE_EVENT(rtcpu_isp_falcon_tile_start, __entry->ch = ch; __entry->seq = seq; __entry->tstamp = tstamp; + __entry->isp_unit_id = isp_unit_id; __entry->tile_x = tile_x; __entry->tile_y = tile_y; __entry->tile_w = tile_w; __entry->tile_h = tile_h; ), TP_printk( - "tstamp:%u ch:%u seq:%u tile_x:%u tile_y:%u tile_w:%u tile_h:%u", - __entry->tstamp, __entry->ch, __entry->seq, + "tstamp:%u ch:%u isp:%u seq:%u tile_x:%u tile_y:%u tile_w:%u tile_h:%u", + __entry->tstamp, __entry->ch, __entry->isp_unit_id, __entry->seq, __entry->tile_x, __entry->tile_y, __entry->tile_w, __entry->tile_h ) ); TRACE_EVENT(rtcpu_isp_falcon_tile_end, - TP_PROTO(u8 ch, u8 seq, u32 tstamp, u8 tile_x, u8 tile_y), - TP_ARGS(ch, seq, tstamp, tile_x, tile_y), + TP_PROTO(u8 ch, u8 seq, u32 tstamp, u32 isp_unit_id, u8 tile_x, u8 tile_y), + TP_ARGS(ch, seq, tstamp, isp_unit_id, tile_x, tile_y), TP_STRUCT__entry( __field(u8, ch) __field(u8, seq) __field(u32, tstamp) + __field(u32, isp_unit_id) __field(u8, tile_x) __field(u8, tile_y) @@ -552,12 +561,13 @@ TRACE_EVENT(rtcpu_isp_falcon_tile_end, __entry->ch = ch; __entry->seq = seq; __entry->tstamp = tstamp; + __entry->isp_unit_id = isp_unit_id; __entry->tile_x = tile_x; __entry->tile_y = tile_y; ), TP_printk( - "tstamp:%u ch:%u seq:%u tile_x:%u tile_y:%u", - __entry->tstamp, __entry->ch, __entry->seq, + "tstamp:%u ch:%u isp:%u seq:%u tile_x:%u tile_y:%u", + __entry->tstamp, __entry->ch, __entry->isp_unit_id, __entry->seq, __entry->tile_x, __entry->tile_y ) );