
26 Feb
2015
26 Feb
'15
10:08 a.m.
On Wed, Feb 18, 2015 at 09:14:03AM +0100, Jan Kiszka wrote: [...]
+ENTRY(psci_cpu_off)
- bl psci_cpu_off_common
- mrc p15, 0, r1, c0, c0, 5 @ MPIDR
- and r1, r1, #7 @ number of CPUs in cluster
- get_csr_reg r1, r2, r3
- ldr r6, =TEGRA_FLOW_CTRL_BASE
- mov r5, #(CSR_ENABLE)
- add r5, r1, lsl #CSR_WAIT_WFI_SHIFT
This puts the wrong value into the WAIT_WFI field. The value of that field is supposed to be a mask, not the index of the CPU. I've used this to fix it:
mov r4, #(1 << CSR_WAIT_WFI_SHIFT) add r5, r4, lsl r1
With that fixed I see that with CPU hotplugging the power partition for the CPU that's taken offline is gated. To verify:
# cat /sys/kernel/debug/powergate # echo 0 > /sys/devices/system/cpu/cpu1/online # cat /sys/kernel/debug/powergate
Thierry