menuconfig ARCH_BCM
	bool "Broadcom SoC Support"
	depends on ARCH_MULTI_V6_V7
	help
	  This enables support for Broadcom ARM based SoC chips

if ARCH_BCM

comment "IPROC architected SoCs"

config ARCH_BCM_IPROC
	bool
	select ARM_GIC
	select CACHE_L2X0
	select HAVE_ARM_SCU if SMP
	select HAVE_ARM_TWD if SMP
	select ARM_GLOBAL_TIMER
	select COMMON_CLK_IPROC
	select CLKSRC_MMIO
	select ARCH_REQUIRE_GPIOLIB
	select ARM_AMBA
	select PINCTRL
	help
	  This enables support for systems based on Broadcom IPROC architected SoCs.
	  The IPROC complex contains one or more ARM CPUs along with common
	  core periperals. Application specific SoCs are created by adding a
	  uArchitecture containing peripherals outside of the IPROC complex.
	  Currently supported SoCs are Cygnus.

config ARCH_BCM_CYGNUS
	bool "Broadcom Cygnus Support"
	depends on ARCH_MULTI_V7
	select ARCH_BCM_IPROC
	help
	  Enable support for the Cygnus family,
	  which includes the following variants:
	  BCM11300, BCM11320, BCM11350, BCM11360,
	  BCM58300, BCM58302, BCM58303, BCM58305.

config ARCH_BCM_NSP
	bool "Broadcom Northstar Plus SoC Support"
	depends on ARCH_MULTI_V7
	select ARCH_BCM_IPROC
	select ARM_ERRATA_754322
	select ARM_ERRATA_775420
	select ARM_ERRATA_764369 if SMP
	select HAVE_SMP
	help
	  Support for Broadcom Northstar Plus SoC.
	  Broadcom Northstar Plus family of SoCs are used for switching control
	  and management applications as well as residential router/gateway
	  applications. The SoC features dual core Cortex A9 ARM CPUs,
	  integrating several peripheral interfaces including multiple Gigabit
	  Ethernet PHYs, DDR3 memory, PCIE Gen-2, USB 2.0 and USB 3.0, serial and
	  NAND flash, SATA and several other IO controllers.

config ARCH_BCM_5301X
	bool "Broadcom BCM470X / BCM5301X ARM SoC"
	depends on ARCH_MULTI_V7
	select ARCH_BCM_IPROC
	select ARM_ERRATA_754322
	select ARM_ERRATA_775420
	select ARM_ERRATA_764369 if SMP
	select HAVE_SMP

	help
	  Support for Broadcom BCM470X and BCM5301X SoCs with ARM CPU cores.

	  This is a network SoC line mostly used in home routers and
	  wifi access points, it's internal name is Northstar.
	  This inclused the following SoC: BCM53010, BCM53011, BCM53012,
	  BCM53014, BCM53015, BCM53016, BCM53017, BCM53018, BCM4707,
	  BCM4708 and BCM4709.

	  Do not confuse this with the BCM4760 which is a totally
	  different SoC or with the older BCM47XX and BCM53XX based
	  network SoC using a MIPS CPU, they are supported by arch/mips/bcm47xx

comment "KONA architected SoCs"

config ARCH_BCM_MOBILE
	bool
	select ARCH_REQUIRE_GPIOLIB
	select ARM_ERRATA_754322
	select ARM_ERRATA_775420
	select ARM_GIC
	select GPIO_BCM_KONA
	select TICK_ONESHOT
	select HAVE_ARM_ARCH_TIMER
	select PINCTRL
	select ARCH_BCM_MOBILE_SMP if SMP
	help
	  This enables support for systems based on Broadcom mobile SoCs.

config ARCH_BCM_281XX
	bool "Broadcom BCM281XX SoC family"
	depends on ARCH_MULTI_V7
	select ARCH_BCM_MOBILE
	select HAVE_SMP
	help
	  Enable support for the BCM281XX family, which includes
	  BCM11130, BCM11140, BCM11351, BCM28145 and BCM28155
	  variants.

config ARCH_BCM_21664
	bool "Broadcom BCM21664 SoC family"
	depends on ARCH_MULTI_V7
	select ARCH_BCM_MOBILE
	select HAVE_SMP
	help
	  Enable support for the BCM21664 family, which includes
	  BCM21663 and BCM21664 variants.

config ARCH_BCM_MOBILE_L2_CACHE
	bool "Broadcom mobile SoC level 2 cache support"
	depends on ARCH_BCM_MOBILE
	default y
	select CACHE_L2X0
	select ARCH_BCM_MOBILE_SMC

config ARCH_BCM_MOBILE_SMC
	bool
	depends on ARCH_BCM_MOBILE

config ARCH_BCM_MOBILE_SMP
	bool
	depends on ARCH_BCM_MOBILE
	select HAVE_ARM_SCU
	select ARM_ERRATA_764369
	help
	  SMP support for the BCM281XX and BCM21664 SoC families.
	  Provided as an option so SMP support for SoCs of this type
	  can be disabled for an SMP-enabled kernel.

comment "Other Architectures"

config ARCH_BCM2835
	bool "Broadcom BCM2835 family"
	depends on ARCH_MULTI_V6 || ARCH_MULTI_V7
	select ARCH_REQUIRE_GPIOLIB
	select ARM_AMBA
	select ARM_ERRATA_411920 if ARCH_MULTI_V6
	select ARM_TIMER_SP804
	select HAVE_ARM_ARCH_TIMER if ARCH_MULTI_V7
	select CLKSRC_OF
	select PINCTRL
	select PINCTRL_BCM2835
	help
	  This enables support for the Broadcom BCM2835 and BCM2836 SoCs.
	  This SoC is used in the Raspberry Pi and Roku 2 devices.

config ARCH_BCM_63XX
	bool "Broadcom BCM63xx DSL SoC"
	depends on ARCH_MULTI_V7
	depends on MMU
	select ARM_ERRATA_754322
	select ARM_ERRATA_764369 if SMP
	select ARM_GIC
	select ARM_GLOBAL_TIMER
	select CACHE_L2X0
	select HAVE_ARM_ARCH_TIMER
	select HAVE_ARM_TWD if SMP
	select HAVE_ARM_SCU if SMP
	select HAVE_SMP
	help
	  This enables support for systems based on Broadcom DSL SoCs.
	  It currently supports the 'BCM63XX' ARM-based family, which includes
	  the BCM63138 variant.

config ARCH_BRCMSTB
	bool "Broadcom BCM7XXX based boards"
	depends on ARCH_MULTI_V7
	select ARM_GIC
	select ARM_ERRATA_798181 if SMP
	select HAVE_ARM_ARCH_TIMER
	select BRCMSTB_L2_IRQ
	select BCM7120_L2_IRQ
	select ARCH_DMA_ADDR_T_64BIT if ARM_LPAE
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select SOC_BRCMSTB
	select SOC_BUS
	help
	  Say Y if you intend to run the kernel on a Broadcom ARM-based STB
	  chipset.

	  This enables support for Broadcom ARM-based set-top box chipsets,
	  including the 7445 family of chips.

endif
