# SPDX-License-Identifier: GPL-2.0
config M68K
	bool
	default y
	select ARCH_32BIT_OFF_T
	select ARCH_HAS_BINFMT_FLAT
	select ARCH_HAS_DMA_MMAP_PGPROT if MMU && !COLDFIRE
	select ARCH_HAS_DMA_PREP_COHERENT if HAS_DMA && MMU && !COLDFIRE
	select ARCH_HAS_SYNC_DMA_FOR_DEVICE if HAS_DMA
	select ARCH_MIGHT_HAVE_PC_PARPORT if ISA
	select ARCH_NO_COHERENT_DMA_MMAP if !MMU
	select ARCH_NO_PREEMPT if !COLDFIRE
	select BINFMT_FLAT_ARGVP_ENVP_ON_STACK
	select DMA_DIRECT_REMAP if HAS_DMA && MMU && !COLDFIRE
	select HAVE_IDE
	select HAVE_AOUT if MMU
	select HAVE_DEBUG_BUGVERBOSE
	select GENERIC_IRQ_SHOW
	select GENERIC_ATOMIC64
	select HAVE_UID16
	select VIRT_TO_BUS
	select ARCH_HAVE_NMI_SAFE_CMPXCHG if RMW_INSNS
	select GENERIC_CPU_DEVICES
	select GENERIC_IOMAP
	select GENERIC_STRNCPY_FROM_USER if MMU
	select GENERIC_STRNLEN_USER if MMU
	select ARCH_WANT_IPC_PARSE_VERSION
	select HAVE_FUTEX_CMPXCHG if MMU && FUTEX
	select HAVE_MOD_ARCH_SPECIFIC
	select MODULES_USE_ELF_REL
	select MODULES_USE_ELF_RELA
	select OLD_SIGSUSPEND3
	select OLD_SIGACTION
	select MMU_GATHER_NO_RANGE if MMU

config CPU_BIG_ENDIAN
	def_bool y

config ARCH_HAS_ILOG2_U32
	bool

config ARCH_HAS_ILOG2_U64
	bool

config GENERIC_HWEIGHT
	bool
	default y

config GENERIC_CALIBRATE_DELAY
	bool
	default y

config GENERIC_CSUM
	bool

config TIME_LOW_RES
	bool
	default y

config NO_IOPORT_MAP
	def_bool y

config NO_DMA
	def_bool (MMU && SUN3) || (!MMU && !COLDFIRE)

config ZONE_DMA
	bool
	default y

config HZ
	int
	default 1000 if CLEOPATRA
	default 100

config PGTABLE_LEVELS
	default 2 if SUN3 || COLDFIRE
	default 3

config MMU
	bool "MMU-based Paged Memory Management Support"
	default y
	help
	  Select if you want MMU-based virtualised addressing space
	  support by paged memory management. If unsure, say 'Y'.

config MMU_MOTOROLA
	bool

config MMU_COLDFIRE
	bool

config MMU_SUN3
	bool
	depends on MMU && !MMU_MOTOROLA && !MMU_COLDFIRE

config KEXEC
	bool "kexec system call"
	depends on M68KCLASSIC
	select KEXEC_CORE
	help
	  kexec is a system call that implements the ability to shutdown your
	  current kernel, and to start another kernel.  It is like a reboot
	  but it is independent of the system firmware.   And like a reboot
	  you can start any kernel with it, not just Linux.

	  The name comes from the similarity to the exec system call.

	  It is an ongoing process to be certain the hardware in a machine
	  is properly shutdown, so do not be surprised if this code does not
	  initially work for you.  As of this writing the exact hardware
	  interface is strongly in flux, so no good recommendation can be
	  made.

config BOOTINFO_PROC
	bool "Export bootinfo in procfs"
	depends on KEXEC && M68KCLASSIC
	help
	  Say Y to export the bootinfo used to boot the kernel in a
	  "bootinfo" file in procfs.  This is useful with kexec.

menu "Platform setup"

source "arch/m68k/Kconfig.cpu"

source "arch/m68k/Kconfig.machine"

source "arch/m68k/Kconfig.bus"

endmenu

menu "Kernel Features"

endmenu

if !MMU
menu "Power management options"

config PM
	bool "Power Management support"
	help
	  Support processor power management modes

endmenu
endif

source "arch/m68k/Kconfig.devices"
