[linux-yocto] [PATCH 3.14] mips: octeon: use ll/sc for the atomic ops for all the predecessor of octeon2

Kevin Hao kexin.hao at windriver.com
Mon Aug 31 04:34:48 PDT 2015


Even the octeon plus has the support of the 'saa' instruction, but we
don't have a way to distinguish between octeon and octeon plus at
compile time and pass "-march=octeon" to all the predecessor of
octeon2. So it will cause the following error when trying to assemble
the "saa" instruction with option "-march=octeon":
  {standard input}: Assembler messages:
  {standard input}:360: Error: Unrecognized opcode `saa $2,($4)'
  scripts/Makefile.build:308: recipe for target 'arch/mips/cavium-octeon/executive/cvmx-lap.o' failed

Forcing to use the "ll/sc" for the atomic ops for all the predecessor
of octeon2 to fix this issue.

Signed-off-by: Kevin Hao <kexin.hao at windriver.com>
---
 arch/mips/include/asm/octeon/cvmx-atomic.h | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/arch/mips/include/asm/octeon/cvmx-atomic.h b/arch/mips/include/asm/octeon/cvmx-atomic.h
index f4bfb7598634..b2b06438c24f 100644
--- a/arch/mips/include/asm/octeon/cvmx-atomic.h
+++ b/arch/mips/include/asm/octeon/cvmx-atomic.h
@@ -79,7 +79,7 @@ static inline void cvmx_atomic_add32_nosync(int32_t * ptr, int32_t incr)
 				     :"memory");
 	}
 #else
-	if (OCTEON_IS_MODEL(OCTEON_CN3XXX)) {
+	{
 		uint32_t tmp;
 
 		__asm__ __volatile__(".set noreorder         \n"
@@ -89,10 +89,6 @@ static inline void cvmx_atomic_add32_nosync(int32_t * ptr, int32_t incr)
 				     "   beqz %[tmp], 1b     \n" "   nop                 \n" ".set reorder           \n":[val] "+m"(*ptr),[tmp] "=&r"(tmp)
 				     :[inc] "r"(incr)
 				     :"memory");
-	} else {
-		__asm__ __volatile__("   saa %[inc], (%[base]) \n":"+m"(*ptr)
-				     :[inc] "r"(incr),[base] "r"(ptr)
-				     :"memory");
 	}
 #endif
 }
-- 
2.4.3



More information about the linux-yocto mailing list