# SPDX-License-Identifier: GPL-2.0
config BCMA_POSSIBLE
	bool
	depends on HAS_IOMEM && HAS_DMA
	default y

menuconfig BCMA
	tristate "Broadcom specific AMBA"
	depends on BCMA_POSSIBLE
	help
	  Bus driver for Broadcom specific Advanced Microcontroller Bus
	  Architecture.

if BCMA

# Support for Block-I/O. SELECT this from the driver that needs it.
config BCMA_BLOCKIO
	bool

config BCMA_HOST_PCI_POSSIBLE
	bool
	depends on PCI = y
	default y

config BCMA_HOST_PCI
	bool "Support for BCMA on PCI-host bus"
	depends on BCMA_HOST_PCI_POSSIBLE
	select BCMA_DRIVER_PCI
	default y

config BCMA_HOST_SOC
	bool "Support for BCMA in a SoC"
	help
	  Host interface for a Broadcom AIX bus directly mapped into
	  the memory. This only works with the Broadcom SoCs from the
	  BCM47XX line.

	  If unsure, say N

config BCMA_DRIVER_PCI
	bool "BCMA Broadcom PCI core driver"
	depends on PCI
	default y
	help
	  BCMA bus may have many versions of PCIe core. This driver
	  supports:
	  1) PCIe core working in clientmode
	  2) PCIe Gen 2 clientmode core

	  In general PCIe (Gen 2) clientmode core is required on PCIe
	  hosted buses. It's responsible for initialization and basic
	  hardware management.
	  This driver is also prerequisite for a hostmode PCIe core
	  support.

config BCMA_DRIVER_PCI_HOSTMODE
	bool "Driver for PCI core working in hostmode"
	depends on MIPS && BCMA_DRIVER_PCI && PCI_DRIVERS_LEGACY && BCMA = y
	help
	  PCI core hostmode operation (external PCI bus).

config BCMA_DRIVER_MIPS
	bool "BCMA Broadcom MIPS core driver"
	depends on MIPS
	help
	  Driver for the Broadcom MIPS core attached to Broadcom specific
	  Advanced Microcontroller Bus.

	  If unsure, say N

config BCMA_PFLASH
	bool
	depends on BCMA_DRIVER_MIPS
	default y

config BCMA_SFLASH
	bool "ChipCommon-attached serial flash support"
	depends on BCMA_HOST_SOC
	default y
	help
	  Some cheap devices have serial flash connected to the ChipCommon
	  instead of independent SPI controller. It requires using a separated
	  driver that implements ChipCommon specific interface communication.

	  Enabling this symbol will let bcma recognize serial flash and register
	  it as platform device.

config BCMA_NFLASH
	bool
	depends on BCMA_DRIVER_MIPS
	default y

config BCMA_DRIVER_GMAC_CMN
	bool "BCMA Broadcom GBIT MAC COMMON core driver"
	help
	  Driver for the Broadcom GBIT MAC COMMON core attached to Broadcom
	  specific Advanced Microcontroller Bus.

	  If unsure, say N

config BCMA_DRIVER_GPIO
	bool "BCMA GPIO driver"
	depends on GPIOLIB
	select GPIOLIB_IRQCHIP if BCMA_HOST_SOC
	help
	  Driver to provide access to the GPIO pins of the bcma bus.

	  If unsure, say N

config BCMA_DEBUG
	bool "BCMA debugging"
	help
	  This turns on additional debugging messages.

	  If unsure, say N

endif # BCMA
