msm: scm: Fix improper register assignment
authorStephen Boyd <sboyd@codeaurora.org>
Thu, 24 Feb 2011 18:44:43 +0000 (10:44 -0800)
committerDavid Brown <davidb@codeaurora.org>
Thu, 10 Mar 2011 20:01:37 +0000 (12:01 -0800)
Assign the registers used in the inline assembly immediately
before the inline assembly block. This ensures the compiler
doesn't optimize away dead register assignments when it
shouldn't.

Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Acked-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: David Brown <davidb@codeaurora.org>
arch/arm/mach-msm/scm.c

index ba57b5adf87386709d024392e041b2fe3be40d3f..5eddf549717a89afa1334aea2da3afac6ed85f1e 100644 (file)
@@ -264,13 +264,16 @@ u32 scm_get_version(void)
 {
        int context_id;
        static u32 version = -1;
-       register u32 r0 asm("r0") = 0x1 << 8;
-       register u32 r1 asm("r1") = (u32)&context_id;
+       register u32 r0 asm("r0");
+       register u32 r1 asm("r1");
 
        if (version != -1)
                return version;
 
        mutex_lock(&scm_lock);
+
+       r0 = 0x1 << 8;
+       r1 = (u32)&context_id;
        asm volatile(
                __asmeq("%0", "r1")
                __asmeq("%1", "r0")