# SPDX-License-Identifier: GPL-2.0
comment "Machine Types"

if M68KCLASSIC

config AMIGA
	bool "Amiga support"
	depends on MMU
	select LEGACY_TIMER_TICK
	help
	  This option enables support for the Amiga series of computers. If
	  you plan to use this kernel on an Amiga, say Y here and browse the
	  material available in <file:Documentation/arch/m68k>; otherwise say N.

config ATARI
	bool "Atari support"
	depends on MMU
	select HAVE_ARCH_NVRAM_OPS
	select LEGACY_TIMER_TICK
	help
	  This option enables support for the 68000-based Atari series of
	  computers (including the TT, Falcon and Medusa). If you plan to use
	  this kernel on an Atari, say Y here and browse the material
	  available in <file:Documentation/arch/m68k>; otherwise say N.

config ATARI_KBD_CORE
	bool

config MAC
	bool "Macintosh support"
	depends on MMU
	select HAVE_ARCH_NVRAM_OPS
	select HAVE_PATA_PLATFORM
	select LEGACY_TIMER_TICK
	help
	  This option enables support for the Apple Macintosh series of
	  computers. If you plan to use this kernel on a Mac, say Y here and
	  browse the documentation available at <http://www.mac.linux-m68k.org/>;
	  otherwise say N.

config APOLLO
	bool "Apollo support"
	depends on MMU
	select LEGACY_TIMER_TICK
	help
	  Say Y here if you want to run Linux on an MC680x0-based Apollo
	  Domain workstation such as the DN3500.

config VME
	bool "VME (Motorola and BVM) support"
	depends on MMU
	help
	  Say Y here if you want to build a kernel for a 680x0 based VME
	  board.  Boards currently supported include Motorola boards MVME147,
	  MVME162, MVME166, MVME167, MVME172, and MVME177.  BVME4000 and
	  BVME6000 boards from BVM Ltd are also supported.

config MVME147
	bool "MVME147 support"
	depends on MMU
	depends on VME
	select LEGACY_TIMER_TICK
	help
	  Say Y to include support for early Motorola VME boards.  This will
	  build a kernel which can run on MVME147 single-board computers.  If
	  you select this option you will have to select the appropriate
	  drivers for SCSI, Ethernet and serial ports later on.

config MVME16x
	bool "MVME162, 166 and 167 support"
	depends on MMU
	depends on VME
	select LEGACY_TIMER_TICK
	help
	  Say Y to include support for Motorola VME boards.  This will build a
	  kernel which can run on MVME162, MVME166, MVME167, MVME172, and
	  MVME177 boards.  If you select this option you will have to select
	  the appropriate drivers for SCSI, Ethernet and serial ports later
	  on.

config BVME6000
	bool "BVME4000 and BVME6000 support"
	depends on MMU
	depends on VME
	select LEGACY_TIMER_TICK
	help
	  Say Y to include support for VME boards from BVM Ltd.  This will
	  build a kernel which can run on BVME4000 and BVME6000 boards.  If
	  you select this option you will have to select the appropriate
	  drivers for SCSI, Ethernet and serial ports later on.

config HP300
	bool "HP9000/300 and HP9000/400 support"
	depends on MMU
	select LEGACY_TIMER_TICK
	help
	  This option enables support for the HP9000/300 and HP9000/400 series
	  of workstations. Support for these machines is still somewhat
	  experimental. If you plan to try to use the kernel on such a machine
	  say Y here.
	  Everybody else says N.

config SUN3X
	bool "Sun3x support"
	depends on MMU
	select LEGACY_TIMER_TICK
	select M68030
	help
	  This option enables support for the Sun 3x series of workstations.
	  Be warned that this support is very experimental.
	  Note that Sun 3x kernels are not compatible with Sun 3 hardware.
	  General Linux information on the Sun 3x series (now discontinued)
	  is at <http://www.angelfire.com/ca2/tech68k/sun3.html>.

	  If you don't want to compile a kernel for a Sun 3x, say N.

config Q40
	bool "Q40/Q60 support"
	depends on MMU
	select LEGACY_TIMER_TICK
	help
	  The Q40 is a Motorola 68040-based successor to the Sinclair QL
	  manufactured in Germany.  There is an official Q40 home page at
	  <http://www.q40.de/>.  This option enables support for the Q40 and
	  Q60. Select your CPU below.  For 68LC060 don't forget to enable FPU
	  emulation.

config VIRT
	bool "Virtual M68k Machine support"
	depends on MMU
	select GENERIC_CLOCKEVENTS
	select GOLDFISH
	select GOLDFISH_TIMER
	select GOLDFISH_TTY
	select M68040
	select POWER_RESET
	select POWER_RESET_QEMU_VIRT_CTRL
	select RTC_CLASS
	select RTC_DRV_GOLDFISH
	select TTY
	select VIRTIO_MENU
	select VIRTIO_MMIO
	help
	  This options enable a pure virtual machine based on m68k,
	  VIRTIO MMIO devices and GOLDFISH interfaces (TTY, RTC, PIC).

config PILOT
	bool

config PILOT3
	bool "Pilot 1000/5000, PalmPilot Personal/Pro, or PalmIII support"
	depends on !MMU
	select M68328
	select PILOT
	help
	  Support for the Palm Pilot 1000/5000, Personal/Pro and PalmIII.

config XCOPILOT_BUGS
	bool "(X)Copilot support"
	depends on PILOT3
	help
	  Support the bugs of Xcopilot.

config UCSIMM
	bool "uCsimm module support"
	depends on !MMU
	select M68EZ328
	help
	  Support for the Arcturus Networks uCsimm module.

config UCDIMM
	bool "uCdimm module support"
	depends on !MMU
	select M68VZ328
	help
	  Support for the Arcturus Networks uCdimm module.

config DRAGEN2
	bool "DragonEngine II board support"
	depends on !MMU
	select M68VZ328
	help
	  Support for the DragonEngine II board.

config DIRECT_IO_ACCESS
	bool "Allow user to access IO directly"
	depends on (UCSIMM || UCDIMM || DRAGEN2)
	help
	  Disable the CPU internal registers protection in user mode,
	  to allow a user application to read/write them.

config INIT_LCD
	bool "Initialize LCD"
	depends on (UCSIMM || UCDIMM || DRAGEN2)
	help
	  Initialize the LCD controller of the 68x328 processor.

config MEMORY_RESERVE
	int "Memory reservation (MiB)"
	depends on (UCSIMM || UCDIMM)
	default 0
	help
	  Reserve certain memory regions on 68x328 based boards.

endif # M68KCLASSIC

config ARN5206
	bool "Arnewsh 5206 board support"
	depends on M5206
	help
	  Support for the Arnewsh 5206 board.

config M5206eC3
	bool "Motorola M5206eC3 board support"
	depends on M5206e
	help
	  Support for the Motorola M5206eC3 board.

config ELITE
	bool "Motorola M5206eLITE board support"
	depends on M5206e
	help
	  Support for the Motorola M5206eLITE board.

config M5235EVB
	bool "Freescale M5235EVB support"
	depends on M523x
	help
	  Support for the Freescale M5235EVB board.

config M5249C3
	bool "Motorola M5249C3 board support"
	depends on M5249
	help
	  Support for the Motorola M5249C3 board.

config M5272C3
	bool "Motorola M5272C3 board support"
	depends on M5272
	help
	  Support for the Motorola M5272C3 board.

config WILDFIRE
	bool "Intec Automation Inc. WildFire board support"
	depends on M528x
	help
	  Support for the Intec Automation Inc. WildFire.

config WILDFIREMOD
	bool "Intec Automation Inc. WildFire module support"
	depends on M528x
	help
	  Support for the Intec Automation Inc. WildFire module.

config ARN5307
	bool "Arnewsh 5307 board support"
	depends on M5307
	help
	  Support for the Arnewsh 5307 board.

config M5307C3
	bool "Motorola M5307C3 board support"
	depends on M5307
	help
	  Support for the Motorola M5307C3 board.

config SECUREEDGEMP3
	bool "SnapGear SecureEdge/MP3 platform support"
	depends on M5307
	help
	  Support for the SnapGear SecureEdge/MP3 platform.

config M5407C3
	bool "Motorola M5407C3 board support"
	depends on M5407
	help
	  Support for the Motorola M5407C3 board.

config AMCORE
	bool "Sysam AMCORE board support"
	depends on M5307
	help
	  Support for the Sysam AMCORE open-hardware generic board.

config STMARK2
	bool "Sysam stmark2 board support"
	depends on M5441x
	help
	  Support for the Sysam stmark2 open-hardware generic board.

config FIREBEE
	bool "FireBee board support"
	depends on M547x
	help
	  Support for the FireBee ColdFire 5475 based board.

config CLEOPATRA
	bool "Feith CLEOPATRA board support"
	depends on (M5307 || M5407)
	help
	  Support for the Feith Cleopatra boards.

config CANCam
	bool "Feith CANCam board support"
	depends on M5272
	help
	  Support for the Feith CANCam board.

config SCALES
	bool "Feith SCALES board support"
	depends on M5272
	help
	  Support for the Feith SCALES board.

config NETtel
	bool "SecureEdge/NETtel board support"
	depends on (M5206e || M5272 || M5307)
	help
	  Support for the SnapGear NETtel/SecureEdge/SnapGear boards.

config MOD5272
	bool "Netburner MOD-5272 board support"
	depends on M5272
	help
	  Support for the Netburner MOD-5272 board.

if !MMU || COLDFIRE

comment "Machine Options"

config UBOOT
	bool "Support for U-Boot command line parameters"
	depends on COLDFIRE
	help
	  If you say Y here kernel will try to collect command
	  line parameters from the initial u-boot stack.

config 4KSTACKS
	bool "Use 4Kb for kernel stacks instead of 8Kb"
	default y
	help
	  If you say Y here the kernel will use a 4Kb stacksize for the
	  kernel stack attached to each process/thread. This facilitates
	  running more threads on a system and also reduces the pressure
	  on the VM subsystem for higher order allocations.

comment "RAM configuration"

config RAMBASE
	hex "Address of the base of RAM"
	default "0"
	help
	  Define the address that RAM starts at. On many platforms this is
	  0, the base of the address space. And this is the default. Some
	  platforms choose to setup their RAM at other addresses within the
	  processor address space.

config RAMSIZE
	hex "Size of RAM (in bytes), or 0 for automatic"
	default "0x400000"
	help
	  Define the size of the system RAM. If you select 0 then the
	  kernel will try to probe the RAM size at runtime. This is not
	  supported on all CPU types.

config VECTORBASE
	hex "Address of the base of system vectors"
	default "0"
	help
	  Define the address of the system vectors. Commonly this is
	  put at the start of RAM, but it doesn't have to be. On ColdFire
	  platforms this address is programmed into the VBR register, thus
	  actually setting the address to use.

config MBAR
	hex "Address of the MBAR (internal peripherals)"
	default "0x10000000"
	depends on HAVE_MBAR
	help
	  Define the address of the internal system peripherals. This value
	  is set in the processors MBAR register. This is generally setup by
	  the boot loader, and will not be written by the kernel. By far most
	  ColdFire boards use the default 0x10000000 value, so if unsure then
	  use this.

config IPSBAR
	hex "Address of the IPSBAR (internal peripherals)"
	default "0x40000000"
	depends on HAVE_IPSBAR
	help
	  Define the address of the internal system peripherals. This value
	  is set in the processors IPSBAR register. This is generally setup by
	  the boot loader, and will not be written by the kernel. By far most
	  ColdFire boards use the default 0x40000000 value, so if unsure then
	  use this.

config KERNELBASE
	hex "Address of the base of kernel code"
	default "0x400"
	help
	  Typically on m68k systems the kernel will not start at the base
	  of RAM, but usually some small offset from it. Define the start
	  address of the kernel here. The most common setup will have the
	  processor vectors at the base of RAM and then the start of the
	  kernel. On some platforms some RAM is reserved for boot loaders
	  and the kernel starts after that. The 0x400 default was based on
	  a system with the RAM based at address 0, and leaving enough room
	  for the theoretical maximum number of 256 vectors.

comment "ROM configuration"

config ROM
	bool "Specify ROM linker regions"
	help
	  Define a ROM region for the linker script. This creates a kernel
	  that can be stored in flash, with possibly the text, and data
	  regions being copied out to RAM at startup.

config ROMVEC
	hex "Address of the base of the ROM vectors"
	default "0x10c10000"
	depends on ROM
	help
	  This is almost always the same as the base of the ROM. Since on all
	  68000 type variants the vectors are at the base of the boot device
	  on system startup.

config ROMSTART
	hex "Address of the base of system image in ROM"
	default "0x10c10400"
	depends on ROM
	help
	  Define the start address of the system image in ROM. Commonly this
	  is strait after the ROM vectors.

choice
	prompt "Kernel executes from"
	help
	  Choose the memory type that the kernel will be running in.

config RAMKERNEL
	bool "RAM"
	help
	  The kernel will be resident in RAM when running.

config ROMKERNEL
	bool "ROM"
	depends on ROM
	help
	  The kernel will be resident in FLASH/ROM when running. This is
	  often referred to as Execute-in-Place (XIP), since the kernel
	  code executes from the position it is stored in the FLASH/ROM.

endchoice

endif # !MMU || COLDFIRE
