diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-08-06 16:14:43 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-08-06 16:14:43 -0400 |
| commit | 1853a65ec5bd07c18f4a43e6709486c81400afa6 (patch) | |
| tree | 8440212e24ed680d655f0aca2b2dfc703875798c | |
| parent | 69b4a3a030df04e0b8961070fc33da6a5c0a19bb (diff) | |
| parent | fcfa66de8a2f0631a65a2cec0f6149dafd36ec81 (diff) | |
Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
Pull MIPS fixes from Ralf Baechle:
"Two platform-specific fixes plus a fix for oprofile which was calling
smp_processor_id() in preemptible code"
* 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus:
MIPS: BMIPS: fix hardware interrupt routing for boot CPU != 0
MIPS: oprofile: Fix BUG due to smp_processor_id() in preemptible code.
MIPS: PNX833x: PNX8335_PCI_ETHERNET_INT depends on CONFIG_SOC_PNX8335
| -rw-r--r-- | arch/mips/include/asm/cpu-features.h | 2 | ||||
| -rw-r--r-- | arch/mips/kernel/smp-bmips.c | 10 | ||||
| -rw-r--r-- | arch/mips/oprofile/op_model_mipsxx.c | 2 | ||||
| -rw-r--r-- | arch/mips/pnx833x/common/platform.c | 2 |
4 files changed, 13 insertions, 3 deletions
diff --git a/arch/mips/include/asm/cpu-features.h b/arch/mips/include/asm/cpu-features.h index 1dc086087a72..fa44f3ec5302 100644 --- a/arch/mips/include/asm/cpu-features.h +++ b/arch/mips/include/asm/cpu-features.h | |||
| @@ -17,6 +17,8 @@ | |||
| 17 | #define current_cpu_type() current_cpu_data.cputype | 17 | #define current_cpu_type() current_cpu_data.cputype |
| 18 | #endif | 18 | #endif |
| 19 | 19 | ||
| 20 | #define boot_cpu_type() cpu_data[0].cputype | ||
| 21 | |||
| 20 | /* | 22 | /* |
| 21 | * SMP assumption: Options of CPU 0 are a superset of all processors. | 23 | * SMP assumption: Options of CPU 0 are a superset of all processors. |
| 22 | * This is true for all known MIPS systems. | 24 | * This is true for all known MIPS systems. |
diff --git a/arch/mips/kernel/smp-bmips.c b/arch/mips/kernel/smp-bmips.c index 159abc8842d2..126da74d4c55 100644 --- a/arch/mips/kernel/smp-bmips.c +++ b/arch/mips/kernel/smp-bmips.c | |||
| @@ -66,6 +66,8 @@ static void __init bmips_smp_setup(void) | |||
| 66 | int i, cpu = 1, boot_cpu = 0; | 66 | int i, cpu = 1, boot_cpu = 0; |
| 67 | 67 | ||
| 68 | #if defined(CONFIG_CPU_BMIPS4350) || defined(CONFIG_CPU_BMIPS4380) | 68 | #if defined(CONFIG_CPU_BMIPS4350) || defined(CONFIG_CPU_BMIPS4380) |
| 69 | int cpu_hw_intr; | ||
| 70 | |||
| 69 | /* arbitration priority */ | 71 | /* arbitration priority */ |
| 70 | clear_c0_brcm_cmt_ctrl(0x30); | 72 | clear_c0_brcm_cmt_ctrl(0x30); |
| 71 | 73 | ||
| @@ -80,8 +82,12 @@ static void __init bmips_smp_setup(void) | |||
| 80 | * MIPS interrupt 2 (HW INT 0) is the CPU0 L1 controller output | 82 | * MIPS interrupt 2 (HW INT 0) is the CPU0 L1 controller output |
| 81 | * MIPS interrupt 3 (HW INT 1) is the CPU1 L1 controller output | 83 | * MIPS interrupt 3 (HW INT 1) is the CPU1 L1 controller output |
| 82 | */ | 84 | */ |
| 83 | change_c0_brcm_cmt_intr(0xf8018000, | 85 | if (boot_cpu == 0) |
| 84 | (0x02 << 27) | (0x03 << 15)); | 86 | cpu_hw_intr = 0x02; |
| 87 | else | ||
| 88 | cpu_hw_intr = 0x1d; | ||
| 89 | |||
| 90 | change_c0_brcm_cmt_intr(0xf8018000, (cpu_hw_intr << 27) | (0x03 << 15)); | ||
| 85 | 91 | ||
| 86 | /* single core, 2 threads (2 pipelines) */ | 92 | /* single core, 2 threads (2 pipelines) */ |
| 87 | max_cpus = 2; | 93 | max_cpus = 2; |
diff --git a/arch/mips/oprofile/op_model_mipsxx.c b/arch/mips/oprofile/op_model_mipsxx.c index e4b1140cdae0..3a2b6e9f25cf 100644 --- a/arch/mips/oprofile/op_model_mipsxx.c +++ b/arch/mips/oprofile/op_model_mipsxx.c | |||
| @@ -166,7 +166,7 @@ static void mipsxx_reg_setup(struct op_counter_config *ctr) | |||
| 166 | reg.control[i] |= M_PERFCTL_USER; | 166 | reg.control[i] |= M_PERFCTL_USER; |
| 167 | if (ctr[i].exl) | 167 | if (ctr[i].exl) |
| 168 | reg.control[i] |= M_PERFCTL_EXL; | 168 | reg.control[i] |= M_PERFCTL_EXL; |
| 169 | if (current_cpu_type() == CPU_XLR) | 169 | if (boot_cpu_type() == CPU_XLR) |
| 170 | reg.control[i] |= M_PERFCTL_COUNT_ALL_THREADS; | 170 | reg.control[i] |= M_PERFCTL_COUNT_ALL_THREADS; |
| 171 | reg.counter[i] = 0x80000000 - ctr[i].count; | 171 | reg.counter[i] = 0x80000000 - ctr[i].count; |
| 172 | } | 172 | } |
diff --git a/arch/mips/pnx833x/common/platform.c b/arch/mips/pnx833x/common/platform.c index d22dc0d6f289..2b7e837dc2e2 100644 --- a/arch/mips/pnx833x/common/platform.c +++ b/arch/mips/pnx833x/common/platform.c | |||
| @@ -206,11 +206,13 @@ static struct resource pnx833x_ethernet_resources[] = { | |||
| 206 | .end = PNX8335_IP3902_PORTS_END, | 206 | .end = PNX8335_IP3902_PORTS_END, |
| 207 | .flags = IORESOURCE_MEM, | 207 | .flags = IORESOURCE_MEM, |
| 208 | }, | 208 | }, |
| 209 | #ifdef CONFIG_SOC_PNX8335 | ||
| 209 | [1] = { | 210 | [1] = { |
| 210 | .start = PNX8335_PIC_ETHERNET_INT, | 211 | .start = PNX8335_PIC_ETHERNET_INT, |
| 211 | .end = PNX8335_PIC_ETHERNET_INT, | 212 | .end = PNX8335_PIC_ETHERNET_INT, |
| 212 | .flags = IORESOURCE_IRQ, | 213 | .flags = IORESOURCE_IRQ, |
| 213 | }, | 214 | }, |
| 215 | #endif | ||
| 214 | }; | 216 | }; |
| 215 | 217 | ||
| 216 | static struct platform_device pnx833x_ethernet_device = { | 218 | static struct platform_device pnx833x_ethernet_device = { |
