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