mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
eeb3ca12b7
Add an interface to hint the user specified power constraint. User can specify a particular GPU power level or a bandwidth vote. The power constraints are per context or command batch. Power constraints are only for hinting and should be used judiciously. Change-Id: Ic10a5fff4abc88c51cd45a7d7ac58c0d4e5dcb25 Signed-off-by: Suman Tatiraju <sumant@codeaurora.org> Signed-off-by: Lucille Sylvester <lsylvest@codeaurora.org>
301 lines
7.7 KiB
C
301 lines
7.7 KiB
C
/* Copyright (c) 2013, The Linux Foundation. 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 version 2 and
|
|
* only version 2 as published by the Free Software Foundation.
|
|
*
|
|
* 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.
|
|
*
|
|
*/
|
|
|
|
#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 .
|
|
#define TRACE_INCLUDE_FILE adreno_trace
|
|
|
|
#include <linux/tracepoint.h>
|
|
#include "kgsl_device.h"
|
|
|
|
TRACE_EVENT(adreno_cmdbatch_queued,
|
|
TP_PROTO(struct kgsl_cmdbatch *cmdbatch, unsigned int queued),
|
|
TP_ARGS(cmdbatch, queued),
|
|
TP_STRUCT__entry(
|
|
__field(unsigned int, id)
|
|
__field(unsigned int, timestamp)
|
|
__field(unsigned int, queued)
|
|
__field(unsigned int, flags)
|
|
),
|
|
TP_fast_assign(
|
|
__entry->id = cmdbatch->context->id;
|
|
__entry->timestamp = cmdbatch->timestamp;
|
|
__entry->queued = queued;
|
|
__entry->flags = cmdbatch->flags;
|
|
),
|
|
TP_printk(
|
|
"ctx=%u ts=%u queued=%u flags=%s",
|
|
__entry->id, __entry->timestamp, __entry->queued,
|
|
__entry->flags ? __print_flags(__entry->flags, "|",
|
|
{ KGSL_CONTEXT_SYNC, "SYNC" },
|
|
{ KGSL_CONTEXT_END_OF_FRAME, "EOF" })
|
|
: "none"
|
|
)
|
|
);
|
|
|
|
DECLARE_EVENT_CLASS(adreno_cmdbatch_template,
|
|
TP_PROTO(struct kgsl_cmdbatch *cmdbatch, int inflight),
|
|
TP_ARGS(cmdbatch, inflight),
|
|
TP_STRUCT__entry(
|
|
__field(unsigned int, id)
|
|
__field(unsigned int, timestamp)
|
|
__field(unsigned int, inflight)
|
|
),
|
|
TP_fast_assign(
|
|
__entry->id = cmdbatch->context->id;
|
|
__entry->timestamp = cmdbatch->timestamp;
|
|
__entry->inflight = inflight;
|
|
),
|
|
TP_printk(
|
|
"ctx=%u ts=%u inflight=%u",
|
|
__entry->id, __entry->timestamp,
|
|
__entry->inflight
|
|
)
|
|
);
|
|
|
|
DEFINE_EVENT(adreno_cmdbatch_template, adreno_cmdbatch_submitted,
|
|
TP_PROTO(struct kgsl_cmdbatch *cmdbatch, int inflight),
|
|
TP_ARGS(cmdbatch, inflight)
|
|
);
|
|
|
|
TRACE_EVENT(adreno_cmdbatch_retired,
|
|
TP_PROTO(struct kgsl_cmdbatch *cmdbatch, int inflight),
|
|
TP_ARGS(cmdbatch, inflight),
|
|
TP_STRUCT__entry(
|
|
__field(unsigned int, id)
|
|
__field(unsigned int, timestamp)
|
|
__field(unsigned int, inflight)
|
|
__field(unsigned int, recovery)
|
|
),
|
|
TP_fast_assign(
|
|
__entry->id = cmdbatch->context->id;
|
|
__entry->timestamp = cmdbatch->timestamp;
|
|
__entry->inflight = inflight;
|
|
__entry->recovery = cmdbatch->fault_recovery;
|
|
),
|
|
TP_printk(
|
|
"ctx=%u ts=%u inflight=%u recovery=%s",
|
|
__entry->id, __entry->timestamp,
|
|
__entry->inflight,
|
|
__entry->recovery ?
|
|
__print_flags(__entry->recovery, "|",
|
|
ADRENO_FT_TYPES) : "none"
|
|
)
|
|
);
|
|
|
|
TRACE_EVENT(adreno_cmdbatch_fault,
|
|
TP_PROTO(struct kgsl_cmdbatch *cmdbatch, unsigned int fault),
|
|
TP_ARGS(cmdbatch, fault),
|
|
TP_STRUCT__entry(
|
|
__field(unsigned int, id)
|
|
__field(unsigned int, timestamp)
|
|
__field(unsigned int, fault)
|
|
),
|
|
TP_fast_assign(
|
|
__entry->id = cmdbatch->context->id;
|
|
__entry->timestamp = cmdbatch->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_cmdbatch *cmdbatch, unsigned int action),
|
|
TP_ARGS(cmdbatch, action),
|
|
TP_STRUCT__entry(
|
|
__field(unsigned int, id)
|
|
__field(unsigned int, timestamp)
|
|
__field(unsigned int, action)
|
|
),
|
|
TP_fast_assign(
|
|
__entry->id = cmdbatch->context->id;
|
|
__entry->timestamp = cmdbatch->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)
|
|
),
|
|
TP_fast_assign(
|
|
__entry->id = drawctxt->base.id;
|
|
),
|
|
TP_printk("ctx=%u", __entry->id)
|
|
);
|
|
|
|
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 id, unsigned int ts),
|
|
TP_ARGS(id, ts),
|
|
TP_STRUCT__entry(
|
|
__field(unsigned int, id)
|
|
__field(unsigned int, ts)
|
|
),
|
|
TP_fast_assign(
|
|
__entry->id = id;
|
|
__entry->ts = ts;
|
|
),
|
|
TP_printk(
|
|
"ctx=%u ts=%u",
|
|
__entry->id, __entry->ts
|
|
)
|
|
);
|
|
|
|
TRACE_EVENT(adreno_drawctxt_wait_done,
|
|
TP_PROTO(unsigned int id, unsigned int ts, int status),
|
|
TP_ARGS(id, ts, status),
|
|
TP_STRUCT__entry(
|
|
__field(unsigned int, id)
|
|
__field(unsigned int, ts)
|
|
__field(int, status)
|
|
),
|
|
TP_fast_assign(
|
|
__entry->id = id;
|
|
__entry->ts = ts;
|
|
__entry->status = status;
|
|
),
|
|
TP_printk(
|
|
"ctx=%u ts=%u status=%d",
|
|
__entry->id, __entry->ts, __entry->status
|
|
)
|
|
);
|
|
|
|
TRACE_EVENT(adreno_drawctxt_switch,
|
|
TP_PROTO(struct adreno_context *oldctx,
|
|
struct adreno_context *newctx,
|
|
unsigned int flags),
|
|
TP_ARGS(oldctx, newctx, flags),
|
|
TP_STRUCT__entry(
|
|
__field(unsigned int, oldctx)
|
|
__field(unsigned int, newctx)
|
|
__field(unsigned int, flags)
|
|
),
|
|
TP_fast_assign(
|
|
__entry->oldctx = oldctx ? oldctx->base.id : 0;
|
|
__entry->newctx = newctx ? newctx->base.id : 0;
|
|
),
|
|
TP_printk(
|
|
"oldctx=%u newctx=%u flags=%X",
|
|
__entry->oldctx, __entry->newctx, flags
|
|
)
|
|
);
|
|
|
|
TRACE_EVENT(adreno_gpu_fault,
|
|
TP_PROTO(unsigned int ctx, unsigned int ts,
|
|
unsigned int status, unsigned int rptr, unsigned int wptr,
|
|
unsigned int ib1base, unsigned int ib1size,
|
|
unsigned int ib2base, unsigned int ib2size),
|
|
TP_ARGS(ctx, ts, status, rptr, wptr, ib1base, ib1size, ib2base,
|
|
ib2size),
|
|
TP_STRUCT__entry(
|
|
__field(unsigned int, ctx)
|
|
__field(unsigned int, ts)
|
|
__field(unsigned int, status)
|
|
__field(unsigned int, rptr)
|
|
__field(unsigned int, wptr)
|
|
__field(unsigned int, ib1base)
|
|
__field(unsigned int, ib1size)
|
|
__field(unsigned int, ib2base)
|
|
__field(unsigned int, ib2size)
|
|
),
|
|
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;
|
|
),
|
|
TP_printk("ctx=%d ts=%d status=%X RB=%X/%X IB1=%X/%X IB2=%X/%X",
|
|
__entry->ctx, __entry->ts, __entry->status, __entry->wptr,
|
|
__entry->rptr, __entry->ib1base, __entry->ib1size,
|
|
__entry->ib2base, __entry->ib2size)
|
|
);
|
|
|
|
TRACE_EVENT(kgsl_user_pwrlevel_constraint,
|
|
|
|
TP_PROTO(struct kgsl_device *device, unsigned int id, unsigned int type,
|
|
unsigned int sub_type),
|
|
|
|
TP_ARGS(device, id, type, sub_type),
|
|
|
|
TP_STRUCT__entry(
|
|
__string(device_name, device->name)
|
|
__field(unsigned int, id)
|
|
__field(unsigned int, type)
|
|
__field(unsigned int, sub_type)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__assign_str(device_name, device->name);
|
|
__entry->id = id;
|
|
__entry->type = type;
|
|
__entry->sub_type = sub_type;
|
|
),
|
|
|
|
TP_printk(
|
|
"d_name=%s ctx=%u constraint_type=%s constraint_subtype=%s",
|
|
__get_str(device_name), __entry->id,
|
|
__print_symbolic(__entry->type, KGSL_CONSTRAINT_TYPES),
|
|
__print_symbolic(__entry->sub_type,
|
|
KGSL_CONSTRAINT_PWRLEVEL_SUBTYPES)
|
|
)
|
|
);
|
|
|
|
#endif /* _ADRENO_TRACE_H */
|
|
|
|
/* This part must be outside protection */
|
|
#include <trace/define_trace.h>
|