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

menuconfig SSB
	tristate "Sonics Silicon Backplane support"
	depends on SSB_POSSIBLE
	help
	  Support for the Sonics Silicon Backplane bus.
	  You only need to enable this option, if you are
	  configuring a kernel for an embedded system with
	  this bus.
	  It will be auto-selected if needed in other
	  environments.

	  The module will be called ssb.

	  If unsure, say N.

if SSB

# Common SPROM support routines
config SSB_SPROM
	bool

# Support for Block-I/O. SELECT this from the driver that needs it.
config SSB_BLOCKIO
	bool
	depends on SSB
	default y

config SSB_PCIHOST_POSSIBLE
	bool
	depends on SSB && (PCI = y || PCI = SSB) && (PCI_DRIVERS_LEGACY || !MIPS)
	default y

config SSB_PCIHOST
	bool "Support for SSB on PCI-bus host"
	depends on SSB_PCIHOST_POSSIBLE
	select SSB_SPROM
	default y
	help
	  Support for a Sonics Silicon Backplane on top
	  of a PCI device.

	  If unsure, say Y

config SSB_B43_PCI_BRIDGE
	bool
	depends on SSB_PCIHOST
	default y

config SSB_PCMCIAHOST_POSSIBLE
	bool
	depends on SSB && (PCMCIA = y || PCMCIA = SSB)
	default y

config SSB_PCMCIAHOST
	bool "Support for SSB on PCMCIA-bus host"
	depends on SSB_PCMCIAHOST_POSSIBLE
	select SSB_SPROM
	help
	  Support for a Sonics Silicon Backplane on top
	  of a PCMCIA device.

	  If unsure, say N

config SSB_SDIOHOST_POSSIBLE
	bool
	depends on SSB && (MMC = y || MMC = SSB)
	default y

config SSB_SDIOHOST
	bool "Support for SSB on SDIO-bus host"
	depends on SSB_SDIOHOST_POSSIBLE
	help
	  Support for a Sonics Silicon Backplane on top
	  of a SDIO device.

	  If unsure, say N

config SSB_HOST_SOC
	bool "Support for SSB bus on SoC"
	depends on SSB && BCM47XX_NVRAM
	select SSB_SPROM
	help
	  Host interface for a SSB directly mapped into memory. This is
	  for some Broadcom SoCs from the BCM47xx and BCM53xx lines.

	  If unsure, say N

config SSB_SERIAL
	bool
	depends on SSB
	# ChipCommon and ExtIf serial support routines.

config SSB_DRIVER_PCICORE_POSSIBLE
	bool
	depends on SSB_PCIHOST
	default y

config SSB_DRIVER_PCICORE
	bool "SSB PCI core driver"
	depends on SSB_DRIVER_PCICORE_POSSIBLE
	help
	  Driver for the Sonics Silicon Backplane attached
	  Broadcom PCI core.

	  If unsure, say Y

config SSB_PCICORE_HOSTMODE
	bool "Hostmode support for SSB PCI core"
	depends on SSB_DRIVER_PCICORE && SSB_DRIVER_MIPS && SSB = y
	help
	  PCIcore hostmode operation (external PCI bus).

config SSB_DRIVER_MIPS
	bool "SSB Broadcom MIPS core driver"
	depends on SSB && MIPS
	select SSB_SERIAL
	select SSB_SFLASH
	help
	  Driver for the Sonics Silicon Backplane attached
	  Broadcom MIPS core.

	  If unsure, say N

config SSB_SFLASH
	bool "SSB serial flash support"
	depends on SSB_DRIVER_MIPS
	default y

# Assumption: We are on embedded, if we compile the MIPS core.
config SSB_EMBEDDED
	bool
	depends on SSB_DRIVER_MIPS && SSB_PCICORE_HOSTMODE
	default y

config SSB_DRIVER_EXTIF
	bool "SSB Broadcom EXTIF core driver"
	depends on SSB_DRIVER_MIPS
	help
	  Driver for the Sonics Silicon Backplane attached
	  Broadcom EXTIF core.

	  If unsure, say N

config SSB_DRIVER_GIGE
	bool "SSB Broadcom Gigabit Ethernet driver"
	depends on SSB_PCIHOST_POSSIBLE && SSB_EMBEDDED && MIPS
	help
	  Driver for the Sonics Silicon Backplane attached
	  Broadcom Gigabit Ethernet.

	  If unsure, say N

config SSB_DRIVER_GPIO
	bool "SSB GPIO driver"
	depends on SSB && GPIOLIB
	select IRQ_DOMAIN if SSB_EMBEDDED
	help
	  Driver to provide access to the GPIO pins on the bus.

	  If unsure, say N

endif # SSB
