aboutsummaryrefslogtreecommitdiffstats
path: root/arch/alpha/kernel/sys_marvel.c
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
commitc71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch)
treeecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /arch/alpha/kernel/sys_marvel.c
parentea53c912f8a86a8567697115b6a0d8152beee5c8 (diff)
parent6a00f206debf8a5c8899055726ad127dbeeed098 (diff)
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts: litmus/sched_cedf.c
Diffstat (limited to 'arch/alpha/kernel/sys_marvel.c')
-rw-r--r--arch/alpha/kernel/sys_marvel.c72
1 files changed, 22 insertions, 50 deletions
diff --git a/arch/alpha/kernel/sys_marvel.c b/arch/alpha/kernel/sys_marvel.c
index 0bb3b5c4f693..388b99d1779d 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
106static void 106static void
107io7_enable_irq(unsigned int irq) 107io7_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
126static void 127static void
127io7_disable_irq(unsigned int irq) 128io7_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();
@@ -143,60 +145,30 @@ io7_disable_irq(unsigned int irq)
143 spin_unlock(&io7->irq_lock); 145 spin_unlock(&io7->irq_lock);
144} 146}
145 147
146static unsigned int
147io7_startup_irq(unsigned int irq)
148{
149 io7_enable_irq(irq);
150 return 0; /* never anything pending */
151}
152
153static void 148static void
154io7_end_irq(unsigned int irq) 149marvel_irq_noop(struct irq_data *d)
155{ 150{
156 if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) 151 return;
157 io7_enable_irq(irq);
158}
159
160static void
161marvel_irq_noop(unsigned int irq)
162{
163 return;
164}
165
166static unsigned int
167marvel_irq_noop_return(unsigned int irq)
168{
169 return 0;
170} 152}
171 153
172static struct irq_chip marvel_legacy_irq_type = { 154static struct irq_chip marvel_legacy_irq_type = {
173 .name = "LEGACY", 155 .name = "LEGACY",
174 .startup = marvel_irq_noop_return, 156 .irq_mask = marvel_irq_noop,
175 .shutdown = marvel_irq_noop, 157 .irq_unmask = marvel_irq_noop,
176 .enable = marvel_irq_noop,
177 .disable = marvel_irq_noop,
178 .ack = marvel_irq_noop,
179 .end = marvel_irq_noop,
180}; 158};
181 159
182static struct irq_chip io7_lsi_irq_type = { 160static struct irq_chip io7_lsi_irq_type = {
183 .name = "LSI", 161 .name = "LSI",
184 .startup = io7_startup_irq, 162 .irq_unmask = io7_enable_irq,
185 .shutdown = io7_disable_irq, 163 .irq_mask = io7_disable_irq,
186 .enable = io7_enable_irq, 164 .irq_mask_ack = io7_disable_irq,
187 .disable = io7_disable_irq,
188 .ack = io7_disable_irq,
189 .end = io7_end_irq,
190}; 165};
191 166
192static struct irq_chip io7_msi_irq_type = { 167static struct irq_chip io7_msi_irq_type = {
193 .name = "MSI", 168 .name = "MSI",
194 .startup = io7_startup_irq, 169 .irq_unmask = io7_enable_irq,
195 .shutdown = io7_disable_irq, 170 .irq_mask = io7_disable_irq,
196 .enable = io7_enable_irq, 171 .irq_ack = marvel_irq_noop,
197 .disable = io7_disable_irq,
198 .ack = marvel_irq_noop,
199 .end = io7_end_irq,
200}; 172};
201 173
202static void 174static void
@@ -304,8 +276,8 @@ init_io7_irqs(struct io7 *io7,
304 276
305 /* Set up the lsi irqs. */ 277 /* Set up the lsi irqs. */
306 for (i = 0; i < 128; ++i) { 278 for (i = 0; i < 128; ++i) {
307 irq_desc[base + i].status = IRQ_DISABLED | IRQ_LEVEL; 279 irq_set_chip_and_handler(base + i, lsi_ops, handle_level_irq);
308 irq_desc[base + i].chip = lsi_ops; 280 irq_set_status_flags(i, IRQ_LEVEL);
309 } 281 }
310 282
311 /* Disable the implemented irqs in hardware. */ 283 /* Disable the implemented irqs in hardware. */
@@ -318,8 +290,8 @@ init_io7_irqs(struct io7 *io7,
318 290
319 /* Set up the msi irqs. */ 291 /* Set up the msi irqs. */
320 for (i = 128; i < (128 + 512); ++i) { 292 for (i = 128; i < (128 + 512); ++i) {
321 irq_desc[base + i].status = IRQ_DISABLED | IRQ_LEVEL; 293 irq_set_chip_and_handler(base + i, msi_ops, handle_level_irq);
322 irq_desc[base + i].chip = msi_ops; 294 irq_set_status_flags(i, IRQ_LEVEL);
323 } 295 }
324 296
325 for (i = 0; i < 16; ++i) 297 for (i = 0; i < 16; ++i)
@@ -336,8 +308,8 @@ marvel_init_irq(void)
336 308
337 /* Reserve the legacy irqs. */ 309 /* Reserve the legacy irqs. */
338 for (i = 0; i < 16; ++i) { 310 for (i = 0; i < 16; ++i) {
339 irq_desc[i].status = IRQ_DISABLED; 311 irq_set_chip_and_handler(i, &marvel_legacy_irq_type,
340 irq_desc[i].chip = &marvel_legacy_irq_type; 312 handle_level_irq);
341 } 313 }
342 314
343 /* Init the io7 irqs. */ 315 /* Init the io7 irqs. */