Loading drivers/thermal/msm_thermal.c +22 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,10 @@ #include <soc/qcom/rpm-smd.h> #include <soc/qcom/scm.h> #define CREATE_TRACE_POINTS #define TRACE_MSM_THERMAL #include <trace/trace_thermal.h> #define MAX_CURRENT_UA 100000 #define MAX_RAILS 5 #define MAX_THRESHOLD 2 Loading Loading @@ -368,7 +372,13 @@ static void update_cpu_freq(int cpu) int ret = 0; if (cpu_online(cpu)) { trace_thermal_pre_frequency_mit(cpu, cpus[cpu].limited_max_freq, cpus[cpu].limited_min_freq); ret = cpufreq_update_policy(cpu); trace_thermal_post_frequency_mit(cpu, cpufreq_quick_get_max(cpu), cpus[cpu].limited_min_freq); if (ret) pr_err("Unable to update policy for cpu:%d. err:%d\n", cpu, ret); Loading Loading @@ -1824,10 +1834,13 @@ static void __ref do_core_control(long temp) continue; pr_info("Set Offline: CPU%d Temp: %ld\n", i, temp); trace_thermal_pre_core_offline(i); ret = cpu_down(i); if (ret) pr_err("Error %d offline core %d\n", ret, i); trace_thermal_post_core_offline(i, cpumask_test_cpu(i, cpu_online_mask)); cpus_offlined |= BIT(i); break; } Loading @@ -1846,10 +1859,13 @@ static void __ref do_core_control(long temp) */ if (cpu_online(i)) continue; trace_thermal_pre_core_online(i); ret = cpu_up(i); if (ret) pr_err("Error %d online core %d\n", ret, i); trace_thermal_post_core_online(i, cpumask_test_cpu(i, cpu_online_mask)); break; } } Loading @@ -1872,15 +1888,19 @@ static int __ref update_offline_cores(int val) if (cpus_offlined & BIT(cpu)) { if (!cpu_online(cpu)) continue; trace_thermal_pre_core_offline(cpu); ret = cpu_down(cpu); if (ret) pr_err("Unable to offline CPU%d. err:%d\n", cpu, ret); else pr_debug("Offlined CPU%d\n", cpu); trace_thermal_post_core_offline(cpu, cpumask_test_cpu(cpu, cpu_online_mask)); } else if (online_core && (previous_cpus_offlined & BIT(cpu))) { if (cpu_online(cpu)) continue; trace_thermal_pre_core_online(cpu); ret = cpu_up(cpu); if (ret && ret == notifier_to_errno(NOTIFY_BAD)) pr_debug("Onlining CPU%d is vetoed\n", cpu); Loading @@ -1889,6 +1909,8 @@ static int __ref update_offline_cores(int val) cpu, ret); else pr_debug("Onlined CPU%d\n", cpu); trace_thermal_post_core_online(cpu, cpumask_test_cpu(cpu, cpu_online_mask)); } } return ret; Loading include/trace/trace_thermal.h +105 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,111 @@ #define _TRACE_THERMAL_H #include <linux/tracepoint.h> #ifdef TRACE_MSM_THERMAL DECLARE_EVENT_CLASS(msm_thermal_post_core_ctl, TP_PROTO(unsigned int cpu, unsigned int online), TP_ARGS(cpu, online), TP_STRUCT__entry( __field(unsigned int, cpu) __field(unsigned int, online) ), TP_fast_assign( __entry->cpu = cpu; __entry->online = online; ), TP_printk("device=cpu%u online=%u", __entry->cpu, __entry->online) ); DECLARE_EVENT_CLASS(msm_thermal_pre_core_ctl, TP_PROTO(unsigned int cpu), TP_ARGS(cpu), TP_STRUCT__entry( __field(unsigned int, cpu) ), TP_fast_assign( __entry->cpu = cpu; ), TP_printk("device=cpu%u", __entry->cpu) ); DEFINE_EVENT(msm_thermal_pre_core_ctl, thermal_pre_core_offline, TP_PROTO(unsigned int cpu), TP_ARGS(cpu) ); DEFINE_EVENT(msm_thermal_post_core_ctl, thermal_post_core_offline, TP_PROTO(unsigned int cpu, unsigned int online), TP_ARGS(cpu, online) ); DEFINE_EVENT(msm_thermal_pre_core_ctl, thermal_pre_core_online, TP_PROTO(unsigned int cpu), TP_ARGS(cpu) ); DEFINE_EVENT(msm_thermal_post_core_ctl, thermal_post_core_online, TP_PROTO(unsigned int cpu, unsigned int online), TP_ARGS(cpu, online) ); DECLARE_EVENT_CLASS(msm_thermal_freq_mit, TP_PROTO(unsigned int cpu, unsigned int max_freq, unsigned int min_freq), TP_ARGS(cpu, max_freq, min_freq), TP_STRUCT__entry( __field(unsigned int, cpu) __field(unsigned int, max_freq) __field(unsigned int, min_freq) ), TP_fast_assign( __entry->cpu = cpu; __entry->max_freq = max_freq; __entry->min_freq = min_freq; ), TP_printk("device=cpu%u max_frequency=%u min_frequency=%u", __entry->cpu, __entry->max_freq, __entry->min_freq) ); DEFINE_EVENT(msm_thermal_freq_mit, thermal_pre_frequency_mit, TP_PROTO(unsigned int cpu, unsigned int max_freq, unsigned int min_freq), TP_ARGS(cpu, max_freq, min_freq) ); DEFINE_EVENT(msm_thermal_freq_mit, thermal_post_frequency_mit, TP_PROTO(unsigned int cpu, unsigned int max_freq, unsigned int min_freq), TP_ARGS(cpu, max_freq, min_freq) ); #else DECLARE_EVENT_CLASS(tsens, TP_PROTO(unsigned long temp, unsigned int sensor), Loading Loading @@ -60,7 +164,7 @@ DEFINE_EVENT(tsens, tsens_threshold_clear, TP_ARGS(temp, sensor) ); #endif #endif #undef TRACE_INCLUDE_PATH #undef TRACE_INCLUDE_FILE #define TRACE_INCLUDE_PATH . Loading Loading
drivers/thermal/msm_thermal.c +22 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,10 @@ #include <soc/qcom/rpm-smd.h> #include <soc/qcom/scm.h> #define CREATE_TRACE_POINTS #define TRACE_MSM_THERMAL #include <trace/trace_thermal.h> #define MAX_CURRENT_UA 100000 #define MAX_RAILS 5 #define MAX_THRESHOLD 2 Loading Loading @@ -368,7 +372,13 @@ static void update_cpu_freq(int cpu) int ret = 0; if (cpu_online(cpu)) { trace_thermal_pre_frequency_mit(cpu, cpus[cpu].limited_max_freq, cpus[cpu].limited_min_freq); ret = cpufreq_update_policy(cpu); trace_thermal_post_frequency_mit(cpu, cpufreq_quick_get_max(cpu), cpus[cpu].limited_min_freq); if (ret) pr_err("Unable to update policy for cpu:%d. err:%d\n", cpu, ret); Loading Loading @@ -1824,10 +1834,13 @@ static void __ref do_core_control(long temp) continue; pr_info("Set Offline: CPU%d Temp: %ld\n", i, temp); trace_thermal_pre_core_offline(i); ret = cpu_down(i); if (ret) pr_err("Error %d offline core %d\n", ret, i); trace_thermal_post_core_offline(i, cpumask_test_cpu(i, cpu_online_mask)); cpus_offlined |= BIT(i); break; } Loading @@ -1846,10 +1859,13 @@ static void __ref do_core_control(long temp) */ if (cpu_online(i)) continue; trace_thermal_pre_core_online(i); ret = cpu_up(i); if (ret) pr_err("Error %d online core %d\n", ret, i); trace_thermal_post_core_online(i, cpumask_test_cpu(i, cpu_online_mask)); break; } } Loading @@ -1872,15 +1888,19 @@ static int __ref update_offline_cores(int val) if (cpus_offlined & BIT(cpu)) { if (!cpu_online(cpu)) continue; trace_thermal_pre_core_offline(cpu); ret = cpu_down(cpu); if (ret) pr_err("Unable to offline CPU%d. err:%d\n", cpu, ret); else pr_debug("Offlined CPU%d\n", cpu); trace_thermal_post_core_offline(cpu, cpumask_test_cpu(cpu, cpu_online_mask)); } else if (online_core && (previous_cpus_offlined & BIT(cpu))) { if (cpu_online(cpu)) continue; trace_thermal_pre_core_online(cpu); ret = cpu_up(cpu); if (ret && ret == notifier_to_errno(NOTIFY_BAD)) pr_debug("Onlining CPU%d is vetoed\n", cpu); Loading @@ -1889,6 +1909,8 @@ static int __ref update_offline_cores(int val) cpu, ret); else pr_debug("Onlined CPU%d\n", cpu); trace_thermal_post_core_online(cpu, cpumask_test_cpu(cpu, cpu_online_mask)); } } return ret; Loading
include/trace/trace_thermal.h +105 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,111 @@ #define _TRACE_THERMAL_H #include <linux/tracepoint.h> #ifdef TRACE_MSM_THERMAL DECLARE_EVENT_CLASS(msm_thermal_post_core_ctl, TP_PROTO(unsigned int cpu, unsigned int online), TP_ARGS(cpu, online), TP_STRUCT__entry( __field(unsigned int, cpu) __field(unsigned int, online) ), TP_fast_assign( __entry->cpu = cpu; __entry->online = online; ), TP_printk("device=cpu%u online=%u", __entry->cpu, __entry->online) ); DECLARE_EVENT_CLASS(msm_thermal_pre_core_ctl, TP_PROTO(unsigned int cpu), TP_ARGS(cpu), TP_STRUCT__entry( __field(unsigned int, cpu) ), TP_fast_assign( __entry->cpu = cpu; ), TP_printk("device=cpu%u", __entry->cpu) ); DEFINE_EVENT(msm_thermal_pre_core_ctl, thermal_pre_core_offline, TP_PROTO(unsigned int cpu), TP_ARGS(cpu) ); DEFINE_EVENT(msm_thermal_post_core_ctl, thermal_post_core_offline, TP_PROTO(unsigned int cpu, unsigned int online), TP_ARGS(cpu, online) ); DEFINE_EVENT(msm_thermal_pre_core_ctl, thermal_pre_core_online, TP_PROTO(unsigned int cpu), TP_ARGS(cpu) ); DEFINE_EVENT(msm_thermal_post_core_ctl, thermal_post_core_online, TP_PROTO(unsigned int cpu, unsigned int online), TP_ARGS(cpu, online) ); DECLARE_EVENT_CLASS(msm_thermal_freq_mit, TP_PROTO(unsigned int cpu, unsigned int max_freq, unsigned int min_freq), TP_ARGS(cpu, max_freq, min_freq), TP_STRUCT__entry( __field(unsigned int, cpu) __field(unsigned int, max_freq) __field(unsigned int, min_freq) ), TP_fast_assign( __entry->cpu = cpu; __entry->max_freq = max_freq; __entry->min_freq = min_freq; ), TP_printk("device=cpu%u max_frequency=%u min_frequency=%u", __entry->cpu, __entry->max_freq, __entry->min_freq) ); DEFINE_EVENT(msm_thermal_freq_mit, thermal_pre_frequency_mit, TP_PROTO(unsigned int cpu, unsigned int max_freq, unsigned int min_freq), TP_ARGS(cpu, max_freq, min_freq) ); DEFINE_EVENT(msm_thermal_freq_mit, thermal_post_frequency_mit, TP_PROTO(unsigned int cpu, unsigned int max_freq, unsigned int min_freq), TP_ARGS(cpu, max_freq, min_freq) ); #else DECLARE_EVENT_CLASS(tsens, TP_PROTO(unsigned long temp, unsigned int sensor), Loading Loading @@ -60,7 +164,7 @@ DEFINE_EVENT(tsens, tsens_threshold_clear, TP_ARGS(temp, sensor) ); #endif #endif #undef TRACE_INCLUDE_PATH #undef TRACE_INCLUDE_FILE #define TRACE_INCLUDE_PATH . Loading