qcom: core_ctl: Add support functions for core control

Add support functions for core control driver. Also introduce
Kconfig for enabling core control.

Change-Id: Ic127b6ed7d9450338883b13d9c42abfe49ff8b35
Signed-off-by: Bryan Huntsman <bryanh@codeaurora.org>
[satyap: trivial merge conflict resolution]
Signed-off-by: Satya Durga Srinivasu Prabhala <satyap@codeaurora.org>
This commit is contained in:
Bryan Huntsman 2014-12-19 12:57:55 -08:00 committed by David Keitel
parent 3165bb66bf
commit bcbb9ead97
4 changed files with 96 additions and 0 deletions

View file

@ -543,4 +543,12 @@ config MSM_KERNEL_PROTECT_TEST
read-only. This test is FATAL whether it passes or fails!
Success is signaled by a stage-2 fault.
config MSM_CORE_CTL_HELPER
tristate "Core control helper functions for dynamically hotplug CPUs"
help
Provide helper functions for core control driver. Core control
driver dynamically hotplugs CPUs from kernel based on current
system load and state. It also supports limiting min and
max online CPUs from userspace.
source "drivers/soc/qcom/memshare/Kconfig"

View file

@ -30,6 +30,7 @@ obj-$(CONFIG_MEM_SHARE_QMI_SERVICE) += memshare/
obj-$(CONFIG_MSM_PIL_SSR_GENERIC) += subsys-pil-tz.o
obj-$(CONFIG_MSM_PIL_MSS_QDSP6V5) += pil-q6v5.o pil-msa.o pil-q6v5-mss.o
obj-$(CONFIG_MSM_PIL) += peripheral-loader.o
obj-$(CONFIG_MSM_CORE_CTL_HELPER) += core_ctl_helper.o
ifdef CONFIG_MSM_SUBSYSTEM_RESTART
obj-y += subsystem_notif.o

View file

@ -0,0 +1,62 @@
/*
* Copyright (c) 2014, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <linux/cpu.h>
#include <linux/cpufreq.h>
#include <linux/ktime.h>
#include <linux/hrtimer.h>
#include <linux/module.h>
#include <linux/init.h>
#include <soc/qcom/core_ctl.h>
void core_ctl_block_hotplug(void)
{
get_online_cpus();
}
EXPORT_SYMBOL(core_ctl_block_hotplug);
void core_ctl_unblock_hotplug(void)
{
put_online_cpus();
}
EXPORT_SYMBOL(core_ctl_unblock_hotplug);
s64 core_ctl_get_time(void)
{
return ktime_to_ms(ktime_get());
}
EXPORT_SYMBOL(core_ctl_get_time);
struct cpufreq_policy *core_ctl_get_policy(int cpu)
{
return cpufreq_cpu_get(cpu);
}
EXPORT_SYMBOL(core_ctl_get_policy);
void core_ctl_put_policy(struct cpufreq_policy *policy)
{
cpufreq_cpu_put(policy);
}
EXPORT_SYMBOL(core_ctl_put_policy);
struct device *core_ctl_find_cpu_device(unsigned cpu)
{
return get_cpu_device(cpu);
}
EXPORT_SYMBOL(core_ctl_find_cpu_device);
int __ref core_ctl_online_core(unsigned int cpu)
{
return cpu_up(cpu);
}
EXPORT_SYMBOL(core_ctl_online_core);

View file

@ -0,0 +1,25 @@
/*
* Copyright (c) 2014, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef __SOC_QCOM_CORE_CTL_H
#define __SOC_QCOM_CORE_CTL_H
extern void core_ctl_block_hotplug(void);
extern void core_ctl_unblock_hotplug(void);
extern s64 core_ctl_get_time(void);
extern struct cpufreq_policy *core_ctl_get_policy(int cpu);
extern void core_ctl_put_policy(struct cpufreq_policy *policy);
extern struct device *core_ctl_find_cpu_device(unsigned cpu);
extern int core_ctl_online_core(unsigned int cpu);
#endif