diff options
Diffstat (limited to 'arch/alpha/kernel/sys_marvel.c')
| -rw-r--r-- | arch/alpha/kernel/sys_marvel.c | 42 |
1 files changed, 19 insertions, 23 deletions
diff --git a/arch/alpha/kernel/sys_marvel.c b/arch/alpha/kernel/sys_marvel.c index 2bfc9f1b1ddc..e61910734e41 100644 --- a/arch/alpha/kernel/sys_marvel.c +++ b/arch/alpha/kernel/sys_marvel.c | |||
| @@ -104,9 +104,10 @@ io7_get_irq_ctl(unsigned int irq, struct io7 **pio7) | |||
| 104 | } | 104 | } |
| 105 | 105 | ||
| 106 | static void | 106 | static void |
| 107 | io7_enable_irq(unsigned int irq) | 107 | io7_enable_irq(struct irq_data *d) |
| 108 | { | 108 | { |
| 109 | volatile unsigned long *ctl; | 109 | volatile unsigned long *ctl; |
| 110 | unsigned int irq = d->irq; | ||
| 110 | struct io7 *io7; | 111 | struct io7 *io7; |
| 111 | 112 | ||
| 112 | ctl = io7_get_irq_ctl(irq, &io7); | 113 | ctl = io7_get_irq_ctl(irq, &io7); |
| @@ -115,7 +116,7 @@ io7_enable_irq(unsigned int irq) | |||
| 115 | __func__, irq); | 116 | __func__, irq); |
| 116 | return; | 117 | return; |
| 117 | } | 118 | } |
| 118 | 119 | ||
| 119 | spin_lock(&io7->irq_lock); | 120 | spin_lock(&io7->irq_lock); |
| 120 | *ctl |= 1UL << 24; | 121 | *ctl |= 1UL << 24; |
| 121 | mb(); | 122 | mb(); |
| @@ -124,9 +125,10 @@ io7_enable_irq(unsigned int irq) | |||
| 124 | } | 125 | } |
| 125 | 126 | ||
| 126 | static void | 127 | static void |
| 127 | io7_disable_irq(unsigned int irq) | 128 | io7_disable_irq(struct irq_data *d) |
| 128 | { | 129 | { |
| 129 | volatile unsigned long *ctl; | 130 | volatile unsigned long *ctl; |
| 131 | unsigned int irq = d->irq; | ||
| 130 | struct io7 *io7; | 132 | struct io7 *io7; |
| 131 | 133 | ||
| 132 | ctl = io7_get_irq_ctl(irq, &io7); | 134 | ctl = io7_get_irq_ctl(irq, &io7); |
| @@ -135,7 +137,7 @@ io7_disable_irq(unsigned int irq) | |||
| 135 | __func__, irq); | 137 | __func__, irq); |
| 136 | return; | 138 | return; |
| 137 | } | 139 | } |
| 138 | 140 | ||
| 139 | spin_lock(&io7->irq_lock); | 141 | spin_lock(&io7->irq_lock); |
| 140 | *ctl &= ~(1UL << 24); | 142 | *ctl &= ~(1UL << 24); |
| 141 | mb(); | 143 | mb(); |
| @@ -144,35 +146,29 @@ io7_disable_irq(unsigned int irq) | |||
| 144 | } | 146 | } |
| 145 | 147 | ||
| 146 | static void | 148 | static void |
| 147 | marvel_irq_noop(unsigned int irq) | 149 | marvel_irq_noop(struct irq_data *d) |
| 148 | { | 150 | { |
| 149 | return; | 151 | return; |
| 150 | } | ||
| 151 | |||
| 152 | static unsigned int | ||
| 153 | marvel_irq_noop_return(unsigned int irq) | ||
| 154 | { | ||
| 155 | return 0; | ||
| 156 | } | 152 | } |
| 157 | 153 | ||
| 158 | static struct irq_chip marvel_legacy_irq_type = { | 154 | static struct irq_chip marvel_legacy_irq_type = { |
| 159 | .name = "LEGACY", | 155 | .name = "LEGACY", |
| 160 | .mask = marvel_irq_noop, | 156 | .irq_mask = marvel_irq_noop, |
| 161 | .unmask = marvel_irq_noop, | 157 | .irq_unmask = marvel_irq_noop, |
| 162 | }; | 158 | }; |
| 163 | 159 | ||
| 164 | static struct irq_chip io7_lsi_irq_type = { | 160 | static struct irq_chip io7_lsi_irq_type = { |
| 165 | .name = "LSI", | 161 | .name = "LSI", |
| 166 | .unmask = io7_enable_irq, | 162 | .irq_unmask = io7_enable_irq, |
| 167 | .mask = io7_disable_irq, | 163 | .irq_mask = io7_disable_irq, |
| 168 | .mask_ack = io7_disable_irq, | 164 | .irq_mask_ack = io7_disable_irq, |
| 169 | }; | 165 | }; |
| 170 | 166 | ||
| 171 | static struct irq_chip io7_msi_irq_type = { | 167 | static struct irq_chip io7_msi_irq_type = { |
| 172 | .name = "MSI", | 168 | .name = "MSI", |
| 173 | .unmask = io7_enable_irq, | 169 | .irq_unmask = io7_enable_irq, |
| 174 | .mask = io7_disable_irq, | 170 | .irq_mask = io7_disable_irq, |
| 175 | .ack = marvel_irq_noop, | 171 | .irq_ack = marvel_irq_noop, |
| 176 | }; | 172 | }; |
| 177 | 173 | ||
| 178 | static void | 174 | static void |
| @@ -280,8 +276,8 @@ init_io7_irqs(struct io7 *io7, | |||
| 280 | 276 | ||
| 281 | /* Set up the lsi irqs. */ | 277 | /* Set up the lsi irqs. */ |
| 282 | for (i = 0; i < 128; ++i) { | 278 | for (i = 0; i < 128; ++i) { |
| 283 | irq_to_desc(base + i)->status |= IRQ_LEVEL; | ||
| 284 | set_irq_chip_and_handler(base + i, lsi_ops, handle_level_irq); | 279 | set_irq_chip_and_handler(base + i, lsi_ops, handle_level_irq); |
| 280 | irq_set_status_flags(i, IRQ_LEVEL); | ||
| 285 | } | 281 | } |
| 286 | 282 | ||
| 287 | /* Disable the implemented irqs in hardware. */ | 283 | /* Disable the implemented irqs in hardware. */ |
| @@ -294,8 +290,8 @@ init_io7_irqs(struct io7 *io7, | |||
| 294 | 290 | ||
| 295 | /* Set up the msi irqs. */ | 291 | /* Set up the msi irqs. */ |
| 296 | for (i = 128; i < (128 + 512); ++i) { | 292 | for (i = 128; i < (128 + 512); ++i) { |
| 297 | irq_to_desc(base + i)->status |= IRQ_LEVEL; | ||
| 298 | set_irq_chip_and_handler(base + i, msi_ops, handle_level_irq); | 293 | set_irq_chip_and_handler(base + i, msi_ops, handle_level_irq); |
| 294 | irq_set_status_flags(i, IRQ_LEVEL); | ||
| 299 | } | 295 | } |
| 300 | 296 | ||
| 301 | for (i = 0; i < 16; ++i) | 297 | for (i = 0; i < 16; ++i) |
