Lines Matching refs:intc

85 	struct bcm6345_l1_chip	*intc;
91 static inline unsigned int reg_enable(struct bcm6345_l1_chip *intc,
95 return (1 * intc->n_words - word - 1) * sizeof(u32);
97 return (0 * intc->n_words + word) * sizeof(u32);
101 static inline unsigned int reg_status(struct bcm6345_l1_chip *intc,
105 return (2 * intc->n_words - word - 1) * sizeof(u32);
107 return (1 * intc->n_words + word) * sizeof(u32);
111 static inline unsigned int cpu_for_irq(struct bcm6345_l1_chip *intc,
114 return cpumask_first_and(&intc->cpumask, irq_data_get_affinity_mask(d));
120 struct bcm6345_l1_chip *intc = cpu->intc;
126 for (idx = 0; idx < intc->n_words; idx++) {
132 pending = __raw_readl(cpu->map_base + reg_status(intc, idx));
133 pending &= __raw_readl(cpu->map_base + reg_enable(intc, idx));
136 irq = irq_linear_revmap(intc->domain, base + hwirq);
149 struct bcm6345_l1_chip *intc = irq_data_get_irq_chip_data(d);
152 unsigned int cpu_idx = cpu_for_irq(intc, d);
154 intc->cpus[cpu_idx]->enable_cache[word] |= mask;
155 __raw_writel(intc->cpus[cpu_idx]->enable_cache[word],
156 intc->cpus[cpu_idx]->map_base + reg_enable(intc, word));
161 struct bcm6345_l1_chip *intc = irq_data_get_irq_chip_data(d);
164 unsigned int cpu_idx = cpu_for_irq(intc, d);
166 intc->cpus[cpu_idx]->enable_cache[word] &= ~mask;
167 __raw_writel(intc->cpus[cpu_idx]->enable_cache[word],
168 intc->cpus[cpu_idx]->map_base + reg_enable(intc, word));
173 struct bcm6345_l1_chip *intc = irq_data_get_irq_chip_data(d);
176 raw_spin_lock_irqsave(&intc->lock, flags);
178 raw_spin_unlock_irqrestore(&intc->lock, flags);
183 struct bcm6345_l1_chip *intc = irq_data_get_irq_chip_data(d);
186 raw_spin_lock_irqsave(&intc->lock, flags);
188 raw_spin_unlock_irqrestore(&intc->lock, flags);
195 struct bcm6345_l1_chip *intc = irq_data_get_irq_chip_data(d);
198 unsigned int old_cpu = cpu_for_irq(intc, d);
204 if (!cpumask_and(&valid, &intc->cpumask, dest))
213 raw_spin_lock_irqsave(&intc->lock, flags);
215 enabled = intc->cpus[old_cpu]->enable_cache[word] & mask;
224 raw_spin_unlock_irqrestore(&intc->lock, flags);
233 struct bcm6345_l1_chip *intc)
245 if (!intc->n_words)
246 intc->n_words = n_words;
247 else if (intc->n_words != n_words)
250 cpu = intc->cpus[idx] = kzalloc(sizeof(*cpu) + n_words * sizeof(u32),
255 cpu->intc = intc;
262 __raw_writel(0, cpu->map_base + reg_enable(intc, i));
301 struct bcm6345_l1_chip *intc;
305 intc = kzalloc(sizeof(*intc), GFP_KERNEL);
306 if (!intc)
310 ret = bcm6345_l1_init_one(dn, idx, intc);
312 pr_err("failed to init intc L1 for cpu %d: %d\n",
315 cpumask_set_cpu(idx, &intc->cpumask);
318 if (!cpumask_weight(&intc->cpumask)) {
323 raw_spin_lock_init(&intc->lock);
325 intc->domain = irq_domain_add_linear(dn, IRQS_PER_WORD * intc->n_words,
327 intc);
328 if (!intc->domain) {
333 pr_info("registered BCM6345 L1 intc (IRQs: %d)\n",
334 IRQS_PER_WORD * intc->n_words);
335 for_each_cpu(idx, &intc->cpumask) {
336 struct bcm6345_l1_cpu *cpu = intc->cpus[idx];
346 struct bcm6345_l1_cpu *cpu = intc->cpus[idx];
355 kfree(intc);
359 IRQCHIP_DECLARE(bcm6345_l1, "brcm,bcm6345-l1-intc", bcm6345_l1_of_init);