xref: /linux/arch/mips/loongson64/Platform (revision 5188129b8c9f58ba089bfd3809a163a8c087c797)
130ad29bbSHuacai Chen#
230ad29bbSHuacai Chen# Loongson Processors' Support
330ad29bbSHuacai Chen#
430ad29bbSHuacai Chen
530ad29bbSHuacai Chen# Only gcc >= 4.4 have Loongson specific support
630ad29bbSHuacai Chencflags-$(CONFIG_CPU_LOONGSON2)	+= -Wa,--trap
730ad29bbSHuacai Chencflags-$(CONFIG_CPU_LOONGSON2E) += \
830ad29bbSHuacai Chen	$(call cc-option,-march=loongson2e,-march=r4600)
930ad29bbSHuacai Chencflags-$(CONFIG_CPU_LOONGSON2F) += \
1030ad29bbSHuacai Chen	$(call cc-option,-march=loongson2f,-march=r4600)
1130ad29bbSHuacai Chen# Enable the workarounds for Loongson2f
1230ad29bbSHuacai Chenifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS
1330ad29bbSHuacai Chen  ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-nop,),)
1430ad29bbSHuacai Chen    $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-nop)
1530ad29bbSHuacai Chen  else
1630ad29bbSHuacai Chen    cflags-$(CONFIG_CPU_NOP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-nop
1730ad29bbSHuacai Chen  endif
1830ad29bbSHuacai Chen  ifeq ($(call as-option,-Wa$(comma)-mfix-loongson2f-jump,),)
1930ad29bbSHuacai Chen    $(error only binutils >= 2.20.2 have needed option -mfix-loongson2f-jump)
2030ad29bbSHuacai Chen  else
2130ad29bbSHuacai Chen    cflags-$(CONFIG_CPU_JUMP_WORKAROUNDS) += -Wa$(comma)-mfix-loongson2f-jump
2230ad29bbSHuacai Chen  endif
2330ad29bbSHuacai Chenendif
2430ad29bbSHuacai Chen
25*5188129bSHuacai Chencflags-$(CONFIG_CPU_LOONGSON3)	+= -Wa,--trap
26*5188129bSHuacai Chen#
27*5188129bSHuacai Chen# binutils from v2.25 on and gcc starting from v4.9.0 treat -march=loongson3a
28*5188129bSHuacai Chen# as MIPS64 R2; older versions as just R1.  This leaves the possibility open
29*5188129bSHuacai Chen# that GCC might generate R2 code for -march=loongson3a which then is rejected
30*5188129bSHuacai Chen# by GAS.  The cc-option can't probe for this behaviour so -march=loongson3a
31*5188129bSHuacai Chen# can't easily be used safely within the kbuild framework.
32*5188129bSHuacai Chen#
33*5188129bSHuacai Chenifeq ($(call cc-ifversion, -ge, 0409, y), y)
34*5188129bSHuacai Chen  ifeq ($(call ld-ifversion, -ge, 22500000, y), y)
35*5188129bSHuacai Chen    cflags-$(CONFIG_CPU_LOONGSON3)  += \
36*5188129bSHuacai Chen      $(call cc-option,-march=loongson3a -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS64)
37*5188129bSHuacai Chen  else
38*5188129bSHuacai Chen    cflags-$(CONFIG_CPU_LOONGSON3)  += \
39*5188129bSHuacai Chen      $(call cc-option,-march=mips64r2,-mips64r2 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS64)
40*5188129bSHuacai Chen  endif
41*5188129bSHuacai Chenelse
42*5188129bSHuacai Chen    cflags-$(CONFIG_CPU_LOONGSON3)  += \
43*5188129bSHuacai Chen      $(call cc-option,-march=mips64r2,-mips64r2 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS64)
44*5188129bSHuacai Chenendif
45*5188129bSHuacai Chen
4630ad29bbSHuacai Chen#
4730ad29bbSHuacai Chen# Loongson Machines' Support
4830ad29bbSHuacai Chen#
4930ad29bbSHuacai Chen
5030ad29bbSHuacai Chenplatform-$(CONFIG_MACH_LOONGSON64) += loongson64/
5130ad29bbSHuacai Chencflags-$(CONFIG_MACH_LOONGSON64) += -I$(srctree)/arch/mips/include/asm/mach-loongson64 -mno-branch-likely
5230ad29bbSHuacai Chenload-$(CONFIG_LEMOTE_FULOONG2E) += 0xffffffff80100000
5330ad29bbSHuacai Chenload-$(CONFIG_LEMOTE_MACH2F) += 0xffffffff80200000
5430ad29bbSHuacai Chenload-$(CONFIG_LOONGSON_MACH3X) += 0xffffffff80200000
55