Skip to content

Commit

Permalink
ARM: mvebu: Low level function to disable HW coherency support
Browse files Browse the repository at this point in the history
When going to deep idle we need to disable the SoC snooping (aka
hardware coherency support). Playing with the coherency fabric
requires to use assembly code to be sure that the compiler doesn't
reorder the instructions nor do wrong optimization.

Signed-off-by: Gregory CLEMENT <[email protected]>
Link: https://lkml.kernel.org/r/1397488214-20685-7-git-send-email-gregory.clement@free-electrons.com
Signed-off-by: Jason Cooper <[email protected]>
  • Loading branch information
gclement authored and Jason Cooper committed May 8, 2014
1 parent 2e8a594 commit 1a6bfbc
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions arch/arm/mach-mvebu/coherency_ll.S
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,26 @@ ENTRY(ll_enable_coherency)
mov pc, lr
ENDPROC(ll_enable_coherency)

ENTRY(ll_disable_coherency)
/*
* r0 being untouched in ll_get_coherency_base and
* ll_get_cpuid, we can use it to save lr modifing it with the
* following bl
*/
mov r0, lr
bl ll_get_coherency_base
bl ll_get_cpuid
mov lr, r0
add r0, r1, #ARMADA_XP_CFB_CTL_REG_OFFSET
1:
ldrex r2, [r0]
bic r2, r2, r3
strex r1, r2, [r0]
cmp r1, #0
bne 1b
dsb
mov pc, lr
ENDPROC(ll_disable_coherency)

.align 2
3:
Expand Down

0 comments on commit 1a6bfbc

Please sign in to comment.