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:
parent
3165bb66bf
commit
bcbb9ead97
4 changed files with 96 additions and 0 deletions
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
62
drivers/soc/qcom/core_ctl_helper.c
Normal file
62
drivers/soc/qcom/core_ctl_helper.c
Normal 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);
|
25
include/soc/qcom/core_ctl.h
Normal file
25
include/soc/qcom/core_ctl.h
Normal 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
|
Loading…
Add table
Reference in a new issue