msm: krait-l2-accessor: Use acpuclock-8960 implementation
The implementation of these function in acpuclock-8960.c is more
tried and tested. It also includes the appropriate barriers and
rumi3 checks so copy that implementation here.
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
diff --git a/arch/arm/mach-msm/msm-krait-l2-accessors.c b/arch/arm/mach-msm/msm-krait-l2-accessors.c
index 7ba19ab..61b5228 100644
--- a/arch/arm/mach-msm/msm-krait-l2-accessors.c
+++ b/arch/arm/mach-msm/msm-krait-l2-accessors.c
@@ -12,6 +12,7 @@
*/
#include <linux/spinlock.h>
+#include <asm/mach-types.h>
DEFINE_RAW_SPINLOCK(l2_access_lock);
@@ -19,13 +20,19 @@
{
unsigned long flags;
u32 ret_val;
+ /* CP15 registers are not emulated on RUMI3. */
+ if (machine_is_msm8960_rumi3())
+ return 0;
raw_spin_lock_irqsave(&l2_access_lock, flags);
- asm volatile ("mcr p15, 3, %0, c15, c0, 6" : : "r" (reg_addr));
-
- asm volatile ("mcr p15, 3, %0, c15, c0, 7" : : "r" (val));
-
+ mb();
+ asm volatile ("mcr p15, 3, %[l2cpselr], c15, c0, 6\n\t"
+ "mcr p15, 3, %[l2cpdr], c15, c0, 7\n\t"
+ :
+ : [l2cpselr]"r" (reg_addr), [l2cpdr]"r" (val)
+ );
+ isb();
/* Ensure the value took */
asm volatile ("mrc p15, 3, %0, c15, c0, 7" : "=r" (ret_val));
@@ -37,13 +44,18 @@
void set_l2_indirect_reg(u32 reg_addr, u32 val)
{
unsigned long flags;
+ /* CP15 registers are not emulated on RUMI3. */
+ if (machine_is_msm8960_rumi3())
+ return;
raw_spin_lock_irqsave(&l2_access_lock, flags);
-
- asm volatile ("mcr p15, 3, %0, c15, c0, 6" : : "r" (reg_addr));
-
- asm volatile ("mcr p15, 3, %0, c15, c0, 7" : : "r" (val));
-
+ mb();
+ asm volatile ("mcr p15, 3, %[l2cpselr], c15, c0, 6\n\t"
+ "mcr p15, 3, %[l2cpdr], c15, c0, 7\n\t"
+ :
+ : [l2cpselr]"r" (reg_addr), [l2cpdr]"r" (val)
+ );
+ isb();
raw_spin_unlock_irqrestore(&l2_access_lock, flags);
}
@@ -51,13 +63,16 @@
{
u32 val;
unsigned long flags;
+ /* CP15 registers are not emulated on RUMI3. */
+ if (machine_is_msm8960_rumi3())
+ return 0;
raw_spin_lock_irqsave(&l2_access_lock, flags);
-
- asm volatile ("mcr p15, 3, %0, c15, c0, 6" : : "r" (reg_addr));
-
- asm volatile ("mrc p15, 3, %0, c15, c0, 7" : "=r" (val));
-
+ asm volatile ("mcr p15, 3, %[l2cpselr], c15, c0, 6\n\t"
+ "mrc p15, 3, %[l2cpdr], c15, c0, 7\n\t"
+ : [l2cpdr]"=r" (val)
+ : [l2cpselr]"r" (reg_addr)
+ );
raw_spin_unlock_irqrestore(&l2_access_lock, flags);
return val;