summaryrefslogtreecommitdiff
path: root/drivers/misc/vexpress/arm-spc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/misc/vexpress/arm-spc.c')
-rw-r--r--drivers/misc/vexpress/arm-spc.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/misc/vexpress/arm-spc.c b/drivers/misc/vexpress/arm-spc.c
index 5708bb35a10..913dd087282 100644
--- a/drivers/misc/vexpress/arm-spc.c
+++ b/drivers/misc/vexpress/arm-spc.c
@@ -117,6 +117,7 @@ struct vexpress_spc_drvdata {
struct semaphore lock;
struct completion done;
uint32_t freqs[MAX_CLUSTERS][MAX_OPPS];
+ int freqs_cnt[MAX_CLUSTERS];
};
static struct vexpress_spc_drvdata *info;
@@ -278,7 +279,7 @@ static int vexpress_spc_find_perf_index(int cluster, u32 freq)
{
int idx;
/* Hash function would be ideal, based on hashtable in v3.8?? */
- for (idx = 0; idx < MAX_OPPS; idx++)
+ for (idx = 0; idx < info->freqs_cnt[cluster]; idx++)
if (info->freqs[cluster][idx] == freq)
break;
return idx;
@@ -613,9 +614,18 @@ static int vexpress_spc_populate_opps(uint32_t cluster)
break;
}
+ info->freqs_cnt[cluster] = j;
return ret;
}
+unsigned int *vexpress_spc_get_freq_table(uint32_t cluster, int *count)
+{
+
+ *count = info->freqs_cnt[cluster];
+ return info->freqs[cluster];
+}
+EXPORT_SYMBOL_GPL(vexpress_spc_get_freq_table);
+
static int vexpress_spc_init(void)
{
struct device_node *node = of_find_compatible_node(NULL, NULL,