/* * include/trace/events/display.h * * Display event logging to ftrace. * * Copyright (c) 2012-2017, NVIDIA CORPORATION, All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #undef TRACE_SYSTEM #define TRACE_SYSTEM display #if !defined(_TRACE_DISPLAY_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_DISPLAY_H #include "../../../drivers/video/tegra/dc/dc_priv_defs.h" #include "../../../drivers/video/tegra/dc/dc_common.h" #include DECLARE_EVENT_CLASS(display_basic_template, TP_PROTO(struct tegra_dc *dc), TP_ARGS(dc), TP_STRUCT__entry( __field( bool, enabled) __field( u8, dev_id) __field( int, bw_rate) __field( int, new_bw_rate) __field( int, underflows_a) __field( int, underflows_b) __field( int, underflows_c) ), TP_fast_assign( __entry->enabled = dc->enabled; __entry->dev_id = dc->ndev->id; __entry->bw_rate = dc->bw_kbps; __entry->new_bw_rate = dc->new_bw_kbps; __entry->underflows_a = dc->stats.underflows_a; __entry->underflows_b = dc->stats.underflows_b; __entry->underflows_c = dc->stats.underflows_c; ), TP_printk("dc%u enabled=%d bw_rate=%d new_bw_rate=%d underflows=%d/%d/%d", __entry->dev_id, __entry->enabled, __entry->bw_rate, __entry->new_bw_rate, __entry->underflows_a, __entry->underflows_b, __entry->underflows_c) ); DEFINE_EVENT(display_basic_template, display_enable, TP_PROTO(struct tegra_dc *dc), TP_ARGS(dc) ); DEFINE_EVENT(display_basic_template, display_disable, TP_PROTO(struct tegra_dc *dc), TP_ARGS(dc) ); DEFINE_EVENT(display_basic_template, display_suspend, TP_PROTO(struct tegra_dc *dc), TP_ARGS(dc) ); DEFINE_EVENT(display_basic_template, display_resume, TP_PROTO(struct tegra_dc *dc), TP_ARGS(dc) ); DEFINE_EVENT(display_basic_template, display_reset, TP_PROTO(struct tegra_dc *dc), TP_ARGS(dc) ); DEFINE_EVENT(display_basic_template, update_windows, TP_PROTO(struct tegra_dc *dc), TP_ARGS(dc) ); DEFINE_EVENT(display_basic_template, sync_windows, TP_PROTO(struct tegra_dc *dc), TP_ARGS(dc) ); DEFINE_EVENT(display_basic_template, clear_bandwidth, TP_PROTO(struct tegra_dc *dc), TP_ARGS(dc) ); DEFINE_EVENT(display_basic_template, program_bandwidth, TP_PROTO(struct tegra_dc *dc), TP_ARGS(dc) ); DEFINE_EVENT(display_basic_template, set_dynamic_emc, TP_PROTO(struct tegra_dc *dc), TP_ARGS(dc) ); DEFINE_EVENT(display_basic_template, underflow, TP_PROTO(struct tegra_dc *dc), TP_ARGS(dc) ); TRACE_EVENT(display_syncpt_flush, TP_PROTO(struct tegra_dc *dc, u32 id, u32 min, u32 max), TP_ARGS(dc, id, min, max), TP_STRUCT__entry( __field( bool, enabled) __field( u8, dev_id) __field( u32, syncpt_id) __field( u32, syncpt_min) __field( u32, syncpt_max) ), TP_fast_assign( __entry->enabled = dc->enabled; __entry->dev_id = dc->ndev->id; __entry->syncpt_id = id; __entry->syncpt_min = min; __entry->syncpt_max = max; ), TP_printk("dc%u enabled=%d syncpt: id=%x min=%x max=%x", __entry->dev_id, __entry->enabled, __entry->syncpt_id, __entry->syncpt_min, __entry->syncpt_max) ); DECLARE_EVENT_CLASS(display_io_template, TP_PROTO(struct tegra_dc *dc, unsigned long val, const void *reg), TP_ARGS(dc, val, reg), TP_STRUCT__entry( __field( bool, enabled) __field( u8, dev_id) __field( const void *, reg) __field( u32, val) ), TP_fast_assign( __entry->enabled = dc->enabled; __entry->dev_id = dc->ndev->id; __entry->reg = reg; __entry->val = val; ), TP_printk("dc%u enabled=%d reg=%p val=0x%08x", __entry->dev_id, __entry->enabled, __entry->reg, __entry->val) ); DEFINE_EVENT(display_io_template, display_writel, TP_PROTO(struct tegra_dc *dc, unsigned long val, const void *reg), TP_ARGS(dc, val, reg) ); DEFINE_EVENT(display_io_template, display_readl, TP_PROTO(struct tegra_dc *dc, unsigned long val, const void *reg), TP_ARGS(dc, val, reg) ); TRACE_EVENT(display_mode, TP_PROTO(struct tegra_dc *dc, struct tegra_dc_mode *mode), TP_ARGS(dc, mode), TP_STRUCT__entry( __field( bool, enabled) __field( u8, dev_id) __field( unsigned long, pclk) __field( unsigned short, h_active) __field( unsigned short, v_active) __field( unsigned short, h_front_porch) __field( unsigned short, v_front_porch) __field( unsigned short, h_back_porch) __field( unsigned short, v_back_porch) __field( unsigned short, h_ref_to_sync) __field( unsigned short, v_ref_to_sync) __field( unsigned short, h_sync_width) __field( unsigned short, v_sync_width) __field( bool, stereo_mode) ), TP_fast_assign( __entry->enabled = dc->enabled; __entry->dev_id = dc->ndev->id; __entry->pclk = mode->pclk; __entry->stereo_mode = mode->stereo_mode; __entry->h_active = mode->h_active; __entry->v_active = mode->v_active; __entry->h_front_porch = mode->h_front_porch; __entry->v_front_porch = mode->v_front_porch; __entry->h_back_porch = mode->h_back_porch; __entry->v_back_porch = mode->v_back_porch; __entry->h_sync_width = mode->h_sync_width; __entry->v_sync_width = mode->v_sync_width; __entry->h_ref_to_sync = mode->h_ref_to_sync; __entry->v_ref_to_sync = mode->v_ref_to_sync; ), TP_printk("dc%u enabled=%d " "ref_to_sync: H=%d V=%d " "sync_width: H=%d V=%d " "back_porch: H=%d V=%d " "active: H=%d V=%d " "front_porch: H=%d V=%d " "pclk=%ld stereo mode=%d\n", __entry->dev_id, __entry->enabled, __entry->h_ref_to_sync, __entry->v_ref_to_sync, __entry->h_sync_width, __entry->v_sync_width, __entry->h_back_porch, __entry->v_back_porch, __entry->h_active, __entry->v_active, __entry->h_front_porch, __entry->v_front_porch, __entry->pclk, __entry->stereo_mode ) ); TRACE_EVENT(window_update, TP_PROTO(struct tegra_dc *dc, struct tegra_dc_win *win), TP_ARGS(dc, win), TP_STRUCT__entry( __field( bool, enabled) __field( u8, dev_id) __field( u32, win_fmt) __field( unsigned short, win_x) __field( unsigned short, win_y) __field( unsigned short, win_w) __field( unsigned short, win_h) __field( unsigned short, win_out_x) __field( unsigned short, win_out_y) __field( unsigned short, win_out_w) __field( unsigned short, win_out_h) ), TP_fast_assign( __entry->enabled = dc->enabled; __entry->dev_id = dc->ndev->id; __entry->win_fmt = win->fmt; __entry->win_x = dfixed_trunc(win->x); __entry->win_y = dfixed_trunc(win->y); __entry->win_w = dfixed_trunc(win->w); __entry->win_h = dfixed_trunc(win->h); __entry->win_out_x = win->out_x; __entry->win_out_y = win->out_y; __entry->win_out_w = win->out_w; __entry->win_out_h = win->out_h; ), TP_printk("dc%u enabled=%d fmt=%#x in=[x:%u y:%u w:%u h:%u] " "out=[x:%u y:%u w:%u h:%u] ", __entry->dev_id, __entry->enabled, __entry->win_fmt, __entry->win_x, __entry->win_y, __entry->win_w, __entry->win_h, __entry->win_out_x, __entry->win_out_y, __entry->win_out_w, __entry->win_out_h ) ); typedef void (*display_syncpt_notifier)(unsigned int, unsigned int, unsigned int, unsigned int, unsigned long long); DECLARE_EVENT_CLASS(display_syncpt_notifier, TP_PROTO(unsigned int ctrl_num, unsigned int win_num, unsigned int syncpt_val, unsigned int buf_handle, unsigned long long timestamp), TP_ARGS(ctrl_num, win_num, syncpt_val, buf_handle, timestamp), TP_STRUCT__entry( __field(u32, ctrl_num) __field(u32, win_num) __field(u32, syncpt_val_value) __field(u32, buf_handle) __field(u64, timestamp) ), TP_fast_assign( __entry->ctrl_num = ctrl_num; __entry->win_num = win_num; __entry->syncpt_val_value = syncpt_val; __entry->buf_handle = buf_handle; __entry->timestamp = timestamp; ), TP_printk("Flip: ctrl_num=%u win_num=%u" " syncpt=%u buf_handle=%u timestamp=%lld", __entry->ctrl_num, __entry->win_num, __entry->syncpt_val_value, __entry->buf_handle, __entry->timestamp) ); DEFINE_EVENT(display_syncpt_notifier, flip_rcvd_syncpt_upd, TP_PROTO(unsigned int ctrl_num, unsigned int win_num, unsigned int syncpt_val, unsigned int buf_handle, unsigned long long timestamp), TP_ARGS(ctrl_num, win_num, syncpt_val, buf_handle, timestamp) ); DEFINE_EVENT(display_syncpt_notifier, sync_wt_ovr_syncpt_upd, TP_PROTO(unsigned int ctrl_num, unsigned int win_num, unsigned int syncpt_val, unsigned int buf_handle, unsigned long long timestamp), TP_ARGS(ctrl_num, win_num, syncpt_val, buf_handle, timestamp) ); DEFINE_EVENT(display_syncpt_notifier, scanout_syncpt_upd, TP_PROTO(unsigned int ctrl_num, unsigned int win_num, unsigned int syncpt_val, unsigned int buf_handle, unsigned long long timestamp), TP_ARGS(ctrl_num, win_num, syncpt_val, buf_handle, timestamp) ); TRACE_EVENT(scanout_vrr_stats, TP_PROTO(unsigned int syncpt_val, int db_val), TP_ARGS(syncpt_val, db_val), TP_STRUCT__entry( __field( u32, syncpt_val_value) __field( int, db_val_value) ), TP_fast_assign( __entry->syncpt_val_value = syncpt_val; __entry->db_val_value = db_val; ), TP_printk("Sync Point Value for Dbalance Measurement:%u,Db_value:%d", __entry->syncpt_val_value,__entry->db_val_value) ); TRACE_EVENT(dc_flip_dropped, TP_PROTO(bool dc_enabled, bool flip_skipped), TP_ARGS(dc_enabled, flip_skipped), TP_STRUCT__entry( __field(const char*, dc_disabled_value) __field(const char*, flip_skipped_value) ), TP_fast_assign( __entry->dc_disabled_value = dc_enabled ? "false" : "true"; __entry->flip_skipped_value = flip_skipped ? "true" : "false"; ), TP_printk("dc disabled:%s, flip skipped:%s", __entry->dc_disabled_value, __entry->flip_skipped_value) ); TRACE_EVENT(hdr_data_update, TP_PROTO(struct tegra_dc *dc, struct tegra_dc_hdr *hdr), TP_ARGS(dc, hdr), TP_STRUCT__entry( __field( bool, hdr_enabled_dc) __field( bool, hdr_enabled_flip) __field( u32, eotf) __field( u32, static_metadata_id) __array( u8, static_metadata, 24) ), TP_fast_assign( __entry->hdr_enabled_dc = dc->hdr.enabled; __entry->hdr_enabled_flip = hdr->enabled; __entry->eotf = hdr->eotf; __entry->static_metadata_id = hdr->static_metadata_id; memcpy(__entry->static_metadata, hdr->static_metadata, 24); ), TP_printk("hdr enabled in dc=%d hdr enabled rcvd in flip=%d" " eotf=%d static_metadata_id=%d green_pri_x_lsb=%u" " green_pri_x_msb=%u green_pri_y_lsb=%u green_pri_y_msb=%u" " blue_pri_x_lsb=%u blue_pri_x_msb=%u blue_pri_y_lsb=%u" " blue_pri_y_msb=%u red_pri_x_lsb=%u red_pri_x_msb=%u" " red_pri_y_lsb=%u red_pri_y_msb=%u white_pri_x_lsb=%u" " white_pri_x_msb=%u" "white_pri_y_lsb=%u" "white_pri_y_msb=%u" " max_lum_lsb=%u max_lum_msb=%u min_lum_lsb=%u" " min_lum_msb=%umax_con_light_level_lsb=%u" " max_con_light_level_msb=%u max_frm_avg_light_level_lsb=%u" " max_frm_avg_light_level_msb=%u", __entry->hdr_enabled_dc, __entry->hdr_enabled_flip, __entry->eotf, __entry->static_metadata_id, __entry->static_metadata[0], __entry->static_metadata[1], __entry->static_metadata[2], __entry->static_metadata[3], __entry->static_metadata[4], __entry->static_metadata[5], __entry->static_metadata[6], __entry->static_metadata[7], __entry->static_metadata[8], __entry->static_metadata[9], __entry->static_metadata[10], __entry->static_metadata[11], __entry->static_metadata[12], __entry->static_metadata[13], __entry->static_metadata[14], __entry->static_metadata[15], __entry->static_metadata[16], __entry->static_metadata[17], __entry->static_metadata[18], __entry->static_metadata[19], __entry->static_metadata[20], __entry->static_metadata[21], __entry->static_metadata[22], __entry->static_metadata[23] ) ); /* Do not use this with a traceName that will be deleted! (only use with the macros below) */ TRACE_EVENT(function_frame, TP_PROTO(const char *trace_name, char trace_prefix), TP_ARGS(trace_name, trace_prefix), TP_STRUCT__entry( __field(const char*, name) __field(char, prefix) ), TP_fast_assign( __entry->name = trace_name; __entry->prefix = trace_prefix; ), TP_printk("%c|%s\n", __entry->prefix, __entry->name) ); TRACE_EVENT(display_vblank, TP_PROTO(u32 ctrl_num, u16 vblank_count), TP_ARGS(ctrl_num, vblank_count), TP_STRUCT__entry( __field(u32, ctrl_num) __field(u16, vblank_count) ), TP_fast_assign( __entry->ctrl_num = ctrl_num; __entry->vblank_count = vblank_count; ), TP_printk("ctrl_num=%u vblank_count=%u", __entry->ctrl_num, __entry->vblank_count) ); TRACE_EVENT(display_scanline, TP_PROTO(u32 ctrl_num, u16 line_num, u16 frame_num, s64 timestamp), TP_ARGS(ctrl_num, line_num, frame_num, timestamp), TP_STRUCT__entry( __field(u32, ctrl_num) __field(u16, line_num) __field(u16, frame_num) __field(u64, timestamp) ), TP_fast_assign( __entry->ctrl_num = ctrl_num; __entry->line_num = line_num; __entry->frame_num = frame_num; __entry->timestamp = timestamp; ), TP_printk("ctrl_num=%u line_num=%u frame_num=%u timestamp=%lld", __entry->ctrl_num, __entry->line_num, __entry->frame_num, __entry->timestamp) ); DECLARE_EVENT_CLASS(display_dc_common_events_notifier, TP_PROTO(struct tegra_dc_common *dc_cmmn, struct bit_mapped_data *data, int head_no), TP_ARGS(dc_cmmn, data, head_no), TP_STRUCT__entry( __field(ulong, flags) __field(ulong, valid_heads) __field(ulong, fr_lck_req_rcvd) __field(ulong, fl_lck_req_rcvd) __field(ulong, fl_lck_req_completed) __field(ulong, gen_act_read_result) __field(bool, heads_locked) __field(int, head_no) ), TP_fast_assign( __entry->flags = dc_cmmn->flags; __entry->valid_heads = dc_cmmn->valid_heads; __entry->fr_lck_req_rcvd = data->fr_lck_req_rcvd; __entry->fl_lck_req_rcvd = data->fl_lck_req_rcvd; __entry->fl_lck_req_completed = data->fl_lck_req_completed; __entry->gen_act_read_result = data->gen_act_read_result; __entry->heads_locked = dc_cmmn->heads_locked; __entry->head_no = head_no; ), TP_printk("flags = %lu, valid_heads = %lu, fr_lck_req_rcvd = %lu, " "fl_lck_req_rcvd = %lu, fl_lck_req_completed = %lu, " "gen_act_read_result = %lu, heads_locked = %d, head = %d", __entry->flags, __entry->valid_heads, __entry->fr_lck_req_rcvd, __entry->fl_lck_req_rcvd, __entry->fl_lck_req_completed, __entry->gen_act_read_result, __entry->heads_locked, __entry->head_no) ); DEFINE_EVENT(display_dc_common_events_notifier, received_fl_lock_request, TP_PROTO(struct tegra_dc_common *dc_cmmn, struct bit_mapped_data *data, int head_no), TP_ARGS(dc_cmmn, data, head_no) ); DEFINE_EVENT(display_dc_common_events_notifier, received_fr_lock_request, TP_PROTO(struct tegra_dc_common *dc_cmmn, struct bit_mapped_data *data, int head_no), TP_ARGS(dc_cmmn, data, head_no) ); DEFINE_EVENT(display_dc_common_events_notifier, received_err_check_request, TP_PROTO(struct tegra_dc_common *dc_cmmn, struct bit_mapped_data *data, int head_no), TP_ARGS(dc_cmmn, data, head_no) ); DEFINE_EVENT(display_dc_common_events_notifier, completed_fr_lock_request, TP_PROTO(struct tegra_dc_common *dc_cmmn, struct bit_mapped_data *data, int head_no), TP_ARGS(dc_cmmn, data, head_no) ); DEFINE_EVENT(display_dc_common_events_notifier, completed_fl_lock_request, TP_PROTO(struct tegra_dc_common *dc_cmmn, struct bit_mapped_data *data, int head_no), TP_ARGS(dc_cmmn, data, head_no) ); DEFINE_EVENT(display_dc_common_events_notifier, completed_err_check_request, TP_PROTO(struct tegra_dc_common *dc_cmmn, struct bit_mapped_data *data, int head_no), TP_ARGS(dc_cmmn, data, head_no) ); DEFINE_EVENT(display_dc_common_events_notifier, host1x_job_allocated, TP_PROTO(struct tegra_dc_common *dc_cmmn, struct bit_mapped_data *data, int head_no), TP_ARGS(dc_cmmn, data, head_no) ); DEFINE_EVENT(display_dc_common_events_notifier, host1x_job_submitted, TP_PROTO(struct tegra_dc_common *dc_cmmn, struct bit_mapped_data *data, int head_no), TP_ARGS(dc_cmmn, data, head_no) ); DEFINE_EVENT(display_dc_common_events_notifier, host1x_job_executed, TP_PROTO(struct tegra_dc_common *dc_cmmn, struct bit_mapped_data *data, int head_no), TP_ARGS(dc_cmmn, data, head_no) ); DECLARE_EVENT_CLASS(display_imp_request_id, TP_PROTO(int ctrl_num, u64 session_id), TP_ARGS(ctrl_num, session_id), TP_STRUCT__entry( __field(int, ctrl_num) __field(u64, session_id) ), TP_fast_assign( __entry->ctrl_num = ctrl_num; __entry->session_id = session_id; ), TP_printk("DC ctrl_num=%d IMP session id=%llu", __entry->ctrl_num, __entry->session_id ) ); DEFINE_EVENT(display_imp_request_id, display_imp_propose_queued, TP_PROTO(int ctrl_num, u64 session_id), TP_ARGS(ctrl_num, session_id) ); DEFINE_EVENT(display_imp_request_id, display_imp_flip_queued, TP_PROTO(int ctrl_num, u64 session_id), TP_ARGS(ctrl_num, session_id) ); DEFINE_EVENT(display_imp_request_id, display_imp_flip_started, TP_PROTO(int ctrl_num, u64 session_id), TP_ARGS(ctrl_num, session_id) ); DEFINE_EVENT(display_imp_request_id, display_imp_flip_completed, TP_PROTO(int ctrl_num, u64 session_id), TP_ARGS(ctrl_num, session_id) ); DECLARE_EVENT_CLASS(display_imp_bw_settings, TP_PROTO(int ctrl_num, u64 total_disp_bw, u64 total_disp_bw_no_catchup, u64 emc_floor, u64 minimum_hubclk), TP_ARGS(ctrl_num, total_disp_bw, total_disp_bw_no_catchup, emc_floor, minimum_hubclk), TP_STRUCT__entry( __field(int, ctrl_num) __field(u64, total_disp_bw) __field(u64, total_disp_bw_no_catchup) __field(u64, emc_floor) __field(u64, minimum_hubclk) ), TP_fast_assign( __entry->ctrl_num = ctrl_num; __entry->total_disp_bw = total_disp_bw; __entry->total_disp_bw_no_catchup = total_disp_bw_no_catchup; __entry->emc_floor = emc_floor; __entry->minimum_hubclk = minimum_hubclk ), TP_printk("DC ctrl_num=%d IMP bw settings=" "[total disp ISO bw=%llu KBps, %llu KBps (no catchup) " "emc floor=%llu Hz minimum hubclk=%llu Hz]", __entry->ctrl_num, __entry->total_disp_bw, __entry->total_disp_bw_no_catchup, __entry->emc_floor, __entry->minimum_hubclk ) ); DEFINE_EVENT(display_imp_bw_settings, display_imp_bw_reserved, TP_PROTO(int ctrl_num, u64 total_disp_bw, u64 total_disp_bw_no_catchup, u64 emc_floor, u64 minimum_hubclk), TP_ARGS(ctrl_num, total_disp_bw, total_disp_bw_no_catchup, emc_floor, minimum_hubclk) ); DEFINE_EVENT(display_imp_bw_settings, display_imp_bw_programmed, TP_PROTO(int ctrl_num, u64 total_disp_bw, u64 total_disp_bw_no_catchup, u64 emc_floor, u64 minimum_hubclk), TP_ARGS(ctrl_num, total_disp_bw, total_disp_bw_no_catchup, emc_floor, minimum_hubclk) ); DECLARE_EVENT_CLASS(display_imp_global_settings, TP_PROTO(int ctrl_num, u32 total_cursor_fetch_meter, u32 total_win_fetch_meter), TP_ARGS(ctrl_num, total_cursor_fetch_meter, total_win_fetch_meter), TP_STRUCT__entry( __field(int, ctrl_num) __field(u32, total_cursor_fetch_meter) __field(u32, total_win_fetch_meter) ), TP_fast_assign( __entry->ctrl_num = ctrl_num; __entry->total_cursor_fetch_meter = total_cursor_fetch_meter; __entry->total_win_fetch_meter = total_win_fetch_meter; ), TP_printk("DC ctrl_num=%d Total cursor fetch meter=0x%x " "Total win fetch meter=0x%x", __entry->ctrl_num, __entry->total_cursor_fetch_meter, __entry->total_win_fetch_meter ) ); DEFINE_EVENT(display_imp_global_settings, display_imp_program_global, TP_PROTO(int ctrl_num, u32 total_cursor_fetch_meter, u32 total_win_fetch_meter), TP_ARGS(ctrl_num, total_cursor_fetch_meter, total_win_fetch_meter) ); DECLARE_EVENT_CLASS(display_imp_cursor_settings, TP_PROTO(int ctrl_num, u32 fetch_meter, u32 pipe_meter, u32 mempool_entries, u32 dvfs_watermark), TP_ARGS(ctrl_num, fetch_meter, pipe_meter, mempool_entries, dvfs_watermark), TP_STRUCT__entry( __field(int, ctrl_num) __field(u32, fetch_meter) __field(u32, pipe_meter) __field(u32, mempool_entries) __field(u32, dvfs_watermark) ), TP_fast_assign( __entry->ctrl_num = ctrl_num; __entry->fetch_meter = fetch_meter; __entry->pipe_meter = pipe_meter; __entry->mempool_entries = mempool_entries; __entry->dvfs_watermark = dvfs_watermark; ), TP_printk("DC ctrl_num=%d cursor IMP settings=" "[fetch meter=0x%x pipe_meter=0x%x mempool_entries=0x%x " "dvfs_watermark=0x%x]", __entry->ctrl_num, __entry->fetch_meter, __entry->pipe_meter, __entry->mempool_entries, __entry->dvfs_watermark ) ); DEFINE_EVENT(display_imp_cursor_settings, display_imp_program_cursor, TP_PROTO(int ctrl_num, u32 fetch_meter, u32 pipe_meter, u32 mempool_entries, u32 dvfs_watermark), TP_ARGS(ctrl_num, fetch_meter, pipe_meter, mempool_entries, dvfs_watermark) ); DECLARE_EVENT_CLASS(display_imp_win_settings, TP_PROTO(int ctrl_num, int win_num, u32 fetch_meter, u32 pipe_meter, u32 mempool_entries, u32 dvfs_watermark, int thread_group), TP_ARGS(ctrl_num, win_num, fetch_meter, pipe_meter, mempool_entries, dvfs_watermark, thread_group), TP_STRUCT__entry( __field(int, ctrl_num) __field(int, win_num) __field(u32, fetch_meter) __field(u32, pipe_meter) __field(u32, mempool_entries) __field(u32, dvfs_watermark) __field(int, thread_group) ), TP_fast_assign( __entry->ctrl_num = ctrl_num; __entry->win_num = win_num; __entry->fetch_meter = fetch_meter; __entry->pipe_meter = pipe_meter; __entry->mempool_entries = mempool_entries; __entry->dvfs_watermark = dvfs_watermark; __entry->thread_group = thread_group ), TP_printk("DC ctrl_num=%d win_num=%d win IMP settings=" "[fetch meter=0x%x pipe_meter=0x%x mempool_entries=0x%x " "dvfs_watermark=0x%x thread_group=%d]", __entry->ctrl_num, __entry->win_num, __entry->fetch_meter, __entry->pipe_meter, __entry->mempool_entries, __entry->dvfs_watermark, __entry->thread_group ) ); DEFINE_EVENT(display_imp_win_settings, display_imp_program_win, TP_PROTO(int ctrl_num, int win_num, u32 fetch_meter, u32 pipe_meter, u32 mempool_entries, u32 dvfs_watermark, int thread_group), TP_ARGS(ctrl_num, win_num, fetch_meter, pipe_meter, mempool_entries, dvfs_watermark, thread_group) ); DECLARE_EVENT_CLASS(display_imp_cursor_mempool, TP_PROTO(int ctrl_num, u32 mempool_entries), TP_ARGS(ctrl_num, mempool_entries), TP_STRUCT__entry( __field(int, ctrl_num) __field(u32, mempool_entries) ), TP_fast_assign( __entry->ctrl_num = ctrl_num; __entry->mempool_entries = mempool_entries; ), TP_printk("DC ctrl_num=%d Cursor mempool=0x%x", __entry->ctrl_num, __entry->mempool_entries ) ); DEFINE_EVENT(display_imp_cursor_mempool, display_imp_cursor_mempool_programmed, TP_PROTO(int ctrl_num, u32 mempool_entries), TP_ARGS(ctrl_num, mempool_entries) ); DECLARE_EVENT_CLASS(display_imp_win_mempool, TP_PROTO(int ctrl_num, int win_num, u32 mempool_entries), TP_ARGS(ctrl_num, win_num, mempool_entries), TP_STRUCT__entry( __field(int, ctrl_num) __field(int, win_num) __field(u32, mempool_entries) ), TP_fast_assign( __entry->ctrl_num = ctrl_num; __entry->win_num = win_num; __entry->mempool_entries = mempool_entries ), TP_printk("DC ctrl_num=%d win_num=%d mempool=0x%x", __entry->ctrl_num, __entry->win_num, __entry->mempool_entries ) ); DEFINE_EVENT(display_imp_win_mempool, display_imp_win_mempool_programmed, TP_PROTO(int ctrl_num, int win_num, u32 mempool_entries), TP_ARGS(ctrl_num, win_num, mempool_entries) ); TRACE_EVENT(display_embedded_latency, TP_PROTO(u32 ctrl_num, u16 line_num, u64 timestamp), TP_ARGS(ctrl_num, line_num, timestamp), TP_STRUCT__entry( __field(u32, ctrl_num) __field(u16, line_num) __field(u64, timestamp) ), TP_fast_assign( __entry->ctrl_num = ctrl_num; __entry->line_num = line_num; __entry->timestamp = timestamp; ), TP_printk("ctrl_num=%u line_num=%u timestamp=%lld", __entry->ctrl_num, __entry->line_num, __entry->timestamp) ); DECLARE_EVENT_CLASS(display_crc_regs, TP_PROTO(int ctrl_num, u32 frame_cnt, char *type, u32 crca, u32 crcb), TP_ARGS(ctrl_num, frame_cnt, type, crca, crcb), TP_STRUCT__entry( __field(int, ctrl_num) __field(u32, frame_cnt) __field(char *, type) __field(u32, crca) __field(u32, crcb) ), TP_fast_assign( __entry->ctrl_num = ctrl_num; __entry->frame_cnt = frame_cnt; __entry->type = type; __entry->crca = crca; __entry->crcb = crcb; ), TP_printk("DC%d frame_cnt=%u read %s status=%#x CRCB=%u", __entry->ctrl_num, __entry->frame_cnt, __entry->type, __entry->crca, __entry->crcb ) ); DEFINE_EVENT(display_crc_regs, display_crc_read, TP_PROTO(int ctrl_num, u32 frame_cnt, char *type, u32 crca, u32 crcb), TP_ARGS(ctrl_num, frame_cnt, type, crca, crcb) ); DECLARE_EVENT_CLASS(display_crc_rgnl, TP_PROTO(int ctrl_num, u32 frame_cnt, char *type, u32 id, u32 status, u32 crc), TP_ARGS(ctrl_num, frame_cnt, type, id, status, crc), TP_STRUCT__entry( __field(int, ctrl_num) __field(u32, frame_cnt) __field(char *, type) __field(u32, id) __field(u32, status) __field(u32, crc) ), TP_fast_assign( __entry->ctrl_num = ctrl_num; __entry->frame_cnt = frame_cnt; __entry->type = type; __entry->id = id; __entry->status = status; __entry->crc = crc; ), TP_printk("DC%d frame_cnt=%u read %s%u status=%#x CRC=%u", __entry->ctrl_num, __entry->frame_cnt, __entry->type, __entry->id, __entry->status, __entry->crc ) ); DEFINE_EVENT(display_crc_rgnl, display_crc_rgnl, TP_PROTO(int ctrl_num, u32 frame_cnt, char *type, u32 id, u32 status, u32 crcb), TP_ARGS(ctrl_num, frame_cnt, type, id, status, crcb) ); DECLARE_EVENT_CLASS(display_crc_late, TP_PROTO(int ctrl_num, u32 frame_cnt, char *type, bool valid, u32 crc), TP_ARGS(ctrl_num, frame_cnt, type, valid, crc), TP_STRUCT__entry( __field(int, ctrl_num) __field(u32, frame_cnt) __field(char *, type) __field(bool, valid) __field(u32, crc) ), TP_fast_assign( __entry->ctrl_num = ctrl_num; __entry->frame_cnt = frame_cnt; __entry->type = type; __entry->valid = valid; __entry->crc = crc; ), TP_printk("DC%d frame_cnt=%u %s CRC valid=%s %u", __entry->ctrl_num, __entry->frame_cnt, __entry->type, __entry->valid ? "1:keep":"0:clr", __entry->crc ) ); DEFINE_EVENT(display_crc_late, display_crc_late, TP_PROTO(int ctrl_num, u32 frame_cnt, char *type, bool valid, u32 crc), TP_ARGS(ctrl_num, frame_cnt, type, valid, crc) ); DECLARE_EVENT_CLASS(display_crc_rgnl_stat, TP_PROTO(int ctrl_num, u32 frame_cnt, char *type, u32 id, u32 status), TP_ARGS(ctrl_num, frame_cnt, type, id, status), TP_STRUCT__entry( __field(int, ctrl_num) __field(u32, frame_cnt) __field(char *, type) __field(u32, id) __field(u32, status) ), TP_fast_assign( __entry->ctrl_num = ctrl_num; __entry->frame_cnt = frame_cnt; __entry->type = type; __entry->id = id; __entry->status = status; ), TP_printk("DC%d frame_cnt=%u %s%u status=%#x", __entry->ctrl_num, __entry->frame_cnt, __entry->type, __entry->id, __entry->status ) ); DEFINE_EVENT(display_crc_rgnl_stat, display_crc_rgnl_stat, TP_PROTO(int ctrl_num, u32 frame_cnt, char *type, u32 id, u32 status), TP_ARGS(ctrl_num, frame_cnt, type, id, status) ); TRACE_EVENT(display_crc_boundary_crossed, TP_PROTO(int ctrl_num, u32 start_frame_cnt, u32 end_frame_cnt, char *desc), TP_ARGS(ctrl_num, start_frame_cnt, end_frame_cnt, desc), TP_STRUCT__entry( __field(u32, ctrl_num) __field(u32, start_frame_cnt) __field(u32, end_frame_cnt) __field(char *, desc) ), TP_fast_assign( __entry->ctrl_num = ctrl_num; __entry->start_frame_cnt = start_frame_cnt; __entry->end_frame_cnt = end_frame_cnt; __entry->desc = desc; ), TP_printk("DC%d start_frame=%u end_frame=%u %s", __entry->ctrl_num, __entry->start_frame_cnt, __entry->end_frame_cnt, __entry->desc ) ); #endif /* _TRACE_DISPLAY_H */ /* This part must be outside protection */ #include