aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/mips/cobalt/Makefile3
-rw-r--r--arch/mips/include/asm/pgtable-bits.h14
-rw-r--r--arch/mips/include/asm/switch_to.h2
-rw-r--r--arch/mips/loongson/common/Makefile4
-rw-r--r--drivers/irqchip/irq-mips-gic.c21
-rw-r--r--drivers/ssb/driver_chipcommon_pmu.c6
-rw-r--r--lib/mpi/longlong.h4
7 files changed, 29 insertions, 25 deletions
diff --git a/arch/mips/cobalt/Makefile b/arch/mips/cobalt/Makefile
index 558e94977942..68f0c5871adc 100644
--- a/arch/mips/cobalt/Makefile
+++ b/arch/mips/cobalt/Makefile
@@ -2,7 +2,6 @@
2# Makefile for the Cobalt micro systems family specific parts of the kernel 2# Makefile for the Cobalt micro systems family specific parts of the kernel
3# 3#
4 4
5obj-y := buttons.o irq.o lcd.o led.o reset.o rtc.o serial.o setup.o time.o 5obj-y := buttons.o irq.o lcd.o led.o mtd.o reset.o rtc.o serial.o setup.o time.o
6 6
7obj-$(CONFIG_PCI) += pci.o 7obj-$(CONFIG_PCI) += pci.o
8obj-$(CONFIG_MTD_PHYSMAP) += mtd.o
diff --git a/arch/mips/include/asm/pgtable-bits.h b/arch/mips/include/asm/pgtable-bits.h
index 18ae5ddef118..c28a8499aec7 100644
--- a/arch/mips/include/asm/pgtable-bits.h
+++ b/arch/mips/include/asm/pgtable-bits.h
@@ -113,7 +113,7 @@
113#define _PAGE_PRESENT_SHIFT 0 113#define _PAGE_PRESENT_SHIFT 0
114#define _PAGE_PRESENT (1 << _PAGE_PRESENT_SHIFT) 114#define _PAGE_PRESENT (1 << _PAGE_PRESENT_SHIFT)
115/* R2 or later cores check for RI/XI support to determine _PAGE_READ */ 115/* R2 or later cores check for RI/XI support to determine _PAGE_READ */
116#ifdef CONFIG_CPU_MIPSR2 116#if defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6)
117#define _PAGE_WRITE_SHIFT (_PAGE_PRESENT_SHIFT + 1) 117#define _PAGE_WRITE_SHIFT (_PAGE_PRESENT_SHIFT + 1)
118#define _PAGE_WRITE (1 << _PAGE_WRITE_SHIFT) 118#define _PAGE_WRITE (1 << _PAGE_WRITE_SHIFT)
119#else 119#else
@@ -135,16 +135,16 @@
135#define _PAGE_SPLITTING (1 << _PAGE_SPLITTING_SHIFT) 135#define _PAGE_SPLITTING (1 << _PAGE_SPLITTING_SHIFT)
136 136
137/* Only R2 or newer cores have the XI bit */ 137/* Only R2 or newer cores have the XI bit */
138#ifdef CONFIG_CPU_MIPSR2 138#if defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6)
139#define _PAGE_NO_EXEC_SHIFT (_PAGE_SPLITTING_SHIFT + 1) 139#define _PAGE_NO_EXEC_SHIFT (_PAGE_SPLITTING_SHIFT + 1)
140#else 140#else
141#define _PAGE_GLOBAL_SHIFT (_PAGE_SPLITTING_SHIFT + 1) 141#define _PAGE_GLOBAL_SHIFT (_PAGE_SPLITTING_SHIFT + 1)
142#define _PAGE_GLOBAL (1 << _PAGE_GLOBAL_SHIFT) 142#define _PAGE_GLOBAL (1 << _PAGE_GLOBAL_SHIFT)
143#endif /* CONFIG_CPU_MIPSR2 */ 143#endif /* CONFIG_CPU_MIPSR2 || CONFIG_CPU_MIPSR6 */
144 144
145#endif /* CONFIG_64BIT && CONFIG_MIPS_HUGE_TLB_SUPPORT */ 145#endif /* CONFIG_64BIT && CONFIG_MIPS_HUGE_TLB_SUPPORT */
146 146
147#ifdef CONFIG_CPU_MIPSR2 147#if defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6)
148/* XI - page cannot be executed */ 148/* XI - page cannot be executed */
149#ifndef _PAGE_NO_EXEC_SHIFT 149#ifndef _PAGE_NO_EXEC_SHIFT
150#define _PAGE_NO_EXEC_SHIFT (_PAGE_MODIFIED_SHIFT + 1) 150#define _PAGE_NO_EXEC_SHIFT (_PAGE_MODIFIED_SHIFT + 1)
@@ -160,10 +160,10 @@
160#define _PAGE_GLOBAL_SHIFT (_PAGE_NO_READ_SHIFT + 1) 160#define _PAGE_GLOBAL_SHIFT (_PAGE_NO_READ_SHIFT + 1)
161#define _PAGE_GLOBAL (1 << _PAGE_GLOBAL_SHIFT) 161#define _PAGE_GLOBAL (1 << _PAGE_GLOBAL_SHIFT)
162 162
163#else /* !CONFIG_CPU_MIPSR2 */ 163#else /* !CONFIG_CPU_MIPSR2 && !CONFIG_CPU_MIPSR6 */
164#define _PAGE_GLOBAL_SHIFT (_PAGE_MODIFIED_SHIFT + 1) 164#define _PAGE_GLOBAL_SHIFT (_PAGE_MODIFIED_SHIFT + 1)
165#define _PAGE_GLOBAL (1 << _PAGE_GLOBAL_SHIFT) 165#define _PAGE_GLOBAL (1 << _PAGE_GLOBAL_SHIFT)
166#endif /* CONFIG_CPU_MIPSR2 */ 166#endif /* CONFIG_CPU_MIPSR2 || CONFIG_CPU_MIPSR6 */
167 167
168#define _PAGE_VALID_SHIFT (_PAGE_GLOBAL_SHIFT + 1) 168#define _PAGE_VALID_SHIFT (_PAGE_GLOBAL_SHIFT + 1)
169#define _PAGE_VALID (1 << _PAGE_VALID_SHIFT) 169#define _PAGE_VALID (1 << _PAGE_VALID_SHIFT)
@@ -205,7 +205,7 @@
205 */ 205 */
206static inline uint64_t pte_to_entrylo(unsigned long pte_val) 206static inline uint64_t pte_to_entrylo(unsigned long pte_val)
207{ 207{
208#ifdef CONFIG_CPU_MIPSR2 208#if defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6)
209 if (cpu_has_rixi) { 209 if (cpu_has_rixi) {
210 int sa; 210 int sa;
211#ifdef CONFIG_32BIT 211#ifdef CONFIG_32BIT
diff --git a/arch/mips/include/asm/switch_to.h b/arch/mips/include/asm/switch_to.h
index e92d6c4b5ed1..7163cd7fdd69 100644
--- a/arch/mips/include/asm/switch_to.h
+++ b/arch/mips/include/asm/switch_to.h
@@ -104,7 +104,6 @@ do { \
104 if (test_and_clear_tsk_thread_flag(prev, TIF_USEDMSA)) \ 104 if (test_and_clear_tsk_thread_flag(prev, TIF_USEDMSA)) \
105 __fpsave = FP_SAVE_VECTOR; \ 105 __fpsave = FP_SAVE_VECTOR; \
106 (last) = resume(prev, next, task_thread_info(next), __fpsave); \ 106 (last) = resume(prev, next, task_thread_info(next), __fpsave); \
107 disable_msa(); \
108} while (0) 107} while (0)
109 108
110#define finish_arch_switch(prev) \ 109#define finish_arch_switch(prev) \
@@ -122,6 +121,7 @@ do { \
122 if (cpu_has_userlocal) \ 121 if (cpu_has_userlocal) \
123 write_c0_userlocal(current_thread_info()->tp_value); \ 122 write_c0_userlocal(current_thread_info()->tp_value); \
124 __restore_watch(); \ 123 __restore_watch(); \
124 disable_msa(); \
125} while (0) 125} while (0)
126 126
127#endif /* _ASM_SWITCH_TO_H */ 127#endif /* _ASM_SWITCH_TO_H */
diff --git a/arch/mips/loongson/common/Makefile b/arch/mips/loongson/common/Makefile
index e70c33fdb881..f2e8153e44f5 100644
--- a/arch/mips/loongson/common/Makefile
+++ b/arch/mips/loongson/common/Makefile
@@ -3,15 +3,13 @@
3# 3#
4 4
5obj-y += setup.o init.o cmdline.o env.o time.o reset.o irq.o \ 5obj-y += setup.o init.o cmdline.o env.o time.o reset.o irq.o \
6 bonito-irq.o mem.o machtype.o platform.o 6 bonito-irq.o mem.o machtype.o platform.o serial.o
7obj-$(CONFIG_PCI) += pci.o 7obj-$(CONFIG_PCI) += pci.o
8 8
9# 9#
10# Serial port support 10# Serial port support
11# 11#
12obj-$(CONFIG_EARLY_PRINTK) += early_printk.o 12obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
13loongson-serial-$(CONFIG_SERIAL_8250) := serial.o
14obj-y += $(loongson-serial-m) $(loongson-serial-y)
15obj-$(CONFIG_LOONGSON_UART_BASE) += uart_base.o 13obj-$(CONFIG_LOONGSON_UART_BASE) += uart_base.o
16obj-$(CONFIG_LOONGSON_MC146818) += rtc.o 14obj-$(CONFIG_LOONGSON_MC146818) += rtc.o
17 15
diff --git a/drivers/irqchip/irq-mips-gic.c b/drivers/irqchip/irq-mips-gic.c
index 57f09cb54464..269c2354c431 100644
--- a/drivers/irqchip/irq-mips-gic.c
+++ b/drivers/irqchip/irq-mips-gic.c
@@ -271,7 +271,7 @@ int gic_get_c0_fdc_int(void)
271 GIC_LOCAL_TO_HWIRQ(GIC_LOCAL_INT_FDC)); 271 GIC_LOCAL_TO_HWIRQ(GIC_LOCAL_INT_FDC));
272} 272}
273 273
274static void gic_handle_shared_int(void) 274static void gic_handle_shared_int(bool chained)
275{ 275{
276 unsigned int i, intr, virq; 276 unsigned int i, intr, virq;
277 unsigned long *pcpu_mask; 277 unsigned long *pcpu_mask;
@@ -299,7 +299,10 @@ static void gic_handle_shared_int(void)
299 while (intr != gic_shared_intrs) { 299 while (intr != gic_shared_intrs) {
300 virq = irq_linear_revmap(gic_irq_domain, 300 virq = irq_linear_revmap(gic_irq_domain,
301 GIC_SHARED_TO_HWIRQ(intr)); 301 GIC_SHARED_TO_HWIRQ(intr));
302 do_IRQ(virq); 302 if (chained)
303 generic_handle_irq(virq);
304 else
305 do_IRQ(virq);
303 306
304 /* go to next pending bit */ 307 /* go to next pending bit */
305 bitmap_clear(pending, intr, 1); 308 bitmap_clear(pending, intr, 1);
@@ -431,7 +434,7 @@ static struct irq_chip gic_edge_irq_controller = {
431#endif 434#endif
432}; 435};
433 436
434static void gic_handle_local_int(void) 437static void gic_handle_local_int(bool chained)
435{ 438{
436 unsigned long pending, masked; 439 unsigned long pending, masked;
437 unsigned int intr, virq; 440 unsigned int intr, virq;
@@ -445,7 +448,10 @@ static void gic_handle_local_int(void)
445 while (intr != GIC_NUM_LOCAL_INTRS) { 448 while (intr != GIC_NUM_LOCAL_INTRS) {
446 virq = irq_linear_revmap(gic_irq_domain, 449 virq = irq_linear_revmap(gic_irq_domain,
447 GIC_LOCAL_TO_HWIRQ(intr)); 450 GIC_LOCAL_TO_HWIRQ(intr));
448 do_IRQ(virq); 451 if (chained)
452 generic_handle_irq(virq);
453 else
454 do_IRQ(virq);
449 455
450 /* go to next pending bit */ 456 /* go to next pending bit */
451 bitmap_clear(&pending, intr, 1); 457 bitmap_clear(&pending, intr, 1);
@@ -509,13 +515,14 @@ static struct irq_chip gic_all_vpes_local_irq_controller = {
509 515
510static void __gic_irq_dispatch(void) 516static void __gic_irq_dispatch(void)
511{ 517{
512 gic_handle_local_int(); 518 gic_handle_local_int(false);
513 gic_handle_shared_int(); 519 gic_handle_shared_int(false);
514} 520}
515 521
516static void gic_irq_dispatch(unsigned int irq, struct irq_desc *desc) 522static void gic_irq_dispatch(unsigned int irq, struct irq_desc *desc)
517{ 523{
518 __gic_irq_dispatch(); 524 gic_handle_local_int(true);
525 gic_handle_shared_int(true);
519} 526}
520 527
521#ifdef CONFIG_MIPS_GIC_IPI 528#ifdef CONFIG_MIPS_GIC_IPI
diff --git a/drivers/ssb/driver_chipcommon_pmu.c b/drivers/ssb/driver_chipcommon_pmu.c
index 09428412139e..c5352ea4821e 100644
--- a/drivers/ssb/driver_chipcommon_pmu.c
+++ b/drivers/ssb/driver_chipcommon_pmu.c
@@ -621,8 +621,8 @@ static u32 ssb_pmu_get_alp_clock_clk0(struct ssb_chipcommon *cc)
621 u32 crystalfreq; 621 u32 crystalfreq;
622 const struct pmu0_plltab_entry *e = NULL; 622 const struct pmu0_plltab_entry *e = NULL;
623 623
624 crystalfreq = chipco_read32(cc, SSB_CHIPCO_PMU_CTL) & 624 crystalfreq = (chipco_read32(cc, SSB_CHIPCO_PMU_CTL) &
625 SSB_CHIPCO_PMU_CTL_XTALFREQ >> SSB_CHIPCO_PMU_CTL_XTALFREQ_SHIFT; 625 SSB_CHIPCO_PMU_CTL_XTALFREQ) >> SSB_CHIPCO_PMU_CTL_XTALFREQ_SHIFT;
626 e = pmu0_plltab_find_entry(crystalfreq); 626 e = pmu0_plltab_find_entry(crystalfreq);
627 BUG_ON(!e); 627 BUG_ON(!e);
628 return e->freq * 1000; 628 return e->freq * 1000;
@@ -634,7 +634,7 @@ u32 ssb_pmu_get_alp_clock(struct ssb_chipcommon *cc)
634 634
635 switch (bus->chip_id) { 635 switch (bus->chip_id) {
636 case 0x5354: 636 case 0x5354:
637 ssb_pmu_get_alp_clock_clk0(cc); 637 return ssb_pmu_get_alp_clock_clk0(cc);
638 default: 638 default:
639 ssb_err("ERROR: PMU alp clock unknown for device %04X\n", 639 ssb_err("ERROR: PMU alp clock unknown for device %04X\n",
640 bus->chip_id); 640 bus->chip_id);
diff --git a/lib/mpi/longlong.h b/lib/mpi/longlong.h
index aac511417ad1..a89d041592c8 100644
--- a/lib/mpi/longlong.h
+++ b/lib/mpi/longlong.h
@@ -639,7 +639,7 @@ do { \
639 ************** MIPS ***************** 639 ************** MIPS *****************
640 ***************************************/ 640 ***************************************/
641#if defined(__mips__) && W_TYPE_SIZE == 32 641#if defined(__mips__) && W_TYPE_SIZE == 32
642#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 4 642#if (__GNUC__ >= 5) || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 4)
643#define umul_ppmm(w1, w0, u, v) \ 643#define umul_ppmm(w1, w0, u, v) \
644do { \ 644do { \
645 UDItype __ll = (UDItype)(u) * (v); \ 645 UDItype __ll = (UDItype)(u) * (v); \
@@ -671,7 +671,7 @@ do { \
671 ************** MIPS/64 ************** 671 ************** MIPS/64 **************
672 ***************************************/ 672 ***************************************/
673#if (defined(__mips) && __mips >= 3) && W_TYPE_SIZE == 64 673#if (defined(__mips) && __mips >= 3) && W_TYPE_SIZE == 64
674#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 4 674#if (__GNUC__ >= 5) || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 4)
675#define umul_ppmm(w1, w0, u, v) \ 675#define umul_ppmm(w1, w0, u, v) \
676do { \ 676do { \
677 typedef unsigned int __ll_UTItype __attribute__((mode(TI))); \ 677 typedef unsigned int __ll_UTItype __attribute__((mode(TI))); \