/* SPDX-License-Identifier: GPL-2.0-only */
/* Copyright (c) 2014-2018, The Linux Foundation. All rights reserved.
*/
#if !defined(_DPU_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
#define _DPU_TRACE_H_
#include <linux/stringify.h>
#include <linux/types.h>
#include <linux/tracepoint.h>
#include <drm/drm_rect.h>
#include "dpu_crtc.h"
#include "dpu_encoder_phys.h"
#include "dpu_hw_mdss.h"
#include "dpu_hw_vbif.h"
#include "dpu_plane.h"
#undef TRACE_SYSTEM
#define TRACE_SYSTEM dpu
#undef TRACE_INCLUDE_FILE
#define TRACE_INCLUDE_FILE dpu_trace
TRACE_EVENT(dpu_perf_set_qos_luts,
TP_PROTO(u32 pnum, u32 fmt, bool rt, u32 fl,
u32 lut, u32 lut_usage),
TP_ARGS(pnum, fmt, rt, fl, lut, lut_usage),
TP_STRUCT__entry(
__field(u32, pnum)
__field(u32, fmt)
__field(bool, rt)
__field(u32, fl)
__field(u64, lut)
__field(u32, lut_usage)
),
TP_fast_assign(
__entry->pnum = pnum;
__entry->fmt = fmt;
__entry->rt = rt;
__entry->fl = fl;
__entry->lut = lut;
__entry->lut_usage = lut_usage;
),
TP_printk("pnum=%d fmt=%x rt=%d fl=%d lut=0x%llx lut_usage=%d",
__entry->pnum, __entry->fmt,
__entry->rt, __entry->fl,
__entry->lut, __entry->lut_usage)
);
TRACE_EVENT(dpu_perf_set_danger_luts,
TP_PROTO(u32 pnum, u32 fmt, u32 mode, u32 danger_lut,
u32 safe_lut),
TP_ARGS(pnum, fmt, mode, danger_lut, safe_lut),
TP_STRUCT__entry(
__field(u32, pnum)
__field(u32, fmt)
__field(u32, mode)
__field(u32, danger_lut)
__field(u32, safe_lut)
),
TP_fast_assign(
__entry->pnum = pnum;
__entry->fmt = fmt;
__entry->mode = mode;
__entry->danger_lut = danger_lut;
__entry->safe_lut = safe_lut;
),
TP_printk("pnum=%d fmt=%x mode=%d luts[0x%x, 0x%x]",
__entry->pnum, __entry->fmt,
__entry->mode, __entry->danger_lut,
__entry->safe_lut)
);
TRACE_EVENT(dpu_perf_set_ot,
TP_PROTO(u32 pnum, u32 xin_id, u32 rd_lim, u32 vbif_idx),
TP_ARGS(pnum, xin_id, rd_lim, vbif_idx),
TP_STRUCT__entry(
__field(u32, pnum)
__field(u32, xin_id)
__field(u32, rd_lim)
__field(u32, vbif_idx)
),
TP_fast_assign(
__entry->pnum = pnum;
__entry->xin_id = xin_id;
__entry->rd_lim = rd_lim;
__entry->vbif_idx = vbif_idx;
),
TP_printk("pnum:%d xin_id:%d ot:%d vbif:%d",
__entry->pnum, __entry->xin_id, __entry->rd_lim,
__entry->vbif_idx)
)
TRACE_EVENT(dpu_cmd_release_bw,
TP_PROTO(u32 crtc_id),
TP_ARGS(crtc_id),
TP_STRUCT__entry(
__field(u32, crtc_id)
),
TP_fast_assign(
__entry->crtc_id = crtc_id;
),
TP_printk("crtc:%d", __entry->crtc_id)
);
TRACE_EVENT(tracing_mark_write,
TP_PROTO(int pid, const char *name, bool trace_begin),
TP_ARGS(pid, name, trace_begin),
TP_STRUCT__entry(
__field(int, pid)
__string(trace_name, name)
__field(bool, trace_begin)
),
TP_fast_assign(
__entry->pid = pid;
__assign_str(trace_name);
__entry->trace_begin = trace_begin;
),
TP_printk("%s|%d|%s", __entry->trace_begin ? "B" : "E",
__entry->pid, __get_str(trace_name))
)
TRACE_EVENT(dpu_trace_counter,
TP_PROTO(int pid, char *name, int value),
TP_ARGS(pid, name, value),
TP_STRUCT__entry(
__field(int, pid)
__string(counter_name, name)
__field(int, value)
),
TP_fast_assign(
__entry->pid = current->tgid;
__assign_str(counter_name);
__entry->value = value;
),
TP_printk("%d|%s|%d", __entry->pid,
__get_str(counter_name), __entry->value)
)
TRACE_EVENT(dpu_perf_crtc_update,
TP_PROTO(u32 crtc, u64 bw_ctl, u32 core_clk_rate,
bool stop_req, bool update_bus, bool update_clk),
TP_ARGS(crtc, bw_ctl, core_clk_rate, stop_req, update_bus, update_clk),
TP_STRUCT__entry(
__field(u32, crtc)
__field(u64, bw_ctl)
__field(u32, core_clk_rate)
__field(bool, stop_req)
__field(u32, update_bus)
__field(u32, update_clk)
),
TP_fast_assign(
__entry->crtc = crtc;
__entry->bw_ctl = bw_ctl;
__entry->core_clk_rate = core_clk_rate;
__entry->stop_req = stop_req;
__entry->update_bus = update_bus;
__entry->update_clk = update_clk;
),
TP_printk(
"crtc=%d bw_ctl=%llu clk_rate=%u stop_req=%d u_bus=%d u_clk=%d",
__entry->crtc,
__entry->bw_ctl,
__entry->core_clk_rate,
__entry->stop_req,
__entry->update_bus,
__entry->update_clk)
);
DECLARE_EVENT_CLASS(dpu_irq_template,
TP_PROTO(unsigned int irq_reg, unsigned int irq_bit),
TP_ARGS