# SPDX-License-Identifier: GPL-2.0
if MIPS_GENERIC_KERNEL

config LEGACY_BOARDS
	bool
	help
	  Select this from your board if the board must use a legacy, non-UHI,
	  boot protocol. This will cause the kernel to scan through the list of
	  supported machines calling their detect functions in turn if the
	  kernel is booted without being provided with an FDT via the UHI
	  boot protocol.

config YAMON_DT_SHIM
	bool
	help
	  Select this from your board if the board uses the YAMON bootloader
	  and you wish to include code which helps translate various
	  YAMON-provided environment variables into a device tree properties.

comment "Legacy (non-UHI/non-FIT) Boards"

config LEGACY_BOARD_SEAD3
	bool "Support MIPS SEAD-3 boards"
	select LEGACY_BOARDS
	select YAMON_DT_SHIM
	help
	  Enable this to include support for booting on MIPS SEAD-3 FPGA-based
	  development boards, which boot using a legacy boot protocol.

comment "MSCC Ocelot doesn't work with SEAD3 enabled"
	depends on LEGACY_BOARD_SEAD3

config LEGACY_BOARD_OCELOT
	bool "Legacy support for Ocelot based boards"
	depends on LEGACY_BOARD_SEAD3=n
	select LEGACY_BOARDS
	select SOC_VCOREIII
	select SYS_HAS_EARLY_PRINTK
	select USE_GENERIC_EARLY_PRINTK_8250

config SOC_VCOREIII
	bool
	select GPIOLIB
	select MSCC_OCELOT_IRQ
	select MSCC_OCELOT #will be removed when driver no more use it

#Will be removed when the driver using it will be converted to SOC_VCOREIII
config MSCC_OCELOT
	bool

comment "FIT/UHI Boards"

config FIT_IMAGE_FDT_BOSTON
	bool "Include FDT for MIPS Boston boards"
	help
	  Enable this to include the FDT for the MIPS Boston development board
	  from Imagination Technologies in the FIT kernel image. You should
	  enable this if you wish to boot on a MIPS Boston board, as it is
	  expected by the bootloader.

config FIT_IMAGE_FDT_MARDUK
	bool "Include FDT for IMG Pistachio Marduk (CI40) boards"
	help
	  Enable this to include the FDT for the IMG Pistachio Marduk (CI40)
	  from Imagination Technologies in the FIT kernel image.

config FIT_IMAGE_FDT_NI169445
	bool "Include FDT for NI 169445"
	help
	  Enable this to include the FDT for the 169445 platform from
	  National Instruments in the FIT kernel image.

config FIT_IMAGE_FDT_XILFPGA
	bool "Include FDT for Xilfpga"
	help
	  Enable this to include the FDT for the MIPSfpga platform
	  from Imagination Technologies in the FIT kernel image.

config FIT_IMAGE_FDT_OCELOT
	bool "Include FDT for Microsemi Ocelot development platforms"
	select SOC_VCOREIII
	help
	  Enable this to include the FDT for the Ocelot development platforms
	  from Microsemi in the FIT kernel image.
	  This requires u-boot on the platform.

config FIT_IMAGE_FDT_LUTON
	bool "Include FDT for Microsemi Luton development platforms"
	select SOC_VCOREIII
	help
	  Enable this to include the FDT for the Luton development platforms
	  from Microsemi in the FIT kernel image.
	  This requires u-boot on the platform.

config FIT_IMAGE_FDT_JAGUAR2
	bool "Include FDT for Microsemi Jaguar2 development platforms"
	select SOC_VCOREIII
	help
	  Enable this to include the FDT for the Jaguar2 development platforms
	  from Microsemi in the FIT kernel image.
	  This requires u-boot on the platform.

config FIT_IMAGE_FDT_SERVAL
	bool "Include FDT for Microsemi Serval development platforms"
	select SOC_VCOREIII
	help
	  Enable this to include the FDT for the Serval development platforms
	  from Microsemi in the FIT kernel image.
	  This requires u-boot on the platform.

config BOARD_INGENIC
	bool "Support boards based on Ingenic SoCs"
	select MACH_INGENIC_GENERIC
	help
	  Enable support for boards based on Ingenic SoCs.

config VIRT_BOARD_RANCHU
	bool "Support Ranchu platform for Android emulator"
	help
	  This enables support for the platform used by Android emulator.

	  Ranchu platform consists of a set of virtual devices. This platform
	  enables emulation of variety of virtual configurations while using
	  Android emulator. Android emulator is based on Qemu, and contains
	  the support for the same set of virtual devices.

endif
