Skip to content

Commit a611991

Browse files
KAGA-KOKOralfbaechle
authored andcommitted
MIPS: bcm63xx: Convert to new irq_chip functions
Signed-off-by: Thomas Gleixner <tglx@linutronix.de> To: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/2176/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
1 parent 7136226 commit a611991

File tree

1 file changed

+32
-45
lines changed

1 file changed

+32
-45
lines changed

arch/mips/bcm63xx/irq.c

Lines changed: 32 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -76,88 +76,80 @@ asmlinkage void plat_irq_dispatch(void)
7676
* internal IRQs operations: only mask/unmask on PERF irq mask
7777
* register.
7878
*/
79-
static inline void bcm63xx_internal_irq_mask(unsigned int irq)
79+
static inline void bcm63xx_internal_irq_mask(struct irq_data *d)
8080
{
81+
unsigned int irq = d->irq - IRQ_INTERNAL_BASE;
8182
u32 mask;
8283

83-
irq -= IRQ_INTERNAL_BASE;
8484
mask = bcm_perf_readl(PERF_IRQMASK_REG);
8585
mask &= ~(1 << irq);
8686
bcm_perf_writel(mask, PERF_IRQMASK_REG);
8787
}
8888

89-
static void bcm63xx_internal_irq_unmask(unsigned int irq)
89+
static void bcm63xx_internal_irq_unmask(struct irq_data *d)
9090
{
91+
unsigned int irq = d->irq - IRQ_INTERNAL_BASE;
9192
u32 mask;
9293

93-
irq -= IRQ_INTERNAL_BASE;
9494
mask = bcm_perf_readl(PERF_IRQMASK_REG);
9595
mask |= (1 << irq);
9696
bcm_perf_writel(mask, PERF_IRQMASK_REG);
9797
}
9898

99-
static unsigned int bcm63xx_internal_irq_startup(unsigned int irq)
100-
{
101-
bcm63xx_internal_irq_unmask(irq);
102-
return 0;
103-
}
104-
10599
/*
106100
* external IRQs operations: mask/unmask and clear on PERF external
107101
* irq control register.
108102
*/
109-
static void bcm63xx_external_irq_mask(unsigned int irq)
103+
static void bcm63xx_external_irq_mask(struct irq_data *d)
110104
{
105+
unsigned int irq = d->irq - IRQ_EXT_BASE;
111106
u32 reg;
112107

113-
irq -= IRQ_EXT_BASE;
114108
reg = bcm_perf_readl(PERF_EXTIRQ_CFG_REG);
115109
reg &= ~EXTIRQ_CFG_MASK(irq);
116110
bcm_perf_writel(reg, PERF_EXTIRQ_CFG_REG);
117111
}
118112

119-
static void bcm63xx_external_irq_unmask(unsigned int irq)
113+
static void bcm63xx_external_irq_unmask(struct irq_data *d)
120114
{
115+
unsigned int irq = d->irq - IRQ_EXT_BASE;
121116
u32 reg;
122117

123-
irq -= IRQ_EXT_BASE;
124118
reg = bcm_perf_readl(PERF_EXTIRQ_CFG_REG);
125119
reg |= EXTIRQ_CFG_MASK(irq);
126120
bcm_perf_writel(reg, PERF_EXTIRQ_CFG_REG);
127121
}
128122

129-
static void bcm63xx_external_irq_clear(unsigned int irq)
123+
static void bcm63xx_external_irq_clear(struct irq_data *d)
130124
{
125+
unsigned int irq = d->irq - IRQ_EXT_BASE;
131126
u32 reg;
132127

133-
irq -= IRQ_EXT_BASE;
134128
reg = bcm_perf_readl(PERF_EXTIRQ_CFG_REG);
135129
reg |= EXTIRQ_CFG_CLEAR(irq);
136130
bcm_perf_writel(reg, PERF_EXTIRQ_CFG_REG);
137131
}
138132

139-
static unsigned int bcm63xx_external_irq_startup(unsigned int irq)
133+
static unsigned int bcm63xx_external_irq_startup(struct irq_data *d)
140134
{
141-
set_c0_status(0x100 << (irq - IRQ_MIPS_BASE));
135+
set_c0_status(0x100 << (d->irq - IRQ_MIPS_BASE));
142136
irq_enable_hazard();
143-
bcm63xx_external_irq_unmask(irq);
137+
bcm63xx_external_irq_unmask(d);
144138
return 0;
145139
}
146140

147-
static void bcm63xx_external_irq_shutdown(unsigned int irq)
141+
static void bcm63xx_external_irq_shutdown(struct irq_data *d)
148142
{
149-
bcm63xx_external_irq_mask(irq);
150-
clear_c0_status(0x100 << (irq - IRQ_MIPS_BASE));
143+
bcm63xx_external_irq_mask(d);
144+
clear_c0_status(0x100 << (d->irq - IRQ_MIPS_BASE));
151145
irq_disable_hazard();
152146
}
153147

154-
static int bcm63xx_external_irq_set_type(unsigned int irq,
148+
static int bcm63xx_external_irq_set_type(struct irq_data *d,
155149
unsigned int flow_type)
156150
{
151+
unsigned int irq = d->irq - IRQ_EXT_BASE;
157152
u32 reg;
158-
struct irq_desc *desc = irq_desc + irq;
159-
160-
irq -= IRQ_EXT_BASE;
161153

162154
flow_type &= IRQ_TYPE_SENSE_MASK;
163155

@@ -199,37 +191,32 @@ static int bcm63xx_external_irq_set_type(unsigned int irq,
199191
}
200192
bcm_perf_writel(reg, PERF_EXTIRQ_CFG_REG);
201193

202-
if (flow_type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) {
203-
desc->status |= IRQ_LEVEL;
204-
desc->handle_irq = handle_level_irq;
205-
} else {
206-
desc->handle_irq = handle_edge_irq;
207-
}
194+
irqd_set_trigger_type(d, flow_type);
195+
if (flow_type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
196+
__irq_set_handler_locked(d->irq, handle_level_irq);
197+
else
198+
__irq_set_handler_locked(d->irq, handle_edge_irq);
208199

209-
return 0;
200+
return IRQ_SET_MASK_OK_NOCOPY;
210201
}
211202

212203
static struct irq_chip bcm63xx_internal_irq_chip = {
213204
.name = "bcm63xx_ipic",
214-
.startup = bcm63xx_internal_irq_startup,
215-
.shutdown = bcm63xx_internal_irq_mask,
216-
217-
.mask = bcm63xx_internal_irq_mask,
218-
.mask_ack = bcm63xx_internal_irq_mask,
219-
.unmask = bcm63xx_internal_irq_unmask,
205+
.irq_mask = bcm63xx_internal_irq_mask,
206+
.irq_unmask = bcm63xx_internal_irq_unmask,
220207
};
221208

222209
static struct irq_chip bcm63xx_external_irq_chip = {
223210
.name = "bcm63xx_epic",
224-
.startup = bcm63xx_external_irq_startup,
225-
.shutdown = bcm63xx_external_irq_shutdown,
211+
.irq_startup = bcm63xx_external_irq_startup,
212+
.irq_shutdown = bcm63xx_external_irq_shutdown,
226213

227-
.ack = bcm63xx_external_irq_clear,
214+
.irq_ack = bcm63xx_external_irq_clear,
228215

229-
.mask = bcm63xx_external_irq_mask,
230-
.unmask = bcm63xx_external_irq_unmask,
216+
.irq_mask = bcm63xx_external_irq_mask,
217+
.irq_unmask = bcm63xx_external_irq_unmask,
231218

232-
.set_type = bcm63xx_external_irq_set_type,
219+
.irq_set_type = bcm63xx_external_irq_set_type,
233220
};
234221

235222
static struct irqaction cpu_ip2_cascade_action = {

0 commit comments

Comments
 (0)