]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/blame - arch/csky/kernel/atomic.S
Merge tag 'omap-for-v5.0/fixes-rc7-signed' of git://git.kernel.org/pub/scm/linux...
[mirror_ubuntu-eoan-kernel.git] / arch / csky / kernel / atomic.S
CommitLineData
a0ae6280
GR
1/* SPDX-License-Identifier: GPL-2.0 */
2// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
3
4#include <linux/linkage.h>
5#include <abi/entry.h>
6
7.text
8
9/*
10 * int csky_cmpxchg(int oldval, int newval, int *ptr)
11 *
12 * If *ptr != oldval && return 1,
13 * else *ptr = newval return 0.
14 */
15#ifdef CONFIG_CPU_HAS_LDSTEX
16ENTRY(csky_cmpxchg)
17 USPTOKSP
18 mfcr a3, epc
19 INCTRAP a3
20
21 subi sp, 8
22 stw a3, (sp, 0)
23 mfcr a3, epsr
24 stw a3, (sp, 4)
25
26 psrset ee
271:
28 ldex a3, (a2)
29 cmpne a0, a3
30 bt16 2f
31 mov a3, a1
32 stex a3, (a2)
33 bez a3, 1b
342:
35 sync.is
36 mvc a0
37 ldw a3, (sp, 0)
38 mtcr a3, epc
39 ldw a3, (sp, 4)
40 mtcr a3, epsr
41 addi sp, 8
42 KSPTOUSP
43 rte
44END(csky_cmpxchg)
45#else
46ENTRY(csky_cmpxchg)
47 USPTOKSP
48 mfcr a3, epc
49 INCTRAP a3
50
51 subi sp, 8
52 stw a3, (sp, 0)
53 mfcr a3, epsr
54 stw a3, (sp, 4)
55
56 psrset ee
571:
58 ldw a3, (a2)
59 cmpne a0, a3
60 bt16 3f
612:
62 stw a1, (a2)
633:
64 mvc a0
65 ldw a3, (sp, 0)
66 mtcr a3, epc
67 ldw a3, (sp, 4)
68 mtcr a3, epsr
69 addi sp, 8
70 KSPTOUSP
71 rte
72END(csky_cmpxchg)
73
74/*
75 * Called from tlbmodified exception
76 */
77ENTRY(csky_cmpxchg_fixup)
78 mfcr a0, epc
79 lrw a1, 2b
80 cmpne a1, a0
81 bt 1f
82 subi a1, (2b - 1b)
83 stw a1, (sp, LSAVE_PC)
841:
85 rts
86END(csky_cmpxchg_fixup)
87#endif