msm: kgsl: Add gpu_frequency tracepoint to power trace system

Add a tracepoint to the power trace system to report GPU
frequency change. Format for this is identical to cpu_frequency
event and compatible with Android tools such as Perfetto.

Change-Id: I6207f45f506ab595bd261a297abdd8f40990c8de
Signed-off-by: Deepak Kumar <dkumar@codeaurora.org>
tirimbino
Deepak Kumar 5 years ago
parent 4770b12d76
commit 55093ed7f3
  1. 3
      drivers/gpu/msm/kgsl_pwrctrl.c
  2. 5
      drivers/gpu/msm/kgsl_trace.c
  3. 49
      drivers/gpu/msm/kgsl_trace_power.h

@ -28,6 +28,7 @@
#include "kgsl_device.h"
#include "kgsl_trace.h"
#include "kgsl_gmu_core.h"
#include "kgsl_trace_power.h"
#define KGSL_PWRFLAGS_POWER_ON 0
#define KGSL_PWRFLAGS_CLK_ON 1
@ -492,6 +493,8 @@ void kgsl_pwrctrl_pwrlevel_change(struct kgsl_device *device,
pwr->previous_pwrlevel,
pwr->pwrlevels[old_level].gpu_freq);
trace_gpu_frequency(pwrlevel->gpu_freq/1000, 0);
/*
* Some targets do not support the bandwidth requirement of
* GPU at TURBO, for such targets we need to set GPU-BIMC

@ -1,4 +1,4 @@
/* Copyright (c) 2011, 2013, 2015 The Linux Foundation. All rights reserved.
/* Copyright (c) 2011, 2013, 2015, 2019 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
@ -19,8 +19,11 @@
/* Instantiate tracepoints */
#define CREATE_TRACE_POINTS
#include "kgsl_trace.h"
#include "kgsl_trace_power.h"
EXPORT_TRACEPOINT_SYMBOL(kgsl_regwrite);
EXPORT_TRACEPOINT_SYMBOL(kgsl_issueibcmds);
EXPORT_TRACEPOINT_SYMBOL(kgsl_user_pwrlevel_constraint);
EXPORT_TRACEPOINT_SYMBOL(kgsl_constraint);
EXPORT_TRACEPOINT_SYMBOL(gpu_frequency);

@ -0,0 +1,49 @@
/* Copyright (c) 2019, 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(_KGSL_TRACE_POWER_H) || defined(TRACE_HEADER_MULTI_READ)
#define _KGSL_TRACE_POWER_H
#undef TRACE_SYSTEM
#define TRACE_SYSTEM power
#undef TRACE_INCLUDE_FILE
#define TRACE_INCLUDE_FILE kgsl_trace_power
#include <linux/tracepoint.h>
/**
* gpu_frequency - Reports frequency changes in GPU clock domains
* @state: New frequency (in KHz)
* @gpu_id: GPU clock domain
*/
TRACE_EVENT(gpu_frequency,
TP_PROTO(unsigned int state, unsigned int gpu_id),
TP_ARGS(state, gpu_id),
TP_STRUCT__entry(
__field(unsigned int, state)
__field(unsigned int, gpu_id)
),
TP_fast_assign(
__entry->state = state;
__entry->gpu_id = gpu_id;
),
TP_printk("state=%lu gpu_id=%lu",
(unsigned long)__entry->state,
(unsigned long)__entry->gpu_id)
);
#endif /* _KGSL_TRACE_POWER_H */
/* This part must be outside protection */
#include <trace/define_trace.h>
Loading…
Cancel
Save