Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
8a3f1f18
Commit
8a3f1f18
authored
4 years ago
by
Rafael J. Wysocki
Browse files
Options
Browse Files
Download
Plain Diff
Merge back cpufreq updates for v5.12.
parents
d11a1d08
7ac839a0
Changes
26
Show whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
99 additions
and
138 deletions
+99
-138
drivers/cpufreq/Kconfig.arm
drivers/cpufreq/Kconfig.arm
+0
-5
drivers/cpufreq/Makefile
drivers/cpufreq/Makefile
+0
-1
drivers/cpufreq/brcmstb-avs-cpufreq.c
drivers/cpufreq/brcmstb-avs-cpufreq.c
+17
-7
drivers/cpufreq/cpufreq-dt-platdev.c
drivers/cpufreq/cpufreq-dt-platdev.c
+0
-2
drivers/cpufreq/cpufreq-dt.c
drivers/cpufreq/cpufreq-dt.c
+1
-1
drivers/cpufreq/cpufreq.c
drivers/cpufreq/cpufreq.c
+1
-2
drivers/cpufreq/davinci-cpufreq.c
drivers/cpufreq/davinci-cpufreq.c
+1
-1
drivers/cpufreq/intel_pstate.c
drivers/cpufreq/intel_pstate.c
+24
-22
drivers/cpufreq/loongson1-cpufreq.c
drivers/cpufreq/loongson1-cpufreq.c
+1
-1
drivers/cpufreq/mediatek-cpufreq.c
drivers/cpufreq/mediatek-cpufreq.c
+1
-1
drivers/cpufreq/omap-cpufreq.c
drivers/cpufreq/omap-cpufreq.c
+1
-1
drivers/cpufreq/pmac32-cpufreq.c
drivers/cpufreq/pmac32-cpufreq.c
+1
-2
drivers/cpufreq/qcom-cpufreq-hw.c
drivers/cpufreq/qcom-cpufreq-hw.c
+7
-1
drivers/cpufreq/s3c24xx-cpufreq.c
drivers/cpufreq/s3c24xx-cpufreq.c
+1
-1
drivers/cpufreq/s5pv210-cpufreq.c
drivers/cpufreq/s5pv210-cpufreq.c
+1
-1
drivers/cpufreq/sa1100-cpufreq.c
drivers/cpufreq/sa1100-cpufreq.c
+1
-1
drivers/cpufreq/sa1110-cpufreq.c
drivers/cpufreq/sa1110-cpufreq.c
+1
-1
drivers/cpufreq/scmi-cpufreq.c
drivers/cpufreq/scmi-cpufreq.c
+1
-1
drivers/cpufreq/scpi-cpufreq.c
drivers/cpufreq/scpi-cpufreq.c
+1
-1
drivers/cpufreq/spear-cpufreq.c
drivers/cpufreq/spear-cpufreq.c
+1
-1
drivers/cpufreq/tango-cpufreq.c
drivers/cpufreq/tango-cpufreq.c
+0
-38
drivers/cpufreq/tegra186-cpufreq.c
drivers/cpufreq/tegra186-cpufreq.c
+1
-1
drivers/cpufreq/tegra194-cpufreq.c
drivers/cpufreq/tegra194-cpufreq.c
+1
-2
drivers/cpufreq/tegra20-cpufreq.c
drivers/cpufreq/tegra20-cpufreq.c
+22
-23
drivers/cpufreq/vexpress-spc-cpufreq.c
drivers/cpufreq/vexpress-spc-cpufreq.c
+1
-2
include/linux/cpufreq.h
include/linux/cpufreq.h
+12
-18
No files found.
drivers/cpufreq/Kconfig.arm
View file @
8a3f1f18
...
...
@@ -289,11 +289,6 @@ config ARM_STI_CPUFREQ
this config option if you wish to add CPUFreq support for STi based
SoCs.
config ARM_TANGO_CPUFREQ
bool
depends on CPUFREQ_DT && ARCH_TANGO
default y
config ARM_TEGRA20_CPUFREQ
tristate "Tegra20/30 CPUFreq support"
depends on ARCH_TEGRA && CPUFREQ_DT
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/Makefile
View file @
8a3f1f18
...
...
@@ -79,7 +79,6 @@ obj-$(CONFIG_ARM_SCPI_CPUFREQ) += scpi-cpufreq.o
obj-$(CONFIG_ARM_SPEAR_CPUFREQ)
+=
spear-cpufreq.o
obj-$(CONFIG_ARM_STI_CPUFREQ)
+=
sti-cpufreq.o
obj-$(CONFIG_ARM_ALLWINNER_SUN50I_CPUFREQ_NVMEM)
+=
sun50i-cpufreq-nvmem.o
obj-$(CONFIG_ARM_TANGO_CPUFREQ)
+=
tango-cpufreq.o
obj-$(CONFIG_ARM_TEGRA20_CPUFREQ)
+=
tegra20-cpufreq.o
obj-$(CONFIG_ARM_TEGRA124_CPUFREQ)
+=
tegra124-cpufreq.o
obj-$(CONFIG_ARM_TEGRA186_CPUFREQ)
+=
tegra186-cpufreq.o
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/brcmstb-avs-cpufreq.c
View file @
8a3f1f18
...
...
@@ -597,6 +597,16 @@ static int brcm_avs_prepare_init(struct platform_device *pdev)
return
ret
;
}
static
void
brcm_avs_prepare_uninit
(
struct
platform_device
*
pdev
)
{
struct
private_data
*
priv
;
priv
=
platform_get_drvdata
(
pdev
);
iounmap
(
priv
->
avs_intr_base
);
iounmap
(
priv
->
base
);
}
static
int
brcm_avs_cpufreq_init
(
struct
cpufreq_policy
*
policy
)
{
struct
cpufreq_frequency_table
*
freq_table
;
...
...
@@ -732,21 +742,21 @@ static int brcm_avs_cpufreq_probe(struct platform_device *pdev)
brcm_avs_driver
.
driver_data
=
pdev
;
return
cpufreq_register_driver
(
&
brcm_avs_driver
);
ret
=
cpufreq_register_driver
(
&
brcm_avs_driver
);
if
(
ret
)
brcm_avs_prepare_uninit
(
pdev
);
return
ret
;
}
static
int
brcm_avs_cpufreq_remove
(
struct
platform_device
*
pdev
)
{
struct
private_data
*
priv
;
int
ret
;
ret
=
cpufreq_unregister_driver
(
&
brcm_avs_driver
);
if
(
ret
)
return
ret
;
WARN_ON
(
ret
);
priv
=
platform_get_drvdata
(
pdev
);
iounmap
(
priv
->
base
);
iounmap
(
priv
->
avs_intr_base
);
brcm_avs_prepare_uninit
(
pdev
);
return
0
;
}
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/cpufreq-dt-platdev.c
View file @
8a3f1f18
...
...
@@ -141,8 +141,6 @@ static const struct of_device_id blacklist[] __initconst = {
{
.
compatible
=
"st,stih410"
,
},
{
.
compatible
=
"st,stih418"
,
},
{
.
compatible
=
"sigma,tango4"
,
},
{
.
compatible
=
"ti,am33xx"
,
},
{
.
compatible
=
"ti,am43"
,
},
{
.
compatible
=
"ti,dra7"
,
},
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/cpufreq-dt.c
View file @
8a3f1f18
...
...
@@ -175,7 +175,7 @@ static int cpufreq_exit(struct cpufreq_policy *policy)
}
static
struct
cpufreq_driver
dt_cpufreq_driver
=
{
.
flags
=
CPUFREQ_
STICKY
|
CPUFREQ_
NEED_INITIAL_FREQ_CHECK
|
.
flags
=
CPUFREQ_NEED_INITIAL_FREQ_CHECK
|
CPUFREQ_IS_COOLING_DEV
,
.
verify
=
cpufreq_generic_frequency_table_verify
,
.
target_index
=
set_target
,
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/cpufreq.c
View file @
8a3f1f18
...
...
@@ -2810,8 +2810,7 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
if
(
ret
)
goto
err_boost_unreg
;
if
(
!
(
cpufreq_driver
->
flags
&
CPUFREQ_STICKY
)
&&
list_empty
(
&
cpufreq_policy_list
))
{
if
(
unlikely
(
list_empty
(
&
cpufreq_policy_list
)))
{
/* if all ->init() calls failed, unregister */
ret
=
-
ENODEV
;
pr_debug
(
"%s: No CPU initialized for driver %s
\n
"
,
__func__
,
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/davinci-cpufreq.c
View file @
8a3f1f18
...
...
@@ -95,7 +95,7 @@ static int davinci_cpu_init(struct cpufreq_policy *policy)
}
static
struct
cpufreq_driver
davinci_driver
=
{
.
flags
=
CPUFREQ_
STICKY
|
CPUFREQ_
NEED_INITIAL_FREQ_CHECK
,
.
flags
=
CPUFREQ_NEED_INITIAL_FREQ_CHECK
,
.
verify
=
cpufreq_generic_frequency_table_verify
,
.
target_index
=
davinci_target
,
.
get
=
cpufreq_generic_get
,
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/intel_pstate.c
View file @
8a3f1f18
...
...
@@ -819,13 +819,13 @@ static struct freq_attr *hwp_cpufreq_attrs[] = {
NULL
,
};
static
void
intel_pstate_get_hwp_max
(
unsigned
int
cpu
,
int
*
phy_max
,
static
void
intel_pstate_get_hwp_max
(
struct
cpudata
*
cpu
,
int
*
phy_max
,
int
*
current_max
)
{
u64
cap
;
rdmsrl_on_cpu
(
cpu
,
MSR_HWP_CAPABILITIES
,
&
cap
);
WRITE_ONCE
(
all_cpu_data
[
cpu
]
->
hwp_cap_cached
,
cap
);
rdmsrl_on_cpu
(
cpu
->
cpu
,
MSR_HWP_CAPABILITIES
,
&
cap
);
WRITE_ONCE
(
cpu
->
hwp_cap_cached
,
cap
);
if
(
global
.
no_turbo
||
global
.
turbo_disabled
)
*
current_max
=
HWP_GUARANTEED_PERF
(
cap
);
else
...
...
@@ -914,7 +914,7 @@ static void intel_pstate_hwp_offline(struct cpudata *cpu)
}
value
&=
~
GENMASK_ULL
(
31
,
0
);
min_perf
=
HWP_LOWEST_PERF
(
cpu
->
hwp_cap_cached
);
min_perf
=
HWP_LOWEST_PERF
(
READ_ONCE
(
cpu
->
hwp_cap_cached
)
);
/* Set hwp_max = hwp_min */
value
|=
HWP_MAX_PERF
(
min_perf
);
...
...
@@ -1213,7 +1213,7 @@ static void update_qos_request(enum freq_qos_req_type type)
continue
;
if
(
hwp_active
)
intel_pstate_get_hwp_max
(
i
,
&
turbo_max
,
&
max_state
);
intel_pstate_get_hwp_max
(
cpu
,
&
turbo_max
,
&
max_state
);
else
turbo_max
=
cpu
->
pstate
.
turbo_pstate
;
...
...
@@ -1714,21 +1714,22 @@ static void intel_pstate_max_within_limits(struct cpudata *cpu)
static
void
intel_pstate_get_cpu_pstates
(
struct
cpudata
*
cpu
)
{
cpu
->
pstate
.
min_pstate
=
pstate_funcs
.
get_min
();
cpu
->
pstate
.
max_pstate
=
pstate_funcs
.
get_max
();
cpu
->
pstate
.
max_pstate_physical
=
pstate_funcs
.
get_max_physical
();
cpu
->
pstate
.
turbo_pstate
=
pstate_funcs
.
get_turbo
();
cpu
->
pstate
.
scaling
=
pstate_funcs
.
get_scaling
();
cpu
->
pstate
.
max_freq
=
cpu
->
pstate
.
max_pstate
*
cpu
->
pstate
.
scaling
;
if
(
hwp_active
&&
!
hwp_mode_bdw
)
{
unsigned
int
phy_max
,
current_max
;
intel_pstate_get_hwp_max
(
cpu
->
cpu
,
&
phy_max
,
&
current_max
);
intel_pstate_get_hwp_max
(
cpu
,
&
phy_max
,
&
current_max
);
cpu
->
pstate
.
turbo_freq
=
phy_max
*
cpu
->
pstate
.
scaling
;
cpu
->
pstate
.
turbo_pstate
=
phy_max
;
cpu
->
pstate
.
max_pstate
=
HWP_GUARANTEED_PERF
(
READ_ONCE
(
cpu
->
hwp_cap_cached
));
}
else
{
cpu
->
pstate
.
turbo_freq
=
cpu
->
pstate
.
turbo_pstate
*
cpu
->
pstate
.
scaling
;
cpu
->
pstate
.
max_pstate
=
pstate_funcs
.
get_max
();
}
cpu
->
pstate
.
max_freq
=
cpu
->
pstate
.
max_pstate
*
cpu
->
pstate
.
scaling
;
if
(
pstate_funcs
.
get_aperf_mperf_shift
)
cpu
->
aperf_mperf_shift
=
pstate_funcs
.
get_aperf_mperf_shift
();
...
...
@@ -1750,6 +1751,7 @@ static int hwp_boost_hold_time_ns = 3 * NSEC_PER_MSEC;
static
inline
void
intel_pstate_hwp_boost_up
(
struct
cpudata
*
cpu
)
{
u64
hwp_req
=
READ_ONCE
(
cpu
->
hwp_req_cached
);
u64
hwp_cap
=
READ_ONCE
(
cpu
->
hwp_cap_cached
);
u32
max_limit
=
(
hwp_req
&
0xff00
)
>>
8
;
u32
min_limit
=
(
hwp_req
&
0xff
);
u32
boost_level1
;
...
...
@@ -1776,14 +1778,14 @@ static inline void intel_pstate_hwp_boost_up(struct cpudata *cpu)
cpu
->
hwp_boost_min
=
min_limit
;
/* level at half way mark between min and guranteed */
boost_level1
=
(
HWP_GUARANTEED_PERF
(
cpu
->
hwp_cap_cached
)
+
min_limit
)
>>
1
;
boost_level1
=
(
HWP_GUARANTEED_PERF
(
hwp_cap
)
+
min_limit
)
>>
1
;
if
(
cpu
->
hwp_boost_min
<
boost_level1
)
cpu
->
hwp_boost_min
=
boost_level1
;
else
if
(
cpu
->
hwp_boost_min
<
HWP_GUARANTEED_PERF
(
cpu
->
hwp_cap_cached
))
cpu
->
hwp_boost_min
=
HWP_GUARANTEED_PERF
(
cpu
->
hwp_cap_cached
);
else
if
(
cpu
->
hwp_boost_min
==
HWP_GUARANTEED_PERF
(
cpu
->
hwp_cap_cached
)
&&
max_limit
!=
HWP_GUARANTEED_PERF
(
cpu
->
hwp_cap_cached
))
else
if
(
cpu
->
hwp_boost_min
<
HWP_GUARANTEED_PERF
(
hwp_cap
))
cpu
->
hwp_boost_min
=
HWP_GUARANTEED_PERF
(
hwp_cap
);
else
if
(
cpu
->
hwp_boost_min
==
HWP_GUARANTEED_PERF
(
hwp_cap
)
&&
max_limit
!=
HWP_GUARANTEED_PERF
(
hwp_cap
))
cpu
->
hwp_boost_min
=
max_limit
;
else
return
;
...
...
@@ -2207,7 +2209,7 @@ static void intel_pstate_update_perf_limits(struct cpudata *cpu,
* rather than pure ratios.
*/
if
(
hwp_active
)
{
intel_pstate_get_hwp_max
(
cpu
->
cpu
,
&
turbo_max
,
&
max_state
);
intel_pstate_get_hwp_max
(
cpu
,
&
turbo_max
,
&
max_state
);
}
else
{
max_state
=
global
.
no_turbo
||
global
.
turbo_disabled
?
cpu
->
pstate
.
max_pstate
:
cpu
->
pstate
.
turbo_pstate
;
...
...
@@ -2322,7 +2324,7 @@ static void intel_pstate_verify_cpu_policy(struct cpudata *cpu,
if
(
hwp_active
)
{
int
max_state
,
turbo_max
;
intel_pstate_get_hwp_max
(
cpu
->
cpu
,
&
turbo_max
,
&
max_state
);
intel_pstate_get_hwp_max
(
cpu
,
&
turbo_max
,
&
max_state
);
max_freq
=
max_state
*
cpu
->
pstate
.
scaling
;
}
else
{
max_freq
=
intel_pstate_get_max_freq
(
cpu
);
...
...
@@ -2496,7 +2498,7 @@ static int intel_cpufreq_verify_policy(struct cpufreq_policy_data *policy)
* driver call was via the normal or fast switch path. Various graphs
* output from the intel_pstate_tracer.py utility that include core_busy
* (or performance or core_avg_perf) have a fixed y-axis from 0 to 100%,
* so we use 10 to indicate the
the
normal path through the driver, and
* so we use 10 to indicate the normal path through the driver, and
* 90 to indicate the fast switch path through the driver.
* The scaled_busy field is not used, and is set to 0.
*/
...
...
@@ -2526,7 +2528,7 @@ static void intel_cpufreq_trace(struct cpudata *cpu, unsigned int trace_type, in
fp_toint
(
cpu
->
iowait_boost
*
100
));
}
static
void
intel_cpufreq_
adjust_hwp
(
struct
cpudata
*
cpu
,
u32
min
,
u32
max
,
static
void
intel_cpufreq_
hwp_update
(
struct
cpudata
*
cpu
,
u32
min
,
u32
max
,
u32
desired
,
bool
fast_switch
)
{
u64
prev
=
READ_ONCE
(
cpu
->
hwp_req_cached
),
value
=
prev
;
...
...
@@ -2550,7 +2552,7 @@ static void intel_cpufreq_adjust_hwp(struct cpudata *cpu, u32 min, u32 max,
wrmsrl_on_cpu
(
cpu
->
cpu
,
MSR_HWP_REQUEST
,
value
);
}
static
void
intel_cpufreq_
adjust_perf_ctl
(
struct
cpudata
*
cpu
,
static
void
intel_cpufreq_
perf_ctl_update
(
struct
cpudata
*
cpu
,
u32
target_pstate
,
bool
fast_switch
)
{
if
(
fast_switch
)
...
...
@@ -2572,10 +2574,10 @@ static int intel_cpufreq_update_pstate(struct cpufreq_policy *policy,
int
max_pstate
=
policy
->
strict_target
?
target_pstate
:
cpu
->
max_perf_ratio
;
intel_cpufreq_
adjust_hwp
(
cpu
,
target_pstate
,
max_pstate
,
0
,
intel_cpufreq_
hwp_update
(
cpu
,
target_pstate
,
max_pstate
,
0
,
fast_switch
);
}
else
if
(
target_pstate
!=
old_pstate
)
{
intel_cpufreq_
adjust_perf_ctl
(
cpu
,
target_pstate
,
fast_switch
);
intel_cpufreq_
perf_ctl_update
(
cpu
,
target_pstate
,
fast_switch
);
}
cpu
->
pstate
.
current_pstate
=
target_pstate
;
...
...
@@ -2673,7 +2675,7 @@ static void intel_cpufreq_adjust_perf(unsigned int cpunum,
target_pstate
=
clamp_t
(
int
,
target_pstate
,
min_pstate
,
max_pstate
);
intel_cpufreq_
adjust_hwp
(
cpu
,
min_pstate
,
max_pstate
,
target_pstate
,
true
);
intel_cpufreq_
hwp_update
(
cpu
,
min_pstate
,
max_pstate
,
target_pstate
,
true
);
cpu
->
pstate
.
current_pstate
=
target_pstate
;
intel_cpufreq_trace
(
cpu
,
INTEL_PSTATE_TRACE_FAST_SWITCH
,
old_pstate
);
...
...
@@ -2709,7 +2711,7 @@ static int intel_cpufreq_cpu_init(struct cpufreq_policy *policy)
if
(
hwp_active
)
{
u64
value
;
intel_pstate_get_hwp_max
(
policy
->
cpu
,
&
turbo_max
,
&
max_state
);
intel_pstate_get_hwp_max
(
cpu
,
&
turbo_max
,
&
max_state
);
policy
->
transition_delay_us
=
INTEL_CPUFREQ_TRANSITION_DELAY_HWP
;
rdmsrl_on_cpu
(
cpu
->
cpu
,
MSR_HWP_REQUEST
,
&
value
);
WRITE_ONCE
(
cpu
->
hwp_req_cached
,
value
);
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/loongson1-cpufreq.c
View file @
8a3f1f18
...
...
@@ -116,7 +116,7 @@ static int ls1x_cpufreq_exit(struct cpufreq_policy *policy)
static
struct
cpufreq_driver
ls1x_cpufreq_driver
=
{
.
name
=
"cpufreq-ls1x"
,
.
flags
=
CPUFREQ_
STICKY
|
CPUFREQ_
NEED_INITIAL_FREQ_CHECK
,
.
flags
=
CPUFREQ_NEED_INITIAL_FREQ_CHECK
,
.
verify
=
cpufreq_generic_frequency_table_verify
,
.
target_index
=
ls1x_cpufreq_target
,
.
get
=
cpufreq_generic_get
,
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/mediatek-cpufreq.c
View file @
8a3f1f18
...
...
@@ -463,7 +463,7 @@ static int mtk_cpufreq_exit(struct cpufreq_policy *policy)
}
static
struct
cpufreq_driver
mtk_cpufreq_driver
=
{
.
flags
=
CPUFREQ_
STICKY
|
CPUFREQ_
NEED_INITIAL_FREQ_CHECK
|
.
flags
=
CPUFREQ_NEED_INITIAL_FREQ_CHECK
|
CPUFREQ_HAVE_GOVERNOR_PER_POLICY
|
CPUFREQ_IS_COOLING_DEV
,
.
verify
=
cpufreq_generic_frequency_table_verify
,
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/omap-cpufreq.c
View file @
8a3f1f18
...
...
@@ -144,7 +144,7 @@ static int omap_cpu_exit(struct cpufreq_policy *policy)
}
static
struct
cpufreq_driver
omap_driver
=
{
.
flags
=
CPUFREQ_
STICKY
|
CPUFREQ_
NEED_INITIAL_FREQ_CHECK
,
.
flags
=
CPUFREQ_NEED_INITIAL_FREQ_CHECK
,
.
verify
=
cpufreq_generic_frequency_table_verify
,
.
target_index
=
omap_target
,
.
get
=
cpufreq_generic_get
,
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/pmac32-cpufreq.c
View file @
8a3f1f18
...
...
@@ -439,8 +439,7 @@ static struct cpufreq_driver pmac_cpufreq_driver = {
.
init
=
pmac_cpufreq_cpu_init
,
.
suspend
=
pmac_cpufreq_suspend
,
.
resume
=
pmac_cpufreq_resume
,
.
flags
=
CPUFREQ_PM_NO_WARN
|
CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING
,
.
flags
=
CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING
,
.
attr
=
cpufreq_generic_attr
,
.
name
=
"powermac"
,
};
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/qcom-cpufreq-hw.c
View file @
8a3f1f18
...
...
@@ -347,6 +347,12 @@ static int qcom_cpufreq_hw_cpu_init(struct cpufreq_policy *policy)
dev_pm_opp_of_register_em
(
cpu_dev
,
policy
->
cpus
);
if
(
policy_has_boost_freq
(
policy
))
{
ret
=
cpufreq_enable_boost_support
();
if
(
ret
)
dev_warn
(
cpu_dev
,
"failed to enable boost: %d
\n
"
,
ret
);
}
return
0
;
error:
devm_iounmap
(
dev
,
base
);
...
...
@@ -374,7 +380,7 @@ static struct freq_attr *qcom_cpufreq_hw_attr[] = {
};
static
struct
cpufreq_driver
cpufreq_qcom_hw_driver
=
{
.
flags
=
CPUFREQ_
STICKY
|
CPUFREQ_
NEED_INITIAL_FREQ_CHECK
|
.
flags
=
CPUFREQ_NEED_INITIAL_FREQ_CHECK
|
CPUFREQ_HAVE_GOVERNOR_PER_POLICY
|
CPUFREQ_IS_COOLING_DEV
,
.
verify
=
cpufreq_generic_frequency_table_verify
,
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/s3c24xx-cpufreq.c
View file @
8a3f1f18
...
...
@@ -420,7 +420,7 @@ static int s3c_cpufreq_resume(struct cpufreq_policy *policy)
#endif
static
struct
cpufreq_driver
s3c24xx_driver
=
{
.
flags
=
CPUFREQ_
STICKY
|
CPUFREQ_
NEED_INITIAL_FREQ_CHECK
,
.
flags
=
CPUFREQ_NEED_INITIAL_FREQ_CHECK
,
.
target
=
s3c_cpufreq_target
,
.
get
=
cpufreq_generic_get
,
.
init
=
s3c_cpufreq_init
,
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/s5pv210-cpufreq.c
View file @
8a3f1f18
...
...
@@ -574,7 +574,7 @@ static int s5pv210_cpufreq_reboot_notifier_event(struct notifier_block *this,
}
static
struct
cpufreq_driver
s5pv210_driver
=
{
.
flags
=
CPUFREQ_
STICKY
|
CPUFREQ_
NEED_INITIAL_FREQ_CHECK
,
.
flags
=
CPUFREQ_NEED_INITIAL_FREQ_CHECK
,
.
verify
=
cpufreq_generic_frequency_table_verify
,
.
target_index
=
s5pv210_target
,
.
get
=
cpufreq_generic_get
,
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/sa1100-cpufreq.c
View file @
8a3f1f18
...
...
@@ -186,7 +186,7 @@ static int __init sa1100_cpu_init(struct cpufreq_policy *policy)
}
static
struct
cpufreq_driver
sa1100_driver
__refdata
=
{
.
flags
=
CPUFREQ_
STICKY
|
CPUFREQ_
NEED_INITIAL_FREQ_CHECK
|
.
flags
=
CPUFREQ_NEED_INITIAL_FREQ_CHECK
|
CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING
,
.
verify
=
cpufreq_generic_frequency_table_verify
,
.
target_index
=
sa1100_target
,
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/sa1110-cpufreq.c
View file @
8a3f1f18
...
...
@@ -310,7 +310,7 @@ static int __init sa1110_cpu_init(struct cpufreq_policy *policy)
/* sa1110_driver needs __refdata because it must remain after init registers
* it with cpufreq_register_driver() */
static
struct
cpufreq_driver
sa1110_driver
__refdata
=
{
.
flags
=
CPUFREQ_
STICKY
|
CPUFREQ_
NEED_INITIAL_FREQ_CHECK
|
.
flags
=
CPUFREQ_NEED_INITIAL_FREQ_CHECK
|
CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING
,
.
verify
=
cpufreq_generic_frequency_table_verify
,
.
target_index
=
sa1110_target
,
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/scmi-cpufreq.c
View file @
8a3f1f18
...
...
@@ -217,7 +217,7 @@ static int scmi_cpufreq_exit(struct cpufreq_policy *policy)
static
struct
cpufreq_driver
scmi_cpufreq_driver
=
{
.
name
=
"scmi"
,
.
flags
=
CPUFREQ_
STICKY
|
CPUFREQ_
HAVE_GOVERNOR_PER_POLICY
|
.
flags
=
CPUFREQ_HAVE_GOVERNOR_PER_POLICY
|
CPUFREQ_NEED_INITIAL_FREQ_CHECK
|
CPUFREQ_IS_COOLING_DEV
,
.
verify
=
cpufreq_generic_frequency_table_verify
,
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/scpi-cpufreq.c
View file @
8a3f1f18
...
...
@@ -191,7 +191,7 @@ static int scpi_cpufreq_exit(struct cpufreq_policy *policy)
static
struct
cpufreq_driver
scpi_cpufreq_driver
=
{
.
name
=
"scpi-cpufreq"
,
.
flags
=
CPUFREQ_
STICKY
|
CPUFREQ_
HAVE_GOVERNOR_PER_POLICY
|
.
flags
=
CPUFREQ_HAVE_GOVERNOR_PER_POLICY
|
CPUFREQ_NEED_INITIAL_FREQ_CHECK
|
CPUFREQ_IS_COOLING_DEV
,
.
verify
=
cpufreq_generic_frequency_table_verify
,
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/spear-cpufreq.c
View file @
8a3f1f18
...
...
@@ -160,7 +160,7 @@ static int spear_cpufreq_init(struct cpufreq_policy *policy)
static
struct
cpufreq_driver
spear_cpufreq_driver
=
{
.
name
=
"cpufreq-spear"
,
.
flags
=
CPUFREQ_
STICKY
|
CPUFREQ_
NEED_INITIAL_FREQ_CHECK
,
.
flags
=
CPUFREQ_NEED_INITIAL_FREQ_CHECK
,
.
verify
=
cpufreq_generic_frequency_table_verify
,
.
target_index
=
spear_cpufreq_target
,
.
get
=
cpufreq_generic_get
,
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/tango-cpufreq.c
deleted
100644 → 0
View file @
d11a1d08
#include <linux/of.h>
#include <linux/cpu.h>
#include <linux/clk.h>
#include <linux/pm_opp.h>
#include <linux/platform_device.h>
static
const
struct
of_device_id
machines
[]
__initconst
=
{
{
.
compatible
=
"sigma,tango4"
},
{
/* sentinel */
}
};
static
int
__init
tango_cpufreq_init
(
void
)
{
struct
device
*
cpu_dev
=
get_cpu_device
(
0
);
unsigned
long
max_freq
;
struct
clk
*
cpu_clk
;
void
*
res
;
if
(
!
of_match_node
(
machines
,
of_root
))
return
-
ENODEV
;
cpu_clk
=
clk_get
(
cpu_dev
,
NULL
);
if
(
IS_ERR
(
cpu_clk
))
return
-
ENODEV
;
max_freq
=
clk_get_rate
(
cpu_clk
);
dev_pm_opp_add
(
cpu_dev
,
max_freq
/
1
,
0
);
dev_pm_opp_add
(
cpu_dev
,
max_freq
/
2
,
0
);
dev_pm_opp_add
(
cpu_dev
,
max_freq
/
3
,
0
);
dev_pm_opp_add
(
cpu_dev
,
max_freq
/
5
,
0
);
dev_pm_opp_add
(
cpu_dev
,
max_freq
/
9
,
0
);
res
=
platform_device_register_data
(
NULL
,
"cpufreq-dt"
,
-
1
,
NULL
,
0
);
return
PTR_ERR_OR_ZERO
(
res
);
}
device_initcall
(
tango_cpufreq_init
);
This diff is collapsed.
Click to expand it.
drivers/cpufreq/tegra186-cpufreq.c
View file @
8a3f1f18
...
...
@@ -117,7 +117,7 @@ static unsigned int tegra186_cpufreq_get(unsigned int cpu)
static
struct
cpufreq_driver
tegra186_cpufreq_driver
=
{
.
name
=
"tegra186"
,
.
flags
=
CPUFREQ_
STICKY
|
CPUFREQ_
HAVE_GOVERNOR_PER_POLICY
|
.
flags
=
CPUFREQ_HAVE_GOVERNOR_PER_POLICY
|
CPUFREQ_NEED_INITIAL_FREQ_CHECK
,
.
get
=
tegra186_cpufreq_get
,
.
verify
=
cpufreq_generic_frequency_table_verify
,
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/tegra194-cpufreq.c
View file @
8a3f1f18
...
...
@@ -272,8 +272,7 @@ static int tegra194_cpufreq_set_target(struct cpufreq_policy *policy,
static
struct
cpufreq_driver
tegra194_cpufreq_driver
=
{
.
name
=
"tegra194"
,
.
flags
=
CPUFREQ_STICKY
|
CPUFREQ_CONST_LOOPS
|
CPUFREQ_NEED_INITIAL_FREQ_CHECK
,
.
flags
=
CPUFREQ_CONST_LOOPS
|
CPUFREQ_NEED_INITIAL_FREQ_CHECK
,
.
verify
=
cpufreq_generic_frequency_table_verify
,
.
target_index
=
tegra194_cpufreq_set_target
,
.
get
=
tegra194_get_speed
,
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/tegra20-cpufreq.c
View file @
8a3f1f18
...
...
@@ -32,6 +32,16 @@ static bool cpu0_node_has_opp_v2_prop(void)
return
ret
;
}
static
void
tegra20_cpufreq_put_supported_hw
(
void
*
opp_table
)
{
dev_pm_opp_put_supported_hw
(
opp_table
);
}
static
void
tegra20_cpufreq_dt_unregister
(
void
*
cpufreq_dt
)
{
platform_device_unregister
(
cpufreq_dt
);
}
static
int
tegra20_cpufreq_probe
(
struct
platform_device
*
pdev
)
{
struct
platform_device
*
cpufreq_dt
;
...
...
@@ -68,42 +78,31 @@ static int tegra20_cpufreq_probe(struct platform_device *pdev)
return
err
;
}
err
=
devm_add_action_or_reset
(
&
pdev
->
dev
,
tegra20_cpufreq_put_supported_hw
,
opp_table
);
if
(
err
)
return
err
;
cpufreq_dt
=
platform_device_register_simple
(
"cpufreq-dt"
,
-
1
,
NULL
,
0
);
err
=
PTR_ERR_OR_ZERO
(
cpufreq_dt
);
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"failed to create cpufreq-dt device: %d
\n
"
,
err
);
goto
err_put_supported_hw
;
return
err
;
}
platform_set_drvdata
(
pdev
,
cpufreq_dt
);
return
0
;
err_put_supported_hw:
dev_pm_opp_put_supported_hw
(
opp_table
);
err
=
devm_add_action_or_reset
(
&
pdev
->
dev
,
tegra20_cpufreq_dt_unregister
,
cpufreq_dt
);
if
(
err
)
return
err
;
}
static
int
tegra20_cpufreq_remove
(
struct
platform_device
*
pdev
)
{
struct
platform_device
*
cpufreq_dt
;
struct
opp_table
*
opp_table
;
cpufreq_dt
=
platform_get_drvdata
(
pdev
);
platform_device_unregister
(
cpufreq_dt
);
opp_table
=
dev_pm_opp_get_opp_table
(
get_cpu_device
(
0
));
dev_pm_opp_put_supported_hw
(
opp_table
);
dev_pm_opp_put_opp_table
(
opp_table
);
return
0
;
}
static
struct
platform_driver
tegra20_cpufreq_driver
=
{
.
probe
=
tegra20_cpufreq_probe
,
.
remove
=
tegra20_cpufreq_remove
,
.
driver
=
{
.
name
=
"tegra20-cpufreq"
,
},
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/vexpress-spc-cpufreq.c
View file @
8a3f1f18
...
...
@@ -486,8 +486,7 @@ static void ve_spc_cpufreq_ready(struct cpufreq_policy *policy)
static
struct
cpufreq_driver
ve_spc_cpufreq_driver
=
{
.
name
=
"vexpress-spc"
,
.
flags
=
CPUFREQ_STICKY
|
CPUFREQ_HAVE_GOVERNOR_PER_POLICY
|
.
flags
=
CPUFREQ_HAVE_GOVERNOR_PER_POLICY
|
CPUFREQ_NEED_INITIAL_FREQ_CHECK
,
.
verify
=
cpufreq_generic_frequency_table_verify
,
.
target_index
=
ve_spc_cpufreq_set_target
,
...
...
This diff is collapsed.
Click to expand it.
include/linux/cpufreq.h
View file @
8a3f1f18
...
...
@@ -387,14 +387,22 @@ struct cpufreq_driver {
/* flags */
/* driver isn't removed even if all ->init() calls failed */
#define CPUFREQ_STICKY BIT(0)
/*
* Set by drivers that need to update internale upper and lower boundaries along
* with the target frequency and so the core and governors should also invoke
* the diver if the target frequency does not change, but the policy min or max
* may have changed.
*/
#define CPUFREQ_NEED_UPDATE_LIMITS BIT(0)
/* loops_per_jiffy or other kernel "constants" aren't affected by frequency transitions */
#define CPUFREQ_CONST_LOOPS BIT(1)
/* don't warn on suspend/resume speed mismatches */
#define CPUFREQ_PM_NO_WARN BIT(2)
/*
* Set by drivers that want the core to automatically register the cpufreq
* driver as a thermal cooling device.
*/
#define CPUFREQ_IS_COOLING_DEV BIT(2)
/*
* This should be set by platforms having multiple clock-domains, i.e.
...
...
@@ -426,20 +434,6 @@ struct cpufreq_driver {
*/
#define CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING BIT(6)
/*
* Set by drivers that want the core to automatically register the cpufreq
* driver as a thermal cooling device.
*/
#define CPUFREQ_IS_COOLING_DEV BIT(7)
/*
* Set by drivers that need to update internale upper and lower boundaries along
* with the target frequency and so the core and governors should also invoke
* the diver if the target frequency does not change, but the policy min or max
* may have changed.
*/
#define CPUFREQ_NEED_UPDATE_LIMITS BIT(8)
int
cpufreq_register_driver
(
struct
cpufreq_driver
*
driver_data
);
int
cpufreq_unregister_driver
(
struct
cpufreq_driver
*
driver_data
);
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment