35 lines
584 B
C
35 lines
584 B
C
|
#include <sunxi_hal_common.h>
|
||
|
#include <hal_hwspinlock.h>
|
||
|
#include <hal_clk.h>
|
||
|
|
||
|
#include "hwspinlock.h"
|
||
|
|
||
|
void hal_hwspinlock_init(void)
|
||
|
{
|
||
|
/*
|
||
|
* the clk and gate should init in kernel
|
||
|
*/
|
||
|
|
||
|
/* hal_clock_enable(HAL_CLK_PERIPH_SPINLOCK); */
|
||
|
}
|
||
|
|
||
|
int hal_hwspinlock_check_taken(int num)
|
||
|
{
|
||
|
return !!(readl(SPINLOCK_STATUS_REG) & (1 << num));
|
||
|
}
|
||
|
|
||
|
void hal_hwspinlock_get(int num)
|
||
|
{
|
||
|
unsigned long addr = SPINLOCK_LOCK_REG(num);
|
||
|
|
||
|
while (readl(addr) != 0);
|
||
|
|
||
|
}
|
||
|
|
||
|
void hal_hwspinlock_put(int num)
|
||
|
{
|
||
|
unsigned long addr = SPINLOCK_LOCK_REG(num);
|
||
|
|
||
|
writel(0, addr);
|
||
|
}
|