diff options
author | Gregory CLEMENT <gregory.clement@free-electrons.com> | 2014-04-14 17:10:05 +0200 |
---|---|---|
committer | Jason Cooper <jason@lakedaemon.net> | 2014-05-08 16:10:24 +0000 |
commit | ccd6a13180193700067bfdac5f7d7b436d757382 (patch) | |
tree | 4a65ee228f54af51b80a748ede961a68196a0cc1 /arch/arm/mach-mvebu/coherency_ll.S | |
parent | b4bca24957c990a09dbddde75858b24150faec89 (diff) | |
download | linux-ccd6a13180193700067bfdac5f7d7b436d757382.tar.bz2 |
ARM: mvebu: remove the address parameter for ll_set_cpu_coherent
In order to be able to deal with the MMU enabled and the MMU disabled
cases, the base address of the coherency registers was passed to the
function. The address by itself was not interesting as it can't change
for a given SoC, the only thing we need is to have a distinction
between the physical or the virtual address.
This patch add a check of the MMU bit to choose the accurate address,
then the calling function doesn't have to pass this information.
Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Link: https://lkml.kernel.org/r/1397488214-20685-3-git-send-email-gregory.clement@free-electrons.com
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
Diffstat (limited to 'arch/arm/mach-mvebu/coherency_ll.S')
-rw-r--r-- | arch/arm/mach-mvebu/coherency_ll.S | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/arch/arm/mach-mvebu/coherency_ll.S b/arch/arm/mach-mvebu/coherency_ll.S index ee7598fe75db..1f2bcd4b5424 100644 --- a/arch/arm/mach-mvebu/coherency_ll.S +++ b/arch/arm/mach-mvebu/coherency_ll.S @@ -21,13 +21,27 @@ #define ARMADA_XP_CFB_CFG_REG_OFFSET 0x4 #include <asm/assembler.h> +#include <asm/cp15.h> .text /* - * r0: Coherency fabric base register address - * r1: HW CPU id + * r0: HW CPU id */ ENTRY(ll_set_cpu_coherent) + mrc p15, 0, r1, c1, c0, 0 + tst r1, #CR_M @ Check MMU bit enabled + bne 1f + + /* use physical address of the coherency register*/ + adr r0, 3f + ldr r3, [r0] + ldr r0, [r0, r3] + b 2f +1: + /* use virtual address of the coherency register*/ + ldr r0, =coherency_base + ldr r0, [r0] +2: /* Create bit by cpu index */ mov r3, #(1 << 24) lsl r1, r3, r1 @@ -56,3 +70,7 @@ ARM_BE8(rev r1, r1) mov r0, #0 mov pc, lr ENDPROC(ll_set_cpu_coherent) + + .align 2 +3: + .long coherency_phys_base - . |