xref: /optee_os/core/arch/riscv/kernel/spinlock.S (revision a3097fa16826facc2b5a82d6231841f98a6133ac)
15320579dSMarouene Boubakri// SPDX-License-Identifier: BSD-2-Clause
25320579dSMarouene Boubakri/*
35320579dSMarouene Boubakri * Copyright 2022 NXP
45320579dSMarouene Boubakri */
55320579dSMarouene Boubakri
65320579dSMarouene Boubakri#include <asm.S>
75320579dSMarouene Boubakri#include <kernel/spinlock.h>
85320579dSMarouene Boubakri#include <riscv.h>
95320579dSMarouene Boubakri
105320579dSMarouene Boubakri/* void __cpu_spin_lock(unsigned int *lock) */
115320579dSMarouene BoubakriFUNC __cpu_spin_lock , :
125320579dSMarouene Boubakri	addi	sp, sp, -(RISCV_XLEN_BYTES * 2)
13*a3097fa1SRandolph Lin	STR	s0, REGOFF(0)(sp)
14*a3097fa1SRandolph Lin	STR	ra, REGOFF(1)(sp)
155320579dSMarouene Boubakri	mv	s0, a0
165320579dSMarouene Boubakri1:
175320579dSMarouene Boubakri	mv	a0, s0
185320579dSMarouene Boubakri	jal	__cpu_spin_trylock
195320579dSMarouene Boubakri	addiw	a0, a0, 0
205320579dSMarouene Boubakri	bnez	a0, 1b
21*a3097fa1SRandolph Lin	LDR	ra, REGOFF(1)(sp)
22*a3097fa1SRandolph Lin	LDR	s0, REGOFF(0)(sp)
235320579dSMarouene Boubakri	addi	sp, sp, (RISCV_XLEN_BYTES * 2)
245320579dSMarouene Boubakri	ret
255320579dSMarouene BoubakriEND_FUNC __cpu_spin_lock
265320579dSMarouene Boubakri
275320579dSMarouene Boubakri
285320579dSMarouene Boubakri/* void __cpu_spin_unlock(unsigned int *lock)*/
295320579dSMarouene BoubakriFUNC __cpu_spin_unlock , :
305320579dSMarouene Boubakri	fence	rw, w
315320579dSMarouene Boubakri	amoswap.w	x0, x0, 0(a0)
325320579dSMarouene Boubakri	ret
335320579dSMarouene BoubakriEND_FUNC __cpu_spin_unlock
345320579dSMarouene Boubakri
355320579dSMarouene Boubakri/* unsigned int __cpu_spin_trylock(unsigned int *lock) */
36b18d0251SMarouene BoubakriFUNC __cpu_spin_trylock , :
375320579dSMarouene Boubakri	li	t0, SPINLOCK_LOCK
385320579dSMarouene Boubakri	amoswap.w	a0, t0, 0(a0)
395320579dSMarouene Boubakri	fence	r,rw
405320579dSMarouene Boubakri	ret
415320579dSMarouene BoubakriEND_FUNC __cpu_spin_trylock
425320579dSMarouene Boubakri
43