diff options
| -rw-r--r-- | arch/powerpc/boot/dts/p1022ds.dts | 9 | ||||
| -rw-r--r-- | arch/powerpc/configs/pseries_defconfig | 1 | ||||
| -rw-r--r-- | arch/powerpc/kernel/rtas-rtc.c | 29 | ||||
| -rw-r--r-- | arch/powerpc/kernel/signal_32.c | 57 | ||||
| -rw-r--r-- | arch/powerpc/kernel/signal_64.c | 17 | ||||
| -rw-r--r-- | arch/powerpc/kernel/traps.c | 24 | ||||
| -rw-r--r-- | arch/powerpc/mm/fault.c | 10 | ||||
| -rw-r--r-- | arch/powerpc/sysdev/fsl_rio.c | 35 | ||||
| -rw-r--r-- | arch/powerpc/sysdev/mpic.c | 11 | ||||
| -rw-r--r-- | drivers/mtd/nand/fsl_elbc_nand.c | 6 |
10 files changed, 105 insertions, 94 deletions
diff --git a/arch/powerpc/boot/dts/p1022ds.dts b/arch/powerpc/boot/dts/p1022ds.dts index 4f685a779f4c..98d9426d4b85 100644 --- a/arch/powerpc/boot/dts/p1022ds.dts +++ b/arch/powerpc/boot/dts/p1022ds.dts | |||
| @@ -209,8 +209,10 @@ | |||
| 209 | wm8776:codec@1a { | 209 | wm8776:codec@1a { |
| 210 | compatible = "wlf,wm8776"; | 210 | compatible = "wlf,wm8776"; |
| 211 | reg = <0x1a>; | 211 | reg = <0x1a>; |
| 212 | /* MCLK source is a stand-alone oscillator */ | 212 | /* |
| 213 | clock-frequency = <12288000>; | 213 | * clock-frequency will be set by U-Boot if |
| 214 | * the clock is enabled. | ||
| 215 | */ | ||
| 214 | }; | 216 | }; |
| 215 | }; | 217 | }; |
| 216 | 218 | ||
| @@ -280,7 +282,8 @@ | |||
| 280 | codec-handle = <&wm8776>; | 282 | codec-handle = <&wm8776>; |
| 281 | fsl,playback-dma = <&dma00>; | 283 | fsl,playback-dma = <&dma00>; |
| 282 | fsl,capture-dma = <&dma01>; | 284 | fsl,capture-dma = <&dma01>; |
| 283 | fsl,fifo-depth = <16>; | 285 | fsl,fifo-depth = <15>; |
| 286 | fsl,ssi-asynchronous; | ||
| 284 | }; | 287 | }; |
| 285 | 288 | ||
| 286 | dma@c300 { | 289 | dma@c300 { |
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig index c9f212b5f3de..80bc5de7ee1d 100644 --- a/arch/powerpc/configs/pseries_defconfig +++ b/arch/powerpc/configs/pseries_defconfig | |||
| @@ -148,7 +148,6 @@ CONFIG_SCSI_SAS_ATTRS=m | |||
| 148 | CONFIG_SCSI_CXGB3_ISCSI=m | 148 | CONFIG_SCSI_CXGB3_ISCSI=m |
| 149 | CONFIG_SCSI_CXGB4_ISCSI=m | 149 | CONFIG_SCSI_CXGB4_ISCSI=m |
| 150 | CONFIG_SCSI_BNX2_ISCSI=m | 150 | CONFIG_SCSI_BNX2_ISCSI=m |
| 151 | CONFIG_SCSI_BNX2_ISCSI=m | ||
| 152 | CONFIG_BE2ISCSI=m | 151 | CONFIG_BE2ISCSI=m |
| 153 | CONFIG_SCSI_IBMVSCSI=y | 152 | CONFIG_SCSI_IBMVSCSI=y |
| 154 | CONFIG_SCSI_IBMVFC=m | 153 | CONFIG_SCSI_IBMVFC=m |
diff --git a/arch/powerpc/kernel/rtas-rtc.c b/arch/powerpc/kernel/rtas-rtc.c index 77578c093dda..c57c19358a26 100644 --- a/arch/powerpc/kernel/rtas-rtc.c +++ b/arch/powerpc/kernel/rtas-rtc.c | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | #include <linux/init.h> | 4 | #include <linux/init.h> |
| 5 | #include <linux/rtc.h> | 5 | #include <linux/rtc.h> |
| 6 | #include <linux/delay.h> | 6 | #include <linux/delay.h> |
| 7 | #include <linux/ratelimit.h> | ||
| 7 | #include <asm/prom.h> | 8 | #include <asm/prom.h> |
| 8 | #include <asm/rtas.h> | 9 | #include <asm/rtas.h> |
| 9 | #include <asm/time.h> | 10 | #include <asm/time.h> |
| @@ -29,9 +30,10 @@ unsigned long __init rtas_get_boot_time(void) | |||
| 29 | } | 30 | } |
| 30 | } while (wait_time && (get_tb() < max_wait_tb)); | 31 | } while (wait_time && (get_tb() < max_wait_tb)); |
| 31 | 32 | ||
| 32 | if (error != 0 && printk_ratelimit()) { | 33 | if (error != 0) { |
| 33 | printk(KERN_WARNING "error: reading the clock failed (%d)\n", | 34 | printk_ratelimited(KERN_WARNING |
| 34 | error); | 35 | "error: reading the clock failed (%d)\n", |
| 36 | error); | ||
| 35 | return 0; | 37 | return 0; |
| 36 | } | 38 | } |
| 37 | 39 | ||
| @@ -55,19 +57,21 @@ void rtas_get_rtc_time(struct rtc_time *rtc_tm) | |||
| 55 | 57 | ||
| 56 | wait_time = rtas_busy_delay_time(error); | 58 | wait_time = rtas_busy_delay_time(error); |
| 57 | if (wait_time) { | 59 | if (wait_time) { |
| 58 | if (in_interrupt() && printk_ratelimit()) { | 60 | if (in_interrupt()) { |
| 59 | memset(rtc_tm, 0, sizeof(struct rtc_time)); | 61 | memset(rtc_tm, 0, sizeof(struct rtc_time)); |
| 60 | printk(KERN_WARNING "error: reading clock" | 62 | printk_ratelimited(KERN_WARNING |
| 61 | " would delay interrupt\n"); | 63 | "error: reading clock " |
| 64 | "would delay interrupt\n"); | ||
| 62 | return; /* delay not allowed */ | 65 | return; /* delay not allowed */ |
| 63 | } | 66 | } |
| 64 | msleep(wait_time); | 67 | msleep(wait_time); |
| 65 | } | 68 | } |
| 66 | } while (wait_time && (get_tb() < max_wait_tb)); | 69 | } while (wait_time && (get_tb() < max_wait_tb)); |
| 67 | 70 | ||
| 68 | if (error != 0 && printk_ratelimit()) { | 71 | if (error != 0) { |
| 69 | printk(KERN_WARNING "error: reading the clock failed (%d)\n", | 72 | printk_ratelimited(KERN_WARNING |
| 70 | error); | 73 | "error: reading the clock failed (%d)\n", |
| 74 | error); | ||
| 71 | return; | 75 | return; |
| 72 | } | 76 | } |
| 73 | 77 | ||
| @@ -99,9 +103,10 @@ int rtas_set_rtc_time(struct rtc_time *tm) | |||
| 99 | } | 103 | } |
| 100 | } while (wait_time && (get_tb() < max_wait_tb)); | 104 | } while (wait_time && (get_tb() < max_wait_tb)); |
| 101 | 105 | ||
| 102 | if (error != 0 && printk_ratelimit()) | 106 | if (error != 0) |
| 103 | printk(KERN_WARNING "error: setting the clock failed (%d)\n", | 107 | printk_ratelimited(KERN_WARNING |
| 104 | error); | 108 | "error: setting the clock failed (%d)\n", |
| 109 | error); | ||
| 105 | 110 | ||
| 106 | return 0; | 111 | return 0; |
| 107 | } | 112 | } |
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c index b96a3a010c26..78b76dc54dfb 100644 --- a/arch/powerpc/kernel/signal_32.c +++ b/arch/powerpc/kernel/signal_32.c | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | #include <linux/errno.h> | 25 | #include <linux/errno.h> |
| 26 | #include <linux/elf.h> | 26 | #include <linux/elf.h> |
| 27 | #include <linux/ptrace.h> | 27 | #include <linux/ptrace.h> |
| 28 | #include <linux/ratelimit.h> | ||
| 28 | #ifdef CONFIG_PPC64 | 29 | #ifdef CONFIG_PPC64 |
| 29 | #include <linux/syscalls.h> | 30 | #include <linux/syscalls.h> |
| 30 | #include <linux/compat.h> | 31 | #include <linux/compat.h> |
| @@ -892,11 +893,12 @@ badframe: | |||
| 892 | printk("badframe in handle_rt_signal, regs=%p frame=%p newsp=%lx\n", | 893 | printk("badframe in handle_rt_signal, regs=%p frame=%p newsp=%lx\n", |
| 893 | regs, frame, newsp); | 894 | regs, frame, newsp); |
| 894 | #endif | 895 | #endif |
| 895 | if (show_unhandled_signals && printk_ratelimit()) | 896 | if (show_unhandled_signals) |
| 896 | printk(KERN_INFO "%s[%d]: bad frame in handle_rt_signal32: " | 897 | printk_ratelimited(KERN_INFO |
| 897 | "%p nip %08lx lr %08lx\n", | 898 | "%s[%d]: bad frame in handle_rt_signal32: " |
| 898 | current->comm, current->pid, | 899 | "%p nip %08lx lr %08lx\n", |
| 899 | addr, regs->nip, regs->link); | 900 | current->comm, current->pid, |
| 901 | addr, regs->nip, regs->link); | ||
| 900 | 902 | ||
| 901 | force_sigsegv(sig, current); | 903 | force_sigsegv(sig, current); |
| 902 | return 0; | 904 | return 0; |
| @@ -1058,11 +1060,12 @@ long sys_rt_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8, | |||
| 1058 | return 0; | 1060 | return 0; |
| 1059 | 1061 | ||
| 1060 | bad: | 1062 | bad: |
| 1061 | if (show_unhandled_signals && printk_ratelimit()) | 1063 | if (show_unhandled_signals) |
| 1062 | printk(KERN_INFO "%s[%d]: bad frame in sys_rt_sigreturn: " | 1064 | printk_ratelimited(KERN_INFO |
| 1063 | "%p nip %08lx lr %08lx\n", | 1065 | "%s[%d]: bad frame in sys_rt_sigreturn: " |
| 1064 | current->comm, current->pid, | 1066 | "%p nip %08lx lr %08lx\n", |
| 1065 | rt_sf, regs->nip, regs->link); | 1067 | current->comm, current->pid, |
| 1068 | rt_sf, regs->nip, regs->link); | ||
| 1066 | 1069 | ||
| 1067 | force_sig(SIGSEGV, current); | 1070 | force_sig(SIGSEGV, current); |
| 1068 | return 0; | 1071 | return 0; |
| @@ -1149,12 +1152,12 @@ int sys_debug_setcontext(struct ucontext __user *ctx, | |||
| 1149 | * We kill the task with a SIGSEGV in this situation. | 1152 | * We kill the task with a SIGSEGV in this situation. |
| 1150 | */ | 1153 | */ |
| 1151 | if (do_setcontext(ctx, regs, 1)) { | 1154 | if (do_setcontext(ctx, regs, 1)) { |
| 1152 | if (show_unhandled_signals && printk_ratelimit()) | 1155 | if (show_unhandled_signals) |
| 1153 | printk(KERN_INFO "%s[%d]: bad frame in " | 1156 | printk_ratelimited(KERN_INFO "%s[%d]: bad frame in " |
| 1154 | "sys_debug_setcontext: %p nip %08lx " | 1157 | "sys_debug_setcontext: %p nip %08lx " |
| 1155 | "lr %08lx\n", | 1158 | "lr %08lx\n", |
| 1156 | current->comm, current->pid, | 1159 | current->comm, current->pid, |
| 1157 | ctx, regs->nip, regs->link); | 1160 | ctx, regs->nip, regs->link); |
| 1158 | 1161 | ||
| 1159 | force_sig(SIGSEGV, current); | 1162 | force_sig(SIGSEGV, current); |
| 1160 | goto out; | 1163 | goto out; |
| @@ -1236,11 +1239,12 @@ badframe: | |||
| 1236 | printk("badframe in handle_signal, regs=%p frame=%p newsp=%lx\n", | 1239 | printk("badframe in handle_signal, regs=%p frame=%p newsp=%lx\n", |
| 1237 | regs, frame, newsp); | 1240 | regs, frame, newsp); |
| 1238 | #endif | 1241 | #endif |
| 1239 | if (show_unhandled_signals && printk_ratelimit()) | 1242 | if (show_unhandled_signals) |
| 1240 | printk(KERN_INFO "%s[%d]: bad frame in handle_signal32: " | 1243 | printk_ratelimited(KERN_INFO |
| 1241 | "%p nip %08lx lr %08lx\n", | 1244 | "%s[%d]: bad frame in handle_signal32: " |
| 1242 | current->comm, current->pid, | 1245 | "%p nip %08lx lr %08lx\n", |
| 1243 | frame, regs->nip, regs->link); | 1246 | current->comm, current->pid, |
| 1247 | frame, regs->nip, regs->link); | ||
| 1244 | 1248 | ||
| 1245 | force_sigsegv(sig, current); | 1249 | force_sigsegv(sig, current); |
| 1246 | return 0; | 1250 | return 0; |
| @@ -1288,11 +1292,12 @@ long sys_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8, | |||
| 1288 | return 0; | 1292 | return 0; |
| 1289 | 1293 | ||
| 1290 | badframe: | 1294 | badframe: |
| 1291 | if (show_unhandled_signals && printk_ratelimit()) | 1295 | if (show_unhandled_signals) |
| 1292 | printk(KERN_INFO "%s[%d]: bad frame in sys_sigreturn: " | 1296 | printk_ratelimited(KERN_INFO |
| 1293 | "%p nip %08lx lr %08lx\n", | 1297 | "%s[%d]: bad frame in sys_sigreturn: " |
| 1294 | current->comm, current->pid, | 1298 | "%p nip %08lx lr %08lx\n", |
| 1295 | addr, regs->nip, regs->link); | 1299 | current->comm, current->pid, |
| 1300 | addr, regs->nip, regs->link); | ||
| 1296 | 1301 | ||
| 1297 | force_sig(SIGSEGV, current); | 1302 | force_sig(SIGSEGV, current); |
| 1298 | return 0; | 1303 | return 0; |
diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c index da989fff19cc..e91c736cc842 100644 --- a/arch/powerpc/kernel/signal_64.c +++ b/arch/powerpc/kernel/signal_64.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include <linux/elf.h> | 24 | #include <linux/elf.h> |
| 25 | #include <linux/ptrace.h> | 25 | #include <linux/ptrace.h> |
| 26 | #include <linux/module.h> | 26 | #include <linux/module.h> |
| 27 | #include <linux/ratelimit.h> | ||
| 27 | 28 | ||
| 28 | #include <asm/sigcontext.h> | 29 | #include <asm/sigcontext.h> |
| 29 | #include <asm/ucontext.h> | 30 | #include <asm/ucontext.h> |
| @@ -380,10 +381,10 @@ badframe: | |||
| 380 | printk("badframe in sys_rt_sigreturn, regs=%p uc=%p &uc->uc_mcontext=%p\n", | 381 | printk("badframe in sys_rt_sigreturn, regs=%p uc=%p &uc->uc_mcontext=%p\n", |
| 381 | regs, uc, &uc->uc_mcontext); | 382 | regs, uc, &uc->uc_mcontext); |
| 382 | #endif | 383 | #endif |
| 383 | if (show_unhandled_signals && printk_ratelimit()) | 384 | if (show_unhandled_signals) |
| 384 | printk(regs->msr & MSR_64BIT ? fmt64 : fmt32, | 385 | printk_ratelimited(regs->msr & MSR_64BIT ? fmt64 : fmt32, |
| 385 | current->comm, current->pid, "rt_sigreturn", | 386 | current->comm, current->pid, "rt_sigreturn", |
| 386 | (long)uc, regs->nip, regs->link); | 387 | (long)uc, regs->nip, regs->link); |
| 387 | 388 | ||
| 388 | force_sig(SIGSEGV, current); | 389 | force_sig(SIGSEGV, current); |
| 389 | return 0; | 390 | return 0; |
| @@ -468,10 +469,10 @@ badframe: | |||
| 468 | printk("badframe in setup_rt_frame, regs=%p frame=%p newsp=%lx\n", | 469 | printk("badframe in setup_rt_frame, regs=%p frame=%p newsp=%lx\n", |
| 469 | regs, frame, newsp); | 470 | regs, frame, newsp); |
| 470 | #endif | 471 | #endif |
| 471 | if (show_unhandled_signals && printk_ratelimit()) | 472 | if (show_unhandled_signals) |
| 472 | printk(regs->msr & MSR_64BIT ? fmt64 : fmt32, | 473 | printk_ratelimited(regs->msr & MSR_64BIT ? fmt64 : fmt32, |
| 473 | current->comm, current->pid, "setup_rt_frame", | 474 | current->comm, current->pid, "setup_rt_frame", |
| 474 | (long)frame, regs->nip, regs->link); | 475 | (long)frame, regs->nip, regs->link); |
| 475 | 476 | ||
| 476 | force_sigsegv(signr, current); | 477 | force_sigsegv(signr, current); |
| 477 | return 0; | 478 | return 0; |
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 0ff4ab98d50c..1a0141426cda 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
| @@ -34,6 +34,7 @@ | |||
| 34 | #include <linux/bug.h> | 34 | #include <linux/bug.h> |
| 35 | #include <linux/kdebug.h> | 35 | #include <linux/kdebug.h> |
| 36 | #include <linux/debugfs.h> | 36 | #include <linux/debugfs.h> |
| 37 | #include <linux/ratelimit.h> | ||
| 37 | 38 | ||
| 38 | #include <asm/emulated_ops.h> | 39 | #include <asm/emulated_ops.h> |
| 39 | #include <asm/pgtable.h> | 40 | #include <asm/pgtable.h> |
| @@ -197,12 +198,11 @@ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr) | |||
| 197 | if (die("Exception in kernel mode", regs, signr)) | 198 | if (die("Exception in kernel mode", regs, signr)) |
| 198 | return; | 199 | return; |
| 199 | } else if (show_unhandled_signals && | 200 | } else if (show_unhandled_signals && |
| 200 | unhandled_signal(current, signr) && | 201 | unhandled_signal(current, signr)) { |
| 201 | printk_ratelimit()) { | 202 | printk_ratelimited(regs->msr & MSR_64BIT ? fmt64 : fmt32, |
| 202 | printk(regs->msr & MSR_64BIT ? fmt64 : fmt32, | 203 | current->comm, current->pid, signr, |
| 203 | current->comm, current->pid, signr, | 204 | addr, regs->nip, regs->link, code); |
| 204 | addr, regs->nip, regs->link, code); | 205 | } |
| 205 | } | ||
| 206 | 206 | ||
| 207 | memset(&info, 0, sizeof(info)); | 207 | memset(&info, 0, sizeof(info)); |
| 208 | info.si_signo = signr; | 208 | info.si_signo = signr; |
| @@ -425,7 +425,7 @@ int machine_check_e500mc(struct pt_regs *regs) | |||
| 425 | unsigned long reason = mcsr; | 425 | unsigned long reason = mcsr; |
| 426 | int recoverable = 1; | 426 | int recoverable = 1; |
| 427 | 427 | ||
| 428 | if (reason & MCSR_BUS_RBERR) { | 428 | if (reason & MCSR_LD) { |
| 429 | recoverable = fsl_rio_mcheck_exception(regs); | 429 | recoverable = fsl_rio_mcheck_exception(regs); |
| 430 | if (recoverable == 1) | 430 | if (recoverable == 1) |
| 431 | goto silent_out; | 431 | goto silent_out; |
| @@ -1342,9 +1342,8 @@ void altivec_assist_exception(struct pt_regs *regs) | |||
| 1342 | } else { | 1342 | } else { |
| 1343 | /* didn't recognize the instruction */ | 1343 | /* didn't recognize the instruction */ |
| 1344 | /* XXX quick hack for now: set the non-Java bit in the VSCR */ | 1344 | /* XXX quick hack for now: set the non-Java bit in the VSCR */ |
| 1345 | if (printk_ratelimit()) | 1345 | printk_ratelimited(KERN_ERR "Unrecognized altivec instruction " |
| 1346 | printk(KERN_ERR "Unrecognized altivec instruction " | 1346 | "in %s at %lx\n", current->comm, regs->nip); |
| 1347 | "in %s at %lx\n", current->comm, regs->nip); | ||
| 1348 | current->thread.vscr.u[3] |= 0x10000; | 1347 | current->thread.vscr.u[3] |= 0x10000; |
| 1349 | } | 1348 | } |
| 1350 | } | 1349 | } |
| @@ -1548,9 +1547,8 @@ u32 ppc_warn_emulated; | |||
| 1548 | 1547 | ||
| 1549 | void ppc_warn_emulated_print(const char *type) | 1548 | void ppc_warn_emulated_print(const char *type) |
| 1550 | { | 1549 | { |
| 1551 | if (printk_ratelimit()) | 1550 | pr_warn_ratelimited("%s used emulated %s instruction\n", current->comm, |
| 1552 | pr_warning("%s used emulated %s instruction\n", current->comm, | 1551 | type); |
| 1553 | type); | ||
| 1554 | } | 1552 | } |
| 1555 | 1553 | ||
| 1556 | static int __init ppc_warn_emulated_init(void) | 1554 | static int __init ppc_warn_emulated_init(void) |
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c index 54f4fb994e99..ad35f66c69e8 100644 --- a/arch/powerpc/mm/fault.c +++ b/arch/powerpc/mm/fault.c | |||
| @@ -31,6 +31,7 @@ | |||
| 31 | #include <linux/kdebug.h> | 31 | #include <linux/kdebug.h> |
| 32 | #include <linux/perf_event.h> | 32 | #include <linux/perf_event.h> |
| 33 | #include <linux/magic.h> | 33 | #include <linux/magic.h> |
| 34 | #include <linux/ratelimit.h> | ||
| 34 | 35 | ||
| 35 | #include <asm/firmware.h> | 36 | #include <asm/firmware.h> |
| 36 | #include <asm/page.h> | 37 | #include <asm/page.h> |
| @@ -346,11 +347,10 @@ bad_area_nosemaphore: | |||
| 346 | return 0; | 347 | return 0; |
| 347 | } | 348 | } |
| 348 | 349 | ||
| 349 | if (is_exec && (error_code & DSISR_PROTFAULT) | 350 | if (is_exec && (error_code & DSISR_PROTFAULT)) |
| 350 | && printk_ratelimit()) | 351 | printk_ratelimited(KERN_CRIT "kernel tried to execute NX-protected" |
| 351 | printk(KERN_CRIT "kernel tried to execute NX-protected" | 352 | " page (%lx) - exploit attempt? (uid: %d)\n", |
| 352 | " page (%lx) - exploit attempt? (uid: %d)\n", | 353 | address, current_uid()); |
| 353 | address, current_uid()); | ||
| 354 | 354 | ||
| 355 | return SIGSEGV; | 355 | return SIGSEGV; |
| 356 | 356 | ||
diff --git a/arch/powerpc/sysdev/fsl_rio.c b/arch/powerpc/sysdev/fsl_rio.c index 5b206a2fe17c..b3fd081d56f5 100644 --- a/arch/powerpc/sysdev/fsl_rio.c +++ b/arch/powerpc/sysdev/fsl_rio.c | |||
| @@ -283,23 +283,24 @@ static void __iomem *rio_regs_win; | |||
| 283 | #ifdef CONFIG_E500 | 283 | #ifdef CONFIG_E500 |
| 284 | int fsl_rio_mcheck_exception(struct pt_regs *regs) | 284 | int fsl_rio_mcheck_exception(struct pt_regs *regs) |
| 285 | { | 285 | { |
| 286 | const struct exception_table_entry *entry = NULL; | 286 | const struct exception_table_entry *entry; |
| 287 | unsigned long reason = mfspr(SPRN_MCSR); | 287 | unsigned long reason; |
| 288 | 288 | ||
| 289 | if (reason & MCSR_BUS_RBERR) { | 289 | if (!rio_regs_win) |
| 290 | reason = in_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR)); | 290 | return 0; |
| 291 | if (reason & (RIO_LTLEDCSR_IER | RIO_LTLEDCSR_PRT)) { | 291 | |
| 292 | /* Check if we are prepared to handle this fault */ | 292 | reason = in_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR)); |
| 293 | entry = search_exception_tables(regs->nip); | 293 | if (reason & (RIO_LTLEDCSR_IER | RIO_LTLEDCSR_PRT)) { |
| 294 | if (entry) { | 294 | /* Check if we are prepared to handle this fault */ |
| 295 | pr_debug("RIO: %s - MC Exception handled\n", | 295 | entry = search_exception_tables(regs->nip); |
| 296 | __func__); | 296 | if (entry) { |
| 297 | out_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR), | 297 | pr_debug("RIO: %s - MC Exception handled\n", |
| 298 | 0); | 298 | __func__); |
| 299 | regs->msr |= MSR_RI; | 299 | out_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR), |
| 300 | regs->nip = entry->fixup; | 300 | 0); |
| 301 | return 1; | 301 | regs->msr |= MSR_RI; |
| 302 | } | 302 | regs->nip = entry->fixup; |
| 303 | return 1; | ||
| 303 | } | 304 | } |
| 304 | } | 305 | } |
| 305 | 306 | ||
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index 3a8de5bb628a..58d7a534f877 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <linux/pci.h> | 29 | #include <linux/pci.h> |
| 30 | #include <linux/slab.h> | 30 | #include <linux/slab.h> |
| 31 | #include <linux/syscore_ops.h> | 31 | #include <linux/syscore_ops.h> |
| 32 | #include <linux/ratelimit.h> | ||
| 32 | 33 | ||
| 33 | #include <asm/ptrace.h> | 34 | #include <asm/ptrace.h> |
| 34 | #include <asm/signal.h> | 35 | #include <asm/signal.h> |
| @@ -1648,9 +1649,8 @@ static unsigned int _mpic_get_one_irq(struct mpic *mpic, int reg) | |||
| 1648 | return NO_IRQ; | 1649 | return NO_IRQ; |
| 1649 | } | 1650 | } |
| 1650 | if (unlikely(mpic->protected && test_bit(src, mpic->protected))) { | 1651 | if (unlikely(mpic->protected && test_bit(src, mpic->protected))) { |
| 1651 | if (printk_ratelimit()) | 1652 | printk_ratelimited(KERN_WARNING "%s: Got protected source %d !\n", |
| 1652 | printk(KERN_WARNING "%s: Got protected source %d !\n", | 1653 | mpic->name, (int)src); |
| 1653 | mpic->name, (int)src); | ||
| 1654 | mpic_eoi(mpic); | 1654 | mpic_eoi(mpic); |
| 1655 | return NO_IRQ; | 1655 | return NO_IRQ; |
| 1656 | } | 1656 | } |
| @@ -1688,9 +1688,8 @@ unsigned int mpic_get_coreint_irq(void) | |||
| 1688 | return NO_IRQ; | 1688 | return NO_IRQ; |
| 1689 | } | 1689 | } |
| 1690 | if (unlikely(mpic->protected && test_bit(src, mpic->protected))) { | 1690 | if (unlikely(mpic->protected && test_bit(src, mpic->protected))) { |
| 1691 | if (printk_ratelimit()) | 1691 | printk_ratelimited(KERN_WARNING "%s: Got protected source %d !\n", |
| 1692 | printk(KERN_WARNING "%s: Got protected source %d !\n", | 1692 | mpic->name, (int)src); |
| 1693 | mpic->name, (int)src); | ||
| 1694 | return NO_IRQ; | 1693 | return NO_IRQ; |
| 1695 | } | 1694 | } |
| 1696 | 1695 | ||
diff --git a/drivers/mtd/nand/fsl_elbc_nand.c b/drivers/mtd/nand/fsl_elbc_nand.c index 0bb254c7d2b1..33d8aad8bba5 100644 --- a/drivers/mtd/nand/fsl_elbc_nand.c +++ b/drivers/mtd/nand/fsl_elbc_nand.c | |||
| @@ -339,9 +339,9 @@ static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command, | |||
| 339 | (FIR_OP_UA << FIR_OP1_SHIFT) | | 339 | (FIR_OP_UA << FIR_OP1_SHIFT) | |
| 340 | (FIR_OP_RBW << FIR_OP2_SHIFT)); | 340 | (FIR_OP_RBW << FIR_OP2_SHIFT)); |
| 341 | out_be32(&lbc->fcr, NAND_CMD_READID << FCR_CMD0_SHIFT); | 341 | out_be32(&lbc->fcr, NAND_CMD_READID << FCR_CMD0_SHIFT); |
| 342 | /* 5 bytes for manuf, device and exts */ | 342 | /* nand_get_flash_type() reads 8 bytes of entire ID string */ |
| 343 | out_be32(&lbc->fbcr, 5); | 343 | out_be32(&lbc->fbcr, 8); |
| 344 | elbc_fcm_ctrl->read_bytes = 5; | 344 | elbc_fcm_ctrl->read_bytes = 8; |
| 345 | elbc_fcm_ctrl->use_mdr = 1; | 345 | elbc_fcm_ctrl->use_mdr = 1; |
| 346 | elbc_fcm_ctrl->mdr = 0; | 346 | elbc_fcm_ctrl->mdr = 0; |
| 347 | 347 | ||
