aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/platforms/52xx/media5200.c21
-rw-r--r--arch/powerpc/platforms/52xx/mpc52xx_gpt.c26
-rw-r--r--arch/powerpc/platforms/52xx/mpc52xx_pic.c80
3 files changed, 64 insertions, 63 deletions
diff --git a/arch/powerpc/platforms/52xx/media5200.c b/arch/powerpc/platforms/52xx/media5200.c
index 2c7780cb68e5..2bd1e6cf1f58 100644
--- a/arch/powerpc/platforms/52xx/media5200.c
+++ b/arch/powerpc/platforms/52xx/media5200.c
@@ -49,45 +49,46 @@ struct media5200_irq {
49}; 49};
50struct media5200_irq media5200_irq; 50struct media5200_irq media5200_irq;
51 51
52static void media5200_irq_unmask(unsigned int virq) 52static void media5200_irq_unmask(struct irq_data *d)
53{ 53{
54 unsigned long flags; 54 unsigned long flags;
55 u32 val; 55 u32 val;
56 56
57 spin_lock_irqsave(&media5200_irq.lock, flags); 57 spin_lock_irqsave(&media5200_irq.lock, flags);
58 val = in_be32(media5200_irq.regs + MEDIA5200_IRQ_ENABLE); 58 val = in_be32(media5200_irq.regs + MEDIA5200_IRQ_ENABLE);
59 val |= 1 << (MEDIA5200_IRQ_SHIFT + irq_map[virq].hwirq); 59 val |= 1 << (MEDIA5200_IRQ_SHIFT + irq_map[d->irq].hwirq);
60 out_be32(media5200_irq.regs + MEDIA5200_IRQ_ENABLE, val); 60 out_be32(media5200_irq.regs + MEDIA5200_IRQ_ENABLE, val);
61 spin_unlock_irqrestore(&media5200_irq.lock, flags); 61 spin_unlock_irqrestore(&media5200_irq.lock, flags);
62} 62}
63 63
64static void media5200_irq_mask(unsigned int virq) 64static void media5200_irq_mask(struct irq_data *d)
65{ 65{
66 unsigned long flags; 66 unsigned long flags;
67 u32 val; 67 u32 val;
68 68
69 spin_lock_irqsave(&media5200_irq.lock, flags); 69 spin_lock_irqsave(&media5200_irq.lock, flags);
70 val = in_be32(media5200_irq.regs + MEDIA5200_IRQ_ENABLE); 70 val = in_be32(media5200_irq.regs + MEDIA5200_IRQ_ENABLE);
71 val &= ~(1 << (MEDIA5200_IRQ_SHIFT + irq_map[virq].hwirq)); 71 val &= ~(1 << (MEDIA5200_IRQ_SHIFT + irq_map[d->irq].hwirq));
72 out_be32(media5200_irq.regs + MEDIA5200_IRQ_ENABLE, val); 72 out_be32(media5200_irq.regs + MEDIA5200_IRQ_ENABLE, val);
73 spin_unlock_irqrestore(&media5200_irq.lock, flags); 73 spin_unlock_irqrestore(&media5200_irq.lock, flags);
74} 74}
75 75
76static struct irq_chip media5200_irq_chip = { 76static struct irq_chip media5200_irq_chip = {
77 .name = "Media5200 FPGA", 77 .name = "Media5200 FPGA",
78 .unmask = media5200_irq_unmask, 78 .irq_unmask = media5200_irq_unmask,
79 .mask = media5200_irq_mask, 79 .irq_mask = media5200_irq_mask,
80 .mask_ack = media5200_irq_mask, 80 .irq_mask_ack = media5200_irq_mask,
81}; 81};
82 82
83void media5200_irq_cascade(unsigned int virq, struct irq_desc *desc) 83void media5200_irq_cascade(unsigned int virq, struct irq_desc *desc)
84{ 84{
85 struct irq_chip *chip = get_irq_desc_chip(desc);
85 int sub_virq, val; 86 int sub_virq, val;
86 u32 status, enable; 87 u32 status, enable;
87 88
88 /* Mask off the cascaded IRQ */ 89 /* Mask off the cascaded IRQ */
89 raw_spin_lock(&desc->lock); 90 raw_spin_lock(&desc->lock);
90 desc->chip->mask(virq); 91 chip->irq_mask(&desc->irq_data);
91 raw_spin_unlock(&desc->lock); 92 raw_spin_unlock(&desc->lock);
92 93
93 /* Ask the FPGA for IRQ status. If 'val' is 0, then no irqs 94 /* Ask the FPGA for IRQ status. If 'val' is 0, then no irqs
@@ -105,9 +106,9 @@ void media5200_irq_cascade(unsigned int virq, struct irq_desc *desc)
105 106
106 /* Processing done; can reenable the cascade now */ 107 /* Processing done; can reenable the cascade now */
107 raw_spin_lock(&desc->lock); 108 raw_spin_lock(&desc->lock);
108 desc->chip->ack(virq); 109 chip->irq_ack(&desc->irq_data);
109 if (!(desc->status & IRQ_DISABLED)) 110 if (!(desc->status & IRQ_DISABLED))
110 desc->chip->unmask(virq); 111 chip->irq_unmask(&desc->irq_data);
111 raw_spin_unlock(&desc->lock); 112 raw_spin_unlock(&desc->lock);
112} 113}
113 114
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_gpt.c b/arch/powerpc/platforms/52xx/mpc52xx_gpt.c
index e0d703c7fdf7..c9290d8289d5 100644
--- a/arch/powerpc/platforms/52xx/mpc52xx_gpt.c
+++ b/arch/powerpc/platforms/52xx/mpc52xx_gpt.c
@@ -135,9 +135,9 @@ DEFINE_MUTEX(mpc52xx_gpt_list_mutex);
135 * Cascaded interrupt controller hooks 135 * Cascaded interrupt controller hooks
136 */ 136 */
137 137
138static void mpc52xx_gpt_irq_unmask(unsigned int virq) 138static void mpc52xx_gpt_irq_unmask(struct irq_data *d)
139{ 139{
140 struct mpc52xx_gpt_priv *gpt = get_irq_chip_data(virq); 140 struct mpc52xx_gpt_priv *gpt = irq_data_get_irq_chip_data(d);
141 unsigned long flags; 141 unsigned long flags;
142 142
143 spin_lock_irqsave(&gpt->lock, flags); 143 spin_lock_irqsave(&gpt->lock, flags);
@@ -145,9 +145,9 @@ static void mpc52xx_gpt_irq_unmask(unsigned int virq)
145 spin_unlock_irqrestore(&gpt->lock, flags); 145 spin_unlock_irqrestore(&gpt->lock, flags);
146} 146}
147 147
148static void mpc52xx_gpt_irq_mask(unsigned int virq) 148static void mpc52xx_gpt_irq_mask(struct irq_data *d)
149{ 149{
150 struct mpc52xx_gpt_priv *gpt = get_irq_chip_data(virq); 150 struct mpc52xx_gpt_priv *gpt = irq_data_get_irq_chip_data(d);
151 unsigned long flags; 151 unsigned long flags;
152 152
153 spin_lock_irqsave(&gpt->lock, flags); 153 spin_lock_irqsave(&gpt->lock, flags);
@@ -155,20 +155,20 @@ static void mpc52xx_gpt_irq_mask(unsigned int virq)
155 spin_unlock_irqrestore(&gpt->lock, flags); 155 spin_unlock_irqrestore(&gpt->lock, flags);
156} 156}
157 157
158static void mpc52xx_gpt_irq_ack(unsigned int virq) 158static void mpc52xx_gpt_irq_ack(struct irq_data *d)
159{ 159{
160 struct mpc52xx_gpt_priv *gpt = get_irq_chip_data(virq); 160 struct mpc52xx_gpt_priv *gpt = irq_data_get_irq_chip_data(d);
161 161
162 out_be32(&gpt->regs->status, MPC52xx_GPT_STATUS_IRQMASK); 162 out_be32(&gpt->regs->status, MPC52xx_GPT_STATUS_IRQMASK);
163} 163}
164 164
165static int mpc52xx_gpt_irq_set_type(unsigned int virq, unsigned int flow_type) 165static int mpc52xx_gpt_irq_set_type(struct irq_data *d, unsigned int flow_type)
166{ 166{
167 struct mpc52xx_gpt_priv *gpt = get_irq_chip_data(virq); 167 struct mpc52xx_gpt_priv *gpt = irq_data_get_irq_chip_data(d);
168 unsigned long flags; 168 unsigned long flags;
169 u32 reg; 169 u32 reg;
170 170
171 dev_dbg(gpt->dev, "%s: virq=%i type=%x\n", __func__, virq, flow_type); 171 dev_dbg(gpt->dev, "%s: virq=%i type=%x\n", __func__, d->irq, flow_type);
172 172
173 spin_lock_irqsave(&gpt->lock, flags); 173 spin_lock_irqsave(&gpt->lock, flags);
174 reg = in_be32(&gpt->regs->mode) & ~MPC52xx_GPT_MODE_ICT_MASK; 174 reg = in_be32(&gpt->regs->mode) & ~MPC52xx_GPT_MODE_ICT_MASK;
@@ -184,10 +184,10 @@ static int mpc52xx_gpt_irq_set_type(unsigned int virq, unsigned int flow_type)
184 184
185static struct irq_chip mpc52xx_gpt_irq_chip = { 185static struct irq_chip mpc52xx_gpt_irq_chip = {
186 .name = "MPC52xx GPT", 186 .name = "MPC52xx GPT",
187 .unmask = mpc52xx_gpt_irq_unmask, 187 .irq_unmask = mpc52xx_gpt_irq_unmask,
188 .mask = mpc52xx_gpt_irq_mask, 188 .irq_mask = mpc52xx_gpt_irq_mask,
189 .ack = mpc52xx_gpt_irq_ack, 189 .irq_ack = mpc52xx_gpt_irq_ack,
190 .set_type = mpc52xx_gpt_irq_set_type, 190 .irq_set_type = mpc52xx_gpt_irq_set_type,
191}; 191};
192 192
193void mpc52xx_gpt_irq_cascade(unsigned int virq, struct irq_desc *desc) 193void mpc52xx_gpt_irq_cascade(unsigned int virq, struct irq_desc *desc)
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_pic.c b/arch/powerpc/platforms/52xx/mpc52xx_pic.c
index 4bf4bf7b063e..9f3ed582d082 100644
--- a/arch/powerpc/platforms/52xx/mpc52xx_pic.c
+++ b/arch/powerpc/platforms/52xx/mpc52xx_pic.c
@@ -155,47 +155,47 @@ static inline void io_be_clrbit(u32 __iomem *addr, int bitno)
155/* 155/*
156 * IRQ[0-3] interrupt irq_chip 156 * IRQ[0-3] interrupt irq_chip
157 */ 157 */
158static void mpc52xx_extirq_mask(unsigned int virq) 158static void mpc52xx_extirq_mask(struct irq_data *d)
159{ 159{
160 int irq; 160 int irq;
161 int l2irq; 161 int l2irq;
162 162
163 irq = irq_map[virq].hwirq; 163 irq = irq_map[d->irq].hwirq;
164 l2irq = irq & MPC52xx_IRQ_L2_MASK; 164 l2irq = irq & MPC52xx_IRQ_L2_MASK;
165 165
166 io_be_clrbit(&intr->ctrl, 11 - l2irq); 166 io_be_clrbit(&intr->ctrl, 11 - l2irq);
167} 167}
168 168
169static void mpc52xx_extirq_unmask(unsigned int virq) 169static void mpc52xx_extirq_unmask(struct irq_data *d)
170{ 170{
171 int irq; 171 int irq;
172 int l2irq; 172 int l2irq;
173 173
174 irq = irq_map[virq].hwirq; 174 irq = irq_map[d->irq].hwirq;
175 l2irq = irq & MPC52xx_IRQ_L2_MASK; 175 l2irq = irq & MPC52xx_IRQ_L2_MASK;
176 176
177 io_be_setbit(&intr->ctrl, 11 - l2irq); 177 io_be_setbit(&intr->ctrl, 11 - l2irq);
178} 178}
179 179
180static void mpc52xx_extirq_ack(unsigned int virq) 180static void mpc52xx_extirq_ack(struct irq_data *d)
181{ 181{
182 int irq; 182 int irq;
183 int l2irq; 183 int l2irq;
184 184
185 irq = irq_map[virq].hwirq; 185 irq = irq_map[d->irq].hwirq;
186 l2irq = irq & MPC52xx_IRQ_L2_MASK; 186 l2irq = irq & MPC52xx_IRQ_L2_MASK;
187 187
188 io_be_setbit(&intr->ctrl, 27-l2irq); 188 io_be_setbit(&intr->ctrl, 27-l2irq);
189} 189}
190 190
191static int mpc52xx_extirq_set_type(unsigned int virq, unsigned int flow_type) 191static int mpc52xx_extirq_set_type(struct irq_data *d, unsigned int flow_type)
192{ 192{
193 u32 ctrl_reg, type; 193 u32 ctrl_reg, type;
194 int irq; 194 int irq;
195 int l2irq; 195 int l2irq;
196 void *handler = handle_level_irq; 196 void *handler = handle_level_irq;
197 197
198 irq = irq_map[virq].hwirq; 198 irq = irq_map[d->irq].hwirq;
199 l2irq = irq & MPC52xx_IRQ_L2_MASK; 199 l2irq = irq & MPC52xx_IRQ_L2_MASK;
200 200
201 pr_debug("%s: irq=%x. l2=%d flow_type=%d\n", __func__, irq, l2irq, flow_type); 201 pr_debug("%s: irq=%x. l2=%d flow_type=%d\n", __func__, irq, l2irq, flow_type);
@@ -214,44 +214,44 @@ static int mpc52xx_extirq_set_type(unsigned int virq, unsigned int flow_type)
214 ctrl_reg |= (type << (22 - (l2irq * 2))); 214 ctrl_reg |= (type << (22 - (l2irq * 2)));
215 out_be32(&intr->ctrl, ctrl_reg); 215 out_be32(&intr->ctrl, ctrl_reg);
216 216
217 __set_irq_handler_unlocked(virq, handler); 217 __set_irq_handler_unlocked(d->irq, handler);
218 218
219 return 0; 219 return 0;
220} 220}
221 221
222static struct irq_chip mpc52xx_extirq_irqchip = { 222static struct irq_chip mpc52xx_extirq_irqchip = {
223 .name = "MPC52xx External", 223 .name = "MPC52xx External",
224 .mask = mpc52xx_extirq_mask, 224 .irq_mask = mpc52xx_extirq_mask,
225 .unmask = mpc52xx_extirq_unmask, 225 .irq_unmask = mpc52xx_extirq_unmask,
226 .ack = mpc52xx_extirq_ack, 226 .irq_ack = mpc52xx_extirq_ack,
227 .set_type = mpc52xx_extirq_set_type, 227 .irq_set_type = mpc52xx_extirq_set_type,
228}; 228};
229 229
230/* 230/*
231 * Main interrupt irq_chip 231 * Main interrupt irq_chip
232 */ 232 */
233static int mpc52xx_null_set_type(unsigned int virq, unsigned int flow_type) 233static int mpc52xx_null_set_type(struct irq_data *d, unsigned int flow_type)
234{ 234{
235 return 0; /* Do nothing so that the sense mask will get updated */ 235 return 0; /* Do nothing so that the sense mask will get updated */
236} 236}
237 237
238static void mpc52xx_main_mask(unsigned int virq) 238static void mpc52xx_main_mask(struct irq_data *d)
239{ 239{
240 int irq; 240 int irq;
241 int l2irq; 241 int l2irq;
242 242
243 irq = irq_map[virq].hwirq; 243 irq = irq_map[d->irq].hwirq;
244 l2irq = irq & MPC52xx_IRQ_L2_MASK; 244 l2irq = irq & MPC52xx_IRQ_L2_MASK;
245 245
246 io_be_setbit(&intr->main_mask, 16 - l2irq); 246 io_be_setbit(&intr->main_mask, 16 - l2irq);
247} 247}
248 248
249static void mpc52xx_main_unmask(unsigned int virq) 249static void mpc52xx_main_unmask(struct irq_data *d)
250{ 250{
251 int irq; 251 int irq;
252 int l2irq; 252 int l2irq;
253 253
254 irq = irq_map[virq].hwirq; 254 irq = irq_map[d->irq].hwirq;
255 l2irq = irq & MPC52xx_IRQ_L2_MASK; 255 l2irq = irq & MPC52xx_IRQ_L2_MASK;
256 256
257 io_be_clrbit(&intr->main_mask, 16 - l2irq); 257 io_be_clrbit(&intr->main_mask, 16 - l2irq);
@@ -259,32 +259,32 @@ static void mpc52xx_main_unmask(unsigned int virq)
259 259
260static struct irq_chip mpc52xx_main_irqchip = { 260static struct irq_chip mpc52xx_main_irqchip = {
261 .name = "MPC52xx Main", 261 .name = "MPC52xx Main",
262 .mask = mpc52xx_main_mask, 262 .irq_mask = mpc52xx_main_mask,
263 .mask_ack = mpc52xx_main_mask, 263 .irq_mask_ack = mpc52xx_main_mask,
264 .unmask = mpc52xx_main_unmask, 264 .irq_unmask = mpc52xx_main_unmask,
265 .set_type = mpc52xx_null_set_type, 265 .irq_set_type = mpc52xx_null_set_type,
266}; 266};
267 267
268/* 268/*
269 * Peripherals interrupt irq_chip 269 * Peripherals interrupt irq_chip
270 */ 270 */
271static void mpc52xx_periph_mask(unsigned int virq) 271static void mpc52xx_periph_mask(struct irq_data *d)
272{ 272{
273 int irq; 273 int irq;
274 int l2irq; 274 int l2irq;
275 275
276 irq = irq_map[virq].hwirq; 276 irq = irq_map[d->irq].hwirq;
277 l2irq = irq & MPC52xx_IRQ_L2_MASK; 277 l2irq = irq & MPC52xx_IRQ_L2_MASK;
278 278
279 io_be_setbit(&intr->per_mask, 31 - l2irq); 279 io_be_setbit(&intr->per_mask, 31 - l2irq);
280} 280}
281 281
282static void mpc52xx_periph_unmask(unsigned int virq) 282static void mpc52xx_periph_unmask(struct irq_data *d)
283{ 283{
284 int irq; 284 int irq;
285 int l2irq; 285 int l2irq;
286 286
287 irq = irq_map[virq].hwirq; 287 irq = irq_map[d->irq].hwirq;
288 l2irq = irq & MPC52xx_IRQ_L2_MASK; 288 l2irq = irq & MPC52xx_IRQ_L2_MASK;
289 289
290 io_be_clrbit(&intr->per_mask, 31 - l2irq); 290 io_be_clrbit(&intr->per_mask, 31 - l2irq);
@@ -292,43 +292,43 @@ static void mpc52xx_periph_unmask(unsigned int virq)
292 292
293static struct irq_chip mpc52xx_periph_irqchip = { 293static struct irq_chip mpc52xx_periph_irqchip = {
294 .name = "MPC52xx Peripherals", 294 .name = "MPC52xx Peripherals",
295 .mask = mpc52xx_periph_mask, 295 .irq_mask = mpc52xx_periph_mask,
296 .mask_ack = mpc52xx_periph_mask, 296 .irq_mask_ack = mpc52xx_periph_mask,
297 .unmask = mpc52xx_periph_unmask, 297 .irq_unmask = mpc52xx_periph_unmask,
298 .set_type = mpc52xx_null_set_type, 298 .irq_set_type = mpc52xx_null_set_type,
299}; 299};
300 300
301/* 301/*
302 * SDMA interrupt irq_chip 302 * SDMA interrupt irq_chip
303 */ 303 */
304static void mpc52xx_sdma_mask(unsigned int virq) 304static void mpc52xx_sdma_mask(struct irq_data *d)
305{ 305{
306 int irq; 306 int irq;
307 int l2irq; 307 int l2irq;
308 308
309 irq = irq_map[virq].hwirq; 309 irq = irq_map[d->irq].hwirq;
310 l2irq = irq & MPC52xx_IRQ_L2_MASK; 310 l2irq = irq & MPC52xx_IRQ_L2_MASK;
311 311
312 io_be_setbit(&sdma->IntMask, l2irq); 312 io_be_setbit(&sdma->IntMask, l2irq);
313} 313}
314 314
315static void mpc52xx_sdma_unmask(unsigned int virq) 315static void mpc52xx_sdma_unmask(struct irq_data *d)
316{ 316{
317 int irq; 317 int irq;
318 int l2irq; 318 int l2irq;
319 319
320 irq = irq_map[virq].hwirq; 320 irq = irq_map[d->irq].hwirq;
321 l2irq = irq & MPC52xx_IRQ_L2_MASK; 321 l2irq = irq & MPC52xx_IRQ_L2_MASK;
322 322
323 io_be_clrbit(&sdma->IntMask, l2irq); 323 io_be_clrbit(&sdma->IntMask, l2irq);
324} 324}
325 325
326static void mpc52xx_sdma_ack(unsigned int virq) 326static void mpc52xx_sdma_ack(struct irq_data *d)
327{ 327{
328 int irq; 328 int irq;
329 int l2irq; 329 int l2irq;
330 330
331 irq = irq_map[virq].hwirq; 331 irq = irq_map[d->irq].hwirq;
332 l2irq = irq & MPC52xx_IRQ_L2_MASK; 332 l2irq = irq & MPC52xx_IRQ_L2_MASK;
333 333
334 out_be32(&sdma->IntPend, 1 << l2irq); 334 out_be32(&sdma->IntPend, 1 << l2irq);
@@ -336,10 +336,10 @@ static void mpc52xx_sdma_ack(unsigned int virq)
336 336
337static struct irq_chip mpc52xx_sdma_irqchip = { 337static struct irq_chip mpc52xx_sdma_irqchip = {
338 .name = "MPC52xx SDMA", 338 .name = "MPC52xx SDMA",
339 .mask = mpc52xx_sdma_mask, 339 .irq_mask = mpc52xx_sdma_mask,
340 .unmask = mpc52xx_sdma_unmask, 340 .irq_unmask = mpc52xx_sdma_unmask,
341 .ack = mpc52xx_sdma_ack, 341 .irq_ack = mpc52xx_sdma_ack,
342 .set_type = mpc52xx_null_set_type, 342 .irq_set_type = mpc52xx_null_set_type,
343}; 343};
344 344
345/** 345/**