Commit 60e10f89 authored by Huang Rui's avatar Huang Rui Committed by Rafael J. Wysocki
Browse files

cpufreq: amd-pstate: Add trace for AMD P-State module



Add trace event to monitor the performance value changes which is
controlled by cpu governors.

Signed-off-by: default avatarHuang Rui <ray.huang@amd.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent e059c184
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -17,6 +17,10 @@ obj-$(CONFIG_CPU_FREQ_GOV_ATTR_SET) += cpufreq_governor_attr_set.o
obj-$(CONFIG_CPUFREQ_DT)		+= cpufreq-dt.o
obj-$(CONFIG_CPUFREQ_DT_PLATDEV)	+= cpufreq-dt-platdev.o

# Traces
CFLAGS_amd-pstate-trace.o               := -I$(src)
amd_pstate-y				:= amd-pstate.o amd-pstate-trace.o

##################################################################################
# x86 drivers.
# Link order matters. K8 is preferred to ACPI because of firmware bugs in early
@@ -25,7 +29,7 @@ obj-$(CONFIG_CPUFREQ_DT_PLATDEV) += cpufreq-dt-platdev.o
# speedstep-* is preferred over p4-clockmod.

obj-$(CONFIG_X86_ACPI_CPUFREQ)		+= acpi-cpufreq.o
obj-$(CONFIG_X86_AMD_PSTATE)		+= amd-pstate.o
obj-$(CONFIG_X86_AMD_PSTATE)		+= amd_pstate.o
obj-$(CONFIG_X86_POWERNOW_K8)		+= powernow-k8.o
obj-$(CONFIG_X86_PCC_CPUFREQ)		+= pcc-cpufreq.o
obj-$(CONFIG_X86_POWERNOW_K6)		+= powernow-k6.o
+2 −0
Original line number Diff line number Diff line
#define CREATE_TRACE_POINTS
#include "amd-pstate-trace.h"
+77 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * amd-pstate-trace.h - AMD Processor P-state Frequency Driver Tracer
 *
 * Copyright (C) 2021 Advanced Micro Devices, Inc. All Rights Reserved.
 *
 * Author: Huang Rui <ray.huang@amd.com>
 */

#if !defined(_AMD_PSTATE_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
#define _AMD_PSTATE_TRACE_H

#include <linux/cpufreq.h>
#include <linux/tracepoint.h>
#include <linux/trace_events.h>

#undef TRACE_SYSTEM
#define TRACE_SYSTEM amd_cpu

#undef TRACE_INCLUDE_FILE
#define TRACE_INCLUDE_FILE amd-pstate-trace

#define TPS(x)  tracepoint_string(x)

TRACE_EVENT(amd_pstate_perf,

	TP_PROTO(unsigned long min_perf,
		 unsigned long target_perf,
		 unsigned long capacity,
		 unsigned int cpu_id,
		 bool changed,
		 bool fast_switch
		 ),

	TP_ARGS(min_perf,
		target_perf,
		capacity,
		cpu_id,
		changed,
		fast_switch
		),

	TP_STRUCT__entry(
		__field(unsigned long, min_perf)
		__field(unsigned long, target_perf)
		__field(unsigned long, capacity)
		__field(unsigned int, cpu_id)
		__field(bool, changed)
		__field(bool, fast_switch)
		),

	TP_fast_assign(
		__entry->min_perf = min_perf;
		__entry->target_perf = target_perf;
		__entry->capacity = capacity;
		__entry->cpu_id = cpu_id;
		__entry->changed = changed;
		__entry->fast_switch = fast_switch;
		),

	TP_printk("amd_min_perf=%lu amd_des_perf=%lu amd_max_perf=%lu cpu_id=%u changed=%s fast_switch=%s",
		  (unsigned long)__entry->min_perf,
		  (unsigned long)__entry->target_perf,
		  (unsigned long)__entry->capacity,
		  (unsigned int)__entry->cpu_id,
		  (__entry->changed) ? "true" : "false",
		  (__entry->fast_switch) ? "true" : "false"
		 )
);

#endif /* _AMD_PSTATE_TRACE_H */

/* This part must be outside protection */
#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH .

#include <trace/define_trace.h>
+4 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@
#include <asm/processor.h>
#include <asm/cpufeature.h>
#include <asm/cpu_device_id.h>
#include "amd-pstate-trace.h"

#define AMD_PSTATE_TRANSITION_LATENCY	0x20000
#define AMD_PSTATE_TRANSITION_DELAY	500
@@ -220,6 +221,9 @@ static void amd_pstate_update(struct amd_cpudata *cpudata, u32 min_perf,
	value &= ~AMD_CPPC_MAX_PERF(~0L);
	value |= AMD_CPPC_MAX_PERF(max_perf);

	trace_amd_pstate_perf(min_perf, des_perf, max_perf,
			      cpudata->cpu, (value != prev), fast_switch);

	if (value == prev)
		return;