Lines Matching +full:stm32 +full:- +full:hwspinlock
1 // SPDX-License-Identifier: GPL-2.0
9 #include <linux/hwspinlock.h>
28 static int stm32_hwspinlock_trylock(struct hwspinlock *lock) in stm32_hwspinlock_trylock()
30 void __iomem *lock_addr = lock->priv; in stm32_hwspinlock_trylock()
39 static void stm32_hwspinlock_unlock(struct hwspinlock *lock) in stm32_hwspinlock_unlock()
41 void __iomem *lock_addr = lock->priv; in stm32_hwspinlock_unlock()
46 static void stm32_hwspinlock_relax(struct hwspinlock *lock) in stm32_hwspinlock_relax()
68 array_size = STM32_MUTEX_NUM_LOCKS * sizeof(struct hwspinlock); in stm32_hwspinlock_probe()
69 hw = devm_kzalloc(&pdev->dev, sizeof(*hw) + array_size, GFP_KERNEL); in stm32_hwspinlock_probe()
71 return -ENOMEM; in stm32_hwspinlock_probe()
73 hw->clk = devm_clk_get(&pdev->dev, "hsem"); in stm32_hwspinlock_probe()
74 if (IS_ERR(hw->clk)) in stm32_hwspinlock_probe()
75 return PTR_ERR(hw->clk); in stm32_hwspinlock_probe()
78 hw->bank.lock[i].priv = io_base + i * sizeof(u32); in stm32_hwspinlock_probe()
81 pm_runtime_enable(&pdev->dev); in stm32_hwspinlock_probe()
83 ret = hwspin_lock_register(&hw->bank, &pdev->dev, &stm32_hwspinlock_ops, in stm32_hwspinlock_probe()
87 pm_runtime_disable(&pdev->dev); in stm32_hwspinlock_probe()
97 ret = hwspin_lock_unregister(&hw->bank); in stm32_hwspinlock_remove()
99 dev_err(&pdev->dev, "%s failed: %d\n", __func__, ret); in stm32_hwspinlock_remove()
101 pm_runtime_disable(&pdev->dev); in stm32_hwspinlock_remove()
110 clk_disable_unprepare(hw->clk); in stm32_hwspinlock_runtime_suspend()
119 clk_prepare_enable(hw->clk); in stm32_hwspinlock_runtime_resume()
131 { .compatible = "st,stm32-hwspinlock", },
160 MODULE_DESCRIPTION("Hardware spinlock driver for STM32 SoCs");