kernel_optimize_test/arch/mips/kernel
WANG Xuerui ec7a93188a MIPS: emulate CPUCFG instruction on older Loongson64 cores
CPUCFG is the instruction for querying processor characteristics on
newer Loongson processors, much like CPUID of x86. Since the instruction
is supposedly designed to provide a unified way to do feature detection
(without having to, for example, parse /proc/cpuinfo which is too
heavyweight), it is important to provide compatibility for older cores
without native support. Fortunately, most of the fields can be
synthesized without changes to semantics. Performance is not really big
a concern, because feature detection logic is not expected to be
invoked very often in typical userland applications.

The instruction can't be emulated on LOONGSON_2EF cores, according to
FlyGoat's experiments. Because the LWC2 opcode is assigned to other
valid instructions on 2E and 2F, no RI exception is raised for us to
intercept. So compatibility is only extended back furthest to
Loongson-3A1000. Loongson-2K is covered too, as it is basically a remix
of various blocks from the 3A/3B models from a kernel perspective.

This is lightly based on Loongson's work on their Linux 3.10 fork, for
being the authority on the right feature flags to fill in, where things
aren't otherwise discoverable.

Signed-off-by: WANG Xuerui <git@xen0n.name>
Reviewed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Cc: Huacai Chen <chenhc@lemote.com>
Cc: Jiaxun Yang <jiaxun.yang@flygoat.com>
Cc: Tiezhu Yang <yangtiezhu@loongson.cn>
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
2020-05-24 09:26:55 +02:00
..
syscalls asm-generic: fix unistd_32.h generation format 2020-04-07 10:43:42 -07:00
.gitignore .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
asm-offsets.c
binfmt_elfn32.c y2038: elfcore: Use __kernel_old_timeval for process times 2019-11-15 14:38:29 +01:00
binfmt_elfo32.c y2038: elfcore: Use __kernel_old_timeval for process times 2019-11-15 14:38:29 +01:00
bmips_5xxx_init.S
bmips_vec.S
branch.c MIPS: Use fallthrough for arch/mips 2020-05-07 11:55:47 +02:00
cacheinfo.c mips: cacheinfo: report shared CPU map 2019-11-26 10:33:08 -08:00
cevt-bcm1480.c MIPS: Replace setup_irq() by request_irq() 2020-03-05 16:47:35 +01:00
cevt-ds1287.c MIPS: Replace setup_irq() by request_irq() 2020-03-05 16:47:35 +01:00
cevt-gt641xx.c MIPS: Replace setup_irq() by request_irq() 2020-03-05 16:47:35 +01:00
cevt-r4k.c mips: cevt-r4k: Update the r4k-clockevent frequency in sync with CPU 2020-05-22 09:14:32 +02:00
cevt-sb1250.c MIPS: Replace setup_irq() by request_irq() 2020-03-05 16:47:35 +01:00
cevt-txx9.c MIPS: Replace setup_irq() by request_irq() 2020-03-05 16:47:35 +01:00
cmpxchg.c
cps-vec-ns16550.S mips: Add CPS_NS16550_WIDTH config 2020-05-22 09:12:52 +02:00
cps-vec.S
cpu-probe.c MIPS: emulate CPUCFG instruction on older Loongson64 cores 2020-05-24 09:26:55 +02:00
crash_dump.c
crash.c
csrc-bcm1480.c
csrc-ioasic.c
csrc-r4k.c mips: csrc-r4k: Mark R4K timer as unstable if CPU freq changes 2020-05-22 09:14:06 +02:00
csrc-sb1250.c
early_printk_8250.c
early_printk.c
elf.c
entry.S mips: Add MIPS Release 5 support 2020-05-22 09:09:01 +02:00
ftrace.c
genex.S MIPS: asm: Rename some macros to avoid build errors 2020-05-07 13:20:05 +02:00
gpio_txx9.c
head.S MIPS: Clear XContext at boot time 2020-04-24 18:37:23 +02:00
i8253.c MIPS: Replace setup_irq() by request_irq() 2020-03-05 16:47:35 +01:00
idle.c MIPS: Use fallthrough for arch/mips 2020-05-07 11:55:47 +02:00
irq_txx9.c
irq-gt641xx.c
irq-msc01.c
irq-rm7000.c
irq.c
jump_label.c
kgdb.c
kprobes.c
linux32.c
machine_kexec.c
Makefile MIPS: Remove not used 8250-platform.c 2020-05-17 10:25:26 +02:00
mcount.S
mips_machine.c
mips-cm.c mips: cm: Add L2 ECC/parity errors reporting 2020-05-07 13:11:38 +02:00
mips-cpc.c remove ioremap_nocache and devm_ioremap_nocache 2020-01-06 09:45:59 +01:00
mips-mt-fpaff.c
mips-mt.c
mips-r2-to-r6-emul.c MIPS: Use fallthrough for arch/mips 2020-05-07 11:55:47 +02:00
module.c
octeon_switch.S
perf_event_mipsxx.c MIPS: perf: Remove unnecessary "fallthrough" pseudo keywords 2020-05-02 13:21:09 +02:00
perf_event.c
pm-cps.c MIPS: barrier: Add __SYNC() infrastructure 2019-10-07 09:42:17 -07:00
pm.c
probes-common.h
proc.c mips: Add MIPS Release 5 support 2020-05-22 09:09:01 +02:00
process.c MIPS: Exclude more dsemul code when CONFIG_MIPS_FP_SUPPORT=n 2020-03-25 16:07:14 +01:00
prom.c
ptrace.c
ptrace32.c
r4k_fpu.S mips: Add MIPS Release 5 support 2020-05-22 09:09:01 +02:00
r4k_switch.S
r4k-bugs64.c MIPS: r4k-bugs64: Drop CONFIG_CPU_MIPSR6 checks 2019-10-07 09:38:54 -07:00
r2300_fpu.S
r2300_switch.S
relocate_kernel.S
relocate.c
reset.c
rtlx-cmp.c
rtlx-mt.c MIPS: Replace setup_irq() by request_irq() 2020-03-05 16:47:35 +01:00
rtlx.c
scall32-o32.S mips: remove nargs from __SYSCALL 2019-07-30 10:50:30 -07:00
scall64-n32.S mips: remove nargs from __SYSCALL 2019-07-30 10:50:30 -07:00
scall64-n64.S mips: remove nargs from __SYSCALL 2019-07-30 10:50:30 -07:00
scall64-o32.S MIPS: asm: Rename some macros to avoid build errors 2020-05-07 13:20:05 +02:00
segment.c
setup.c MIPS: Remove useless parameter of bootcmdline_init() 2020-05-19 17:36:04 +02:00
signal_n32.c
signal_o32.c
signal-common.h
signal.c MIPS: Replace zero-length array with flexible-array 2020-05-08 12:01:02 +02:00
signal32.c
smp-bmips.c MIPS: Drop pmon.h 2019-11-11 10:44:52 -08:00
smp-cmp.c
smp-cps.c
smp-mt.c
smp-up.c
smp.c MIPS updates for v5.7: 2020-03-31 08:51:45 -07:00
spinlock_test.c
spram.c mips: Add CONFIG/CONFIG6/Cause reg fields macro 2020-05-22 09:12:22 +02:00
stacktrace.c
sync-r4k.c MIPS: sync-r4k: do slave counter synchronization with disabled HW interrupts 2020-01-22 10:16:18 -08:00
syscall.c MIPS: syscall: Emit Loongson3 sync workarounds within asm 2019-10-07 09:43:05 -07:00
sysrq.c
time.c mips: Add udelay lpj numbers adjustment 2020-05-22 09:13:32 +02:00
topology.c
traps.c MIPS: emulate CPUCFG instruction on older Loongson64 cores 2020-05-24 09:26:55 +02:00
unaligned.c MIPS: Move unaligned load/store helpers to inst.h 2020-04-24 18:18:06 +02:00
uprobes.c
vdso.c MIPS: Exclude more dsemul code when CONFIG_MIPS_FP_SUPPORT=n 2020-03-25 16:07:14 +01:00
vmlinux.lds.S MIPS: Truncate link address into 32bit for 32bit kernel 2020-05-07 10:31:01 +02:00
vpe-cmp.c
vpe-mt.c
vpe.c MIPS: VPE: Fix a double free and a memory leak in 'release_vpe()' 2020-02-15 12:44:03 -08:00
watch.c MIPS: Use fallthrough for arch/mips 2020-05-07 11:55:47 +02:00