6699e91c07
big.LITTLE switching complicates the setting of a correct cpufreq-based frequency invariance scale factor due to (as observed in drivers/cpufreq/vexpress-spc-cpufreq.c): - Incorrect current and maximum frequencies as a result of the exposure of a virtual frequency table to the cpufreq core, - Missed updates as a result of asynchronous frequency adjustments caused by frequency changes in other CPU pairs. Given that its functionality is atypical in regards to frequency invariance and this is an old technology, disable frequency invariance for when big.LITTLE switching is configured in to prevent incorrect scale setting. Signed-off-by: Ionela Voinescu <ionela.voinescu@arm.com> Suggested-by: Dietmar Eggemann <dietmar.eggemann@arm.com> Acked-by: Viresh Kumar <viresh.kumar@linaro.org> Acked-by: Sudeep Holla <sudeep.holla@arm.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
38 lines
1.1 KiB
C
38 lines
1.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_ARM_TOPOLOGY_H
|
|
#define _ASM_ARM_TOPOLOGY_H
|
|
|
|
#ifdef CONFIG_ARM_CPU_TOPOLOGY
|
|
|
|
#include <linux/cpumask.h>
|
|
#include <linux/arch_topology.h>
|
|
|
|
/* big.LITTLE switcher is incompatible with frequency invariance */
|
|
#ifndef CONFIG_BL_SWITCHER
|
|
/* Replace task scheduler's default frequency-invariant accounting */
|
|
#define arch_set_freq_scale topology_set_freq_scale
|
|
#define arch_scale_freq_capacity topology_get_freq_scale
|
|
#define arch_scale_freq_invariant topology_scale_freq_invariant
|
|
#endif
|
|
|
|
/* Replace task scheduler's default cpu-invariant accounting */
|
|
#define arch_scale_cpu_capacity topology_get_cpu_scale
|
|
|
|
/* Enable topology flag updates */
|
|
#define arch_update_cpu_topology topology_update_cpu_topology
|
|
|
|
/* Replace task scheduler's default thermal pressure API */
|
|
#define arch_scale_thermal_pressure topology_get_thermal_pressure
|
|
#define arch_set_thermal_pressure topology_set_thermal_pressure
|
|
|
|
#else
|
|
|
|
static inline void init_cpu_topology(void) { }
|
|
static inline void store_cpu_topology(unsigned int cpuid) { }
|
|
|
|
#endif
|
|
|
|
#include <asm-generic/topology.h>
|
|
|
|
#endif /* _ASM_ARM_TOPOLOGY_H */
|