diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-10-24 15:48:47 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-10-24 15:48:47 -0400 |
commit | 2cc91884b6b3f7328680b8ea7563016d3aee3d19 (patch) | |
tree | 954cdb444e6bfe92a8622d19c10a96367017e180 | |
parent | cdc63a059508b96cad1de793437ad2296d80ffe6 (diff) | |
parent | 4846f1181635e1f68aed0725f71700c15c2fb449 (diff) |
Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
Pull MIPS fixes from Ralf Baechle:
"This is the first round of fixes and tying up loose ends for MIPS.
- plenty of fixes for build errors in specific obscure configurations
- remove redundant code on the Lantiq platform
- removal of a useless SEAD I2C driver that was causing a build issue
- fix an earlier TLB exeption handler fix to also work on Octeon.
- fix ISA level dependencies in FPU emulator's instruction decoding.
- don't hardcode kernel command line in Octeon software emulator.
- fix an earlier fix for the Loondson 2 clock setting"
* 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus:
MIPS: SEAD3: Fix I2C device registration.
MIPS: SEAD3: Nuke PIC32 I2C driver.
MIPS: ftrace: Fix a microMIPS build problem
MIPS: MSP71xx: Fix build error
MIPS: Malta: Do not build the malta-amon.c file if CMP is not enabled
MIPS: Prevent compiler warning from cop2_{save,restore}
MIPS: Kconfig: Add missing MIPS_CPS dependencies to PM and cpuidle
MIPS: idle: Remove leftover __pastwait symbol and its references
MIPS: Sibyte: Include the swarm subdir to the sb1250 LittleSur builds
MIPS: ptrace.h: Add a missing include
MIPS: ath79: Fix compilation error when CONFIG_PCI is disabled
MIPS: MSP71xx: Remove compilation error when CONFIG_MIPS_MT is present
MIPS: Octeon: Remove special case for simulator command line.
MIPS: tlbex: Properly fix HUGE TLB Refill exception handler
MIPS: loongson2_cpufreq: Fix CPU clock rate setting mismerge
pci: pci-lantiq: remove duplicate check on resource
MIPS: Lasat: Add missing CONFIG_PROC_FS dependency to PICVUE_PROC
MIPS: cp1emu: Fix ISA restrictions for cop1x_op instructions
-rw-r--r-- | arch/mips/Kconfig | 1 | ||||
-rw-r--r-- | arch/mips/ath79/mach-db120.c | 2 | ||||
-rw-r--r-- | arch/mips/cavium-octeon/setup.c | 9 | ||||
-rw-r--r-- | arch/mips/include/asm/cop2.h | 8 | ||||
-rw-r--r-- | arch/mips/include/asm/ftrace.h | 4 | ||||
-rw-r--r-- | arch/mips/include/asm/idle.h | 7 | ||||
-rw-r--r-- | arch/mips/include/uapi/asm/ptrace.h | 2 | ||||
-rw-r--r-- | arch/mips/kernel/idle.c | 3 | ||||
-rw-r--r-- | arch/mips/lasat/Kconfig | 2 | ||||
-rw-r--r-- | arch/mips/loongson/lemote-2f/clock.c | 5 | ||||
-rw-r--r-- | arch/mips/math-emu/cp1emu.c | 4 | ||||
-rw-r--r-- | arch/mips/mm/tlbex.c | 6 | ||||
-rw-r--r-- | arch/mips/mti-malta/Makefile | 3 | ||||
-rw-r--r-- | arch/mips/mti-sead3/Makefile | 1 | ||||
-rw-r--r-- | arch/mips/mti-sead3/sead3-i2c.c | 8 | ||||
-rw-r--r-- | arch/mips/mti-sead3/sead3-pic32-bus.c | 102 | ||||
-rw-r--r-- | arch/mips/mti-sead3/sead3-pic32-i2c-drv.c | 423 | ||||
-rw-r--r-- | arch/mips/pci/pci-lantiq.c | 7 | ||||
-rw-r--r-- | arch/mips/pmcs-msp71xx/msp_irq.c | 1 | ||||
-rw-r--r-- | arch/mips/pmcs-msp71xx/msp_irq_cic.c | 4 | ||||
-rw-r--r-- | arch/mips/sibyte/Makefile | 1 | ||||
-rw-r--r-- | drivers/cpuidle/Kconfig.mips | 2 |
22 files changed, 30 insertions, 575 deletions
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index ad6badb6be71..f43aa536c517 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
@@ -2066,6 +2066,7 @@ config MIPS_CPS | |||
2066 | support is unavailable. | 2066 | support is unavailable. |
2067 | 2067 | ||
2068 | config MIPS_CPS_PM | 2068 | config MIPS_CPS_PM |
2069 | depends on MIPS_CPS | ||
2069 | select MIPS_CPC | 2070 | select MIPS_CPC |
2070 | bool | 2071 | bool |
2071 | 2072 | ||
diff --git a/arch/mips/ath79/mach-db120.c b/arch/mips/ath79/mach-db120.c index 4d661a1d2dae..9423f5aed287 100644 --- a/arch/mips/ath79/mach-db120.c +++ b/arch/mips/ath79/mach-db120.c | |||
@@ -113,7 +113,7 @@ static void __init db120_pci_init(u8 *eeprom) | |||
113 | ath79_register_pci(); | 113 | ath79_register_pci(); |
114 | } | 114 | } |
115 | #else | 115 | #else |
116 | static inline void db120_pci_init(void) {} | 116 | static inline void db120_pci_init(u8 *eeprom) {} |
117 | #endif /* CONFIG_PCI */ | 117 | #endif /* CONFIG_PCI */ |
118 | 118 | ||
119 | static void __init db120_setup(void) | 119 | static void __init db120_setup(void) |
diff --git a/arch/mips/cavium-octeon/setup.c b/arch/mips/cavium-octeon/setup.c index 38f4c32e2816..5ebdb32d9a2b 100644 --- a/arch/mips/cavium-octeon/setup.c +++ b/arch/mips/cavium-octeon/setup.c | |||
@@ -806,15 +806,6 @@ void __init prom_init(void) | |||
806 | #endif | 806 | #endif |
807 | } | 807 | } |
808 | 808 | ||
809 | if (octeon_is_simulation()) { | ||
810 | /* | ||
811 | * The simulator uses a mtdram device pre filled with | ||
812 | * the filesystem. Also specify the calibration delay | ||
813 | * to avoid calculating it every time. | ||
814 | */ | ||
815 | strcat(arcs_cmdline, " rw root=1f00 slram=root,0x40000000,+1073741824"); | ||
816 | } | ||
817 | |||
818 | mips_hpt_frequency = octeon_get_clock_rate(); | 809 | mips_hpt_frequency = octeon_get_clock_rate(); |
819 | 810 | ||
820 | octeon_init_cvmcount(); | 811 | octeon_init_cvmcount(); |
diff --git a/arch/mips/include/asm/cop2.h b/arch/mips/include/asm/cop2.h index 51f80bd36fcc..63b3468ede4c 100644 --- a/arch/mips/include/asm/cop2.h +++ b/arch/mips/include/asm/cop2.h | |||
@@ -37,15 +37,15 @@ extern void nlm_cop2_restore(struct nlm_cop2_state *); | |||
37 | 37 | ||
38 | #define cop2_present 1 | 38 | #define cop2_present 1 |
39 | #define cop2_lazy_restore 1 | 39 | #define cop2_lazy_restore 1 |
40 | #define cop2_save(r) do { (r); } while (0) | 40 | #define cop2_save(r) do { (void)(r); } while (0) |
41 | #define cop2_restore(r) do { (r); } while (0) | 41 | #define cop2_restore(r) do { (void)(r); } while (0) |
42 | 42 | ||
43 | #else | 43 | #else |
44 | 44 | ||
45 | #define cop2_present 0 | 45 | #define cop2_present 0 |
46 | #define cop2_lazy_restore 0 | 46 | #define cop2_lazy_restore 0 |
47 | #define cop2_save(r) do { (r); } while (0) | 47 | #define cop2_save(r) do { (void)(r); } while (0) |
48 | #define cop2_restore(r) do { (r); } while (0) | 48 | #define cop2_restore(r) do { (void)(r); } while (0) |
49 | #endif | 49 | #endif |
50 | 50 | ||
51 | enum cu2_ops { | 51 | enum cu2_ops { |
diff --git a/arch/mips/include/asm/ftrace.h b/arch/mips/include/asm/ftrace.h index 992aaba603b5..b463f2aa5a61 100644 --- a/arch/mips/include/asm/ftrace.h +++ b/arch/mips/include/asm/ftrace.h | |||
@@ -24,7 +24,7 @@ do { \ | |||
24 | asm volatile ( \ | 24 | asm volatile ( \ |
25 | "1: " load " %[tmp_dst], 0(%[tmp_src])\n" \ | 25 | "1: " load " %[tmp_dst], 0(%[tmp_src])\n" \ |
26 | " li %[tmp_err], 0\n" \ | 26 | " li %[tmp_err], 0\n" \ |
27 | "2:\n" \ | 27 | "2: .insn\n" \ |
28 | \ | 28 | \ |
29 | ".section .fixup, \"ax\"\n" \ | 29 | ".section .fixup, \"ax\"\n" \ |
30 | "3: li %[tmp_err], 1\n" \ | 30 | "3: li %[tmp_err], 1\n" \ |
@@ -46,7 +46,7 @@ do { \ | |||
46 | asm volatile ( \ | 46 | asm volatile ( \ |
47 | "1: " store " %[tmp_src], 0(%[tmp_dst])\n"\ | 47 | "1: " store " %[tmp_src], 0(%[tmp_dst])\n"\ |
48 | " li %[tmp_err], 0\n" \ | 48 | " li %[tmp_err], 0\n" \ |
49 | "2:\n" \ | 49 | "2: .insn\n" \ |
50 | \ | 50 | \ |
51 | ".section .fixup, \"ax\"\n" \ | 51 | ".section .fixup, \"ax\"\n" \ |
52 | "3: li %[tmp_err], 1\n" \ | 52 | "3: li %[tmp_err], 1\n" \ |
diff --git a/arch/mips/include/asm/idle.h b/arch/mips/include/asm/idle.h index d9f932de80e9..1c967abd545c 100644 --- a/arch/mips/include/asm/idle.h +++ b/arch/mips/include/asm/idle.h | |||
@@ -8,19 +8,12 @@ extern void (*cpu_wait)(void); | |||
8 | extern void r4k_wait(void); | 8 | extern void r4k_wait(void); |
9 | extern asmlinkage void __r4k_wait(void); | 9 | extern asmlinkage void __r4k_wait(void); |
10 | extern void r4k_wait_irqoff(void); | 10 | extern void r4k_wait_irqoff(void); |
11 | extern void __pastwait(void); | ||
12 | 11 | ||
13 | static inline int using_rollback_handler(void) | 12 | static inline int using_rollback_handler(void) |
14 | { | 13 | { |
15 | return cpu_wait == r4k_wait; | 14 | return cpu_wait == r4k_wait; |
16 | } | 15 | } |
17 | 16 | ||
18 | static inline int address_is_in_r4k_wait_irqoff(unsigned long addr) | ||
19 | { | ||
20 | return addr >= (unsigned long)r4k_wait_irqoff && | ||
21 | addr < (unsigned long)__pastwait; | ||
22 | } | ||
23 | |||
24 | extern int mips_cpuidle_wait_enter(struct cpuidle_device *dev, | 17 | extern int mips_cpuidle_wait_enter(struct cpuidle_device *dev, |
25 | struct cpuidle_driver *drv, int index); | 18 | struct cpuidle_driver *drv, int index); |
26 | 19 | ||
diff --git a/arch/mips/include/uapi/asm/ptrace.h b/arch/mips/include/uapi/asm/ptrace.h index bbcfb8ba8106..91a3d197ede3 100644 --- a/arch/mips/include/uapi/asm/ptrace.h +++ b/arch/mips/include/uapi/asm/ptrace.h | |||
@@ -9,6 +9,8 @@ | |||
9 | #ifndef _UAPI_ASM_PTRACE_H | 9 | #ifndef _UAPI_ASM_PTRACE_H |
10 | #define _UAPI_ASM_PTRACE_H | 10 | #define _UAPI_ASM_PTRACE_H |
11 | 11 | ||
12 | #include <linux/types.h> | ||
13 | |||
12 | /* 0 - 31 are integer registers, 32 - 63 are fp registers. */ | 14 | /* 0 - 31 are integer registers, 32 - 63 are fp registers. */ |
13 | #define FPR_BASE 32 | 15 | #define FPR_BASE 32 |
14 | #define PC 64 | 16 | #define PC 64 |
diff --git a/arch/mips/kernel/idle.c b/arch/mips/kernel/idle.c index 09ce45980758..0b9082b6b683 100644 --- a/arch/mips/kernel/idle.c +++ b/arch/mips/kernel/idle.c | |||
@@ -68,9 +68,6 @@ void r4k_wait_irqoff(void) | |||
68 | " wait \n" | 68 | " wait \n" |
69 | " .set pop \n"); | 69 | " .set pop \n"); |
70 | local_irq_enable(); | 70 | local_irq_enable(); |
71 | __asm__( | ||
72 | " .globl __pastwait \n" | ||
73 | "__pastwait: \n"); | ||
74 | } | 71 | } |
75 | 72 | ||
76 | /* | 73 | /* |
diff --git a/arch/mips/lasat/Kconfig b/arch/mips/lasat/Kconfig index 1d2ee8a9be13..8776d0a34274 100644 --- a/arch/mips/lasat/Kconfig +++ b/arch/mips/lasat/Kconfig | |||
@@ -4,7 +4,7 @@ config PICVUE | |||
4 | 4 | ||
5 | config PICVUE_PROC | 5 | config PICVUE_PROC |
6 | tristate "PICVUE LCD display driver /proc interface" | 6 | tristate "PICVUE LCD display driver /proc interface" |
7 | depends on PICVUE | 7 | depends on PICVUE && PROC_FS |
8 | 8 | ||
9 | config DS1603 | 9 | config DS1603 |
10 | bool "DS1603 RTC driver" | 10 | bool "DS1603 RTC driver" |
diff --git a/arch/mips/loongson/lemote-2f/clock.c b/arch/mips/loongson/lemote-2f/clock.c index a217061beee3..462e34d46b4a 100644 --- a/arch/mips/loongson/lemote-2f/clock.c +++ b/arch/mips/loongson/lemote-2f/clock.c | |||
@@ -91,6 +91,7 @@ EXPORT_SYMBOL(clk_put); | |||
91 | 91 | ||
92 | int clk_set_rate(struct clk *clk, unsigned long rate) | 92 | int clk_set_rate(struct clk *clk, unsigned long rate) |
93 | { | 93 | { |
94 | unsigned int rate_khz = rate / 1000; | ||
94 | struct cpufreq_frequency_table *pos; | 95 | struct cpufreq_frequency_table *pos; |
95 | int ret = 0; | 96 | int ret = 0; |
96 | int regval; | 97 | int regval; |
@@ -107,9 +108,9 @@ int clk_set_rate(struct clk *clk, unsigned long rate) | |||
107 | propagate_rate(clk); | 108 | propagate_rate(clk); |
108 | 109 | ||
109 | cpufreq_for_each_valid_entry(pos, loongson2_clockmod_table) | 110 | cpufreq_for_each_valid_entry(pos, loongson2_clockmod_table) |
110 | if (rate == pos->frequency) | 111 | if (rate_khz == pos->frequency) |
111 | break; | 112 | break; |
112 | if (rate != pos->frequency) | 113 | if (rate_khz != pos->frequency) |
113 | return -ENOTSUPP; | 114 | return -ENOTSUPP; |
114 | 115 | ||
115 | clk->rate = rate; | 116 | clk->rate = rate; |
diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c index 7a4727795a70..51a0fde4bec1 100644 --- a/arch/mips/math-emu/cp1emu.c +++ b/arch/mips/math-emu/cp1emu.c | |||
@@ -1023,7 +1023,7 @@ emul: | |||
1023 | goto emul; | 1023 | goto emul; |
1024 | 1024 | ||
1025 | case cop1x_op: | 1025 | case cop1x_op: |
1026 | if (cpu_has_mips_4_5 || cpu_has_mips64) | 1026 | if (cpu_has_mips_4_5 || cpu_has_mips64 || cpu_has_mips32r2) |
1027 | /* its one of ours */ | 1027 | /* its one of ours */ |
1028 | goto emul; | 1028 | goto emul; |
1029 | 1029 | ||
@@ -1068,7 +1068,7 @@ emul: | |||
1068 | break; | 1068 | break; |
1069 | 1069 | ||
1070 | case cop1x_op: | 1070 | case cop1x_op: |
1071 | if (!cpu_has_mips_4_5 && !cpu_has_mips64) | 1071 | if (!cpu_has_mips_4_5 && !cpu_has_mips64 && !cpu_has_mips32r2) |
1072 | return SIGILL; | 1072 | return SIGILL; |
1073 | 1073 | ||
1074 | sig = fpux_emu(xcp, ctx, ir, fault_addr); | 1074 | sig = fpux_emu(xcp, ctx, ir, fault_addr); |
diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c index a08dd53a1cc5..b5f228e7eae6 100644 --- a/arch/mips/mm/tlbex.c +++ b/arch/mips/mm/tlbex.c | |||
@@ -1062,6 +1062,7 @@ static void build_update_entries(u32 **p, unsigned int tmp, unsigned int ptep) | |||
1062 | struct mips_huge_tlb_info { | 1062 | struct mips_huge_tlb_info { |
1063 | int huge_pte; | 1063 | int huge_pte; |
1064 | int restore_scratch; | 1064 | int restore_scratch; |
1065 | bool need_reload_pte; | ||
1065 | }; | 1066 | }; |
1066 | 1067 | ||
1067 | static struct mips_huge_tlb_info | 1068 | static struct mips_huge_tlb_info |
@@ -1076,6 +1077,7 @@ build_fast_tlb_refill_handler (u32 **p, struct uasm_label **l, | |||
1076 | 1077 | ||
1077 | rv.huge_pte = scratch; | 1078 | rv.huge_pte = scratch; |
1078 | rv.restore_scratch = 0; | 1079 | rv.restore_scratch = 0; |
1080 | rv.need_reload_pte = false; | ||
1079 | 1081 | ||
1080 | if (check_for_high_segbits) { | 1082 | if (check_for_high_segbits) { |
1081 | UASM_i_MFC0(p, tmp, C0_BADVADDR); | 1083 | UASM_i_MFC0(p, tmp, C0_BADVADDR); |
@@ -1264,6 +1266,7 @@ static void build_r4000_tlb_refill_handler(void) | |||
1264 | } else { | 1266 | } else { |
1265 | htlb_info.huge_pte = K0; | 1267 | htlb_info.huge_pte = K0; |
1266 | htlb_info.restore_scratch = 0; | 1268 | htlb_info.restore_scratch = 0; |
1269 | htlb_info.need_reload_pte = true; | ||
1267 | vmalloc_mode = refill_noscratch; | 1270 | vmalloc_mode = refill_noscratch; |
1268 | /* | 1271 | /* |
1269 | * create the plain linear handler | 1272 | * create the plain linear handler |
@@ -1300,7 +1303,8 @@ static void build_r4000_tlb_refill_handler(void) | |||
1300 | } | 1303 | } |
1301 | #ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT | 1304 | #ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT |
1302 | uasm_l_tlb_huge_update(&l, p); | 1305 | uasm_l_tlb_huge_update(&l, p); |
1303 | UASM_i_LW(&p, K0, 0, K1); | 1306 | if (htlb_info.need_reload_pte) |
1307 | UASM_i_LW(&p, htlb_info.huge_pte, 0, K1); | ||
1304 | build_huge_update_entries(&p, htlb_info.huge_pte, K1); | 1308 | build_huge_update_entries(&p, htlb_info.huge_pte, K1); |
1305 | build_huge_tlb_write_entry(&p, &l, &r, K0, tlb_random, | 1309 | build_huge_tlb_write_entry(&p, &l, &r, K0, tlb_random, |
1306 | htlb_info.restore_scratch); | 1310 | htlb_info.restore_scratch); |
diff --git a/arch/mips/mti-malta/Makefile b/arch/mips/mti-malta/Makefile index b9510ea8db56..6510ace272d4 100644 --- a/arch/mips/mti-malta/Makefile +++ b/arch/mips/mti-malta/Makefile | |||
@@ -5,8 +5,9 @@ | |||
5 | # Copyright (C) 2008 Wind River Systems, Inc. | 5 | # Copyright (C) 2008 Wind River Systems, Inc. |
6 | # written by Ralf Baechle <ralf@linux-mips.org> | 6 | # written by Ralf Baechle <ralf@linux-mips.org> |
7 | # | 7 | # |
8 | obj-y := malta-amon.o malta-display.o malta-init.o \ | 8 | obj-y := malta-display.o malta-init.o \ |
9 | malta-int.o malta-memory.o malta-platform.o \ | 9 | malta-int.o malta-memory.o malta-platform.o \ |
10 | malta-reset.o malta-setup.o malta-time.o | 10 | malta-reset.o malta-setup.o malta-time.o |
11 | 11 | ||
12 | obj-$(CONFIG_MIPS_CMP) += malta-amon.o | ||
12 | obj-$(CONFIG_MIPS_MALTA_PM) += malta-pm.o | 13 | obj-$(CONFIG_MIPS_MALTA_PM) += malta-pm.o |
diff --git a/arch/mips/mti-sead3/Makefile b/arch/mips/mti-sead3/Makefile index febf4334545e..2ae49e99eb67 100644 --- a/arch/mips/mti-sead3/Makefile +++ b/arch/mips/mti-sead3/Makefile | |||
@@ -14,7 +14,6 @@ obj-y := sead3-lcd.o sead3-display.o sead3-init.o \ | |||
14 | sead3-setup.o sead3-time.o | 14 | sead3-setup.o sead3-time.o |
15 | 15 | ||
16 | obj-y += sead3-i2c-dev.o sead3-i2c.o \ | 16 | obj-y += sead3-i2c-dev.o sead3-i2c.o \ |
17 | sead3-pic32-i2c-drv.o sead3-pic32-bus.o \ | ||
18 | leds-sead3.o sead3-leds.o | 17 | leds-sead3.o sead3-leds.o |
19 | 18 | ||
20 | obj-$(CONFIG_EARLY_PRINTK) += sead3-console.o | 19 | obj-$(CONFIG_EARLY_PRINTK) += sead3-console.o |
diff --git a/arch/mips/mti-sead3/sead3-i2c.c b/arch/mips/mti-sead3/sead3-i2c.c index f70d5fc58ef5..795ae83894e0 100644 --- a/arch/mips/mti-sead3/sead3-i2c.c +++ b/arch/mips/mti-sead3/sead3-i2c.c | |||
@@ -5,10 +5,8 @@ | |||
5 | * | 5 | * |
6 | * Copyright (C) 2012 MIPS Technologies, Inc. All rights reserved. | 6 | * Copyright (C) 2012 MIPS Technologies, Inc. All rights reserved. |
7 | */ | 7 | */ |
8 | #include <linux/module.h> | ||
9 | #include <linux/init.h> | 8 | #include <linux/init.h> |
10 | #include <linux/platform_device.h> | 9 | #include <linux/platform_device.h> |
11 | #include <irq.h> | ||
12 | 10 | ||
13 | struct resource sead3_i2c_resources[] = { | 11 | struct resource sead3_i2c_resources[] = { |
14 | { | 12 | { |
@@ -30,8 +28,4 @@ static int __init sead3_i2c_init(void) | |||
30 | return platform_device_register(&sead3_i2c_device); | 28 | return platform_device_register(&sead3_i2c_device); |
31 | } | 29 | } |
32 | 30 | ||
33 | module_init(sead3_i2c_init); | 31 | device_initcall(sead3_i2c_init); |
34 | |||
35 | MODULE_AUTHOR("Chris Dearman <chris@mips.com>"); | ||
36 | MODULE_LICENSE("GPL"); | ||
37 | MODULE_DESCRIPTION("I2C probe driver for SEAD3"); | ||
diff --git a/arch/mips/mti-sead3/sead3-pic32-bus.c b/arch/mips/mti-sead3/sead3-pic32-bus.c deleted file mode 100644 index 3b12aa5a7c88..000000000000 --- a/arch/mips/mti-sead3/sead3-pic32-bus.c +++ /dev/null | |||
@@ -1,102 +0,0 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License. See the file "COPYING" in the main directory of this archive | ||
4 | * for more details. | ||
5 | * | ||
6 | * Copyright (C) 2012 MIPS Technologies, Inc. All rights reserved. | ||
7 | */ | ||
8 | #include <linux/delay.h> | ||
9 | #include <linux/kernel.h> | ||
10 | #include <linux/spinlock.h> | ||
11 | #include <linux/io.h> | ||
12 | #include <linux/errno.h> | ||
13 | |||
14 | #define PIC32_NULL 0x00 | ||
15 | #define PIC32_RD 0x01 | ||
16 | #define PIC32_SYSRD 0x02 | ||
17 | #define PIC32_WR 0x10 | ||
18 | #define PIC32_SYSWR 0x20 | ||
19 | #define PIC32_IRQ_CLR 0x40 | ||
20 | #define PIC32_STATUS 0x80 | ||
21 | |||
22 | #define DELAY() udelay(100) /* FIXME: needed? */ | ||
23 | |||
24 | /* spinlock to ensure atomic access to PIC32 */ | ||
25 | static DEFINE_SPINLOCK(pic32_bus_lock); | ||
26 | |||
27 | /* FIXME: io_remap these */ | ||
28 | static void __iomem *bus_xfer = (void __iomem *)0xbf000600; | ||
29 | static void __iomem *bus_status = (void __iomem *)0xbf000060; | ||
30 | |||
31 | static inline unsigned int ioready(void) | ||
32 | { | ||
33 | return readl(bus_status) & 1; | ||
34 | } | ||
35 | |||
36 | static inline void wait_ioready(void) | ||
37 | { | ||
38 | do { } while (!ioready()); | ||
39 | } | ||
40 | |||
41 | static inline void wait_ioclear(void) | ||
42 | { | ||
43 | do { } while (ioready()); | ||
44 | } | ||
45 | |||
46 | static inline void check_ioclear(void) | ||
47 | { | ||
48 | if (ioready()) { | ||
49 | pr_debug("ioclear: initially busy\n"); | ||
50 | do { | ||
51 | (void) readl(bus_xfer); | ||
52 | DELAY(); | ||
53 | } while (ioready()); | ||
54 | pr_debug("ioclear: cleared busy\n"); | ||
55 | } | ||
56 | } | ||
57 | |||
58 | u32 pic32_bus_readl(u32 reg) | ||
59 | { | ||
60 | unsigned long flags; | ||
61 | u32 status, val; | ||
62 | |||
63 | spin_lock_irqsave(&pic32_bus_lock, flags); | ||
64 | |||
65 | check_ioclear(); | ||
66 | |||
67 | writel((PIC32_RD << 24) | (reg & 0x00ffffff), bus_xfer); | ||
68 | DELAY(); | ||
69 | wait_ioready(); | ||
70 | status = readl(bus_xfer); | ||
71 | DELAY(); | ||
72 | val = readl(bus_xfer); | ||
73 | wait_ioclear(); | ||
74 | |||
75 | pr_debug("pic32_bus_readl: *%x -> %x (status=%x)\n", reg, val, status); | ||
76 | |||
77 | spin_unlock_irqrestore(&pic32_bus_lock, flags); | ||
78 | |||
79 | return val; | ||
80 | } | ||
81 | |||
82 | void pic32_bus_writel(u32 val, u32 reg) | ||
83 | { | ||
84 | unsigned long flags; | ||
85 | u32 status; | ||
86 | |||
87 | spin_lock_irqsave(&pic32_bus_lock, flags); | ||
88 | |||
89 | check_ioclear(); | ||
90 | |||
91 | writel((PIC32_WR << 24) | (reg & 0x00ffffff), bus_xfer); | ||
92 | DELAY(); | ||
93 | writel(val, bus_xfer); | ||
94 | DELAY(); | ||
95 | wait_ioready(); | ||
96 | status = readl(bus_xfer); | ||
97 | wait_ioclear(); | ||
98 | |||
99 | pr_debug("pic32_bus_writel: *%x <- %x (status=%x)\n", reg, val, status); | ||
100 | |||
101 | spin_unlock_irqrestore(&pic32_bus_lock, flags); | ||
102 | } | ||
diff --git a/arch/mips/mti-sead3/sead3-pic32-i2c-drv.c b/arch/mips/mti-sead3/sead3-pic32-i2c-drv.c deleted file mode 100644 index 80fe194cfa53..000000000000 --- a/arch/mips/mti-sead3/sead3-pic32-i2c-drv.c +++ /dev/null | |||
@@ -1,423 +0,0 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License. See the file "COPYING" in the main directory of this archive | ||
4 | * for more details. | ||
5 | * | ||
6 | * Copyright (C) 2012 MIPS Technologies, Inc. All rights reserved. | ||
7 | */ | ||
8 | #include <linux/delay.h> | ||
9 | #include <linux/kernel.h> | ||
10 | #include <linux/module.h> | ||
11 | #include <linux/spinlock.h> | ||
12 | #include <linux/platform_device.h> | ||
13 | #include <linux/init.h> | ||
14 | #include <linux/errno.h> | ||
15 | #include <linux/i2c.h> | ||
16 | #include <linux/slab.h> | ||
17 | |||
18 | #define PIC32_I2CxCON 0x0000 | ||
19 | #define PIC32_I2CxCONCLR 0x0004 | ||
20 | #define PIC32_I2CxCONSET 0x0008 | ||
21 | #define PIC32_I2CxCONINV 0x000C | ||
22 | #define I2CCON_ON (1<<15) | ||
23 | #define I2CCON_FRZ (1<<14) | ||
24 | #define I2CCON_SIDL (1<<13) | ||
25 | #define I2CCON_SCLREL (1<<12) | ||
26 | #define I2CCON_STRICT (1<<11) | ||
27 | #define I2CCON_A10M (1<<10) | ||
28 | #define I2CCON_DISSLW (1<<9) | ||
29 | #define I2CCON_SMEN (1<<8) | ||
30 | #define I2CCON_GCEN (1<<7) | ||
31 | #define I2CCON_STREN (1<<6) | ||
32 | #define I2CCON_ACKDT (1<<5) | ||
33 | #define I2CCON_ACKEN (1<<4) | ||
34 | #define I2CCON_RCEN (1<<3) | ||
35 | #define I2CCON_PEN (1<<2) | ||
36 | #define I2CCON_RSEN (1<<1) | ||
37 | #define I2CCON_SEN (1<<0) | ||
38 | |||
39 | #define PIC32_I2CxSTAT 0x0010 | ||
40 | #define PIC32_I2CxSTATCLR 0x0014 | ||
41 | #define PIC32_I2CxSTATSET 0x0018 | ||
42 | #define PIC32_I2CxSTATINV 0x001C | ||
43 | #define I2CSTAT_ACKSTAT (1<<15) | ||
44 | #define I2CSTAT_TRSTAT (1<<14) | ||
45 | #define I2CSTAT_BCL (1<<10) | ||
46 | #define I2CSTAT_GCSTAT (1<<9) | ||
47 | #define I2CSTAT_ADD10 (1<<8) | ||
48 | #define I2CSTAT_IWCOL (1<<7) | ||
49 | #define I2CSTAT_I2COV (1<<6) | ||
50 | #define I2CSTAT_DA (1<<5) | ||
51 | #define I2CSTAT_P (1<<4) | ||
52 | #define I2CSTAT_S (1<<3) | ||
53 | #define I2CSTAT_RW (1<<2) | ||
54 | #define I2CSTAT_RBF (1<<1) | ||
55 | #define I2CSTAT_TBF (1<<0) | ||
56 | |||
57 | #define PIC32_I2CxADD 0x0020 | ||
58 | #define PIC32_I2CxADDCLR 0x0024 | ||
59 | #define PIC32_I2CxADDSET 0x0028 | ||
60 | #define PIC32_I2CxADDINV 0x002C | ||
61 | #define PIC32_I2CxMSK 0x0030 | ||
62 | #define PIC32_I2CxMSKCLR 0x0034 | ||
63 | #define PIC32_I2CxMSKSET 0x0038 | ||
64 | #define PIC32_I2CxMSKINV 0x003C | ||
65 | #define PIC32_I2CxBRG 0x0040 | ||
66 | #define PIC32_I2CxBRGCLR 0x0044 | ||
67 | #define PIC32_I2CxBRGSET 0x0048 | ||
68 | #define PIC32_I2CxBRGINV 0x004C | ||
69 | #define PIC32_I2CxTRN 0x0050 | ||
70 | #define PIC32_I2CxTRNCLR 0x0054 | ||
71 | #define PIC32_I2CxTRNSET 0x0058 | ||
72 | #define PIC32_I2CxTRNINV 0x005C | ||
73 | #define PIC32_I2CxRCV 0x0060 | ||
74 | |||
75 | struct i2c_platform_data { | ||
76 | u32 base; | ||
77 | struct i2c_adapter adap; | ||
78 | u32 xfer_timeout; | ||
79 | u32 ack_timeout; | ||
80 | u32 ctl_timeout; | ||
81 | }; | ||
82 | |||
83 | extern u32 pic32_bus_readl(u32 reg); | ||
84 | extern void pic32_bus_writel(u32 val, u32 reg); | ||
85 | |||
86 | static inline void | ||
87 | StartI2C(struct i2c_platform_data *adap) | ||
88 | { | ||
89 | pr_debug("StartI2C\n"); | ||
90 | pic32_bus_writel(I2CCON_SEN, adap->base + PIC32_I2CxCONSET); | ||
91 | } | ||
92 | |||
93 | static inline void | ||
94 | StopI2C(struct i2c_platform_data *adap) | ||
95 | { | ||
96 | pr_debug("StopI2C\n"); | ||
97 | pic32_bus_writel(I2CCON_PEN, adap->base + PIC32_I2CxCONSET); | ||
98 | } | ||
99 | |||
100 | static inline void | ||
101 | AckI2C(struct i2c_platform_data *adap) | ||
102 | { | ||
103 | pr_debug("AckI2C\n"); | ||
104 | pic32_bus_writel(I2CCON_ACKDT, adap->base + PIC32_I2CxCONCLR); | ||
105 | pic32_bus_writel(I2CCON_ACKEN, adap->base + PIC32_I2CxCONSET); | ||
106 | } | ||
107 | |||
108 | static inline void | ||
109 | NotAckI2C(struct i2c_platform_data *adap) | ||
110 | { | ||
111 | pr_debug("NakI2C\n"); | ||
112 | pic32_bus_writel(I2CCON_ACKDT, adap->base + PIC32_I2CxCONSET); | ||
113 | pic32_bus_writel(I2CCON_ACKEN, adap->base + PIC32_I2CxCONSET); | ||
114 | } | ||
115 | |||
116 | static inline int | ||
117 | IdleI2C(struct i2c_platform_data *adap) | ||
118 | { | ||
119 | int i; | ||
120 | |||
121 | pr_debug("IdleI2C\n"); | ||
122 | for (i = 0; i < adap->ctl_timeout; i++) { | ||
123 | if (((pic32_bus_readl(adap->base + PIC32_I2CxCON) & | ||
124 | (I2CCON_ACKEN | I2CCON_RCEN | I2CCON_PEN | I2CCON_RSEN | | ||
125 | I2CCON_SEN)) == 0) && | ||
126 | ((pic32_bus_readl(adap->base + PIC32_I2CxSTAT) & | ||
127 | (I2CSTAT_TRSTAT)) == 0)) | ||
128 | return 0; | ||
129 | udelay(1); | ||
130 | } | ||
131 | return -ETIMEDOUT; | ||
132 | } | ||
133 | |||
134 | static inline u32 | ||
135 | MasterWriteI2C(struct i2c_platform_data *adap, u32 byte) | ||
136 | { | ||
137 | pr_debug("MasterWriteI2C\n"); | ||
138 | |||
139 | pic32_bus_writel(byte, adap->base + PIC32_I2CxTRN); | ||
140 | |||
141 | return pic32_bus_readl(adap->base + PIC32_I2CxSTAT) & I2CSTAT_IWCOL; | ||
142 | } | ||
143 | |||
144 | static inline u32 | ||
145 | MasterReadI2C(struct i2c_platform_data *adap) | ||
146 | { | ||
147 | pr_debug("MasterReadI2C\n"); | ||
148 | |||
149 | pic32_bus_writel(I2CCON_RCEN, adap->base + PIC32_I2CxCONSET); | ||
150 | |||
151 | while (pic32_bus_readl(adap->base + PIC32_I2CxCON) & I2CCON_RCEN) | ||
152 | ; | ||
153 | |||
154 | pic32_bus_writel(I2CSTAT_I2COV, adap->base + PIC32_I2CxSTATCLR); | ||
155 | |||
156 | return pic32_bus_readl(adap->base + PIC32_I2CxRCV); | ||
157 | } | ||
158 | |||
159 | static int | ||
160 | do_address(struct i2c_platform_data *adap, unsigned int addr, int rd) | ||
161 | { | ||
162 | pr_debug("doaddress\n"); | ||
163 | |||
164 | IdleI2C(adap); | ||
165 | StartI2C(adap); | ||
166 | IdleI2C(adap); | ||
167 | |||
168 | addr <<= 1; | ||
169 | if (rd) | ||
170 | addr |= 1; | ||
171 | |||
172 | if (MasterWriteI2C(adap, addr)) | ||
173 | return -EIO; | ||
174 | IdleI2C(adap); | ||
175 | if (pic32_bus_readl(adap->base + PIC32_I2CxSTAT) & I2CSTAT_ACKSTAT) | ||
176 | return -EIO; | ||
177 | return 0; | ||
178 | } | ||
179 | |||
180 | static int | ||
181 | i2c_read(struct i2c_platform_data *adap, unsigned char *buf, | ||
182 | unsigned int len) | ||
183 | { | ||
184 | int i; | ||
185 | u32 data; | ||
186 | |||
187 | pr_debug("i2c_read\n"); | ||
188 | |||
189 | i = 0; | ||
190 | while (i < len) { | ||
191 | data = MasterReadI2C(adap); | ||
192 | buf[i++] = data; | ||
193 | if (i < len) | ||
194 | AckI2C(adap); | ||
195 | else | ||
196 | NotAckI2C(adap); | ||
197 | } | ||
198 | |||
199 | StopI2C(adap); | ||
200 | IdleI2C(adap); | ||
201 | return 0; | ||
202 | } | ||
203 | |||
204 | static int | ||
205 | i2c_write(struct i2c_platform_data *adap, unsigned char *buf, | ||
206 | unsigned int len) | ||
207 | { | ||
208 | int i; | ||
209 | u32 data; | ||
210 | |||
211 | pr_debug("i2c_write\n"); | ||
212 | |||
213 | i = 0; | ||
214 | while (i < len) { | ||
215 | data = buf[i]; | ||
216 | if (MasterWriteI2C(adap, data)) | ||
217 | return -EIO; | ||
218 | IdleI2C(adap); | ||
219 | if (pic32_bus_readl(adap->base + PIC32_I2CxSTAT) & | ||
220 | I2CSTAT_ACKSTAT) | ||
221 | return -EIO; | ||
222 | i++; | ||
223 | } | ||
224 | |||
225 | StopI2C(adap); | ||
226 | IdleI2C(adap); | ||
227 | return 0; | ||
228 | } | ||
229 | |||
230 | static int | ||
231 | platform_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg *msgs, int num) | ||
232 | { | ||
233 | struct i2c_platform_data *adap = i2c_adap->algo_data; | ||
234 | struct i2c_msg *p; | ||
235 | int i, err = 0; | ||
236 | |||
237 | pr_debug("platform_xfer\n"); | ||
238 | for (i = 0; i < num; i++) { | ||
239 | #define __BUFSIZE 80 | ||
240 | int ii; | ||
241 | static char buf[__BUFSIZE]; | ||
242 | char *b = buf; | ||
243 | |||
244 | p = &msgs[i]; | ||
245 | b += sprintf(buf, " [%d bytes]", p->len); | ||
246 | if ((p->flags & I2C_M_RD) == 0) { | ||
247 | for (ii = 0; ii < p->len; ii++) { | ||
248 | if (b < &buf[__BUFSIZE-4]) { | ||
249 | b += sprintf(b, " %02x", p->buf[ii]); | ||
250 | } else { | ||
251 | strcat(b, "..."); | ||
252 | break; | ||
253 | } | ||
254 | } | ||
255 | } | ||
256 | pr_debug("xfer%d: DevAddr: %04x Op:%s Data:%s\n", i, p->addr, | ||
257 | (p->flags & I2C_M_RD) ? "Rd" : "Wr", buf); | ||
258 | } | ||
259 | |||
260 | |||
261 | for (i = 0; !err && i < num; i++) { | ||
262 | p = &msgs[i]; | ||
263 | err = do_address(adap, p->addr, p->flags & I2C_M_RD); | ||
264 | if (err || !p->len) | ||
265 | continue; | ||
266 | if (p->flags & I2C_M_RD) | ||
267 | err = i2c_read(adap, p->buf, p->len); | ||
268 | else | ||
269 | err = i2c_write(adap, p->buf, p->len); | ||
270 | } | ||
271 | |||
272 | /* Return the number of messages processed, or the error code. */ | ||
273 | if (err == 0) | ||
274 | err = num; | ||
275 | |||
276 | return err; | ||
277 | } | ||
278 | |||
279 | static u32 | ||
280 | platform_func(struct i2c_adapter *adap) | ||
281 | { | ||
282 | pr_debug("platform_algo\n"); | ||
283 | return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL; | ||
284 | } | ||
285 | |||
286 | static const struct i2c_algorithm platform_algo = { | ||
287 | .master_xfer = platform_xfer, | ||
288 | .functionality = platform_func, | ||
289 | }; | ||
290 | |||
291 | static void i2c_platform_setup(struct i2c_platform_data *priv) | ||
292 | { | ||
293 | pr_debug("i2c_platform_setup\n"); | ||
294 | |||
295 | pic32_bus_writel(500, priv->base + PIC32_I2CxBRG); | ||
296 | pic32_bus_writel(I2CCON_ON, priv->base + PIC32_I2CxCONCLR); | ||
297 | pic32_bus_writel(I2CCON_ON, priv->base + PIC32_I2CxCONSET); | ||
298 | pic32_bus_writel((I2CSTAT_BCL | I2CSTAT_IWCOL), | ||
299 | (priv->base + PIC32_I2CxSTATCLR)); | ||
300 | } | ||
301 | |||
302 | static void i2c_platform_disable(struct i2c_platform_data *priv) | ||
303 | { | ||
304 | pr_debug("i2c_platform_disable\n"); | ||
305 | } | ||
306 | |||
307 | static int i2c_platform_probe(struct platform_device *pdev) | ||
308 | { | ||
309 | struct i2c_platform_data *priv; | ||
310 | struct resource *r; | ||
311 | int ret; | ||
312 | |||
313 | pr_debug("i2c_platform_probe\n"); | ||
314 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
315 | if (!r) | ||
316 | return -ENODEV; | ||
317 | |||
318 | priv = devm_kzalloc(&pdev->dev, sizeof(struct i2c_platform_data), | ||
319 | GFP_KERNEL); | ||
320 | if (!priv) | ||
321 | return -ENOMEM; | ||
322 | |||
323 | /* FIXME: need to allocate resource in PIC32 space */ | ||
324 | #if 0 | ||
325 | priv->base = bus_request_region(r->start, resource_size(r), | ||
326 | pdev->name); | ||
327 | #else | ||
328 | priv->base = r->start; | ||
329 | #endif | ||
330 | if (!priv->base) | ||
331 | return -EBUSY; | ||
332 | |||
333 | priv->xfer_timeout = 200; | ||
334 | priv->ack_timeout = 200; | ||
335 | priv->ctl_timeout = 200; | ||
336 | |||
337 | priv->adap.nr = pdev->id; | ||
338 | priv->adap.algo = &platform_algo; | ||
339 | priv->adap.algo_data = priv; | ||
340 | priv->adap.dev.parent = &pdev->dev; | ||
341 | strlcpy(priv->adap.name, "PIC32 I2C", sizeof(priv->adap.name)); | ||
342 | |||
343 | i2c_platform_setup(priv); | ||
344 | |||
345 | ret = i2c_add_numbered_adapter(&priv->adap); | ||
346 | if (ret) { | ||
347 | i2c_platform_disable(priv); | ||
348 | return ret; | ||
349 | } | ||
350 | |||
351 | platform_set_drvdata(pdev, priv); | ||
352 | return 0; | ||
353 | } | ||
354 | |||
355 | static int i2c_platform_remove(struct platform_device *pdev) | ||
356 | { | ||
357 | struct i2c_platform_data *priv = platform_get_drvdata(pdev); | ||
358 | |||
359 | pr_debug("i2c_platform_remove\n"); | ||
360 | platform_set_drvdata(pdev, NULL); | ||
361 | i2c_del_adapter(&priv->adap); | ||
362 | i2c_platform_disable(priv); | ||
363 | return 0; | ||
364 | } | ||
365 | |||
366 | #ifdef CONFIG_PM | ||
367 | static int | ||
368 | i2c_platform_suspend(struct platform_device *pdev, pm_message_t state) | ||
369 | { | ||
370 | struct i2c_platform_data *priv = platform_get_drvdata(pdev); | ||
371 | |||
372 | dev_dbg(&pdev->dev, "i2c_platform_disable\n"); | ||
373 | i2c_platform_disable(priv); | ||
374 | |||
375 | return 0; | ||
376 | } | ||
377 | |||
378 | static int | ||
379 | i2c_platform_resume(struct platform_device *pdev) | ||
380 | { | ||
381 | struct i2c_platform_data *priv = platform_get_drvdata(pdev); | ||
382 | |||
383 | dev_dbg(&pdev->dev, "i2c_platform_setup\n"); | ||
384 | i2c_platform_setup(priv); | ||
385 | |||
386 | return 0; | ||
387 | } | ||
388 | #else | ||
389 | #define i2c_platform_suspend NULL | ||
390 | #define i2c_platform_resume NULL | ||
391 | #endif | ||
392 | |||
393 | static struct platform_driver i2c_platform_driver = { | ||
394 | .driver = { | ||
395 | .name = "i2c_pic32", | ||
396 | .owner = THIS_MODULE, | ||
397 | }, | ||
398 | .probe = i2c_platform_probe, | ||
399 | .remove = i2c_platform_remove, | ||
400 | .suspend = i2c_platform_suspend, | ||
401 | .resume = i2c_platform_resume, | ||
402 | }; | ||
403 | |||
404 | static int __init | ||
405 | i2c_platform_init(void) | ||
406 | { | ||
407 | pr_debug("i2c_platform_init\n"); | ||
408 | return platform_driver_register(&i2c_platform_driver); | ||
409 | } | ||
410 | |||
411 | static void __exit | ||
412 | i2c_platform_exit(void) | ||
413 | { | ||
414 | pr_debug("i2c_platform_exit\n"); | ||
415 | platform_driver_unregister(&i2c_platform_driver); | ||
416 | } | ||
417 | |||
418 | MODULE_AUTHOR("Chris Dearman, MIPS Technologies INC."); | ||
419 | MODULE_DESCRIPTION("PIC32 I2C driver"); | ||
420 | MODULE_LICENSE("GPL"); | ||
421 | |||
422 | module_init(i2c_platform_init); | ||
423 | module_exit(i2c_platform_exit); | ||
diff --git a/arch/mips/pci/pci-lantiq.c b/arch/mips/pci/pci-lantiq.c index 37fe8e7887e2..d3ed15b2b2d1 100644 --- a/arch/mips/pci/pci-lantiq.c +++ b/arch/mips/pci/pci-lantiq.c | |||
@@ -215,17 +215,12 @@ static int ltq_pci_probe(struct platform_device *pdev) | |||
215 | 215 | ||
216 | pci_clear_flags(PCI_PROBE_ONLY); | 216 | pci_clear_flags(PCI_PROBE_ONLY); |
217 | 217 | ||
218 | res_cfg = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
219 | res_bridge = platform_get_resource(pdev, IORESOURCE_MEM, 1); | 218 | res_bridge = platform_get_resource(pdev, IORESOURCE_MEM, 1); |
220 | if (!res_cfg || !res_bridge) { | ||
221 | dev_err(&pdev->dev, "missing memory resources\n"); | ||
222 | return -EINVAL; | ||
223 | } | ||
224 | |||
225 | ltq_pci_membase = devm_ioremap_resource(&pdev->dev, res_bridge); | 219 | ltq_pci_membase = devm_ioremap_resource(&pdev->dev, res_bridge); |
226 | if (IS_ERR(ltq_pci_membase)) | 220 | if (IS_ERR(ltq_pci_membase)) |
227 | return PTR_ERR(ltq_pci_membase); | 221 | return PTR_ERR(ltq_pci_membase); |
228 | 222 | ||
223 | res_cfg = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
229 | ltq_pci_mapped_cfg = devm_ioremap_resource(&pdev->dev, res_cfg); | 224 | ltq_pci_mapped_cfg = devm_ioremap_resource(&pdev->dev, res_cfg); |
230 | if (IS_ERR(ltq_pci_mapped_cfg)) | 225 | if (IS_ERR(ltq_pci_mapped_cfg)) |
231 | return PTR_ERR(ltq_pci_mapped_cfg); | 226 | return PTR_ERR(ltq_pci_mapped_cfg); |
diff --git a/arch/mips/pmcs-msp71xx/msp_irq.c b/arch/mips/pmcs-msp71xx/msp_irq.c index f914c753de21..8d53d7a2ed45 100644 --- a/arch/mips/pmcs-msp71xx/msp_irq.c +++ b/arch/mips/pmcs-msp71xx/msp_irq.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/time.h> | 16 | #include <linux/time.h> |
17 | 17 | ||
18 | #include <asm/irq_cpu.h> | 18 | #include <asm/irq_cpu.h> |
19 | #include <asm/setup.h> | ||
19 | 20 | ||
20 | #include <msp_int.h> | 21 | #include <msp_int.h> |
21 | 22 | ||
diff --git a/arch/mips/pmcs-msp71xx/msp_irq_cic.c b/arch/mips/pmcs-msp71xx/msp_irq_cic.c index b8df2f7b3328..1207ec4dfb77 100644 --- a/arch/mips/pmcs-msp71xx/msp_irq_cic.c +++ b/arch/mips/pmcs-msp71xx/msp_irq_cic.c | |||
@@ -131,11 +131,11 @@ static int msp_cic_irq_set_affinity(struct irq_data *d, | |||
131 | int cpu; | 131 | int cpu; |
132 | unsigned long flags; | 132 | unsigned long flags; |
133 | unsigned int mtflags; | 133 | unsigned int mtflags; |
134 | unsigned long imask = (1 << (irq - MSP_CIC_INTBASE)); | 134 | unsigned long imask = (1 << (d->irq - MSP_CIC_INTBASE)); |
135 | volatile u32 *cic_mask = (volatile u32 *)CIC_VPE0_MSK_REG; | 135 | volatile u32 *cic_mask = (volatile u32 *)CIC_VPE0_MSK_REG; |
136 | 136 | ||
137 | /* timer balancing should be disabled in kernel code */ | 137 | /* timer balancing should be disabled in kernel code */ |
138 | BUG_ON(irq == MSP_INT_VPE0_TIMER || irq == MSP_INT_VPE1_TIMER); | 138 | BUG_ON(d->irq == MSP_INT_VPE0_TIMER || d->irq == MSP_INT_VPE1_TIMER); |
139 | 139 | ||
140 | LOCK_CORE(flags, mtflags); | 140 | LOCK_CORE(flags, mtflags); |
141 | /* enable if any of each VPE's TCs require this IRQ */ | 141 | /* enable if any of each VPE's TCs require this IRQ */ |
diff --git a/arch/mips/sibyte/Makefile b/arch/mips/sibyte/Makefile index c8ed2c807e69..455c40d6d625 100644 --- a/arch/mips/sibyte/Makefile +++ b/arch/mips/sibyte/Makefile | |||
@@ -25,3 +25,4 @@ obj-$(CONFIG_SIBYTE_RHONE) += swarm/ | |||
25 | obj-$(CONFIG_SIBYTE_SENTOSA) += swarm/ | 25 | obj-$(CONFIG_SIBYTE_SENTOSA) += swarm/ |
26 | obj-$(CONFIG_SIBYTE_SWARM) += swarm/ | 26 | obj-$(CONFIG_SIBYTE_SWARM) += swarm/ |
27 | obj-$(CONFIG_SIBYTE_BIGSUR) += swarm/ | 27 | obj-$(CONFIG_SIBYTE_BIGSUR) += swarm/ |
28 | obj-$(CONFIG_SIBYTE_LITTLESUR) += swarm/ | ||
diff --git a/drivers/cpuidle/Kconfig.mips b/drivers/cpuidle/Kconfig.mips index 0e70ee28a5ca..4102be01d06a 100644 --- a/drivers/cpuidle/Kconfig.mips +++ b/drivers/cpuidle/Kconfig.mips | |||
@@ -3,7 +3,7 @@ | |||
3 | # | 3 | # |
4 | config MIPS_CPS_CPUIDLE | 4 | config MIPS_CPS_CPUIDLE |
5 | bool "CPU Idle driver for MIPS CPS platforms" | 5 | bool "CPU Idle driver for MIPS CPS platforms" |
6 | depends on CPU_IDLE | 6 | depends on CPU_IDLE && MIPS_CPS |
7 | depends on SYS_SUPPORTS_MIPS_CPS | 7 | depends on SYS_SUPPORTS_MIPS_CPS |
8 | select ARCH_NEEDS_CPU_IDLE_COUPLED if MIPS_MT | 8 | select ARCH_NEEDS_CPU_IDLE_COUPLED if MIPS_MT |
9 | select GENERIC_CLOCKEVENTS_BROADCAST if SMP | 9 | select GENERIC_CLOCKEVENTS_BROADCAST if SMP |