From 0d8657dd3056063fb115946b10157477b5c70451 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 20 Nov 2023 09:09:45 +0000
Subject: [PATCH] enable lvds 1280x800
---
kernel/drivers/cpufreq/cpufreq_interactive.c | 90 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 89 insertions(+), 1 deletions(-)
diff --git a/kernel/drivers/cpufreq/cpufreq_interactive.c b/kernel/drivers/cpufreq/cpufreq_interactive.c
index 06f7679..d9c8c7d 100644
--- a/kernel/drivers/cpufreq/cpufreq_interactive.c
+++ b/kernel/drivers/cpufreq/cpufreq_interactive.c
@@ -37,6 +37,7 @@
#include <linux/slab.h>
#include <uapi/linux/sched/types.h>
#include <linux/sched/clock.h>
+#include <soc/rockchip/rockchip_system_monitor.h>
#define CREATE_TRACE_POINTS
#include <trace/events/cpufreq_interactive.h>
@@ -100,6 +101,7 @@
int touchboostpulse_duration_val;
/* End time of touchboost pulse in ktime converted to usecs */
u64 touchboostpulse_endtime;
+ bool touchboost, is_touchboosted;
#endif
bool boosted;
@@ -520,7 +522,8 @@
sampling_rate = icpu->ipolicy->tunables->sampling_rate;
icpu->last_sample_time = local_clock();
icpu->next_sample_jiffies = usecs_to_jiffies(sampling_rate) + jiffies;
- cpufreq_interactive_update(icpu);
+ icpu->work_in_progress = true;
+ irq_work_queue_on(&icpu->irq_work, icpu->cpu);
}
}
@@ -606,7 +609,44 @@
for_each_cpu(cpu, &tmp_mask) {
struct interactive_cpu *icpu = &per_cpu(interactive_cpu, cpu);
struct cpufreq_policy *policy;
+#ifdef CONFIG_ARCH_ROCKCHIP
+ struct interactive_tunables *tunables;
+ bool update_policy = false;
+ u64 now;
+ now = ktime_to_us(ktime_get());
+ if (!down_read_trylock(&icpu->enable_sem))
+ continue;
+
+ if (!icpu->ipolicy) {
+ up_read(&icpu->enable_sem);
+ continue;
+ }
+
+ tunables = icpu->ipolicy->tunables;
+ if (!tunables) {
+ up_read(&icpu->enable_sem);
+ continue;
+ }
+
+ if (tunables->touchboost &&
+ now > tunables->touchboostpulse_endtime) {
+ tunables->touchboost = false;
+ rockchip_monitor_clear_boosted();
+ update_policy = true;
+ }
+
+ if (!tunables->is_touchboosted && tunables->touchboost) {
+ rockchip_monitor_set_boosted();
+ update_policy = true;
+ }
+
+ tunables->is_touchboosted = tunables->touchboost;
+
+ up_read(&icpu->enable_sem);
+ if (update_policy)
+ cpufreq_update_policy(cpu);
+#endif
policy = cpufreq_cpu_get(cpu);
if (!policy)
continue;
@@ -1012,6 +1052,44 @@
return count;
}
+static ssize_t store_touchboost_freq(struct gov_attr_set *attr_set,
+ const char *buf, size_t count)
+{
+ struct interactive_tunables *tunables = to_tunables(attr_set);
+ unsigned long val;
+ int ret;
+
+ ret = kstrtoul(buf, 0, &val);
+ if (ret < 0)
+ return ret;
+
+ tunables->touchboost_freq = val;
+
+ return count;
+}
+
+static ssize_t show_touchboost_duration(struct gov_attr_set *attr_set, char *buf)
+{
+ struct interactive_tunables *tunables = to_tunables(attr_set);
+
+ return sprintf(buf, "%d\n", tunables->touchboostpulse_duration_val);
+}
+
+static ssize_t store_touchboost_duration(struct gov_attr_set *attr_set,
+ const char *buf, size_t count)
+{
+ struct interactive_tunables *tunables = to_tunables(attr_set);
+ int val, ret;
+
+ ret = kstrtoint(buf, 0, &val);
+ if (ret < 0)
+ return ret;
+
+ tunables->touchboostpulse_duration_val = val;
+
+ return count;
+}
+
show_one(hispeed_freq, "%u");
show_one(go_hispeed_load, "%lu");
show_one(min_sample_time, "%lu");
@@ -1019,6 +1097,7 @@
show_one(boost, "%u");
show_one(boostpulse_duration, "%u");
show_one(io_is_busy, "%u");
+show_one(touchboost_freq, "%lu");
gov_attr_rw(target_loads);
gov_attr_rw(above_hispeed_delay);
@@ -1031,6 +1110,8 @@
gov_attr_wo(boostpulse);
gov_attr_rw(boostpulse_duration);
gov_attr_rw(io_is_busy);
+gov_attr_rw(touchboost_freq);
+gov_attr_rw(touchboost_duration);
static struct attribute *interactive_attributes[] = {
&target_loads.attr,
@@ -1044,6 +1125,8 @@
&boostpulse.attr,
&boostpulse_duration.attr,
&io_is_busy.attr,
+ &touchboost_freq.attr,
+ &touchboost_duration.attr,
NULL
};
@@ -1245,6 +1328,7 @@
cpumask_set_cpu(i, &speedchange_cpumask);
pcpu->loc_hispeed_val_time =
ktime_to_us(ktime_get());
+ tunables->touchboost = true;
anyboost = 1;
}
@@ -1555,6 +1639,10 @@
idle_notifier_unregister(&cpufreq_interactive_idle_nb);
#ifdef CONFIG_ARCH_ROCKCHIP
input_unregister_handler(&cpufreq_interactive_input_handler);
+ if (tunables->touchboost) {
+ tunables->touchboost = false;
+ rockchip_monitor_clear_boosted();
+ }
#endif
}
--
Gitblit v1.6.2