# SPDX-License-Identifier: GPL-2.0
config M68K
	bool
	default y
	select ARCH_MIGHT_HAVE_PC_PARPORT if ISA
	select ARCH_NO_COHERENT_DMA_MMAP if !MMU
	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 ARCH_USES_GETTIMEOFFSET if MMU && !COLDFIRE
	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

config CPU_BIG_ENDIAN
	def_bool y

config RWSEM_GENERIC_SPINLOCK
	bool
	default y

config RWSEM_XCHGADD_ALGORITHM
	bool

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

source "init/Kconfig"

source "kernel/Kconfig.freezer"

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"

if COLDFIRE
source "kernel/Kconfig.preempt"
endif

source "mm/Kconfig"

endmenu

menu "Executable file formats"

source "fs/Kconfig.binfmt"

endmenu

if !MMU
menu "Power management options"

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

endmenu
endif

source "net/Kconfig"

source "drivers/Kconfig"

source "arch/m68k/Kconfig.devices"

source "fs/Kconfig"

source "arch/m68k/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"
