diff options
author | Juri Lelli <juri.lelli@arm.com> | 2014-08-15 10:53:14 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2014-08-27 10:40:45 -0400 |
commit | eba1c71819d210f5e0d522571f9b8abce94fe9c5 (patch) | |
tree | 9ce0c82dc16f8f20caecb76956b234377de52a6a /drivers/cpuidle | |
parent | 2c32c65e3726c773760038910be30cce1b4d4149 (diff) |
ARM: 8130/1: cpuidle/cpuidle-big_little: fix reading cpu id part number
Commit af040ffc9ba1 ("ARM: make it easier to check the CPU part number
correctly") changed ARM_CPU_PART_X masks, and the way they are returned and
checked against. Usage of read_cpuid_part_number() is now deprecated, and
calling places updated accordingly. This actually broke cpuidle-big_little
initialization, as bl_idle_driver_init() performs a check using an hardcoded
mask on cpu_id.
Create an interface to perform the check (that is now even easier to read).
Define also a proper mask (ARM_CPU_PART_MASK) that makes this kind of checks
cleaner and helps preventing bugs in the future. Update usage accordingly.
Signed-off-by: Juri Lelli <juri.lelli@arm.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'drivers/cpuidle')
-rw-r--r-- | drivers/cpuidle/cpuidle-big_little.c | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/drivers/cpuidle/cpuidle-big_little.c b/drivers/cpuidle/cpuidle-big_little.c index 344d79fa3407..ef94c3b81f18 100644 --- a/drivers/cpuidle/cpuidle-big_little.c +++ b/drivers/cpuidle/cpuidle-big_little.c | |||
@@ -138,25 +138,18 @@ static int bl_enter_powerdown(struct cpuidle_device *dev, | |||
138 | return idx; | 138 | return idx; |
139 | } | 139 | } |
140 | 140 | ||
141 | static int __init bl_idle_driver_init(struct cpuidle_driver *drv, int cpu_id) | 141 | static int __init bl_idle_driver_init(struct cpuidle_driver *drv, int part_id) |
142 | { | 142 | { |
143 | struct cpuinfo_arm *cpu_info; | ||
144 | struct cpumask *cpumask; | 143 | struct cpumask *cpumask; |
145 | unsigned long cpuid; | ||
146 | int cpu; | 144 | int cpu; |
147 | 145 | ||
148 | cpumask = kzalloc(cpumask_size(), GFP_KERNEL); | 146 | cpumask = kzalloc(cpumask_size(), GFP_KERNEL); |
149 | if (!cpumask) | 147 | if (!cpumask) |
150 | return -ENOMEM; | 148 | return -ENOMEM; |
151 | 149 | ||
152 | for_each_possible_cpu(cpu) { | 150 | for_each_possible_cpu(cpu) |
153 | cpu_info = &per_cpu(cpu_data, cpu); | 151 | if (smp_cpuid_part(cpu) == part_id) |
154 | cpuid = is_smp() ? cpu_info->cpuid : read_cpuid_id(); | ||
155 | |||
156 | /* read cpu id part number */ | ||
157 | if ((cpuid & 0xFFF0) == cpu_id) | ||
158 | cpumask_set_cpu(cpu, cpumask); | 152 | cpumask_set_cpu(cpu, cpumask); |
159 | } | ||
160 | 153 | ||
161 | drv->cpumask = cpumask; | 154 | drv->cpumask = cpumask; |
162 | 155 | ||