浏览代码

Merge cpufreq fixes from v4.16-rc4.

Rafael J. Wysocki 7 年之前
父节点
当前提交
1179c2aeb4
共有 3 个文件被更改,包括 22 次插入8 次删除
  1. 3 3
      drivers/cpufreq/Kconfig.arm
  2. 7 1
      drivers/cpufreq/s3c24xx-cpufreq.c
  3. 12 4
      drivers/cpufreq/scpi-cpufreq.c

+ 3 - 3
drivers/cpufreq/Kconfig.arm

@@ -44,10 +44,10 @@ config ARM_DT_BL_CPUFREQ
 
 
 config ARM_SCPI_CPUFREQ
 config ARM_SCPI_CPUFREQ
 	tristate "SCPI based CPUfreq driver"
 	tristate "SCPI based CPUfreq driver"
-	depends on ARM_BIG_LITTLE_CPUFREQ && ARM_SCPI_PROTOCOL && COMMON_CLK_SCPI
+	depends on ARM_SCPI_PROTOCOL && COMMON_CLK_SCPI
 	help
 	help
-	  This adds the CPUfreq driver support for ARM big.LITTLE platforms
-	  using SCPI protocol for CPU power management.
+	  This adds the CPUfreq driver support for ARM platforms using SCPI
+	  protocol for CPU power management.
 
 
 	  This driver uses SCPI Message Protocol driver to interact with the
 	  This driver uses SCPI Message Protocol driver to interact with the
 	  firmware providing the CPU DVFS functionality.
 	  firmware providing the CPU DVFS functionality.

+ 7 - 1
drivers/cpufreq/s3c24xx-cpufreq.c

@@ -351,7 +351,13 @@ struct clk *s3c_cpufreq_clk_get(struct device *dev, const char *name)
 static int s3c_cpufreq_init(struct cpufreq_policy *policy)
 static int s3c_cpufreq_init(struct cpufreq_policy *policy)
 {
 {
 	policy->clk = clk_arm;
 	policy->clk = clk_arm;
-	return cpufreq_generic_init(policy, ftab, cpu_cur.info->latency);
+
+	policy->cpuinfo.transition_latency = cpu_cur.info->latency;
+
+	if (ftab)
+		return cpufreq_table_validate_and_show(policy, ftab);
+
+	return 0;
 }
 }
 
 
 static int __init s3c_cpufreq_initclks(void)
 static int __init s3c_cpufreq_initclks(void)

+ 12 - 4
drivers/cpufreq/scpi-cpufreq.c

@@ -51,15 +51,23 @@ static unsigned int scpi_cpufreq_get_rate(unsigned int cpu)
 static int
 static int
 scpi_cpufreq_set_target(struct cpufreq_policy *policy, unsigned int index)
 scpi_cpufreq_set_target(struct cpufreq_policy *policy, unsigned int index)
 {
 {
+	unsigned long freq = policy->freq_table[index].frequency;
 	struct scpi_data *priv = policy->driver_data;
 	struct scpi_data *priv = policy->driver_data;
-	u64 rate = policy->freq_table[index].frequency * 1000;
+	u64 rate = freq * 1000;
 	int ret;
 	int ret;
 
 
 	ret = clk_set_rate(priv->clk, rate);
 	ret = clk_set_rate(priv->clk, rate);
-	if (!ret && (clk_get_rate(priv->clk) != rate))
-		ret = -EIO;
 
 
-	return ret;
+	if (ret)
+		return ret;
+
+	if (clk_get_rate(priv->clk) != rate)
+		return -EIO;
+
+	arch_set_freq_scale(policy->related_cpus, freq,
+			    policy->cpuinfo.max_freq);
+
+	return 0;
 }
 }
 
 
 static int
 static int