diff options
Diffstat (limited to 'arch/mips')
-rw-r--r-- | arch/mips/Kconfig | 9 | ||||
-rw-r--r-- | arch/mips/emma2rh/markeins/setup.c | 16 | ||||
-rw-r--r-- | arch/mips/jazz/setup.c | 13 | ||||
-rw-r--r-- | arch/mips/kernel/.gitignore | 1 | ||||
-rw-r--r-- | arch/mips/kernel/kgdb.c | 7 | ||||
-rw-r--r-- | arch/mips/kernel/scall32-o32.S | 6 | ||||
-rw-r--r-- | arch/mips/kernel/scall64-64.S | 6 | ||||
-rw-r--r-- | arch/mips/kernel/scall64-n32.S | 6 | ||||
-rw-r--r-- | arch/mips/kernel/scall64-o32.S | 6 | ||||
-rw-r--r-- | arch/mips/kernel/setup.c | 75 | ||||
-rw-r--r-- | arch/mips/kernel/traps.c | 18 | ||||
-rw-r--r-- | arch/mips/mm/c-r3k.c | 1 | ||||
-rw-r--r-- | arch/mips/mm/c-r4k.c | 18 | ||||
-rw-r--r-- | arch/mips/mm/c-tx39.c | 2 | ||||
-rw-r--r-- | arch/mips/mm/cache.c | 1 | ||||
-rw-r--r-- | arch/mips/mm/tlbex.c | 6 | ||||
-rw-r--r-- | arch/mips/pci/pci-ip27.c | 1 | ||||
-rw-r--r-- | arch/mips/rb532/devices.c | 16 | ||||
-rw-r--r-- | arch/mips/sgi-ip22/ip22-platform.c | 2 | ||||
-rw-r--r-- | arch/mips/txx9/generic/setup.c | 4 |
20 files changed, 115 insertions, 99 deletions
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 4da736e25333..49896a2a1d72 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
@@ -1886,6 +1886,15 @@ config STACKTRACE_SUPPORT | |||
1886 | 1886 | ||
1887 | source "init/Kconfig" | 1887 | source "init/Kconfig" |
1888 | 1888 | ||
1889 | config PROBE_INITRD_HEADER | ||
1890 | bool "Probe initrd header created by addinitrd" | ||
1891 | depends on BLK_DEV_INITRD | ||
1892 | help | ||
1893 | Probe initrd header at the last page of kernel image. | ||
1894 | Say Y here if you are using arch/mips/boot/addinitrd.c to | ||
1895 | add initrd or initramfs image to the kernel image. | ||
1896 | Otherwise, say N. | ||
1897 | |||
1889 | menu "Bus options (PCI, PCMCIA, EISA, ISA, TC)" | 1898 | menu "Bus options (PCI, PCMCIA, EISA, ISA, TC)" |
1890 | 1899 | ||
1891 | config HW_HAS_EISA | 1900 | config HW_HAS_EISA |
diff --git a/arch/mips/emma2rh/markeins/setup.c b/arch/mips/emma2rh/markeins/setup.c index 822a20e21fa4..b6a23ad539f8 100644 --- a/arch/mips/emma2rh/markeins/setup.c +++ b/arch/mips/emma2rh/markeins/setup.c | |||
@@ -25,23 +25,9 @@ | |||
25 | #include <linux/init.h> | 25 | #include <linux/init.h> |
26 | #include <linux/kernel.h> | 26 | #include <linux/kernel.h> |
27 | #include <linux/types.h> | 27 | #include <linux/types.h> |
28 | #include <linux/initrd.h> | 28 | |
29 | #include <linux/irq.h> | ||
30 | #include <linux/ioport.h> | ||
31 | #include <linux/param.h> /* for HZ */ | ||
32 | #include <linux/root_dev.h> | ||
33 | #include <linux/serial.h> | ||
34 | #include <linux/serial_core.h> | ||
35 | |||
36 | #include <asm/cpu.h> | ||
37 | #include <asm/bootinfo.h> | ||
38 | #include <asm/addrspace.h> | ||
39 | #include <asm/time.h> | 29 | #include <asm/time.h> |
40 | #include <asm/bcache.h> | ||
41 | #include <asm/irq.h> | ||
42 | #include <asm/reboot.h> | 30 | #include <asm/reboot.h> |
43 | #include <asm/traps.h> | ||
44 | #include <asm/debug.h> | ||
45 | 31 | ||
46 | #include <asm/emma2rh/emma2rh.h> | 32 | #include <asm/emma2rh/emma2rh.h> |
47 | 33 | ||
diff --git a/arch/mips/jazz/setup.c b/arch/mips/jazz/setup.c index b59ba6b93cdd..7043f6b9ff3c 100644 --- a/arch/mips/jazz/setup.c +++ b/arch/mips/jazz/setup.c | |||
@@ -5,33 +5,22 @@ | |||
5 | * License. See the file "COPYING" in the main directory of this archive | 5 | * License. See the file "COPYING" in the main directory of this archive |
6 | * for more details. | 6 | * for more details. |
7 | * | 7 | * |
8 | * Copyright (C) 1996, 1997, 1998, 2001, 07 by Ralf Baechle | 8 | * Copyright (C) 1996, 1997, 1998, 2001, 07, 08 by Ralf Baechle |
9 | * Copyright (C) 2001 MIPS Technologies, Inc. | 9 | * Copyright (C) 2001 MIPS Technologies, Inc. |
10 | * Copyright (C) 2007 by Thomas Bogendoerfer | 10 | * Copyright (C) 2007 by Thomas Bogendoerfer |
11 | */ | 11 | */ |
12 | #include <linux/eisa.h> | 12 | #include <linux/eisa.h> |
13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
14 | #include <linux/ioport.h> | 14 | #include <linux/ioport.h> |
15 | #include <linux/sched.h> | ||
16 | #include <linux/interrupt.h> | ||
17 | #include <linux/mm.h> | ||
18 | #include <linux/console.h> | 15 | #include <linux/console.h> |
19 | #include <linux/fb.h> | ||
20 | #include <linux/pm.h> | ||
21 | #include <linux/screen_info.h> | 16 | #include <linux/screen_info.h> |
22 | #include <linux/platform_device.h> | 17 | #include <linux/platform_device.h> |
23 | #include <linux/serial_8250.h> | 18 | #include <linux/serial_8250.h> |
24 | 19 | ||
25 | #include <asm/bootinfo.h> | ||
26 | #include <asm/irq.h> | ||
27 | #include <asm/jazz.h> | 20 | #include <asm/jazz.h> |
28 | #include <asm/jazzdma.h> | 21 | #include <asm/jazzdma.h> |
29 | #include <asm/reboot.h> | 22 | #include <asm/reboot.h> |
30 | #include <asm/io.h> | ||
31 | #include <asm/pgtable.h> | 23 | #include <asm/pgtable.h> |
32 | #include <asm/time.h> | ||
33 | #include <asm/traps.h> | ||
34 | #include <asm/mc146818-time.h> | ||
35 | 24 | ||
36 | extern asmlinkage void jazz_handle_int(void); | 25 | extern asmlinkage void jazz_handle_int(void); |
37 | 26 | ||
diff --git a/arch/mips/kernel/.gitignore b/arch/mips/kernel/.gitignore new file mode 100644 index 000000000000..c5f676c3c224 --- /dev/null +++ b/arch/mips/kernel/.gitignore | |||
@@ -0,0 +1 @@ | |||
vmlinux.lds | |||
diff --git a/arch/mips/kernel/kgdb.c b/arch/mips/kernel/kgdb.c index c5a8b2d21ca4..8f6d58ede33c 100644 --- a/arch/mips/kernel/kgdb.c +++ b/arch/mips/kernel/kgdb.c | |||
@@ -62,13 +62,13 @@ void arch_kgdb_breakpoint(void) | |||
62 | 62 | ||
63 | static void kgdb_call_nmi_hook(void *ignored) | 63 | static void kgdb_call_nmi_hook(void *ignored) |
64 | { | 64 | { |
65 | kgdb_nmicallback(raw_smp_processor_id(), (void *)0); | 65 | kgdb_nmicallback(raw_smp_processor_id(), NULL); |
66 | } | 66 | } |
67 | 67 | ||
68 | void kgdb_roundup_cpus(unsigned long flags) | 68 | void kgdb_roundup_cpus(unsigned long flags) |
69 | { | 69 | { |
70 | local_irq_enable(); | 70 | local_irq_enable(); |
71 | smp_call_function(kgdb_call_nmi_hook, NULL, NULL); | 71 | smp_call_function(kgdb_call_nmi_hook, NULL, 0); |
72 | local_irq_disable(); | 72 | local_irq_disable(); |
73 | } | 73 | } |
74 | 74 | ||
@@ -190,9 +190,6 @@ static int kgdb_mips_notify(struct notifier_block *self, unsigned long cmd, | |||
190 | struct pt_regs *regs = args->regs; | 190 | struct pt_regs *regs = args->regs; |
191 | int trap = (regs->cp0_cause & 0x7c) >> 2; | 191 | int trap = (regs->cp0_cause & 0x7c) >> 2; |
192 | 192 | ||
193 | if (fixup_exception(regs)) | ||
194 | return NOTIFY_DONE; | ||
195 | |||
196 | /* Userpace events, ignore. */ | 193 | /* Userpace events, ignore. */ |
197 | if (user_mode(regs)) | 194 | if (user_mode(regs)) |
198 | return NOTIFY_DONE; | 195 | return NOTIFY_DONE; |
diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S index fc4fd4d705e2..5e75a316f6b1 100644 --- a/arch/mips/kernel/scall32-o32.S +++ b/arch/mips/kernel/scall32-o32.S | |||
@@ -647,6 +647,12 @@ einval: li v0, -EINVAL | |||
647 | sys sys_timerfd_create 2 | 647 | sys sys_timerfd_create 2 |
648 | sys sys_timerfd_gettime 2 | 648 | sys sys_timerfd_gettime 2 |
649 | sys sys_timerfd_settime 4 | 649 | sys sys_timerfd_settime 4 |
650 | sys sys_signalfd4 4 | ||
651 | sys sys_eventfd2 2 /* 4325 */ | ||
652 | sys sys_epoll_create1 1 | ||
653 | sys sys_dup3 3 | ||
654 | sys sys_pipe2 2 | ||
655 | sys sys_inotify_init1 1 | ||
650 | .endm | 656 | .endm |
651 | 657 | ||
652 | /* We pre-compute the number of _instruction_ bytes needed to | 658 | /* We pre-compute the number of _instruction_ bytes needed to |
diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S index 2b73fd1e4528..3d58204c9d44 100644 --- a/arch/mips/kernel/scall64-64.S +++ b/arch/mips/kernel/scall64-64.S | |||
@@ -481,4 +481,10 @@ sys_call_table: | |||
481 | PTR sys_timerfd_create /* 5280 */ | 481 | PTR sys_timerfd_create /* 5280 */ |
482 | PTR sys_timerfd_gettime | 482 | PTR sys_timerfd_gettime |
483 | PTR sys_timerfd_settime | 483 | PTR sys_timerfd_settime |
484 | PTR sys_signalfd4 | ||
485 | PTR sys_eventfd2 | ||
486 | PTR sys_epoll_create1 /* 5285 */ | ||
487 | PTR sys_dup3 | ||
488 | PTR sys_pipe2 | ||
489 | PTR sys_inotify_init1 | ||
484 | .size sys_call_table,.-sys_call_table | 490 | .size sys_call_table,.-sys_call_table |
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S index 2654e75d2fef..da7f1b6ea0fb 100644 --- a/arch/mips/kernel/scall64-n32.S +++ b/arch/mips/kernel/scall64-n32.S | |||
@@ -407,4 +407,10 @@ EXPORT(sysn32_call_table) | |||
407 | PTR sys_timerfd_create | 407 | PTR sys_timerfd_create |
408 | PTR sys_timerfd_gettime /* 5285 */ | 408 | PTR sys_timerfd_gettime /* 5285 */ |
409 | PTR sys_timerfd_settime | 409 | PTR sys_timerfd_settime |
410 | PTR sys_signalfd4 | ||
411 | PTR sys_eventfd2 | ||
412 | PTR sys_epoll_create1 | ||
413 | PTR sys_dup3 /* 5290 */ | ||
414 | PTR sys_pipe2 | ||
415 | PTR sys_inotify_init1 | ||
410 | .size sysn32_call_table,.-sysn32_call_table | 416 | .size sysn32_call_table,.-sysn32_call_table |
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S index 76167bea5a70..d7cd1aac9ada 100644 --- a/arch/mips/kernel/scall64-o32.S +++ b/arch/mips/kernel/scall64-o32.S | |||
@@ -529,4 +529,10 @@ sys_call_table: | |||
529 | PTR sys_timerfd_create | 529 | PTR sys_timerfd_create |
530 | PTR sys_timerfd_gettime | 530 | PTR sys_timerfd_gettime |
531 | PTR sys_timerfd_settime | 531 | PTR sys_timerfd_settime |
532 | PTR compat_sys_signalfd4 | ||
533 | PTR sys_eventfd2 /* 4325 */ | ||
534 | PTR sys_epoll_create1 | ||
535 | PTR sys_dup3 | ||
536 | PTR sys_pipe2 | ||
537 | PTR sys_inotify_init1 | ||
532 | .size sys_call_table,.-sys_call_table | 538 | .size sys_call_table,.-sys_call_table |
diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c index 8af84867e74d..16f8edfe5cdc 100644 --- a/arch/mips/kernel/setup.c +++ b/arch/mips/kernel/setup.c | |||
@@ -78,7 +78,7 @@ void __init add_memory_region(phys_t start, phys_t size, long type) | |||
78 | 78 | ||
79 | /* Sanity check */ | 79 | /* Sanity check */ |
80 | if (start + size < start) { | 80 | if (start + size < start) { |
81 | printk("Trying to add an invalid memory region, skipped\n"); | 81 | pr_warning("Trying to add an invalid memory region, skipped\n"); |
82 | return; | 82 | return; |
83 | } | 83 | } |
84 | 84 | ||
@@ -92,7 +92,7 @@ void __init add_memory_region(phys_t start, phys_t size, long type) | |||
92 | } | 92 | } |
93 | 93 | ||
94 | if (x == BOOT_MEM_MAP_MAX) { | 94 | if (x == BOOT_MEM_MAP_MAX) { |
95 | printk("Ooops! Too many entries in the memory map!\n"); | 95 | pr_err("Ooops! Too many entries in the memory map!\n"); |
96 | return; | 96 | return; |
97 | } | 97 | } |
98 | 98 | ||
@@ -108,22 +108,22 @@ static void __init print_memory_map(void) | |||
108 | const int field = 2 * sizeof(unsigned long); | 108 | const int field = 2 * sizeof(unsigned long); |
109 | 109 | ||
110 | for (i = 0; i < boot_mem_map.nr_map; i++) { | 110 | for (i = 0; i < boot_mem_map.nr_map; i++) { |
111 | printk(" memory: %0*Lx @ %0*Lx ", | 111 | printk(KERN_INFO " memory: %0*Lx @ %0*Lx ", |
112 | field, (unsigned long long) boot_mem_map.map[i].size, | 112 | field, (unsigned long long) boot_mem_map.map[i].size, |
113 | field, (unsigned long long) boot_mem_map.map[i].addr); | 113 | field, (unsigned long long) boot_mem_map.map[i].addr); |
114 | 114 | ||
115 | switch (boot_mem_map.map[i].type) { | 115 | switch (boot_mem_map.map[i].type) { |
116 | case BOOT_MEM_RAM: | 116 | case BOOT_MEM_RAM: |
117 | printk("(usable)\n"); | 117 | printk(KERN_CONT "(usable)\n"); |
118 | break; | 118 | break; |
119 | case BOOT_MEM_ROM_DATA: | 119 | case BOOT_MEM_ROM_DATA: |
120 | printk("(ROM data)\n"); | 120 | printk(KERN_CONT "(ROM data)\n"); |
121 | break; | 121 | break; |
122 | case BOOT_MEM_RESERVED: | 122 | case BOOT_MEM_RESERVED: |
123 | printk("(reserved)\n"); | 123 | printk(KERN_CONT "(reserved)\n"); |
124 | break; | 124 | break; |
125 | default: | 125 | default: |
126 | printk("type %lu\n", boot_mem_map.map[i].type); | 126 | printk(KERN_CONT "type %lu\n", boot_mem_map.map[i].type); |
127 | break; | 127 | break; |
128 | } | 128 | } |
129 | } | 129 | } |
@@ -160,36 +160,39 @@ early_param("rd_size", rd_size_early); | |||
160 | static unsigned long __init init_initrd(void) | 160 | static unsigned long __init init_initrd(void) |
161 | { | 161 | { |
162 | unsigned long end; | 162 | unsigned long end; |
163 | u32 *initrd_header; | ||
164 | 163 | ||
165 | /* | 164 | /* |
166 | * Board specific code or command line parser should have | 165 | * Board specific code or command line parser should have |
167 | * already set up initrd_start and initrd_end. In these cases | 166 | * already set up initrd_start and initrd_end. In these cases |
168 | * perfom sanity checks and use them if all looks good. | 167 | * perfom sanity checks and use them if all looks good. |
169 | */ | 168 | */ |
170 | if (initrd_start && initrd_end > initrd_start) | 169 | if (!initrd_start || initrd_end <= initrd_start) { |
171 | goto sanitize; | 170 | #ifdef CONFIG_PROBE_INITRD_HEADER |
171 | u32 *initrd_header; | ||
172 | 172 | ||
173 | /* | 173 | /* |
174 | * See if initrd has been added to the kernel image by | 174 | * See if initrd has been added to the kernel image by |
175 | * arch/mips/boot/addinitrd.c. In that case a header is | 175 | * arch/mips/boot/addinitrd.c. In that case a header is |
176 | * prepended to initrd and is made up by 8 bytes. The fisrt | 176 | * prepended to initrd and is made up by 8 bytes. The first |
177 | * word is a magic number and the second one is the size of | 177 | * word is a magic number and the second one is the size of |
178 | * initrd. Initrd start must be page aligned in any cases. | 178 | * initrd. Initrd start must be page aligned in any cases. |
179 | */ | 179 | */ |
180 | initrd_header = __va(PAGE_ALIGN(__pa_symbol(&_end) + 8)) - 8; | 180 | initrd_header = __va(PAGE_ALIGN(__pa_symbol(&_end) + 8)) - 8; |
181 | if (initrd_header[0] != 0x494E5244) | 181 | if (initrd_header[0] != 0x494E5244) |
182 | goto disable; | ||
183 | initrd_start = (unsigned long)(initrd_header + 2); | ||
184 | initrd_end = initrd_start + initrd_header[1]; | ||
185 | #else | ||
182 | goto disable; | 186 | goto disable; |
183 | initrd_start = (unsigned long)(initrd_header + 2); | 187 | #endif |
184 | initrd_end = initrd_start + initrd_header[1]; | 188 | } |
185 | 189 | ||
186 | sanitize: | ||
187 | if (initrd_start & ~PAGE_MASK) { | 190 | if (initrd_start & ~PAGE_MASK) { |
188 | printk(KERN_ERR "initrd start must be page aligned\n"); | 191 | pr_err("initrd start must be page aligned\n"); |
189 | goto disable; | 192 | goto disable; |
190 | } | 193 | } |
191 | if (initrd_start < PAGE_OFFSET) { | 194 | if (initrd_start < PAGE_OFFSET) { |
192 | printk(KERN_ERR "initrd start < PAGE_OFFSET\n"); | 195 | pr_err("initrd start < PAGE_OFFSET\n"); |
193 | goto disable; | 196 | goto disable; |
194 | } | 197 | } |
195 | 198 | ||
@@ -221,18 +224,18 @@ static void __init finalize_initrd(void) | |||
221 | goto disable; | 224 | goto disable; |
222 | } | 225 | } |
223 | if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) { | 226 | if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) { |
224 | printk("Initrd extends beyond end of memory"); | 227 | printk(KERN_ERR "Initrd extends beyond end of memory"); |
225 | goto disable; | 228 | goto disable; |
226 | } | 229 | } |
227 | 230 | ||
228 | reserve_bootmem(__pa(initrd_start), size, BOOTMEM_DEFAULT); | 231 | reserve_bootmem(__pa(initrd_start), size, BOOTMEM_DEFAULT); |
229 | initrd_below_start_ok = 1; | 232 | initrd_below_start_ok = 1; |
230 | 233 | ||
231 | printk(KERN_INFO "Initial ramdisk at: 0x%lx (%lu bytes)\n", | 234 | pr_info("Initial ramdisk at: 0x%lx (%lu bytes)\n", |
232 | initrd_start, size); | 235 | initrd_start, size); |
233 | return; | 236 | return; |
234 | disable: | 237 | disable: |
235 | printk(" - disabling initrd\n"); | 238 | printk(KERN_CONT " - disabling initrd\n"); |
236 | initrd_start = 0; | 239 | initrd_start = 0; |
237 | initrd_end = 0; | 240 | initrd_end = 0; |
238 | } | 241 | } |
@@ -310,14 +313,12 @@ static void __init bootmem_init(void) | |||
310 | if (min_low_pfn >= max_low_pfn) | 313 | if (min_low_pfn >= max_low_pfn) |
311 | panic("Incorrect memory mapping !!!"); | 314 | panic("Incorrect memory mapping !!!"); |
312 | if (min_low_pfn > ARCH_PFN_OFFSET) { | 315 | if (min_low_pfn > ARCH_PFN_OFFSET) { |
313 | printk(KERN_INFO | 316 | pr_info("Wasting %lu bytes for tracking %lu unused pages\n", |
314 | "Wasting %lu bytes for tracking %lu unused pages\n", | 317 | (min_low_pfn - ARCH_PFN_OFFSET) * sizeof(struct page), |
315 | (min_low_pfn - ARCH_PFN_OFFSET) * sizeof(struct page), | 318 | min_low_pfn - ARCH_PFN_OFFSET); |
316 | min_low_pfn - ARCH_PFN_OFFSET); | ||
317 | } else if (min_low_pfn < ARCH_PFN_OFFSET) { | 319 | } else if (min_low_pfn < ARCH_PFN_OFFSET) { |
318 | printk(KERN_INFO | 320 | pr_info("%lu free pages won't be used\n", |
319 | "%lu free pages won't be used\n", | 321 | ARCH_PFN_OFFSET - min_low_pfn); |
320 | ARCH_PFN_OFFSET - min_low_pfn); | ||
321 | } | 322 | } |
322 | min_low_pfn = ARCH_PFN_OFFSET; | 323 | min_low_pfn = ARCH_PFN_OFFSET; |
323 | 324 | ||
@@ -471,7 +472,7 @@ static void __init arch_mem_init(char **cmdline_p) | |||
471 | /* call board setup routine */ | 472 | /* call board setup routine */ |
472 | plat_mem_setup(); | 473 | plat_mem_setup(); |
473 | 474 | ||
474 | printk("Determined physical RAM map:\n"); | 475 | pr_info("Determined physical RAM map:\n"); |
475 | print_memory_map(); | 476 | print_memory_map(); |
476 | 477 | ||
477 | strlcpy(command_line, arcs_cmdline, sizeof(command_line)); | 478 | strlcpy(command_line, arcs_cmdline, sizeof(command_line)); |
@@ -482,7 +483,7 @@ static void __init arch_mem_init(char **cmdline_p) | |||
482 | parse_early_param(); | 483 | parse_early_param(); |
483 | 484 | ||
484 | if (usermem) { | 485 | if (usermem) { |
485 | printk("User-defined physical RAM map:\n"); | 486 | pr_info("User-defined physical RAM map:\n"); |
486 | print_memory_map(); | 487 | print_memory_map(); |
487 | } | 488 | } |
488 | 489 | ||
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index 426cced1e9dc..6bee29097a56 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
@@ -373,8 +373,8 @@ void __noreturn die(const char * str, const struct pt_regs * regs) | |||
373 | do_exit(SIGSEGV); | 373 | do_exit(SIGSEGV); |
374 | } | 374 | } |
375 | 375 | ||
376 | extern const struct exception_table_entry __start___dbe_table[]; | 376 | extern struct exception_table_entry __start___dbe_table[]; |
377 | extern const struct exception_table_entry __stop___dbe_table[]; | 377 | extern struct exception_table_entry __stop___dbe_table[]; |
378 | 378 | ||
379 | __asm__( | 379 | __asm__( |
380 | " .section __dbe_table, \"a\"\n" | 380 | " .section __dbe_table, \"a\"\n" |
@@ -1200,7 +1200,7 @@ void *set_except_vector(int n, void *addr) | |||
1200 | if (n == 0 && cpu_has_divec) { | 1200 | if (n == 0 && cpu_has_divec) { |
1201 | *(u32 *)(ebase + 0x200) = 0x08000000 | | 1201 | *(u32 *)(ebase + 0x200) = 0x08000000 | |
1202 | (0x03ffffff & (handler >> 2)); | 1202 | (0x03ffffff & (handler >> 2)); |
1203 | flush_icache_range(ebase + 0x200, ebase + 0x204); | 1203 | local_flush_icache_range(ebase + 0x200, ebase + 0x204); |
1204 | } | 1204 | } |
1205 | return (void *)old_handler; | 1205 | return (void *)old_handler; |
1206 | } | 1206 | } |
@@ -1283,7 +1283,8 @@ static void *set_vi_srs_handler(int n, vi_handler_t addr, int srs) | |||
1283 | *w = (*w & 0xffff0000) | (((u32)handler >> 16) & 0xffff); | 1283 | *w = (*w & 0xffff0000) | (((u32)handler >> 16) & 0xffff); |
1284 | w = (u32 *)(b + ori_offset); | 1284 | w = (u32 *)(b + ori_offset); |
1285 | *w = (*w & 0xffff0000) | ((u32)handler & 0xffff); | 1285 | *w = (*w & 0xffff0000) | ((u32)handler & 0xffff); |
1286 | flush_icache_range((unsigned long)b, (unsigned long)(b+handler_len)); | 1286 | local_flush_icache_range((unsigned long)b, |
1287 | (unsigned long)(b+handler_len)); | ||
1287 | } | 1288 | } |
1288 | else { | 1289 | else { |
1289 | /* | 1290 | /* |
@@ -1295,7 +1296,8 @@ static void *set_vi_srs_handler(int n, vi_handler_t addr, int srs) | |||
1295 | w = (u32 *)b; | 1296 | w = (u32 *)b; |
1296 | *w++ = 0x08000000 | (((u32)handler >> 2) & 0x03fffff); /* j handler */ | 1297 | *w++ = 0x08000000 | (((u32)handler >> 2) & 0x03fffff); /* j handler */ |
1297 | *w = 0; | 1298 | *w = 0; |
1298 | flush_icache_range((unsigned long)b, (unsigned long)(b+8)); | 1299 | local_flush_icache_range((unsigned long)b, |
1300 | (unsigned long)(b+8)); | ||
1299 | } | 1301 | } |
1300 | 1302 | ||
1301 | return (void *)old_handler; | 1303 | return (void *)old_handler; |
@@ -1515,7 +1517,7 @@ void __cpuinit per_cpu_trap_init(void) | |||
1515 | void __init set_handler(unsigned long offset, void *addr, unsigned long size) | 1517 | void __init set_handler(unsigned long offset, void *addr, unsigned long size) |
1516 | { | 1518 | { |
1517 | memcpy((void *)(ebase + offset), addr, size); | 1519 | memcpy((void *)(ebase + offset), addr, size); |
1518 | flush_icache_range(ebase + offset, ebase + offset + size); | 1520 | local_flush_icache_range(ebase + offset, ebase + offset + size); |
1519 | } | 1521 | } |
1520 | 1522 | ||
1521 | static char panic_null_cerr[] __cpuinitdata = | 1523 | static char panic_null_cerr[] __cpuinitdata = |
@@ -1680,6 +1682,8 @@ void __init trap_init(void) | |||
1680 | signal32_init(); | 1682 | signal32_init(); |
1681 | #endif | 1683 | #endif |
1682 | 1684 | ||
1683 | flush_icache_range(ebase, ebase + 0x400); | 1685 | local_flush_icache_range(ebase, ebase + 0x400); |
1684 | flush_tlb_handlers(); | 1686 | flush_tlb_handlers(); |
1687 | |||
1688 | sort_extable(__start___dbe_table, __stop___dbe_table); | ||
1685 | } | 1689 | } |
diff --git a/arch/mips/mm/c-r3k.c b/arch/mips/mm/c-r3k.c index 27a5b466c85c..5500c20c79ae 100644 --- a/arch/mips/mm/c-r3k.c +++ b/arch/mips/mm/c-r3k.c | |||
@@ -320,6 +320,7 @@ void __cpuinit r3k_cache_init(void) | |||
320 | flush_cache_range = r3k_flush_cache_range; | 320 | flush_cache_range = r3k_flush_cache_range; |
321 | flush_cache_page = r3k_flush_cache_page; | 321 | flush_cache_page = r3k_flush_cache_page; |
322 | flush_icache_range = r3k_flush_icache_range; | 322 | flush_icache_range = r3k_flush_icache_range; |
323 | local_flush_icache_range = r3k_flush_icache_range; | ||
323 | 324 | ||
324 | flush_cache_sigtramp = r3k_flush_cache_sigtramp; | 325 | flush_cache_sigtramp = r3k_flush_cache_sigtramp; |
325 | local_flush_data_cache_page = local_r3k_flush_data_cache_page; | 326 | local_flush_data_cache_page = local_r3k_flush_data_cache_page; |
diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c index 71df3390c07b..6e99665ae860 100644 --- a/arch/mips/mm/c-r4k.c +++ b/arch/mips/mm/c-r4k.c | |||
@@ -543,12 +543,8 @@ struct flush_icache_range_args { | |||
543 | unsigned long end; | 543 | unsigned long end; |
544 | }; | 544 | }; |
545 | 545 | ||
546 | static inline void local_r4k_flush_icache_range(void *args) | 546 | static inline void local_r4k_flush_icache_range(unsigned long start, unsigned long end) |
547 | { | 547 | { |
548 | struct flush_icache_range_args *fir_args = args; | ||
549 | unsigned long start = fir_args->start; | ||
550 | unsigned long end = fir_args->end; | ||
551 | |||
552 | if (!cpu_has_ic_fills_f_dc) { | 548 | if (!cpu_has_ic_fills_f_dc) { |
553 | if (end - start >= dcache_size) { | 549 | if (end - start >= dcache_size) { |
554 | r4k_blast_dcache(); | 550 | r4k_blast_dcache(); |
@@ -564,6 +560,15 @@ static inline void local_r4k_flush_icache_range(void *args) | |||
564 | protected_blast_icache_range(start, end); | 560 | protected_blast_icache_range(start, end); |
565 | } | 561 | } |
566 | 562 | ||
563 | static inline void local_r4k_flush_icache_range_ipi(void *args) | ||
564 | { | ||
565 | struct flush_icache_range_args *fir_args = args; | ||
566 | unsigned long start = fir_args->start; | ||
567 | unsigned long end = fir_args->end; | ||
568 | |||
569 | local_r4k_flush_icache_range(start, end); | ||
570 | } | ||
571 | |||
567 | static void r4k_flush_icache_range(unsigned long start, unsigned long end) | 572 | static void r4k_flush_icache_range(unsigned long start, unsigned long end) |
568 | { | 573 | { |
569 | struct flush_icache_range_args args; | 574 | struct flush_icache_range_args args; |
@@ -571,7 +576,7 @@ static void r4k_flush_icache_range(unsigned long start, unsigned long end) | |||
571 | args.start = start; | 576 | args.start = start; |
572 | args.end = end; | 577 | args.end = end; |
573 | 578 | ||
574 | r4k_on_each_cpu(local_r4k_flush_icache_range, &args, 1); | 579 | r4k_on_each_cpu(local_r4k_flush_icache_range_ipi, &args, 1); |
575 | instruction_hazard(); | 580 | instruction_hazard(); |
576 | } | 581 | } |
577 | 582 | ||
@@ -1375,6 +1380,7 @@ void __cpuinit r4k_cache_init(void) | |||
1375 | local_flush_data_cache_page = local_r4k_flush_data_cache_page; | 1380 | local_flush_data_cache_page = local_r4k_flush_data_cache_page; |
1376 | flush_data_cache_page = r4k_flush_data_cache_page; | 1381 | flush_data_cache_page = r4k_flush_data_cache_page; |
1377 | flush_icache_range = r4k_flush_icache_range; | 1382 | flush_icache_range = r4k_flush_icache_range; |
1383 | local_flush_icache_range = local_r4k_flush_icache_range; | ||
1378 | 1384 | ||
1379 | #if defined(CONFIG_DMA_NONCOHERENT) | 1385 | #if defined(CONFIG_DMA_NONCOHERENT) |
1380 | if (coherentio) { | 1386 | if (coherentio) { |
diff --git a/arch/mips/mm/c-tx39.c b/arch/mips/mm/c-tx39.c index a9f7f1f5e9b4..f7c8f9ce39c1 100644 --- a/arch/mips/mm/c-tx39.c +++ b/arch/mips/mm/c-tx39.c | |||
@@ -362,6 +362,7 @@ void __cpuinit tx39_cache_init(void) | |||
362 | flush_cache_range = (void *) tx39h_flush_icache_all; | 362 | flush_cache_range = (void *) tx39h_flush_icache_all; |
363 | flush_cache_page = (void *) tx39h_flush_icache_all; | 363 | flush_cache_page = (void *) tx39h_flush_icache_all; |
364 | flush_icache_range = (void *) tx39h_flush_icache_all; | 364 | flush_icache_range = (void *) tx39h_flush_icache_all; |
365 | local_flush_icache_range = (void *) tx39h_flush_icache_all; | ||
365 | 366 | ||
366 | flush_cache_sigtramp = (void *) tx39h_flush_icache_all; | 367 | flush_cache_sigtramp = (void *) tx39h_flush_icache_all; |
367 | local_flush_data_cache_page = (void *) tx39h_flush_icache_all; | 368 | local_flush_data_cache_page = (void *) tx39h_flush_icache_all; |
@@ -390,6 +391,7 @@ void __cpuinit tx39_cache_init(void) | |||
390 | flush_cache_range = tx39_flush_cache_range; | 391 | flush_cache_range = tx39_flush_cache_range; |
391 | flush_cache_page = tx39_flush_cache_page; | 392 | flush_cache_page = tx39_flush_cache_page; |
392 | flush_icache_range = tx39_flush_icache_range; | 393 | flush_icache_range = tx39_flush_icache_range; |
394 | local_flush_icache_range = tx39_flush_icache_range; | ||
393 | 395 | ||
394 | flush_cache_sigtramp = tx39_flush_cache_sigtramp; | 396 | flush_cache_sigtramp = tx39_flush_cache_sigtramp; |
395 | local_flush_data_cache_page = local_tx39_flush_data_cache_page; | 397 | local_flush_data_cache_page = local_tx39_flush_data_cache_page; |
diff --git a/arch/mips/mm/cache.c b/arch/mips/mm/cache.c index 034e8506f6ea..1eb7c71e3d6a 100644 --- a/arch/mips/mm/cache.c +++ b/arch/mips/mm/cache.c | |||
@@ -29,6 +29,7 @@ void (*flush_cache_range)(struct vm_area_struct *vma, unsigned long start, | |||
29 | void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page, | 29 | void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page, |
30 | unsigned long pfn); | 30 | unsigned long pfn); |
31 | void (*flush_icache_range)(unsigned long start, unsigned long end); | 31 | void (*flush_icache_range)(unsigned long start, unsigned long end); |
32 | void (*local_flush_icache_range)(unsigned long start, unsigned long end); | ||
32 | 33 | ||
33 | void (*__flush_cache_vmap)(void); | 34 | void (*__flush_cache_vmap)(void); |
34 | void (*__flush_cache_vunmap)(void); | 35 | void (*__flush_cache_vunmap)(void); |
diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c index 76da73a5ab3c..979cf9197282 100644 --- a/arch/mips/mm/tlbex.c +++ b/arch/mips/mm/tlbex.c | |||
@@ -1273,10 +1273,10 @@ void __cpuinit build_tlb_refill_handler(void) | |||
1273 | 1273 | ||
1274 | void __cpuinit flush_tlb_handlers(void) | 1274 | void __cpuinit flush_tlb_handlers(void) |
1275 | { | 1275 | { |
1276 | flush_icache_range((unsigned long)handle_tlbl, | 1276 | local_flush_icache_range((unsigned long)handle_tlbl, |
1277 | (unsigned long)handle_tlbl + sizeof(handle_tlbl)); | 1277 | (unsigned long)handle_tlbl + sizeof(handle_tlbl)); |
1278 | flush_icache_range((unsigned long)handle_tlbs, | 1278 | local_flush_icache_range((unsigned long)handle_tlbs, |
1279 | (unsigned long)handle_tlbs + sizeof(handle_tlbs)); | 1279 | (unsigned long)handle_tlbs + sizeof(handle_tlbs)); |
1280 | flush_icache_range((unsigned long)handle_tlbm, | 1280 | local_flush_icache_range((unsigned long)handle_tlbm, |
1281 | (unsigned long)handle_tlbm + sizeof(handle_tlbm)); | 1281 | (unsigned long)handle_tlbm + sizeof(handle_tlbm)); |
1282 | } | 1282 | } |
diff --git a/arch/mips/pci/pci-ip27.c b/arch/mips/pci/pci-ip27.c index ce92f82b16d2..bd78368c82bf 100644 --- a/arch/mips/pci/pci-ip27.c +++ b/arch/mips/pci/pci-ip27.c | |||
@@ -205,6 +205,7 @@ int pcibus_to_node(struct pci_bus *bus) | |||
205 | 205 | ||
206 | return bc->nasid; | 206 | return bc->nasid; |
207 | } | 207 | } |
208 | EXPORT_SYMBOL(pcibus_to_node); | ||
208 | 209 | ||
209 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_IOC3, | 210 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_IOC3, |
210 | pci_fixup_ioc3); | 211 | pci_fixup_ioc3); |
diff --git a/arch/mips/rb532/devices.c b/arch/mips/rb532/devices.c index 44fb0a62877f..82ab395efa33 100644 --- a/arch/mips/rb532/devices.c +++ b/arch/mips/rb532/devices.c | |||
@@ -49,8 +49,6 @@ | |||
49 | #define GPIO_ALE (1 << 0x0a) | 49 | #define GPIO_ALE (1 << 0x0a) |
50 | #define GPIO_CLE (1 << 0x0b) | 50 | #define GPIO_CLE (1 << 0x0b) |
51 | 51 | ||
52 | extern char *board_type; | ||
53 | |||
54 | static struct resource korina_dev0_res[] = { | 52 | static struct resource korina_dev0_res[] = { |
55 | { | 53 | { |
56 | .name = "korina_regs", | 54 | .name = "korina_regs", |
@@ -265,14 +263,6 @@ static void __init parse_mac_addr(char *macstr) | |||
265 | } | 263 | } |
266 | 264 | ||
267 | 265 | ||
268 | /* DEVICE CONTROLLER 1 */ | ||
269 | #define CFG_DC_DEV1 ((void *)0xb8010010) | ||
270 | #define CFG_DC_DEV2 ((void *)0xb8010020) | ||
271 | #define CFG_DC_DEVBASE 0x0 | ||
272 | #define CFG_DC_DEVMASK 0x4 | ||
273 | #define CFG_DC_DEVC 0x8 | ||
274 | #define CFG_DC_DEVTC 0xC | ||
275 | |||
276 | /* NAND definitions */ | 266 | /* NAND definitions */ |
277 | #define NAND_CHIP_DELAY 25 | 267 | #define NAND_CHIP_DELAY 25 |
278 | 268 | ||
@@ -301,16 +291,16 @@ static void __init rb532_nand_setup(void) | |||
301 | static int __init plat_setup_devices(void) | 291 | static int __init plat_setup_devices(void) |
302 | { | 292 | { |
303 | /* Look for the CF card reader */ | 293 | /* Look for the CF card reader */ |
304 | if (!readl(CFG_DC_DEV1 + CFG_DC_DEVMASK)) | 294 | if (!readl(IDT434_REG_BASE + DEV1MASK)) |
305 | rb532_devs[1] = NULL; | 295 | rb532_devs[1] = NULL; |
306 | else { | 296 | else { |
307 | cf_slot0_res[0].start = | 297 | cf_slot0_res[0].start = |
308 | readl(CFG_DC_DEV1 + CFG_DC_DEVBASE); | 298 | readl(IDT434_REG_BASE + DEV1BASE); |
309 | cf_slot0_res[0].end = cf_slot0_res[0].start + 0x1000; | 299 | cf_slot0_res[0].end = cf_slot0_res[0].start + 0x1000; |
310 | } | 300 | } |
311 | 301 | ||
312 | /* Read the NAND resources from the device controller */ | 302 | /* Read the NAND resources from the device controller */ |
313 | nand_slot0_res[0].start = readl(CFG_DC_DEV2 + CFG_DC_DEVBASE); | 303 | nand_slot0_res[0].start = readl(IDT434_REG_BASE + DEV2BASE); |
314 | nand_slot0_res[0].end = nand_slot0_res[0].start + 0x1000; | 304 | nand_slot0_res[0].end = nand_slot0_res[0].start + 0x1000; |
315 | 305 | ||
316 | /* Initialise the NAND device */ | 306 | /* Initialise the NAND device */ |
diff --git a/arch/mips/sgi-ip22/ip22-platform.c b/arch/mips/sgi-ip22/ip22-platform.c index 60141235ec40..52486c4d2b01 100644 --- a/arch/mips/sgi-ip22/ip22-platform.c +++ b/arch/mips/sgi-ip22/ip22-platform.c | |||
@@ -150,7 +150,7 @@ static int __init sgiseeq_devinit(void) | |||
150 | return res; | 150 | return res; |
151 | 151 | ||
152 | /* Second HPC is missing? */ | 152 | /* Second HPC is missing? */ |
153 | if (!ip22_is_fullhouse() || | 153 | if (ip22_is_fullhouse() || |
154 | get_dbe(tmp, (unsigned int *)&hpc3c1->pbdma[1])) | 154 | get_dbe(tmp, (unsigned int *)&hpc3c1->pbdma[1])) |
155 | return 0; | 155 | return 0; |
156 | 156 | ||
diff --git a/arch/mips/txx9/generic/setup.c b/arch/mips/txx9/generic/setup.c index 1bc57d0f4c5c..fe6bee09cece 100644 --- a/arch/mips/txx9/generic/setup.c +++ b/arch/mips/txx9/generic/setup.c | |||
@@ -53,6 +53,7 @@ txx9_reg_res_init(unsigned int pcode, unsigned long base, unsigned long size) | |||
53 | txx9_ce_res[i].name = txx9_ce_res_name[i]; | 53 | txx9_ce_res[i].name = txx9_ce_res_name[i]; |
54 | } | 54 | } |
55 | 55 | ||
56 | txx9_pcode = pcode; | ||
56 | sprintf(txx9_pcode_str, "TX%x", pcode); | 57 | sprintf(txx9_pcode_str, "TX%x", pcode); |
57 | if (base) { | 58 | if (base) { |
58 | txx9_reg_res.start = base & 0xfffffffffULL; | 59 | txx9_reg_res.start = base & 0xfffffffffULL; |
@@ -328,6 +329,9 @@ void __init arch_init_irq(void) | |||
328 | 329 | ||
329 | void __init plat_time_init(void) | 330 | void __init plat_time_init(void) |
330 | { | 331 | { |
332 | #ifdef CONFIG_CPU_TX49XX | ||
333 | mips_hpt_frequency = txx9_cpu_clock / 2; | ||
334 | #endif | ||
331 | txx9_board_vec->time_init(); | 335 | txx9_board_vec->time_init(); |
332 | } | 336 | } |
333 | 337 | ||