#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/device.h>
#include <linux/pm_runtime.h>
#include <linux/spinlock.h>
#include <linux/hwspinlock.h>
#include <linux/platform_device.h>
#include <linux/of_address.h>
#include "hwspinlock_internal.h"
struct hwspinlock_device bank;
#define HW_SPINLOCK_NUMBER 30
#define HW_SPINLOCK_BASE 0x404
#define HW_SPINLOCK_OFFSET(x) (HW_SPINLOCK_BASE + 0x4 * (x))
static int sirf_hwspinlock_trylock(struct hwspinlock *lock)
void __iomem *lock_addr = lock->priv;
return !!readl(lock_addr);
static void sirf_hwspinlock_unlock(struct hwspinlock *lock)
void __iomem *lock_addr = lock->priv;
static const struct hwspinlock_ops sirf_hwspinlock_ops = {
.trylock = sirf_hwspinlock_trylock,
.unlock = sirf_hwspinlock_unlock,
static int sirf_hwspinlock_probe(struct platform_device *pdev)
struct sirf_hwspinlock *hwspin;
struct hwspinlock *hwlock;