# SPDX-License-Identifier: GPL-2.0
#
# Generic HWSPINLOCK framework
#

menuconfig HWSPINLOCK
	bool "Hardware Spinlock drivers"

config HWSPINLOCK_OMAP
	tristate "OMAP Hardware Spinlock device"
	depends on HWSPINLOCK
	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 HWSPINLOCK
	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_SIRF
	tristate "SIRF Hardware Spinlock device"
	depends on HWSPINLOCK
	depends on ARCH_SIRF || COMPILE_TEST
	help
	  Say y here to support the SIRF Hardware Spinlock device, which
	  provides a synchronisation mechanism for the various processors
	  on the SoC.

	  It's safe to say n here if you're not interested in SIRF hardware
	  spinlock or just want a bare minimum kernel.

config HWSPINLOCK_SPRD
	tristate "SPRD Hardware Spinlock device"
	depends on ARCH_SPRD || COMPILE_TEST
	depends on HWSPINLOCK
	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
	depends on HWSPINLOCK
	help
	  Say y here to support the STM32 Hardware Spinlock device.

	  If unsure, say N.

config HSEM_U8500
	tristate "STE Hardware Semaphore functionality"
	depends on HWSPINLOCK
	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.
