]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - arch/metag/include/asm/cmpxchg_lnkget.h
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[mirror_ubuntu-bionic-kernel.git] / arch / metag / include / asm / cmpxchg_lnkget.h
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
6006c0d8
JH
2#ifndef __ASM_METAG_CMPXCHG_LNKGET_H
3#define __ASM_METAG_CMPXCHG_LNKGET_H
4
5static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val)
6{
7 int temp, old;
8
9 smp_mb();
10
11 asm volatile (
12 "1: LNKGETD %1, [%2]\n"
13 " LNKSETD [%2], %3\n"
14 " DEFR %0, TXSTAT\n"
15 " ANDT %0, %0, #HI(0x3f000000)\n"
16 " CMPT %0, #HI(0x02000000)\n"
17 " BNZ 1b\n"
18#ifdef CONFIG_METAG_LNKGET_AROUND_CACHE
19 " DCACHE [%2], %0\n"
20#endif
21 : "=&d" (temp), "=&d" (old)
22 : "da" (m), "da" (val)
23 : "cc"
24 );
25
26 smp_mb();
27
28 return old;
29}
30
31static inline unsigned long xchg_u8(volatile u8 *m, unsigned long val)
32{
33 int temp, old;
34
35 smp_mb();
36
37 asm volatile (
38 "1: LNKGETD %1, [%2]\n"
39 " LNKSETD [%2], %3\n"
40 " DEFR %0, TXSTAT\n"
41 " ANDT %0, %0, #HI(0x3f000000)\n"
42 " CMPT %0, #HI(0x02000000)\n"
43 " BNZ 1b\n"
44#ifdef CONFIG_METAG_LNKGET_AROUND_CACHE
45 " DCACHE [%2], %0\n"
46#endif
47 : "=&d" (temp), "=&d" (old)
48 : "da" (m), "da" (val & 0xff)
49 : "cc"
50 );
51
52 smp_mb();
53
54 return old;
55}
56
57static inline unsigned long __cmpxchg_u32(volatile int *m, unsigned long old,
58 unsigned long new)
59{
60 __u32 retval, temp;
61
62 smp_mb();
63
64 asm volatile (
65 "1: LNKGETD %1, [%2]\n"
66 " CMP %1, %3\n"
67 " LNKSETDEQ [%2], %4\n"
68 " BNE 2f\n"
69 " DEFR %0, TXSTAT\n"
70 " ANDT %0, %0, #HI(0x3f000000)\n"
71 " CMPT %0, #HI(0x02000000)\n"
72 " BNZ 1b\n"
73#ifdef CONFIG_METAG_LNKGET_AROUND_CACHE
74 " DCACHE [%2], %0\n"
75#endif
76 "2:\n"
6154c187 77 : "=&d" (temp), "=&d" (retval)
6006c0d8
JH
78 : "da" (m), "bd" (old), "da" (new)
79 : "cc"
80 );
81
82 smp_mb();
83
84 return retval;
85}
86
87#endif /* __ASM_METAG_CMPXCHG_LNKGET_H */