Sandrine Bailleux | 3cd87d7 | 2018-10-09 11:12:55 +0200 | [diff] [blame] | 1 | /* |
2 | * Copyright (c) 2018, Arm Limited. All rights reserved. | ||||
3 | * | ||||
4 | * SPDX-License-Identifier: BSD-3-Clause | ||||
5 | */ | ||||
6 | |||||
7 | #include <asm_macros.S> | ||||
8 | |||||
9 | .globl init_spinlock | ||||
10 | .globl spin_lock | ||||
11 | .globl spin_unlock | ||||
12 | |||||
13 | func init_spinlock | ||||
14 | mov r1, #0 | ||||
15 | str r1, [r0] | ||||
16 | bx lr | ||||
17 | endfunc init_spinlock | ||||
18 | |||||
19 | func spin_lock | ||||
20 | mov r2, #1 | ||||
21 | 1: | ||||
22 | ldrex r1, [r0] | ||||
23 | cmp r1, #0 | ||||
24 | wfene | ||||
25 | strexeq r1, r2, [r0] | ||||
26 | cmpeq r1, #0 | ||||
27 | bne 1b | ||||
28 | dmb | ||||
29 | bx lr | ||||
30 | endfunc spin_lock | ||||
31 | |||||
32 | |||||
33 | func spin_unlock | ||||
34 | mov r1, #0 | ||||
35 | stl r1, [r0] | ||||
36 | bx lr | ||||
37 | endfunc spin_unlock |