Commit dadde13a authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus

* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus:
  [MIPS] Fix scheduling latency issue on 24K, 34K and 74K cores
  [MIPS] Add macros to encode processor revisions.
  [MIPS] RM7000: Enable ICACHE_REFILLS_WORKAROUND_WAR.
  [MIPS] SMTC: Fix cut'n'paste bug in Kconfig.debug
  [MIPS] Change libgcc-style functions from lib-y to obj-y
  [MIPS] Fix timer/performance interrupt detection
  [MIPS] AP/SP: Avoid triggering the 34K E125 performance issue
  [MIPS] 64-bit TO_PHYS_MASK macro for RM9000 processors
parents 23c1fb52 4b3e975e
...@@ -37,7 +37,7 @@ config DEBUG_STACK_USAGE ...@@ -37,7 +37,7 @@ config DEBUG_STACK_USAGE
This option will slow down process creation somewhat. This option will slow down process creation somewhat.
config CONFIG_SMTC_IDLE_HOOK_DEBUG config SMTC_IDLE_HOOK_DEBUG
bool "Enable additional debug checks before going into CPU idle loop" bool "Enable additional debug checks before going into CPU idle loop"
depends on DEBUG_KERNEL && MIPS_MT_SMTC depends on DEBUG_KERNEL && MIPS_MT_SMTC
help help
......
...@@ -137,13 +137,24 @@ static inline void check_wait(void) ...@@ -137,13 +137,24 @@ static inline void check_wait(void)
case CPU_4KEC: case CPU_4KEC:
case CPU_4KSC: case CPU_4KSC:
case CPU_5KC: case CPU_5KC:
case CPU_24K:
case CPU_25KF: case CPU_25KF:
case CPU_PR4450:
cpu_wait = r4k_wait;
break;
case CPU_24K:
case CPU_34K: case CPU_34K:
cpu_wait = r4k_wait;
if (read_c0_config7() & MIPS_CONF7_WII)
cpu_wait = r4k_wait_irqoff;
break;
case CPU_74K: case CPU_74K:
case CPU_PR4450:
cpu_wait = r4k_wait; cpu_wait = r4k_wait;
if ((c->processor_id & 0xff) >= PRID_REV_ENCODE_332(2, 1, 0))
cpu_wait = r4k_wait_irqoff;
break; break;
case CPU_TX49XX: case CPU_TX49XX:
cpu_wait = r4k_wait_irqoff; cpu_wait = r4k_wait_irqoff;
break; break;
......
...@@ -1372,12 +1372,12 @@ void __init per_cpu_trap_init(void) ...@@ -1372,12 +1372,12 @@ void __init per_cpu_trap_init(void)
*/ */
if (cpu_has_mips_r2) { if (cpu_has_mips_r2) {
cp0_compare_irq = (read_c0_intctl () >> 29) & 7; cp0_compare_irq = (read_c0_intctl () >> 29) & 7;
cp0_perfcount_irq = -1;
} else {
cp0_compare_irq = CP0_LEGACY_COMPARE_IRQ;
cp0_perfcount_irq = (read_c0_intctl () >> 26) & 7; cp0_perfcount_irq = (read_c0_intctl () >> 26) & 7;
if (cp0_perfcount_irq != cp0_compare_irq) if (cp0_perfcount_irq == cp0_compare_irq)
cp0_perfcount_irq = -1; cp0_perfcount_irq = -1;
} else {
cp0_compare_irq = CP0_LEGACY_COMPARE_IRQ;
cp0_perfcount_irq = -1;
} }
#ifdef CONFIG_MIPS_MT_SMTC #ifdef CONFIG_MIPS_MT_SMTC
......
...@@ -1436,10 +1436,6 @@ static int __init vpe_module_init(void) ...@@ -1436,10 +1436,6 @@ static int __init vpe_module_init(void)
write_vpe_c0_vpecontrol(read_vpe_c0_vpecontrol() & ~VPECONTROL_TE); write_vpe_c0_vpecontrol(read_vpe_c0_vpecontrol() & ~VPECONTROL_TE);
if (i != 0) { if (i != 0) {
write_vpe_c0_status((read_c0_status() &
~(ST0_IM | ST0_IE | ST0_KSU))
| ST0_CU0);
/* /*
* Set config to be the same as vpe0, * Set config to be the same as vpe0,
* particularly kseg0 coherency alg * particularly kseg0 coherency alg
......
...@@ -9,4 +9,4 @@ obj-y += iomap.o ...@@ -9,4 +9,4 @@ obj-y += iomap.o
obj-$(CONFIG_PCI) += iomap-pci.o obj-$(CONFIG_PCI) += iomap-pci.o
# libgcc-style stuff needed in the kernel # libgcc-style stuff needed in the kernel
lib-y += ashldi3.o ashrdi3.o lshrdi3.o ucmpdi2.o obj-y += ashldi3.o ashrdi3.o lshrdi3.o ucmpdi2.o
...@@ -133,6 +133,7 @@ ...@@ -133,6 +133,7 @@
|| defined (CONFIG_CPU_R4X00) \ || defined (CONFIG_CPU_R4X00) \
|| defined (CONFIG_CPU_R5000) \ || defined (CONFIG_CPU_R5000) \
|| defined (CONFIG_CPU_RM7000) \ || defined (CONFIG_CPU_RM7000) \
|| defined (CONFIG_CPU_RM9000) \
|| defined (CONFIG_CPU_NEVADA) \ || defined (CONFIG_CPU_NEVADA) \
|| defined (CONFIG_CPU_TX49XX) \ || defined (CONFIG_CPU_TX49XX) \
|| defined (CONFIG_CPU_MIPS64) || defined (CONFIG_CPU_MIPS64)
......
...@@ -124,6 +124,17 @@ ...@@ -124,6 +124,17 @@
#define PRID_REV_VR4181A 0x0070 /* Same as VR4122 */ #define PRID_REV_VR4181A 0x0070 /* Same as VR4122 */
#define PRID_REV_VR4130 0x0080 #define PRID_REV_VR4130 0x0080
/*
* Older processors used to encode processor version and revision in two
* 4-bit bitfields, the 4K seems to simply count up and even newer MTI cores
* have switched to use the 8-bits as 3:3:2 bitfield with the last field as
* the patch number. *ARGH*
*/
#define PRID_REV_ENCODE_44(ver, rev) \
((ver) << 4 | (rev))
#define PRID_REV_ENCODE_332(ver, rev, patch) \
((ver) << 5 | (rev) << 2 | (patch))
/* /*
* FPU implementation/revision register (CP1 control register 0). * FPU implementation/revision register (CP1 control register 0).
* *
......
...@@ -534,6 +534,8 @@ ...@@ -534,6 +534,8 @@
#define MIPS_CONF3_LPA (_ULCAST_(1) << 7) #define MIPS_CONF3_LPA (_ULCAST_(1) << 7)
#define MIPS_CONF3_DSP (_ULCAST_(1) << 10) #define MIPS_CONF3_DSP (_ULCAST_(1) << 10)
#define MIPS_CONF7_WII (_ULCAST_(1) << 31)
/* /*
* Bits in the MIPS32/64 coprocessor 1 (FPU) revision register. * Bits in the MIPS32/64 coprocessor 1 (FPU) revision register.
*/ */
......
...@@ -177,18 +177,22 @@ ...@@ -177,18 +177,22 @@
#endif #endif
/* /*
* The RM9000 has a bug (though PMC-Sierra opposes it being called that) * The RM7000 processors and the E9000 cores have a bug (though PMC-Sierra
* where invalid instructions in the same I-cache line worth of instructions * opposes it being called that) where invalid instructions in the same
* being fetched may case spurious exceptions. * I-cache line worth of instructions being fetched may case spurious
*/ * exceptions.
#if defined(CONFIG_MOMENCO_JAGUAR_ATX) || defined(CONFIG_MOMENCO_OCELOT_3) || \ */
defined(CONFIG_PMC_YOSEMITE) || defined(CONFIG_BASLER_EXCITE) #if defined(CONFIG_BASLER_EXCITE) || defined(CONFIG_MOMENCO_JAGUAR_ATX) || \
defined(CONFIG_MIPS_ATLAS) || defined(CONFIG_MIPS_MALTA) || \
defined(CONFIG_MOMENCO_OCELOT) || defined(CONFIG_MOMENCO_OCELOT_3) || \
defined(CONFIG_MOMENCO_OCELOT_C) || defined(CONFIG_PMC_YOSEMITE) || \
defined(CONFIG_SGI_IP32) || defined(CONFIG_WR_PPMC)
#define ICACHE_REFILLS_WORKAROUND_WAR 1 #define ICACHE_REFILLS_WORKAROUND_WAR 1
#endif #endif
/* /*
* ON the R10000 upto version 2.6 (not sure about 2.7) there is a bug that * On the R10000 upto version 2.6 (not sure about 2.7) there is a bug that
* may cause ll / sc and lld / scd sequences to execute non-atomically. * may cause ll / sc and lld / scd sequences to execute non-atomically.
*/ */
#ifdef CONFIG_SGI_IP27 #ifdef CONFIG_SGI_IP27
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment