Merge tag 'media/v5.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[linux-2.6-block.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 */
a0ae6280
GR
15ENTRY(csky_cmpxchg)
16 USPTOKSP
17 mfcr a3, epc
bf241682 18 addi a3, TRAP0_SIZE
a0ae6280
GR
19
20 subi sp, 8
21 stw a3, (sp, 0)
22 mfcr a3, epsr
23 stw a3, (sp, 4)
24
25 psrset ee
bf241682 26#ifdef CONFIG_CPU_HAS_LDSTEX
a0ae6280
GR
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
a0ae6280 36#else
a0ae6280
GR
371:
38 ldw a3, (a2)
39 cmpne a0, a3
40 bt16 3f
412:
42 stw a1, (a2)
433:
bf241682 44#endif
a0ae6280
GR
45 mvc a0
46 ldw a3, (sp, 0)
47 mtcr a3, epc
48 ldw a3, (sp, 4)
49 mtcr a3, epsr
50 addi sp, 8
51 KSPTOUSP
52 rte
53END(csky_cmpxchg)
54
bf241682 55#ifndef CONFIG_CPU_HAS_LDSTEX
a0ae6280
GR
56/*
57 * Called from tlbmodified exception
58 */
59ENTRY(csky_cmpxchg_fixup)
60 mfcr a0, epc
61 lrw a1, 2b
62 cmpne a1, a0
63 bt 1f
64 subi a1, (2b - 1b)
65 stw a1, (sp, LSAVE_PC)
661:
67 rts
68END(csky_cmpxchg_fixup)
69#endif