if ARCH_OMAP2PLUS

menu "TI OMAP2/3/4 Specific Features"

config ARCH_OMAP2PLUS_TYPICAL
	bool "Typical OMAP configuration"
	default y
	select AEABI
	select HIGHMEM
	select I2C
	select I2C_OMAP
	select MENELAUS if ARCH_OMAP2
	select NEON if ARCH_OMAP3 || ARCH_OMAP4 || SOC_OMAP5
	select PINCTRL
	select PM_RUNTIME
	select REGULATOR
	select SERIAL_OMAP
	select SERIAL_OMAP_CONSOLE
	select TWL4030_CORE if ARCH_OMAP3 || ARCH_OMAP4
	select TWL4030_POWER if ARCH_OMAP3 || ARCH_OMAP4
	select VFP
	help
	  Compile a kernel suitable for booting most boards

config SOC_HAS_OMAP2_SDRC
	bool "OMAP2 SDRAM Controller support"

config SOC_HAS_REALTIME_COUNTER
	bool "Real time free running counter"

config ARCH_OMAP2
	bool "TI OMAP2"
	depends on ARCH_OMAP2PLUS
	default y
	select CPU_V6
	select MULTI_IRQ_HANDLER
	select SOC_HAS_OMAP2_SDRC

config ARCH_OMAP3
	bool "TI OMAP3"
	depends on ARCH_OMAP2PLUS
	default y
	select ARCH_HAS_OPP
	select ARM_CPU_SUSPEND if PM
	select CPU_V7
	select MULTI_IRQ_HANDLER
	select OMAP_INTERCONNECT
	select PM_OPP if PM
	select PM_RUNTIME if CPU_IDLE
	select SOC_HAS_OMAP2_SDRC
	select USB_ARCH_HAS_EHCI if USB_SUPPORT

config ARCH_OMAP4
	bool "TI OMAP4"
	default y
	depends on ARCH_OMAP2PLUS
	select ARCH_HAS_OPP
	select ARCH_NEEDS_CPU_IDLE_COUPLED if SMP
	select ARM_CPU_SUSPEND if PM
	select ARM_ERRATA_720789
	select ARM_GIC
	select CACHE_L2X0
	select CPU_V7
	select HAVE_SMP
	select LOCAL_TIMERS if SMP
	select OMAP_INTERCONNECT
	select PL310_ERRATA_588369
	select PL310_ERRATA_727915
	select PM_OPP if PM
	select PM_RUNTIME if CPU_IDLE
	select USB_ARCH_HAS_EHCI if USB_SUPPORT

config SOC_OMAP5
	bool "TI OMAP5"
	select ARM_ARCH_TIMER
	select ARM_CPU_SUSPEND if PM
	select ARM_GIC
	select CPU_V7
	select HAVE_SMP
	select SOC_HAS_REALTIME_COUNTER

comment "OMAP Core Type"
	depends on ARCH_OMAP2

config SOC_OMAP2420
	bool "OMAP2420 support"
	depends on ARCH_OMAP2
	default y
	select OMAP_DM_TIMER
	select SOC_HAS_OMAP2_SDRC

config SOC_OMAP2430
	bool "OMAP2430 support"
	depends on ARCH_OMAP2
	default y
	select SOC_HAS_OMAP2_SDRC

config SOC_OMAP3430
	bool "OMAP3430 support"
	depends on ARCH_OMAP3
	default y
	select SOC_HAS_OMAP2_SDRC

config SOC_TI81XX
	bool "TI81XX support"
	depends on ARCH_OMAP3
	default y

config SOC_AM33XX
	bool "AM33XX support"
	default y
	select ARM_CPU_SUSPEND if PM
	select CPU_V7
	select MULTI_IRQ_HANDLER

config OMAP_PACKAGE_ZAF
       bool

config OMAP_PACKAGE_ZAC
       bool

config OMAP_PACKAGE_CBC
       bool

config OMAP_PACKAGE_CBB
       bool

config OMAP_PACKAGE_CUS
       bool

config OMAP_PACKAGE_CBP
       bool

config OMAP_PACKAGE_CBL
       bool

config OMAP_PACKAGE_CBS
       bool

comment "OMAP Board Type"
	depends on ARCH_OMAP2PLUS

config MACH_OMAP_GENERIC
	bool "Generic OMAP2+ board"
	depends on ARCH_OMAP2PLUS
	default y
	help
	  Support for generic TI OMAP2+ boards using Flattened Device Tree.
	  More information at Documentation/devicetree

config MACH_OMAP2_TUSB6010
	bool
	depends on ARCH_OMAP2 && SOC_OMAP2420
	default y if MACH_NOKIA_N8X0

config MACH_OMAP_H4
	bool "OMAP 2420 H4 board"
	depends on SOC_OMAP2420
	default y
	select OMAP_DEBUG_DEVICES
	select OMAP_PACKAGE_ZAF

config MACH_OMAP_APOLLON
	bool "OMAP 2420 Apollon board"
	depends on SOC_OMAP2420
	default y
	select OMAP_PACKAGE_ZAC

config MACH_OMAP_2430SDP
	bool "OMAP 2430 SDP board"
	depends on SOC_OMAP2430
	default y
	select OMAP_PACKAGE_ZAC

config MACH_OMAP3_BEAGLE
	bool "OMAP3 BEAGLE board"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CBB

config MACH_DEVKIT8000
	bool "DEVKIT8000 board"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CUS

config MACH_OMAP_LDP
	bool "OMAP3 LDP board"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CBB

config MACH_OMAP3530_LV_SOM
	bool "OMAP3 Logic 3530 LV SOM board"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CBB
	help
	 Support for the LogicPD OMAP3530 SOM Development kit
	 for full description please see the products webpage at
	 http://www.logicpd.com/products/development-kits/texas-instruments-zoom%E2%84%A2-omap35x-development-kit

config MACH_OMAP3_TORPEDO
	bool "OMAP3 Logic 35x Torpedo board"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CBB
	help
	 Support for the LogicPD OMAP35x Torpedo Development kit
	 for full description please see the products webpage at
	 http://www.logicpd.com/products/development-kits/zoom-omap35x-torpedo-development-kit

config MACH_OVERO
	bool "Gumstix Overo board"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CBB

config MACH_OMAP3EVM
	bool "OMAP 3530 EVM board"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CBB

config MACH_OMAP3517EVM
	bool "OMAP3517/ AM3517 EVM board"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CBB

config MACH_CRANEBOARD
	bool "AM3517/05 CRANE board"
	depends on ARCH_OMAP3
	select OMAP_PACKAGE_CBB

config MACH_OMAP3_PANDORA
	bool "OMAP3 Pandora"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CBB
	select REGULATOR_FIXED_VOLTAGE if REGULATOR

config MACH_TOUCHBOOK
	bool "OMAP3 Touch Book"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CBB

config MACH_OMAP_3430SDP
	bool "OMAP 3430 SDP board"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CBB

config MACH_NOKIA_N800
       bool

config MACH_NOKIA_N810
       bool

config MACH_NOKIA_N810_WIMAX
       bool

config MACH_NOKIA_N8X0
	bool "Nokia N800/N810"
	depends on SOC_OMAP2420
	default y
	select MACH_NOKIA_N800
	select MACH_NOKIA_N810
	select MACH_NOKIA_N810_WIMAX
	select OMAP_PACKAGE_ZAC

config MACH_NOKIA_RM680
	bool "Nokia RM-680/696 board"
	depends on ARCH_OMAP3
	default y
	select MACH_NOKIA_RM696
	select OMAP_PACKAGE_CBB

config MACH_NOKIA_RX51
	bool "Nokia RX-51 board"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CBB

config MACH_OMAP_ZOOM2
	bool "OMAP3 Zoom2 board"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CBB
	select REGULATOR_FIXED_VOLTAGE if REGULATOR
	select SERIAL_8250
	select SERIAL_8250_CONSOLE
	select SERIAL_CORE_CONSOLE

config MACH_OMAP_ZOOM3
	bool "OMAP3630 Zoom3 board"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CBP
	select REGULATOR_FIXED_VOLTAGE if REGULATOR
	select SERIAL_8250
	select SERIAL_8250_CONSOLE
	select SERIAL_CORE_CONSOLE

config MACH_CM_T35
	bool "CompuLab CM-T35/CM-T3730 modules"
	depends on ARCH_OMAP3
	default y
	select MACH_CM_T3730
	select OMAP_PACKAGE_CUS

config MACH_CM_T3517
	bool "CompuLab CM-T3517 module"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CBB

config MACH_CM_T3730
       bool

config MACH_IGEP0020
	bool "IGEP v2 board"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CBB

config MACH_IGEP0030
	bool "IGEP OMAP3 module"
	depends on ARCH_OMAP3
	default y
	select MACH_IGEP0020
	select OMAP_PACKAGE_CBB

config MACH_SBC3530
	bool "OMAP3 SBC STALKER board"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CUS

config MACH_OMAP_3630SDP
	bool "OMAP3630 SDP board"
	depends on ARCH_OMAP3
	default y
	select OMAP_PACKAGE_CBP

config MACH_TI8168EVM
	bool "TI8168 Evaluation Module"
	depends on SOC_TI81XX
	default y

config MACH_TI8148EVM
	bool "TI8148 Evaluation Module"
	depends on SOC_TI81XX
	default y

config MACH_OMAP_4430SDP
	bool "OMAP 4430 SDP board"
	default y
	depends on ARCH_OMAP4
	select OMAP_PACKAGE_CBL
	select OMAP_PACKAGE_CBS
	select REGULATOR_FIXED_VOLTAGE if REGULATOR

config MACH_OMAP4_PANDA
	bool "OMAP4 Panda Board"
	default y
	depends on ARCH_OMAP4
	select OMAP_PACKAGE_CBL
	select OMAP_PACKAGE_CBS
	select REGULATOR_FIXED_VOLTAGE if REGULATOR

config OMAP3_EMU
	bool "OMAP3 debugging peripherals"
	depends on ARCH_OMAP3
	select ARM_AMBA
	select OC_ETM
	help
	  Say Y here to enable debugging hardware of omap3

config OMAP3_SDRC_AC_TIMING
	bool "Enable SDRC AC timing register changes"
	depends on ARCH_OMAP3
	default n
	help
	  If you know that none of your system initiators will attempt to
	  access SDRAM during CORE DVFS, select Y here.  This should boost
	  SDRAM performance at lower CORE OPPs.  There are relatively few
	  users who will wish to say yes at this point - almost everyone will
	  wish to say no.  Selecting yes without understanding what is
	  going on could result in system crashes;

config OMAP4_ERRATA_I688
	bool "OMAP4 errata: Async Bridge Corruption"
	depends on ARCH_OMAP4
	select ARCH_HAS_BARRIERS
	help
	  If a data is stalled inside asynchronous bridge because of back
	  pressure, it may be accepted multiple times, creating pointer
	  misalignment that will corrupt next transfers on that data path
	  until next reset of the system (No recovery procedure once the
	  issue is hit, the path remains consistently broken). Async bridge
	  can be found on path between MPU to EMIF and MPU to L3 interconnect.
	  This situation can happen only when the idle is initiated by a
	  Master Request Disconnection (which is trigged by software when
	  executing WFI on CPU).
	  The work-around for this errata needs all the initiators connected
	  through async bridge must ensure that data path is properly drained
	  before issuing WFI. This condition will be met if one Strongly ordered
	  access is performed to the target right before executing the WFI.
	  In MPU case, L3 T2ASYNC FIFO and DDR T2ASYNC FIFO needs to be drained.
	  IO barrier ensure that there is no synchronisation loss on initiators
	  operating on both interconnect port simultaneously.
endmenu

endif
