Loading arch/arm/configs/qcs405-perf_defconfig +8 −0 Original line number Diff line number Diff line Loading @@ -252,6 +252,14 @@ CONFIG_SPI_SPIDEV=y CONFIG_PINCTRL_QCS405=y CONFIG_GPIOLIB=y CONFIG_THERMAL=y CONFIG_THERMAL_GOV_USER_SPACE=y CONFIG_THERMAL_GOV_LOW_LIMITS=y CONFIG_CPU_THERMAL=y CONFIG_DEVFREQ_THERMAL=y CONFIG_THERMAL_TSENS=y CONFIG_QTI_VIRTUAL_SENSOR=y CONFIG_QTI_QMI_COOLING_DEVICE=y CONFIG_REGULATOR_COOLING_DEVICE=y CONFIG_REGULATOR=y CONFIG_REGULATOR_FIXED_VOLTAGE=y CONFIG_REGULATOR_FAN53555=y Loading arch/arm/configs/qcs405_defconfig +8 −0 Original line number Diff line number Diff line Loading @@ -261,6 +261,14 @@ CONFIG_PINCTRL_QCS405=y CONFIG_GPIOLIB=y CONFIG_POWER_SUPPLY=y CONFIG_THERMAL=y CONFIG_THERMAL_GOV_USER_SPACE=y CONFIG_THERMAL_GOV_LOW_LIMITS=y CONFIG_CPU_THERMAL=y CONFIG_DEVFREQ_THERMAL=y CONFIG_THERMAL_TSENS=y CONFIG_QTI_VIRTUAL_SENSOR=y CONFIG_QTI_QMI_COOLING_DEVICE=y CONFIG_REGULATOR_COOLING_DEVICE=y CONFIG_REGULATOR=y CONFIG_REGULATOR_FIXED_VOLTAGE=y CONFIG_REGULATOR_FAN53555=y Loading arch/arm64/configs/qcs405-perf_defconfig +10 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ CONFIG_PM_WAKELOCKS_LIMIT=0 # CONFIG_PM_WAKELOCKS_GC is not set CONFIG_CPU_IDLE=y CONFIG_ARM_CPUIDLE=y CONFIG_CPU_FREQ=y CONFIG_NET=y CONFIG_PACKET=y CONFIG_UNIX=y Loading Loading @@ -249,6 +250,15 @@ CONFIG_SLIMBUS=y CONFIG_SLIMBUS_MSM_NGD=y CONFIG_PINCTRL_QCS405=y CONFIG_THERMAL=y CONFIG_THERMAL_WRITABLE_TRIPS=y CONFIG_THERMAL_GOV_USER_SPACE=y CONFIG_THERMAL_GOV_LOW_LIMITS=y CONFIG_CPU_THERMAL=y CONFIG_DEVFREQ_THERMAL=y CONFIG_THERMAL_TSENS=y CONFIG_QTI_VIRTUAL_SENSOR=y CONFIG_QTI_QMI_COOLING_DEVICE=y CONFIG_REGULATOR_COOLING_DEVICE=y CONFIG_MFD_SYSCON=y CONFIG_REGULATOR=y CONFIG_REGULATOR_FIXED_VOLTAGE=y Loading arch/arm64/configs/qcs405_defconfig +10 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ CONFIG_PM_WAKELOCKS_LIMIT=0 CONFIG_PM_DEBUG=y CONFIG_CPU_IDLE=y CONFIG_ARM_CPUIDLE=y CONFIG_CPU_FREQ=y CONFIG_NET=y CONFIG_PACKET=y CONFIG_UNIX=y Loading Loading @@ -259,6 +260,15 @@ CONFIG_SLIMBUS=y CONFIG_SLIMBUS_MSM_NGD=y CONFIG_PINCTRL_QCS405=y CONFIG_THERMAL=y CONFIG_THERMAL_WRITABLE_TRIPS=y CONFIG_THERMAL_GOV_USER_SPACE=y CONFIG_THERMAL_GOV_LOW_LIMITS=y CONFIG_CPU_THERMAL=y CONFIG_DEVFREQ_THERMAL=y CONFIG_THERMAL_TSENS=y CONFIG_QTI_VIRTUAL_SENSOR=y CONFIG_QTI_QMI_COOLING_DEVICE=y CONFIG_REGULATOR_COOLING_DEVICE=y CONFIG_MFD_SYSCON=y CONFIG_REGULATOR=y CONFIG_REGULATOR_FIXED_VOLTAGE=y Loading drivers/cpufreq/qcom-cpufreq.c +48 −0 Original line number Diff line number Diff line Loading @@ -27,10 +27,13 @@ #include <linux/err.h> #include <linux/platform_device.h> #include <linux/of.h> #include <linux/of_device.h> #include <linux/cpu_cooling.h> #include <trace/events/power.h> static DEFINE_MUTEX(l2bw_lock); static struct thermal_cooling_device *cdev[NR_CPUS]; static struct clk *cpu_clk[NR_CPUS]; static struct clk *l2_clk; static DEFINE_PER_CPU(struct cpufreq_frequency_table *, freq_table); Loading Loading @@ -306,6 +309,50 @@ static struct freq_attr *msm_freq_attr[] = { NULL, }; static void msm_cpufreq_ready(struct cpufreq_policy *policy) { struct device_node *np, *lmh_node; unsigned int cpu = 0; if (cdev[policy->cpu]) return; np = of_cpu_device_node_get(policy->cpu); if (WARN_ON(!np)) return; /* * For now, just loading the cooling device; * thermal DT code takes care of matching them. */ if (of_find_property(np, "#cooling-cells", NULL)) { lmh_node = of_parse_phandle(np, "qcom,lmh-dcvs", 0); if (lmh_node) { of_node_put(lmh_node); goto ready_exit; } for_each_cpu(cpu, policy->related_cpus) { of_node_put(np); np = of_cpu_device_node_get(cpu); if (WARN_ON(!np)) return; cdev[cpu] = of_cpufreq_cooling_register(np, policy); if (IS_ERR(cdev[cpu])) { pr_err( "running cpufreq for CPU%d without cooling dev: %ld\n", cpu, PTR_ERR(cdev[cpu])); cdev[cpu] = NULL; } } } ready_exit: of_node_put(np); } static struct cpufreq_driver msm_cpufreq_driver = { /* lps calculations are handled here. */ .flags = CPUFREQ_STICKY | CPUFREQ_CONST_LOOPS | Loading @@ -317,6 +364,7 @@ static struct cpufreq_driver msm_cpufreq_driver = { .get = msm_cpufreq_get_freq, .name = "msm", .attr = msm_freq_attr, .ready = msm_cpufreq_ready, }; static struct cpufreq_frequency_table *cpufreq_parse_dt(struct device *dev, Loading Loading
arch/arm/configs/qcs405-perf_defconfig +8 −0 Original line number Diff line number Diff line Loading @@ -252,6 +252,14 @@ CONFIG_SPI_SPIDEV=y CONFIG_PINCTRL_QCS405=y CONFIG_GPIOLIB=y CONFIG_THERMAL=y CONFIG_THERMAL_GOV_USER_SPACE=y CONFIG_THERMAL_GOV_LOW_LIMITS=y CONFIG_CPU_THERMAL=y CONFIG_DEVFREQ_THERMAL=y CONFIG_THERMAL_TSENS=y CONFIG_QTI_VIRTUAL_SENSOR=y CONFIG_QTI_QMI_COOLING_DEVICE=y CONFIG_REGULATOR_COOLING_DEVICE=y CONFIG_REGULATOR=y CONFIG_REGULATOR_FIXED_VOLTAGE=y CONFIG_REGULATOR_FAN53555=y Loading
arch/arm/configs/qcs405_defconfig +8 −0 Original line number Diff line number Diff line Loading @@ -261,6 +261,14 @@ CONFIG_PINCTRL_QCS405=y CONFIG_GPIOLIB=y CONFIG_POWER_SUPPLY=y CONFIG_THERMAL=y CONFIG_THERMAL_GOV_USER_SPACE=y CONFIG_THERMAL_GOV_LOW_LIMITS=y CONFIG_CPU_THERMAL=y CONFIG_DEVFREQ_THERMAL=y CONFIG_THERMAL_TSENS=y CONFIG_QTI_VIRTUAL_SENSOR=y CONFIG_QTI_QMI_COOLING_DEVICE=y CONFIG_REGULATOR_COOLING_DEVICE=y CONFIG_REGULATOR=y CONFIG_REGULATOR_FIXED_VOLTAGE=y CONFIG_REGULATOR_FAN53555=y Loading
arch/arm64/configs/qcs405-perf_defconfig +10 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ CONFIG_PM_WAKELOCKS_LIMIT=0 # CONFIG_PM_WAKELOCKS_GC is not set CONFIG_CPU_IDLE=y CONFIG_ARM_CPUIDLE=y CONFIG_CPU_FREQ=y CONFIG_NET=y CONFIG_PACKET=y CONFIG_UNIX=y Loading Loading @@ -249,6 +250,15 @@ CONFIG_SLIMBUS=y CONFIG_SLIMBUS_MSM_NGD=y CONFIG_PINCTRL_QCS405=y CONFIG_THERMAL=y CONFIG_THERMAL_WRITABLE_TRIPS=y CONFIG_THERMAL_GOV_USER_SPACE=y CONFIG_THERMAL_GOV_LOW_LIMITS=y CONFIG_CPU_THERMAL=y CONFIG_DEVFREQ_THERMAL=y CONFIG_THERMAL_TSENS=y CONFIG_QTI_VIRTUAL_SENSOR=y CONFIG_QTI_QMI_COOLING_DEVICE=y CONFIG_REGULATOR_COOLING_DEVICE=y CONFIG_MFD_SYSCON=y CONFIG_REGULATOR=y CONFIG_REGULATOR_FIXED_VOLTAGE=y Loading
arch/arm64/configs/qcs405_defconfig +10 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ CONFIG_PM_WAKELOCKS_LIMIT=0 CONFIG_PM_DEBUG=y CONFIG_CPU_IDLE=y CONFIG_ARM_CPUIDLE=y CONFIG_CPU_FREQ=y CONFIG_NET=y CONFIG_PACKET=y CONFIG_UNIX=y Loading Loading @@ -259,6 +260,15 @@ CONFIG_SLIMBUS=y CONFIG_SLIMBUS_MSM_NGD=y CONFIG_PINCTRL_QCS405=y CONFIG_THERMAL=y CONFIG_THERMAL_WRITABLE_TRIPS=y CONFIG_THERMAL_GOV_USER_SPACE=y CONFIG_THERMAL_GOV_LOW_LIMITS=y CONFIG_CPU_THERMAL=y CONFIG_DEVFREQ_THERMAL=y CONFIG_THERMAL_TSENS=y CONFIG_QTI_VIRTUAL_SENSOR=y CONFIG_QTI_QMI_COOLING_DEVICE=y CONFIG_REGULATOR_COOLING_DEVICE=y CONFIG_MFD_SYSCON=y CONFIG_REGULATOR=y CONFIG_REGULATOR_FIXED_VOLTAGE=y Loading
drivers/cpufreq/qcom-cpufreq.c +48 −0 Original line number Diff line number Diff line Loading @@ -27,10 +27,13 @@ #include <linux/err.h> #include <linux/platform_device.h> #include <linux/of.h> #include <linux/of_device.h> #include <linux/cpu_cooling.h> #include <trace/events/power.h> static DEFINE_MUTEX(l2bw_lock); static struct thermal_cooling_device *cdev[NR_CPUS]; static struct clk *cpu_clk[NR_CPUS]; static struct clk *l2_clk; static DEFINE_PER_CPU(struct cpufreq_frequency_table *, freq_table); Loading Loading @@ -306,6 +309,50 @@ static struct freq_attr *msm_freq_attr[] = { NULL, }; static void msm_cpufreq_ready(struct cpufreq_policy *policy) { struct device_node *np, *lmh_node; unsigned int cpu = 0; if (cdev[policy->cpu]) return; np = of_cpu_device_node_get(policy->cpu); if (WARN_ON(!np)) return; /* * For now, just loading the cooling device; * thermal DT code takes care of matching them. */ if (of_find_property(np, "#cooling-cells", NULL)) { lmh_node = of_parse_phandle(np, "qcom,lmh-dcvs", 0); if (lmh_node) { of_node_put(lmh_node); goto ready_exit; } for_each_cpu(cpu, policy->related_cpus) { of_node_put(np); np = of_cpu_device_node_get(cpu); if (WARN_ON(!np)) return; cdev[cpu] = of_cpufreq_cooling_register(np, policy); if (IS_ERR(cdev[cpu])) { pr_err( "running cpufreq for CPU%d without cooling dev: %ld\n", cpu, PTR_ERR(cdev[cpu])); cdev[cpu] = NULL; } } } ready_exit: of_node_put(np); } static struct cpufreq_driver msm_cpufreq_driver = { /* lps calculations are handled here. */ .flags = CPUFREQ_STICKY | CPUFREQ_CONST_LOOPS | Loading @@ -317,6 +364,7 @@ static struct cpufreq_driver msm_cpufreq_driver = { .get = msm_cpufreq_get_freq, .name = "msm", .attr = msm_freq_attr, .ready = msm_cpufreq_ready, }; static struct cpufreq_frequency_table *cpufreq_parse_dt(struct device *dev, Loading