diff options
author | Scott Wood <scottwood@freescale.com> | 2014-04-07 23:49:35 (GMT) |
---|---|---|
committer | Scott Wood <scottwood@freescale.com> | 2014-04-07 23:49:35 (GMT) |
commit | 62b8c978ee6b8d135d9e7953221de58000dba986 (patch) | |
tree | 683b04b2e627f6710c22c151b23c8cc9a165315e /arch/m68k/platform | |
parent | 78fd82238d0e5716578c326404184a27ba67fd6e (diff) | |
download | linux-fsl-qoriq-62b8c978ee6b8d135d9e7953221de58000dba986.tar.xz |
Rewind v3.13-rc3+ (78fd82238d0e5716) to v3.12
Diffstat (limited to 'arch/m68k/platform')
-rw-r--r-- | arch/m68k/platform/68000/entry.S | 33 | ||||
-rw-r--r-- | arch/m68k/platform/68000/timers.c | 2 | ||||
-rw-r--r-- | arch/m68k/platform/68360/config.c | 2 | ||||
-rw-r--r-- | arch/m68k/platform/68360/entry.S | 24 | ||||
-rw-r--r-- | arch/m68k/platform/coldfire/pit.c | 2 | ||||
-rw-r--r-- | arch/m68k/platform/coldfire/sltimers.c | 4 | ||||
-rw-r--r-- | arch/m68k/platform/coldfire/timers.c | 4 |
7 files changed, 53 insertions, 18 deletions
diff --git a/arch/m68k/platform/68000/entry.S b/arch/m68k/platform/68000/entry.S index 23ac054..7f91c2f 100644 --- a/arch/m68k/platform/68000/entry.S +++ b/arch/m68k/platform/68000/entry.S @@ -27,6 +27,7 @@ .globl ret_from_exception .globl ret_from_signal .globl sys_call_table +.globl ret_from_interrupt .globl bad_interrupt .globl inthandler1 .globl inthandler2 @@ -136,7 +137,7 @@ inthandler1: movel #65,%sp@- /* put vector # on stack*/ jbsr process_int /* process the IRQ*/ 3: addql #8,%sp /* pop parameters off stack*/ - bra ret_from_exception + bra ret_from_interrupt inthandler2: SAVE_ALL_INT @@ -147,7 +148,7 @@ inthandler2: movel #66,%sp@- /* put vector # on stack*/ jbsr process_int /* process the IRQ*/ 3: addql #8,%sp /* pop parameters off stack*/ - bra ret_from_exception + bra ret_from_interrupt inthandler3: SAVE_ALL_INT @@ -158,7 +159,7 @@ inthandler3: movel #67,%sp@- /* put vector # on stack*/ jbsr process_int /* process the IRQ*/ 3: addql #8,%sp /* pop parameters off stack*/ - bra ret_from_exception + bra ret_from_interrupt inthandler4: SAVE_ALL_INT @@ -169,7 +170,7 @@ inthandler4: movel #68,%sp@- /* put vector # on stack*/ jbsr process_int /* process the IRQ*/ 3: addql #8,%sp /* pop parameters off stack*/ - bra ret_from_exception + bra ret_from_interrupt inthandler5: SAVE_ALL_INT @@ -180,7 +181,7 @@ inthandler5: movel #69,%sp@- /* put vector # on stack*/ jbsr process_int /* process the IRQ*/ 3: addql #8,%sp /* pop parameters off stack*/ - bra ret_from_exception + bra ret_from_interrupt inthandler6: SAVE_ALL_INT @@ -191,7 +192,7 @@ inthandler6: movel #70,%sp@- /* put vector # on stack*/ jbsr process_int /* process the IRQ*/ 3: addql #8,%sp /* pop parameters off stack*/ - bra ret_from_exception + bra ret_from_interrupt inthandler7: SAVE_ALL_INT @@ -202,7 +203,7 @@ inthandler7: movel #71,%sp@- /* put vector # on stack*/ jbsr process_int /* process the IRQ*/ 3: addql #8,%sp /* pop parameters off stack*/ - bra ret_from_exception + bra ret_from_interrupt inthandler: SAVE_ALL_INT @@ -213,7 +214,23 @@ inthandler: movel %d0,%sp@- /* put vector # on stack*/ jbsr process_int /* process the IRQ*/ 3: addql #8,%sp /* pop parameters off stack*/ - bra ret_from_exception + bra ret_from_interrupt + +ret_from_interrupt: + jeq 1f +2: + RESTORE_ALL +1: + moveb %sp@(PT_OFF_SR), %d0 + and #7, %d0 + jhi 2b + + /* check if we need to do software interrupts */ + jeq ret_from_exception + + pea ret_from_exception + jra do_softirq + /* * Handler for uninitialized and spurious interrupts. diff --git a/arch/m68k/platform/68000/timers.c b/arch/m68k/platform/68000/timers.c index 99a9869..ec30acb 100644 --- a/arch/m68k/platform/68000/timers.c +++ b/arch/m68k/platform/68000/timers.c @@ -70,7 +70,7 @@ static irqreturn_t hw_tick(int irq, void *dummy) static struct irqaction m68328_timer_irq = { .name = "timer", - .flags = IRQF_TIMER, + .flags = IRQF_DISABLED | IRQF_TIMER, .handler = hw_tick, }; diff --git a/arch/m68k/platform/68360/config.c b/arch/m68k/platform/68360/config.c index d493ac4..0570741 100644 --- a/arch/m68k/platform/68360/config.c +++ b/arch/m68k/platform/68360/config.c @@ -59,7 +59,7 @@ static irqreturn_t hw_tick(int irq, void *dummy) static struct irqaction m68360_timer_irq = { .name = "timer", - .flags = IRQF_TIMER, + .flags = IRQF_DISABLED | IRQF_TIMER, .handler = hw_tick, }; diff --git a/arch/m68k/platform/68360/entry.S b/arch/m68k/platform/68360/entry.S index 447c33e..904fd9a 100644 --- a/arch/m68k/platform/68360/entry.S +++ b/arch/m68k/platform/68360/entry.S @@ -29,6 +29,7 @@ .globl ret_from_exception .globl ret_from_signal .globl sys_call_table +.globl ret_from_interrupt .globl bad_interrupt .globl inthandler @@ -131,9 +132,26 @@ inthandler: movel %sp,%sp@- movel %d0,%sp@- /* put vector # on stack*/ - jbsr do_IRQ /* process the IRQ */ - addql #8,%sp /* pop parameters off stack*/ - jra ret_from_exception + jbsr do_IRQ /* process the IRQ*/ +3: addql #8,%sp /* pop parameters off stack*/ + bra ret_from_interrupt + +ret_from_interrupt: + jeq 1f +2: + RESTORE_ALL +1: + moveb %sp@(PT_OFF_SR), %d0 + and #7, %d0 + jhi 2b + /* check if we need to do software interrupts */ + + movel irq_stat+CPUSTAT_SOFTIRQ_PENDING,%d0 + jeq ret_from_exception + + pea ret_from_exception + jra do_softirq + /* * Handler for uninitialized and spurious interrupts. diff --git a/arch/m68k/platform/coldfire/pit.c b/arch/m68k/platform/coldfire/pit.c index 493b311..e8f3b97 100644 --- a/arch/m68k/platform/coldfire/pit.c +++ b/arch/m68k/platform/coldfire/pit.c @@ -118,7 +118,7 @@ static irqreturn_t pit_tick(int irq, void *dummy) static struct irqaction pit_irq = { .name = "timer", - .flags = IRQF_TIMER, + .flags = IRQF_DISABLED | IRQF_TIMER, .handler = pit_tick, }; diff --git a/arch/m68k/platform/coldfire/sltimers.c b/arch/m68k/platform/coldfire/sltimers.c index 831a08c..bb5a25a 100644 --- a/arch/m68k/platform/coldfire/sltimers.c +++ b/arch/m68k/platform/coldfire/sltimers.c @@ -51,7 +51,7 @@ irqreturn_t mcfslt_profile_tick(int irq, void *dummy) static struct irqaction mcfslt_profile_irq = { .name = "profile timer", - .flags = IRQF_TIMER, + .flags = IRQF_DISABLED | IRQF_TIMER, .handler = mcfslt_profile_tick, }; @@ -93,7 +93,7 @@ static irqreturn_t mcfslt_tick(int irq, void *dummy) static struct irqaction mcfslt_timer_irq = { .name = "timer", - .flags = IRQF_TIMER, + .flags = IRQF_DISABLED | IRQF_TIMER, .handler = mcfslt_tick, }; diff --git a/arch/m68k/platform/coldfire/timers.c b/arch/m68k/platform/coldfire/timers.c index cd496a2..d06068e 100644 --- a/arch/m68k/platform/coldfire/timers.c +++ b/arch/m68k/platform/coldfire/timers.c @@ -83,7 +83,7 @@ static irqreturn_t mcftmr_tick(int irq, void *dummy) static struct irqaction mcftmr_timer_irq = { .name = "timer", - .flags = IRQF_TIMER, + .flags = IRQF_DISABLED | IRQF_TIMER, .handler = mcftmr_tick, }; @@ -171,7 +171,7 @@ irqreturn_t coldfire_profile_tick(int irq, void *dummy) static struct irqaction coldfire_profile_irq = { .name = "profile timer", - .flags = IRQF_TIMER, + .flags = IRQF_DISABLED | IRQF_TIMER, .handler = coldfire_profile_tick, }; |