[PATCH] ARM: tegra: consolidate GIC extension usage
Russell King - ARM Linux
linux at arm.linux.org.uk
Wed Apr 27 04:36:57 EDT 2011
On Wed, Apr 20, 2011 at 11:58:24AM +0100, Marc Zyngier wrote:
> Tegra uses its own GIC extension mechanism to drive another interrupt
> controller, used as a wake-up source.
>
> Move this functionality to the recently introduced gic_arch_extn.
> Adding an eoi method also ensures that the knowledge of the interrupt
> flow control is removed from the Tegra code.
A good follow-on step would be...
> static void tegra_mask(struct irq_data *d)
> {
> - tegra_gic_mask_irq(d);
> tegra_legacy_mask_irq(d->irq);
> }
... arranging tegra_legacy_mask_irq() etc to take struct irq_data directly.
These functions could then be removed entirely as they serve no useful
purpose other than transforming the new API back to the old API.
>
> static void tegra_unmask(struct irq_data *d)
> {
> - tegra_gic_unmask_irq(d);
> tegra_legacy_unmask_irq(d->irq);
> }
>
> static void tegra_ack(struct irq_data *d)
> {
> tegra_legacy_force_irq_clr(d->irq);
> - tegra_gic_ack_irq(d);
> +}
> +
> +static void tegra_eoi(struct irq_data *d)
> +{
> + tegra_legacy_force_irq_clr(d->irq);
> }
>
> static int tegra_retrigger(struct irq_data *d)
> @@ -125,36 +123,16 @@ static int tegra_retrigger(struct irq_data *d)
> return 1;
> }
>
> -static struct irq_chip tegra_irq = {
> - .name = "PPI",
> - .irq_ack = tegra_ack,
> - .irq_mask = tegra_mask,
> - .irq_unmask = tegra_unmask,
> - .irq_retrigger = tegra_retrigger,
> -};
> -
> void __init tegra_init_irq(void)
> {
> - struct irq_chip *gic;
> - unsigned int i;
> - int irq;
> -
> tegra_init_legacy_irq();
>
> + gic_arch_extn.irq_eoi = tegra_eoi;
> + gic_arch_extn.irq_ack = tegra_ack;
> + gic_arch_extn.irq_mask = tegra_mask;
> + gic_arch_extn.irq_unmask = tegra_unmask;
> + gic_arch_extn.irq_retrigger = tegra_retrigger;
Hmm, gic_arch_extn should've been a pointer rather than a structure to avoid
architectures repeatedly doing this kind of initialization...
More information about the linux-arm-kernel
mailing list