diff options
| author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-05-26 22:00:52 -0400 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-05-26 22:00:52 -0400 |
| commit | 45f6bc5ff9c3387387f048ec85dcb4e69acf0b03 (patch) | |
| tree | d04952bb05b53a362bcd165fb910c5c1441b4c5d /arch/mips/kernel | |
| parent | 3138887bd8d18173f3c2baf1e43621c49090cd27 (diff) | |
| parent | e4aa937ec75df0eea0bee03bffa3303ad36c986b (diff) | |
Merge 3.10-rc3 into usb-next
We want these fixes.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'arch/mips/kernel')
| -rw-r--r-- | arch/mips/kernel/Makefile | 2 | ||||
| -rw-r--r-- | arch/mips/kernel/cpu-probe.c | 198 | ||||
| -rw-r--r-- | arch/mips/kernel/crash_dump.c | 1 | ||||
| -rw-r--r-- | arch/mips/kernel/genex.S | 8 | ||||
| -rw-r--r-- | arch/mips/kernel/idle.c | 244 | ||||
| -rw-r--r-- | arch/mips/kernel/kprobes.c | 5 | ||||
| -rw-r--r-- | arch/mips/kernel/proc.c | 1 | ||||
| -rw-r--r-- | arch/mips/kernel/process.c | 53 | ||||
| -rw-r--r-- | arch/mips/kernel/scall64-64.S | 1 | ||||
| -rw-r--r-- | arch/mips/kernel/smp.c | 1 | ||||
| -rw-r--r-- | arch/mips/kernel/smtc.c | 15 | ||||
| -rw-r--r-- | arch/mips/kernel/traps.c | 15 |
12 files changed, 306 insertions, 238 deletions
diff --git a/arch/mips/kernel/Makefile b/arch/mips/kernel/Makefile index 6ad9e04bdf62..423d871a946b 100644 --- a/arch/mips/kernel/Makefile +++ b/arch/mips/kernel/Makefile | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | extra-y := head.o vmlinux.lds | 5 | extra-y := head.o vmlinux.lds |
| 6 | 6 | ||
| 7 | obj-y += cpu-probe.o branch.o entry.o genex.o irq.o process.o \ | 7 | obj-y += cpu-probe.o branch.o entry.o genex.o idle.o irq.o process.o \ |
| 8 | prom.o ptrace.o reset.o setup.o signal.o syscall.o \ | 8 | prom.o ptrace.o reset.o setup.o signal.o syscall.o \ |
| 9 | time.o topology.o traps.o unaligned.o watch.o vdso.o | 9 | time.o topology.o traps.o unaligned.o watch.o vdso.o |
| 10 | 10 | ||
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index 4bbffdb9024f..c6568bf4b1b0 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c | |||
| @@ -27,105 +27,6 @@ | |||
| 27 | #include <asm/spram.h> | 27 | #include <asm/spram.h> |
| 28 | #include <asm/uaccess.h> | 28 | #include <asm/uaccess.h> |
| 29 | 29 | ||
| 30 | /* | ||
| 31 | * Not all of the MIPS CPUs have the "wait" instruction available. Moreover, | ||
| 32 | * the implementation of the "wait" feature differs between CPU families. This | ||
| 33 | * points to the function that implements CPU specific wait. | ||
| 34 | * The wait instruction stops the pipeline and reduces the power consumption of | ||
| 35 | * the CPU very much. | ||
| 36 | */ | ||
| 37 | void (*cpu_wait)(void); | ||
| 38 | EXPORT_SYMBOL(cpu_wait); | ||
| 39 | |||
| 40 | static void r3081_wait(void) | ||
| 41 | { | ||
| 42 | unsigned long cfg = read_c0_conf(); | ||
| 43 | write_c0_conf(cfg | R30XX_CONF_HALT); | ||
| 44 | } | ||
| 45 | |||
| 46 | static void r39xx_wait(void) | ||
| 47 | { | ||
| 48 | local_irq_disable(); | ||
| 49 | if (!need_resched()) | ||
| 50 | write_c0_conf(read_c0_conf() | TX39_CONF_HALT); | ||
| 51 | local_irq_enable(); | ||
| 52 | } | ||
| 53 | |||
| 54 | extern void r4k_wait(void); | ||
| 55 | |||
| 56 | /* | ||
| 57 | * This variant is preferable as it allows testing need_resched and going to | ||
| 58 | * sleep depending on the outcome atomically. Unfortunately the "It is | ||
| 59 | * implementation-dependent whether the pipeline restarts when a non-enabled | ||
| 60 | * interrupt is requested" restriction in the MIPS32/MIPS64 architecture makes | ||
| 61 | * using this version a gamble. | ||
| 62 | */ | ||
| 63 | void r4k_wait_irqoff(void) | ||
| 64 | { | ||
| 65 | local_irq_disable(); | ||
| 66 | if (!need_resched()) | ||
| 67 | __asm__(" .set push \n" | ||
| 68 | " .set mips3 \n" | ||
| 69 | " wait \n" | ||
| 70 | " .set pop \n"); | ||
| 71 | local_irq_enable(); | ||
| 72 | __asm__(" .globl __pastwait \n" | ||
| 73 | "__pastwait: \n"); | ||
| 74 | } | ||
| 75 | |||
| 76 | /* | ||
| 77 | * The RM7000 variant has to handle erratum 38. The workaround is to not | ||
| 78 | * have any pending stores when the WAIT instruction is executed. | ||
| 79 | */ | ||
| 80 | static void rm7k_wait_irqoff(void) | ||
| 81 | { | ||
| 82 | local_irq_disable(); | ||
| 83 | if (!need_resched()) | ||
| 84 | __asm__( | ||
| 85 | " .set push \n" | ||
| 86 | " .set mips3 \n" | ||
| 87 | " .set noat \n" | ||
| 88 | " mfc0 $1, $12 \n" | ||
| 89 | " sync \n" | ||
| 90 | " mtc0 $1, $12 # stalls until W stage \n" | ||
| 91 | " wait \n" | ||
| 92 | " mtc0 $1, $12 # stalls until W stage \n" | ||
| 93 | " .set pop \n"); | ||
| 94 | local_irq_enable(); | ||
| 95 | } | ||
| 96 | |||
| 97 | /* | ||
| 98 | * The Au1xxx wait is available only if using 32khz counter or | ||
| 99 | * external timer source, but specifically not CP0 Counter. | ||
| 100 | * alchemy/common/time.c may override cpu_wait! | ||
| 101 | */ | ||
| 102 | static void au1k_wait(void) | ||
| 103 | { | ||
| 104 | __asm__(" .set mips3 \n" | ||
| 105 | " cache 0x14, 0(%0) \n" | ||
| 106 | " cache 0x14, 32(%0) \n" | ||
| 107 | " sync \n" | ||
| 108 | " nop \n" | ||
| 109 | " wait \n" | ||
| 110 | " nop \n" | ||
| 111 | " nop \n" | ||
| 112 | " nop \n" | ||
| 113 | " nop \n" | ||
| 114 | " .set mips0 \n" | ||
| 115 | : : "r" (au1k_wait)); | ||
| 116 | } | ||
| 117 | |||
| 118 | static int __initdata nowait; | ||
| 119 | |||
| 120 | static int __init wait_disable(char *s) | ||
| 121 | { | ||
| 122 | nowait = 1; | ||
| 123 | |||
| 124 | return 1; | ||
| 125 | } | ||
| 126 | |||
| 127 | __setup("nowait", wait_disable); | ||
| 128 | |||
| 129 | static int __cpuinitdata mips_fpu_disabled; | 30 | static int __cpuinitdata mips_fpu_disabled; |
| 130 | 31 | ||
| 131 | static int __init fpu_disable(char *s) | 32 | static int __init fpu_disable(char *s) |
| @@ -150,105 +51,6 @@ static int __init dsp_disable(char *s) | |||
| 150 | 51 | ||
| 151 | __setup("nodsp", dsp_disable); | 52 | __setup("nodsp", dsp_disable); |
| 152 | 53 | ||
| 153 | void __init check_wait(void) | ||
| 154 | { | ||
| 155 | struct cpuinfo_mips *c = ¤t_cpu_data; | ||
| 156 | |||
| 157 | if (nowait) { | ||
| 158 | printk("Wait instruction disabled.\n"); | ||
| 159 | return; | ||
| 160 | } | ||
| 161 | |||
| 162 | switch (c->cputype) { | ||
| 163 | case CPU_R3081: | ||
| 164 | case CPU_R3081E: | ||
| 165 | cpu_wait = r3081_wait; | ||
| 166 | break; | ||
| 167 | case CPU_TX3927: | ||
| 168 | cpu_wait = r39xx_wait; | ||
| 169 | break; | ||
| 170 | case CPU_R4200: | ||
| 171 | /* case CPU_R4300: */ | ||
| 172 | case CPU_R4600: | ||
| 173 | case CPU_R4640: | ||
| 174 | case CPU_R4650: | ||
| 175 | case CPU_R4700: | ||
| 176 | case CPU_R5000: | ||
| 177 | case CPU_R5500: | ||
| 178 | case CPU_NEVADA: | ||
| 179 | case CPU_4KC: | ||
| 180 | case CPU_4KEC: | ||
| 181 | case CPU_4KSC: | ||
| 182 | case CPU_5KC: | ||
| 183 | case CPU_25KF: | ||
| 184 | case CPU_PR4450: | ||
| 185 | case CPU_BMIPS3300: | ||
| 186 | case CPU_BMIPS4350: | ||
| 187 | case CPU_BMIPS4380: | ||
| 188 | case CPU_BMIPS5000: | ||
| 189 | case CPU_CAVIUM_OCTEON: | ||
| 190 | case CPU_CAVIUM_OCTEON_PLUS: | ||
| 191 | case CPU_CAVIUM_OCTEON2: | ||
| 192 | case CPU_JZRISC: | ||
| 193 | case CPU_LOONGSON1: | ||
| 194 | case CPU_XLR: | ||
| 195 | case CPU_XLP: | ||
| 196 | cpu_wait = r4k_wait; | ||
| 197 | break; | ||
| 198 | |||
| 199 | case CPU_RM7000: | ||
| 200 | cpu_wait = rm7k_wait_irqoff; | ||
| 201 | break; | ||
| 202 | |||
