diff options
| author | Atsushi Nemoto <anemo@mba.ocn.ne.jp> | 2007-08-02 10:36:02 -0400 |
|---|---|---|
| committer | Ralf Baechle <ralf@linux-mips.org> | 2007-08-26 21:16:53 -0400 |
| commit | c87abd75b35e8f991ff8ff1510d6fb62612c61fa (patch) | |
| tree | de68c4446c35337c47c17253d769bfeee92f80b3 /arch/mips | |
| parent | 8420fd00e88ef4f6082866aa151bc753b006b3b6 (diff) | |
[MIPS] Cleanup TX39/TX49 irq code
Cleanup jmr3927, tx4927 and tx4938 irq codes, using common IRQ_CPU,
I8259 and IRQ_TXX9 irq routines.
Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips')
| -rw-r--r-- | arch/mips/Kconfig | 8 | ||||
| -rw-r--r-- | arch/mips/jmr3927/rbhma3100/irq.c | 48 | ||||
| -rw-r--r-- | arch/mips/jmr3927/rbhma3100/setup.c | 13 | ||||
| -rw-r--r-- | arch/mips/tx4927/common/tx4927_irq.c | 395 | ||||
| -rw-r--r-- | arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c | 171 | ||||
| -rw-r--r-- | arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c | 11 | ||||
| -rw-r--r-- | arch/mips/tx4938/common/irq.c | 279 | ||||
| -rw-r--r-- | arch/mips/tx4938/toshiba_rbtx4938/irq.c | 2 | ||||
| -rw-r--r-- | arch/mips/tx4938/toshiba_rbtx4938/setup.c | 9 |
9 files changed, 41 insertions, 895 deletions
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index cec0d8411269..4b02d8acc15b 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
| @@ -528,6 +528,7 @@ config TOSHIBA_JMR3927 | |||
| 528 | select DMA_NONCOHERENT | 528 | select DMA_NONCOHERENT |
| 529 | select HW_HAS_PCI | 529 | select HW_HAS_PCI |
| 530 | select MIPS_TX3927 | 530 | select MIPS_TX3927 |
| 531 | select IRQ_TXX9 | ||
| 531 | select SWAP_IO_SPACE | 532 | select SWAP_IO_SPACE |
| 532 | select SYS_HAS_CPU_TX39XX | 533 | select SYS_HAS_CPU_TX39XX |
| 533 | select SYS_SUPPORTS_32BIT_KERNEL | 534 | select SYS_SUPPORTS_32BIT_KERNEL |
| @@ -540,7 +541,9 @@ config TOSHIBA_RBTX4927 | |||
| 540 | select DMA_NONCOHERENT | 541 | select DMA_NONCOHERENT |
| 541 | select HAS_TXX9_SERIAL | 542 | select HAS_TXX9_SERIAL |
| 542 | select HW_HAS_PCI | 543 | select HW_HAS_PCI |
| 543 | select I8259 | 544 | select IRQ_CPU |
| 545 | select IRQ_TXX9 | ||
| 546 | select I8259 if TOSHIBA_FPCIB0 | ||
| 544 | select SWAP_IO_SPACE | 547 | select SWAP_IO_SPACE |
| 545 | select SYS_HAS_CPU_TX49XX | 548 | select SYS_HAS_CPU_TX49XX |
| 546 | select SYS_SUPPORTS_32BIT_KERNEL | 549 | select SYS_SUPPORTS_32BIT_KERNEL |
| @@ -560,7 +563,8 @@ config TOSHIBA_RBTX4938 | |||
| 560 | select GENERIC_ISA_DMA | 563 | select GENERIC_ISA_DMA |
| 561 | select HAS_TXX9_SERIAL | 564 | select HAS_TXX9_SERIAL |
| 562 | select HW_HAS_PCI | 565 | select HW_HAS_PCI |
| 563 | select I8259 | 566 | select IRQ_CPU |
| 567 | select IRQ_TXX9 | ||
| 564 | select SWAP_IO_SPACE | 568 | select SWAP_IO_SPACE |
| 565 | select SYS_HAS_CPU_TX49XX | 569 | select SYS_HAS_CPU_TX49XX |
| 566 | select SYS_SUPPORTS_32BIT_KERNEL | 570 | select SYS_SUPPORTS_32BIT_KERNEL |
diff --git a/arch/mips/jmr3927/rbhma3100/irq.c b/arch/mips/jmr3927/rbhma3100/irq.c index 1187b44a3dd4..d9efe692e551 100644 --- a/arch/mips/jmr3927/rbhma3100/irq.c +++ b/arch/mips/jmr3927/rbhma3100/irq.c | |||
| @@ -45,9 +45,6 @@ | |||
| 45 | #error JMR3927_IRQ_END > NR_IRQS | 45 | #error JMR3927_IRQ_END > NR_IRQS |
| 46 | #endif | 46 | #endif |
| 47 | 47 | ||
| 48 | #define irc_dlevel 0 | ||
| 49 | #define irc_elevel 1 | ||
| 50 | |||
| 51 | static unsigned char irc_level[TX3927_NUM_IR] = { | 48 | static unsigned char irc_level[TX3927_NUM_IR] = { |
| 52 | 5, 5, 5, 5, 5, 5, /* INT[5:0] */ | 49 | 5, 5, 5, 5, 5, 5, /* INT[5:0] */ |
| 53 | 7, 7, /* SIO */ | 50 | 7, 7, /* SIO */ |
| @@ -80,34 +77,6 @@ static void unmask_irq_ioc(unsigned int irq) | |||
| 80 | (void)jmr3927_ioc_reg_in(JMR3927_IOC_REV_ADDR); | 77 | (void)jmr3927_ioc_reg_in(JMR3927_IOC_REV_ADDR); |
| 81 | } | 78 | } |
| 82 | 79 | ||
| 83 | static void mask_irq_irc(unsigned int irq) | ||
| 84 | { | ||
| 85 | unsigned int irq_nr = irq - JMR3927_IRQ_IRC; | ||
| 86 | volatile unsigned long *ilrp = &tx3927_ircptr->ilr[irq_nr / 2]; | ||
| 87 | if (irq_nr & 1) | ||
| 88 | *ilrp = (*ilrp & 0x00ff) | (irc_dlevel << 8); | ||
| 89 | else | ||
| 90 | *ilrp = (*ilrp & 0xff00) | irc_dlevel; | ||
| 91 | /* update IRCSR */ | ||
| 92 | tx3927_ircptr->imr = 0; | ||
| 93 | tx3927_ircptr->imr = irc_elevel; | ||
| 94 | /* flush write buffer */ | ||
| 95 | (void)tx3927_ircptr->ssr; | ||
| 96 | } | ||
| 97 | |||
| 98 | static void unmask_irq_irc(unsigned int irq) | ||
| 99 | { | ||
| 100 | unsigned int irq_nr = irq - JMR3927_IRQ_IRC; | ||
| 101 | volatile unsigned long *ilrp = &tx3927_ircptr->ilr[irq_nr / 2]; | ||
| 102 | if (irq_nr & 1) | ||
| 103 | *ilrp = (*ilrp & 0x00ff) | (irc_level[irq_nr] << 8); | ||
| 104 | else | ||
| 105 | *ilrp = (*ilrp & 0xff00) | irc_level[irq_nr]; | ||
| 106 | /* update IRCSR */ | ||
| 107 | tx3927_ircptr->imr = 0; | ||
| 108 | tx3927_ircptr->imr = irc_elevel; | ||
| 109 | } | ||
| 110 | |||
| 111 | asmlinkage void plat_irq_dispatch(void) | 80 | asmlinkage void plat_irq_dispatch(void) |
| 112 | { | 81 | { |
| 113 | unsigned long cp0_cause = read_c0_cause(); | 82 | unsigned long cp0_cause = read_c0_cause(); |
| @@ -168,10 +137,6 @@ void __init arch_init_irq(void) | |||
| 168 | /* clear PCI Reset interrupts */ | 137 | /* clear PCI Reset interrupts */ |
| 169 | jmr3927_ioc_reg_out(0, JMR3927_IOC_RESET_ADDR); | 138 | jmr3927_ioc_reg_out(0, JMR3927_IOC_RESET_ADDR); |
| 170 | 139 | ||
| 171 | /* enable interrupt control */ | ||
| 172 | tx3927_ircptr->cer = TX3927_IRCER_ICE; | ||
| 173 | tx3927_ircptr->imr = irc_elevel; | ||
| 174 | |||
| 175 | jmr3927_irq_init(); | 140 | jmr3927_irq_init(); |
| 176 | 141 | ||
| 177 | /* setup IOC interrupt 1 (PCI, MODEM) */ | 142 | /* setup IOC interrupt 1 (PCI, MODEM) */ |
| @@ -193,20 +158,13 @@ static struct irq_chip jmr3927_irq_ioc = { | |||
| 193 | .unmask = unmask_irq_ioc, | 158 | .unmask = unmask_irq_ioc, |
| 194 | }; | 159 | }; |
| 195 | 160 | ||
| 196 | static struct irq_chip jmr3927_irq_irc = { | ||
| 197 | .name = "jmr3927_irc", | ||
| 198 | .ack = mask_irq_irc, | ||
| 199 | .mask = mask_irq_irc, | ||
| 200 | .mask_ack = mask_irq_irc, | ||
| 201 | .unmask = unmask_irq_irc, | ||
| 202 | }; | ||
| 203 | |||
| 204 | static void __init jmr3927_irq_init(void) | 161 | static void __init jmr3927_irq_init(void) |
| 205 | { | 162 | { |
| 206 | u32 i; | 163 | u32 i; |
| 207 | 164 | ||
| 208 | for (i = JMR3927_IRQ_IRC; i < JMR3927_IRQ_IRC + JMR3927_NR_IRQ_IRC; i++) | 165 | txx9_irq_init(TX3927_IRC_REG); |
| 209 | set_irq_chip_and_handler(i, &jmr3927_irq_irc, handle_level_irq); | 166 | for (i = 0; i < TXx9_MAX_IR; i++) |
| 167 | txx9_irq_set_pri(i, irc_level[i]); | ||
| 210 | for (i = JMR3927_IRQ_IOC; i < JMR3927_IRQ_IOC + JMR3927_NR_IRQ_IOC; i++) | 168 | for (i = JMR3927_IRQ_IOC; i < JMR3927_IRQ_IOC + JMR3927_NR_IRQ_IOC; i++) |
| 211 | set_irq_chip_and_handler(i, &jmr3927_irq_ioc, handle_level_irq); | 169 | set_irq_chip_and_handler(i, &jmr3927_irq_ioc, handle_level_irq); |
| 212 | } | 170 | } |
diff --git a/arch/mips/jmr3927/rbhma3100/setup.c b/arch/mips/jmr3927/rbhma3100/setup.c index 8303001516d2..fde56e86c2ab 100644 --- a/arch/mips/jmr3927/rbhma3100/setup.c +++ b/arch/mips/jmr3927/rbhma3100/setup.c | |||
| @@ -290,19 +290,6 @@ static void __init tx3927_setup(void) | |||
| 290 | tx3927_ccfgptr->crir, | 290 | tx3927_ccfgptr->crir, |
| 291 | tx3927_ccfgptr->ccfg, tx3927_ccfgptr->pcfg); | 291 | tx3927_ccfgptr->ccfg, tx3927_ccfgptr->pcfg); |
| 292 | 292 | ||
| 293 | /* IRC */ | ||
| 294 | /* disable interrupt control */ | ||
| 295 | tx3927_ircptr->cer = 0; | ||
| 296 | /* mask all IRC interrupts */ | ||
| 297 | tx3927_ircptr->imr = 0; | ||
| 298 | for (i = 0; i < TX3927_NUM_IR / 2; i++) { | ||
| 299 | tx3927_ircptr->ilr[i] = 0; | ||
| 300 | } | ||
| 301 | /* setup IRC interrupt mode (Low Active) */ | ||
| 302 | for (i = 0; i < TX3927_NUM_IR / 8; i++) { | ||
| 303 | tx3927_ircptr->cr[i] = 0; | ||
| 304 | } | ||
| 305 | |||
| 306 | /* TMR */ | 293 | /* TMR */ |
| 307 | /* disable all timers */ | 294 | /* disable all timers */ |
| 308 | for (i = 0; i < TX3927_NR_TMR; i++) { | 295 | for (i = 0; i < TX3927_NR_TMR; i++) { |
diff --git a/arch/mips/tx4927/common/tx4927_irq.c b/arch/mips/tx4927/common/tx4927_irq.c index 00b0b975f349..0aabd57fdad2 100644 --- a/arch/mips/tx4927/common/tx4927_irq.c +++ b/arch/mips/tx4927/common/tx4927_irq.c | |||
| @@ -23,398 +23,20 @@ | |||
| 23 | * with this program; if not, write to the Free Software Foundation, Inc., | 23 | * with this program; if not, write to the Free Software Foundation, Inc., |
| 24 | * 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * 675 Mass Ave, Cambridge, MA 02139, USA. |
| 25 | */ | 25 | */ |
| 26 | #include <linux/errno.h> | ||
| 27 | #include <linux/init.h> | 26 | #include <linux/init.h> |
| 28 | #include <linux/kernel_stat.h> | ||
| 29 | #include <linux/module.h> | ||
| 30 | #include <linux/signal.h> | ||
| 31 | #include <linux/sched.h> | ||
| 32 | #include <linux/types.h> | ||
| 33 | #include <linux/interrupt.h> | 27 | #include <linux/interrupt.h> |
| 34 | #include <linux/ioport.h> | 28 | #include <asm/irq_cpu.h> |
| 35 | #include <linux/timex.h> | ||
| 36 | #include <linux/slab.h> | ||
| 37 | #include <linux/random.h> | ||
| 38 | #include <linux/irq.h> | ||
| 39 | #include <linux/bitops.h> | ||
| 40 | #include <asm/bootinfo.h> | ||
| 41 | #include <asm/io.h> | ||
| 42 | #include <asm/irq.h> | ||
| 43 | #include <asm/mipsregs.h> | 29 | #include <asm/mipsregs.h> |
| 44 | #include <asm/system.h> | ||
| 45 | #include <asm/tx4927/tx4927.h> | 30 | #include <asm/tx4927/tx4927.h> |
| 46 | #ifdef CONFIG_TOSHIBA_RBTX4927 | 31 | #ifdef CONFIG_TOSHIBA_RBTX4927 |
| 47 | #include <asm/tx4927/toshiba_rbtx4927.h> | 32 | #include <asm/tx4927/toshiba_rbtx4927.h> |
| 48 | #endif | 33 | #endif |
| 49 | 34 | ||
| 50 | /* | ||
| 51 | * DEBUG | ||
| 52 | */ | ||
| 53 | |||
| 54 | #undef TX4927_IRQ_DEBUG | ||
| 55 | |||
| 56 | #ifdef TX4927_IRQ_DEBUG | ||
| 57 | #define TX4927_IRQ_NONE 0x00000000 | ||
| 58 | |||
| 59 | #define TX4927_IRQ_INFO ( 1 << 0 ) | ||
| 60 | #define TX4927_IRQ_WARN ( 1 << 1 ) | ||
| 61 | #define TX4927_IRQ_EROR ( 1 << 2 ) | ||
| 62 | |||
| 63 | #define TX4927_IRQ_INIT ( 1 << 5 ) | ||
| 64 | #define TX4927_IRQ_NEST1 ( 1 << 6 ) | ||
| 65 | #define TX4927_IRQ_NEST2 ( 1 << 7 ) | ||
| 66 | #define TX4927_IRQ_NEST3 ( 1 << 8 ) | ||
| 67 | #define TX4927_IRQ_NEST4 ( 1 << 9 ) | ||
| 68 | |||
| 69 | #define TX4927_IRQ_CP0_INIT ( 1 << 10 ) | ||
| 70 | #define TX4927_IRQ_CP0_ENABLE ( 1 << 13 ) | ||
| 71 | #define TX4927_IRQ_CP0_DISABLE ( 1 << 14 ) | ||
| 72 | |||
| 73 | #define TX4927_IRQ_PIC_INIT ( 1 << 20 ) | ||
| 74 | #define TX4927_IRQ_PIC_ENABLE ( 1 << 23 ) | ||
| 75 | #define TX4927_IRQ_PIC_DISABLE ( 1 << 24 ) | ||
| 76 | |||
| 77 | #define TX4927_IRQ_ALL 0xffffffff | ||
| 78 | #endif | ||
| 79 | |||
| 80 | #ifdef TX4927_IRQ_DEBUG | ||
| 81 | static const u32 tx4927_irq_debug_flag = (TX4927_IRQ_NONE | ||
| 82 | | TX4927_IRQ_INFO | ||
| 83 | | TX4927_IRQ_WARN | TX4927_IRQ_EROR | ||
| 84 | // | TX4927_IRQ_CP0_INIT | ||
| 85 | // | TX4927_IRQ_CP0_ENABLE | ||
| 86 | // | TX4927_IRQ_CP0_ENDIRQ | ||
| 87 | // | TX4927_IRQ_PIC_INIT | ||
| 88 | // | TX4927_IRQ_PIC_ENABLE | ||
| 89 | // | TX4927_IRQ_PIC_DISABLE | ||
| 90 | // | TX4927_IRQ_INIT | ||
| 91 | // | TX4927_IRQ_NEST1 | ||
| 92 | // | TX4927_IRQ_NEST2 | ||
| 93 | // | TX4927_IRQ_NEST3 | ||
| 94 | // | TX4927_IRQ_NEST4 | ||
| 95 | ); | ||
| 96 | #endif | ||
| 97 | |||
| 98 | #ifdef TX4927_IRQ_DEBUG | ||
| 99 | #define TX4927_IRQ_DPRINTK(flag,str...) \ | ||
| 100 | if ( (tx4927_irq_debug_flag) & (flag) ) \ | ||
| 101 | { \ | ||
| 102 | char tmp[100]; \ | ||
| 103 | sprintf( tmp, str ); \ | ||
| 104 | printk( "%s(%s:%u)::%s", __FUNCTION__, __FILE__, __LINE__, tmp ); \ | ||
| 105 | } | ||
| 106 | #else | ||
| 107 | #define TX4927_IRQ_DPRINTK(flag,str...) | ||
| 108 | #endif | ||
| 109 | |||
| 110 | /* | ||
| 111 | * Forwad definitions for all pic's | ||
| 112 | */ | ||
| 113 | |||
| 114 | static void tx4927_irq_cp0_enable(unsigned int irq); | ||
| 115 | static void tx4927_irq_cp0_disable(unsigned int irq); | ||
| 116 | |||
| 117 | static void tx4927_irq_pic_enable(unsigned int irq); | ||
| 118 | static void tx4927_irq_pic_disable(unsigned int irq); | ||
| 119 | |||
| 120 | /* | ||
| 121 | * Kernel structs for all pic's | ||
| 122 | */ | ||
| 123 | |||
| 124 | #define TX4927_CP0_NAME "TX4927-CP0" | ||
| 125 | static struct irq_chip tx4927_irq_cp0_type = { | ||
| 126 | .name = TX4927_CP0_NAME, | ||
| 127 | .ack = tx4927_irq_cp0_disable, | ||
| 128 | .mask = tx4927_irq_cp0_disable, | ||
| 129 | .mask_ack = tx4927_irq_cp0_disable, | ||
| 130 | .unmask = tx4927_irq_cp0_enable, | ||
| 131 | }; | ||
| 132 | |||
| 133 | #define TX4927_PIC_NAME "TX4927-PIC" | ||
| 134 | static struct irq_chip tx4927_irq_pic_type = { | ||
| 135 | .name = TX4927_PIC_NAME, | ||
| 136 | .ack = tx4927_irq_pic_disable, | ||
| 137 | .mask = tx4927_irq_pic_disable, | ||
| 138 | .mask_ack = tx4927_irq_pic_disable, | ||
| 139 | .unmask = tx4927_irq_pic_enable, | ||
| 140 | }; | ||
| 141 | |||
| 142 | #define TX4927_PIC_ACTION(s) { no_action, 0, CPU_MASK_NONE, s, NULL, NULL } | ||
| 143 | static struct irqaction tx4927_irq_pic_action = | ||
| 144 | TX4927_PIC_ACTION(TX4927_PIC_NAME); | ||
| 145 | |||
| 146 | #define CCP0_STATUS 12 | ||
| 147 | #define CCP0_CAUSE 13 | ||
| 148 | |||
| 149 | /* | ||
| 150 | * Functions for cp0 | ||
| 151 | */ | ||
| 152 | |||
| 153 | #define tx4927_irq_cp0_mask(irq) ( 1 << ( irq-TX4927_IRQ_CP0_BEG+8 ) ) | ||
| 154 | |||
| 155 | static void | ||
| 156 | tx4927_irq_cp0_modify(unsigned cp0_reg, unsigned clr_bits, unsigned set_bits) | ||
| 157 | { | ||
| 158 | unsigned long val = 0; | ||
| 159 | |||
| 160 | switch (cp0_reg) { | ||
| 161 | case CCP0_STATUS: | ||
| 162 | val = read_c0_status(); | ||
| 163 | break; | ||
| 164 | |||
| 165 | case CCP0_CAUSE: | ||
| 166 | val = read_c0_cause(); | ||
| 167 | break; | ||
| 168 | |||
| 169 | } | ||
| 170 | |||
| 171 | val &= (~clr_bits); | ||
| 172 | val |= (set_bits); | ||
| 173 | |||
| 174 | switch (cp0_reg) { | ||
| 175 | case CCP0_STATUS:{ | ||
| 176 | write_c0_status(val); | ||
| 177 | break; | ||
| 178 | } | ||
| 179 | case CCP0_CAUSE:{ | ||
| 180 | write_c0_cause(val); | ||
| 181 | break; | ||
| 182 | } | ||
| 183 | } | ||
| 184 | } | ||
| 185 | |||
| 186 | static void __init tx4927_irq_cp0_init(void) | ||
| 187 | { | ||
| 188 | int i; | ||
| 189 | |||
| 190 | TX4927_IRQ_DPRINTK(TX4927_IRQ_CP0_INIT, "beg=%d end=%d\n", | ||
| 191 | TX4927_IRQ_CP0_BEG, TX4927_IRQ_CP0_END); | ||
| 192 | |||
| 193 | for (i = TX4927_IRQ_CP0_BEG; i <= TX4927_IRQ_CP0_END; i++) | ||
| 194 | set_irq_chip_and_handler(i, &tx4927_irq_cp0_type, | ||
| 195 | handle_level_irq); | ||
| 196 | } | ||
| 197 | |||
| 198 | static void tx4927_irq_cp0_enable(unsigned int irq) | ||
| 199 | { | ||
| 200 | TX4927_IRQ_DPRINTK(TX4927_IRQ_CP0_ENABLE, "irq=%d \n", irq); | ||
| 201 | |||
| 202 | tx4927_irq_cp0_modify(CCP0_STATUS, 0, tx4927_irq_cp0_mask(irq)); | ||
| 203 | } | ||
| 204 | |||
| 205 | static void tx4927_irq_cp0_disable(unsigned int irq) | ||
| 206 | { | ||
| 207 | TX4927_IRQ_DPRINTK(TX4927_IRQ_CP0_DISABLE, "irq=%d \n", irq); | ||
| 208 | |||
| 209 | tx4927_irq_cp0_modify(CCP0_STATUS, tx4927_irq_cp0_mask(irq), 0); | ||
| 210 | } | ||
| 211 | |||
| 212 | /* | ||
| 213 | * Functions for pic | ||
| 214 | */ | ||
| 215 | u32 tx4927_irq_pic_addr(int irq) | ||
| 216 | { | ||
| 217 | /* MVMCP -- need to formulize this */ | ||
| 218 | irq -= TX4927_IRQ_PIC_BEG; | ||
| 219 | switch (irq) { | ||
| 220 | case 17: | ||
| 221 | case 16: | ||
| 222 | case 1: | ||
| 223 | case 0: | ||
| 224 | return (0xff1ff610); | ||
| 225 | |||
| 226 | case 19: | ||
| 227 | case 18: | ||
| 228 | case 3: | ||
| 229 | case 2: | ||
| 230 | return (0xff1ff614); | ||
| 231 | |||
| 232 | case 21: | ||
| 233 | case 20: | ||
| 234 | case 5: | ||
| 235 | case 4: | ||
| 236 | return (0xff1ff618); | ||
| 237 | |||
| 238 | case 23: | ||
| 239 | case 22: | ||
| 240 | case 7: | ||
| 241 | case 6: | ||
| 242 | return (0xff1ff61c); | ||
| 243 | |||
| 244 | case 25: | ||
| 245 | case 24: | ||
| 246 | case 9: | ||
| 247 | case 8: | ||
| 248 | return (0xff1ff620); | ||
| 249 | |||
| 250 | case 27: | ||
| 251 | case 26: | ||
| 252 | case 11: | ||
| 253 | case 10: | ||
| 254 | return (0xff1ff624); | ||
| 255 | |||
| 256 | case 29: | ||
| 257 | case 28: | ||
| 258 | case 13: | ||
| 259 | case 12: | ||
| 260 | return (0xff1ff628); | ||
| 261 | |||
| 262 | case 31: | ||
| 263 | case 30: | ||
| 264 | case 15: | ||
| 265 | case 14: | ||
| 266 | return (0xff1ff62c); | ||
| 267 | |||
| 268 | } | ||
| 269 | return (0); | ||
| 270 | } | ||
| 271 | |||
| 272 | u32 tx4927_irq_pic_mask(int irq) | ||
| 273 | { | ||
| 274 | /* MVMCP -- need to formulize this */ | ||
| 275 | irq -= TX4927_IRQ_PIC_BEG; | ||
| 276 | switch (irq) { | ||
| 277 | case 31: | ||
| 278 | case 29: | ||
| 279 | case 27: | ||
| 280 | case 25: | ||
| 281 | case 23: | ||
| 282 | case 21: | ||
| 283 | case 19: | ||
| 284 | case 17:{ | ||
| 285 | return (0x07000000); | ||
| 286 | } | ||
| 287 | case 30: | ||
| 288 | case 28: | ||
| 289 | case 26: | ||
| 290 | case 24: | ||
| 291 | case 22: | ||
| 292 | case 20: | ||
| 293 | case 18: | ||
| 294 | case 16:{ | ||
| 295 | return (0x00070000); | ||
| 296 | } | ||
| 297 | case 15: | ||
| 298 | case 13: | ||
| 299 | case 11: | ||
| 300 | case 9: | ||
| 301 | case 7: | ||
| 302 | case 5: | ||
| 303 | case 3: | ||
| 304 | case 1:{ | ||
| 305 | return (0x00000700); | ||
| 306 | } | ||
| 307 | case 14: | ||
| 308 | case 12: | ||
| 309 | case 10: | ||
| 310 | case 8: | ||
| 311 | case 6: | ||
| 312 | case 4: | ||
| 313 | case 2: | ||
| 314 | case 0:{ | ||
| 315 | return (0x00000007); | ||
| 316 | } | ||
| 317 | } | ||
| 318 | return (0x00000000); | ||
| 319 | } | ||
| 320 | |||
| 321 | static void tx4927_irq_pic_modify(unsigned pic_reg, unsigned clr_bits, | ||
| 322 | unsigned set_bits) | ||
| 323 | { | ||
| 324 | unsigned long val = 0; | ||
| 325 | |||
| 326 | val = TX4927_RD(pic_reg); | ||
| 327 | val &= (~clr_bits); | ||
| 328 | val |= (set_bits); | ||
| 329 | TX4927_WR(pic_reg, val); | ||
| 330 | } | ||
| 331 | |||
| 332 | static void __init tx4927_irq_pic_init(void) | ||
| 333 | { | ||
| 334 | int i; | ||
| 335 | |||
| 336 | TX4927_IRQ_DPRINTK(TX4927_IRQ_PIC_INIT, "beg=%d end=%d\n", | ||
| 337 | TX4927_IRQ_PIC_BEG, TX4927_IRQ_PIC_END); | ||
| 338 | |||
| 339 | for (i = TX4927_IRQ_PIC_BEG; i <= TX4927_IRQ_PIC_END; i++) | ||
| 340 | set_irq_chip_and_handler(i, &tx4927_irq_pic_type, | ||
| 341 | handle_level_irq); | ||
| 342 | |||
| 343 | setup_irq(TX4927_IRQ_NEST_PIC_ON_CP0, &tx4927_irq_pic_action); | ||
| 344 | |||
| 345 | TX4927_WR(0xff1ff640, 0x6); /* irq level mask -- only accept hightest */ | ||
| 346 | TX4927_WR(0xff1ff600, TX4927_RD(0xff1ff600) | 0x1); /* irq enable */ | ||
| 347 | } | ||
| 348 | |||
| 349 | static void tx4927_irq_pic_enable(unsigned int irq) | ||
| 350 | { | ||
| 351 | TX4927_IRQ_DPRINTK(TX4927_IRQ_PIC_ENABLE, "irq=%d\n", irq); | ||
| 352 | |||
| 353 | tx4927_irq_pic_modify(tx4927_irq_pic_addr(irq), 0, | ||
| 354 | tx4927_irq_pic_mask(irq)); | ||
| 355 | } | ||
| 356 | |||
| 357 | static void tx4927_irq_pic_disable(unsigned int irq) | ||
| 358 | { | ||
| 359 | TX4927_IRQ_DPRINTK(TX4927_IRQ_PIC_DISABLE, "irq=%d\n", irq); | ||
| 360 | |||
| 361 | tx4927_irq_pic_modify(tx4927_irq_pic_addr(irq), | ||
| 362 | tx4927_irq_pic_mask(irq), 0); | ||
| 363 | } | ||
| 364 | |||
| 365 | /* | ||
| 366 | * Main init functions | ||
| 367 | */ | ||
| 368 | void __init tx4927_irq_init(void) | 35 | void __init tx4927_irq_init(void) |
| 369 | { | 36 | { |
| 370 | TX4927_IRQ_DPRINTK(TX4927_IRQ_INIT, "-\n"); | 37 | mips_cpu_irq_init(); |
| 371 | 38 | txx9_irq_init(TX4927_IRC_REG); | |
| 372 | TX4927_IRQ_DPRINTK(TX4927_IRQ_INIT, "=Calling tx4927_irq_cp0_init()\n"); | 39 | set_irq_chained_handler(TX4927_IRQ_NEST_PIC_ON_CP0, handle_simple_irq); |
| 373 | tx4927_irq_cp0_init(); | ||
| 374 | |||
| 375 | TX4927_IRQ_DPRINTK(TX4927_IRQ_INIT, "=Calling tx4927_irq_pic_init()\n"); | ||
| 376 | tx4927_irq_pic_init(); | ||
| 377 | |||
| 378 | TX4927_IRQ_DPRINTK(TX4927_IRQ_INIT, "+\n"); | ||
| 379 | } | ||
| 380 | |||
| 381 | static int tx4927_irq_nested(void) | ||
| 382 | { | ||
| 383 | int sw_irq = 0; | ||
| 384 | u32 level2; | ||
| 385 | |||
| 386 | TX4927_IRQ_DPRINTK(TX4927_IRQ_NEST1, "-\n"); | ||
| 387 | |||
| 388 | level2 = TX4927_RD(0xff1ff6a0); | ||
| 389 | TX4927_IRQ_DPRINTK(TX4927_IRQ_NEST2, "=level2a=0x%x\n", level2); | ||
| 390 | |||
| 391 | if ((level2 & 0x10000) == 0) { | ||
| 392 | level2 &= 0x1f; | ||
| 393 | TX4927_IRQ_DPRINTK(TX4927_IRQ_NEST3, "=level2b=0x%x\n", level2); | ||
| 394 | |||
| 395 | sw_irq = TX4927_IRQ_PIC_BEG + level2; | ||
| 396 | TX4927_IRQ_DPRINTK(TX4927_IRQ_NEST3, "=sw_irq=%d\n", sw_irq); | ||
| 397 | |||
| 398 | if (sw_irq == 27) { | ||
| 399 | TX4927_IRQ_DPRINTK(TX4927_IRQ_NEST4, "=irq-%d\n", | ||
| 400 | sw_irq); | ||
| 401 | |||
| 402 | #ifdef CONFIG_TOSHIBA_RBTX4927 | ||
| 403 | { | ||
| 404 | sw_irq = toshiba_rbtx4927_irq_nested(sw_irq); | ||
| 405 | } | ||
| 406 | #endif | ||
| 407 | |||
| 408 | TX4927_IRQ_DPRINTK(TX4927_IRQ_NEST4, "=irq+%d\n", | ||
| 409 | sw_irq); | ||
| 410 | } | ||
| 411 | } | ||
| 412 | |||
| 413 | TX4927_IRQ_DPRINTK(TX4927_IRQ_NEST2, "=sw_irq=%d\n", sw_irq); | ||
| 414 | |||
| 415 | TX4927_IRQ_DPRINTK(TX4927_IRQ_NEST1, "+\n"); | ||
| 416 | |||
| 417 | return (sw_irq); | ||
| 418 | } | 40 | } |
| 419 | 41 | ||
| 420 | asmlinkage void plat_irq_dispatch(void) | 42 | asmlinkage void plat_irq_dispatch(void) |
| @@ -424,9 +46,12 @@ asmlinkage void plat_irq_dispatch(void) | |||
| 424 | if (pending & STATUSF_IP7) /* cpu timer */ | 46 | if (pending & STATUSF_IP7) /* cpu timer */ |
| 425 | do_IRQ(TX4927_IRQ_CPU_TIMER); | 47 | do_IRQ(TX4927_IRQ_CPU_TIMER); |
| 426 | else if (pending & STATUSF_IP2) { /* tx4927 pic */ | 48 | else if (pending & STATUSF_IP2) { /* tx4927 pic */ |
| 427 | unsigned int irq = tx4927_irq_nested(); | 49 | int irq = txx9_irq(); |
| 428 | 50 | #ifdef CONFIG_TOSHIBA_RBTX4927 | |
| 429 | if (unlikely(irq == 0)) { | 51 | if (irq == TX4927_IRQ_NEST_EXT_ON_PIC) |
| 52 | irq = toshiba_rbtx4927_irq_nested(irq); | ||
| 53 | #endif | ||
| 54 | if (unlikely(irq < 0)) { | ||
| 430 | spurious_interrupt(); | 55 | spurious_interrupt(); |
| 431 | return; | 56 | return; |
| 432 | } | 57 | } |
diff --git a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c index e265fcd31b60..9607ad5e734a 100644 --- a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c +++ b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c | |||
| @@ -133,6 +133,7 @@ JP7 is not bus master -- do NOT use -- only 4 pci bus master's allowed -- SouthB | |||
| 133 | #include <linux/bootmem.h> | 133 | #include <linux/bootmem.h> |
| 134 | #include <linux/blkdev.h> | 134 | #include <linux/blkdev.h> |
| 135 | #ifdef CONFIG_TOSHIBA_FPCIB0 | 135 | #ifdef CONFIG_TOSHIBA_FPCIB0 |
| 136 | #include <asm/i8259.h> | ||
| 136 | #include <asm/tx4927/smsc_fdc37m81x.h> | 137 | #include <asm/tx4927/smsc_fdc37m81x.h> |
| 137 | #endif | 138 | #endif |
| 138 | #include <asm/tx4927/toshiba_rbtx4927.h> | 139 | #include <asm/tx4927/toshiba_rbtx4927.h> |
| @@ -151,11 +152,6 @@ JP7 is not bus master -- do NOT use -- only 4 pci bus master's allowed -- SouthB | |||
| 151 | #define TOSHIBA_RBTX4927_IRQ_IOC_ENABLE ( 1 << 13 ) | 152 | #define TOSHIBA_RBTX4927_IRQ_IOC_ENABLE ( 1 << 13 ) |
| 152 | #define TOSHIBA_RBTX4927_IRQ_IOC_DISABLE ( 1 << 14 ) | 153 | #define TOSHIBA_RBTX4927_IRQ_IOC_DISABLE ( 1 << 14 ) |
| 153 | 154 | ||
| 154 | #define TOSHIBA_RBTX4927_IRQ_ISA_INIT ( 1 << 20 ) | ||
| 155 | #define TOSHIBA_RBTX4927_IRQ_ISA_ENABLE ( 1 << 23 ) | ||
| 156 | #define TOSHIBA_RBTX4927_IRQ_ISA_DISABLE ( 1 << 24 ) | ||
| 157 | #define TOSHIBA_RBTX4927_IRQ_ISA_MASK ( 1 << 25 ) | ||
| 158 | |||
| 159 | #define TOSHIBA_RBTX4927_SETUP_ALL 0xffffffff | 155 | #define TOSHIBA_RBTX4927_SETUP_ALL 0xffffffff |
| 160 | #endif | 156 | #endif |
| 161 | 157 | ||
| @@ -167,10 +163,6 @@ static const u32 toshiba_rbtx4927_irq_debug_flag = | |||
| 167 | // | TOSHIBA_RBTX4927_IRQ_IOC_INIT | 163 | // | TOSHIBA_RBTX4927_IRQ_IOC_INIT |
| 168 | // | TOSHIBA_RBTX4927_IRQ_IOC_ENABLE | 164 | // | TOSHIBA_RBTX4927_IRQ_IOC_ENABLE |
| 169 | // | TOSHIBA_RBTX4927_IRQ_IOC_DISABLE | 165 | // | TOSHIBA_RBTX4927_IRQ_IOC_DISABLE |
| 170 | // | TOSHIBA_RBTX4927_IRQ_ISA_INIT | ||
| 171 | // | TOSHIBA_RBTX4927_IRQ_ISA_ENABLE | ||
| 172 | // | TOSHIBA_RBTX4927_IRQ_ISA_DISABLE | ||
| 173 | // | TOSHIBA_RBTX4927_IRQ_ISA_MASK | ||
| 174 | ); | 166 | ); |
| 175 | #endif | 167 | #endif |
| 176 | 168 | ||
| @@ -196,33 +188,14 @@ static const u32 toshiba_rbtx4927_irq_debug_flag = | |||
| 196 | #define TOSHIBA_RBTX4927_IRQ_IOC_BEG ((TX4927_IRQ_PIC_END+1)+TOSHIBA_RBTX4927_IRQ_IOC_RAW_BEG) /* 56 */ | 188 | #define TOSHIBA_RBTX4927_IRQ_IOC_BEG ((TX4927_IRQ_PIC_END+1)+TOSHIBA_RBTX4927_IRQ_IOC_RAW_BEG) /* 56 */ |
| 197 | #define TOSHIBA_RBTX4927_IRQ_IOC_END ((TX4927_IRQ_PIC_END+1)+TOSHIBA_RBTX4927_IRQ_IOC_RAW_END) /* 63 */ | 189 | #define TOSHIBA_RBTX4927_IRQ_IOC_END ((TX4927_IRQ_PIC_END+1)+TOSHIBA_RBTX4927_IRQ_IOC_RAW_END) /* 63 */ |
| 198 | 190 | ||
| 199 | |||
| 200 | #define TOSHIBA_RBTX4927_IRQ_ISA_BEG MI8259_IRQ_ISA_BEG | ||
| 201 | #define TOSHIBA_RBTX4927_IRQ_ISA_END MI8259_IRQ_ISA_END | ||
| 202 | #define TOSHIBA_RBTX4927_IRQ_ISA_MID ((TOSHIBA_RBTX4927_IRQ_ISA_BEG+TOSHIBA_RBTX4927_IRQ_ISA_END+1)/2) | ||
| 203 | |||
| 204 | |||
| 205 | #define TOSHIBA_RBTX4927_IRQ_NEST_IOC_ON_PIC TX4927_IRQ_NEST_EXT_ON_PIC | 191 | #define TOSHIBA_RBTX4927_IRQ_NEST_IOC_ON_PIC TX4927_IRQ_NEST_EXT_ON_PIC |
| 206 | #define TOSHIBA_RBTX4927_IRQ_NEST_ISA_ON_IOC (TOSHIBA_RBTX4927_IRQ_IOC_BEG+2) | 192 | #define TOSHIBA_RBTX4927_IRQ_NEST_ISA_ON_IOC (TOSHIBA_RBTX4927_IRQ_IOC_BEG+2) |
| 207 | #define TOSHIBA_RBTX4927_IRQ_NEST_ISA_ON_ISA (TOSHIBA_RBTX4927_IRQ_ISA_BEG+2) | ||
| 208 | 193 | ||
| 209 | extern int tx4927_using_backplane; | 194 | extern int tx4927_using_backplane; |
| 210 | 195 | ||
| 211 | #ifdef CONFIG_TOSHIBA_FPCIB0 | ||
| 212 | extern void enable_8259A_irq(unsigned int irq); | ||
| 213 | extern void disable_8259A_irq(unsigned int irq); | ||
| 214 | extern void mask_and_ack_8259A(unsigned int irq); | ||
| 215 | #endif | ||
| 216 | |||
| 217 | static void toshiba_rbtx4927_irq_ioc_enable(unsigned int irq); | 196 | static void toshiba_rbtx4927_irq_ioc_enable(unsigned int irq); |
| 218 | static void toshiba_rbtx4927_irq_ioc_disable(unsigned int irq); | 197 | static void toshiba_rbtx4927_irq_ioc_disable(unsigned int irq); |
| 219 | 198 | ||
| 220 | #ifdef CONFIG_TOSHIBA_FPCIB0 | ||
| 221 | static void toshiba_rbtx4927_irq_isa_enable(unsigned int irq); | ||
| 222 | static void toshiba_rbtx4927_irq_isa_disable(unsigned int irq); | ||
| 223 | static void toshiba_rbtx4927_irq_isa_mask_and_ack(unsigned int irq); | ||
| 224 | #endif | ||
| 225 | |||
| 226 | #define TOSHIBA_RBTX4927_IOC_NAME "RBTX4927-IOC" | 199 | #define TOSHIBA_RBTX4927_IOC_NAME "RBTX4927-IOC" |
| 227 | static struct irq_chip toshiba_rbtx4927_irq_ioc_type = { | 200 | static struct irq_chip toshiba_rbtx4927_irq_ioc_type = { |
| 228 | .name = TOSHIBA_RBTX4927_IOC_NAME, | 201 | .name = TOSHIBA_RBTX4927_IOC_NAME, |
| @@ -235,18 +208,6 @@ static struct irq_chip toshiba_rbtx4927_irq_ioc_type = { | |||
| 235 | #define TOSHIBA_RBTX4927_IOC_INTR_STAT 0xbc002006 | 208 | #define TOSHIBA_RBTX4927_IOC_INTR_STAT 0xbc002006 |
| 236 | 209 | ||
| 237 | 210 | ||
| 238 | #ifdef CONFIG_TOSHIBA_FPCIB0 | ||
| 239 | #define TOSHIBA_RBTX4927_ISA_NAME "RBTX4927-ISA" | ||
| 240 | static struct irq_chip toshiba_rbtx4927_irq_isa_type = { | ||
| 241 | .name = TOSHIBA_RBTX4927_ISA_NAME, | ||
| 242 | .ack = toshiba_rbtx4927_irq_isa_mask_and_ack, | ||
| 243 | .mask = toshiba_rbtx4927_irq_isa_disable, | ||
| 244 | .mask_ack = toshiba_rbtx4927_irq_isa_mask_and_ack, | ||
| 245 | .unmask = toshiba_rbtx4927_irq_isa_enable, | ||
| 246 | }; | ||
| 247 | #endif | ||
| 248 | |||
| 249 | |||
| 250 | u32 bit2num(u32 num) | 211 | u32 bit2num(u32 num) |
| 251 | { | 212 | { |
| 252 | u32 i; | 213 | u32 i; |
| @@ -271,31 +232,10 @@ int toshiba_rbtx4927_irq_nested(int sw_irq) | |||
| 271 | } | 232 | } |
| 272 | } | 233 | } |
| 273 | #ifdef CONFIG_TOSHIBA_FPCIB0 | 234 | #ifdef CONFIG_TOSHIBA_FPCIB0 |
| 274 | { | 235 | if (tx4927_using_backplane) { |
| 275 | if (tx4927_using_backplane) { | 236 | int irq = i8259_irq(); |
| 276 | u32 level4; | 237 | if (irq >= 0) |
| 277 | u32 level5; | 238 | sw_irq = irq; |
| 278 | outb(0x0A, 0x20); | ||
| 279 | level4 = inb(0x20) & 0xff; | ||
| 280 | if (level4) { | ||
| 281 | sw_irq = | ||
| 282 | TOSHIBA_RBTX4927_IRQ_ISA_BEG + | ||
| 283 | bit2num(level4); | ||
| 284 | if (sw_irq != | ||
| 285 | TOSHIBA_RBTX4927_IRQ_NEST_ISA_ON_ISA) { | ||
| 286 | goto RETURN; | ||
| 287 | } | ||
| 288 | } | ||
| 289 | |||
| 290 | outb(0x0A, 0xA0); | ||
| 291 | level5 = inb(0xA0) & 0xff; | ||
| 292 | if (level5) { | ||
| 293 | sw_irq = | ||
| 294 | TOSHIBA_RBTX4927_IRQ_ISA_MID + | ||
| 295 | bit2num(level5); | ||
| 296 | goto RETURN; | ||
| 297 | } | ||
| 298 | } | ||
| 299 | } | 239 | } |
| 300 | #endif | 240 | #endif |
| 301 | 241 | ||
| @@ -307,12 +247,6 @@ int toshiba_rbtx4927_irq_nested(int sw_irq) | |||
| 307 | #define TOSHIBA_RBTX4927_PIC_ACTION(s) { no_action, IRQF_SHARED, CPU_MASK_NONE, s, NULL, NULL } | 247 | #define TOSHIBA_RBTX4927_PIC_ACTION(s) { no_action, IRQF_SHARED, CPU_MASK_NONE, s, NULL, NULL } |
| 308 | static struct irqaction toshiba_rbtx4927_irq_ioc_action = | 248 | static struct irqaction toshiba_rbtx4927_irq_ioc_action = |
| 309 | TOSHIBA_RBTX4927_PIC_ACTION(TOSHIBA_RBTX4927_IOC_NAME); | 249 | TOSHIBA_RBTX4927_PIC_ACTION(TOSHIBA_RBTX4927_IOC_NAME); |
| 310 | #ifdef CONFIG_TOSHIBA_FPCIB0 | ||
| 311 | static struct irqaction toshiba_rbtx4927_irq_isa_master = | ||
| 312 | TOSHIBA_RBTX4927_PIC_ACTION(TOSHIBA_RBTX4927_ISA_NAME "/M"); | ||
| 313 | static struct irqaction toshiba_rbtx4927_irq_isa_slave = | ||
| 314 | TOSHIBA_RBTX4927_PIC_ACTION(TOSHIBA_RBTX4927_ISA_NAME "/S"); | ||
| 315 | #endif | ||
| 316 | 250 | ||
| 317 | 251 | ||
| 318 | /**********************************************************************************/ | 252 | /**********************************************************************************/ |
| @@ -378,92 +312,6 @@ static void toshiba_rbtx4927_irq_ioc_disable(unsigned int irq) | |||
| 378 | } | 312 | } |
| 379 | 313 | ||
| 380 | 314 | ||
| 381 | /**********************************************************************************/ | ||
| 382 | /* Functions for isa */ | ||
| 383 | /**********************************************************************************/ | ||
| 384 | |||
| 385 | |||
| 386 | #ifdef CONFIG_TOSHIBA_FPCIB0 | ||
| 387 | static void __init toshiba_rbtx4927_irq_isa_init(void) | ||
| 388 | { | ||
| 389 | int i; | ||
| 390 | |||
| 391 | TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_ISA_INIT, | ||
| 392 | "beg=%d end=%d\n", | ||
| 393 | TOSHIBA_RBTX4927_IRQ_ISA_BEG, | ||
| 394 | TOSHIBA_RBTX4927_IRQ_ISA_END); | ||
| 395 | |||
| 396 | for (i = TOSHIBA_RBTX4927_IRQ_ISA_BEG; | ||
| 397 | i <= TOSHIBA_RBTX4927_IRQ_ISA_END; i++) | ||
| 398 | set_irq_chip_and_handler(i, &toshiba_rbtx4927_irq_isa_type, | ||
| 399 | handle_level_irq); | ||
| 400 | |||
| 401 | setup_irq(TOSHIBA_RBTX4927_IRQ_NEST_ISA_ON_IOC, | ||
| 402 | &toshiba_rbtx4927_irq_isa_master); | ||
| 403 | setup_irq(TOSHIBA_RBTX4927_IRQ_NEST_ISA_ON_ISA, | ||
| 404 | &toshiba_rbtx4927_irq_isa_slave); | ||
| 405 | |||
| 406 | /* make sure we are looking at IRR (not ISR) */ | ||
| 407 | outb(0x0A, 0x20); | ||
| 408 | outb(0x0A, 0xA0); | ||
| 409 | } | ||
| 410 | #endif | ||
| 411 | |||
| 412 | |||
| 413 | #ifdef CONFIG_TOSHIBA_FPCIB0 | ||
| 414 | static void toshiba_rbtx4927_irq_isa_enable(unsigned int irq) | ||
| 415 | { | ||
| 416 | TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_ISA_ENABLE, | ||
| 417 | "irq=%d\n", irq); | ||
| 418 | |||
| 419 | if (irq < TOSHIBA_RBTX4927_IRQ_ISA_BEG | ||
| 420 | || irq > TOSHIBA_RBTX4927_IRQ_ISA_END) { | ||
| 421 | TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_EROR, | ||
| 422 | "bad irq=%d\n", irq); | ||
| 423 | panic("\n"); | ||
| 424 | } | ||
| 425 | |||
| 426 | enable_8259A_irq(irq); | ||
| 427 | } | ||
| 428 | #endif | ||
| 429 | |||
| 430 | |||
| 431 | #ifdef CONFIG_TOSHIBA_FPCIB0 | ||
| 432 | static void toshiba_rbtx4927_irq_isa_disable(unsigned int irq) | ||
| 433 | { | ||
| 434 | TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_ISA_DISABLE, | ||
| 435 | "irq=%d\n", irq); | ||
| 436 | |||
| 437 | if (irq < TOSHIBA_RBTX4927_IRQ_ISA_BEG | ||
| 438 | || irq > TOSHIBA_RBTX4927_IRQ_ISA_END) { | ||
| 439 | TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_EROR, | ||
| 440 | "bad irq=%d\n", irq); | ||
| 441 | panic("\n"); | ||
| 442 | } | ||
| 443 | |||
| 444 | disable_8259A_irq(irq); | ||
| 445 | } | ||
| 446 | #endif | ||
| 447 | |||
| 448 | |||
| 449 | #ifdef CONFIG_TOSHIBA_FPCIB0 | ||
| 450 | static void toshiba_rbtx4927_irq_isa_mask_and_ack(unsigned int irq) | ||
| 451 | { | ||
| 452 | TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_ISA_MASK, | ||
| 453 | "irq=%d\n", irq); | ||
| 454 | |||
| 455 | if (irq < TOSHIBA_RBTX4927_IRQ_ISA_BEG | ||
| 456 | || irq > TOSHIBA_RBTX4927_IRQ_ISA_END) { | ||
| 457 | TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_EROR, | ||
| 458 | "bad irq=%d\n", irq); | ||
| 459 | panic("\n"); | ||
| 460 | } | ||
| 461 | |||
| 462 | mask_and_ack_8259A(irq); | ||
| 463 | } | ||
| 464 | #endif | ||
| 465 | |||
| 466 | |||
| 467 | void __init arch_init_irq(void) | 315 | void __init arch_init_irq(void) |
| 468 | { | 316 | { |
| 469 | extern void tx4927_irq_init(void); | 317 | extern void tx4927_irq_init(void); |
| @@ -471,12 +319,11 @@ void __init arch_init_irq(void) | |||
| 471 | tx4927_irq_init(); | 319 | tx4927_irq_init(); |
| 472 | toshiba_rbtx4927_irq_ioc_init(); | 320 | toshiba_rbtx4927_irq_ioc_init(); |
| 473 | #ifdef CONFIG_TOSHIBA_FPCIB0 | 321 | #ifdef CONFIG_TOSHIBA_FPCIB0 |
| 474 | { | 322 | if (tx4927_using_backplane) |
| 475 | if (tx4927_using_backplane) { | 323 | init_i8259_irqs(); |
| 476 | toshiba_rbtx4927_irq_isa_init(); | ||
| 477 | } | ||
| 478 | } | ||
| 479 | #endif | 324 | #endif |
| 325 | /* Onboard 10M Ether: High Active */ | ||
| 326 | set_irq_type(RBTX4927_RTL_8019_IRQ, IRQF_TRIGGER_HIGH); | ||
| 480 | 327 | ||
| 481 | wbflush(); | 328 | wbflush(); |
| 482 | } | 329 | } |
diff --git a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c index ea5a70b252a0..3e84237abe63 100644 --- a/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c +++ b/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c | |||
| @@ -151,7 +151,6 @@ unsigned long mips_memory_upper; | |||
| 151 | static int tx4927_ccfg_toeon = 1; | 151 | static int tx4927_ccfg_toeon = 1; |
| 152 | static int tx4927_pcic_trdyto = 0; /* default: disabled */ | 152 | static int tx4927_pcic_trdyto = 0; /* default: disabled */ |
| 153 | unsigned long tx4927_ce_base[8]; | 153 | unsigned long tx4927_ce_base[8]; |
| 154 | void tx4927_pci_setup(void); | ||
| 155 | void tx4927_reset_pci_pcic(void); | 154 | void tx4927_reset_pci_pcic(void); |
| 156 | int tx4927_pci66 = 0; /* 0:auto */ | 155 | int tx4927_pci66 = 0; /* 0:auto */ |
| 157 | #endif | 156 | #endif |
| @@ -442,7 +441,7 @@ arch_initcall(tx4927_pcibios_init); | |||
| 442 | extern struct resource pci_io_resource; | 441 | extern struct resource pci_io_resource; |
| 443 | extern struct resource pci_mem_resource; | 442 | extern struct resource pci_mem_resource; |
| 444 | 443 | ||
| 445 | void tx4927_pci_setup(void) | 444 | void __init tx4927_pci_setup(void) |
| 446 | { | 445 | { |
| 447 | static int called = 0; | 446 | static int called = 0; |
| 448 | extern unsigned int tx4927_get_mem_size(void); | 447 | extern unsigned int tx4927_get_mem_size(void); |
| @@ -748,12 +747,6 @@ void __init toshiba_rbtx4927_setup(void) | |||
| 748 | } | 747 | } |
| 749 | #endif | 748 | #endif |
| 750 | 749 | ||
| 751 | /* setup irq stuff */ | ||
| 752 | TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_SETUP, | ||
| 753 | ":Setting up tx4927 pic.\n"); | ||
| 754 | TX4927_WR(0xff1ff604, 0x00000400); /* irq trigger */ | ||
| 755 | TX4927_WR(0xff1ff608, 0x00000000); /* irq trigger */ | ||
| 756 | |||
| 757 | /* setup serial stuff */ | 750 | /* setup serial stuff */ |
| 758 | TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_SETUP, | 751 | TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_SETUP, |
| 759 | ":Setting up tx4927 sio.\n"); | 752 | ":Setting up tx4927 sio.\n"); |
| @@ -915,7 +908,7 @@ void __init toshiba_rbtx4927_setup(void) | |||
| 915 | req.iotype = UPIO_MEM; | 908 | req.iotype = UPIO_MEM; |
| 916 | req.membase = (char *)(0xff1ff300 + i * 0x100); | 909 | req.membase = (char *)(0xff1ff300 + i * 0x100); |
| 917 | req.mapbase = 0xff1ff300 + i * 0x100; | 910 | req.mapbase = 0xff1ff300 + i * 0x100; |
| 918 | req.irq = 32 + i; | 911 | req.irq = TX4927_IRQ_PIC_BEG + 8 + i; |
| 919 | req.flags |= UPF_BUGGY_UART /*HAVE_CTS_LINE*/; | 912 | req.flags |= UPF_BUGGY_UART /*HAVE_CTS_LINE*/; |
| 920 | req.uartclk = 50000000; | 913 | req.uartclk = 50000000; |
| 921 | early_serial_txx9_setup(&req); | 914 | early_serial_txx9_setup(&req); |
diff --git a/arch/mips/tx4938/common/irq.c b/arch/mips/tx4938/common/irq.c index 3a2dbfc25014..c059b899d120 100644 --- a/arch/mips/tx4938/common/irq.c +++ b/arch/mips/tx4938/common/irq.c | |||
| @@ -11,284 +11,21 @@ | |||
| 11 | * | 11 | * |
| 12 | * Support for TX4938 in 2.6 - Manish Lachwani (mlachwani@mvista.com) | 12 | * Support for TX4938 in 2.6 - Manish Lachwani (mlachwani@mvista.com) |
| 13 | */ | 13 | */ |
| 14 | #include <linux/errno.h> | ||
| 15 | #include <linux/init.h> | 14 | #include <linux/init.h> |
| 16 | #include <linux/kernel_stat.h> | ||
| 17 | #include <linux/module.h> | ||
| 18 | #include <linux/signal.h> | ||
| 19 | #include <linux/sched.h> | ||
| 20 | #include <linux/types.h> | ||
| 21 | #include <linux/interrupt.h> | 15 | #include <linux/interrupt.h> |
| 22 | #include <linux/ioport.h> | 16 | #include <asm/irq_cpu.h> |
| 23 | #include <linux/timex.h> | ||
| 24 | #include <linux/slab.h> | ||
| 25 | #include <linux/random.h> | ||
| 26 | #include <linux/irq.h> | ||
| 27 | #include <asm/bitops.h> | ||
| 28 | #include <asm/bootinfo.h> | ||
| 29 | #include <asm/io.h> | ||
| 30 | #include <asm/irq.h> | ||
| 31 | #include <asm/mipsregs.h> | 17 | #include <asm/mipsregs.h> |
| 32 | #include <asm/system.h> | ||
| 33 | #include <asm/wbflush.h> | ||
| 34 | #include <asm/tx4938/rbtx4938.h> | 18 | #include <asm/tx4938/rbtx4938.h> |
| 35 | 19 | ||
| 36 | /**********************************************************************************/ | ||
| 37 | /* Forwad definitions for all pic's */ | ||
| 38 | /**********************************************************************************/ | ||
| 39 | |||
| 40 | static void tx4938_irq_cp0_enable(unsigned int irq); | ||
| 41 | static void tx4938_irq_cp0_disable(unsigned int irq); | ||
| 42 | |||
| 43 | static void tx4938_irq_pic_enable(unsigned int irq); | ||
| 44 | static void tx4938_irq_pic_disable(unsigned int irq); | ||
| 45 | |||
| 46 | /**********************************************************************************/ | ||
| 47 | /* Kernel structs for all pic's */ | ||
| 48 | /**********************************************************************************/ | ||
| 49 | |||
| 50 | #define TX4938_CP0_NAME "TX4938-CP0" | ||
| 51 | static struct irq_chip tx4938_irq_cp0_type = { | ||
| 52 | .name = TX4938_CP0_NAME, | ||
| 53 | .ack = tx4938_irq_cp0_disable, | ||
| 54 | .mask = tx4938_irq_cp0_disable, | ||
| 55 | .mask_ack = tx4938_irq_cp0_disable, | ||
| 56 | .unmask = tx4938_irq_cp0_enable, | ||
| 57 | }; | ||
| 58 | |||
| 59 | #define TX4938_PIC_NAME "TX4938-PIC" | ||
| 60 | static struct irq_chip tx4938_irq_pic_type = { | ||
| 61 | .name = TX4938_PIC_NAME, | ||
| 62 | .ack = tx4938_irq_pic_disable, | ||
| 63 | .mask = tx4938_irq_pic_disable, | ||
| 64 | .mask_ack = tx4938_irq_pic_disable, | ||
| 65 | .unmask = tx4938_irq_pic_enable, | ||
| 66 | }; | ||
| 67 | |||
| 68 | static struct irqaction tx4938_irq_pic_action = { | ||
| 69 | .handler = no_action, | ||
| 70 | .flags = 0, | ||
| 71 | .mask = CPU_MASK_NONE, | ||
| 72 | .name = TX4938_PIC_NAME | ||
| 73 | }; | ||
| 74 | |||
| 75 | /**********************************************************************************/ | ||
| 76 | /* Functions for cp0 */ | ||
| 77 | /**********************************************************************************/ | ||
| 78 | |||
| 79 | #define tx4938_irq_cp0_mask(irq) ( 1 << ( irq-TX4938_IRQ_CP0_BEG+8 ) ) | ||
| 80 | |||
| 81 | static void __init | ||
| 82 | tx4938_irq_cp0_init(void) | ||
| 83 | { | ||
| 84 | int i; | ||
| 85 | |||
| 86 | for (i = TX4938_IRQ_CP0_BEG; i <= TX4938_IRQ_CP0_END; i++) | ||
| 87 | set_irq_chip_and_handler(i, &tx4938_irq_cp0_type, | ||
| 88 | handle_level_irq); | ||
| 89 | } | ||
| 90 | |||
| 91 | static void | ||
| 92 | tx4938_irq_cp0_enable(unsigned int irq) | ||
| 93 | { | ||
| 94 | set_c0_status(tx4938_irq_cp0_mask(irq)); | ||
| 95 | } | ||
| 96 | |||
| 97 | static void | ||
| 98 | tx4938_irq_cp0_disable(unsigned int irq) | ||
| 99 | { | ||
| 100 | clear_c0_status(tx4938_irq_cp0_mask(irq)); | ||
| 101 | } | ||
| 102 | |||
| 103 | /**********************************************************************************/ | ||
| 104 | /* Functions for pic */ | ||
| 105 | /**********************************************************************************/ | ||
| 106 | |||
| 107 | u32 | ||
| 108 | tx4938_irq_pic_addr(int irq) | ||
| 109 | { | ||
| 110 | /* MVMCP -- need to formulize this */ | ||
| 111 | irq -= TX4938_IRQ_PIC_BEG; | ||
| 112 | |||
| 113 | switch (irq) { | ||
| 114 | case 17: | ||
| 115 | case 16: | ||
| 116 | case 1: | ||
| 117 | case 0:{ | ||
| 118 | return (TX4938_MKA(TX4938_IRC_IRLVL0)); | ||
| 119 | } | ||
| 120 | case 19: | ||
| 121 | case 18: | ||
| 122 | case 3: | ||
| 123 | case 2:{ | ||
| 124 | return (TX4938_MKA(TX4938_IRC_IRLVL1)); | ||
| 125 | } | ||
| 126 | case 21: | ||
| 127 | case 20: | ||
| 128 | case 5: | ||
| 129 | case 4:{ | ||
| 130 | return (TX4938_MKA(TX4938_IRC_IRLVL2)); | ||
| 131 | } | ||
| 132 | case 23: | ||
| 133 | case 22: | ||
| 134 | case 7: | ||
| 135 | case 6:{ | ||
| 136 | return (TX4938_MKA(TX4938_IRC_IRLVL3)); | ||
| 137 | } | ||
| 138 | case 25: | ||
| 139 | case 24: | ||
| 140 | case 9: | ||
| 141 | case 8:{ | ||
| 142 | return (TX4938_MKA(TX4938_IRC_IRLVL4)); | ||
| 143 | } | ||
| 144 | case 27: | ||
| 145 | case 26: | ||
| 146 | case 11: | ||
| 147 | case 10:{ | ||
| 148 | return (TX4938_MKA(TX4938_IRC_IRLVL5)); | ||
| 149 | } | ||
| 150 | case 29: | ||
| 151 | case 28: | ||
| 152 | case 13: | ||
| 153 | case 12:{ | ||
| 154 | return (TX4938_MKA(TX4938_IRC_IRLVL6)); | ||
| 155 | } | ||
| 156 | case 31: | ||
| 157 | case 30: | ||
| 158 | case 15: | ||
| 159 | case 14:{ | ||
| 160 | return (TX4938_MKA(TX4938_IRC_IRLVL7)); | ||
| 161 | } | ||
| 162 | } | ||
| 163 | |||
| 164 | return 0; | ||
| 165 | } | ||
| 166 | |||
| 167 | u32 | ||
| 168 | tx4938_irq_pic_mask(int irq) | ||
| 169 | { | ||
| 170 | /* MVMCP -- need to formulize this */ | ||
| 171 | irq -= TX4938_IRQ_PIC_BEG; | ||
| 172 | |||
| 173 | switch (irq) { | ||
| 174 | case 31: | ||
| 175 | case 29: | ||
| 176 | case 27: | ||
| 177 | case 25: | ||
| 178 | case 23: | ||
| 179 | case 21: | ||
| 180 | case 19: | ||
| 181 | case 17:{ | ||
| 182 | return (0x07000000); | ||
| 183 | } | ||
| 184 | case 30: | ||
| 185 | case 28: | ||
| 186 | case 26: | ||
| 187 | case 24: | ||
| 188 | case 22: | ||
| 189 | case 20: | ||
| 190 | case 18: | ||
| 191 | case 16:{ | ||
| 192 | return (0x00070000); | ||
| 193 | } | ||
| 194 | case 15: | ||
| 195 | case 13: | ||
| 196 | case 11: | ||
| 197 | case 9: | ||
| 198 | case 7: | ||
| 199 | case 5: | ||
| 200 | case 3: | ||
| 201 | case 1:{ | ||
| 202 | return (0x00000700); | ||
| 203 | } | ||
| 204 | case 14: | ||
| 205 | case 12: | ||
| 206 | case 10: | ||
| 207 | case 8: | ||
| 208 | case 6: | ||
| 209 | case 4: | ||
| 210 | case 2: | ||
| 211 | case 0:{ | ||
| 212 | return (0x00000007); | ||
| 213 | } | ||
| 214 | } | ||
| 215 | return 0x00000000; | ||
| 216 | } | ||
| 217 | |||
| 218 | static void | ||
| 219 | tx4938_irq_pic_modify(unsigned pic_reg, unsigned clr_bits, unsigned set_bits) | ||
| 220 | { | ||
| 221 | unsigned long val = 0; | ||
| 222 | |||
| 223 | val = TX4938_RD(pic_reg); | ||
| 224 | val &= (~clr_bits); | ||
| 225 | val |= (set_bits); | ||
| 226 | TX4938_WR(pic_reg, val); | ||
| 227 | mmiowb(); | ||
| 228 | TX4938_RD(pic_reg); | ||
| 229 | } | ||
| 230 | |||
| 231 | static void __init | ||
| 232 | tx4938_irq_pic_init(void) | ||
| 233 | { | ||
| 234 | int i; | ||
| 235 | |||
| 236 | for (i = TX4938_IRQ_PIC_BEG; i <= TX4938_IRQ_PIC_END; i++) | ||
| 237 | set_irq_chip_and_handler(i, &tx4938_irq_pic_type, | ||
| 238 | handle_level_irq); | ||
| 239 | |||
| 240 | setup_irq(TX4938_IRQ_NEST_PIC_ON_CP0, &tx4938_irq_pic_action); | ||
| 241 | |||
| 242 | TX4938_WR(0xff1ff640, 0x6); /* irq level mask -- only accept hightest */ | ||
| 243 | TX4938_WR(0xff1ff600, TX4938_RD(0xff1ff600) | 0x1); /* irq enable */ | ||
| 244 | } | ||
| 245 | |||
| 246 | static void | ||
| 247 | tx4938_irq_pic_enable(unsigned int irq) | ||
| 248 | { | ||
| 249 | tx4938_irq_pic_modify(tx4938_irq_pic_addr(irq), 0, | ||
| 250 | tx4938_irq_pic_mask(irq)); | ||
| 251 | } | ||
| 252 | |||
| 253 | static void | ||
| 254 | tx4938_irq_pic_disable(unsigned int irq) | ||
| 255 | { | ||
| 256 | tx4938_irq_pic_modify(tx4938_irq_pic_addr(irq), | ||
| 257 | tx4938_irq_pic_mask(irq), 0); | ||
| 258 | } | ||
| 259 | |||
| 260 | /**********************************************************************************/ | ||
| 261 | /* Main init functions */ | ||
| 262 | /**********************************************************************************/ | ||
| 263 | |||
| 264 | void __init | 20 | void __init |
| 265 | tx4938_irq_init(void) | 21 | tx4938_irq_init(void) |
| 266 | { | 22 | { |
| 267 | tx4938_irq_cp0_init(); | 23 | mips_cpu_irq_init(); |
| 268 | tx4938_irq_pic_init(); | 24 | txx9_irq_init(TX4938_IRC_REG); |
| 25 | set_irq_chained_handler(TX4938_IRQ_NEST_PIC_ON_CP0, handle_simple_irq); | ||
| 269 | } | 26 | } |
| 270 | 27 | ||
| 271 | int | 28 | int toshiba_rbtx4938_irq_nested(int irq); |
| 272 | tx4938_irq_nested(void) | ||
| 273 | { | ||
| 274 | int sw_irq = 0; | ||
| 275 | u32 level2; | ||
| 276 | |||
| 277 | level2 = TX4938_RD(0xff1ff6a0); | ||
| 278 | if ((level2 & 0x10000) == 0) { | ||
| 279 | level2 &= 0x1f; | ||
| 280 | sw_irq = TX4938_IRQ_PIC_BEG + level2; | ||
| 281 | if (sw_irq == 26) { | ||
| 282 | { | ||
| 283 | extern int toshiba_rbtx4938_irq_nested(int sw_irq); | ||
| 284 | sw_irq = toshiba_rbtx4938_irq_nested(sw_irq); | ||
| 285 | } | ||
| 286 | } | ||
| 287 | } | ||
| 288 | |||
| 289 | wbflush(); | ||
| 290 | return sw_irq; | ||
| 291 | } | ||
| 292 | 29 | ||
| 293 | asmlinkage void plat_irq_dispatch(void) | 30 | asmlinkage void plat_irq_dispatch(void) |
| 294 | { | 31 | { |
| @@ -297,8 +34,10 @@ asmlinkage void plat_irq_dispatch(void) | |||
| 297 | if (pending & STATUSF_IP7) | 34 | if (pending & STATUSF_IP7) |
| 298 | do_IRQ(TX4938_IRQ_CPU_TIMER); | 35 | do_IRQ(TX4938_IRQ_CPU_TIMER); |
| 299 | else if (pending & STATUSF_IP2) { | 36 | else if (pending & STATUSF_IP2) { |
| 300 | int irq = tx4938_irq_nested(); | 37 | int irq = txx9_irq(); |
| 301 | if (irq) | 38 | if (irq == TX4938_IRQ_PIC_BEG + TX4938_IR_INT(0)) |
| 39 | irq = toshiba_rbtx4938_irq_nested(irq); | ||
| 40 | if (irq >= 0) | ||
| 302 | do_IRQ(irq); | 41 | do_IRQ(irq); |
| 303 | else | 42 | else |
| 304 | spurious_interrupt(); | 43 | spurious_interrupt(); |
diff --git a/arch/mips/tx4938/toshiba_rbtx4938/irq.c b/arch/mips/tx4938/toshiba_rbtx4938/irq.c index 91aea7aff515..f00185017e80 100644 --- a/arch/mips/tx4938/toshiba_rbtx4938/irq.c +++ b/arch/mips/tx4938/toshiba_rbtx4938/irq.c | |||
| @@ -181,7 +181,7 @@ void __init arch_init_irq(void) | |||
| 181 | tx4938_irq_init(); | 181 | tx4938_irq_init(); |
| 182 | toshiba_rbtx4938_irq_ioc_init(); | 182 | toshiba_rbtx4938_irq_ioc_init(); |
| 183 | /* Onboard 10M Ether: High Active */ | 183 | /* Onboard 10M Ether: High Active */ |
| 184 | TX4938_WR(TX4938_MKA(TX4938_IRC_IRDM0), 0x00000040); | 184 | set_irq_type(RBTX4938_IRQ_ETHER, IRQF_TRIGGER_HIGH); |
| 185 | 185 | ||
| 186 | wbflush(); | 186 | wbflush(); |
| 187 | } | 187 | } |
diff --git a/arch/mips/tx4938/toshiba_rbtx4938/setup.c b/arch/mips/tx4938/toshiba_rbtx4938/setup.c index f9ad482749e4..57f3c705d082 100644 --- a/arch/mips/tx4938/toshiba_rbtx4938/setup.c +++ b/arch/mips/tx4938/toshiba_rbtx4938/setup.c | |||
| @@ -773,10 +773,6 @@ void __init tx4938_board_setup(void) | |||
| 773 | txboard_add_phys_region(base, size); | 773 | txboard_add_phys_region(base, size); |
| 774 | } | 774 | } |
| 775 | 775 | ||
| 776 | /* IRC */ | ||
| 777 | /* disable interrupt control */ | ||
| 778 | tx4938_ircptr->cer = 0; | ||
| 779 | |||
| 780 | /* TMR */ | 776 | /* TMR */ |
| 781 | /* disable all timers */ | 777 | /* disable all timers */ |
| 782 | for (i = 0; i < TX4938_NR_TMR; i++) { | 778 | for (i = 0; i < TX4938_NR_TMR; i++) { |
| @@ -875,9 +871,6 @@ void __init toshiba_rbtx4938_setup(void) | |||
| 875 | if (txx9_master_clock == 0) | 871 | if (txx9_master_clock == 0) |
| 876 | txx9_master_clock = 25000000; /* 25MHz */ | 872 | txx9_master_clock = 25000000; /* 25MHz */ |
| 877 | tx4938_board_setup(); | 873 | tx4938_board_setup(); |
| 878 | /* setup irq stuff */ | ||
| 879 | TX4938_WR(TX4938_MKA(TX4938_IRC_IRDM0), 0x00000000); /* irq trigger */ | ||
| 880 | TX4938_WR(TX4938_MKA(TX4938_IRC_IRDM1), 0x00000000); /* irq trigger */ | ||
| 881 | /* setup serial stuff */ | 874 | /* setup serial stuff */ |
| 882 | TX4938_WR(0xff1ff314, 0x00000000); /* h/w flow control off */ | 875 | TX4938_WR(0xff1ff314, 0x00000000); /* h/w flow control off */ |
| 883 | TX4938_WR(0xff1ff414, 0x00000000); /* h/w flow control off */ | 876 | TX4938_WR(0xff1ff414, 0x00000000); /* h/w flow control off */ |
| @@ -897,7 +890,7 @@ void __init toshiba_rbtx4938_setup(void) | |||
| 897 | req.iotype = UPIO_MEM; | 890 | req.iotype = UPIO_MEM; |
| 898 | req.membase = (char *)(0xff1ff300 + i * 0x100); | 891 | req.membase = (char *)(0xff1ff300 + i * 0x100); |
| 899 | req.mapbase = 0xff1ff300 + i * 0x100; | 892 | req.mapbase = 0xff1ff300 + i * 0x100; |
| 900 | req.irq = 32 + i; | 893 | req.irq = RBTX4938_IRQ_IRC_SIO(i); |
| 901 | req.flags |= UPF_BUGGY_UART /*HAVE_CTS_LINE*/; | 894 | req.flags |= UPF_BUGGY_UART /*HAVE_CTS_LINE*/; |
| 902 | req.uartclk = 50000000; | 895 | req.uartclk = 50000000; |
| 903 | early_serial_txx9_setup(&req); | 896 | early_serial_txx9_setup(&req); |
