diff options
author | Nishanth Menon <nm@ti.com> | 2014-06-26 03:10:32 -0400 |
---|---|---|
committer | Jason Cooper <jason@lakedaemon.net> | 2014-06-30 15:21:01 -0400 |
commit | 29918b6790d92456cab87ff41a01224e0882d04a (patch) | |
tree | a710a197bb20c387752389dd336e3f4908212003 | |
parent | 2f7d2fb71dd0c14f9c0fe66f2ed7b4685fa745e2 (diff) |
irqchip: crossbar: Introduce centralized check for crossbar write
This is a basic check to ensure that crossbar register needs to be
written. This ensures that we have a common check which is used in
both map and unmap logic.
Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Sricharan R <r.sricharan@ti.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Link: https://lkml.kernel.org/r/1403766634-18543-15-git-send-email-r.sricharan@ti.com
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
-rw-r--r-- | drivers/irqchip/irq-crossbar.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/irqchip/irq-crossbar.c b/drivers/irqchip/irq-crossbar.c index c9f068ca7bc9..83f803bfab76 100644 --- a/drivers/irqchip/irq-crossbar.c +++ b/drivers/irqchip/irq-crossbar.c | |||
@@ -84,10 +84,20 @@ static inline int allocate_free_irq(int cb_no) | |||
84 | return -ENODEV; | 84 | return -ENODEV; |
85 | } | 85 | } |
86 | 86 | ||
87 | static inline bool needs_crossbar_write(irq_hw_number_t hw) | ||
88 | { | ||
89 | if (hw > GIC_IRQ_START) | ||
90 | return true; | ||
91 | |||
92 | return false; | ||
93 | } | ||
94 | |||
87 | static int crossbar_domain_map(struct irq_domain *d, unsigned int irq, | 95 | static int crossbar_domain_map(struct irq_domain *d, unsigned int irq, |
88 | irq_hw_number_t hw) | 96 | irq_hw_number_t hw) |
89 | { | 97 | { |
90 | cb->write(hw - GIC_IRQ_START, cb->irq_map[hw - GIC_IRQ_START]); | 98 | if (needs_crossbar_write(hw)) |
99 | cb->write(hw - GIC_IRQ_START, cb->irq_map[hw - GIC_IRQ_START]); | ||
100 | |||
91 | return 0; | 101 | return 0; |
92 | } | 102 | } |
93 | 103 | ||
@@ -106,7 +116,7 @@ static void crossbar_domain_unmap(struct irq_domain *d, unsigned int irq) | |||
106 | { | 116 | { |
107 | irq_hw_number_t hw = irq_get_irq_data(irq)->hwirq; | 117 | irq_hw_number_t hw = irq_get_irq_data(irq)->hwirq; |
108 | 118 | ||
109 | if (hw > GIC_IRQ_START) { | 119 | if (needs_crossbar_write(hw)) { |
110 | cb->irq_map[hw - GIC_IRQ_START] = IRQ_FREE; | 120 | cb->irq_map[hw - GIC_IRQ_START] = IRQ_FREE; |
111 | cb->write(hw - GIC_IRQ_START, cb->safe_map); | 121 | cb->write(hw - GIC_IRQ_START, cb->safe_map); |
112 | } | 122 | } |