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 <fraunak@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3221517
Reviewed-by: Semi Malinen <smalinen@nvidia.com>
GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com>
Reviewed-by: Frank Chen <frankc@nvidia.com>
Reviewed-by: Chinniah Poosapadi <cpoosapadi@nvidia.com>
This commit is contained in:
fraunak
2024-09-30 15:53:46 -07:00
committed by Jon Hunter
parent d21ee3b3a8
commit cc49f73763
2 changed files with 55 additions and 27 deletions

View File

@@ -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)) {

View File

@@ -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
)
);