aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/mm
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-01-30 20:20:32 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-01-30 20:20:32 -0500
commitcdfc83075fb76369a31e6c187d0cebcab9f8b9c8 (patch)
tree33d1cdca3e2cb610451ed30943189f55652bac4c /arch/mips/mm
parent04a24ae45d018e177db7e4ae2d03a70f79149782 (diff)
parentb26a21c1eacdb7daf22a304fa857413df2650cfe (diff)
Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
Pull MIPS updates from Ralf Baechle: "The most notable new addition inside this pull request is the support for MIPS's latest and greatest core called "inter/proAptiv". The patch series describes this core as follows. "The interAptiv is a power-efficient multi-core microprocessor for use in system-on-chip (SoC) applications. The interAptiv combines a multi-threading pipeline with a coherence manager to deliver improved computational throughput and power efficiency. The interAptiv can contain one to four MIPS32R3 interAptiv cores, system level coherence manager with L2 cache, optional coherent I/O port, and optional floating point unit." The platform specific patches touch all 3 Broadcom families. It adds support for the new Broadcom/Netlogix XLP9xx Soc, building a common BCM63XX SMP kernel for all BCM63XX SoCs regardless of core type/count and full gpio button/led descriptions for BCM47xx. The rest of the series are cleanups and bug fixes that are MIPS generic and consist largely of changes that Imgtec/MIPS had published in their linux-mti-3.10.git stable tree. Random other cleanups and patches preparing code to be merged in 3.15" * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: (139 commits) mips: select ARCH_MIGHT_HAVE_PC_SERIO mips: delete non-required instances of include <linux/init.h> MIPS: KVM: remove shadow_tlb code MIPS: KVM: use common EHINV aware UNIQUE_ENTRYHI mips/ide: flush dcache also if icache does not snoop dcache MIPS: BCM47XX: fix position of cpu_wait disabling MIPS: BCM63XX: select correct MIPS_L1_CACHE_SHIFT value MIPS: update MIPS_L1_CACHE_SHIFT based on MIPS_L1_CACHE_SHIFT_<N> MIPS: introduce MIPS_L1_CACHE_SHIFT_<N> MIPS: ZBOOT: gather string functions into string.c arch/mips/pci: don't check resource with devm_ioremap_resource arch/mips/lantiq/xway: don't check resource with devm_ioremap_resource bcma: gpio: don't cast u32 to unsigned long ssb: gpio: add own IRQ domain MIPS: BCM47XX: fix sparse warnings in board.c MIPS: BCM47XX: add board detection for Linksys WRT54GS V1 MIPS: BCM47XX: fix detection for some boards MIPS: BCM47XX: Enable buttons support on SSB MIPS: BCM47XX: Convert WNDR4500 to new syntax MIPS: BCM47XX: Use "timer" trigger for status LEDs ...
Diffstat (limited to 'arch/mips/mm')
-rw-r--r--arch/mips/mm/c-octeon.c1
-rw-r--r--arch/mips/mm/c-r3k.c1
-rw-r--r--arch/mips/mm/c-r4k.c26
-rw-r--r--arch/mips/mm/cache.c1
-rw-r--r--arch/mips/mm/cex-sb1.S1
-rw-r--r--arch/mips/mm/dma-default.c2
-rw-r--r--arch/mips/mm/hugetlbpage.c1
-rw-r--r--arch/mips/mm/init.c2
-rw-r--r--arch/mips/mm/page.c1
-rw-r--r--arch/mips/mm/sc-mips.c2
-rw-r--r--arch/mips/mm/sc-rm7k.c1
-rw-r--r--arch/mips/mm/tlb-r3k.c1
-rw-r--r--arch/mips/mm/tlb-r4k.c48
-rw-r--r--arch/mips/mm/tlb-r8k.c1
-rw-r--r--arch/mips/mm/tlbex.c2
-rw-r--r--arch/mips/mm/uasm-micromips.c1
-rw-r--r--arch/mips/mm/uasm-mips.c1
17 files changed, 55 insertions, 38 deletions
diff --git a/arch/mips/mm/c-octeon.c b/arch/mips/mm/c-octeon.c
index c8efdb5b6ee0..f41a5c5b0865 100644
--- a/arch/mips/mm/c-octeon.c
+++ b/arch/mips/mm/c-octeon.c
@@ -6,7 +6,6 @@
6 * Copyright (C) 2005-2007 Cavium Networks 6 * Copyright (C) 2005-2007 Cavium Networks
7 */ 7 */
8#include <linux/export.h> 8#include <linux/export.h>
9#include <linux/init.h>
10#include <linux/kernel.h> 9#include <linux/kernel.h>
11#include <linux/sched.h> 10#include <linux/sched.h>
12#include <linux/smp.h> 11#include <linux/smp.h>
diff --git a/arch/mips/mm/c-r3k.c b/arch/mips/mm/c-r3k.c
index 2fcde0c8ea02..135ec313c1f6 100644
--- a/arch/mips/mm/c-r3k.c
+++ b/arch/mips/mm/c-r3k.c
@@ -9,7 +9,6 @@
9 * Copyright (C) 1998 Gleb Raiko & Vladimir Roganov 9 * Copyright (C) 1998 Gleb Raiko & Vladimir Roganov
10 * Copyright (C) 2001, 2004, 2007 Maciej W. Rozycki 10 * Copyright (C) 2001, 2004, 2007 Maciej W. Rozycki
11 */ 11 */
12#include <linux/init.h>
13#include <linux/kernel.h> 12#include <linux/kernel.h>
14#include <linux/sched.h> 13#include <linux/sched.h>
15#include <linux/smp.h> 14#include <linux/smp.h>
diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c
index 49e572d879e1..c14259edd53f 100644
--- a/arch/mips/mm/c-r4k.c
+++ b/arch/mips/mm/c-r4k.c
@@ -1020,10 +1020,14 @@ static void probe_pcache(void)
1020 */ 1020 */
1021 config1 = read_c0_config1(); 1021 config1 = read_c0_config1();
1022 1022
1023 if ((lsize = ((config1 >> 19) & 7))) 1023 lsize = (config1 >> 19) & 7;
1024 c->icache.linesz = 2 << lsize; 1024
1025 else 1025 /* IL == 7 is reserved */
1026 c->icache.linesz = lsize; 1026 if (lsize == 7)
1027 panic("Invalid icache line size");
1028
1029 c->icache.linesz = lsize ? 2 << lsize : 0;
1030
1027 c->icache.sets = 32 << (((config1 >> 22) + 1) & 7); 1031 c->icache.sets = 32 << (((config1 >> 22) + 1) & 7);
1028 c->icache.ways = 1 + ((config1 >> 16) & 7); 1032 c->icache.ways = 1 + ((config1 >> 16) & 7);
1029 1033
@@ -1040,10 +1044,14 @@ static void probe_pcache(void)
1040 */ 1044 */
1041 c->dcache.flags = 0; 1045 c->dcache.flags = 0;
1042 1046
1043 if ((lsize = ((config1 >> 10) & 7))) 1047 lsize = (config1 >> 10) & 7;
1044 c->dcache.linesz = 2 << lsize; 1048
1045 else 1049 /* DL == 7 is reserved */
1046 c->dcache.linesz= lsize; 1050 if (lsize == 7)
1051 panic("Invalid dcache line size");
1052
1053 c->dcache.linesz = lsize ? 2 << lsize : 0;
1054
1047 c->dcache.sets = 32 << (((config1 >> 13) + 1) & 7); 1055 c->dcache.sets = 32 << (((config1 >> 13) + 1) & 7);
1048 c->dcache.ways = 1 + ((config1 >> 7) & 7); 1056 c->dcache.ways = 1 + ((config1 >> 7) & 7);
1049 1057
@@ -1105,6 +1113,8 @@ static void probe_pcache(void)
1105 case CPU_34K: 1113 case CPU_34K:
1106 case CPU_74K: 1114 case CPU_74K:
1107 case CPU_1004K: 1115 case CPU_1004K:
1116 case CPU_INTERAPTIV:
1117 case CPU_PROAPTIV:
1108 if (current_cpu_type() == CPU_74K) 1118 if (current_cpu_type() == CPU_74K)
1109 alias_74k_erratum(c); 1119 alias_74k_erratum(c);
1110 if ((read_c0_config7() & (1 << 16))) { 1120 if ((read_c0_config7() & (1 << 16))) {
diff --git a/arch/mips/mm/cache.c b/arch/mips/mm/cache.c
index 15f813c303b4..fde7e56d13fe 100644
--- a/arch/mips/mm/cache.c
+++ b/arch/mips/mm/cache.c
@@ -8,7 +8,6 @@
8 */ 8 */
9#include <linux/fs.h> 9#include <linux/fs.h>
10#include <linux/fcntl.h> 10#include <linux/fcntl.h>
11#include <linux/init.h>
12#include <linux/kernel.h> 11#include <linux/kernel.h>
13#include <linux/linkage.h> 12#include <linux/linkage.h>
14#include <linux/module.h> 13#include <linux/module.h>
diff --git a/arch/mips/mm/cex-sb1.S b/arch/mips/mm/cex-sb1.S
index 191cf6e0c725..5d5f29681a21 100644
--- a/arch/mips/mm/cex-sb1.S
+++ b/arch/mips/mm/cex-sb1.S
@@ -15,7 +15,6 @@
15 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 */ 17 */
18#include <linux/init.h>
19 18
20#include <asm/asm.h> 19#include <asm/asm.h>
21#include <asm/regdef.h> 20#include <asm/regdef.h>
diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c
index 2e9418562258..44b6dff5aba2 100644
--- a/arch/mips/mm/dma-default.c
+++ b/arch/mips/mm/dma-default.c
@@ -23,6 +23,7 @@
23 23
24#include <dma-coherence.h> 24#include <dma-coherence.h>
25 25
26#ifdef CONFIG_DMA_MAYBE_COHERENT
26int coherentio = 0; /* User defined DMA coherency from command line. */ 27int coherentio = 0; /* User defined DMA coherency from command line. */
27EXPORT_SYMBOL_GPL(coherentio); 28EXPORT_SYMBOL_GPL(coherentio);
28int hw_coherentio = 0; /* Actual hardware supported DMA coherency setting. */ 29int hw_coherentio = 0; /* Actual hardware supported DMA coherency setting. */
@@ -42,6 +43,7 @@ static int __init setnocoherentio(char *str)
42 return 0; 43 return 0;
43} 44}
44early_param("nocoherentio", setnocoherentio); 45early_param("nocoherentio", setnocoherentio);
46#endif
45 47
46static inline struct page *dma_addr_to_page(struct device *dev, 48static inline struct page *dma_addr_to_page(struct device *dev,
47 dma_addr_t dma_addr) 49 dma_addr_t dma_addr)
diff --git a/arch/mips/mm/hugetlbpage.c b/arch/mips/mm/hugetlbpage.c
index 01fda4419ed0..77e0ae036e7c 100644
--- a/arch/mips/mm/hugetlbpage.c
+++ b/arch/mips/mm/hugetlbpage.c
@@ -11,7 +11,6 @@
11 * Copyright (C) 2008, 2009 Cavium Networks, Inc. 11 * Copyright (C) 2008, 2009 Cavium Networks, Inc.
12 */ 12 */
13 13
14#include <linux/init.h>
15#include <linux/fs.h> 14#include <linux/fs.h>
16#include <linux/mm.h> 15#include <linux/mm.h>
17#include <linux/hugetlb.h> 16#include <linux/hugetlb.h>
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index 12156176c7ca..6b59617760c1 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -171,8 +171,6 @@ void *kmap_coherent(struct page *page, unsigned long addr)
171 return (void*) vaddr; 171 return (void*) vaddr;
172} 172}
173 173
174#define UNIQUE_ENTRYHI(idx) (CKSEG0 + ((idx) << (PAGE_SHIFT + 1)))
175
176void kunmap_coherent(void) 174void kunmap_coherent(void)
177{ 175{
178#ifndef CONFIG_MIPS_MT_SMTC 176#ifndef CONFIG_MIPS_MT_SMTC
diff --git a/arch/mips/mm/page.c b/arch/mips/mm/page.c
index cbd81d17793a..58033c44690d 100644
--- a/arch/mips/mm/page.c
+++ b/arch/mips/mm/page.c
@@ -8,7 +8,6 @@
8 * Copyright (C) 2008 Thiemo Seufer 8 * Copyright (C) 2008 Thiemo Seufer
9 * Copyright (C) 2012 MIPS Technologies, Inc. 9 * Copyright (C) 2012 MIPS Technologies, Inc.
10 */ 10 */
11#include <linux/init.h>
12#include <linux/kernel.h> 11#include <linux/kernel.h>
13#include <linux/sched.h> 12#include <linux/sched.h>
14#include <linux/smp.h> 13#include <linux/smp.h>
diff --git a/arch/mips/mm/sc-mips.c b/arch/mips/mm/sc-mips.c
index 08d05aee8788..7a56aee5fce7 100644
--- a/arch/mips/mm/sc-mips.c
+++ b/arch/mips/mm/sc-mips.c
@@ -76,6 +76,8 @@ static inline int mips_sc_is_activated(struct cpuinfo_mips *c)
76 case CPU_34K: 76 case CPU_34K:
77 case CPU_74K: 77 case CPU_74K:
78 case CPU_1004K: 78 case CPU_1004K:
79 case CPU_INTERAPTIV:
80 case CPU_PROAPTIV:
79 case CPU_BMIPS5000: 81 case CPU_BMIPS5000:
80 if (config2 & (1 << 12)) 82 if (config2 & (1 << 12))
81 return 0; 83 return 0;
diff --git a/arch/mips/mm/sc-rm7k.c b/arch/mips/mm/sc-rm7k.c
index aaffbba33706..9ac1efcfbcc7 100644
--- a/arch/mips/mm/sc-rm7k.c
+++ b/arch/mips/mm/sc-rm7k.c
@@ -6,7 +6,6 @@
6 6
7#undef DEBUG 7#undef DEBUG
8 8
9#include <linux/init.h>
10#include <linux/kernel.h> 9#include <linux/kernel.h>
11#include <linux/mm.h> 10#include <linux/mm.h>
12#include <linux/bitops.h> 11#include <linux/bitops.h>
diff --git a/arch/mips/mm/tlb-r3k.c b/arch/mips/mm/tlb-r3k.c
index 9aca10994cd2..d657493ef561 100644
--- a/arch/mips/mm/tlb-r3k.c
+++ b/arch/mips/mm/tlb-r3k.c
@@ -10,7 +10,6 @@
10 * Copyright (C) 2002 Ralf Baechle 10 * Copyright (C) 2002 Ralf Baechle
11 * Copyright (C) 2002 Maciej W. Rozycki 11 * Copyright (C) 2002 Maciej W. Rozycki
12 */ 12 */
13#include <linux/init.h>
14#include <linux/kernel.h> 13#include <linux/kernel.h>
15#include <linux/sched.h> 14#include <linux/sched.h>
16#include <linux/smp.h> 15#include <linux/smp.h>
diff --git a/arch/mips/mm/tlb-r4k.c b/arch/mips/mm/tlb-r4k.c
index da3b0b9c9eae..ae4ca2450707 100644
--- a/arch/mips/mm/tlb-r4k.c
+++ b/arch/mips/mm/tlb-r4k.c
@@ -20,16 +20,11 @@
20#include <asm/bootinfo.h> 20#include <asm/bootinfo.h>
21#include <asm/mmu_context.h> 21#include <asm/mmu_context.h>
22#include <asm/pgtable.h> 22#include <asm/pgtable.h>
23#include <asm/tlb.h>
23#include <asm/tlbmisc.h> 24#include <asm/tlbmisc.h>
24 25
25extern void build_tlb_refill_handler(void); 26extern void build_tlb_refill_handler(void);
26 27
27/*
28 * Make sure all entries differ. If they're not different
29 * MIPS32 will take revenge ...
30 */
31#define UNIQUE_ENTRYHI(idx) (CKSEG0 + ((idx) << (PAGE_SHIFT + 1)))
32
33/* Atomicity and interruptability */ 28/* Atomicity and interruptability */
34#ifdef CONFIG_MIPS_MT_SMTC 29#ifdef CONFIG_MIPS_MT_SMTC
35 30
@@ -77,7 +72,7 @@ void local_flush_tlb_all(void)
77{ 72{
78 unsigned long flags; 73 unsigned long flags;
79 unsigned long old_ctx; 74 unsigned long old_ctx;
80 int entry; 75 int entry, ftlbhighset;
81 76
82 ENTER_CRITICAL(flags); 77 ENTER_CRITICAL(flags);
83 /* Save old context and create impossible VPN2 value */ 78 /* Save old context and create impossible VPN2 value */
@@ -88,13 +83,30 @@ void local_flush_tlb_all(void)
88 entry = read_c0_wired(); 83 entry = read_c0_wired();
89 84
90 /* Blast 'em all away. */ 85 /* Blast 'em all away. */
91 while (entry < current_cpu_data.tlbsize) { 86 if (cpu_has_tlbinv) {
92 /* Make sure all entries differ. */ 87 if (current_cpu_data.tlbsizevtlb) {
93 write_c0_entryhi(UNIQUE_ENTRYHI(entry)); 88 write_c0_index(0);
94 write_c0_index(entry); 89 mtc0_tlbw_hazard();
95 mtc0_tlbw_hazard(); 90 tlbinvf(); /* invalidate VTLB */
96 tlb_write_indexed(); 91 }
97 entry++; 92 ftlbhighset = current_cpu_data.tlbsizevtlb +
93 current_cpu_data.tlbsizeftlbsets;
94 for (entry = current_cpu_data.tlbsizevtlb;
95 entry < ftlbhighset;
96 entry++) {
97 write_c0_index(entry);
98 mtc0_tlbw_hazard();
99 tlbinvf(); /* invalidate one FTLB set */
100 }
101 } else {
102 while (entry < current_cpu_data.tlbsize) {
103 /* Make sure all entries differ. */
104 write_c0_entryhi(UNIQUE_ENTRYHI(entry));
105 write_c0_index(entry);
106 mtc0_tlbw_hazard();
107 tlb_write_indexed();
108 entry++;
109 }
98 } 110 }
99 tlbw_use_hazard(); 111 tlbw_use_hazard();
100 write_c0_entryhi(old_ctx); 112 write_c0_entryhi(old_ctx);
@@ -133,7 +145,9 @@ void local_flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
133 start = round_down(start, PAGE_SIZE << 1); 145 start = round_down(start, PAGE_SIZE << 1);
134 end = round_up(end, PAGE_SIZE << 1); 146 end = round_up(end, PAGE_SIZE << 1);
135 size = (end - start) >> (PAGE_SHIFT + 1); 147 size = (end - start) >> (PAGE_SHIFT + 1);
136 if (size <= current_cpu_data.tlbsize/2) { 148 if (size <= (current_cpu_data.tlbsizeftlbsets ?
149 current_cpu_data.tlbsize / 8 :
150 current_cpu_data.tlbsize / 2)) {
137 int oldpid = read_c0_entryhi(); 151 int oldpid = read_c0_entryhi();
138 int newpid = cpu_asid(cpu, mm); 152 int newpid = cpu_asid(cpu, mm);
139 153
@@ -172,7 +186,9 @@ void local_flush_tlb_kernel_range(unsigned long start, unsigned long end)
172 ENTER_CRITICAL(flags); 186 ENTER_CRITICAL(flags);
173 size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT; 187 size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
174 size = (size + 1) >> 1; 188 size = (size + 1) >> 1;
175 if (size <= current_cpu_data.tlbsize / 2) { 189 if (size <= (current_cpu_data.tlbsizeftlbsets ?
190 current_cpu_data.tlbsize / 8 :
191 current_cpu_data.tlbsize / 2)) {
176 int pid = read_c0_entryhi(); 192 int pid = read_c0_entryhi();
177 193
178 start &= (PAGE_MASK << 1); 194 start &= (PAGE_MASK << 1);
diff --git a/arch/mips/mm/tlb-r8k.c b/arch/mips/mm/tlb-r8k.c
index 6a99733a4440..138a2ec7cc6b 100644
--- a/arch/mips/mm/tlb-r8k.c
+++ b/arch/mips/mm/tlb-r8k.c
@@ -8,7 +8,6 @@
8 * Carsten Langgaard, carstenl@mips.com 8 * Carsten Langgaard, carstenl@mips.com
9 * Copyright (C) 2002 MIPS Technologies, Inc. All rights reserved. 9 * Copyright (C) 2002 MIPS Technologies, Inc. All rights reserved.
10 */ 10 */
11#include <linux/init.h>
12#include <linux/sched.h> 11#include <linux/sched.h>
13#include <linux/smp.h> 12#include <linux/smp.h>
14#include <linux/mm.h> 13#include <linux/mm.h>
diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c
index 183f2b583e4d..b234b1b5ccad 100644
--- a/arch/mips/mm/tlbex.c
+++ b/arch/mips/mm/tlbex.c
@@ -26,7 +26,6 @@
26#include <linux/types.h> 26#include <linux/types.h>
27#include <linux/smp.h> 27#include <linux/smp.h>
28#include <linux/string.h> 28#include <linux/string.h>
29#include <linux/init.h>
30#include <linux/cache.h> 29#include <linux/cache.h>
31 30
32#include <asm/cacheflush.h> 31#include <asm/cacheflush.h>
@@ -510,6 +509,7 @@ static void build_tlb_write_entry(u32 **p, struct uasm_label **l,
510 switch (current_cpu_type()) { 509 switch (current_cpu_type()) {
511 case CPU_M14KC: 510 case CPU_M14KC:
512 case CPU_74K: 511 case CPU_74K:
512 case CPU_PROAPTIV:
513 break; 513 break;
514 514
515 default: 515 default:
diff --git a/arch/mips/mm/uasm-micromips.c b/arch/mips/mm/uasm-micromips.c
index 060000fa653c..b8d580ca02e5 100644
--- a/arch/mips/mm/uasm-micromips.c
+++ b/arch/mips/mm/uasm-micromips.c
@@ -15,7 +15,6 @@
15 15
16#include <linux/kernel.h> 16#include <linux/kernel.h>
17#include <linux/types.h> 17#include <linux/types.h>
18#include <linux/init.h>
19 18
20#include <asm/inst.h> 19#include <asm/inst.h>
21#include <asm/elf.h> 20#include <asm/elf.h>
diff --git a/arch/mips/mm/uasm-mips.c b/arch/mips/mm/uasm-mips.c
index 0c724589854e..3abd609518c9 100644
--- a/arch/mips/mm/uasm-mips.c
+++ b/arch/mips/mm/uasm-mips.c
@@ -15,7 +15,6 @@
15 15
16#include <linux/kernel.h> 16#include <linux/kernel.h>
17#include <linux/types.h> 17#include <linux/types.h>
18#include <linux/init.h>
19 18
20#include <asm/inst.h> 19#include <asm/inst.h>
21#include <asm/elf.h> 20#include <asm/elf.h>