12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028 |
- /* SPDX-License-Identifier: GPL-2.0-only */
- /*
- * Copyright (c) 2013-2021, The Linux Foundation. All rights reserved.
- * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
- */
- #if !defined(_ADRENO_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
- #define _ADRENO_TRACE_H
- #undef TRACE_SYSTEM
- #define TRACE_SYSTEM kgsl
- #undef TRACE_INCLUDE_PATH
- #define TRACE_INCLUDE_PATH .
- #undef TRACE_INCLUDE_FILE
- #define TRACE_INCLUDE_FILE adreno_trace
- #include <linux/tracepoint.h>
- #include "adreno_a3xx.h"
- #include "adreno_a5xx.h"
- #include "adreno_gen7.h"
- #include "adreno_gen8.h"
- #include "adreno_hfi.h"
- #define ADRENO_FT_TYPES \
- { BIT(KGSL_FT_OFF), "off" }, \
- { BIT(KGSL_FT_REPLAY), "replay" }, \
- { BIT(KGSL_FT_SKIPIB), "skipib" }, \
- { BIT(KGSL_FT_SKIPFRAME), "skipframe" }, \
- { BIT(KGSL_FT_DISABLE), "disable" }, \
- { BIT(KGSL_FT_TEMP_DISABLE), "temp" }, \
- { BIT(KGSL_FT_THROTTLE), "throttle"}, \
- { BIT(KGSL_FT_SKIPCMD), "skipcmd" }
- TRACE_EVENT(adreno_cmdbatch_queued,
- TP_PROTO(struct kgsl_drawobj *drawobj, unsigned int queued),
- TP_ARGS(drawobj, queued),
- TP_STRUCT__entry(
- __field(unsigned int, id)
- __field(unsigned int, timestamp)
- __field(unsigned int, queued)
- __field(unsigned int, flags)
- __field(unsigned int, prio)
- ),
- TP_fast_assign(
- __entry->id = drawobj->context->id;
- __entry->timestamp = drawobj->timestamp;
- __entry->queued = queued;
- __entry->flags = drawobj->flags;
- __entry->prio = drawobj->context->priority;
- ),
- TP_printk(
- "ctx=%u ctx_prio=%u ts=%u queued=%u flags=%s",
- __entry->id, __entry->prio,
- __entry->timestamp, __entry->queued,
- __entry->flags ? __print_flags(__entry->flags, "|",
- KGSL_DRAWOBJ_FLAGS) : "none"
- )
- );
- TRACE_EVENT(adreno_hw_fence_query,
- TP_PROTO(u64 context, u64 seqno, u32 flags, const char *name, const char *val),
- TP_ARGS(context, seqno, flags, name, val),
- TP_STRUCT__entry(
- __field(u64, context)
- __field(u64, seqno)
- __field(u32, flags)
- __string(fence_name, name)
- __string(val, val)
- ),
- TP_fast_assign(
- __entry->context = context;
- __entry->seqno = seqno;
- __entry->flags = flags;
- __assign_str(fence_name, name);
- __assign_str(val, val);
- ),
- TP_printk(
- "id=%lld seqno=%lld sw_status=%s name=%s val=%s",
- __entry->context, __entry->seqno,
- __entry->flags ? __print_flags(__entry->flags, "|",
- { ADRENO_HW_FENCE_SW_STATUS_PENDING, "PENDING" },
- { ADRENO_HW_FENCE_SW_STATUS_SIGNALED, "SIGNALED" }) : "none",
- __get_str(fence_name),
- __get_str(val))
- );
- TRACE_EVENT(adreno_input_hw_fence,
- TP_PROTO(u32 id, u64 context, u64 seqno, u64 flags, const char *name),
- TP_ARGS(id, context, seqno, flags, name),
- TP_STRUCT__entry(
- __field(u32, id)
- __field(u64, context)
- __field(u64, seqno)
- __field(u64, flags)
- __string(fence_name, name)
- ),
- TP_fast_assign(
- __entry->id = id;
- __entry->context = context;
- __entry->seqno = seqno;
- __entry->flags = flags;
- __assign_str(fence_name, name);
- ),
- TP_printk(
- "ctx=%u id=%lld seqno=%lld flags=%s name=%s",
- __entry->id, __entry->context, __entry->seqno,
- __entry->flags ? __print_flags(__entry->flags, "|",
- GMU_SYNCOBJ_FLAGS) : "none",
- __get_str(fence_name))
- );
- TRACE_EVENT(adreno_syncobj_query_reply,
- TP_PROTO(u32 id, u32 timestamp, uint64_t ticks),
- TP_ARGS(id, timestamp, ticks),
- TP_STRUCT__entry(
- __field(u32, id)
- __field(u32, timestamp)
- __field(uint64_t, ticks)
- ),
- TP_fast_assign(
- __entry->id = id;
- __entry->timestamp = timestamp;
- __entry->ticks = ticks;
- ),
- TP_printk(
- "ctx=%u ts=%u ticks=%lld",
- __entry->id, __entry->timestamp, __entry->ticks)
- );
- TRACE_EVENT(adreno_syncobj_query,
- TP_PROTO(u32 id, u32 timestamp, uint64_t ticks),
- TP_ARGS(id, timestamp, ticks),
- TP_STRUCT__entry(
- __field(u32, id)
- __field(u32, timestamp)
- __field(uint64_t, ticks)
- ),
- TP_fast_assign(
- __entry->id = id;
- __entry->timestamp = timestamp;
- __entry->ticks = ticks;
- ),
- TP_printk(
- "ctx=%u ts=%u ticks=%lld",
- __entry->id, __entry->timestamp, __entry->ticks)
- );
- TRACE_EVENT(adreno_syncobj_submitted,
- TP_PROTO(u32 id, u32 timestamp, u32 num_syncobj,
- uint64_t ticks),
- TP_ARGS(id, timestamp, num_syncobj, ticks),
- TP_STRUCT__entry(
- __field(u32, id)
- __field(u32, timestamp)
- __field(u32, num_syncobj)
- __field(uint64_t, ticks)
- ),
- TP_fast_assign(
- __entry->id = id;
- __entry->timestamp = timestamp;
- __entry->num_syncobj = num_syncobj;
- __entry->ticks = ticks;
- ),
- TP_printk(
- "ctx=%u ts=%u num_sync=%u ticks=%lld",
- __entry->id, __entry->timestamp, __entry->num_syncobj, __entry->ticks)
- );
- TRACE_EVENT(adreno_syncobj_retired,
- TP_PROTO(u32 id, u32 timestamp),
- TP_ARGS(id, timestamp),
- TP_STRUCT__entry(
- __field(u32, id)
- __field(u32, timestamp)
- ),
- TP_fast_assign(
- __entry->id = id;
- __entry->timestamp = timestamp;
- ),
- TP_printk(
- "ctx=%u ts=%u", __entry->id, __entry->timestamp)
- );
- TRACE_EVENT(adreno_cmdbatch_submitted,
- TP_PROTO(struct kgsl_drawobj *drawobj, struct submission_info *info,
- uint64_t ticks, unsigned long secs, unsigned long usecs,
- int q_inflight),
- TP_ARGS(drawobj, info, ticks, secs, usecs, q_inflight),
- TP_STRUCT__entry(
- __field(unsigned int, id)
- __field(unsigned int, timestamp)
- __field(int, inflight)
- __field(unsigned int, flags)
- __field(uint64_t, ticks)
- __field(unsigned long, secs)
- __field(unsigned long, usecs)
- __field(int, prio)
- __field(int, rb_id)
- __field(unsigned int, rptr)
- __field(unsigned int, wptr)
- __field(int, q_inflight)
- __field(int, dispatch_queue)
- ),
- TP_fast_assign(
- __entry->id = drawobj->context->id;
- __entry->timestamp = drawobj->timestamp;
- __entry->inflight = info->inflight;
- __entry->flags = drawobj->flags;
- __entry->ticks = ticks;
- __entry->secs = secs;
- __entry->usecs = usecs;
- __entry->prio = drawobj->context->priority;
- __entry->rb_id = info->rb_id;
- __entry->rptr = info->rptr;
- __entry->wptr = info->wptr;
- __entry->q_inflight = q_inflight;
- __entry->dispatch_queue = info->gmu_dispatch_queue;
- ),
- TP_printk(
- "ctx=%u ctx_prio=%d ts=%u inflight=%d flags=%s ticks=%lld time=%lu.%0lu rb_id=%d r/w=%x/%x, q_inflight=%d dq_id=%d",
- __entry->id, __entry->prio, __entry->timestamp,
- __entry->inflight,
- __entry->flags ? __print_flags(__entry->flags, "|",
- KGSL_DRAWOBJ_FLAGS) : "none",
- __entry->ticks, __entry->secs, __entry->usecs,
- __entry->rb_id, __entry->rptr, __entry->wptr,
- __entry->q_inflight, __entry->dispatch_queue
- )
- );
- TRACE_EVENT(adreno_cmdbatch_retired,
- TP_PROTO(struct kgsl_context *context, struct retire_info *info,
- unsigned int flags, int q_inflight,
- unsigned long fault_recovery),
- TP_ARGS(context, info, flags, q_inflight, fault_recovery),
- TP_STRUCT__entry(
- __field(unsigned int, id)
- __field(unsigned int, timestamp)
- __field(int, inflight)
- __field(unsigned int, recovery)
- __field(unsigned int, flags)
- __field(uint64_t, start)
- __field(uint64_t, retire)
- __field(int, prio)
- __field(int, rb_id)
- __field(unsigned int, rptr)
- __field(unsigned int, wptr)
- __field(int, q_inflight)
- __field(unsigned long, fault_recovery)
- __field(unsigned int, dispatch_queue)
- __field(uint64_t, submitted_to_rb)
- __field(uint64_t, retired_on_gmu)
- __field(uint64_t, active)
- ),
- TP_fast_assign(
- __entry->id = context->id;
- __entry->timestamp = info->timestamp;
- __entry->inflight = info->inflight;
- __entry->recovery = fault_recovery;
- __entry->flags = flags;
- __entry->start = info->sop;
- __entry->retire = info->eop;
- __entry->prio = context->priority;
- __entry->rb_id = info->rb_id;
- __entry->rptr = info->rptr;
- __entry->wptr = info->wptr;
- __entry->q_inflight = q_inflight;
- __entry->dispatch_queue = info->gmu_dispatch_queue;
- __entry->submitted_to_rb = info->submitted_to_rb;
- __entry->retired_on_gmu = info->retired_on_gmu;
- __entry->active = info->active;
- ),
- TP_printk(
- "ctx=%u ctx_prio=%d ts=%u inflight=%d recovery=%s flags=%s start=%llu retire=%llu rb_id=%d, r/w=%x/%x, q_inflight=%d, dq_id=%u, submitted_to_rb=%llu retired_on_gmu=%llu active=%llu",
- __entry->id, __entry->prio, __entry->timestamp,
- __entry->inflight,
- __entry->recovery ?
- __print_flags(__entry->fault_recovery, "|",
- ADRENO_FT_TYPES) : "none",
- __entry->flags ? __print_flags(__entry->flags, "|",
- KGSL_DRAWOBJ_FLAGS) : "none",
- __entry->start,
- __entry->retire,
- __entry->rb_id, __entry->rptr, __entry->wptr,
- __entry->q_inflight,
- __entry->dispatch_queue,
- __entry->submitted_to_rb, __entry->retired_on_gmu,
- __entry->active
- )
- );
- TRACE_EVENT(gmu_ao_sync,
- TP_PROTO(u64 ticks),
- TP_ARGS(ticks),
- TP_STRUCT__entry(
- __field(u64, ticks)
- ),
- TP_fast_assign(
- __entry->ticks = ticks;
- ),
- TP_printk(
- "ticks=%llu", __entry->ticks
- )
- );
- TRACE_EVENT(gmu_event,
- TP_PROTO(u32 *event_info),
- TP_ARGS(event_info),
- TP_STRUCT__entry(
- __field(u32, event)
- __field(u32, ticks)
- __field(u32, data1)
- __field(u32, data2)
- ),
- TP_fast_assign(
- __entry->event = event_info[0];
- __entry->ticks = event_info[1];
- __entry->data1 = event_info[2];
- __entry->data2 = event_info[3];
- ),
- TP_printk(
- "event=%08u ticks=%08u data1=0x%08x data2=0x%08x",
- __entry->event, __entry->ticks, __entry->data1, __entry->data2
- )
- );
- TRACE_EVENT(adreno_cmdbatch_sync,
- TP_PROTO(unsigned int ctx_id, unsigned int ctx_prio,
- unsigned int timestamp, uint64_t ticks),
- TP_ARGS(ctx_id, ctx_prio, timestamp, ticks),
- TP_STRUCT__entry(
- __field(unsigned int, id)
- __field(unsigned int, timestamp)
- __field(uint64_t, ticks)
- __field(int, prio)
- ),
- TP_fast_assign(
- __entry->id = ctx_id;
- __entry->timestamp = timestamp;
- __entry->ticks = ticks;
- __entry->prio = ctx_prio;
- ),
- TP_printk(
- "ctx=%u ctx_prio=%d ts=%u ticks=%lld",
- __entry->id, __entry->prio, __entry->timestamp,
- __entry->ticks
- )
- );
- TRACE_EVENT(adreno_cmdbatch_ready,
- TP_PROTO(unsigned int ctx_id, unsigned int ctx_prio,
- unsigned int timestamp, unsigned int requeue_cnt),
- TP_ARGS(ctx_id, ctx_prio, timestamp, requeue_cnt),
- TP_STRUCT__entry(
- __field(unsigned int, id)
- __field(int, prio)
- __field(unsigned int, timestamp)
- __field(unsigned int, requeue_cnt)
- ),
- TP_fast_assign(
- __entry->id = ctx_id;
- __entry->prio = ctx_prio;
- __entry->timestamp = timestamp;
- __entry->requeue_cnt = requeue_cnt;
- ),
- TP_printk(
- "ctx=%u ctx_prio=%d ts=%u requeue_cnt=%u",
- __entry->id, __entry->prio, __entry->timestamp,
- __entry->requeue_cnt
- )
- );
- TRACE_EVENT(adreno_cmdbatch_done,
- TP_PROTO(unsigned int ctx_id, unsigned int ctx_prio,
- unsigned int timestamp),
- TP_ARGS(ctx_id, ctx_prio, timestamp),
- TP_STRUCT__entry(
- __field(unsigned int, id)
- __field(unsigned int, prio)
- __field(unsigned int, timestamp)
- ),
- TP_fast_assign(
- __entry->id = ctx_id;
- __entry->prio = ctx_prio;
- __entry->timestamp = timestamp;
- ),
- TP_printk(
- "ctx=%u ctx_prio=%u ts=%u",
- __entry->id, __entry->prio, __entry->timestamp
- )
- );
- TRACE_EVENT(adreno_cmdbatch_fault,
- TP_PROTO(struct kgsl_drawobj_cmd *cmdobj, unsigned int fault),
- TP_ARGS(cmdobj, fault),
- TP_STRUCT__entry(
- __field(unsigned int, id)
- __field(unsigned int, timestamp)
- __field(unsigned int, fault)
- ),
- TP_fast_assign(
- __entry->id = cmdobj->base.context->id;
- __entry->timestamp = cmdobj->base.timestamp;
- __entry->fault = fault;
- ),
- TP_printk(
- "ctx=%u ts=%u type=%s",
- __entry->id, __entry->timestamp,
- __print_symbolic(__entry->fault,
- { 0, "none" },
- { ADRENO_SOFT_FAULT, "soft" },
- { ADRENO_HARD_FAULT, "hard" },
- { ADRENO_TIMEOUT_FAULT, "timeout" })
- )
- );
- TRACE_EVENT(adreno_cmdbatch_recovery,
- TP_PROTO(struct kgsl_drawobj_cmd *cmdobj, unsigned int action),
- TP_ARGS(cmdobj, action),
- TP_STRUCT__entry(
- __field(unsigned int, id)
- __field(unsigned int, timestamp)
- __field(unsigned int, action)
- ),
- TP_fast_assign(
- __entry->id = cmdobj->base.context->id;
- __entry->timestamp = cmdobj->base.timestamp;
- __entry->action = action;
- ),
- TP_printk(
- "ctx=%u ts=%u action=%s",
- __entry->id, __entry->timestamp,
- __print_symbolic(__entry->action, ADRENO_FT_TYPES)
- )
- );
- DECLARE_EVENT_CLASS(adreno_drawctxt_template,
- TP_PROTO(struct adreno_context *drawctxt),
- TP_ARGS(drawctxt),
- TP_STRUCT__entry(
- __field(unsigned int, id)
- __field(unsigned int, priority)
- ),
- TP_fast_assign(
- __entry->id = drawctxt->base.id;
- __entry->priority = drawctxt->base.priority;
- ),
- TP_printk("ctx=%u priority=%u", __entry->id, __entry->priority)
- );
- DEFINE_EVENT(adreno_drawctxt_template, adreno_drawctxt_sleep,
- TP_PROTO(struct adreno_context *drawctxt),
- TP_ARGS(drawctxt)
- );
- DEFINE_EVENT(adreno_drawctxt_template, adreno_drawctxt_wake,
- TP_PROTO(struct adreno_context *drawctxt),
- TP_ARGS(drawctxt)
- );
- DEFINE_EVENT(adreno_drawctxt_template, dispatch_queue_context,
- TP_PROTO(struct adreno_context *drawctxt),
- TP_ARGS(drawctxt)
- );
- DEFINE_EVENT(adreno_drawctxt_template, adreno_drawctxt_invalidate,
- TP_PROTO(struct adreno_context *drawctxt),
- TP_ARGS(drawctxt)
- );
- TRACE_EVENT(adreno_drawctxt_wait_start,
- TP_PROTO(unsigned int rb_id, unsigned int ctx_id, unsigned int ts),
- TP_ARGS(rb_id, ctx_id, ts),
- TP_STRUCT__entry(
- __field(unsigned int, rb_id)
- __field(unsigned int, ctx_id)
- __field(unsigned int, ts)
- ),
- TP_fast_assign(
- __entry->rb_id = rb_id;
- __entry->ctx_id = ctx_id;
- __entry->ts = ts;
- ),
- TP_printk(
- "rb=%u ctx=%u ts=%u",
- __entry->rb_id, __entry->ctx_id, __entry->ts
- )
- );
- TRACE_EVENT(adreno_drawctxt_wait_done,
- TP_PROTO(unsigned int rb_id, unsigned int ctx_id,
- unsigned int ts, int status),
- TP_ARGS(rb_id, ctx_id, ts, status),
- TP_STRUCT__entry(
- __field(unsigned int, rb_id)
- __field(unsigned int, ctx_id)
- __field(unsigned int, ts)
- __field(int, status)
- ),
- TP_fast_assign(
- __entry->rb_id = rb_id;
- __entry->ctx_id = ctx_id;
- __entry->ts = ts;
- __entry->status = status;
- ),
- TP_printk(
- "rb=%u ctx=%u ts=%u status=%d",
- __entry->rb_id, __entry->ctx_id, __entry->ts, __entry->status
- )
- );
- TRACE_EVENT(adreno_drawctxt_switch,
- TP_PROTO(struct adreno_ringbuffer *rb,
- struct adreno_context *newctx),
- TP_ARGS(rb, newctx),
- TP_STRUCT__entry(
- __field(int, rb_level)
- __field(unsigned int, oldctx)
- __field(unsigned int, newctx)
- __field(unsigned int, flags)
- ),
- TP_fast_assign(
- __entry->rb_level = rb->id;
- __entry->oldctx = rb->drawctxt_active ?
- rb->drawctxt_active->base.id : 0;
- __entry->newctx = newctx ? newctx->base.id : 0;
- ),
- TP_printk(
- "rb level=%d oldctx=%u newctx=%u",
- __entry->rb_level, __entry->oldctx, __entry->newctx
- )
- );
- TRACE_EVENT(adreno_gpu_fault,
- TP_PROTO(unsigned int ctx, unsigned int ts,
- unsigned int status, unsigned int rptr, unsigned int wptr,
- u64 ib1base, unsigned int ib1size,
- u64 ib2base, unsigned int ib2size, int rb_id),
- TP_ARGS(ctx, ts, status, rptr, wptr, ib1base, ib1size, ib2base,
- ib2size, rb_id),
- TP_STRUCT__entry(
- __field(unsigned int, ctx)
- __field(unsigned int, ts)
- __field(unsigned int, status)
- __field(unsigned int, rptr)
- __field(unsigned int, wptr)
- __field(u64, ib1base)
- __field(unsigned int, ib1size)
- __field(u64, ib2base)
- __field(unsigned int, ib2size)
- __field(int, rb_id)
- ),
- TP_fast_assign(
- __entry->ctx = ctx;
- __entry->ts = ts;
- __entry->status = status;
- __entry->rptr = rptr;
- __entry->wptr = wptr;
- __entry->ib1base = ib1base;
- __entry->ib1size = ib1size;
- __entry->ib2base = ib2base;
- __entry->ib2size = ib2size;
- __entry->rb_id = rb_id;
- ),
- TP_printk(
- "ctx=%d ts=%d rb_id=%d status=%X RB=%X/%X IB1=%llX/%X IB2=%llX/%X",
- __entry->ctx, __entry->ts, __entry->rb_id, __entry->status,
- __entry->wptr, __entry->rptr, __entry->ib1base,
- __entry->ib1size, __entry->ib2base, __entry->ib2size)
- );
- TRACE_EVENT(adreno_sp_tp,
- TP_PROTO(unsigned long ip),
- TP_ARGS(ip),
- TP_STRUCT__entry(
- __field(unsigned long, ip)
- ),
- TP_fast_assign(
- __entry->ip = ip;
- ),
- TP_printk(
- "func=%pS", (void *) __entry->ip
- )
- );
- /*
- * Tracepoint for a3xx irq. Includes status info
- */
- TRACE_EVENT(kgsl_a3xx_irq_status,
- TP_PROTO(struct adreno_device *adreno_dev, unsigned int status),
- TP_ARGS(adreno_dev, status),
- TP_STRUCT__entry(
- __string(device_name, adreno_dev->dev.name)
- __field(unsigned int, status)
- ),
- TP_fast_assign(
- __assign_str(device_name, adreno_dev->dev.name);
- __entry->status = status;
- ),
- TP_printk(
- "d_name=%s status=%s",
- __get_str(device_name),
- __entry->status ? __print_flags(__entry->status, "|",
- { BIT(A3XX_INT_RBBM_GPU_IDLE), "RBBM_GPU_IDLE" },
- { BIT(A3XX_INT_RBBM_AHB_ERROR), "RBBM_AHB_ERR" },
- { BIT(A3XX_INT_RBBM_REG_TIMEOUT), "RBBM_REG_TIMEOUT" },
- { BIT(A3XX_INT_RBBM_ME_MS_TIMEOUT),
- "RBBM_ME_MS_TIMEOUT" },
- { BIT(A3XX_INT_RBBM_PFP_MS_TIMEOUT),
- "RBBM_PFP_MS_TIMEOUT" },
- { BIT(A3XX_INT_RBBM_ATB_BUS_OVERFLOW),
- "RBBM_ATB_BUS_OVERFLOW" },
- { BIT(A3XX_INT_VFD_ERROR), "RBBM_VFD_ERROR" },
- { BIT(A3XX_INT_CP_SW_INT), "CP_SW" },
- { BIT(A3XX_INT_CP_T0_PACKET_IN_IB),
- "CP_T0_PACKET_IN_IB" },
- { BIT(A3XX_INT_CP_OPCODE_ERROR), "CP_OPCODE_ERROR" },
- { BIT(A3XX_INT_CP_RESERVED_BIT_ERROR),
- "CP_RESERVED_BIT_ERROR" },
- { BIT(A3XX_INT_CP_HW_FAULT), "CP_HW_FAULT" },
- { BIT(A3XX_INT_CP_DMA), "CP_DMA" },
- { BIT(A3XX_INT_CP_IB2_INT), "CP_IB2_INT" },
- { BIT(A3XX_INT_CP_IB1_INT), "CP_IB1_INT" },
- { BIT(A3XX_INT_CP_RB_INT), "CP_RB_INT" },
- { BIT(A3XX_INT_CP_REG_PROTECT_FAULT),
- "CP_REG_PROTECT_FAULT" },
- { BIT(A3XX_INT_CP_RB_DONE_TS), "CP_RB_DONE_TS" },
- { BIT(A3XX_INT_CP_VS_DONE_TS), "CP_VS_DONE_TS" },
- { BIT(A3XX_INT_CP_PS_DONE_TS), "CP_PS_DONE_TS" },
- { BIT(A3XX_INT_CACHE_FLUSH_TS), "CACHE_FLUSH_TS" },
- { BIT(A3XX_INT_CP_AHB_ERROR_HALT),
- "CP_AHB_ERROR_HALT" },
- { BIT(A3XX_INT_MISC_HANG_DETECT), "MISC_HANG_DETECT" },
- { BIT(A3XX_INT_UCHE_OOB_ACCESS), "UCHE_OOB_ACCESS" })
- : "None"
- )
- );
- /*
- * Tracepoint for a5xx irq. Includes status info
- */
- TRACE_EVENT(kgsl_a5xx_irq_status,
- TP_PROTO(struct adreno_device *adreno_dev, unsigned int status),
- TP_ARGS(adreno_dev, status),
- TP_STRUCT__entry(
- __string(device_name, adreno_dev->dev.name)
- __field(unsigned int, status)
- ),
- TP_fast_assign(
- __assign_str(device_name, adreno_dev->dev.name);
- __entry->status = status;
- ),
- TP_printk(
- "d_name=%s status=%s",
- __get_str(device_name),
- __entry->status ? __print_flags(__entry->status, "|",
- { BIT(A5XX_INT_RBBM_GPU_IDLE), "RBBM_GPU_IDLE" },
- { BIT(A5XX_INT_RBBM_AHB_ERROR), "RBBM_AHB_ERR" },
- { BIT(A5XX_INT_RBBM_TRANSFER_TIMEOUT),
- "RBBM_TRANSFER_TIMEOUT" },
- { BIT(A5XX_INT_RBBM_ME_MS_TIMEOUT),
- "RBBM_ME_MS_TIMEOUT" },
- { BIT(A5XX_INT_RBBM_PFP_MS_TIMEOUT),
- "RBBM_PFP_MS_TIMEOUT" },
- { BIT(A5XX_INT_RBBM_ETS_MS_TIMEOUT),
- "RBBM_ETS_MS_TIMEOUT" },
- { BIT(A5XX_INT_RBBM_ATB_ASYNC_OVERFLOW),
- "RBBM_ATB_ASYNC_OVERFLOW" },
- { BIT(A5XX_INT_RBBM_GPC_ERROR), "RBBM_GPC_ERR" },
- { BIT(A5XX_INT_CP_SW), "CP_SW" },
- { BIT(A5XX_INT_CP_HW_ERROR), "CP_OPCODE_ERROR" },
- { BIT(A5XX_INT_CP_CCU_FLUSH_DEPTH_TS),
- "CP_CCU_FLUSH_DEPTH_TS" },
- { BIT(A5XX_INT_CP_CCU_FLUSH_COLOR_TS),
- "CP_CCU_FLUSH_COLOR_TS" },
- { BIT(A5XX_INT_CP_CCU_RESOLVE_TS),
- "CP_CCU_RESOLVE_TS" },
- { BIT(A5XX_INT_CP_IB2), "CP_IB2_INT" },
- { BIT(A5XX_INT_CP_IB1), "CP_IB1_INT" },
- { BIT(A5XX_INT_CP_RB), "CP_RB_INT" },
- { BIT(A5XX_INT_CP_UNUSED_1), "CP_UNUSED_1" },
- { BIT(A5XX_INT_CP_RB_DONE_TS), "CP_RB_DONE_TS" },
- { BIT(A5XX_INT_CP_WT_DONE_TS), "CP_WT_DONE_TS" },
- { BIT(A5XX_INT_UNKNOWN_1), "UNKNOWN_1" },
- { BIT(A5XX_INT_CP_CACHE_FLUSH_TS),
- "CP_CACHE_FLUSH_TS" },
- { BIT(A5XX_INT_UNUSED_2), "UNUSED_2" },
- { BIT(A5XX_INT_RBBM_ATB_BUS_OVERFLOW),
- "RBBM_ATB_BUS_OVERFLOW" },
- { BIT(A5XX_INT_MISC_HANG_DETECT), "MISC_HANG_DETECT" },
- { BIT(A5XX_INT_UCHE_OOB_ACCESS), "UCHE_OOB_ACCESS" },
- { BIT(A5XX_INT_UCHE_TRAP_INTR), "UCHE_TRAP_INTR" },
- { BIT(A5XX_INT_DEBBUS_INTR_0), "DEBBUS_INTR_0" },
- { BIT(A5XX_INT_DEBBUS_INTR_1), "DEBBUS_INTR_1" },
- { BIT(A5XX_INT_GPMU_VOLTAGE_DROOP),
- "GPMU_VOLTAGE_DROOP" },
- { BIT(A5XX_INT_GPMU_FIRMWARE), "GPMU_FIRMWARE" },
- { BIT(A5XX_INT_ISDB_CPU_IRQ), "ISDB_CPU_IRQ" },
- { BIT(A5XX_INT_ISDB_UNDER_DEBUG), "ISDB_UNDER_DEBUG" })
- : "None"
- )
- );
- /*
- * Tracepoint for gen7 irq. Includes status info
- */
- TRACE_EVENT(kgsl_gen7_irq_status,
- TP_PROTO(struct adreno_device *adreno_dev, unsigned int status),
- TP_ARGS(adreno_dev, status),
- TP_STRUCT__entry(
- __string(device_name, adreno_dev->dev.name)
- __field(unsigned int, status)
- ),
- TP_fast_assign(
- __assign_str(device_name, adreno_dev->dev.name);
- __entry->status = status;
- ),
- TP_printk(
- "d_name=%s status=%s",
- __get_str(device_name),
- __entry->status ? __print_flags(__entry->status, "|",
- { BIT(GEN7_INT_GPUIDLE), "GPUIDLE" },
- { BIT(GEN7_INT_AHBERROR), "AHBERROR" },
- { BIT(GEN7_INT_CPIPCINT0), "CPIPCINT0" },
- { BIT(GEN7_INT_CPIPCINT1), "CPIPCINT1" },
- { BIT(GEN7_INT_ATBASYNCFIFOOVERFLOW),
- "ATBASYNCFIFOOVERFLOW" },
- { BIT(GEN7_INT_GPCERROR), "GPCERROR" },
- { BIT(GEN7_INT_SWINTERRUPT), "SWINTERRUPT" },
- { BIT(GEN7_INT_HWERROR), "HWERROR" },
- { BIT(GEN7_INT_CCU_CLEAN_DEPTH_TS),
- "CCU_CLEAN_DEPTH_TS" },
- { BIT(GEN7_INT_CCU_CLEAN_COLOR_TS),
- "CCU_CLEAN_COLOR_TS" },
- { BIT(GEN7_INT_CCU_RESOLVE_CLEAN_TS),
- "CCU_RESOLVE_CLEAN_TS" },
- { BIT(GEN7_INT_PM4CPINTERRUPT), "PM4CPINTERRUPT" },
- { BIT(GEN7_INT_PM4CPINTERRUPTLPAC),
- "PM4CPINTERRUPTLPAC" },
- { BIT(GEN7_INT_RB_DONE_TS), "RB_DONE_TS" },
- { BIT(GEN7_INT_CACHE_CLEAN_TS), "CACHE_CLEAN_TS" },
- { BIT(GEN7_INT_CACHE_CLEAN_TS_LPAC),
- "CACHE_CLEAN_TS_LPAC" },
- { BIT(GEN7_INT_ATBBUSOVERFLOW), "ATBBUSOVERFLOW" },
- { BIT(GEN7_INT_HANGDETECTINTERRUPT),
- "HANGDETECTINTERRUPT" },
- { BIT(GEN7_INT_OUTOFBOUNDACCESS),
- "OUTOFBOUNDACCESS" },
- { BIT(GEN7_INT_UCHETRAPINTERRUPT),
- "UCHETRAPINTERRUPT" },
- { BIT(GEN7_INT_DEBUGBUSINTERRUPT0),
- "DEBUGBUSINTERRUPT0" },
- { BIT(GEN7_INT_DEBUGBUSINTERRUPT1),
- "DEBUGBUSINTERRUPT1" },
- { BIT(GEN7_INT_TSBWRITEERROR), "TSBWRITEERROR" },
- { BIT(GEN7_INT_SWFUSEVIOLATION), "SWFUSEVIOLATION" },
- { BIT(GEN7_INT_ISDBCPUIRQ), "ISDBCPUIRQ" },
- { BIT(GEN7_INT_ISDBUNDERDEBUG), "ISDBUNDERDEBUG" },
- { BIT(GEN7_INT_ISDBUNDERDEBUG), "ISDBUNDERDEBUG" })
- : "None"
- )
- );
- /*
- * Tracepoint for gen8 irq. Includes status info
- */
- TRACE_EVENT(kgsl_gen8_irq_status,
- TP_PROTO(struct adreno_device *adreno_dev, u32 status),
- TP_ARGS(adreno_dev, status),
- TP_STRUCT__entry(
- __string(device_name, adreno_dev->dev.name)
- __field(u32, status)
- ),
- TP_fast_assign(
- __assign_str(device_name, adreno_dev->dev.name);
- __entry->status = status;
- ),
- TP_printk(
- "d_name=%s status=%s",
- __get_str(device_name),
- __entry->status ? __print_flags(__entry->status, "|",
- { BIT(GEN8_INT_GPUIDLE), "GPUIDLE" },
- { BIT(GEN8_INT_AHBERROR), "AHBERROR" },
- { BIT(GEN8_INT_CPIPCINT0), "CPIPCINT0" },
- { BIT(GEN8_INT_CPIPCINT1), "CPIPCINT1" },
- { BIT(GEN8_INT_ATBASYNCFIFOOVERFLOW),
- "ATBASYNCFIFOOVERFLOW" },
- { BIT(GEN8_INT_GPCERROR), "GPCERROR" },
- { BIT(GEN8_INT_SWINTERRUPT), "SWINTERRUPT" },
- { BIT(GEN8_INT_HWERROR), "HWERROR" },
- { BIT(GEN8_INT_CCU_CLEAN_DEPTH_TS),
- "CCU_CLEAN_DEPTH_TS" },
- { BIT(GEN8_INT_CCU_CLEAN_COLOR_TS),
- "CCU_CLEAN_COLOR_TS" },
- { BIT(GEN8_INT_CCU_RESOLVE_CLEAN_TS),
- "CCU_RESOLVE_CLEAN_TS" },
- { BIT(GEN8_INT_PM4CPINTERRUPT), "PM4CPINTERRUPT" },
- { BIT(GEN8_INT_PM4CPINTERRUPTLPAC),
- "PM4CPINTERRUPTLPAC" },
- { BIT(GEN8_INT_RB_DONE_TS), "RB_DONE_TS" },
- { BIT(GEN8_INT_CACHE_CLEAN_TS), "CACHE_CLEAN_TS" },
- { BIT(GEN8_INT_CACHE_CLEAN_TS_LPAC),
- "CACHE_CLEAN_TS_LPAC" },
- { BIT(GEN8_INT_ATBBUSOVERFLOW), "ATBBUSOVERFLOW" },
- { BIT(GEN8_INT_HANGDETECTINTERRUPT),
- "HANGDETECTINTERRUPT" },
- { BIT(GEN8_INT_OUTOFBOUNDACCESS),
- "OUTOFBOUNDACCESS" },
- { BIT(GEN8_INT_UCHETRAPINTERRUPT),
- "UCHETRAPINTERRUPT" },
- { BIT(GEN8_INT_DEBUGBUSINTERRUPT0),
- "DEBUGBUSINTERRUPT0" },
- { BIT(GEN8_INT_DEBUGBUSINTERRUPT1),
- "DEBUGBUSINTERRUPT1" },
- { BIT(GEN8_INT_TSBWRITEERROR), "TSBWRITEERROR" },
- { BIT(GEN8_INT_SWFUSEVIOLATION), "SWFUSEVIOLATION" },
- { BIT(GEN8_INT_ISDBCPUIRQ), "ISDBCPUIRQ" },
- { BIT(GEN8_INT_ISDBUNDERDEBUG), "ISDBUNDERDEBUG" })
- : "None"
- )
- );
- DECLARE_EVENT_CLASS(adreno_hw_preempt_template,
- TP_PROTO(struct adreno_ringbuffer *cur_rb,
- struct adreno_ringbuffer *new_rb,
- unsigned int cur_rptr, unsigned int new_rptr),
- TP_ARGS(cur_rb, new_rb, cur_rptr, new_rptr),
- TP_STRUCT__entry(__field(int, cur_level)
- __field(int, new_level)
- __field(unsigned int, cur_rptr)
- __field(unsigned int, new_rptr)
- __field(unsigned int, cur_wptr)
- __field(unsigned int, new_wptr)
- __field(unsigned int, cur_rbbase)
- __field(unsigned int, new_rbbase)
- ),
- TP_fast_assign(__entry->cur_level = cur_rb->id;
- __entry->new_level = new_rb->id;
- __entry->cur_rptr = cur_rptr;
- __entry->new_rptr = new_rptr;
- __entry->cur_wptr = cur_rb->wptr;
- __entry->new_wptr = new_rb->wptr;
- __entry->cur_rbbase = cur_rb->buffer_desc->gpuaddr;
- __entry->new_rbbase = new_rb->buffer_desc->gpuaddr;
- ),
- TP_printk(
- "cur_rb_lvl=%d rptr=%x wptr=%x rbbase=%x new_rb_lvl=%d rptr=%x wptr=%x rbbase=%x",
- __entry->cur_level, __entry->cur_rptr,
- __entry->cur_wptr, __entry->cur_rbbase,
- __entry->new_level, __entry->new_rptr,
- __entry->new_wptr, __entry->new_rbbase
- )
- );
- DEFINE_EVENT(adreno_hw_preempt_template, adreno_hw_preempt_clear_to_trig,
- TP_PROTO(struct adreno_ringbuffer *cur_rb,
- struct adreno_ringbuffer *new_rb,
- unsigned int cur_rptr, unsigned int new_rptr),
- TP_ARGS(cur_rb, new_rb, cur_rptr, new_rptr)
- );
- DEFINE_EVENT(adreno_hw_preempt_template, adreno_hw_preempt_trig_to_comp,
- TP_PROTO(struct adreno_ringbuffer *cur_rb,
- struct adreno_ringbuffer *new_rb,
- unsigned int cur_rptr, unsigned int new_rptr),
- TP_ARGS(cur_rb, new_rb, cur_rptr, new_rptr)
- );
- DEFINE_EVENT(adreno_hw_preempt_template, adreno_hw_preempt_trig_to_comp_int,
- TP_PROTO(struct adreno_ringbuffer *cur_rb,
- struct adreno_ringbuffer *new_rb,
- unsigned int cur_rptr, unsigned int new_rptr),
- TP_ARGS(cur_rb, new_rb, cur_rptr, new_rptr)
- );
- TRACE_EVENT(adreno_hw_preempt_comp_to_clear,
- TP_PROTO(struct adreno_ringbuffer *cur_rb,
- struct adreno_ringbuffer *new_rb,
- unsigned int cur_rptr, unsigned int new_rptr),
- TP_ARGS(cur_rb, new_rb, cur_rptr, new_rptr),
- TP_STRUCT__entry(__field(int, cur_level)
- __field(int, new_level)
- __field(unsigned int, cur_rptr)
- __field(unsigned int, new_rptr)
- __field(unsigned int, cur_wptr)
- __field(unsigned int, new_wptr_end)
- __field(unsigned int, new_wptr)
- __field(unsigned int, cur_rbbase)
- __field(unsigned int, new_rbbase)
- ),
- TP_fast_assign(__entry->cur_level = cur_rb->id;
- __entry->new_level = new_rb->id;
- __entry->cur_rptr = cur_rptr;
- __entry->new_rptr = new_rptr;
- __entry->cur_wptr = cur_rb->wptr;
- __entry->new_wptr_end = new_rb->wptr_preempt_end;
- __entry->new_wptr = new_rb->wptr;
- __entry->cur_rbbase = cur_rb->buffer_desc->gpuaddr;
- __entry->new_rbbase = new_rb->buffer_desc->gpuaddr;
- ),
- TP_printk(
- "cur_rb_lvl=%d rptr=%x wptr=%x rbbase=%x prev_rb_lvl=%d rptr=%x wptr_preempt_end=%x wptr=%x rbbase=%x",
- __entry->cur_level, __entry->cur_rptr,
- __entry->cur_wptr, __entry->cur_rbbase,
- __entry->new_level, __entry->new_rptr,
- __entry->new_wptr_end, __entry->new_wptr, __entry->new_rbbase
- )
- );
- TRACE_EVENT(adreno_hw_preempt_token_submit,
- TP_PROTO(struct adreno_ringbuffer *cur_rb,
- struct adreno_ringbuffer *new_rb,
- unsigned int cur_rptr, unsigned int new_rptr),
- TP_ARGS(cur_rb, new_rb, cur_rptr, new_rptr),
- TP_STRUCT__entry(__field(int, cur_level)
- __field(int, new_level)
- __field(unsigned int, cur_rptr)
- __field(unsigned int, new_rptr)
- __field(unsigned int, cur_wptr)
- __field(unsigned int, cur_wptr_end)
- __field(unsigned int, new_wptr)
- __field(unsigned int, cur_rbbase)
- __field(unsigned int, new_rbbase)
- ),
- TP_fast_assign(__entry->cur_level = cur_rb->id;
- __entry->new_level = new_rb->id;
- __entry->cur_rptr = cur_rptr;
- __entry->new_rptr = new_rptr;
- __entry->cur_wptr = cur_rb->wptr;
- __entry->cur_wptr_end = cur_rb->wptr_preempt_end;
- __entry->new_wptr = new_rb->wptr;
- __entry->cur_rbbase = cur_rb->buffer_desc->gpuaddr;
- __entry->new_rbbase = new_rb->buffer_desc->gpuaddr;
- ),
- TP_printk(
- "cur_rb_lvl=%d rptr=%x wptr_preempt_end=%x wptr=%x rbbase=%x new_rb_lvl=%d rptr=%x wptr=%x rbbase=%x",
- __entry->cur_level, __entry->cur_rptr,
- __entry->cur_wptr_end, __entry->cur_wptr,
- __entry->cur_rbbase,
- __entry->new_level, __entry->new_rptr,
- __entry->new_wptr, __entry->new_rbbase
- )
- );
- TRACE_EVENT(adreno_preempt_trigger,
- TP_PROTO(u32 cur_rb_id, u32 next_rb_id,
- u32 cntl, u64 gmu_ticks),
- TP_ARGS(cur_rb_id, next_rb_id, cntl, gmu_ticks),
- TP_STRUCT__entry(
- __field(u32, cur)
- __field(u32, next)
- __field(u32, cntl)
- __field(u64, ticks)
- ),
- TP_fast_assign(
- __entry->cur = cur_rb_id;
- __entry->next = next_rb_id;
- __entry->cntl = cntl;
- __entry->ticks = gmu_ticks;
- ),
- TP_printk("trigger from id=%d to id=%d cntl=%x ticks=%llu",
- __entry->cur, __entry->next, __entry->cntl, __entry->ticks
- )
- );
- TRACE_EVENT(adreno_preempt_done,
- TP_PROTO(u32 cur_rb_id, u32 next_rb_id,
- u32 level, u64 gmu_ticks),
- TP_ARGS(cur_rb_id, next_rb_id, level, gmu_ticks),
- TP_STRUCT__entry(
- __field(u32, cur)
- __field(u32, next)
- __field(u32, level)
- __field(u64, ticks)
- ),
- TP_fast_assign(
- __entry->cur = cur_rb_id;
- __entry->next = next_rb_id;
- __entry->level = level;
- __entry->ticks = gmu_ticks;
- ),
- TP_printk("done switch to id=%d from id=%d level=%x ticks=%llu",
- __entry->next, __entry->cur, __entry->level, __entry->ticks
- )
- );
- TRACE_EVENT(adreno_ifpc_count,
- TP_PROTO(unsigned int ifpc_count),
- TP_ARGS(ifpc_count),
- TP_STRUCT__entry(
- __field(unsigned int, ifpc_count)
- ),
- TP_fast_assign(
- __entry->ifpc_count = ifpc_count;
- ),
- TP_printk("total times GMU entered IFPC = %d", __entry->ifpc_count)
- );
- #endif /* _ADRENO_TRACE_H */
- /* This part must be outside protection */
- #include <trace/define_trace.h>
|