forked from Minki/linux
3c881e05c8
Adds the sun6i_hwspinlock driver for the hardware spinlock unit found in most of the sun6i compatible SoCs. This unit provides at least 32 spinlocks in hardware. The implementation supports 32, 64, 128 or 256 32bit registers. A lock can be taken by reading a register and released by writing a 0 to it. This driver supports all 4 spinlock setups, but for now only the first setup (32 locks) seem to exist in available devices. This spinlock unit is shared between all ARM cores and the embedded companion core. All of them can take/release a lock with a single cycle operation. It can be used to sync access to devices shared by the ARM cores and the companion core. There are two ways to check if a lock is taken. The first way is to read a lock. If a 0 is returned, the lock was free and is taken now. If an 1 is returned, the caller has to try again. Which means the lock is taken. The second way is to read a 32bit wide status register where every bit represents one of the 32 first locks. According to the datasheets this status register supports only the 32 first locks. This is the reason the first way (lock read/write) approach is used to be able to cover all 256 locks in future devices. The driver also reports the amount of supported locks via debugfs. Reviewed-by: Samuel Holland <samuel@sholland.org> Acked-by: Maxime Ripard <maxime@cerno.tech> Signed-off-by: Wilken Gottwalt <wilken.gottwalt@posteo.net> Link: https://lore.kernel.org/r/bfd2b97307c2321b15c09683f4bd5e1fcc792f13.1615713499.git.wilken.gottwalt@posteo.net Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
67 lines
1.7 KiB
Plaintext
67 lines
1.7 KiB
Plaintext
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# Generic HWSPINLOCK framework
|
|
#
|
|
|
|
menuconfig HWSPINLOCK
|
|
bool "Hardware Spinlock drivers"
|
|
|
|
if HWSPINLOCK
|
|
|
|
config HWSPINLOCK_OMAP
|
|
tristate "OMAP Hardware Spinlock device"
|
|
depends on ARCH_OMAP4 || SOC_OMAP5 || SOC_DRA7XX || SOC_AM33XX || SOC_AM43XX || ARCH_K3 || COMPILE_TEST
|
|
help
|
|
Say y here to support the OMAP Hardware Spinlock device (firstly
|
|
introduced in OMAP4).
|
|
|
|
If unsure, say N.
|
|
|
|
config HWSPINLOCK_QCOM
|
|
tristate "Qualcomm Hardware Spinlock device"
|
|
depends on ARCH_QCOM || COMPILE_TEST
|
|
select MFD_SYSCON
|
|
help
|
|
Say y here to support the Qualcomm Hardware Mutex functionality, which
|
|
provides a synchronisation mechanism for the various processors on
|
|
the SoC.
|
|
|
|
If unsure, say N.
|
|
|
|
config HWSPINLOCK_SPRD
|
|
tristate "SPRD Hardware Spinlock device"
|
|
depends on ARCH_SPRD || COMPILE_TEST
|
|
help
|
|
Say y here to support the SPRD Hardware Spinlock device.
|
|
|
|
If unsure, say N.
|
|
|
|
config HWSPINLOCK_STM32
|
|
tristate "STM32 Hardware Spinlock device"
|
|
depends on MACH_STM32MP157 || COMPILE_TEST
|
|
help
|
|
Say y here to support the STM32 Hardware Spinlock device.
|
|
|
|
If unsure, say N.
|
|
|
|
config HWSPINLOCK_SUN6I
|
|
tristate "SUN6I Hardware Spinlock device"
|
|
depends on ARCH_SUNXI || COMPILE_TEST
|
|
help
|
|
Say y here to support the SUN6I Hardware Spinlock device which can be
|
|
found in most of the sun6i compatible Allwinner SoCs.
|
|
|
|
If unsure, say N.
|
|
|
|
config HSEM_U8500
|
|
tristate "STE Hardware Semaphore functionality"
|
|
depends on ARCH_U8500 || COMPILE_TEST
|
|
help
|
|
Say y here to support the STE Hardware Semaphore functionality, which
|
|
provides a synchronisation mechanism for the various processor on the
|
|
SoC.
|
|
|
|
If unsure, say N.
|
|
|
|
endif # HWSPINLOCK
|