linux/arch/mips
Serge Semin ab7c01fdc3 mips: Add MIPS Release 5 support
There are five MIPS32/64 architecture releases currently available:
from 1 to 6 except fourth one, which was intentionally skipped.
Three of them can be called as major: 1st, 2nd and 6th, that not only
have some system level alterations, but also introduced significant
core/ISA level updates. The rest of the MIPS architecture releases are
minor.

Even though they don't have as much ISA/system/core level changes
as the major ones with respect to the previous releases, they still
provide a set of updates (I'd say they were intended to be the
intermediate releases before a major one) that might be useful for the
kernel and user-level code, when activated by the kernel or compiler.
In particular the following features were introduced or ended up being
available at/after MIPS32/64 Release 5 architecture:
+ the last release of the misaligned memory access instructions,
+ virtualisation - VZ ASE - is optional component of the arch,
+ SIMD - MSA ASE - is optional component of the arch,
+ DSP ASE is optional component of the arch,
+ CP0.Status.FR=1 for CP1.FIR.F64=1 (pure 64-bit FPU general registers)
  must be available if FPU is implemented,
+ CP1.FIR.Has2008 support is required so CP1.FCSR.{ABS2008,NAN2008} bits
  are available.
+ UFR/UNFR aliases to access CP0.Status.FR from user-space by means of
  ctc1/cfc1 instructions (enabled by CP0.Config5.UFR),
+ CP0.COnfig5.LLB=1 and eretnc instruction are implemented to without
  accidentally clearing LL-bit when returning from an interrupt,
  exception, or error trap,
+ XPA feature together with extended versions of CPx registers is
  introduced, which needs to have mfhc0/mthc0 instructions available.

So due to these changes GNU GCC provides an extended instructions set
support for MIPS32/64 Release 5 by default like eretnc/mfhc0/mthc0. Even
though the architecture alteration isn't that big, it still worth to be
taken into account by the kernel software. Finally we can't deny that
some optimization/limitations might be found in future and implemented
on some level in kernel or compiler. In this case having even
intermediate MIPS architecture releases support would be more than
useful.

So the most of the changes provided by this commit can be split into
either compile- or runtime configs related. The compile-time related
changes are caused by adding the new CONFIG_CPU_MIPS32_R5/CONFIG_CPU_MIPSR5
configs and concern the code activating MIPSR2 or MIPSR6 already
implemented features (like eretnc/LLbit, mthc0/mfhc0). In addition
CPU_HAS_MSA can be now freely enabled for MIPS32/64 release 5 based
platforms as this is done for CPU_MIPS32_R6 CPUs. The runtime changes
concerns the features which are handled with respect to the MIPS ISA
revision detected at run-time by means of CP0.Config.{AT,AR} bits. Alas
these fields can be used to detect either r1 or r2 or r6 releases.
But since we know which CPUs in fact support the R5 arch, we can manually
set MIPS_CPU_ISA_M32R5/MIPS_CPU_ISA_M64R5 bit of c->isa_level and then
use cpu_has_mips32r5/cpu_has_mips64r5 where it's appropriate.

Since XPA/EVA provide too complex alterationss and to have them used with
MIPS32 Release 2 charged kernels (for compatibility with current platform
configs) they are left to be setup as a separate kernel configs.

Co-developed-by: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru>
Signed-off-by: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru>
Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Cc: Paul Burton <paulburton@kernel.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Rob Herring <robh+dt@kernel.org>
Cc: devicetree@vger.kernel.org
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
2020-05-22 09:09:01 +02:00
..
alchemy MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
ar7 MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
ath25 MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
ath79 MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
bcm47xx MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
bcm63xx MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
bmips MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
boot MIPS: ath79: ar9331: rename uart to serial node 2020-05-15 09:33:46 +02:00
cavium-octeon MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
cobalt MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
configs MIPS: Loongson: Enable devicetree based probing for 8250 ports in defconfig 2020-05-18 09:34:41 +02:00
crypto crypto: {arm,arm64,mips}/poly1305 - remove redundant non-reduction from emit 2020-01-16 15:18:12 +08:00
dec MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
fw MIPS: CFE: Remove dead code in cfe_getfwinfo() 2020-05-07 10:29:42 +02:00
generic MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
include mips: Add MIPS Release 5 support 2020-05-22 09:09:01 +02:00
jazz MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
jz4740 MIPS: ingenic: Add missing include 2020-05-20 08:42:31 +02:00
kernel mips: Add MIPS Release 5 support 2020-05-22 09:09:01 +02:00
kvm mips: Add MIPS Release 5 support 2020-05-22 09:09:01 +02:00
lantiq MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
lib mips: Add MIPS Release 5 support 2020-05-22 09:09:01 +02:00
loongson2ef MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
loongson32 MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
loongson64 MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
math-emu MIPS: Use fallthrough for arch/mips 2020-05-07 11:55:47 +02:00
mm mips: Add MIPS Release 5 support 2020-05-22 09:09:01 +02:00
mti-malta MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
net MIPS: BPF: Use sizeof_field() instead of FIELD_SIZEOF() 2020-01-10 11:33:35 -08:00
netlogic MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
oprofile MIPS: Use fallthrough for arch/mips 2020-05-07 11:55:47 +02:00
paravirt MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
pci MIPS: Remove NEC MARKEINS/EMMA 2020-05-09 18:05:57 +02:00
pic32 MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
pistachio MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
pnx833x MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
power
ralink MIPS: ralink: Don't include objects twice 2020-05-15 09:10:07 +02:00
rb532 MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
sgi-ip22 MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
sgi-ip27 MIPS: SGI-IP27: Remove not used definition TICK_SIZE in ip27-timer.c 2020-05-21 09:05:17 +02:00
sgi-ip30 MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
sgi-ip32 MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
sibyte MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
sni MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
tools MIPS: tools: Move "returns" after "loongson3-llsc-check" 2020-05-04 10:18:41 +02:00
txx9 MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
vdso MIPS: VDSO: Allow ld.lld to link the VDSO 2020-05-12 10:02:11 +02:00
vr41xx MIPS: Fix builds for VR41xx platforms 2020-05-15 09:09:58 +02:00
Kbuild MIPS: Fix "make clean" error due to recent changes 2020-05-13 13:20:22 +02:00
Kbuild.platforms MIPS: Fix typos in arch/mips/Kbuild.platforms 2020-05-13 13:19:52 +02:00
Kconfig mips: Add MIPS Release 5 support 2020-05-22 09:09:01 +02:00
Kconfig.debug MIPS: cmdline: Remove redundant Kconfig defaults 2019-10-09 15:53:16 -07:00
Makefile mips: Add MIPS Release 5 support 2020-05-22 09:09:01 +02:00
Makefile.postlink MIPS: fix indentation of the 'RELOCS' message 2020-01-20 15:37:30 -08:00