menuconfig SOC_BRCMSTB
	bool "Broadcom STB SoC drivers"
	depends on ARM || ARM64 || BMIPS_GENERIC 
	select SOC_BUS
	help
	  Enables drivers for the Broadcom Set-Top Box (STB) series of chips.
	  This option alone enables only some support code, while the drivers
	  can be enabled individually within this menu.

	  If unsure, say N.

if SOC_BRCMSTB

config BRCMSTB_BMEM
	bool "Enable BMEM reserved A/V memory"
	depends on HAVE_MEMBLOCK && ARCH_BRCMSTB && BRCMSTB_MEMORY_API
	help
	  The A/V peripherals (managed by the PI/Nexus middleware) require
	  large, contiguous memory regions to be set aside at boot time.  This
	  option sets those up in a default config that reserves most of
	  memory.  Also allows the user to manually define region sizes and
	  locations using the 'bmem' command line param.  Allows for O_DIRECT
	  I/O using these regions, mmap() from user programs, and
	  ioremap() from kernel drivers.

	  If you are planning to use Broadcom middleware, choose Y here.

config BRCMSTB_CMA
	bool "Broadcom STB CMA"
	depends on ARCH_BRCMSTB && (ARM || ARM64) && CMA && BRCMSTB_MEMORY_API
	help
	  This driver provides the ioctls for manipulating with the reserved
	  areas used by Broadcom middleware, as well as the functions for the
	  kernel interface.  It also provides register and reserve functions
	  for setting up the CMA regions it uses at early boot.

	  If you are planning to use Broadcom middleware, choose Y here.

config BRCMSTB_MEMORY_API
	bool "Enable BRCMSTB memory API"
	depends on HAVE_MEMBLOCK && ARCH_BRCMSTB
	select LIBFDT
	help
	  This provides information on how system memory is arranged so that
	  Broadcom STB middleware can determine how to set up its memory heaps.

	  If you are planning to use Broadcom middleware, choose Y here.

config BRCMSTB_PM
	bool "Support suspend/resume for STB platforms"
	default y
	depends on PM
	depends on ARM && ARCH_BRCMSTB

config BRCMSTB_SRPD
	tristate "Support enabling DDR self-refresh modes"
	help
	  Provides a sysfs interface for setting the self-refresh timeout
	  value on Broadcom STB memory controllers.

config BRCMSTB_WKTMR
	tristate "Support wake-up timer"

# Perform memory hashing before entering S3, using XPT DMA
config BRCMSTB_XPT_HASH
	select BRCMSTB_MEMORY_API
	bool

config BRCMSTB_NEXUS_API
	tristate "Support for Nexus APIs"
	help
	   Provides APIs for Nexus kernel-mode driver to facilitate
	   sharing of resources: IRQs, GPIOs, Pinmuxing etc.

endif # SOC_BRCMSTB

#####################################################################
# Hidden options
#####################################################################

config BRCMSTB
	bool
