# mips default CPU ISAs
config BR2_MIPS_CPU_MIPS32
	bool
	select BR2_MIPS_NAN_LEGACY
config BR2_MIPS_CPU_MIPS32R2
	bool
	select BR2_MIPS_NAN_LEGACY
config BR2_MIPS_CPU_MIPS32R3
	bool
	select BR2_MIPS_NAN_LEGACY
config BR2_MIPS_CPU_MIPS32R5
	bool
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_5
config BR2_MIPS_CPU_MIPS32R6
	bool
	select BR2_MIPS_NAN_2008
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_5
config BR2_MIPS_CPU_MIPS64
	bool
	select BR2_MIPS_NAN_LEGACY
config BR2_MIPS_CPU_MIPS64R2
	bool
	select BR2_MIPS_NAN_LEGACY
config BR2_MIPS_CPU_MIPS64R3
	bool
	select BR2_MIPS_NAN_LEGACY
config BR2_MIPS_CPU_MIPS64R5
	bool
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_5
config BR2_MIPS_CPU_MIPS64R6
	bool
	select BR2_MIPS_NAN_2008
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_5

choice
	prompt "Target Architecture Variant"
	default BR2_mips_32 if BR2_mips || BR2_mipsel
	default BR2_mips_64 if BR2_mips64 || BR2_mips64el
	depends on BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
	help
	  Specific CPU variant to use

	  64bit capable: 64, 64r2, 64r3, 64r5, 64r6
	  non-64bit capable: 32, 32r2, 32r3, 32r5, 32r6

config BR2_mips_32
	bool "Generic MIPS32"
	depends on !BR2_ARCH_IS_64
	select BR2_MIPS_CPU_MIPS32
config BR2_mips_32r2
	bool "Generic MIPS32R2"
	depends on !BR2_ARCH_IS_64
	select BR2_MIPS_CPU_MIPS32R2
config BR2_mips_32r3
	bool "Generic MIPS32R3"
	depends on !BR2_ARCH_IS_64
	select BR2_MIPS_CPU_MIPS32R3
config BR2_mips_32r5
	bool "Generic MIPS32R5"
	depends on !BR2_ARCH_IS_64
	select BR2_MIPS_CPU_MIPS32R5
config BR2_mips_32r6
	bool "Generic MIPS32R6"
	depends on !BR2_ARCH_IS_64
	select BR2_MIPS_CPU_MIPS32R6
config BR2_mips_interaptiv
	bool "interAptiv"
	depends on !BR2_ARCH_IS_64
	select BR2_MIPS_CPU_MIPS32R2
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_6
config BR2_mips_m5150
	bool "M5150"
	depends on !BR2_ARCH_IS_64
	select BR2_MIPS_CPU_MIPS32R5
	select BR2_MIPS_NAN_2008
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_6
config BR2_mips_m6250
	bool "M6250"
	depends on !BR2_ARCH_IS_64
	select BR2_ARCH_HAS_NO_TOOLCHAIN_BUILDROOT
	select BR2_MIPS_CPU_MIPS32R6
config BR2_mips_p5600
	bool "P5600"
	depends on !BR2_ARCH_IS_64
	select BR2_MIPS_CPU_MIPS32R5
	select BR2_MIPS_NAN_2008
config BR2_mips_xburst
	bool "XBurst"
	depends on !BR2_ARCH_IS_64
	select BR2_MIPS_CPU_MIPS32R2
	help
	  The Ingenic XBurst is a MIPS32R2 microprocessor. It has a
	  bug in the FPU that can generate incorrect results in
	  certain cases. The problem shows up when you have several
	  fused madd instructions in sequence with dependant
	  operands. This requires the -mno-fused-madd compiler option
	  to be used in order to prevent emitting these instructions.

	  See http://www.ingenic.com/en/?xburst.html
config BR2_mips_64
	bool "Generic MIPS64"
	depends on BR2_ARCH_IS_64
	select BR2_MIPS_CPU_MIPS64
config BR2_mips_64r2
	bool "Generic MIPS64R2"
	depends on BR2_ARCH_IS_64
	select BR2_MIPS_CPU_MIPS64R2
config BR2_mips_64r3
	bool "Generic MIPS64R3"
	depends on BR2_ARCH_IS_64
	select BR2_MIPS_CPU_MIPS64R3
config BR2_mips_64r5
	bool "Generic MIPS64R5"
	depends on BR2_ARCH_IS_64
	select BR2_MIPS_CPU_MIPS64R5
config BR2_mips_64r6
	bool "Generic MIPS64R6"
	depends on BR2_ARCH_IS_64
	select BR2_MIPS_CPU_MIPS64R6
config BR2_mips_i6400
	bool "I6400"
	depends on BR2_ARCH_IS_64
	select BR2_MIPS_CPU_MIPS64R6
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_6
config BR2_mips_octeon2
	bool "Octeon II"
	depends on BR2_ARCH_IS_64
	select BR2_MIPS_CPU_MIPS64R2
	help
	  Marvell (formerly Cavium Networks) Octeon II CN60XX
	  processors.
config BR2_mips_octeon3
	bool "Octeon III"
	depends on BR2_ARCH_IS_64
	select BR2_MIPS_CPU_MIPS64R3
	help
	  Marvell (formerly Cavium Networks) Octeon III CN7XXX
	  processors.
config BR2_mips_p6600
	bool "P6600"
	depends on BR2_ARCH_IS_64
	select BR2_ARCH_HAS_NO_TOOLCHAIN_BUILDROOT
	select BR2_MIPS_CPU_MIPS64R6
endchoice

choice
	prompt "Target ABI"
	default BR2_MIPS_NABI32
	depends on BR2_mips64 || BR2_mips64el

	help
	  Application Binary Interface to use

config BR2_MIPS_NABI32
	bool "n32"
	depends on BR2_ARCH_IS_64
	select BR2_KERNEL_64_USERLAND_32
config BR2_MIPS_NABI64
	bool "n64"
	depends on BR2_ARCH_IS_64
endchoice

config BR2_MIPS_SOFT_FLOAT
	bool "Use soft-float"
	default y
	depends on !BR2_mips_octeon3 # hard-float only
	select BR2_SOFT_FLOAT
	help
	  If your target CPU does not have a Floating Point Unit (FPU)
	  or a kernel FPU emulator, but you still wish to support
	  floating point functions, then everything will need to be
	  compiled with soft floating point support (-msoft-float).

choice
	prompt "FP mode"
	default BR2_MIPS_FP32_MODE_XX
	depends on !BR2_ARCH_IS_64 && !BR2_MIPS_SOFT_FLOAT
	help
	  MIPS32 supports different FP modes (32,xx,64). Information
	  about FP modes can be found here:
	  https://sourceware.org/binutils/docs/as/MIPS-Options.html
	  https://dmz-portal.imgtec.com/wiki/MIPS_O32_ABI_-_FR0_and_FR1_Interlinking#5._Generating_modeless_code

config BR2_MIPS_FP32_MODE_32
	bool "32"
	depends on !BR2_MIPS_CPU_MIPS32R6

config BR2_MIPS_FP32_MODE_XX
	bool "xx"
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_5

config BR2_MIPS_FP32_MODE_64
	bool "64"
	depends on !BR2_MIPS_CPU_MIPS32
endchoice

config BR2_GCC_TARGET_FP32_MODE
	default "32"	if BR2_MIPS_FP32_MODE_32
	default "xx"	if BR2_MIPS_FP32_MODE_XX
	default "64"	if BR2_MIPS_FP32_MODE_64

config BR2_MIPS_NAN_LEGACY
	bool

config BR2_MIPS_NAN_2008
	bool
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_4_9

choice
	prompt "Target NaN"
	default BR2_MIPS_ENABLE_NAN_2008
	depends on BR2_mips_32r5 || BR2_mips_64r5
	help
	  MIPS supports two different NaN encodings, legacy and 2008.
	  Information about MIPS NaN encodings can be found here:
	  https://sourceware.org/binutils/docs/as/MIPS-NaN-Encodings.html

config BR2_MIPS_ENABLE_NAN_LEGACY
	bool "legacy"
	select BR2_MIPS_NAN_LEGACY

config BR2_MIPS_ENABLE_NAN_2008
	bool "2008"
	depends on !BR2_MIPS_SOFT_FLOAT
	select BR2_MIPS_NAN_2008
endchoice

config BR2_GCC_TARGET_NAN
	default "legacy"	if BR2_MIPS_NAN_LEGACY
	default "2008"		if BR2_MIPS_NAN_2008

config BR2_ARCH
	default "mips"		if BR2_mips
	default "mipsel"	if BR2_mipsel
	default "mips64"	if BR2_mips64
	default "mips64el"	if BR2_mips64el

config BR2_ENDIAN
	default "LITTLE"	if BR2_mipsel || BR2_mips64el
	default "BIG"		if BR2_mips || BR2_mips64

config BR2_GCC_TARGET_ARCH
	default "mips32"	if BR2_mips_32
	default "mips32r2"	if BR2_mips_32r2
	default "mips32r3"	if BR2_mips_32r3
	default "mips32r5"	if BR2_mips_32r5
	default "mips32r6"	if BR2_mips_32r6
	default "interaptiv"	if BR2_mips_interaptiv
	default "m5101"		if BR2_mips_m5150
	default "m6201"		if BR2_mips_m6250
	default "p5600"		if BR2_mips_p5600
	default "mips32r2"	if BR2_mips_xburst
	default "mips64"	if BR2_mips_64
	default "mips64r2"	if BR2_mips_64r2
	default "mips64r3"	if BR2_mips_64r3
	default "mips64r5"	if BR2_mips_64r5
	default "mips64r6"	if BR2_mips_64r6
	default "i6400"		if BR2_mips_i6400
	default "octeon2"	if BR2_mips_octeon2
	default "octeon3"	if BR2_mips_octeon3
	default "p6600"		if BR2_mips_p6600

config BR2_MIPS_OABI32
	bool
	default y		if BR2_mips || BR2_mipsel

config BR2_GCC_TARGET_ABI
	default "32"		if BR2_MIPS_OABI32
	default "n32"		if BR2_MIPS_NABI32
	default "64"		if BR2_MIPS_NABI64

config BR2_READELF_ARCH_NAME
	default "MIPS R3000"

# vim: ft=kconfig
# -*- mode:kconfig; -*-
