# SPDX-License-Identifier: GPL-2.0-only

if ARCH_ASPEED || COMPILE_TEST

menu "ASPEED SoC drivers"

config ASPEED_LPC_CTRL
	tristate "ASPEED LPC firmware cycle control"
	select REGMAP
	select MFD_SYSCON
	default ARCH_ASPEED
	help
	  Control LPC firmware cycle mappings through ioctl()s. The driver
	  also provides a read/write interface to a BMC ram region where the
	  host LPC read/write region can be buffered.

config ASPEED_LPC_SNOOP
	tristate "ASPEED LPC snoop support"
	select REGMAP
	select MFD_SYSCON
	default ARCH_ASPEED
	help
	  Provides a driver to control the LPC snoop interface which
	  allows the BMC to listen on and save the data written by
	  the host to an arbitrary LPC I/O port.

config ASPEED_UART_ROUTING
	tristate "ASPEED uart routing control"
	select REGMAP
	select MFD_SYSCON
	default ARCH_ASPEED
	help
	  Provides a driver to control the UART routing paths, allowing
	  users to perform runtime configuration of the RX muxes among
	  the UART controllers and I/O pins.

config ASPEED_P2A_CTRL
	tristate "ASPEED P2A (VGA MMIO to BMC) bridge control"
	select REGMAP
	select MFD_SYSCON
	default ARCH_ASPEED
	help
	  Control ASPEED P2A VGA MMIO to BMC mappings through ioctl()s.  The
	  driver also provides an interface for userspace mappings to a
	  pre-defined region.

config ASPEED_SOCINFO
	bool "ASPEED SoC Information driver"
	default ARCH_ASPEED
	select SOC_BUS
	default ARCH_ASPEED
	help
	  Say yes to support decoding of ASPEED BMC information.

config ASPEED_XDMA
	tristate "ASPEED XDMA Engine Driver"
	select REGMAP
	select MFD_SYSCON
	depends on HAS_DMA
	help
	  Enable support for the XDMA Engine found on the ASPEED BMC
	  SoCs. The XDMA engine can perform PCIe DMA operations between the BMC
	  and a host processor.

config ASPEED_SBC
	bool "ASPEED Secure Boot Controller driver"
	default MACH_ASPEED_G6
	help
	  Say yes to provide information about the secure boot controller in
	  debugfs.

endmenu

endif
