All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/4] irqchip: atmel-aic: Handle aic_common_irq_fixup in aic_common_of_init
@ 2016-01-13  7:19 Milo Kim
  2016-01-13  7:19 ` [PATCH 2/4] irqchip: atmel-aic: Fix wrong bit operation for IRQ priority Milo Kim
                   ` (4 more replies)
  0 siblings, 5 replies; 13+ messages in thread
From: Milo Kim @ 2016-01-13  7:19 UTC (permalink / raw)
  To: tglx
  Cc: boris.brezillon, Milo Kim, Jason Cooper, Marc Zyngier,
	Ludovic Desroches, Nicholas Ferre, linux-kernel

AIC IRQ fixup is handled in each IRQ chip driver.
It can be moved into aic_common_of_init() before returning the result.
Then, aic_common_irq_fixup() can be changed to static type.

Signed-off-by: Milo Kim <milo.kim@ti.com>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Ludovic Desroches <ludovic.desroches@atmel.com>
Cc: Nicholas Ferre <nicolas.ferre@atmel.com>
Cc: linux-kernel@vger.kernel.org
---
 drivers/irqchip/irq-atmel-aic-common.c | 6 ++++--
 drivers/irqchip/irq-atmel-aic-common.h | 5 ++---
 drivers/irqchip/irq-atmel-aic.c        | 4 +---
 drivers/irqchip/irq-atmel-aic5.c       | 4 +---
 4 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/drivers/irqchip/irq-atmel-aic-common.c b/drivers/irqchip/irq-atmel-aic-common.c
index b12a5d5..2f2d73e 100644
--- a/drivers/irqchip/irq-atmel-aic-common.c
+++ b/drivers/irqchip/irq-atmel-aic-common.c
@@ -193,7 +193,7 @@ void __init aic_common_rtt_irq_fixup(struct device_node *root)
 	}
 }
 
-void __init aic_common_irq_fixup(const struct of_device_id *matches)
+static void __init aic_common_irq_fixup(const struct of_device_id *matches)
 {
 	struct device_node *root = of_find_node_by_path("/");
 	const struct of_device_id *match;
@@ -214,7 +214,8 @@ void __init aic_common_irq_fixup(const struct of_device_id *matches)
 
 struct irq_domain *__init aic_common_of_init(struct device_node *node,
 					     const struct irq_domain_ops *ops,
-					     const char *name, int nirqs)
+					     const char *name, int nirqs,
+					     const struct of_device_id *matches)
 {
 	struct irq_chip_generic *gc;
 	struct irq_domain *domain;
@@ -264,6 +265,7 @@ struct irq_domain *__init aic_common_of_init(struct device_node *node,
 	}
 
 	aic_common_ext_irq_of_init(domain);
+	aic_common_irq_fixup(matches);
 
 	return domain;
 
diff --git a/drivers/irqchip/irq-atmel-aic-common.h b/drivers/irqchip/irq-atmel-aic-common.h
index 603f0a9..046bcc8 100644
--- a/drivers/irqchip/irq-atmel-aic-common.h
+++ b/drivers/irqchip/irq-atmel-aic-common.h
@@ -30,12 +30,11 @@ int aic_common_irq_domain_xlate(struct irq_domain *d,
 
 struct irq_domain *__init aic_common_of_init(struct device_node *node,
 					     const struct irq_domain_ops *ops,
-					     const char *name, int nirqs);
+					     const char *name, int nirqs,
+					     const struct of_device_id *matches);
 
 void __init aic_common_rtc_irq_fixup(struct device_node *root);
 
 void __init aic_common_rtt_irq_fixup(struct device_node *root);
 
-void __init aic_common_irq_fixup(const struct of_device_id *matches);
-
 #endif /* __IRQ_ATMEL_AIC_COMMON_H */
diff --git a/drivers/irqchip/irq-atmel-aic.c b/drivers/irqchip/irq-atmel-aic.c
index 8a0c7f2..799834d 100644
--- a/drivers/irqchip/irq-atmel-aic.c
+++ b/drivers/irqchip/irq-atmel-aic.c
@@ -248,12 +248,10 @@ static int __init aic_of_init(struct device_node *node,
 		return -EEXIST;
 
 	domain = aic_common_of_init(node, &aic_irq_ops, "atmel-aic",
-				    NR_AIC_IRQS);
+				    NR_AIC_IRQS, aic_irq_fixups);
 	if (IS_ERR(domain))
 		return PTR_ERR(domain);
 
-	aic_common_irq_fixup(aic_irq_fixups);
-
 	aic_domain = domain;
 	gc = irq_get_domain_generic_chip(domain, 0);
 
diff --git a/drivers/irqchip/irq-atmel-aic5.c b/drivers/irqchip/irq-atmel-aic5.c
index 62bb840..a7e8fc8 100644
--- a/drivers/irqchip/irq-atmel-aic5.c
+++ b/drivers/irqchip/irq-atmel-aic5.c
@@ -312,12 +312,10 @@ static int __init aic5_of_init(struct device_node *node,
 		return -EEXIST;
 
 	domain = aic_common_of_init(node, &aic5_irq_ops, "atmel-aic5",
-				    nirqs);
+				    nirqs, aic5_irq_fixups);
 	if (IS_ERR(domain))
 		return PTR_ERR(domain);
 
-	aic_common_irq_fixup(aic5_irq_fixups);
-
 	aic5_domain = domain;
 	nchips = aic5_domain->revmap_size / 32;
 	for (i = 0; i < nchips; i++) {
-- 
2.7.0

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 2/4] irqchip: atmel-aic: Fix wrong bit operation for IRQ priority
  2016-01-13  7:19 [PATCH 1/4] irqchip: atmel-aic: Handle aic_common_irq_fixup in aic_common_of_init Milo Kim
@ 2016-01-13  7:19 ` Milo Kim
  2016-01-27 11:57   ` [tip:irq/urgent] irqchip/atmel-aic: " tip-bot for Milo Kim
  2016-01-13  7:19 ` [PATCH 3/4] irqchip: atmel-aic: Change return type of aic_common_set_priority() Milo Kim
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 13+ messages in thread
From: Milo Kim @ 2016-01-13  7:19 UTC (permalink / raw)
  To: tglx
  Cc: boris.brezillon, Milo Kim, Jason Cooper, Marc Zyngier,
	Ludovic Desroches, Nicholas Ferre, linux-kernel, #v3 . 17+

Atmel AIC has common structure for SMR (Source Mode Register).

  bit[6:5] Interrupt source type
  bit[2:0] Priority level
  Other bits are unused.

To update new priority value, bit[2:0] should be cleared first and then
new priority level can be written. However, aic_common_set_priority()
helper clears source type bits instead of priority bits.
This patch fixes wrong mask bit operation.

Fixes: b1479ebb7720 ("irqchip: atmel-aic: Add atmel AIC/AIC5 drivers")
Signed-off-by: Milo Kim <milo.kim@ti.com>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Ludovic Desroches <ludovic.desroches@atmel.com>
Cc: Nicholas Ferre <nicolas.ferre@atmel.com>
Cc: linux-kernel@vger.kernel.org
Cc: <stable@vger.kernel.org> #v3.17+
---
 drivers/irqchip/irq-atmel-aic-common.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/irqchip/irq-atmel-aic-common.c b/drivers/irqchip/irq-atmel-aic-common.c
index 2f2d73e..661840b 100644
--- a/drivers/irqchip/irq-atmel-aic-common.c
+++ b/drivers/irqchip/irq-atmel-aic-common.c
@@ -86,7 +86,7 @@ int aic_common_set_priority(int priority, unsigned *val)
 	    priority > AT91_AIC_IRQ_MAX_PRIORITY)
 		return -EINVAL;
 
-	*val &= AT91_AIC_PRIOR;
+	*val &= ~AT91_AIC_PRIOR;
 	*val |= priority;
 
 	return 0;
-- 
2.7.0

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 3/4] irqchip: atmel-aic: Change return type of aic_common_set_priority()
  2016-01-13  7:19 [PATCH 1/4] irqchip: atmel-aic: Handle aic_common_irq_fixup in aic_common_of_init Milo Kim
  2016-01-13  7:19 ` [PATCH 2/4] irqchip: atmel-aic: Fix wrong bit operation for IRQ priority Milo Kim
@ 2016-01-13  7:19 ` Milo Kim
  2016-01-13  8:17   ` Boris Brezillon
                     ` (2 more replies)
  2016-01-13  7:19 ` [PATCH 4/4] irqchip: atmel-aic: Remove duplicate bit operation Milo Kim
                   ` (2 subsequent siblings)
  4 siblings, 3 replies; 13+ messages in thread
From: Milo Kim @ 2016-01-13  7:19 UTC (permalink / raw)
  To: tglx
  Cc: boris.brezillon, Milo Kim, Jason Cooper, Marc Zyngier,
	Ludovic Desroches, Nicholas Ferre, linux-kernel

Priority validation is not necessary because aic_common_irq_domain_xlate()
already handles it. With this removal, return type can be changed to void.

Signed-off-by: Milo Kim <milo.kim@ti.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
Cc: Ludovic Desroches <ludovic.desroches@atmel.com>
Cc: Nicholas Ferre <nicolas.ferre@atmel.com>
Cc: linux-kernel@vger.kernel.org
---
 drivers/irqchip/irq-atmel-aic-common.c | 8 +-------
 drivers/irqchip/irq-atmel-aic-common.h | 2 +-
 drivers/irqchip/irq-atmel-aic.c        | 5 ++---
 drivers/irqchip/irq-atmel-aic5.c       | 5 ++---
 4 files changed, 6 insertions(+), 14 deletions(-)

diff --git a/drivers/irqchip/irq-atmel-aic-common.c b/drivers/irqchip/irq-atmel-aic-common.c
index 661840b..28b26c8 100644
--- a/drivers/irqchip/irq-atmel-aic-common.c
+++ b/drivers/irqchip/irq-atmel-aic-common.c
@@ -80,16 +80,10 @@ int aic_common_set_type(struct irq_data *d, unsigned type, unsigned *val)
 	return 0;
 }
 
-int aic_common_set_priority(int priority, unsigned *val)
+void aic_common_set_priority(int priority, unsigned *val)
 {
-	if (priority < AT91_AIC_IRQ_MIN_PRIORITY ||
-	    priority > AT91_AIC_IRQ_MAX_PRIORITY)
-		return -EINVAL;
-
 	*val &= ~AT91_AIC_PRIOR;
 	*val |= priority;
-
-	return 0;
 }
 
 int aic_common_irq_domain_xlate(struct irq_domain *d,
diff --git a/drivers/irqchip/irq-atmel-aic-common.h b/drivers/irqchip/irq-atmel-aic-common.h
index 046bcc8..af60376 100644
--- a/drivers/irqchip/irq-atmel-aic-common.h
+++ b/drivers/irqchip/irq-atmel-aic-common.h
@@ -19,7 +19,7 @@
 
 int aic_common_set_type(struct irq_data *d, unsigned type, unsigned *val);
 
-int aic_common_set_priority(int priority, unsigned *val);
+void aic_common_set_priority(int priority, unsigned *val);
 
 int aic_common_irq_domain_xlate(struct irq_domain *d,
 				struct device_node *ctrlr,
diff --git a/drivers/irqchip/irq-atmel-aic.c b/drivers/irqchip/irq-atmel-aic.c
index 799834d..112e17c 100644
--- a/drivers/irqchip/irq-atmel-aic.c
+++ b/drivers/irqchip/irq-atmel-aic.c
@@ -196,9 +196,8 @@ static int aic_irq_domain_xlate(struct irq_domain *d,
 
 	irq_gc_lock(gc);
 	smr = irq_reg_readl(gc, AT91_AIC_SMR(*out_hwirq));
-	ret = aic_common_set_priority(intspec[2], &smr);
-	if (!ret)
-		irq_reg_writel(gc, smr, AT91_AIC_SMR(*out_hwirq));
+	aic_common_set_priority(intspec[2], &smr);
+	irq_reg_writel(gc, smr, AT91_AIC_SMR(*out_hwirq));
 	irq_gc_unlock(gc);
 
 	return ret;
diff --git a/drivers/irqchip/irq-atmel-aic5.c b/drivers/irqchip/irq-atmel-aic5.c
index a7e8fc8..f36f426 100644
--- a/drivers/irqchip/irq-atmel-aic5.c
+++ b/drivers/irqchip/irq-atmel-aic5.c
@@ -272,9 +272,8 @@ static int aic5_irq_domain_xlate(struct irq_domain *d,
 	irq_gc_lock(bgc);
 	irq_reg_writel(bgc, *out_hwirq, AT91_AIC5_SSR);
 	smr = irq_reg_readl(bgc, AT91_AIC5_SMR);
-	ret = aic_common_set_priority(intspec[2], &smr);
-	if (!ret)
-		irq_reg_writel(bgc, intspec[2] | smr, AT91_AIC5_SMR);
+	aic_common_set_priority(intspec[2], &smr);
+	irq_reg_writel(bgc, intspec[2] | smr, AT91_AIC5_SMR);
 	irq_gc_unlock(bgc);
 
 	return ret;
-- 
2.7.0

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 4/4] irqchip: atmel-aic: Remove duplicate bit operation
  2016-01-13  7:19 [PATCH 1/4] irqchip: atmel-aic: Handle aic_common_irq_fixup in aic_common_of_init Milo Kim
  2016-01-13  7:19 ` [PATCH 2/4] irqchip: atmel-aic: Fix wrong bit operation for IRQ priority Milo Kim
  2016-01-13  7:19 ` [PATCH 3/4] irqchip: atmel-aic: Change return type of aic_common_set_priority() Milo Kim
@ 2016-01-13  7:19 ` Milo Kim
  2016-01-13  8:18   ` Boris Brezillon
                     ` (2 more replies)
  2016-02-08 10:48 ` [tip:irq/core] irqchip/atmel-aic: Handle aic_common_irq_fixup in aic_common_of_init tip-bot for Milo Kim
  2016-02-08 14:06 ` tip-bot for Milo Kim
  4 siblings, 3 replies; 13+ messages in thread
From: Milo Kim @ 2016-01-13  7:19 UTC (permalink / raw)
  To: tglx
  Cc: boris.brezillon, Milo Kim, Jason Cooper, Marc Zyngier,
	Ludovic Desroches, Nicholas Ferre, linux-kernel

AIC5 priority value is updated twice -
in aic_common_set_priority() and when updating AT91_AIC5_SMR.
Variable, 'smr' has updated priority value (intspec[2]) in the first step,
so no need to update it again in the second step.

Signed-off-by: Milo Kim <milo.kim@ti.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
Cc: Ludovic Desroches <ludovic.desroches@atmel.com>
Cc: Nicholas Ferre <nicolas.ferre@atmel.com>
Cc: linux-kernel@vger.kernel.org
---
 drivers/irqchip/irq-atmel-aic5.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/irqchip/irq-atmel-aic5.c b/drivers/irqchip/irq-atmel-aic5.c
index f36f426..4f0d068 100644
--- a/drivers/irqchip/irq-atmel-aic5.c
+++ b/drivers/irqchip/irq-atmel-aic5.c
@@ -273,7 +273,7 @@ static int aic5_irq_domain_xlate(struct irq_domain *d,
 	irq_reg_writel(bgc, *out_hwirq, AT91_AIC5_SSR);
 	smr = irq_reg_readl(bgc, AT91_AIC5_SMR);
 	aic_common_set_priority(intspec[2], &smr);
-	irq_reg_writel(bgc, intspec[2] | smr, AT91_AIC5_SMR);
+	irq_reg_writel(bgc, smr, AT91_AIC5_SMR);
 	irq_gc_unlock(bgc);
 
 	return ret;
-- 
2.7.0

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/4] irqchip: atmel-aic: Change return type of aic_common_set_priority()
  2016-01-13  7:19 ` [PATCH 3/4] irqchip: atmel-aic: Change return type of aic_common_set_priority() Milo Kim
@ 2016-01-13  8:17   ` Boris Brezillon
  2016-02-08 10:49   ` [tip:irq/core] irqchip/atmel-aic: " tip-bot for Milo Kim
  2016-02-08 14:06   ` tip-bot for Milo Kim
  2 siblings, 0 replies; 13+ messages in thread
From: Boris Brezillon @ 2016-01-13  8:17 UTC (permalink / raw)
  To: Milo Kim
  Cc: tglx, Jason Cooper, Marc Zyngier, Ludovic Desroches,
	Nicholas Ferre, linux-kernel

On Wed, 13 Jan 2016 16:19:51 +0900
Milo Kim <milo.kim@ti.com> wrote:

> Priority validation is not necessary because aic_common_irq_domain_xlate()
> already handles it. With this removal, return type can be changed to void.
> 
> Signed-off-by: Milo Kim <milo.kim@ti.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Jason Cooper <jason@lakedaemon.net>
> Cc: Marc Zyngier <marc.zyngier@arm.com>
> Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
> Cc: Ludovic Desroches <ludovic.desroches@atmel.com>
> Cc: Nicholas Ferre <nicolas.ferre@atmel.com>
> Cc: linux-kernel@vger.kernel.org

Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>

Thanks,

Boris

> ---
>  drivers/irqchip/irq-atmel-aic-common.c | 8 +-------
>  drivers/irqchip/irq-atmel-aic-common.h | 2 +-
>  drivers/irqchip/irq-atmel-aic.c        | 5 ++---
>  drivers/irqchip/irq-atmel-aic5.c       | 5 ++---
>  4 files changed, 6 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/irqchip/irq-atmel-aic-common.c b/drivers/irqchip/irq-atmel-aic-common.c
> index 661840b..28b26c8 100644
> --- a/drivers/irqchip/irq-atmel-aic-common.c
> +++ b/drivers/irqchip/irq-atmel-aic-common.c
> @@ -80,16 +80,10 @@ int aic_common_set_type(struct irq_data *d, unsigned type, unsigned *val)
>  	return 0;
>  }
>  
> -int aic_common_set_priority(int priority, unsigned *val)
> +void aic_common_set_priority(int priority, unsigned *val)
>  {
> -	if (priority < AT91_AIC_IRQ_MIN_PRIORITY ||
> -	    priority > AT91_AIC_IRQ_MAX_PRIORITY)
> -		return -EINVAL;
> -
>  	*val &= ~AT91_AIC_PRIOR;
>  	*val |= priority;
> -
> -	return 0;
>  }
>  
>  int aic_common_irq_domain_xlate(struct irq_domain *d,
> diff --git a/drivers/irqchip/irq-atmel-aic-common.h b/drivers/irqchip/irq-atmel-aic-common.h
> index 046bcc8..af60376 100644
> --- a/drivers/irqchip/irq-atmel-aic-common.h
> +++ b/drivers/irqchip/irq-atmel-aic-common.h
> @@ -19,7 +19,7 @@
>  
>  int aic_common_set_type(struct irq_data *d, unsigned type, unsigned *val);
>  
> -int aic_common_set_priority(int priority, unsigned *val);
> +void aic_common_set_priority(int priority, unsigned *val);
>  
>  int aic_common_irq_domain_xlate(struct irq_domain *d,
>  				struct device_node *ctrlr,
> diff --git a/drivers/irqchip/irq-atmel-aic.c b/drivers/irqchip/irq-atmel-aic.c
> index 799834d..112e17c 100644
> --- a/drivers/irqchip/irq-atmel-aic.c
> +++ b/drivers/irqchip/irq-atmel-aic.c
> @@ -196,9 +196,8 @@ static int aic_irq_domain_xlate(struct irq_domain *d,
>  
>  	irq_gc_lock(gc);
>  	smr = irq_reg_readl(gc, AT91_AIC_SMR(*out_hwirq));
> -	ret = aic_common_set_priority(intspec[2], &smr);
> -	if (!ret)
> -		irq_reg_writel(gc, smr, AT91_AIC_SMR(*out_hwirq));
> +	aic_common_set_priority(intspec[2], &smr);
> +	irq_reg_writel(gc, smr, AT91_AIC_SMR(*out_hwirq));
>  	irq_gc_unlock(gc);
>  
>  	return ret;
> diff --git a/drivers/irqchip/irq-atmel-aic5.c b/drivers/irqchip/irq-atmel-aic5.c
> index a7e8fc8..f36f426 100644
> --- a/drivers/irqchip/irq-atmel-aic5.c
> +++ b/drivers/irqchip/irq-atmel-aic5.c
> @@ -272,9 +272,8 @@ static int aic5_irq_domain_xlate(struct irq_domain *d,
>  	irq_gc_lock(bgc);
>  	irq_reg_writel(bgc, *out_hwirq, AT91_AIC5_SSR);
>  	smr = irq_reg_readl(bgc, AT91_AIC5_SMR);
> -	ret = aic_common_set_priority(intspec[2], &smr);
> -	if (!ret)
> -		irq_reg_writel(bgc, intspec[2] | smr, AT91_AIC5_SMR);
> +	aic_common_set_priority(intspec[2], &smr);
> +	irq_reg_writel(bgc, intspec[2] | smr, AT91_AIC5_SMR);
>  	irq_gc_unlock(bgc);
>  
>  	return ret;



-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 4/4] irqchip: atmel-aic: Remove duplicate bit operation
  2016-01-13  7:19 ` [PATCH 4/4] irqchip: atmel-aic: Remove duplicate bit operation Milo Kim
@ 2016-01-13  8:18   ` Boris Brezillon
  2016-02-08 10:49   ` [tip:irq/core] irqchip/atmel-aic: " tip-bot for Milo Kim
  2016-02-08 14:07   ` tip-bot for Milo Kim
  2 siblings, 0 replies; 13+ messages in thread
From: Boris Brezillon @ 2016-01-13  8:18 UTC (permalink / raw)
  To: Milo Kim
  Cc: tglx, Jason Cooper, Marc Zyngier, Ludovic Desroches,
	Nicholas Ferre, linux-kernel

On Wed, 13 Jan 2016 16:19:52 +0900
Milo Kim <milo.kim@ti.com> wrote:

> AIC5 priority value is updated twice -
> in aic_common_set_priority() and when updating AT91_AIC5_SMR.
> Variable, 'smr' has updated priority value (intspec[2]) in the first step,
> so no need to update it again in the second step.
> 
> Signed-off-by: Milo Kim <milo.kim@ti.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Jason Cooper <jason@lakedaemon.net>
> Cc: Marc Zyngier <marc.zyngier@arm.com>
> Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
> Cc: Ludovic Desroches <ludovic.desroches@atmel.com>
> Cc: Nicholas Ferre <nicolas.ferre@atmel.com>
> Cc: linux-kernel@vger.kernel.org

Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>

Thanks,

Boris

> ---
>  drivers/irqchip/irq-atmel-aic5.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/irqchip/irq-atmel-aic5.c b/drivers/irqchip/irq-atmel-aic5.c
> index f36f426..4f0d068 100644
> --- a/drivers/irqchip/irq-atmel-aic5.c
> +++ b/drivers/irqchip/irq-atmel-aic5.c
> @@ -273,7 +273,7 @@ static int aic5_irq_domain_xlate(struct irq_domain *d,
>  	irq_reg_writel(bgc, *out_hwirq, AT91_AIC5_SSR);
>  	smr = irq_reg_readl(bgc, AT91_AIC5_SMR);
>  	aic_common_set_priority(intspec[2], &smr);
> -	irq_reg_writel(bgc, intspec[2] | smr, AT91_AIC5_SMR);
> +	irq_reg_writel(bgc, smr, AT91_AIC5_SMR);
>  	irq_gc_unlock(bgc);
>  
>  	return ret;



-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [tip:irq/urgent] irqchip/atmel-aic: Fix wrong bit operation for IRQ priority
  2016-01-13  7:19 ` [PATCH 2/4] irqchip: atmel-aic: Fix wrong bit operation for IRQ priority Milo Kim
@ 2016-01-27 11:57   ` tip-bot for Milo Kim
  0 siblings, 0 replies; 13+ messages in thread
From: tip-bot for Milo Kim @ 2016-01-27 11:57 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: nicolas.ferre, milo.kim, mingo, linux-kernel, jason, hpa, tglx,
	boris.brezillon, marc.zyngier, ludovic.desroches

Commit-ID:  49f34134aea74f19ca016f055d25ee55ec359dee
Gitweb:     http://git.kernel.org/tip/49f34134aea74f19ca016f055d25ee55ec359dee
Author:     Milo Kim <milo.kim@ti.com>
AuthorDate: Wed, 13 Jan 2016 16:19:50 +0900
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Wed, 27 Jan 2016 12:54:33 +0100

irqchip/atmel-aic: Fix wrong bit operation for IRQ priority

Atmel AIC has common structure for SMR (Source Mode Register).

  bit[6:5] Interrupt source type
  bit[2:0] Priority level
  Other bits are unused.

To update new priority value, bit[2:0] should be cleared first and then
new priority level can be written. However, aic_common_set_priority()
helper clears source type bits instead of priority bits.
This patch fixes wrong mask bit operation.

Fixes: b1479ebb7720 "irqchip: atmel-aic: Add atmel AIC/AIC5 drivers"
Signed-off-by: Milo Kim <milo.kim@ti.com>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Ludovic Desroches <ludovic.desroches@atmel.com>
Cc: Nicholas Ferre <nicolas.ferre@atmel.com>
Cc: stable@vger.kernel.org #v3.17+
Link: http://lkml.kernel.org/r/1452669592-3401-2-git-send-email-milo.kim@ti.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 drivers/irqchip/irq-atmel-aic-common.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/irqchip/irq-atmel-aic-common.c b/drivers/irqchip/irq-atmel-aic-common.c
index b12a5d5..37199b9 100644
--- a/drivers/irqchip/irq-atmel-aic-common.c
+++ b/drivers/irqchip/irq-atmel-aic-common.c
@@ -86,7 +86,7 @@ int aic_common_set_priority(int priority, unsigned *val)
 	    priority > AT91_AIC_IRQ_MAX_PRIORITY)
 		return -EINVAL;
 
-	*val &= AT91_AIC_PRIOR;
+	*val &= ~AT91_AIC_PRIOR;
 	*val |= priority;
 
 	return 0;

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [tip:irq/core] irqchip/atmel-aic: Handle aic_common_irq_fixup in aic_common_of_init
  2016-01-13  7:19 [PATCH 1/4] irqchip: atmel-aic: Handle aic_common_irq_fixup in aic_common_of_init Milo Kim
                   ` (2 preceding siblings ...)
  2016-01-13  7:19 ` [PATCH 4/4] irqchip: atmel-aic: Remove duplicate bit operation Milo Kim
@ 2016-02-08 10:48 ` tip-bot for Milo Kim
  2016-02-08 14:06 ` tip-bot for Milo Kim
  4 siblings, 0 replies; 13+ messages in thread
From: tip-bot for Milo Kim @ 2016-02-08 10:48 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: mingo, marc.zyngier, jason, nicolas.ferre, ludovic.desroches,
	hpa, tglx, milo.kim, boris.brezillon, linux-kernel

Commit-ID:  665075d0c77d5eec1badc55cb4b97b8497ef954b
Gitweb:     http://git.kernel.org/tip/665075d0c77d5eec1badc55cb4b97b8497ef954b
Author:     Milo Kim <milo.kim@ti.com>
AuthorDate: Wed, 13 Jan 2016 16:19:49 +0900
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 8 Feb 2016 11:45:21 +0100

irqchip/atmel-aic: Handle aic_common_irq_fixup in aic_common_of_init

AIC IRQ fixup is handled in each IRQ chip driver.
It can be moved into aic_common_of_init() before returning the result.
Then, aic_common_irq_fixup() can be changed to static type.

Signed-off-by: Milo Kim <milo.kim@ti.com>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Ludovic Desroches <ludovic.desroches@atmel.com>
Cc: Nicholas Ferre <nicolas.ferre@atmel.com>
Link: http://lkml.kernel.org/r/1452669592-3401-1-git-send-email-milo.kim@ti.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 drivers/irqchip/irq-atmel-aic-common.c | 6 ++++--
 drivers/irqchip/irq-atmel-aic-common.h | 5 ++---
 drivers/irqchip/irq-atmel-aic.c        | 4 +---
 drivers/irqchip/irq-atmel-aic5.c       | 4 +---
 4 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/drivers/irqchip/irq-atmel-aic-common.c b/drivers/irqchip/irq-atmel-aic-common.c
index 37199b9..661840b 100644
--- a/drivers/irqchip/irq-atmel-aic-common.c
+++ b/drivers/irqchip/irq-atmel-aic-common.c
@@ -193,7 +193,7 @@ void __init aic_common_rtt_irq_fixup(struct device_node *root)
 	}
 }
 
-void __init aic_common_irq_fixup(const struct of_device_id *matches)
+static void __init aic_common_irq_fixup(const struct of_device_id *matches)
 {
 	struct device_node *root = of_find_node_by_path("/");
 	const struct of_device_id *match;
@@ -214,7 +214,8 @@ void __init aic_common_irq_fixup(const struct of_device_id *matches)
 
 struct irq_domain *__init aic_common_of_init(struct device_node *node,
 					     const struct irq_domain_ops *ops,
-					     const char *name, int nirqs)
+					     const char *name, int nirqs,
+					     const struct of_device_id *matches)
 {
 	struct irq_chip_generic *gc;
 	struct irq_domain *domain;
@@ -264,6 +265,7 @@ struct irq_domain *__init aic_common_of_init(struct device_node *node,
 	}
 
 	aic_common_ext_irq_of_init(domain);
+	aic_common_irq_fixup(matches);
 
 	return domain;
 
diff --git a/drivers/irqchip/irq-atmel-aic-common.h b/drivers/irqchip/irq-atmel-aic-common.h
index 603f0a9..046bcc8 100644
--- a/drivers/irqchip/irq-atmel-aic-common.h
+++ b/drivers/irqchip/irq-atmel-aic-common.h
@@ -30,12 +30,11 @@ int aic_common_irq_domain_xlate(struct irq_domain *d,
 
 struct irq_domain *__init aic_common_of_init(struct device_node *node,
 					     const struct irq_domain_ops *ops,
-					     const char *name, int nirqs);
+					     const char *name, int nirqs,
+					     const struct of_device_id *matches);
 
 void __init aic_common_rtc_irq_fixup(struct device_node *root);
 
 void __init aic_common_rtt_irq_fixup(struct device_node *root);
 
-void __init aic_common_irq_fixup(const struct of_device_id *matches);
-
 #endif /* __IRQ_ATMEL_AIC_COMMON_H */
diff --git a/drivers/irqchip/irq-atmel-aic.c b/drivers/irqchip/irq-atmel-aic.c
index 8a0c7f2..799834d 100644
--- a/drivers/irqchip/irq-atmel-aic.c
+++ b/drivers/irqchip/irq-atmel-aic.c
@@ -248,12 +248,10 @@ static int __init aic_of_init(struct device_node *node,
 		return -EEXIST;
 
 	domain = aic_common_of_init(node, &aic_irq_ops, "atmel-aic",
-				    NR_AIC_IRQS);
+				    NR_AIC_IRQS, aic_irq_fixups);
 	if (IS_ERR(domain))
 		return PTR_ERR(domain);
 
-	aic_common_irq_fixup(aic_irq_fixups);
-
 	aic_domain = domain;
 	gc = irq_get_domain_generic_chip(domain, 0);
 
diff --git a/drivers/irqchip/irq-atmel-aic5.c b/drivers/irqchip/irq-atmel-aic5.c
index 62bb840..a7e8fc8 100644
--- a/drivers/irqchip/irq-atmel-aic5.c
+++ b/drivers/irqchip/irq-atmel-aic5.c
@@ -312,12 +312,10 @@ static int __init aic5_of_init(struct device_node *node,
 		return -EEXIST;
 
 	domain = aic_common_of_init(node, &aic5_irq_ops, "atmel-aic5",
-				    nirqs);
+				    nirqs, aic5_irq_fixups);
 	if (IS_ERR(domain))
 		return PTR_ERR(domain);
 
-	aic_common_irq_fixup(aic5_irq_fixups);
-
 	aic5_domain = domain;
 	nchips = aic5_domain->revmap_size / 32;
 	for (i = 0; i < nchips; i++) {

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [tip:irq/core] irqchip/atmel-aic: Change return type of aic_common_set_priority()
  2016-01-13  7:19 ` [PATCH 3/4] irqchip: atmel-aic: Change return type of aic_common_set_priority() Milo Kim
  2016-01-13  8:17   ` Boris Brezillon
@ 2016-02-08 10:49   ` tip-bot for Milo Kim
  2016-02-08 14:06   ` tip-bot for Milo Kim
  2 siblings, 0 replies; 13+ messages in thread
From: tip-bot for Milo Kim @ 2016-02-08 10:49 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: marc.zyngier, ludovic.desroches, jason, tglx, nicolas.ferre,
	boris.brezillon, milo.kim, mingo, hpa, linux-kernel

Commit-ID:  e0c42e6fd595c4475687381e29bde8e632e880db
Gitweb:     http://git.kernel.org/tip/e0c42e6fd595c4475687381e29bde8e632e880db
Author:     Milo Kim <milo.kim@ti.com>
AuthorDate: Wed, 13 Jan 2016 16:19:51 +0900
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 8 Feb 2016 11:45:21 +0100

irqchip/atmel-aic: Change return type of aic_common_set_priority()

Priority validation is not necessary because aic_common_irq_domain_xlate()
already handles it. With this removal, return type can be changed to void.

Signed-off-by: Milo Kim <milo.kim@ti.com>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Ludovic Desroches <ludovic.desroches@atmel.com>
Cc: Nicholas Ferre <nicolas.ferre@atmel.com>
Link: http://lkml.kernel.org/r/1452669592-3401-3-git-send-email-milo.kim@ti.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 drivers/irqchip/irq-atmel-aic-common.c | 8 +-------
 drivers/irqchip/irq-atmel-aic-common.h | 2 +-
 drivers/irqchip/irq-atmel-aic.c        | 5 ++---
 drivers/irqchip/irq-atmel-aic5.c       | 5 ++---
 4 files changed, 6 insertions(+), 14 deletions(-)

diff --git a/drivers/irqchip/irq-atmel-aic-common.c b/drivers/irqchip/irq-atmel-aic-common.c
index 661840b..28b26c8 100644
--- a/drivers/irqchip/irq-atmel-aic-common.c
+++ b/drivers/irqchip/irq-atmel-aic-common.c
@@ -80,16 +80,10 @@ int aic_common_set_type(struct irq_data *d, unsigned type, unsigned *val)
 	return 0;
 }
 
-int aic_common_set_priority(int priority, unsigned *val)
+void aic_common_set_priority(int priority, unsigned *val)
 {
-	if (priority < AT91_AIC_IRQ_MIN_PRIORITY ||
-	    priority > AT91_AIC_IRQ_MAX_PRIORITY)
-		return -EINVAL;
-
 	*val &= ~AT91_AIC_PRIOR;
 	*val |= priority;
-
-	return 0;
 }
 
 int aic_common_irq_domain_xlate(struct irq_domain *d,
diff --git a/drivers/irqchip/irq-atmel-aic-common.h b/drivers/irqchip/irq-atmel-aic-common.h
index 046bcc8..af60376 100644
--- a/drivers/irqchip/irq-atmel-aic-common.h
+++ b/drivers/irqchip/irq-atmel-aic-common.h
@@ -19,7 +19,7 @@
 
 int aic_common_set_type(struct irq_data *d, unsigned type, unsigned *val);
 
-int aic_common_set_priority(int priority, unsigned *val);
+void aic_common_set_priority(int priority, unsigned *val);
 
 int aic_common_irq_domain_xlate(struct irq_domain *d,
 				struct device_node *ctrlr,
diff --git a/drivers/irqchip/irq-atmel-aic.c b/drivers/irqchip/irq-atmel-aic.c
index 799834d..112e17c 100644
--- a/drivers/irqchip/irq-atmel-aic.c
+++ b/drivers/irqchip/irq-atmel-aic.c
@@ -196,9 +196,8 @@ static int aic_irq_domain_xlate(struct irq_domain *d,
 
 	irq_gc_lock(gc);
 	smr = irq_reg_readl(gc, AT91_AIC_SMR(*out_hwirq));
-	ret = aic_common_set_priority(intspec[2], &smr);
-	if (!ret)
-		irq_reg_writel(gc, smr, AT91_AIC_SMR(*out_hwirq));
+	aic_common_set_priority(intspec[2], &smr);
+	irq_reg_writel(gc, smr, AT91_AIC_SMR(*out_hwirq));
 	irq_gc_unlock(gc);
 
 	return ret;
diff --git a/drivers/irqchip/irq-atmel-aic5.c b/drivers/irqchip/irq-atmel-aic5.c
index a7e8fc8..f36f426 100644
--- a/drivers/irqchip/irq-atmel-aic5.c
+++ b/drivers/irqchip/irq-atmel-aic5.c
@@ -272,9 +272,8 @@ static int aic5_irq_domain_xlate(struct irq_domain *d,
 	irq_gc_lock(bgc);
 	irq_reg_writel(bgc, *out_hwirq, AT91_AIC5_SSR);
 	smr = irq_reg_readl(bgc, AT91_AIC5_SMR);
-	ret = aic_common_set_priority(intspec[2], &smr);
-	if (!ret)
-		irq_reg_writel(bgc, intspec[2] | smr, AT91_AIC5_SMR);
+	aic_common_set_priority(intspec[2], &smr);
+	irq_reg_writel(bgc, intspec[2] | smr, AT91_AIC5_SMR);
 	irq_gc_unlock(bgc);
 
 	return ret;

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [tip:irq/core] irqchip/atmel-aic: Remove duplicate bit operation
  2016-01-13  7:19 ` [PATCH 4/4] irqchip: atmel-aic: Remove duplicate bit operation Milo Kim
  2016-01-13  8:18   ` Boris Brezillon
@ 2016-02-08 10:49   ` tip-bot for Milo Kim
  2016-02-08 14:07   ` tip-bot for Milo Kim
  2 siblings, 0 replies; 13+ messages in thread
From: tip-bot for Milo Kim @ 2016-02-08 10:49 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: ludovic.desroches, marc.zyngier, nicolas.ferre, hpa,
	linux-kernel, mingo, boris.brezillon, jason, milo.kim, tglx

Commit-ID:  8c7baa8c3d57004ed3e850fb7a106acf38810e3c
Gitweb:     http://git.kernel.org/tip/8c7baa8c3d57004ed3e850fb7a106acf38810e3c
Author:     Milo Kim <milo.kim@ti.com>
AuthorDate: Wed, 13 Jan 2016 16:19:52 +0900
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 8 Feb 2016 11:45:21 +0100

irqchip/atmel-aic: Remove duplicate bit operation

AIC5 priority value is updated twice -
in aic_common_set_priority() and when updating AT91_AIC5_SMR.
Variable, 'smr' has updated priority value (intspec[2]) in the first step,
so no need to update it again in the second step.

Signed-off-by: Milo Kim <milo.kim@ti.com>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Ludovic Desroches <ludovic.desroches@atmel.com>
Cc: Nicholas Ferre <nicolas.ferre@atmel.com>
Link: http://lkml.kernel.org/r/1452669592-3401-4-git-send-email-milo.kim@ti.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 drivers/irqchip/irq-atmel-aic5.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/irqchip/irq-atmel-aic5.c b/drivers/irqchip/irq-atmel-aic5.c
index f36f426..4f0d068 100644
--- a/drivers/irqchip/irq-atmel-aic5.c
+++ b/drivers/irqchip/irq-atmel-aic5.c
@@ -273,7 +273,7 @@ static int aic5_irq_domain_xlate(struct irq_domain *d,
 	irq_reg_writel(bgc, *out_hwirq, AT91_AIC5_SSR);
 	smr = irq_reg_readl(bgc, AT91_AIC5_SMR);
 	aic_common_set_priority(intspec[2], &smr);
-	irq_reg_writel(bgc, intspec[2] | smr, AT91_AIC5_SMR);
+	irq_reg_writel(bgc, smr, AT91_AIC5_SMR);
 	irq_gc_unlock(bgc);
 
 	return ret;

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [tip:irq/core] irqchip/atmel-aic: Handle aic_common_irq_fixup in aic_common_of_init
  2016-01-13  7:19 [PATCH 1/4] irqchip: atmel-aic: Handle aic_common_irq_fixup in aic_common_of_init Milo Kim
                   ` (3 preceding siblings ...)
  2016-02-08 10:48 ` [tip:irq/core] irqchip/atmel-aic: Handle aic_common_irq_fixup in aic_common_of_init tip-bot for Milo Kim
@ 2016-02-08 14:06 ` tip-bot for Milo Kim
  4 siblings, 0 replies; 13+ messages in thread
From: tip-bot for Milo Kim @ 2016-02-08 14:06 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: ludovic.desroches, nicolas.ferre, mingo, linux-kernel,
	marc.zyngier, tglx, jason, boris.brezillon, milo.kim, hpa

Commit-ID:  dd85c79150079339b3ded62dda5f6985d192900a
Gitweb:     http://git.kernel.org/tip/dd85c79150079339b3ded62dda5f6985d192900a
Author:     Milo Kim <milo.kim@ti.com>
AuthorDate: Wed, 13 Jan 2016 16:19:49 +0900
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 8 Feb 2016 15:03:42 +0100

irqchip/atmel-aic: Handle aic_common_irq_fixup in aic_common_of_init

AIC IRQ fixup is handled in each IRQ chip driver.
It can be moved into aic_common_of_init() before returning the result.
Then, aic_common_irq_fixup() can be changed to static type.

Signed-off-by: Milo Kim <milo.kim@ti.com>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Ludovic Desroches <ludovic.desroches@atmel.com>
Cc: Nicholas Ferre <nicolas.ferre@atmel.com>
Link: http://lkml.kernel.org/r/1452669592-3401-1-git-send-email-milo.kim@ti.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 drivers/irqchip/irq-atmel-aic-common.c | 6 ++++--
 drivers/irqchip/irq-atmel-aic-common.h | 5 ++---
 drivers/irqchip/irq-atmel-aic.c        | 4 +---
 drivers/irqchip/irq-atmel-aic5.c       | 4 +---
 4 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/drivers/irqchip/irq-atmel-aic-common.c b/drivers/irqchip/irq-atmel-aic-common.c
index 37199b9..661840b 100644
--- a/drivers/irqchip/irq-atmel-aic-common.c
+++ b/drivers/irqchip/irq-atmel-aic-common.c
@@ -193,7 +193,7 @@ void __init aic_common_rtt_irq_fixup(struct device_node *root)
 	}
 }
 
-void __init aic_common_irq_fixup(const struct of_device_id *matches)
+static void __init aic_common_irq_fixup(const struct of_device_id *matches)
 {
 	struct device_node *root = of_find_node_by_path("/");
 	const struct of_device_id *match;
@@ -214,7 +214,8 @@ void __init aic_common_irq_fixup(const struct of_device_id *matches)
 
 struct irq_domain *__init aic_common_of_init(struct device_node *node,
 					     const struct irq_domain_ops *ops,
-					     const char *name, int nirqs)
+					     const char *name, int nirqs,
+					     const struct of_device_id *matches)
 {
 	struct irq_chip_generic *gc;
 	struct irq_domain *domain;
@@ -264,6 +265,7 @@ struct irq_domain *__init aic_common_of_init(struct device_node *node,
 	}
 
 	aic_common_ext_irq_of_init(domain);
+	aic_common_irq_fixup(matches);
 
 	return domain;
 
diff --git a/drivers/irqchip/irq-atmel-aic-common.h b/drivers/irqchip/irq-atmel-aic-common.h
index 603f0a9..046bcc8 100644
--- a/drivers/irqchip/irq-atmel-aic-common.h
+++ b/drivers/irqchip/irq-atmel-aic-common.h
@@ -30,12 +30,11 @@ int aic_common_irq_domain_xlate(struct irq_domain *d,
 
 struct irq_domain *__init aic_common_of_init(struct device_node *node,
 					     const struct irq_domain_ops *ops,
-					     const char *name, int nirqs);
+					     const char *name, int nirqs,
+					     const struct of_device_id *matches);
 
 void __init aic_common_rtc_irq_fixup(struct device_node *root);
 
 void __init aic_common_rtt_irq_fixup(struct device_node *root);
 
-void __init aic_common_irq_fixup(const struct of_device_id *matches);
-
 #endif /* __IRQ_ATMEL_AIC_COMMON_H */
diff --git a/drivers/irqchip/irq-atmel-aic.c b/drivers/irqchip/irq-atmel-aic.c
index 8a0c7f2..799834d 100644
--- a/drivers/irqchip/irq-atmel-aic.c
+++ b/drivers/irqchip/irq-atmel-aic.c
@@ -248,12 +248,10 @@ static int __init aic_of_init(struct device_node *node,
 		return -EEXIST;
 
 	domain = aic_common_of_init(node, &aic_irq_ops, "atmel-aic",
-				    NR_AIC_IRQS);
+				    NR_AIC_IRQS, aic_irq_fixups);
 	if (IS_ERR(domain))
 		return PTR_ERR(domain);
 
-	aic_common_irq_fixup(aic_irq_fixups);
-
 	aic_domain = domain;
 	gc = irq_get_domain_generic_chip(domain, 0);
 
diff --git a/drivers/irqchip/irq-atmel-aic5.c b/drivers/irqchip/irq-atmel-aic5.c
index 62bb840..a7e8fc8 100644
--- a/drivers/irqchip/irq-atmel-aic5.c
+++ b/drivers/irqchip/irq-atmel-aic5.c
@@ -312,12 +312,10 @@ static int __init aic5_of_init(struct device_node *node,
 		return -EEXIST;
 
 	domain = aic_common_of_init(node, &aic5_irq_ops, "atmel-aic5",
-				    nirqs);
+				    nirqs, aic5_irq_fixups);
 	if (IS_ERR(domain))
 		return PTR_ERR(domain);
 
-	aic_common_irq_fixup(aic5_irq_fixups);
-
 	aic5_domain = domain;
 	nchips = aic5_domain->revmap_size / 32;
 	for (i = 0; i < nchips; i++) {

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [tip:irq/core] irqchip/atmel-aic: Change return type of aic_common_set_priority()
  2016-01-13  7:19 ` [PATCH 3/4] irqchip: atmel-aic: Change return type of aic_common_set_priority() Milo Kim
  2016-01-13  8:17   ` Boris Brezillon
  2016-02-08 10:49   ` [tip:irq/core] irqchip/atmel-aic: " tip-bot for Milo Kim
@ 2016-02-08 14:06   ` tip-bot for Milo Kim
  2 siblings, 0 replies; 13+ messages in thread
From: tip-bot for Milo Kim @ 2016-02-08 14:06 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: mingo, hpa, nicolas.ferre, ludovic.desroches, marc.zyngier,
	jason, milo.kim, tglx, linux-kernel, boris.brezillon

Commit-ID:  5fd26a0bb1e479014adf024df779172d33defdd5
Gitweb:     http://git.kernel.org/tip/5fd26a0bb1e479014adf024df779172d33defdd5
Author:     Milo Kim <milo.kim@ti.com>
AuthorDate: Wed, 13 Jan 2016 16:19:51 +0900
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 8 Feb 2016 15:03:42 +0100

irqchip/atmel-aic: Change return type of aic_common_set_priority()

Priority validation is not necessary because aic_common_irq_domain_xlate()
already handles it. With this removal, return type can be changed to void.

Signed-off-by: Milo Kim <milo.kim@ti.com>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Ludovic Desroches <ludovic.desroches@atmel.com>
Cc: Nicholas Ferre <nicolas.ferre@atmel.com>
Link: http://lkml.kernel.org/r/1452669592-3401-3-git-send-email-milo.kim@ti.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 drivers/irqchip/irq-atmel-aic-common.c | 8 +-------
 drivers/irqchip/irq-atmel-aic-common.h | 2 +-
 drivers/irqchip/irq-atmel-aic.c        | 5 ++---
 drivers/irqchip/irq-atmel-aic5.c       | 5 ++---
 4 files changed, 6 insertions(+), 14 deletions(-)

diff --git a/drivers/irqchip/irq-atmel-aic-common.c b/drivers/irqchip/irq-atmel-aic-common.c
index 661840b..28b26c8 100644
--- a/drivers/irqchip/irq-atmel-aic-common.c
+++ b/drivers/irqchip/irq-atmel-aic-common.c
@@ -80,16 +80,10 @@ int aic_common_set_type(struct irq_data *d, unsigned type, unsigned *val)
 	return 0;
 }
 
-int aic_common_set_priority(int priority, unsigned *val)
+void aic_common_set_priority(int priority, unsigned *val)
 {
-	if (priority < AT91_AIC_IRQ_MIN_PRIORITY ||
-	    priority > AT91_AIC_IRQ_MAX_PRIORITY)
-		return -EINVAL;
-
 	*val &= ~AT91_AIC_PRIOR;
 	*val |= priority;
-
-	return 0;
 }
 
 int aic_common_irq_domain_xlate(struct irq_domain *d,
diff --git a/drivers/irqchip/irq-atmel-aic-common.h b/drivers/irqchip/irq-atmel-aic-common.h
index 046bcc8..af60376 100644
--- a/drivers/irqchip/irq-atmel-aic-common.h
+++ b/drivers/irqchip/irq-atmel-aic-common.h
@@ -19,7 +19,7 @@
 
 int aic_common_set_type(struct irq_data *d, unsigned type, unsigned *val);
 
-int aic_common_set_priority(int priority, unsigned *val);
+void aic_common_set_priority(int priority, unsigned *val);
 
 int aic_common_irq_domain_xlate(struct irq_domain *d,
 				struct device_node *ctrlr,
diff --git a/drivers/irqchip/irq-atmel-aic.c b/drivers/irqchip/irq-atmel-aic.c
index 799834d..112e17c 100644
--- a/drivers/irqchip/irq-atmel-aic.c
+++ b/drivers/irqchip/irq-atmel-aic.c
@@ -196,9 +196,8 @@ static int aic_irq_domain_xlate(struct irq_domain *d,
 
 	irq_gc_lock(gc);
 	smr = irq_reg_readl(gc, AT91_AIC_SMR(*out_hwirq));
-	ret = aic_common_set_priority(intspec[2], &smr);
-	if (!ret)
-		irq_reg_writel(gc, smr, AT91_AIC_SMR(*out_hwirq));
+	aic_common_set_priority(intspec[2], &smr);
+	irq_reg_writel(gc, smr, AT91_AIC_SMR(*out_hwirq));
 	irq_gc_unlock(gc);
 
 	return ret;
diff --git a/drivers/irqchip/irq-atmel-aic5.c b/drivers/irqchip/irq-atmel-aic5.c
index a7e8fc8..f36f426 100644
--- a/drivers/irqchip/irq-atmel-aic5.c
+++ b/drivers/irqchip/irq-atmel-aic5.c
@@ -272,9 +272,8 @@ static int aic5_irq_domain_xlate(struct irq_domain *d,
 	irq_gc_lock(bgc);
 	irq_reg_writel(bgc, *out_hwirq, AT91_AIC5_SSR);
 	smr = irq_reg_readl(bgc, AT91_AIC5_SMR);
-	ret = aic_common_set_priority(intspec[2], &smr);
-	if (!ret)
-		irq_reg_writel(bgc, intspec[2] | smr, AT91_AIC5_SMR);
+	aic_common_set_priority(intspec[2], &smr);
+	irq_reg_writel(bgc, intspec[2] | smr, AT91_AIC5_SMR);
 	irq_gc_unlock(bgc);
 
 	return ret;

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [tip:irq/core] irqchip/atmel-aic: Remove duplicate bit operation
  2016-01-13  7:19 ` [PATCH 4/4] irqchip: atmel-aic: Remove duplicate bit operation Milo Kim
  2016-01-13  8:18   ` Boris Brezillon
  2016-02-08 10:49   ` [tip:irq/core] irqchip/atmel-aic: " tip-bot for Milo Kim
@ 2016-02-08 14:07   ` tip-bot for Milo Kim
  2 siblings, 0 replies; 13+ messages in thread
From: tip-bot for Milo Kim @ 2016-02-08 14:07 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: hpa, mingo, boris.brezillon, milo.kim, jason, ludovic.desroches,
	nicolas.ferre, tglx, marc.zyngier, linux-kernel

Commit-ID:  4b5ce20b5429eb08ae0776962a4aff7f00017800
Gitweb:     http://git.kernel.org/tip/4b5ce20b5429eb08ae0776962a4aff7f00017800
Author:     Milo Kim <milo.kim@ti.com>
AuthorDate: Wed, 13 Jan 2016 16:19:52 +0900
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Mon, 8 Feb 2016 15:03:42 +0100

irqchip/atmel-aic: Remove duplicate bit operation

AIC5 priority value is updated twice -
in aic_common_set_priority() and when updating AT91_AIC5_SMR.
Variable, 'smr' has updated priority value (intspec[2]) in the first step,
so no need to update it again in the second step.

Signed-off-by: Milo Kim <milo.kim@ti.com>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Ludovic Desroches <ludovic.desroches@atmel.com>
Cc: Nicholas Ferre <nicolas.ferre@atmel.com>
Link: http://lkml.kernel.org/r/1452669592-3401-4-git-send-email-milo.kim@ti.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 drivers/irqchip/irq-atmel-aic5.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/irqchip/irq-atmel-aic5.c b/drivers/irqchip/irq-atmel-aic5.c
index f36f426..4f0d068 100644
--- a/drivers/irqchip/irq-atmel-aic5.c
+++ b/drivers/irqchip/irq-atmel-aic5.c
@@ -273,7 +273,7 @@ static int aic5_irq_domain_xlate(struct irq_domain *d,
 	irq_reg_writel(bgc, *out_hwirq, AT91_AIC5_SSR);
 	smr = irq_reg_readl(bgc, AT91_AIC5_SMR);
 	aic_common_set_priority(intspec[2], &smr);
-	irq_reg_writel(bgc, intspec[2] | smr, AT91_AIC5_SMR);
+	irq_reg_writel(bgc, smr, AT91_AIC5_SMR);
 	irq_gc_unlock(bgc);
 
 	return ret;

^ permalink raw reply related	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2016-02-08 14:07 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-13  7:19 [PATCH 1/4] irqchip: atmel-aic: Handle aic_common_irq_fixup in aic_common_of_init Milo Kim
2016-01-13  7:19 ` [PATCH 2/4] irqchip: atmel-aic: Fix wrong bit operation for IRQ priority Milo Kim
2016-01-27 11:57   ` [tip:irq/urgent] irqchip/atmel-aic: " tip-bot for Milo Kim
2016-01-13  7:19 ` [PATCH 3/4] irqchip: atmel-aic: Change return type of aic_common_set_priority() Milo Kim
2016-01-13  8:17   ` Boris Brezillon
2016-02-08 10:49   ` [tip:irq/core] irqchip/atmel-aic: " tip-bot for Milo Kim
2016-02-08 14:06   ` tip-bot for Milo Kim
2016-01-13  7:19 ` [PATCH 4/4] irqchip: atmel-aic: Remove duplicate bit operation Milo Kim
2016-01-13  8:18   ` Boris Brezillon
2016-02-08 10:49   ` [tip:irq/core] irqchip/atmel-aic: " tip-bot for Milo Kim
2016-02-08 14:07   ` tip-bot for Milo Kim
2016-02-08 10:48 ` [tip:irq/core] irqchip/atmel-aic: Handle aic_common_irq_fixup in aic_common_of_init tip-bot for Milo Kim
2016-02-08 14:06 ` tip-bot for Milo Kim

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.