aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/cpufreq/Kconfig.arm9
-rw-r--r--drivers/cpufreq/Makefile2
-rw-r--r--drivers/cpufreq/arm_big_little.c (renamed from drivers/cpufreq/vexpress_bL_cpufreq.c)101
3 files changed, 50 insertions, 62 deletions
diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm
index 2d4983aa23b..62944f40dca 100644
--- a/drivers/cpufreq/Kconfig.arm
+++ b/drivers/cpufreq/Kconfig.arm
@@ -114,12 +114,9 @@ config ARM_HIGHBANK_CPUFREQ
If in doubt, say N.
-config ARM_VEXPRESS_BL_CPUFREQ
- tristate "CPUfreq driver for ARM Vexpress big.LITTLE CPUs"
- depends on ARCH_VEXPRESS && CPU_FREQ
+config ARM_BIG_LITTLE_CPUFREQ
+ tristate "CPUfreq driver for ARM big LITTLE CPUs"
depends on ARM_CPU_TOPOLOGY
help
- This enables the CPUfreq driver for ARM Vexpress big.LITTLE
- platform.
-
+ This enables the CPUfreq driver for ARM big.LITTLE platforms.
If in doubt, say N.
diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile
index 039024c99e4..7071d4ec666 100644
--- a/drivers/cpufreq/Makefile
+++ b/drivers/cpufreq/Makefile
@@ -57,7 +57,7 @@ obj-$(CONFIG_ARM_OMAP2PLUS_CPUFREQ) += omap-cpufreq.o
obj-$(CONFIG_ARM_SPEAR_CPUFREQ) += spear-cpufreq.o
obj-$(CONFIG_ARM_HIGHBANK_CPUFREQ) += highbank-cpufreq.o
obj-$(CONFIG_ARM_IMX6Q_CPUFREQ) += imx6q-cpufreq.o
-obj-$(CONFIG_ARM_VEXPRESS_BL_CPUFREQ) += vexpress_bL_cpufreq.o
+obj-$(CONFIG_ARM_BIG_LITTLE_CPUFREQ) += arm_big_little.o
##################################################################################
# PowerPC platform drivers
diff --git a/drivers/cpufreq/vexpress_bL_cpufreq.c b/drivers/cpufreq/arm_big_little.c
index 253d59f9635..a89f4021456 100644
--- a/drivers/cpufreq/vexpress_bL_cpufreq.c
+++ b/drivers/cpufreq/arm_big_little.c
@@ -1,10 +1,12 @@
/*
- * Vexpress big.LITTLE CPUFreq support
- * Based on mach-integrator
+ * ARM big.LITTLE Platforms CPUFreq support
*
* Copyright (C) 2012 ARM Ltd.
* Author: Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com>
*
+ * Copyright (C) 2012 Linaro.
+ * Viresh Kumar <viresh.kumar@linaro.org>
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
@@ -14,27 +16,21 @@
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
#include <linux/cpufreq.h>
#include <linux/cpumask.h>
-#include <linux/init.h>
-#include <linux/io.h>
-#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/of_platform.h>
-#include <linux/sched.h>
#include <linux/slab.h>
-#include <linux/smp.h>
-#include <linux/spinlock.h>
-#include <linux/sysfs.h>
#include <linux/types.h>
-
#include <linux/vexpress.h>
-
#include <asm/topology.h>
-#define VEXPRESS_MAX_CLUSTER 2
+#define MAX_CLUSTERS 2
-static struct cpufreq_frequency_table *freq_table[VEXPRESS_MAX_CLUSTER];
+static struct cpufreq_frequency_table *freq_table[MAX_CLUSTERS];
static atomic_t freq_table_users = ATOMIC_INIT(0);
/*
@@ -48,26 +44,22 @@ static int cpu_to_cluster(int cpu)
}
/* Validate policy frequency range */
-static int vexpress_cpufreq_verify_policy(struct cpufreq_policy *policy)
+static int bl_cpufreq_verify_policy(struct cpufreq_policy *policy)
{
- uint32_t cur_cluster = cpu_to_cluster(policy->cpu);
+ u32 cur_cluster = cpu_to_cluster(policy->cpu);
/* This call takes care of it all using freq_table */
return cpufreq_frequency_table_verify(policy, freq_table[cur_cluster]);
}
/* Set clock frequency */
-static int vexpress_cpufreq_set_target(struct cpufreq_policy *policy,
- unsigned int target_freq, unsigned int relation)
+static int bl_cpufreq_set_target(struct cpufreq_policy *policy,
+ unsigned int target_freq, unsigned int relation)
{
- uint32_t cpu = policy->cpu;
struct cpufreq_freqs freqs;
- uint32_t freq_tab_idx;
- uint32_t cur_cluster;
+ u32 cpu = policy->cpu, freq_tab_idx, cur_cluster;
int ret = 0;
- /* Read current clock rate */
-
/* ASSUMPTION: The cpu can't be hotplugged in this function */
cur_cluster = cpu_to_cluster(policy->cpu);
@@ -76,7 +68,7 @@ static int vexpress_cpufreq_set_target(struct cpufreq_policy *policy,
/* Determine valid target frequency using freq_table */
cpufreq_frequency_table_target(policy, freq_table[cur_cluster],
- target_freq, relation, &freq_tab_idx);
+ target_freq, relation, &freq_tab_idx);
freqs.new = freq_table[cur_cluster][freq_tab_idx].frequency;
freqs.cpu = policy->cpu;
@@ -104,10 +96,10 @@ static int vexpress_cpufreq_set_target(struct cpufreq_policy *policy,
}
/* Get current clock frequency */
-static unsigned int vexpress_cpufreq_get(unsigned int cpu)
+static unsigned int bl_cpufreq_get(unsigned int cpu)
{
- uint32_t freq = 0;
- uint32_t cur_cluster = cpu_to_cluster(cpu);
+ u32 freq = 0;
+ u32 cur_cluster = cpu_to_cluster(cpu);
/*
* Read current clock rate with vexpress_spc call
@@ -119,23 +111,23 @@ static unsigned int vexpress_cpufreq_get(unsigned int cpu)
}
/* translate the integer array into cpufreq_frequency_table entries */
-static inline void _cpufreq_copy_table_from_array(uint32_t *table,
+static inline void _cpufreq_copy_table_from_array(u32 *table,
struct cpufreq_frequency_table *freq_table, int size)
{
int i;
for (i = 0; i < size; i++) {
freq_table[i].index = i;
- freq_table[i].frequency = table[i] / 1000; /* in kHZ */
+ freq_table[i].frequency = table[i] / 1000; /* in kHZ */
}
freq_table[i].index = size;
freq_table[i].frequency = CPUFREQ_TABLE_END;
}
-static int vexpress_cpufreq_of_init(void)
+static int bl_cpufreq_of_init(void)
{
- uint32_t cpu_opp_num;
- struct cpufreq_frequency_table *freqtable[VEXPRESS_MAX_CLUSTER];
- uint32_t *cpu_freqs;
+ u32 cpu_opp_num;
+ struct cpufreq_frequency_table *freqtable[MAX_CLUSTERS];
+ u32 *cpu_freqs;
int ret = 0, cluster_id = 0, len;
struct device_node *cluster = NULL;
const struct property *pp;
@@ -153,7 +145,7 @@ static int vexpress_cpufreq_of_init(void)
if (!cpu_opp_num)
return -ENODATA;
- cpu_freqs = kzalloc(sizeof(uint32_t) * cpu_opp_num, GFP_KERNEL);
+ cpu_freqs = kzalloc(sizeof(u32) * cpu_opp_num, GFP_KERNEL);
freqtable[cluster_id] =
kzalloc(sizeof(struct cpufreq_frequency_table) *
(cpu_opp_num + 1), GFP_KERNEL);
@@ -178,13 +170,13 @@ free_mem:
}
/* Per-CPU initialization */
-static int vexpress_cpufreq_init(struct cpufreq_policy *policy)
+static int bl_cpufreq_init(struct cpufreq_policy *policy)
{
int result = 0;
- uint32_t cur_cluster = cpu_to_cluster(policy->cpu);
+ u32 cur_cluster = cpu_to_cluster(policy->cpu);
if (atomic_inc_return(&freq_table_users) == 1)
- result = vexpress_cpufreq_of_init();
+ result = bl_cpufreq_of_init();
if (freq_table[cur_cluster] == NULL)
result = -ENODATA;
@@ -195,8 +187,8 @@ static int vexpress_cpufreq_init(struct cpufreq_policy *policy)
return result;
}
- result =
- cpufreq_frequency_table_cpuinfo(policy, freq_table[cur_cluster]);
+ result = cpufreq_frequency_table_cpuinfo(policy,
+ freq_table[cur_cluster]);
if (result)
return result;
@@ -207,7 +199,7 @@ static int vexpress_cpufreq_init(struct cpufreq_policy *policy)
policy->max = policy->cpuinfo.max_freq;
policy->cpuinfo.transition_latency = 1000000; /* 1 ms assumed */
- policy->cur = vexpress_cpufreq_get(policy->cpu);
+ policy->cur = bl_cpufreq_get(policy->cpu);
cpumask_copy(policy->cpus, topology_core_cpumask(policy->cpu));
cpumask_copy(policy->related_cpus, policy->cpus);
@@ -217,38 +209,37 @@ static int vexpress_cpufreq_init(struct cpufreq_policy *policy)
}
/* Export freq_table to sysfs */
-static struct freq_attr *vexpress_cpufreq_attr[] = {
+static struct freq_attr *bl_cpufreq_attr[] = {
&cpufreq_freq_attr_scaling_available_freqs,
NULL,
};
-static struct cpufreq_driver vexpress_cpufreq_driver = {
+static struct cpufreq_driver bl_cpufreq_driver = {
+ .name = "arm-big-little",
.flags = CPUFREQ_STICKY,
- .verify = vexpress_cpufreq_verify_policy,
- .target = vexpress_cpufreq_set_target,
- .get = vexpress_cpufreq_get,
- .init = vexpress_cpufreq_init,
- .name = "vexpress-spc",
- .attr = vexpress_cpufreq_attr,
+ .verify = bl_cpufreq_verify_policy,
+ .target = bl_cpufreq_set_target,
+ .get = bl_cpufreq_get,
+ .init = bl_cpufreq_init,
+ .attr = bl_cpufreq_attr,
};
-static int __init vexpress_cpufreq_modinit(void)
+static int __init bl_cpufreq_modinit(void)
{
if (!vexpress_spc_check_loaded()) {
pr_info("vexpress cpufreq not initialised because no SPC found\n");
return -ENODEV;
}
- return cpufreq_register_driver(&vexpress_cpufreq_driver);
+ return cpufreq_register_driver(&bl_cpufreq_driver);
}
+module_init(bl_cpufreq_modinit);
-static void __exit vexpress_cpufreq_modexit(void)
+static void __exit bl_cpufreq_modexit(void)
{
- cpufreq_unregister_driver(&vexpress_cpufreq_driver);
+ cpufreq_unregister_driver(&bl_cpufreq_driver);
}
+module_exit(bl_cpufreq_modexit);
-MODULE_DESCRIPTION("cpufreq driver for ARM vexpress big.LITTLE platform");
+MODULE_DESCRIPTION("ARM big LITTLE platforms cpufreq driver");
MODULE_LICENSE("GPL");
-
-module_init(vexpress_cpufreq_modinit);
-module_exit(vexpress_cpufreq_modexit);