Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a5561c3e authored by Marc Zyngier's avatar Marc Zyngier Committed by Jason Cooper
Browse files

irqchip: gic: Get rid of routable domain



The only user of the so called "routable domain" functionality
now being fixed, let's clean up the GIC.

Acked-by: default avatarTony Lindgren <tony@atomide.com>
Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
Link: https://lkml.kernel.org/r/1426088629-15377-5-git-send-email-marc.zyngier@arm.com


Signed-off-by: default avatarJason Cooper <jason@lakedaemon.net>
parent 1e7449ba
Loading
Loading
Loading
Loading
+5 −54
Original line number Original line Diff line number Diff line
@@ -798,15 +798,12 @@ static int gic_irq_domain_map(struct irq_domain *d, unsigned int irq,
		irq_domain_set_info(d, irq, hw, &gic_chip, d->host_data,
		irq_domain_set_info(d, irq, hw, &gic_chip, d->host_data,
				    handle_fasteoi_irq, NULL, NULL);
				    handle_fasteoi_irq, NULL, NULL);
		set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
		set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);

		gic_routable_irq_domain_ops->map(d, irq, hw);
	}
	}
	return 0;
	return 0;
}
}


static void gic_irq_domain_unmap(struct irq_domain *d, unsigned int irq)
static void gic_irq_domain_unmap(struct irq_domain *d, unsigned int irq)
{
{
	gic_routable_irq_domain_ops->unmap(d, irq);
}
}


static int gic_irq_domain_xlate(struct irq_domain *d,
static int gic_irq_domain_xlate(struct irq_domain *d,
@@ -825,16 +822,8 @@ static int gic_irq_domain_xlate(struct irq_domain *d,
	*out_hwirq = intspec[1] + 16;
	*out_hwirq = intspec[1] + 16;


	/* For SPIs, we need to add 16 more to get the GIC irq ID number */
	/* For SPIs, we need to add 16 more to get the GIC irq ID number */
	if (!intspec[0]) {
	if (!intspec[0])
		ret = gic_routable_irq_domain_ops->xlate(d, controller,
		*out_hwirq += 16;
							 intspec,
							 intsize,
							 out_hwirq,
							 out_type);

		if (IS_ERR_VALUE(ret))
			return ret;
	}


	*out_type = intspec[2] & IRQ_TYPE_SENSE_MASK;
	*out_type = intspec[2] & IRQ_TYPE_SENSE_MASK;


@@ -891,37 +880,6 @@ static const struct irq_domain_ops gic_irq_domain_ops = {
	.xlate = gic_irq_domain_xlate,
	.xlate = gic_irq_domain_xlate,
};
};


/* Default functions for routable irq domain */
static int gic_routable_irq_domain_map(struct irq_domain *d, unsigned int irq,
			      irq_hw_number_t hw)
{
	return 0;
}

static void gic_routable_irq_domain_unmap(struct irq_domain *d,
					  unsigned int irq)
{
}

static int gic_routable_irq_domain_xlate(struct irq_domain *d,
				struct device_node *controller,
				const u32 *intspec, unsigned int intsize,
				unsigned long *out_hwirq,
				unsigned int *out_type)
{
	*out_hwirq += 16;
	return 0;
}

static const struct irq_domain_ops gic_default_routable_irq_domain_ops = {
	.map = gic_routable_irq_domain_map,
	.unmap = gic_routable_irq_domain_unmap,
	.xlate = gic_routable_irq_domain_xlate,
};

const struct irq_domain_ops *gic_routable_irq_domain_ops =
					&gic_default_routable_irq_domain_ops;

void __init gic_init_bases(unsigned int gic_nr, int irq_start,
void __init gic_init_bases(unsigned int gic_nr, int irq_start,
			   void __iomem *dist_base, void __iomem *cpu_base,
			   void __iomem *dist_base, void __iomem *cpu_base,
			   u32 percpu_offset, struct device_node *node)
			   u32 percpu_offset, struct device_node *node)
@@ -929,7 +887,6 @@ void __init gic_init_bases(unsigned int gic_nr, int irq_start,
	irq_hw_number_t hwirq_base;
	irq_hw_number_t hwirq_base;
	struct gic_chip_data *gic;
	struct gic_chip_data *gic;
	int gic_irqs, irq_base, i;
	int gic_irqs, irq_base, i;
	int nr_routable_irqs;


	BUG_ON(gic_nr >= MAX_GIC_NR);
	BUG_ON(gic_nr >= MAX_GIC_NR);


@@ -985,15 +942,9 @@ void __init gic_init_bases(unsigned int gic_nr, int irq_start,
	gic->gic_irqs = gic_irqs;
	gic->gic_irqs = gic_irqs;


	if (node) {		/* DT case */
	if (node) {		/* DT case */
		const struct irq_domain_ops *ops = &gic_irq_domain_hierarchy_ops;
		gic->domain = irq_domain_add_linear(node, gic_irqs,

						    &gic_irq_domain_hierarchy_ops,
		if (!of_property_read_u32(node, "arm,routable-irqs",
						    gic);
					  &nr_routable_irqs)) {
			ops = &gic_irq_domain_ops;
			gic_irqs = nr_routable_irqs;
		}

		gic->domain = irq_domain_add_linear(node, gic_irqs, ops, gic);
	} else {		/* Non-DT case */
	} else {		/* Non-DT case */
		/*
		/*
		 * For primary GICs, skip over SGIs.
		 * For primary GICs, skip over SGIs.
+0 −6
Original line number Original line Diff line number Diff line
@@ -115,11 +115,5 @@ int gic_get_cpu_id(unsigned int cpu);
void gic_migrate_target(unsigned int new_cpu_id);
void gic_migrate_target(unsigned int new_cpu_id);
unsigned long gic_get_sgir_physaddr(void);
unsigned long gic_get_sgir_physaddr(void);


extern const struct irq_domain_ops *gic_routable_irq_domain_ops;
static inline void __init register_routable_domain_ops
					(const struct irq_domain_ops *ops)
{
	gic_routable_irq_domain_ops = ops;
}
#endif /* __ASSEMBLY */
#endif /* __ASSEMBLY */
#endif
#endif