kernel-brax3-ubuntu-touch/drivers/thermal/mediatek/thermal_trace.h
erascape f319b992b1 kernel-5.15: Initial import brax3 UT kernel
* halium configs enabled

Signed-off-by: erascape <erascape@proton.me>
2025-09-23 15:17:10 +00:00

480 lines
12 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2020 MediaTek Inc.
*/
#undef TRACE_SYSTEM
#define TRACE_SYSTEM mtk_thermal
#if !defined(_TRACE_MTK_THERMAL_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_MTK_THERMAL_H
#include <linux/tracepoint.h>
#if IS_ENABLED(CONFIG_MTK_MD_THERMAL)
#include "md_cooling.h"
#endif
#include "thermal_interface.h"
#include "thermal_trace_local.h"
#if IS_ENABLED(CONFIG_MTK_MD_THERMAL)
TRACE_DEFINE_ENUM(MD_LV_THROTTLE_DISABLED);
TRACE_DEFINE_ENUM(MD_SCG_OFF);
TRACE_DEFINE_ENUM(MD_LV_THROTTLE_ENABLED);
TRACE_DEFINE_ENUM(MD_IMS_ONLY);
TRACE_DEFINE_ENUM(MD_NO_IMS);
TRACE_DEFINE_ENUM(MD_OFF);
#define show_md_status(status) \
__print_symbolic(status, \
{ MD_LV_THROTTLE_DISABLED, "LV_THROTTLE_DISABLED"}, \
{ MD_SCG_OFF, "SCG_OFF"}, \
{ MD_LV_THROTTLE_ENABLED, "LV_THROTTLE_ENABLED"}, \
{ MD_IMS_ONLY, "IMS_ONLY"}, \
{ MD_NO_IMS, "NO_IMS"}, \
{ MD_OFF, "MD_OFF"})
TRACE_EVENT(md_mutt_limit,
TP_PROTO(struct md_cooling_device *md_cdev, enum md_cooling_status status),
TP_ARGS(md_cdev, status),
TP_STRUCT__entry(
__field(unsigned long, state)
__field(unsigned int, id)
__field(enum md_cooling_status, status)
),
TP_fast_assign(
__entry->state = md_cdev->target_state;
__entry->id = md_cdev->pa_id;
__entry->status = status;
),
TP_printk("mutt_lv=%ld pa_id=%d status=%s",
__entry->state, __entry->id, show_md_status(__entry->status))
);
TRACE_EVENT(md_tx_pwr_limit,
TP_PROTO(struct md_cooling_device *md_cdev, enum md_cooling_status status),
TP_ARGS(md_cdev, status),
TP_STRUCT__entry(
__field(unsigned long, state)
__field(unsigned int, pwr)
__field(unsigned int, id)
__field(enum md_cooling_status, status)
),
TP_fast_assign(
__entry->state = md_cdev->target_state;
__entry->pwr =
md_cdev->throttle_tx_power[md_cdev->target_state];
__entry->id = md_cdev->pa_id;
__entry->status = status;
),
TP_printk("tx_pwr_lv=%lu tx_pwr=%d pa_id=%d status=%s",
__entry->state, __entry->pwr, __entry->id,
show_md_status(__entry->status))
);
TRACE_EVENT(md_scg_off,
TP_PROTO(struct md_cooling_device *md_cdev, enum md_cooling_status status),
TP_ARGS(md_cdev, status),
TP_STRUCT__entry(
__field(unsigned long, off)
__field(unsigned int, id)
__field(enum md_cooling_status, status)
),
TP_fast_assign(
__entry->off = md_cdev->target_state;
__entry->id = md_cdev->pa_id;
__entry->status = status;
),
TP_printk("scg_off=%ld pa_id=%d status=%s",
__entry->off, __entry->id, show_md_status(__entry->status))
);
#endif /* CONFIG_MTK_MD_THERMAL */
TRACE_EVENT(network_tput,
TP_PROTO(unsigned int md_tput, unsigned int wifi_tput),
TP_ARGS(md_tput, wifi_tput),
TP_STRUCT__entry(
__field(unsigned int, md_tput)
__field(unsigned int, wifi_tput)
),
TP_fast_assign(
__entry->md_tput = md_tput;
__entry->wifi_tput = wifi_tput;
),
TP_printk("MD_Tput=%d Wifi_Tput=%d (Kb/s)",
__entry->md_tput, __entry->wifi_tput)
);
TRACE_EVENT(thermal_cpu,
TP_PROTO(struct thermal_cpu_info *cpu),
TP_ARGS(cpu),
TP_STRUCT__entry(
__field(int, ttj)
__field(int, limit_powerbudget)
__field(int, LL_min_opp_hint)
__field(unsigned int, LL_cur_freq)
__field(unsigned int, LL_limit_freq)
__field(int, LL_limit_opp)
__field(int, LL_max_temp)
__field(int, BL_min_opp_hint)
__field(unsigned int, BL_cur_freq)
__field(unsigned int, BL_limit_freq)
__field(int, BL_limit_opp)
__field(int, BL_max_temp)
__field(int, B_min_opp_hint)
__field(unsigned int, B_cur_freq)
__field(unsigned int, B_limit_freq)
__field(int, B_limit_opp)
__field(int, B_max_temp)
),
TP_fast_assign(
__entry->ttj = cpu->ttj;
__entry->limit_powerbudget = cpu->limit_powerbudget;
__entry->LL_min_opp_hint = cpu->LL_min_opp_hint;
__entry->LL_cur_freq = cpu->LL_cur_freq;
__entry->LL_limit_freq = cpu->LL_limit_freq;
__entry->LL_limit_opp = cpu->LL_limit_opp;
__entry->LL_max_temp = cpu->LL_max_temp;
__entry->BL_min_opp_hint = cpu->BL_min_opp_hint;
__entry->BL_cur_freq = cpu->BL_cur_freq;
__entry->BL_limit_freq = cpu->BL_limit_freq;
__entry->BL_limit_opp = cpu->BL_limit_opp;
__entry->BL_max_temp = cpu->BL_max_temp;
__entry->B_min_opp_hint = cpu->B_min_opp_hint;
__entry->B_cur_freq = cpu->B_cur_freq;
__entry->B_limit_freq = cpu->B_limit_freq;
__entry->B_limit_opp = cpu->B_limit_opp;
__entry->B_max_temp = cpu->B_max_temp;
),
TP_printk("ttj=%d limit_pb=%d LL_min_opp_h=%d LL_cur_freq=%d LL_limit_freq=%d LL_limit_opp=%d LL_max_t=%d BL_min_opp_h=%d BL_cur_freq=%d BL_limit_freq=%d BL_limit_opp=%d BL_max_t=%d B_min_opp_h=%d B_cur_freq=%d B_limit_freq=%d B_limit_opp=%d B_max_t=%d",
__entry->ttj, __entry->limit_powerbudget,
__entry->LL_min_opp_hint, __entry->LL_cur_freq, __entry->LL_limit_freq,
__entry->LL_limit_opp, __entry->LL_max_temp,
__entry->BL_min_opp_hint, __entry->BL_cur_freq, __entry->BL_limit_freq,
__entry->BL_limit_opp, __entry->BL_max_temp,
__entry->B_min_opp_hint, __entry->B_cur_freq, __entry->B_limit_freq,
__entry->B_limit_opp, __entry->B_max_temp)
);
TRACE_EVENT(thermal_gpu,
TP_PROTO(struct thermal_gpu_info *gpu),
TP_ARGS(gpu),
TP_STRUCT__entry(
__field(int, ttj)
__field(int, limit_powerbudget)
__field(int, temp)
__field(int, temp_noinvalid)
__field(int, vtskin)
__field(unsigned int, ppm_limiter)
__field(unsigned int, limit_freq)
__field(unsigned int, cur_freq)
__field(unsigned int, ppm_limit_freq)
),
TP_fast_assign(
__entry->ttj = gpu->ttj;
__entry->limit_powerbudget = gpu->limit_powerbudget;
__entry->temp = gpu->temp;
__entry->temp_noinvalid = gpu->temp_noinvalid;
__entry->vtskin = gpu->vtskin;
__entry->limit_freq = gpu->limit_freq;
__entry->cur_freq = gpu->cur_freq;
__entry->ppm_limiter = gpu->ppm_limiter;
__entry->ppm_limit_freq = gpu->ppm_limit_freq;
),
TP_printk("ttj=%d limit_pb=%d t=%d t2=%d limit_freq=%d cur_freq=%d ppm_limiter=%d ppm_limit_freq=%d vtskin=%d",
__entry->ttj, __entry->limit_powerbudget, __entry->temp, __entry->temp_noinvalid,
__entry->limit_freq, __entry->cur_freq,
__entry->ppm_limiter, __entry->ppm_limit_freq, __entry->vtskin)
);
TRACE_EVENT(thermal_apu,
TP_PROTO(struct thermal_apu_info *apu),
TP_ARGS(apu),
TP_STRUCT__entry(
__field(int, ttj)
__field(int, limit_powerbudget)
__field(int, temp)
__field(int, limit_opp)
__field(int, cur_opp)
),
TP_fast_assign(
__entry->ttj = apu->ttj;
__entry->limit_powerbudget = apu->limit_powerbudget;
__entry->temp = apu->temp;
__entry->limit_opp = apu->limit_opp;
__entry->cur_opp = apu->cur_opp;
),
TP_printk("ttj=%d limit_pb=%d t=%d limit_opp=%d cur_opp=%d",
__entry->ttj, __entry->limit_powerbudget, __entry->temp, __entry->limit_opp,
__entry->cur_opp)
);
TRACE_EVENT(cpu_hr_info_0,
TP_PROTO(struct headroom_info *c0,
struct headroom_info *c1,
struct headroom_info *c2,
struct headroom_info *c3),
TP_ARGS(c0, c1, c2, c3),
TP_STRUCT__entry(
__field(int, cpu0_temp)
__field(int, cpu0_pdt_temp)
__field(int, cpu0_headroom)
__field(int, cpu0_ratio)
__field(int, cpu1_temp)
__field(int, cpu1_pdt_temp)
__field(int, cpu1_headroom)
__field(int, cpu1_ratio)
__field(int, cpu2_temp)
__field(int, cpu2_pdt_temp)
__field(int, cpu2_headroom)
__field(int, cpu2_ratio)
__field(int, cpu3_temp)
__field(int, cpu3_pdt_temp)
__field(int, cpu3_headroom)
__field(int, cpu3_ratio)
),
TP_fast_assign(
__entry->cpu0_temp = c0->temp;
__entry->cpu0_pdt_temp = c0->predict_temp;
__entry->cpu0_headroom = c0->headroom;
__entry->cpu0_ratio = c0->ratio;
__entry->cpu1_temp = c1->temp;
__entry->cpu1_pdt_temp = c1->predict_temp;
__entry->cpu1_headroom = c1->headroom;
__entry->cpu1_ratio = c1->ratio;
__entry->cpu2_temp = c2->temp;
__entry->cpu2_pdt_temp = c2->predict_temp;
__entry->cpu2_headroom = c2->headroom;
__entry->cpu2_ratio = c2->ratio;
__entry->cpu3_temp = c3->temp;
__entry->cpu3_pdt_temp = c3->predict_temp;
__entry->cpu3_headroom = c3->headroom;
__entry->cpu3_ratio = c3->ratio;
),
TP_printk("0t=%d 0p=%d 0h=%d 0r=%d 1t=%d 1p=%d 1h=%d 1r=%d 2t=%d 2p=%d 2h=%d 2r=%d 3t=%d 3p=%d 3h=%d 3r=%d",
__entry->cpu0_temp, __entry->cpu0_pdt_temp, __entry->cpu0_headroom,
__entry->cpu0_ratio,
__entry->cpu1_temp, __entry->cpu1_pdt_temp, __entry->cpu1_headroom,
__entry->cpu1_ratio,
__entry->cpu2_temp, __entry->cpu2_pdt_temp, __entry->cpu2_headroom,
__entry->cpu2_ratio,
__entry->cpu3_temp, __entry->cpu3_pdt_temp, __entry->cpu3_headroom,
__entry->cpu3_ratio)
);
TRACE_EVENT(cpu_hr_info_1,
TP_PROTO(struct headroom_info *c0,
struct headroom_info *c1,
struct headroom_info *c2,
struct headroom_info *c3),
TP_ARGS(c0, c1, c2, c3),
TP_STRUCT__entry(
__field(int, cpu0_temp)
__field(int, cpu0_pdt_temp)
__field(int, cpu0_headroom)
__field(int, cpu0_ratio)
__field(int, cpu1_temp)
__field(int, cpu1_pdt_temp)
__field(int, cpu1_headroom)
__field(int, cpu1_ratio)
__field(int, cpu2_temp)
__field(int, cpu2_pdt_temp)
__field(int, cpu2_headroom)
__field(int, cpu2_ratio)
__field(int, cpu3_temp)
__field(int, cpu3_pdt_temp)
__field(int, cpu3_headroom)
__field(int, cpu3_ratio)
),
TP_fast_assign(
__entry->cpu0_temp = c0->temp;
__entry->cpu0_pdt_temp = c0->predict_temp;
__entry->cpu0_headroom = c0->headroom;
__entry->cpu0_ratio = c0->ratio;
__entry->cpu1_temp = c1->temp;
__entry->cpu1_pdt_temp = c1->predict_temp;
__entry->cpu1_headroom = c1->headroom;
__entry->cpu1_ratio = c1->ratio;
__entry->cpu2_temp = c2->temp;
__entry->cpu2_pdt_temp = c2->predict_temp;
__entry->cpu2_headroom = c2->headroom;
__entry->cpu2_ratio = c2->ratio;
__entry->cpu3_temp = c3->temp;
__entry->cpu3_pdt_temp = c3->predict_temp;
__entry->cpu3_headroom = c3->headroom;
__entry->cpu3_ratio = c3->ratio;
),
TP_printk("4t=%d 4p=%d 4h=%d 4r=%d 5t=%d 5p=%d 5h=%d 5r=%d 6t=%d 6p=%d 6h=%d 6r=%d 7t=%d 7p=%d 7h=%d 7r=%d",
__entry->cpu0_temp, __entry->cpu0_pdt_temp, __entry->cpu0_headroom,
__entry->cpu0_ratio,
__entry->cpu1_temp, __entry->cpu1_pdt_temp, __entry->cpu1_headroom,
__entry->cpu1_ratio,
__entry->cpu2_temp, __entry->cpu2_pdt_temp, __entry->cpu2_headroom,
__entry->cpu2_ratio,
__entry->cpu3_temp, __entry->cpu3_pdt_temp, __entry->cpu3_headroom,
__entry->cpu3_ratio)
);
TRACE_EVENT(frs,
TP_PROTO(struct frs_info *frs),
TP_ARGS(frs),
TP_STRUCT__entry(
__field(int, pid)
__field(int, target_fps)
__field(int, diff)
__field(int, tpcb)
__field(int, tpcb_slope)
__field(int, ap_headroom)
__field(int, n_sec_to_ttpcb)
),
TP_fast_assign(
__entry->pid = frs->pid;
__entry->target_fps = frs->target_fps;
__entry->diff = frs->diff;
__entry->tpcb = frs->tpcb;
__entry->tpcb_slope = frs->tpcb_slope;
__entry->ap_headroom = frs->ap_headroom;
__entry->n_sec_to_ttpcb = frs->n_sec_to_ttpcb;
),
TP_printk("pid=%d target_fps=%d diff=%d tpcb=%d tpcb_slope=%d ap_headroom=%d target_n=%d",
__entry->pid, __entry->target_fps, __entry->diff, __entry->tpcb,
__entry->tpcb_slope, __entry->ap_headroom, __entry->n_sec_to_ttpcb)
);
#if IS_ENABLED(CONFIG_MTK_THERMAL_JATM)
TRACE_EVENT(jatm_enable,
TP_PROTO(int jatm_budget),
TP_ARGS(jatm_budget),
TP_STRUCT__entry(
__field(int, jatm_budget)
),
TP_fast_assign(
__entry->jatm_budget = jatm_budget;
),
TP_printk("jatm enabled and remaining budget=%d", __entry->jatm_budget)
);
TRACE_EVENT(jatm_disable,
TP_PROTO(int reason, int frame_length, int real_usage, int jatm_budget),
TP_ARGS(reason, frame_length, real_usage, jatm_budget),
TP_STRUCT__entry(
__field(int, reason)
__field(int, frame_length)
__field(int, real_usage)
__field(int, jatm_budget)
),
TP_fast_assign(
__entry->reason = reason;
__entry->frame_length = frame_length;
__entry->real_usage = real_usage;
__entry->jatm_budget = jatm_budget;
),
TP_printk("stop reason=%d, frame_length=%d, real_usage=%d, remaining=%d",
__entry->reason, __entry->frame_length, __entry->real_usage, __entry->jatm_budget)
);
TRACE_EVENT(not_start_reason,
TP_PROTO(int reason),
TP_ARGS(reason),
TP_STRUCT__entry(
__field(int, reason)
),
TP_fast_assign(
__entry->reason = reason;
),
TP_printk("jatm not start reason=%d", __entry->reason)
);
TRACE_EVENT(try_enable_jatm,
TP_PROTO(int elapsed, int delay),
TP_ARGS(elapsed, delay),
TP_STRUCT__entry(
__field(int, elapsed)
__field(int, delay)
),
TP_fast_assign(
__entry->elapsed = elapsed;
__entry->delay = delay;
),
TP_printk("Try to enable JATM after %d ms and delay start %d ms",
__entry->elapsed, __entry->delay)
);
#endif
#endif /* _TRACE_MTK_THERMAL_H */
/* This part must be outside protection */
#undef TRACE_INCLUDE_PATH
#undef TRACE_INCLUDE_FILE
#define TRACE_INCLUDE_PATH .
#define TRACE_INCLUDE_FILE thermal_trace
#include <trace/define_trace.h>