diff options
Diffstat (limited to 'drivers/irqchip/irq-mips-gic.c')
-rw-r--r-- | drivers/irqchip/irq-mips-gic.c | 206 |
1 files changed, 135 insertions, 71 deletions
diff --git a/drivers/irqchip/irq-mips-gic.c b/drivers/irqchip/irq-mips-gic.c index b5fad6377736..88086d7e7c51 100644 --- a/drivers/irqchip/irq-mips-gic.c +++ b/drivers/irqchip/irq-mips-gic.c | |||
@@ -23,7 +23,6 @@ | |||
23 | 23 | ||
24 | unsigned int gic_frequency; | 24 | unsigned int gic_frequency; |
25 | unsigned int gic_present; | 25 | unsigned int gic_present; |
26 | unsigned long _gic_base; | ||
27 | 26 | ||
28 | struct gic_pcpu_mask { | 27 | struct gic_pcpu_mask { |
29 | DECLARE_BITMAP(pcpu_mask, GIC_MAX_INTRS); | 28 | DECLARE_BITMAP(pcpu_mask, GIC_MAX_INTRS); |
@@ -37,6 +36,7 @@ struct gic_intrmask_regs { | |||
37 | DECLARE_BITMAP(intrmask, GIC_MAX_INTRS); | 36 | DECLARE_BITMAP(intrmask, GIC_MAX_INTRS); |
38 | }; | 37 | }; |
39 | 38 | ||
39 | static void __iomem *gic_base; | ||
40 | static struct gic_pcpu_mask pcpu_masks[NR_CPUS]; | 40 | static struct gic_pcpu_mask pcpu_masks[NR_CPUS]; |
41 | static struct gic_pending_regs pending_regs[NR_CPUS]; | 41 | static struct gic_pending_regs pending_regs[NR_CPUS]; |
42 | static struct gic_intrmask_regs intrmask_regs[NR_CPUS]; | 42 | static struct gic_intrmask_regs intrmask_regs[NR_CPUS]; |
@@ -49,15 +49,82 @@ static struct irq_chip gic_level_irq_controller, gic_edge_irq_controller; | |||
49 | 49 | ||
50 | static void __gic_irq_dispatch(void); | 50 | static void __gic_irq_dispatch(void); |
51 | 51 | ||
52 | static inline unsigned int gic_read(unsigned int reg) | ||
53 | { | ||
54 | return __raw_readl(gic_base + reg); | ||
55 | } | ||
56 | |||
57 | static inline void gic_write(unsigned int reg, unsigned int val) | ||
58 | { | ||
59 | __raw_writel(val, gic_base + reg); | ||
60 | } | ||
61 | |||
62 | static inline void gic_update_bits(unsigned int reg, unsigned int mask, | ||
63 | unsigned int val) | ||
64 | { | ||
65 | unsigned int regval; | ||
66 | |||
67 | regval = gic_read(reg); | ||
68 | regval &= ~mask; | ||
69 | regval |= val; | ||
70 | gic_write(reg, regval); | ||
71 | } | ||
72 | |||
73 | static inline void gic_reset_mask(unsigned int intr) | ||
74 | { | ||
75 | gic_write(GIC_REG(SHARED, GIC_SH_RMASK) + GIC_INTR_OFS(intr), | ||
76 | 1 << GIC_INTR_BIT(intr)); | ||
77 | } | ||
78 | |||
79 | static inline void gic_set_mask(unsigned int intr) | ||
80 | { | ||
81 | gic_write(GIC_REG(SHARED, GIC_SH_SMASK) + GIC_INTR_OFS(intr), | ||
82 | 1 << GIC_INTR_BIT(intr)); | ||
83 | } | ||
84 | |||
85 | static inline void gic_set_polarity(unsigned int intr, unsigned int pol) | ||
86 | { | ||
87 | gic_update_bits(GIC_REG(SHARED, GIC_SH_SET_POLARITY) + | ||
88 | GIC_INTR_OFS(intr), 1 << GIC_INTR_BIT(intr), | ||
89 | pol << GIC_INTR_BIT(intr)); | ||
90 | } | ||
91 | |||
92 | static inline void gic_set_trigger(unsigned int intr, unsigned int trig) | ||
93 | { | ||
94 | gic_update_bits(GIC_REG(SHARED, GIC_SH_SET_TRIGGER) + | ||
95 | GIC_INTR_OFS(intr), 1 << GIC_INTR_BIT(intr), | ||
96 | trig << GIC_INTR_BIT(intr)); | ||
97 | } | ||
98 | |||
99 | static inline void gic_set_dual_edge(unsigned int intr, unsigned int dual) | ||
100 | { | ||
101 | gic_update_bits(GIC_REG(SHARED, GIC_SH_SET_DUAL) + GIC_INTR_OFS(intr), | ||
102 | 1 << GIC_INTR_BIT(intr), | ||
103 | dual << GIC_INTR_BIT(intr)); | ||
104 | } | ||
105 | |||
106 | static inline void gic_map_to_pin(unsigned int intr, unsigned int pin) | ||
107 | { | ||
108 | gic_write(GIC_REG(SHARED, GIC_SH_INTR_MAP_TO_PIN_BASE) + | ||
109 | GIC_SH_MAP_TO_PIN(intr), GIC_MAP_TO_PIN_MSK | pin); | ||
110 | } | ||
111 | |||
112 | static inline void gic_map_to_vpe(unsigned int intr, unsigned int vpe) | ||
113 | { | ||
114 | gic_write(GIC_REG(SHARED, GIC_SH_INTR_MAP_TO_VPE_BASE) + | ||
115 | GIC_SH_MAP_TO_VPE_REG_OFF(intr, vpe), | ||
116 | GIC_SH_MAP_TO_VPE_REG_BIT(vpe)); | ||
117 | } | ||
118 | |||
52 | #if defined(CONFIG_CSRC_GIC) || defined(CONFIG_CEVT_GIC) | 119 | #if defined(CONFIG_CSRC_GIC) || defined(CONFIG_CEVT_GIC) |
53 | cycle_t gic_read_count(void) | 120 | cycle_t gic_read_count(void) |
54 | { | 121 | { |
55 | unsigned int hi, hi2, lo; | 122 | unsigned int hi, hi2, lo; |
56 | 123 | ||
57 | do { | 124 | do { |
58 | GICREAD(GIC_REG(SHARED, GIC_SH_COUNTER_63_32), hi); | 125 | hi = gic_read(GIC_REG(SHARED, GIC_SH_COUNTER_63_32)); |
59 | GICREAD(GIC_REG(SHARED, GIC_SH_COUNTER_31_00), lo); | 126 | lo = gic_read(GIC_REG(SHARED, GIC_SH_COUNTER_31_00)); |
60 | GICREAD(GIC_REG(SHARED, GIC_SH_COUNTER_63_32), hi2); | 127 | hi2 = gic_read(GIC_REG(SHARED, GIC_SH_COUNTER_63_32)); |
61 | } while (hi2 != hi); | 128 | } while (hi2 != hi); |
62 | 129 | ||
63 | return (((cycle_t) hi) << 32) + lo; | 130 | return (((cycle_t) hi) << 32) + lo; |
@@ -67,7 +134,7 @@ unsigned int gic_get_count_width(void) | |||
67 | { | 134 | { |
68 | unsigned int bits, config; | 135 | unsigned int bits, config; |
69 | 136 | ||
70 | GICREAD(GIC_REG(SHARED, GIC_SH_CONFIG), config); | 137 | config = gic_read(GIC_REG(SHARED, GIC_SH_CONFIG)); |
71 | bits = 32 + 4 * ((config & GIC_SH_CONFIG_COUNTBITS_MSK) >> | 138 | bits = 32 + 4 * ((config & GIC_SH_CONFIG_COUNTBITS_MSK) >> |
72 | GIC_SH_CONFIG_COUNTBITS_SHF); | 139 | GIC_SH_CONFIG_COUNTBITS_SHF); |
73 | 140 | ||
@@ -76,9 +143,9 @@ unsigned int gic_get_count_width(void) | |||
76 | 143 | ||
77 | void gic_write_compare(cycle_t cnt) | 144 | void gic_write_compare(cycle_t cnt) |
78 | { | 145 | { |
79 | GICWRITE(GIC_REG(VPE_LOCAL, GIC_VPE_COMPARE_HI), | 146 | gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_COMPARE_HI), |
80 | (int)(cnt >> 32)); | 147 | (int)(cnt >> 32)); |
81 | GICWRITE(GIC_REG(VPE_LOCAL, GIC_VPE_COMPARE_LO), | 148 | gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_COMPARE_LO), |
82 | (int)(cnt & 0xffffffff)); | 149 | (int)(cnt & 0xffffffff)); |
83 | } | 150 | } |
84 | 151 | ||
@@ -88,10 +155,10 @@ void gic_write_cpu_compare(cycle_t cnt, int cpu) | |||
88 | 155 | ||
89 | local_irq_save(flags); | 156 | local_irq_save(flags); |
90 | 157 | ||
91 | GICWRITE(GIC_REG(VPE_LOCAL, GIC_VPE_OTHER_ADDR), cpu); | 158 | gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_OTHER_ADDR), cpu); |
92 | GICWRITE(GIC_REG(VPE_OTHER, GIC_VPE_COMPARE_HI), | 159 | gic_write(GIC_REG(VPE_OTHER, GIC_VPE_COMPARE_HI), |
93 | (int)(cnt >> 32)); | 160 | (int)(cnt >> 32)); |
94 | GICWRITE(GIC_REG(VPE_OTHER, GIC_VPE_COMPARE_LO), | 161 | gic_write(GIC_REG(VPE_OTHER, GIC_VPE_COMPARE_LO), |
95 | (int)(cnt & 0xffffffff)); | 162 | (int)(cnt & 0xffffffff)); |
96 | 163 | ||
97 | local_irq_restore(flags); | 164 | local_irq_restore(flags); |
@@ -101,8 +168,8 @@ cycle_t gic_read_compare(void) | |||
101 | { | 168 | { |
102 | unsigned int hi, lo; | 169 | unsigned int hi, lo; |
103 | 170 | ||
104 | GICREAD(GIC_REG(VPE_LOCAL, GIC_VPE_COMPARE_HI), hi); | 171 | hi = gic_read(GIC_REG(VPE_LOCAL, GIC_VPE_COMPARE_HI)); |
105 | GICREAD(GIC_REG(VPE_LOCAL, GIC_VPE_COMPARE_LO), lo); | 172 | lo = gic_read(GIC_REG(VPE_LOCAL, GIC_VPE_COMPARE_LO)); |
106 | 173 | ||
107 | return (((cycle_t) hi) << 32) + lo; | 174 | return (((cycle_t) hi) << 32) + lo; |
108 | } | 175 | } |
@@ -116,7 +183,7 @@ static bool gic_local_irq_is_routable(int intr) | |||
116 | if (cpu_has_veic) | 183 | if (cpu_has_veic) |
117 | return true; | 184 | return true; |
118 | 185 | ||
119 | GICREAD(GIC_REG(VPE_LOCAL, GIC_VPE_CTL), vpe_ctl); | 186 | vpe_ctl = gic_read(GIC_REG(VPE_LOCAL, GIC_VPE_CTL)); |
120 | switch (intr) { | 187 | switch (intr) { |
121 | case GIC_LOCAL_INT_TIMER: | 188 | case GIC_LOCAL_INT_TIMER: |
122 | return vpe_ctl & GIC_VPE_CTL_TIMER_RTBL_MSK; | 189 | return vpe_ctl & GIC_VPE_CTL_TIMER_RTBL_MSK; |
@@ -136,7 +203,7 @@ unsigned int gic_get_timer_pending(void) | |||
136 | { | 203 | { |
137 | unsigned int vpe_pending; | 204 | unsigned int vpe_pending; |
138 | 205 | ||
139 | GICREAD(GIC_REG(VPE_LOCAL, GIC_VPE_PEND), vpe_pending); | 206 | vpe_pending = gic_read(GIC_REG(VPE_LOCAL, GIC_VPE_PEND)); |
140 | return vpe_pending & GIC_VPE_PEND_TIMER_MSK; | 207 | return vpe_pending & GIC_VPE_PEND_TIMER_MSK; |
141 | } | 208 | } |
142 | 209 | ||
@@ -146,12 +213,13 @@ static void gic_bind_eic_interrupt(int irq, int set) | |||
146 | irq -= GIC_PIN_TO_VEC_OFFSET; | 213 | irq -= GIC_PIN_TO_VEC_OFFSET; |
147 | 214 | ||
148 | /* Set irq to use shadow set */ | 215 | /* Set irq to use shadow set */ |
149 | GICWRITE(GIC_REG_ADDR(VPE_LOCAL, GIC_VPE_EIC_SS(irq)), set); | 216 | gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_EIC_SHADOW_SET_BASE) + |
217 | GIC_VPE_EIC_SS(irq), set); | ||
150 | } | 218 | } |
151 | 219 | ||
152 | void gic_send_ipi(unsigned int intr) | 220 | void gic_send_ipi(unsigned int intr) |
153 | { | 221 | { |
154 | GICWRITE(GIC_REG(SHARED, GIC_SH_WEDGE), 0x80000000 | intr); | 222 | gic_write(GIC_REG(SHARED, GIC_SH_WEDGE), 0x80000000 | intr); |
155 | } | 223 | } |
156 | 224 | ||
157 | int gic_get_c0_compare_int(void) | 225 | int gic_get_c0_compare_int(void) |
@@ -178,23 +246,21 @@ static unsigned int gic_get_int(void) | |||
178 | { | 246 | { |
179 | unsigned int i; | 247 | unsigned int i; |
180 | unsigned long *pending, *intrmask, *pcpu_mask; | 248 | unsigned long *pending, *intrmask, *pcpu_mask; |
181 | unsigned long *pending_abs, *intrmask_abs; | 249 | unsigned long pending_reg, intrmask_reg; |
182 | 250 | ||
183 | /* Get per-cpu bitmaps */ | 251 | /* Get per-cpu bitmaps */ |
184 | pending = pending_regs[smp_processor_id()].pending; | 252 | pending = pending_regs[smp_processor_id()].pending; |
185 | intrmask = intrmask_regs[smp_processor_id()].intrmask; | 253 | intrmask = intrmask_regs[smp_processor_id()].intrmask; |
186 | pcpu_mask = pcpu_masks[smp_processor_id()].pcpu_mask; | 254 | pcpu_mask = pcpu_masks[smp_processor_id()].pcpu_mask; |
187 | 255 | ||
188 | pending_abs = (unsigned long *) GIC_REG_ABS_ADDR(SHARED, | 256 | pending_reg = GIC_REG(SHARED, GIC_SH_PEND_31_0); |
189 | GIC_SH_PEND_31_0_OFS); | 257 | intrmask_reg = GIC_REG(SHARED, GIC_SH_MASK_31_0); |
190 | intrmask_abs = (unsigned long *) GIC_REG_ABS_ADDR(SHARED, | ||
191 | GIC_SH_MASK_31_0_OFS); | ||
192 | 258 | ||
193 | for (i = 0; i < BITS_TO_LONGS(gic_shared_intrs); i++) { | 259 | for (i = 0; i < BITS_TO_LONGS(gic_shared_intrs); i++) { |
194 | GICREAD(*pending_abs, pending[i]); | 260 | pending[i] = gic_read(pending_reg); |
195 | GICREAD(*intrmask_abs, intrmask[i]); | 261 | intrmask[i] = gic_read(intrmask_reg); |
196 | pending_abs++; | 262 | pending_reg += 0x4; |
197 | intrmask_abs++; | 263 | intrmask_reg += 0x4; |
198 | } | 264 | } |
199 | 265 | ||
200 | bitmap_and(pending, pending, intrmask, gic_shared_intrs); | 266 | bitmap_and(pending, pending, intrmask, gic_shared_intrs); |
@@ -205,19 +271,19 @@ static unsigned int gic_get_int(void) | |||
205 | 271 | ||
206 | static void gic_mask_irq(struct irq_data *d) | 272 | static void gic_mask_irq(struct irq_data *d) |
207 | { | 273 | { |
208 | GIC_CLR_INTR_MASK(GIC_HWIRQ_TO_SHARED(d->hwirq)); | 274 | gic_reset_mask(GIC_HWIRQ_TO_SHARED(d->hwirq)); |
209 | } | 275 | } |
210 | 276 | ||
211 | static void gic_unmask_irq(struct irq_data *d) | 277 | static void gic_unmask_irq(struct irq_data *d) |
212 | { | 278 | { |
213 | GIC_SET_INTR_MASK(GIC_HWIRQ_TO_SHARED(d->hwirq)); | 279 | gic_set_mask(GIC_HWIRQ_TO_SHARED(d->hwirq)); |
214 | } | 280 | } |
215 | 281 | ||
216 | static void gic_ack_irq(struct irq_data *d) | 282 | static void gic_ack_irq(struct irq_data *d) |
217 | { | 283 | { |
218 | unsigned int irq = GIC_HWIRQ_TO_SHARED(d->hwirq); | 284 | unsigned int irq = GIC_HWIRQ_TO_SHARED(d->hwirq); |
219 | 285 | ||
220 | GICWRITE(GIC_REG(SHARED, GIC_SH_WEDGE), irq); | 286 | gic_write(GIC_REG(SHARED, GIC_SH_WEDGE), irq); |
221 | } | 287 | } |
222 | 288 | ||
223 | static int gic_set_type(struct irq_data *d, unsigned int type) | 289 | static int gic_set_type(struct irq_data *d, unsigned int type) |
@@ -229,34 +295,34 @@ static int gic_set_type(struct irq_data *d, unsigned int type) | |||
229 | spin_lock_irqsave(&gic_lock, flags); | 295 | spin_lock_irqsave(&gic_lock, flags); |
230 | switch (type & IRQ_TYPE_SENSE_MASK) { | 296 | switch (type & IRQ_TYPE_SENSE_MASK) { |
231 | case IRQ_TYPE_EDGE_FALLING: | 297 | case IRQ_TYPE_EDGE_FALLING: |
232 | GIC_SET_POLARITY(irq, GIC_POL_NEG); | 298 | gic_set_polarity(irq, GIC_POL_NEG); |
233 | GIC_SET_TRIGGER(irq, GIC_TRIG_EDGE); | 299 | gic_set_trigger(irq, GIC_TRIG_EDGE); |
234 | GIC_SET_DUAL(irq, GIC_TRIG_DUAL_DISABLE); | 300 | gic_set_dual_edge(irq, GIC_TRIG_DUAL_DISABLE); |
235 | is_edge = true; | 301 | is_edge = true; |
236 | break; | 302 | break; |
237 | case IRQ_TYPE_EDGE_RISING: | 303 | case IRQ_TYPE_EDGE_RISING: |
238 | GIC_SET_POLARITY(irq, GIC_POL_POS); | 304 | gic_set_polarity(irq, GIC_POL_POS); |
239 | GIC_SET_TRIGGER(irq, GIC_TRIG_EDGE); | 305 | gic_set_trigger(irq, GIC_TRIG_EDGE); |
240 | GIC_SET_DUAL(irq, GIC_TRIG_DUAL_DISABLE); | 306 | gic_set_dual_edge(irq, GIC_TRIG_DUAL_DISABLE); |
241 | is_edge = true; | 307 | is_edge = true; |
242 | break; | 308 | break; |
243 | case IRQ_TYPE_EDGE_BOTH: | 309 | case IRQ_TYPE_EDGE_BOTH: |
244 | /* polarity is irrelevant in this case */ | 310 | /* polarity is irrelevant in this case */ |
245 | GIC_SET_TRIGGER(irq, GIC_TRIG_EDGE); | 311 | gic_set_trigger(irq, GIC_TRIG_EDGE); |
246 | GIC_SET_DUAL(irq, GIC_TRIG_DUAL_ENABLE); | 312 | gic_set_dual_edge(irq, GIC_TRIG_DUAL_ENABLE); |
247 | is_edge = true; | 313 | is_edge = true; |
248 | break; | 314 | break; |
249 | case IRQ_TYPE_LEVEL_LOW: | 315 | case IRQ_TYPE_LEVEL_LOW: |
250 | GIC_SET_POLARITY(irq, GIC_POL_NEG); | 316 | gic_set_polarity(irq, GIC_POL_NEG); |
251 | GIC_SET_TRIGGER(irq, GIC_TRIG_LEVEL); | 317 | gic_set_trigger(irq, GIC_TRIG_LEVEL); |
252 | GIC_SET_DUAL(irq, GIC_TRIG_DUAL_DISABLE); | 318 | gic_set_dual_edge(irq, GIC_TRIG_DUAL_DISABLE); |
253 | is_edge = false; | 319 | is_edge = false; |
254 | break; | 320 | break; |
255 | case IRQ_TYPE_LEVEL_HIGH: | 321 | case IRQ_TYPE_LEVEL_HIGH: |
256 | default: | 322 | default: |
257 | GIC_SET_POLARITY(irq, GIC_POL_POS); | 323 | gic_set_polarity(irq, GIC_POL_POS); |
258 | GIC_SET_TRIGGER(irq, GIC_TRIG_LEVEL); | 324 | gic_set_trigger(irq, GIC_TRIG_LEVEL); |
259 | GIC_SET_DUAL(irq, GIC_TRIG_DUAL_DISABLE); | 325 | gic_set_dual_edge(irq, GIC_TRIG_DUAL_DISABLE); |
260 | is_edge = false; | 326 | is_edge = false; |
261 | break; | 327 | break; |
262 | } | 328 | } |
@@ -292,7 +358,7 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *cpumask, | |||
292 | spin_lock_irqsave(&gic_lock, flags); | 358 | spin_lock_irqsave(&gic_lock, flags); |
293 | 359 | ||
294 | /* Re-route this IRQ */ | 360 | /* Re-route this IRQ */ |
295 | GIC_SH_MAP_TO_VPE_SMASK(irq, first_cpu(tmp)); | 361 | gic_map_to_vpe(irq, first_cpu(tmp)); |
296 | 362 | ||
297 | /* Update the pcpu_masks */ | 363 | /* Update the pcpu_masks */ |
298 | for (i = 0; i < NR_CPUS; i++) | 364 | for (i = 0; i < NR_CPUS; i++) |
@@ -331,8 +397,8 @@ static unsigned int gic_get_local_int(void) | |||
331 | { | 397 | { |
332 | unsigned long pending, masked; | 398 | unsigned long pending, masked; |
333 | 399 | ||
334 | GICREAD(GIC_REG(VPE_LOCAL, GIC_VPE_PEND), pending); | 400 | pending = gic_read(GIC_REG(VPE_LOCAL, GIC_VPE_PEND)); |
335 | GICREAD(GIC_REG(VPE_LOCAL, GIC_VPE_MASK), masked); | 401 | masked = gic_read(GIC_REG(VPE_LOCAL, GIC_VPE_MASK)); |
336 | 402 | ||
337 | bitmap_and(&pending, &pending, &masked, GIC_NUM_LOCAL_INTRS); | 403 | bitmap_and(&pending, &pending, &masked, GIC_NUM_LOCAL_INTRS); |
338 | 404 | ||
@@ -343,14 +409,14 @@ static void gic_mask_local_irq(struct irq_data *d) | |||
343 | { | 409 | { |
344 | int intr = GIC_HWIRQ_TO_LOCAL(d->hwirq); | 410 | int intr = GIC_HWIRQ_TO_LOCAL(d->hwirq); |
345 | 411 | ||
346 | GICWRITE(GIC_REG(VPE_LOCAL, GIC_VPE_RMASK), 1 << intr); | 412 | gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_RMASK), 1 << intr); |
347 | } | 413 | } |
348 | 414 | ||
349 | static void gic_unmask_local_irq(struct irq_data *d) | 415 | static void gic_unmask_local_irq(struct irq_data *d) |
350 | { | 416 | { |
351 | int intr = GIC_HWIRQ_TO_LOCAL(d->hwirq); | 417 | int intr = GIC_HWIRQ_TO_LOCAL(d->hwirq); |
352 | 418 | ||
353 | GICWRITE(GIC_REG(VPE_LOCAL, GIC_VPE_SMASK), 1 << intr); | 419 | gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_SMASK), 1 << intr); |
354 | } | 420 | } |
355 | 421 | ||
356 | static struct irq_chip gic_local_irq_controller = { | 422 | static struct irq_chip gic_local_irq_controller = { |
@@ -367,8 +433,8 @@ static void gic_mask_local_irq_all_vpes(struct irq_data *d) | |||
367 | 433 | ||
368 | spin_lock_irqsave(&gic_lock, flags); | 434 | spin_lock_irqsave(&gic_lock, flags); |
369 | for (i = 0; i < gic_vpes; i++) { | 435 | for (i = 0; i < gic_vpes; i++) { |
370 | GICWRITE(GIC_REG(VPE_LOCAL, GIC_VPE_OTHER_ADDR), i); | 436 | gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_OTHER_ADDR), i); |
371 | GICWRITE(GIC_REG(VPE_OTHER, GIC_VPE_RMASK), 1 << intr); | 437 | gic_write(GIC_REG(VPE_OTHER, GIC_VPE_RMASK), 1 << intr); |
372 | } | 438 | } |
373 | spin_unlock_irqrestore(&gic_lock, flags); | 439 | spin_unlock_irqrestore(&gic_lock, flags); |
374 | } | 440 | } |
@@ -381,8 +447,8 @@ static void gic_unmask_local_irq_all_vpes(struct irq_data *d) | |||
381 | 447 | ||
382 | spin_lock_irqsave(&gic_lock, flags); | 448 | spin_lock_irqsave(&gic_lock, flags); |
383 | for (i = 0; i < gic_vpes; i++) { | 449 | for (i = 0; i < gic_vpes; i++) { |
384 | GICWRITE(GIC_REG(VPE_LOCAL, GIC_VPE_OTHER_ADDR), i); | 450 | gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_OTHER_ADDR), i); |
385 | GICWRITE(GIC_REG(VPE_OTHER, GIC_VPE_SMASK), 1 << intr); | 451 | gic_write(GIC_REG(VPE_OTHER, GIC_VPE_SMASK), 1 << intr); |
386 | } | 452 | } |
387 | spin_unlock_irqrestore(&gic_lock, flags); | 453 | spin_unlock_irqrestore(&gic_lock, flags); |
388 | } | 454 | } |
@@ -462,7 +528,7 @@ static __init void gic_ipi_init_one(unsigned int intr, int cpu, | |||
462 | GIC_SHARED_TO_HWIRQ(intr)); | 528 | GIC_SHARED_TO_HWIRQ(intr)); |
463 | int i; | 529 | int i; |
464 | 530 | ||
465 | GIC_SH_MAP_TO_VPE_SMASK(intr, cpu); | 531 | gic_map_to_vpe(intr, cpu); |
466 | for (i = 0; i < NR_CPUS; i++) | 532 | for (i = 0; i < NR_CPUS; i++) |
467 | clear_bit(intr, pcpu_masks[i].pcpu_mask); | 533 | clear_bit(intr, pcpu_masks[i].pcpu_mask); |
468 | set_bit(intr, pcpu_masks[cpu].pcpu_mask); | 534 | set_bit(intr, pcpu_masks[cpu].pcpu_mask); |
@@ -500,19 +566,19 @@ static void __init gic_basic_init(void) | |||
500 | 566 | ||
501 | /* Setup defaults */ | 567 | /* Setup defaults */ |
502 | for (i = 0; i < gic_shared_intrs; i++) { | 568 | for (i = 0; i < gic_shared_intrs; i++) { |
503 | GIC_SET_POLARITY(i, GIC_POL_POS); | 569 | gic_set_polarity(i, GIC_POL_POS); |
504 | GIC_SET_TRIGGER(i, GIC_TRIG_LEVEL); | 570 | gic_set_trigger(i, GIC_TRIG_LEVEL); |
505 | GIC_CLR_INTR_MASK(i); | 571 | gic_reset_mask(i); |
506 | } | 572 | } |
507 | 573 | ||
508 | for (i = 0; i < gic_vpes; i++) { | 574 | for (i = 0; i < gic_vpes; i++) { |
509 | unsigned int j; | 575 | unsigned int j; |
510 | 576 | ||
511 | GICWRITE(GIC_REG(VPE_LOCAL, GIC_VPE_OTHER_ADDR), i); | 577 | gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_OTHER_ADDR), i); |
512 | for (j = 0; j < GIC_NUM_LOCAL_INTRS; j++) { | 578 | for (j = 0; j < GIC_NUM_LOCAL_INTRS; j++) { |
513 | if (!gic_local_irq_is_routable(j)) | 579 | if (!gic_local_irq_is_routable(j)) |
514 | continue; | 580 | continue; |
515 | GICWRITE(GIC_REG(VPE_OTHER, GIC_VPE_RMASK), 1 << j); | 581 | gic_write(GIC_REG(VPE_OTHER, GIC_VPE_RMASK), 1 << j); |
516 | } | 582 | } |
517 | } | 583 | } |
518 | } | 584 | } |
@@ -548,29 +614,29 @@ static int gic_local_irq_domain_map(struct irq_domain *d, unsigned int virq, | |||
548 | for (i = 0; i < gic_vpes; i++) { | 614 | for (i = 0; i < gic_vpes; i++) { |
549 | u32 val = GIC_MAP_TO_PIN_MSK | gic_cpu_pin; | 615 | u32 val = GIC_MAP_TO_PIN_MSK | gic_cpu_pin; |
550 | 616 | ||
551 | GICWRITE(GIC_REG(VPE_LOCAL, GIC_VPE_OTHER_ADDR), i); | 617 | gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_OTHER_ADDR), i); |
552 | 618 | ||
553 | switch (intr) { | 619 | switch (intr) { |
554 | case GIC_LOCAL_INT_WD: | 620 | case GIC_LOCAL_INT_WD: |
555 | GICWRITE(GIC_REG(VPE_OTHER, GIC_VPE_WD_MAP), val); | 621 | gic_write(GIC_REG(VPE_OTHER, GIC_VPE_WD_MAP), val); |
556 | break; | 622 | break; |
557 | case GIC_LOCAL_INT_COMPARE: | 623 | case GIC_LOCAL_INT_COMPARE: |
558 | GICWRITE(GIC_REG(VPE_OTHER, GIC_VPE_COMPARE_MAP), val); | 624 | gic_write(GIC_REG(VPE_OTHER, GIC_VPE_COMPARE_MAP), val); |
559 | break; | 625 | break; |
560 | case GIC_LOCAL_INT_TIMER: | 626 | case GIC_LOCAL_INT_TIMER: |
561 | GICWRITE(GIC_REG(VPE_OTHER, GIC_VPE_TIMER_MAP), val); | 627 | gic_write(GIC_REG(VPE_OTHER, GIC_VPE_TIMER_MAP), val); |
562 | break; | 628 | break; |
563 | case GIC_LOCAL_INT_PERFCTR: | 629 | case GIC_LOCAL_INT_PERFCTR: |
564 | GICWRITE(GIC_REG(VPE_OTHER, GIC_VPE_PERFCTR_MAP), val); | 630 | gic_write(GIC_REG(VPE_OTHER, GIC_VPE_PERFCTR_MAP), val); |
565 | break; | 631 | break; |
566 | case GIC_LOCAL_INT_SWINT0: | 632 | case GIC_LOCAL_INT_SWINT0: |
567 | GICWRITE(GIC_REG(VPE_OTHER, GIC_VPE_SWINT0_MAP), val); | 633 | gic_write(GIC_REG(VPE_OTHER, GIC_VPE_SWINT0_MAP), val); |
568 | break; | 634 | break; |
569 | case GIC_LOCAL_INT_SWINT1: | 635 | case GIC_LOCAL_INT_SWINT1: |
570 | GICWRITE(GIC_REG(VPE_OTHER, GIC_VPE_SWINT1_MAP), val); | 636 | gic_write(GIC_REG(VPE_OTHER, GIC_VPE_SWINT1_MAP), val); |
571 | break; | 637 | break; |
572 | case GIC_LOCAL_INT_FDC: | 638 | case GIC_LOCAL_INT_FDC: |
573 | GICWRITE(GIC_REG(VPE_OTHER, GIC_VPE_FDC_MAP), val); | 639 | gic_write(GIC_REG(VPE_OTHER, GIC_VPE_FDC_MAP), val); |
574 | break; | 640 | break; |
575 | default: | 641 | default: |
576 | pr_err("Invalid local IRQ %d\n", intr); | 642 | pr_err("Invalid local IRQ %d\n", intr); |
@@ -593,10 +659,9 @@ static int gic_shared_irq_domain_map(struct irq_domain *d, unsigned int virq, | |||
593 | handle_level_irq); | 659 | handle_level_irq); |
594 | 660 | ||
595 | spin_lock_irqsave(&gic_lock, flags); | 661 | spin_lock_irqsave(&gic_lock, flags); |
596 | GICWRITE(GIC_REG_ADDR(SHARED, GIC_SH_MAP_TO_PIN(intr)), | 662 | gic_map_to_pin(intr, gic_cpu_pin); |
597 | GIC_MAP_TO_PIN_MSK | gic_cpu_pin); | ||
598 | /* Map to VPE 0 by default */ | 663 | /* Map to VPE 0 by default */ |
599 | GIC_SH_MAP_TO_VPE_SMASK(intr, 0); | 664 | gic_map_to_vpe(intr, 0); |
600 | set_bit(intr, pcpu_masks[0].pcpu_mask); | 665 | set_bit(intr, pcpu_masks[0].pcpu_mask); |
601 | spin_unlock_irqrestore(&gic_lock, flags); | 666 | spin_unlock_irqrestore(&gic_lock, flags); |
602 | 667 | ||
@@ -622,10 +687,9 @@ void __init gic_init(unsigned long gic_base_addr, | |||
622 | { | 687 | { |
623 | unsigned int gicconfig; | 688 | unsigned int gicconfig; |
624 | 689 | ||
625 | _gic_base = (unsigned long) ioremap_nocache(gic_base_addr, | 690 | gic_base = ioremap_nocache(gic_base_addr, gic_addrspace_size); |
626 | gic_addrspace_size); | ||
627 | 691 | ||
628 | GICREAD(GIC_REG(SHARED, GIC_SH_CONFIG), gicconfig); | 692 | gicconfig = gic_read(GIC_REG(SHARED, GIC_SH_CONFIG)); |
629 | gic_shared_intrs = (gicconfig & GIC_SH_CONFIG_NUMINTRS_MSK) >> | 693 | gic_shared_intrs = (gicconfig & GIC_SH_CONFIG_NUMINTRS_MSK) >> |
630 | GIC_SH_CONFIG_NUMINTRS_SHF; | 694 | GIC_SH_CONFIG_NUMINTRS_SHF; |
631 | gic_shared_intrs = ((gic_shared_intrs + 1) * 8); | 695 | gic_shared_intrs = ((gic_shared_intrs + 1) * 8); |