On 2014-11-17 07:47, Jan Kiszka wrote: > On 2014-11-10 14:10, Marc Zyngier wrote: >> On 10/11/14 12:57, Jan Kiszka wrote: >>> Hi all, >>> >>> I'm trying to get Marc's CPU hotplug-anabling patch [1] for sunxi >>> working on a B-Pi. After the first discussion it became clear that we >>> need something like flush_dcache_all in the PSCI monitor (I don't think >>> we need an icache flush, do we?). Does anyone have a clever suggestion >> >> No, I-cache can be left alone. >> >>> how to reuse the existing code for that? Or do we really need to >>> re-implement everything, in the worst case in assembly? >> >> Why don't you turn the u-boot code into a set of macros, included by >> both the core u-boot code and the PSCI code? > > I've now ported over v7_flush_dcache_all from the Linux kernel. > > However, that didn't magically solve the remaining issues with your > patch: I'm getting crashes on CPU 0 after handling the shoot-down FIQ. > That is even then the case if I only acknowledge the FIQ on the receiver > side, don't do any fiddling with CPU1's power states. Only if I > disabling sending the FIQ from CPU 1, the system remains stable in a CPU > off/on loop. > > Below the patch I'm using. Any ideas if something is wrong with the FIQ > handler or the setup of this mechanism or whatever?
Ping. I'm still seeing no light in this tunnel. One finding below, but maybe a non-issue. > +.globl psci_fiq_enter > +psci_fiq_enter: > + push {r0-r12} > + > + @ Switch to secure > + mrc p15, 0, r7, c1, c1, 0 > + bic r8, r7, #1 > + mcr p15, 0, r8, c1, c1, 0 > + isb > + > + movw r8, #(GICC_BASE & 0xffff) > + movt r8, #(GICC_BASE >> 16) > + ldr r9, [r8, #GICC_IAR] > + movw r10, #0x3ff > + movt r10, #0 > + cmp r9, r10 > + beq out > + movw r10, #0x3fe > + cmp r9, r10 > + beq out > + str r9, [r8, #GICC_EOIR] > + dsb > + > + @ Compute CPU number > + lsr r9, r9, #10 > + and r9, r9, #0xf > + > + movw r8, #(SUN7I_CPUCFG_BASE & 0xffff) > + movt r8, #(SUN7I_CPUCFG_BASE >> 16) > + > + @ Wait for the core to enter WFI > + lsl r11, r9, #6 @ x64 > + add r11, r11, r8 > + > +1: ldr r10, [r11, #0x48] > + tst r10, #(1 << 2) > + bne 2f > + timer_wait r10, ONE_MS > + b 1b > + > + @ Reset CPU > +2: mov r10, #0 > + str r10, [r11, #0x40] > + > + @ Lock CPU > + mov r10, #1 > + lsl r9, r10, r9 @ r9 is now CPU mask > + ldr r10, [r8, #0x1e4] > + bic r10, r10, r9 > + str r10, [r8, #0x1e4] > + > + @ Set power gating > + ldr r10, [r8, #0x1b4] > + orr r10, r10, #1 > + str r10, [r8, #0x1b4] > + timer_wait r10, ONE_MS > + > + @ Activate power clamp > + mov r10, #1 > +1: str r10, [r8, #0x1b0] > + lsl r10, r10, #1 > + orr r10, r10, #1 > + tst r10, #0x100 > + beq 1b > + > + @ Restore security level > +out: mcr p15, 0, r7, c1, c1, 0 There is no isb here - not required? It has no impact on the stability issue, though. Jan
signature.asc
Description: OpenPGP digital signature
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot