config ARCH_SHMOBILE
	bool
	select ZONE_DMA if ARM_LPAE

config PM_RCAR
	bool

config PM_RMOBILE
	bool

config ARCH_RCAR_GEN1
	bool
	select PM_RCAR if PM || SMP
	select RENESAS_INTC_IRQPIN
	select SYS_SUPPORTS_SH_TMU

config ARCH_RCAR_GEN2
	bool
	select PM_RCAR if PM || SMP
	select RENESAS_IRQC
	select SYS_SUPPORTS_SH_CMT
	select PCI_DOMAINS if PCI

config ARCH_RMOBILE
	bool
	select PM_RMOBILE if PM && !ARCH_SHMOBILE_MULTI
	select SYS_SUPPORTS_SH_CMT
	select SYS_SUPPORTS_SH_TMU

menuconfig ARCH_SHMOBILE_MULTI
	bool "Renesas ARM SoCs" if ARCH_MULTI_V7
	depends on MMU
	select ARCH_SHMOBILE
	select HAVE_ARM_SCU if SMP
	select HAVE_ARM_TWD if SMP
	select ARM_GIC
	select ARCH_DMA_ADDR_T_64BIT if ARM_LPAE
	select NO_IOPORT_MAP
	select PINCTRL
	select ARCH_REQUIRE_GPIOLIB

if ARCH_SHMOBILE_MULTI

#comment "Renesas ARM SoCs System Type"

config ARCH_EMEV2
	bool "Emma Mobile EV2"
	select SYS_SUPPORTS_EM_STI

config ARCH_R7S72100
	bool "RZ/A1H (R7S72100)"
	select SYS_SUPPORTS_SH_MTU2

config ARCH_R8A7740
	bool "R-Mobile A1 (R8A77400)"
	select ARCH_RMOBILE
	select RENESAS_INTC_IRQPIN

config ARCH_R8A7779
	bool "R-Car H1 (R8A77790)"
	select ARCH_RCAR_GEN1

config ARCH_R8A7790
	bool "R-Car H2 (R8A77900)"
	select ARCH_RCAR_GEN2

config ARCH_R8A7791
	bool "R-Car M2-W (R8A77910)"
	select ARCH_RCAR_GEN2

config ARCH_R8A7794
	bool "R-Car E2 (R8A77940)"
	select ARCH_RCAR_GEN2

comment "Renesas ARM SoCs Board Type"

config MACH_LAGER
	bool "Lager board"
	depends on ARCH_R8A7790
	select MICREL_PHY if SH_ETH

config MACH_MARZEN
	bool "MARZEN board"
	depends on ARCH_R8A7779
	select REGULATOR_FIXED_VOLTAGE if REGULATOR

comment "Renesas ARM SoCs System Configuration"
endif

if ARCH_SHMOBILE_LEGACY

comment "Renesas ARM SoCs System Type"

config ARCH_SH7372
	bool "SH-Mobile AP4 (SH7372)"
	select ARCH_RMOBILE
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select ARM_CPU_SUSPEND if PM || CPU_IDLE
	select SH_INTC

config ARCH_SH73A0
	bool "SH-Mobile AG5 (R8A73A00)"
	select ARCH_RMOBILE
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select ARM_GIC
	select I2C
	select SH_INTC
	select RENESAS_INTC_IRQPIN

config ARCH_R8A73A4
	bool "R-Mobile APE6 (R8A73A40)"
	select ARCH_RMOBILE
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select ARM_GIC
	select RENESAS_IRQC

config ARCH_R8A7740
	bool "R-Mobile A1 (R8A77400)"
	select ARCH_RMOBILE
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select ARM_GIC
	select RENESAS_INTC_IRQPIN

config ARCH_R8A7778
	bool "R-Car M1A (R8A77781)"
	select ARCH_RCAR_GEN1
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select ARM_GIC

config ARCH_R8A7779
	bool "R-Car H1 (R8A77790)"
	select ARCH_RCAR_GEN1
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select ARM_GIC

config ARCH_R8A7790
	bool "R-Car H2 (R8A77900)"
	select ARCH_RCAR_GEN2
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select ARM_GIC
	select MIGHT_HAVE_PCI
	select ARCH_DMA_ADDR_T_64BIT if ARM_LPAE

comment "Renesas ARM SoCs Board Type"

config MACH_APE6EVM
	bool "APE6EVM board"
	depends on ARCH_R8A73A4
	select SMSC_PHY if SMSC911X
	select USE_OF

config MACH_APE6EVM_REFERENCE
	bool "APE6EVM board - Reference Device Tree Implementation"
	depends on ARCH_R8A73A4
	select SMSC_PHY if SMSC911X
	select USE_OF
	---help---
	   Use reference implementation of APE6EVM board support
	   which makes a greater use of device tree at the expense
	   of not supporting a number of devices.

	   This is intended to aid developers

config MACH_MACKEREL
	bool "mackerel board"
	depends on ARCH_SH7372
	select ARCH_REQUIRE_GPIOLIB
	select REGULATOR_FIXED_VOLTAGE if REGULATOR
	select SMSC_PHY if SMSC911X
	select SND_SOC_AK4642 if SND_SIMPLE_CARD
	select USE_OF

config MACH_ARMADILLO800EVA
	bool "Armadillo-800 EVA board"
	depends on ARCH_R8A7740
	select ARCH_REQUIRE_GPIOLIB
	select REGULATOR_FIXED_VOLTAGE if REGULATOR
	select SMSC_PHY if SH_ETH
	select SND_SOC_WM8978 if SND_SIMPLE_CARD
	select USE_OF

config MACH_BOCKW
	bool "BOCK-W platform"
	depends on ARCH_R8A7778
	select ARCH_REQUIRE_GPIOLIB
	select REGULATOR_FIXED_VOLTAGE if REGULATOR
	select SND_SOC_AK4554 if SND_SIMPLE_CARD
	select SND_SOC_AK4642 if SND_SIMPLE_CARD
	select USE_OF

config MACH_BOCKW_REFERENCE
	bool "BOCK-W  - Reference Device Tree Implementation"
	depends on ARCH_R8A7778
	select ARCH_REQUIRE_GPIOLIB
	select REGULATOR_FIXED_VOLTAGE if REGULATOR
	select USE_OF
	---help---
	   Use reference implementation of BockW board support
	   which makes use of device tree at the expense
	   of not supporting a number of devices.

	   This is intended to aid developers

config MACH_MARZEN
	bool "MARZEN board"
	depends on ARCH_R8A7779
	select ARCH_REQUIRE_GPIOLIB
	select REGULATOR_FIXED_VOLTAGE if REGULATOR
	select USE_OF

config MACH_LAGER
	bool "Lager board"
	depends on ARCH_R8A7790
	select USE_OF
	select MICREL_PHY if SH_ETH
	select SND_SOC_AK4642 if SND_SIMPLE_CARD

config MACH_KZM9G
	bool "KZM-A9-GT board"
	depends on ARCH_SH73A0
	select ARCH_REQUIRE_GPIOLIB
	select REGULATOR_FIXED_VOLTAGE if REGULATOR
	select SND_SOC_AK4642 if SND_SIMPLE_CARD
	select USE_OF

config MACH_KZM9G_REFERENCE
	bool "KZM-A9-GT board - Reference Device Tree Implementation"
	depends on ARCH_SH73A0
	select ARCH_REQUIRE_GPIOLIB
	select REGULATOR_FIXED_VOLTAGE if REGULATOR
	select SND_SOC_AK4642 if SND_SIMPLE_CARD
	select USE_OF
	---help---
	   Use reference implementation of KZM-A9-GT board support
	   which makes as greater use of device tree at the expense
	   of not supporting a number of devices.

	   This is intended to aid developers

comment "Renesas ARM SoCs System Configuration"

config CPU_HAS_INTEVT
        bool
	default y

config SH_CLK_CPG
	bool

source "drivers/sh/Kconfig"

endif

if ARCH_SHMOBILE

menu "Timer and clock configuration"

config SHMOBILE_TIMER_HZ
	int "Kernel HZ (jiffies per second)"
	range 32 1024
	default "128"
	help
	  Allows the configuration of the timer frequency. It is customary
	  to have the timer interrupt run at 1000 Hz or 100 Hz, but in the
	  case of low timer frequencies other values may be more suitable.
	  Renesas ARM SoC systems using a 32768 Hz RCLK for clock events may
	  want to select a HZ value such as 128 that can evenly divide RCLK.
	  A HZ value that does not divide evenly may cause timer drift.

endmenu

endif
