Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

sh: speculative execution support for SH7780.

SH7780 has a speculative execution mode where it can speculatively
perform an instruction fetch for subroutine returns, this allows it
to be enabled. There are some various pitfalls associated with this
mode, so it's left as depending on CONFIG_EXPERIMENTAL and not
enabled by default.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>

authored by

Paul Mundt and committed by
Paul Mundt
45ed285b fc31b809

+29
+10
arch/sh/Kconfig
··· 366 366 Selecting this option will enable an in-kernel API for manipulating 367 367 the store queues integrated in the SH-4 processors. 368 368 369 + config SPECULATIVE_EXECUTION 370 + bool "Speculative subroutine return" 371 + depends on CPU_SUBTYPE_SH7780 && EXPERIMENTAL 372 + help 373 + This enables support for a speculative instruction fetch for 374 + subroutine return. There are various pitfalls associated with 375 + this, as outlined in the SH7780 hardware manual. 376 + 377 + If unsure, say N. 378 + 369 379 config CPU_HAS_INTEVT 370 380 bool 371 381
+19
arch/sh/kernel/cpu/init.c
··· 41 41 onchip_setup(fpu); 42 42 onchip_setup(dsp); 43 43 44 + #ifdef CONFIG_SPECULATIVE_EXECUTION 45 + #define CPUOPM 0xff2f0000 46 + #define CPUOPM_RABD (1 << 5) 47 + 48 + static void __init speculative_execution_init(void) 49 + { 50 + /* Clear RABD */ 51 + ctrl_outl(ctrl_inl(CPUOPM) & ~CPUOPM_RABD, CPUOPM); 52 + 53 + /* Flush the update */ 54 + (void)ctrl_inl(CPUOPM); 55 + ctrl_barrier(); 56 + } 57 + #else 58 + #define speculative_execution_init() do { } while (0) 59 + #endif 60 + 44 61 /* 45 62 * Generic first-level cache init 46 63 */ ··· 278 261 */ 279 262 ubc_wakeup(); 280 263 #endif 264 + 265 + speculative_execution_init(); 281 266 }