]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - arch/arm/mach-mvebu/coherency_ll.S
Merge remote-tracking branch 'scsi-queue/drivers-for-3.19' into for-linus
[karo-tx-linux.git] / arch / arm / mach-mvebu / coherency_ll.S
index f5d881b5d0f77add65bba38263aaf7b35a51213c..8b2fbc8b6bc6ff46ab2fd38fbb335c5f74d4ec82 100644 (file)
 #include <asm/cp15.h>
 
        .text
-/* Returns the coherency base address in r1 (r0 is untouched) */
+/*
+ * Returns the coherency base address in r1 (r0 is untouched), or 0 if
+ * the coherency fabric is not enabled.
+ */
 ENTRY(ll_get_coherency_base)
        mrc     p15, 0, r1, c1, c0, 0
        tst     r1, #CR_M @ Check MMU bit enabled
@@ -32,8 +35,13 @@ ENTRY(ll_get_coherency_base)
 
        /*
         * MMU is disabled, use the physical address of the coherency
-        * base address.
+        * base address. However, if the coherency fabric isn't mapped
+        * (i.e its virtual address is zero), it means coherency is
+        * not enabled, so we return 0.
         */
+       ldr     r1, =coherency_base
+       cmp     r1, #0
+       beq     2f
        adr     r1, 3f
        ldr     r3, [r1]
        ldr     r1, [r1, r3]
@@ -85,6 +93,9 @@ ENTRY(ll_add_cpu_to_smp_group)
         */
        mov     r0, lr
        bl      ll_get_coherency_base
+       /* Bail out if the coherency is not enabled */
+       cmp     r1, #0
+       reteq   r0
        bl      ll_get_coherency_cpumask
        mov     lr, r0
        add     r0, r1, #ARMADA_XP_CFB_CFG_REG_OFFSET
@@ -107,6 +118,9 @@ ENTRY(ll_enable_coherency)
         */
        mov r0, lr
        bl      ll_get_coherency_base
+       /* Bail out if the coherency is not enabled */
+       cmp     r1, #0
+       reteq   r0
        bl      ll_get_coherency_cpumask
        mov lr, r0
        add     r0, r1, #ARMADA_XP_CFB_CTL_REG_OFFSET
@@ -131,6 +145,9 @@ ENTRY(ll_disable_coherency)
         */
        mov     r0, lr
        bl      ll_get_coherency_base
+       /* Bail out if the coherency is not enabled */
+       cmp     r1, #0
+       reteq   r0
        bl      ll_get_coherency_cpumask
        mov     lr, r0
        add     r0, r1, #ARMADA_XP_CFB_CTL_REG_OFFSET