irq: support domains with non-zero hwirq base
Interrupt controllers can have non-zero starting value for h/w irq numbers. Adding support in irq_domain allows the domain hwirq numbering to match the interrupt controllers' numbering. As this makes looping over irqs for a domain more complicated, add loop iterators to iterate over all hwirqs and irqs for a domain. Signed-off-by: Rob Herring <rob.herring@calxeda.com> Reviewed-by: Jamie Iles <jamie@jamieiles.com> Tested-by: Thomas Abraham <thomas.abraham@linaro.org> Acked-by: Grant Likely <grant.likely@secretlab.ca> Acked-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
committed by
Arnd Bergmann
parent
c71a54b082
commit
6d274309d0
@@ -20,15 +20,15 @@ static DEFINE_MUTEX(irq_domain_mutex);
|
||||
void irq_domain_add(struct irq_domain *domain)
|
||||
{
|
||||
struct irq_data *d;
|
||||
int hwirq;
|
||||
int hwirq, irq;
|
||||
|
||||
/*
|
||||
* This assumes that the irq_domain owner has already allocated
|
||||
* the irq_descs. This block will be removed when support for dynamic
|
||||
* allocation of irq_descs is added to irq_domain.
|
||||
*/
|
||||
for (hwirq = 0; hwirq < domain->nr_irq; hwirq++) {
|
||||
d = irq_get_irq_data(irq_domain_to_irq(domain, hwirq));
|
||||
irq_domain_for_each_irq(domain, hwirq, irq) {
|
||||
d = irq_get_irq_data(irq);
|
||||
if (!d) {
|
||||
WARN(1, "error: assigning domain to non existant irq_desc");
|
||||
return;
|
||||
@@ -54,15 +54,15 @@ void irq_domain_add(struct irq_domain *domain)
|
||||
void irq_domain_del(struct irq_domain *domain)
|
||||
{
|
||||
struct irq_data *d;
|
||||
int hwirq;
|
||||
int hwirq, irq;
|
||||
|
||||
mutex_lock(&irq_domain_mutex);
|
||||
list_del(&domain->list);
|
||||
mutex_unlock(&irq_domain_mutex);
|
||||
|
||||
/* Clear the irq_domain assignments */
|
||||
for (hwirq = 0; hwirq < domain->nr_irq; hwirq++) {
|
||||
d = irq_get_irq_data(irq_domain_to_irq(domain, hwirq));
|
||||
irq_domain_for_each_irq(domain, hwirq, irq) {
|
||||
d = irq_get_irq_data(irq);
|
||||
d->domain = NULL;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user