sh: add AT_HWCAP flag for J-Core cas.l instruction
authorRich Felker <dalias@libc.org>
Fri, 22 Apr 2016 23:29:13 +0000 (23:29 +0000)
committerRich Felker <dalias@libc.org>
Fri, 5 Aug 2016 03:29:32 +0000 (03:29 +0000)
The J-Core cpu has, as an ISA extension, an atomic compare-and-swap
instruction cas.l which applications need to use (instead the imask or
gusa atomic models, which are fundamentally limited to UP) for
synchronization in order to be compatible with SMP systems. Provide a
hwcap flag so that it's possible to do runtime selection and support
both.

Signed-off-by: Rich Felker <dalias@libc.org>
arch/sh/include/uapi/asm/cpu-features.h
arch/sh/kernel/cpu/sh2/probe.c

index 694abe490edb73edb280654b2ad8eec9a21d0ed6..2f1bc851042a705008ad107243fd5e30bdac6827 100644 (file)
@@ -22,5 +22,6 @@
 #define CPU_HAS_L2_CACHE       0x0080  /* Secondary cache / URAM */
 #define CPU_HAS_OP32           0x0100  /* 32-bit instruction support */
 #define CPU_HAS_PTEAEX         0x0200  /* PTE ASID Extension support */
+#define CPU_HAS_CAS_L          0x0400  /* cas.l atomic compare-and-swap */
 
 #endif /* __ASM_SH_CPU_FEATURES_H */
index 152184007964002d740dc149c687ddc960748b85..4205f6d42b6938cb5a65946932672c3daf19abd4 100644 (file)
@@ -57,6 +57,8 @@ void __ref cpu_probe(void)
        boot_cpu_data.dcache.entry_shift        = 5;
        boot_cpu_data.dcache.linesz             = 32;
        boot_cpu_data.dcache.flags              = 0;
+
+       boot_cpu_data.flags |= CPU_HAS_CAS_L;
 #else
        /*
         * SH-2 doesn't have separate caches