root/drivers/cpufreq/amd-pstate-trace.h
/* 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(u8 min_perf,
                 u8 target_perf,
                 u8 capacity,
                 u64 freq,
                 u64 mperf,
                 u64 aperf,
                 u64 tsc,
                 unsigned int cpu_id,
                 bool fast_switch
                 ),

        TP_ARGS(min_perf,
                target_perf,
                capacity,
                freq,
                mperf,
                aperf,
                tsc,
                cpu_id,
                fast_switch
                ),

        TP_STRUCT__entry(
                __field(u8, min_perf)
                __field(u8, target_perf)
                __field(u8, capacity)
                __field(unsigned long long, freq)
                __field(unsigned long long, mperf)
                __field(unsigned long long, aperf)
                __field(unsigned long long, tsc)
                __field(unsigned int, cpu_id)
                __field(bool, fast_switch)
                ),

        TP_fast_assign(
                __entry->min_perf = min_perf;
                __entry->target_perf = target_perf;
                __entry->capacity = capacity;
                __entry->freq = freq;
                __entry->mperf = mperf;
                __entry->aperf = aperf;
                __entry->tsc = tsc;
                __entry->cpu_id = cpu_id;
                __entry->fast_switch = fast_switch;
                ),

        TP_printk("amd_min_perf=%hhu amd_des_perf=%hhu amd_max_perf=%hhu freq=%llu mperf=%llu aperf=%llu tsc=%llu cpu_id=%u fast_switch=%s",
                  (u8)__entry->min_perf,
                  (u8)__entry->target_perf,
                  (u8)__entry->capacity,
                  (unsigned long long)__entry->freq,
                  (unsigned long long)__entry->mperf,
                  (unsigned long long)__entry->aperf,
                  (unsigned long long)__entry->tsc,
                  (unsigned int)__entry->cpu_id,
                  (__entry->fast_switch) ? "true" : "false"
                 )
);

TRACE_EVENT(amd_pstate_epp_perf,

        TP_PROTO(unsigned int cpu_id,
                 u8 highest_perf,
                 u8 epp,
                 u8 min_perf,
                 u8 max_perf,
                 bool boost,
                 bool changed
                 ),

        TP_ARGS(cpu_id,
                highest_perf,
                epp,
                min_perf,
                max_perf,
                boost,
                changed),

        TP_STRUCT__entry(
                __field(unsigned int, cpu_id)
                __field(u8, highest_perf)
                __field(u8, epp)
                __field(u8, min_perf)
                __field(u8, max_perf)
                __field(bool, boost)
                __field(bool, changed)
                ),

        TP_fast_assign(
                __entry->cpu_id = cpu_id;
                __entry->highest_perf = highest_perf;
                __entry->epp = epp;
                __entry->min_perf = min_perf;
                __entry->max_perf = max_perf;
                __entry->boost = boost;
                __entry->changed = changed;
                ),

        TP_printk("cpu%u: [%hhu<->%hhu]/%hhu, epp=%hhu, boost=%u, changed=%u",
                  (unsigned int)__entry->cpu_id,
                  (u8)__entry->min_perf,
                  (u8)__entry->max_perf,
                  (u8)__entry->highest_perf,
                  (u8)__entry->epp,
                  (bool)__entry->boost,
                  (bool)__entry->changed
                 )
);

#endif /* _AMD_PSTATE_TRACE_H */

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

#include <trace/define_trace.h>