Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1383293
| From | Jon Hunter <jonathanh@nvidia.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH V2 06/14] irqdomain: Don't set type when mapping an IRQ |
| Date | 2016-04-20 13:10 +0200 |
| Message-ID | <rpYba-6WM-55@gated-at.bofh.it> (permalink) |
| References | <rpYb8-6WM-7@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
Some IRQ chips, such as GPIO controllers or secondary level interrupt
controllers, may require require additional runtime power management
control to ensure they are accessible. For such IRQ chips, it makes sense
to enable the IRQ chip when interrupts are requested and disabled them
again once all interrupts have been freed.
When mapping an IRQ, the IRQ type settings are read and then programmed.
The mapping of the IRQ happens before the IRQ is requested and so the
programming of the type settings occurs before the IRQ is requested. This
is a problem for IRQ chips that require additional power management
control because they may not be accessible yet. Therefore, when mapping
the IRQ, don't program the type settings, just save them and then program
these saved settings when the IRQ is requested (so long as if they are not
overridden via the call to request the IRQ).
Add a stub function for irq_domain_free_irqs() to avoid any compilation
errors when CONFIG_IRQ_DOMAIN_HIERARCHY is not selected.
Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
---
include/linux/irqdomain.h | 3 +++
kernel/irq/irqdomain.c | 17 +++++++++++++----
2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h
index 2aed04396210..fc66876d1965 100644
--- a/include/linux/irqdomain.h
+++ b/include/linux/irqdomain.h
@@ -440,6 +440,9 @@ static inline int irq_domain_alloc_irqs(struct irq_domain *domain,
return -1;
}
+static inline void irq_domain_free_irqs(unsigned int virq,
+ unsigned int nr_irqs) { }
+
static inline bool irq_domain_is_hierarchy(struct irq_domain *domain)
{
return false;
diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index 88e9328b7aab..78a022f560f3 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -569,6 +569,7 @@ static void of_phandle_args_to_fwspec(struct of_phandle_args *irq_data,
unsigned int irq_create_fwspec_mapping(struct irq_fwspec *fwspec)
{
struct irq_domain *domain;
+ struct irq_data *irq_data;
irq_hw_number_t hwirq;
unsigned int type = IRQ_TYPE_NONE;
int virq;
@@ -639,10 +640,18 @@ unsigned int irq_create_fwspec_mapping(struct irq_fwspec *fwspec)
return virq;
}
- /* Set type if specified and different than the current one */
- if (type != IRQ_TYPE_NONE &&
- type != irq_get_trigger_type(virq))
- irq_set_irq_type(virq, type);
+ irq_data = irq_get_irq_data(virq);
+ if (!irq_data) {
+ if (irq_domain_is_hierarchy(domain))
+ irq_domain_free_irqs(virq, 1);
+ else
+ irq_dispose_mapping(virq);
+ return 0;
+ }
+
+ /* Store trigger type */
+ irqd_set_trigger_type(irq_data, type);
+
return virq;
}
EXPORT_SYMBOL_GPL(irq_create_fwspec_mapping);
--
2.1.4
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH V2 00/14] Add support for Tegra210 AGIC Jon Hunter <jonathanh@nvidia.com> - 2016-04-20 13:10 +0200
[PATCH V2 12/14] irqchip/gic: Prepare for adding platform driver Jon Hunter <jonathanh@nvidia.com> - 2016-04-20 13:10 +0200
[PATCH V2 11/14] irqchip/gic: Pass GIC pointer to save/restore functions Jon Hunter <jonathanh@nvidia.com> - 2016-04-20 13:10 +0200
[PATCH V2 13/14] dt-bindings: arm-gic: Add documentation for Tegra210 AGIC Jon Hunter <jonathanh@nvidia.com> - 2016-04-20 13:10 +0200
Re: [PATCH V2 13/14] dt-bindings: arm-gic: Add documentation for Tegra210 AGIC Marc Zyngier <marc.zyngier@arm.com> - 2016-04-22 11:50 +0200
Re: [PATCH V2 13/14] dt-bindings: arm-gic: Add documentation for Tegra210 AGIC Mark Rutland <mark.rutland@arm.com> - 2016-04-22 12:10 +0200
Re: [PATCH V2 13/14] dt-bindings: arm-gic: Add documentation for Tegra210 AGIC Jon Hunter <jonathanh@nvidia.com> - 2016-04-22 13:20 +0200
Re: [PATCH V2 13/14] dt-bindings: arm-gic: Add documentation for Tegra210 AGIC Mark Rutland <mark.rutland@arm.com> - 2016-04-22 13:30 +0200
Re: [PATCH V2 13/14] dt-bindings: arm-gic: Add documentation for Tegra210 AGIC Jon Hunter <jonathanh@nvidia.com> - 2016-04-22 17:00 +0200
Re: [PATCH V2 13/14] dt-bindings: arm-gic: Add documentation for Tegra210 AGIC Jon Hunter <jonathanh@nvidia.com> - 2016-04-27 17:50 +0200
Re: [PATCH V2 13/14] dt-bindings: arm-gic: Add documentation for Tegra210 AGIC Mark Rutland <mark.rutland@arm.com> - 2016-04-27 19:40 +0200
Re: [PATCH V2 13/14] dt-bindings: arm-gic: Add documentation for Tegra210 AGIC Geert Uytterhoeven <geert@linux-m68k.org> - 2016-04-27 20:10 +0200
Re: [PATCH V2 13/14] dt-bindings: arm-gic: Add documentation for Tegra210 AGIC Jon Hunter <jonathanh@nvidia.com> - 2016-04-28 10:20 +0200
Re: [PATCH V2 13/14] dt-bindings: arm-gic: Add documentation for Tegra210 AGIC Geert Uytterhoeven <geert@linux-m68k.org> - 2016-04-28 10:40 +0200
Re: [PATCH V2 13/14] dt-bindings: arm-gic: Add documentation for Tegra210 AGIC Mark Rutland <mark.rutland@arm.com> - 2016-04-28 12:00 +0200
[PATCH V2 06/14] irqdomain: Don't set type when mapping an IRQ Jon Hunter <jonathanh@nvidia.com> - 2016-04-20 13:10 +0200
Re: [PATCH V2 06/14] irqdomain: Don't set type when mapping an IRQ Jon Hunter <jonathanh@nvidia.com> - 2016-04-21 17:50 +0200
Re: [PATCH V2 06/14] irqdomain: Don't set type when mapping an IRQ Marc Zyngier <marc.zyngier@arm.com> - 2016-04-22 10:30 +0200
Re: [PATCH V2 06/14] irqdomain: Don't set type when mapping an IRQ Jon Hunter <jonathanh@nvidia.com> - 2016-04-22 10:50 +0200
Re: [PATCH V2 06/14] irqdomain: Don't set type when mapping an IRQ Marc Zyngier <marc.zyngier@arm.com> - 2016-04-22 11:40 +0200
[PATCH V2 08/14] irqchip/gic: Don't initialise chip if mapping IO space fails Jon Hunter <jonathanh@nvidia.com> - 2016-04-20 13:10 +0200
[PATCH V2 09/14] irqchip/gic: Remove static irq_chip definition for eoimode1 Jon Hunter <jonathanh@nvidia.com> - 2016-04-20 13:10 +0200
[PATCH V2 01/14] irqchip/gic: Don't unnecessarily write the IRQ configuration Jon Hunter <jonathanh@nvidia.com> - 2016-04-20 13:20 +0200
[PATCH V2 04/14] irqdomain: Fix handling of type settings for existing mappings Jon Hunter <jonathanh@nvidia.com> - 2016-04-20 13:20 +0200
Re: [PATCH V2 04/14] irqdomain: Fix handling of type settings for existing mappings Jon Hunter <jonathanh@nvidia.com> - 2016-04-21 13:40 +0200
Re: [PATCH V2 04/14] irqdomain: Fix handling of type settings for existing mappings Marc Zyngier <marc.zyngier@arm.com> - 2016-04-22 10:20 +0200
[PATCH V2 02/14] irqchip/gic: WARN if setting the interrupt type for a PPI fails Jon Hunter <jonathanh@nvidia.com> - 2016-04-20 13:20 +0200
Re: [PATCH V2 02/14] irqchip/gic: WARN if setting the interrupt type for a PPI fails Marc Zyngier <marc.zyngier@arm.com> - 2016-04-22 11:00 +0200
csiph-web