linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods
@ 2010-11-25 15:18 Mark Brown
  2010-11-25 15:18 ` [PATCH 2/3] ARM: S3C64XX: Convert S3C64xx irq-eint to use new irq_ methods Mark Brown
                   ` (4 more replies)
  0 siblings, 5 replies; 15+ messages in thread
From: Mark Brown @ 2010-11-25 15:18 UTC (permalink / raw)
  To: linux-arm-kernel

Kernel 2.6.37 adds new interrupt methods which take a struct irq_data
rather than an irq number. Begin converting Samsung platforms over to
these methods by converting s3c_irqext_wake() with a simple textual
substitution.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
 arch/arm/mach-s3c64xx/irq-eint.c        |    2 +-
 arch/arm/mach-s5pv310/irq-eint.c        |    2 +-
 arch/arm/plat-s3c24xx/irq.c             |    2 +-
 arch/arm/plat-s5p/irq-eint.c            |    4 ++--
 arch/arm/plat-samsung/include/plat/pm.h |    4 +++-
 arch/arm/plat-samsung/pm.c              |    6 +++---
 6 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/arch/arm/mach-s3c64xx/irq-eint.c b/arch/arm/mach-s3c64xx/irq-eint.c
index 5682d6a..1a1aa5d 100644
--- a/arch/arm/mach-s3c64xx/irq-eint.c
+++ b/arch/arm/mach-s3c64xx/irq-eint.c
@@ -145,7 +145,7 @@ static struct irq_chip s3c_irq_eint = {
 	.mask_ack	= s3c_irq_eint_maskack,
 	.ack		= s3c_irq_eint_ack,
 	.set_type	= s3c_irq_eint_set_type,
-	.set_wake	= s3c_irqext_wake,
+	.irq_set_wake	= s3c_irqext_wake,
 };
 
 /* s3c_irq_demux_eint
diff --git a/arch/arm/mach-s5pv310/irq-eint.c b/arch/arm/mach-s5pv310/irq-eint.c
index 5877503..f5a415e 100644
--- a/arch/arm/mach-s5pv310/irq-eint.c
+++ b/arch/arm/mach-s5pv310/irq-eint.c
@@ -152,7 +152,7 @@ static struct irq_chip s5pv310_irq_eint = {
 	.ack		= s5pv310_irq_eint_ack,
 	.set_type	= s5pv310_irq_eint_set_type,
 #ifdef CONFIG_PM
-	.set_wake	= s3c_irqext_wake,
+	.irq_set_wake	= s3c_irqext_wake,
 #endif
 };
 
diff --git a/arch/arm/plat-s3c24xx/irq.c b/arch/arm/plat-s3c24xx/irq.c
index ad0d44e..91ce383 100644
--- a/arch/arm/plat-s3c24xx/irq.c
+++ b/arch/arm/plat-s3c24xx/irq.c
@@ -238,7 +238,7 @@ static struct irq_chip s3c_irqext_chip = {
 	.unmask		= s3c_irqext_unmask,
 	.ack		= s3c_irqext_ack,
 	.set_type	= s3c_irqext_type,
-	.set_wake	= s3c_irqext_wake
+	.irq_set_wake	= s3c_irqext_wake
 };
 
 static struct irq_chip s3c_irq_eint0t4 = {
diff --git a/arch/arm/plat-s5p/irq-eint.c b/arch/arm/plat-s5p/irq-eint.c
index 752f1a6..f2f2e1c 100644
--- a/arch/arm/plat-s5p/irq-eint.c
+++ b/arch/arm/plat-s5p/irq-eint.c
@@ -125,7 +125,7 @@ static struct irq_chip s5p_irq_eint = {
 	.ack		= s5p_irq_eint_ack,
 	.set_type	= s5p_irq_eint_set_type,
 #ifdef CONFIG_PM
-	.set_wake	= s3c_irqext_wake,
+	.irq_set_wake	= s3c_irqext_wake,
 #endif
 };
 
@@ -194,7 +194,7 @@ static struct irq_chip s5p_irq_vic_eint = {
 	.ack		= s5p_irq_vic_eint_ack,
 	.set_type	= s5p_irq_eint_set_type,
 #ifdef CONFIG_PM
-	.set_wake	= s3c_irqext_wake,
+	.irq_set_wake	= s3c_irqext_wake,
 #endif
 };
 
diff --git a/arch/arm/plat-samsung/include/plat/pm.h b/arch/arm/plat-samsung/include/plat/pm.h
index 245836d..d9025e3 100644
--- a/arch/arm/plat-samsung/include/plat/pm.h
+++ b/arch/arm/plat-samsung/include/plat/pm.h
@@ -15,6 +15,8 @@
  * management
 */
 
+#include <linux/irq.h>
+
 #ifdef CONFIG_PM
 
 extern __init int s3c_pm_init(void);
@@ -100,7 +102,7 @@ extern void s3c_pm_do_restore(struct sleep_save *ptr, int count);
 extern void s3c_pm_do_restore_core(struct sleep_save *ptr, int count);
 
 #ifdef CONFIG_PM
-extern int s3c_irqext_wake(unsigned int irqno, unsigned int state);
+extern int s3c_irqext_wake(struct irq_data *data, unsigned int state);
 extern int s3c24xx_irq_suspend(struct sys_device *dev, pm_message_t state);
 extern int s3c24xx_irq_resume(struct sys_device *dev);
 #else
diff --git a/arch/arm/plat-samsung/pm.c b/arch/arm/plat-samsung/pm.c
index 5bf3f2f..02d531f 100644
--- a/arch/arm/plat-samsung/pm.c
+++ b/arch/arm/plat-samsung/pm.c
@@ -136,15 +136,15 @@ static void s3c_pm_restore_uarts(void) { }
 unsigned long s3c_irqwake_intmask	= 0xffffffffL;
 unsigned long s3c_irqwake_eintmask	= 0xffffffffL;
 
-int s3c_irqext_wake(unsigned int irqno, unsigned int state)
+int s3c_irqext_wake(struct irq_data *data, unsigned int state)
 {
-	unsigned long bit = 1L << IRQ_EINT_BIT(irqno);
+	unsigned long bit = 1L << IRQ_EINT_BIT(data->irq);
 
 	if (!(s3c_irqwake_eintallow & bit))
 		return -ENOENT;
 
 	printk(KERN_INFO "wake %s for irq %d\n",
-	       state ? "enabled" : "disabled", irqno);
+	       state ? "enabled" : "disabled", data->irq);
 
 	if (!state)
 		s3c_irqwake_eintmask |= bit;
-- 
1.7.1

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

* [PATCH 2/3] ARM: S3C64XX: Convert S3C64xx irq-eint to use new irq_ methods
  2010-11-25 15:18 [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods Mark Brown
@ 2010-11-25 15:18 ` Mark Brown
  2010-12-01 11:30   ` Kukjin Kim
  2010-11-25 15:18 ` [PATCH 3/3] ARM: S3C64XX: Use chip_data to store the shift for EINTs Mark Brown
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 15+ messages in thread
From: Mark Brown @ 2010-11-25 15:18 UTC (permalink / raw)
  To: linux-arm-kernel

Kernel 2.6.37 adds new interrupt methods which take a struct irq_data
rather than an irq number. Conver S3C64xx irq-eint to use this with a
simple textual substitution.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
 arch/arm/mach-s3c64xx/irq-eint.c |   32 ++++++++++++++++----------------
 1 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/arch/arm/mach-s3c64xx/irq-eint.c b/arch/arm/mach-s3c64xx/irq-eint.c
index 1a1aa5d..169ee29 100644
--- a/arch/arm/mach-s3c64xx/irq-eint.c
+++ b/arch/arm/mach-s3c64xx/irq-eint.c
@@ -32,39 +32,39 @@
 #define eint_offset(irq)	((irq) - IRQ_EINT(0))
 #define eint_irq_to_bit(irq)	(1 << eint_offset(irq))
 
-static inline void s3c_irq_eint_mask(unsigned int irq)
+static inline void s3c_irq_eint_mask(struct irq_data *data)
 {
 	u32 mask;
 
 	mask = __raw_readl(S3C64XX_EINT0MASK);
-	mask |= eint_irq_to_bit(irq);
+	mask |= eint_irq_to_bit(data->irq);
 	__raw_writel(mask, S3C64XX_EINT0MASK);
 }
 
-static void s3c_irq_eint_unmask(unsigned int irq)
+static void s3c_irq_eint_unmask(struct irq_data *data)
 {
 	u32 mask;
 
 	mask = __raw_readl(S3C64XX_EINT0MASK);
-	mask &= ~eint_irq_to_bit(irq);
+	mask &= ~eint_irq_to_bit(data->irq);
 	__raw_writel(mask, S3C64XX_EINT0MASK);
 }
 
-static inline void s3c_irq_eint_ack(unsigned int irq)
+static inline void s3c_irq_eint_ack(struct irq_data *data)
 {
-	__raw_writel(eint_irq_to_bit(irq), S3C64XX_EINT0PEND);
+	__raw_writel(eint_irq_to_bit(data->irq), S3C64XX_EINT0PEND);
 }
 
-static void s3c_irq_eint_maskack(unsigned int irq)
+static void s3c_irq_eint_maskack(struct irq_data *data)
 {
 	/* compiler should in-line these */
-	s3c_irq_eint_mask(irq);
-	s3c_irq_eint_ack(irq);
+	s3c_irq_eint_mask(data);
+	s3c_irq_eint_ack(data);
 }
 
-static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type)
+static int s3c_irq_eint_set_type(struct irq_data *data, unsigned int type)
 {
-	int offs = eint_offset(irq);
+	int offs = eint_offset(data->irq);
 	int pin, pin_val;
 	int shift;
 	u32 ctrl, mask;
@@ -140,11 +140,11 @@ static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type)
 
 static struct irq_chip s3c_irq_eint = {
 	.name		= "s3c-eint",
-	.mask		= s3c_irq_eint_mask,
-	.unmask		= s3c_irq_eint_unmask,
-	.mask_ack	= s3c_irq_eint_maskack,
-	.ack		= s3c_irq_eint_ack,
-	.set_type	= s3c_irq_eint_set_type,
+	.irq_mask	= s3c_irq_eint_mask,
+	.irq_unmask	= s3c_irq_eint_unmask,
+	.irq_mask_ack	= s3c_irq_eint_maskack,
+	.irq_ack	= s3c_irq_eint_ack,
+	.irq_set_type	= s3c_irq_eint_set_type,
 	.irq_set_wake	= s3c_irqext_wake,
 };
 
-- 
1.7.1

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

* [PATCH 3/3] ARM: S3C64XX: Use chip_data to store the shift for EINTs
  2010-11-25 15:18 [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods Mark Brown
  2010-11-25 15:18 ` [PATCH 2/3] ARM: S3C64XX: Convert S3C64xx irq-eint to use new irq_ methods Mark Brown
@ 2010-11-25 15:18 ` Mark Brown
  2010-12-01 11:44   ` Kukjin Kim
  2010-12-01 10:19 ` [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods Lennert Buytenhek
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 15+ messages in thread
From: Mark Brown @ 2010-11-25 15:18 UTC (permalink / raw)
  To: linux-arm-kernel

This makes all the functions that use the shift slightly smaller, one
instruction in most cases but more for ack() and maskack().

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
 arch/arm/mach-s3c64xx/irq-eint.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mach-s3c64xx/irq-eint.c b/arch/arm/mach-s3c64xx/irq-eint.c
index 169ee29..2ead818 100644
--- a/arch/arm/mach-s3c64xx/irq-eint.c
+++ b/arch/arm/mach-s3c64xx/irq-eint.c
@@ -30,14 +30,14 @@
 #include <plat/pm.h>
 
 #define eint_offset(irq)	((irq) - IRQ_EINT(0))
-#define eint_irq_to_bit(irq)	(1 << eint_offset(irq))
+#define eint_irq_to_bit(irq)	((u32)(1 << eint_offset(irq)))
 
 static inline void s3c_irq_eint_mask(struct irq_data *data)
 {
 	u32 mask;
 
 	mask = __raw_readl(S3C64XX_EINT0MASK);
-	mask |= eint_irq_to_bit(data->irq);
+	mask |= (u32)data->chip_data;
 	__raw_writel(mask, S3C64XX_EINT0MASK);
 }
 
@@ -46,13 +46,13 @@ static void s3c_irq_eint_unmask(struct irq_data *data)
 	u32 mask;
 
 	mask = __raw_readl(S3C64XX_EINT0MASK);
-	mask &= ~eint_irq_to_bit(data->irq);
+	mask &= ~((u32)data->chip_data);
 	__raw_writel(mask, S3C64XX_EINT0MASK);
 }
 
 static inline void s3c_irq_eint_ack(struct irq_data *data)
 {
-	__raw_writel(eint_irq_to_bit(data->irq), S3C64XX_EINT0PEND);
+	__raw_writel((u32)data->chip_data, S3C64XX_EINT0PEND);
 }
 
 static void s3c_irq_eint_maskack(struct irq_data *data)
@@ -198,6 +198,7 @@ static int __init s3c64xx_init_irq_eint(void)
 
 	for (irq = IRQ_EINT(0); irq <= IRQ_EINT(27); irq++) {
 		set_irq_chip(irq, &s3c_irq_eint);
+		set_irq_chip_data(irq, (void *)eint_irq_to_bit(irq));
 		set_irq_handler(irq, handle_level_irq);
 		set_irq_flags(irq, IRQF_VALID);
 	}
-- 
1.7.1

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

* [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods
  2010-11-25 15:18 [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods Mark Brown
  2010-11-25 15:18 ` [PATCH 2/3] ARM: S3C64XX: Convert S3C64xx irq-eint to use new irq_ methods Mark Brown
  2010-11-25 15:18 ` [PATCH 3/3] ARM: S3C64XX: Use chip_data to store the shift for EINTs Mark Brown
@ 2010-12-01 10:19 ` Lennert Buytenhek
  2010-12-01 11:08   ` Mark Brown
  2010-12-01 11:24 ` Kukjin Kim
  2010-12-01 11:28 ` Kukjin Kim
  4 siblings, 1 reply; 15+ messages in thread
From: Lennert Buytenhek @ 2010-12-01 10:19 UTC (permalink / raw)
  To: linux-arm-kernel

On Thu, Nov 25, 2010 at 03:18:27PM +0000, Mark Brown wrote:

> Kernel 2.6.37 adds new interrupt methods which take a struct irq_data
> rather than an irq number. Begin converting Samsung platforms over to
> these methods by converting s3c_irqext_wake() with a simple textual
> substitution.
> 
> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
> ---
>  arch/arm/mach-s3c64xx/irq-eint.c        |    2 +-
>  arch/arm/mach-s5pv310/irq-eint.c        |    2 +-
>  arch/arm/plat-s3c24xx/irq.c             |    2 +-
>  arch/arm/plat-s5p/irq-eint.c            |    4 ++--
>  arch/arm/plat-samsung/include/plat/pm.h |    4 +++-
>  arch/arm/plat-samsung/pm.c              |    6 +++---
>  6 files changed, 11 insertions(+), 9 deletions(-)

It would seem that this patch breaks s3c:

./mach-s3c64xx/irq-eint.c:	.irq_set_wake	= s3c_irqext_wake,
./plat-s3c24xx/irq.c:	.irq_set_wake	= s3c_irqext_wake



> diff --git a/arch/arm/mach-s3c64xx/irq-eint.c b/arch/arm/mach-s3c64xx/irq-eint.c
> index 5682d6a..1a1aa5d 100644
> --- a/arch/arm/mach-s3c64xx/irq-eint.c
> +++ b/arch/arm/mach-s3c64xx/irq-eint.c
> @@ -145,7 +145,7 @@ static struct irq_chip s3c_irq_eint = {
>  	.mask_ack	= s3c_irq_eint_maskack,
>  	.ack		= s3c_irq_eint_ack,
>  	.set_type	= s3c_irq_eint_set_type,
> -	.set_wake	= s3c_irqext_wake,
> +	.irq_set_wake	= s3c_irqext_wake,
>  };
>  
>  /* s3c_irq_demux_eint
> diff --git a/arch/arm/mach-s5pv310/irq-eint.c b/arch/arm/mach-s5pv310/irq-eint.c
> index 5877503..f5a415e 100644
> --- a/arch/arm/mach-s5pv310/irq-eint.c
> +++ b/arch/arm/mach-s5pv310/irq-eint.c
> @@ -152,7 +152,7 @@ static struct irq_chip s5pv310_irq_eint = {
>  	.ack		= s5pv310_irq_eint_ack,
>  	.set_type	= s5pv310_irq_eint_set_type,
>  #ifdef CONFIG_PM
> -	.set_wake	= s3c_irqext_wake,
> +	.irq_set_wake	= s3c_irqext_wake,
>  #endif
>  };
>  
> diff --git a/arch/arm/plat-s3c24xx/irq.c b/arch/arm/plat-s3c24xx/irq.c
> index ad0d44e..91ce383 100644
> --- a/arch/arm/plat-s3c24xx/irq.c
> +++ b/arch/arm/plat-s3c24xx/irq.c
> @@ -238,7 +238,7 @@ static struct irq_chip s3c_irqext_chip = {
>  	.unmask		= s3c_irqext_unmask,
>  	.ack		= s3c_irqext_ack,
>  	.set_type	= s3c_irqext_type,
> -	.set_wake	= s3c_irqext_wake
> +	.irq_set_wake	= s3c_irqext_wake
>  };
>  
>  static struct irq_chip s3c_irq_eint0t4 = {
> diff --git a/arch/arm/plat-s5p/irq-eint.c b/arch/arm/plat-s5p/irq-eint.c
> index 752f1a6..f2f2e1c 100644
> --- a/arch/arm/plat-s5p/irq-eint.c
> +++ b/arch/arm/plat-s5p/irq-eint.c
> @@ -125,7 +125,7 @@ static struct irq_chip s5p_irq_eint = {
>  	.ack		= s5p_irq_eint_ack,
>  	.set_type	= s5p_irq_eint_set_type,
>  #ifdef CONFIG_PM
> -	.set_wake	= s3c_irqext_wake,
> +	.irq_set_wake	= s3c_irqext_wake,
>  #endif
>  };
>  
> @@ -194,7 +194,7 @@ static struct irq_chip s5p_irq_vic_eint = {
>  	.ack		= s5p_irq_vic_eint_ack,
>  	.set_type	= s5p_irq_eint_set_type,
>  #ifdef CONFIG_PM
> -	.set_wake	= s3c_irqext_wake,
> +	.irq_set_wake	= s3c_irqext_wake,
>  #endif
>  };
>  
> diff --git a/arch/arm/plat-samsung/include/plat/pm.h b/arch/arm/plat-samsung/include/plat/pm.h
> index 245836d..d9025e3 100644
> --- a/arch/arm/plat-samsung/include/plat/pm.h
> +++ b/arch/arm/plat-samsung/include/plat/pm.h
> @@ -15,6 +15,8 @@
>   * management
>  */
>  
> +#include <linux/irq.h>
> +
>  #ifdef CONFIG_PM
>  
>  extern __init int s3c_pm_init(void);
> @@ -100,7 +102,7 @@ extern void s3c_pm_do_restore(struct sleep_save *ptr, int count);
>  extern void s3c_pm_do_restore_core(struct sleep_save *ptr, int count);
>  
>  #ifdef CONFIG_PM
> -extern int s3c_irqext_wake(unsigned int irqno, unsigned int state);
> +extern int s3c_irqext_wake(struct irq_data *data, unsigned int state);
>  extern int s3c24xx_irq_suspend(struct sys_device *dev, pm_message_t state);
>  extern int s3c24xx_irq_resume(struct sys_device *dev);
>  #else
> diff --git a/arch/arm/plat-samsung/pm.c b/arch/arm/plat-samsung/pm.c
> index 5bf3f2f..02d531f 100644
> --- a/arch/arm/plat-samsung/pm.c
> +++ b/arch/arm/plat-samsung/pm.c
> @@ -136,15 +136,15 @@ static void s3c_pm_restore_uarts(void) { }
>  unsigned long s3c_irqwake_intmask	= 0xffffffffL;
>  unsigned long s3c_irqwake_eintmask	= 0xffffffffL;
>  
> -int s3c_irqext_wake(unsigned int irqno, unsigned int state)
> +int s3c_irqext_wake(struct irq_data *data, unsigned int state)
>  {
> -	unsigned long bit = 1L << IRQ_EINT_BIT(irqno);
> +	unsigned long bit = 1L << IRQ_EINT_BIT(data->irq);
>  
>  	if (!(s3c_irqwake_eintallow & bit))
>  		return -ENOENT;
>  
>  	printk(KERN_INFO "wake %s for irq %d\n",
> -	       state ? "enabled" : "disabled", irqno);
> +	       state ? "enabled" : "disabled", data->irq);
>  
>  	if (!state)
>  		s3c_irqwake_eintmask |= bit;
> -- 
> 1.7.1
> 
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods
  2010-12-01 10:19 ` [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods Lennert Buytenhek
@ 2010-12-01 11:08   ` Mark Brown
  2010-12-01 11:45     ` Lennert Buytenhek
  0 siblings, 1 reply; 15+ messages in thread
From: Mark Brown @ 2010-12-01 11:08 UTC (permalink / raw)
  To: linux-arm-kernel

On Wed, Dec 01, 2010 at 11:19:02AM +0100, Lennert Buytenhek wrote:

> It would seem that this patch breaks s3c:

> ./mach-s3c64xx/irq-eint.c:	.irq_set_wake	= s3c_irqext_wake,
> ./plat-s3c24xx/irq.c:	.irq_set_wake	= s3c_irqext_wake

Could you please elaborate on what you mean by "s3c" and why you think
it has been broken?

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

* [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods
  2010-11-25 15:18 [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods Mark Brown
                   ` (2 preceding siblings ...)
  2010-12-01 10:19 ` [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods Lennert Buytenhek
@ 2010-12-01 11:24 ` Kukjin Kim
  2010-12-01 11:28 ` Kukjin Kim
  4 siblings, 0 replies; 15+ messages in thread
From: Kukjin Kim @ 2010-12-01 11:24 UTC (permalink / raw)
  To: linux-arm-kernel

Mark Brown wrote:
> 
> Kernel 2.6.37 adds new interrupt methods which take a struct irq_data
> rather than an irq number. Begin converting Samsung platforms over to
> these methods by converting s3c_irqext_wake() with a simple textual
> substitution.
> 
> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
> ---
>  arch/arm/mach-s3c64xx/irq-eint.c        |    2 +-
>  arch/arm/mach-s5pv310/irq-eint.c        |    2 +-
>  arch/arm/plat-s3c24xx/irq.c             |    2 +-
>  arch/arm/plat-s5p/irq-eint.c            |    4 ++--
>  arch/arm/plat-samsung/include/plat/pm.h |    4 +++-
>  arch/arm/plat-samsung/pm.c              |    6 +++---
>  6 files changed, 11 insertions(+), 9 deletions(-)
> 
> diff --git a/arch/arm/mach-s3c64xx/irq-eint.c b/arch/arm/mach-s3c64xx/irq-
> eint.c
> index 5682d6a..1a1aa5d 100644
> --- a/arch/arm/mach-s3c64xx/irq-eint.c
> +++ b/arch/arm/mach-s3c64xx/irq-eint.c
> @@ -145,7 +145,7 @@ static struct irq_chip s3c_irq_eint = {
>  	.mask_ack	= s3c_irq_eint_maskack,
>  	.ack		= s3c_irq_eint_ack,
>  	.set_type	= s3c_irq_eint_set_type,
> -	.set_wake	= s3c_irqext_wake,
> +	.irq_set_wake	= s3c_irqext_wake,
>  };
> 
>  /* s3c_irq_demux_eint
> diff --git a/arch/arm/mach-s5pv310/irq-eint.c b/arch/arm/mach-s5pv310/irq-
> eint.c
> index 5877503..f5a415e 100644
> --- a/arch/arm/mach-s5pv310/irq-eint.c
> +++ b/arch/arm/mach-s5pv310/irq-eint.c
> @@ -152,7 +152,7 @@ static struct irq_chip s5pv310_irq_eint = {
>  	.ack		= s5pv310_irq_eint_ack,
>  	.set_type	= s5pv310_irq_eint_set_type,
>  #ifdef CONFIG_PM
> -	.set_wake	= s3c_irqext_wake,
> +	.irq_set_wake	= s3c_irqext_wake,
>  #endif
>  };
> 
> diff --git a/arch/arm/plat-s3c24xx/irq.c b/arch/arm/plat-s3c24xx/irq.c
> index ad0d44e..91ce383 100644
> --- a/arch/arm/plat-s3c24xx/irq.c
> +++ b/arch/arm/plat-s3c24xx/irq.c
> @@ -238,7 +238,7 @@ static struct irq_chip s3c_irqext_chip = {
>  	.unmask		= s3c_irqext_unmask,
>  	.ack		= s3c_irqext_ack,
>  	.set_type	= s3c_irqext_type,
> -	.set_wake	= s3c_irqext_wake
> +	.irq_set_wake	= s3c_irqext_wake
>  };
> 
>  static struct irq_chip s3c_irq_eint0t4 = {
> diff --git a/arch/arm/plat-s5p/irq-eint.c b/arch/arm/plat-s5p/irq-eint.c
> index 752f1a6..f2f2e1c 100644
> --- a/arch/arm/plat-s5p/irq-eint.c
> +++ b/arch/arm/plat-s5p/irq-eint.c
> @@ -125,7 +125,7 @@ static struct irq_chip s5p_irq_eint = {
>  	.ack		= s5p_irq_eint_ack,
>  	.set_type	= s5p_irq_eint_set_type,
>  #ifdef CONFIG_PM
> -	.set_wake	= s3c_irqext_wake,
> +	.irq_set_wake	= s3c_irqext_wake,
>  #endif
>  };
> 
> @@ -194,7 +194,7 @@ static struct irq_chip s5p_irq_vic_eint = {
>  	.ack		= s5p_irq_vic_eint_ack,
>  	.set_type	= s5p_irq_eint_set_type,
>  #ifdef CONFIG_PM
> -	.set_wake	= s3c_irqext_wake,
> +	.irq_set_wake	= s3c_irqext_wake,
>  #endif
>  };
> 
> diff --git a/arch/arm/plat-samsung/include/plat/pm.h b/arch/arm/plat-
> samsung/include/plat/pm.h
> index 245836d..d9025e3 100644
> --- a/arch/arm/plat-samsung/include/plat/pm.h
> +++ b/arch/arm/plat-samsung/include/plat/pm.h
> @@ -15,6 +15,8 @@
>   * management
>  */
> 
> +#include <linux/irq.h>
> +
>  #ifdef CONFIG_PM
> 
>  extern __init int s3c_pm_init(void);
> @@ -100,7 +102,7 @@ extern void s3c_pm_do_restore(struct sleep_save *ptr,
int
> count);
>  extern void s3c_pm_do_restore_core(struct sleep_save *ptr, int count);
> 
>  #ifdef CONFIG_PM
> -extern int s3c_irqext_wake(unsigned int irqno, unsigned int state);
> +extern int s3c_irqext_wake(struct irq_data *data, unsigned int state);
>  extern int s3c24xx_irq_suspend(struct sys_device *dev, pm_message_t
state);
>  extern int s3c24xx_irq_resume(struct sys_device *dev);
>  #else
> diff --git a/arch/arm/plat-samsung/pm.c b/arch/arm/plat-samsung/pm.c
> index 5bf3f2f..02d531f 100644
> --- a/arch/arm/plat-samsung/pm.c
> +++ b/arch/arm/plat-samsung/pm.c
> @@ -136,15 +136,15 @@ static void s3c_pm_restore_uarts(void) { }
>  unsigned long s3c_irqwake_intmask	= 0xffffffffL;
>  unsigned long s3c_irqwake_eintmask	= 0xffffffffL;
> 
> -int s3c_irqext_wake(unsigned int irqno, unsigned int state)
> +int s3c_irqext_wake(struct irq_data *data, unsigned int state)
>  {
> -	unsigned long bit = 1L << IRQ_EINT_BIT(irqno);
> +	unsigned long bit = 1L << IRQ_EINT_BIT(data->irq);
> 
>  	if (!(s3c_irqwake_eintallow & bit))
>  		return -ENOENT;
> 
>  	printk(KERN_INFO "wake %s for irq %d\n",
> -	       state ? "enabled" : "disabled", irqno);
> +	       state ? "enabled" : "disabled", data->irq);
> 
>  	if (!state)
>  		s3c_irqwake_eintmask |= bit;
> --

Looks ok to me...will apply.

Thanks.

Best regards,
Kgene.
--
Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.

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

* [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods
  2010-11-25 15:18 [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods Mark Brown
                   ` (3 preceding siblings ...)
  2010-12-01 11:24 ` Kukjin Kim
@ 2010-12-01 11:28 ` Kukjin Kim
  2010-12-01 11:33   ` Mark Brown
  4 siblings, 1 reply; 15+ messages in thread
From: Kukjin Kim @ 2010-12-01 11:28 UTC (permalink / raw)
  To: linux-arm-kernel

Mark Brown wrote:
> 
> Kernel 2.6.37 adds new interrupt methods which take a struct irq_data
> rather than an irq number. Begin converting Samsung platforms over to
> these methods by converting s3c_irqext_wake() with a simple textual
> substitution.

And...as you know, need to convert s3c_irq_wake() to new irq_ interrupt
method also.
Ok...I will do it or will check Lennert Buytenhek's patch for it :-)

Thanks.

Best regards,
Kgene.
--
Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.

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

* [PATCH 2/3] ARM: S3C64XX: Convert S3C64xx irq-eint to use new irq_ methods
  2010-11-25 15:18 ` [PATCH 2/3] ARM: S3C64XX: Convert S3C64xx irq-eint to use new irq_ methods Mark Brown
@ 2010-12-01 11:30   ` Kukjin Kim
  0 siblings, 0 replies; 15+ messages in thread
From: Kukjin Kim @ 2010-12-01 11:30 UTC (permalink / raw)
  To: linux-arm-kernel

Mark Brown wrote:
> 
> Kernel 2.6.37 adds new interrupt methods which take a struct irq_data
> rather than an irq number. Conver S3C64xx irq-eint to use this with a
> simple textual substitution.
> 
> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
> ---
>  arch/arm/mach-s3c64xx/irq-eint.c |   32 ++++++++++++++++----------------
>  1 files changed, 16 insertions(+), 16 deletions(-)
> 
> diff --git a/arch/arm/mach-s3c64xx/irq-eint.c b/arch/arm/mach-s3c64xx/irq-
> eint.c
> index 1a1aa5d..169ee29 100644
> --- a/arch/arm/mach-s3c64xx/irq-eint.c
> +++ b/arch/arm/mach-s3c64xx/irq-eint.c
> @@ -32,39 +32,39 @@
>  #define eint_offset(irq)	((irq) - IRQ_EINT(0))
>  #define eint_irq_to_bit(irq)	(1 << eint_offset(irq))
> 
> -static inline void s3c_irq_eint_mask(unsigned int irq)
> +static inline void s3c_irq_eint_mask(struct irq_data *data)
>  {
>  	u32 mask;
> 
>  	mask = __raw_readl(S3C64XX_EINT0MASK);
> -	mask |= eint_irq_to_bit(irq);
> +	mask |= eint_irq_to_bit(data->irq);
>  	__raw_writel(mask, S3C64XX_EINT0MASK);
>  }
> 
> -static void s3c_irq_eint_unmask(unsigned int irq)
> +static void s3c_irq_eint_unmask(struct irq_data *data)
>  {
>  	u32 mask;
> 
>  	mask = __raw_readl(S3C64XX_EINT0MASK);
> -	mask &= ~eint_irq_to_bit(irq);
> +	mask &= ~eint_irq_to_bit(data->irq);
>  	__raw_writel(mask, S3C64XX_EINT0MASK);
>  }
> 
> -static inline void s3c_irq_eint_ack(unsigned int irq)
> +static inline void s3c_irq_eint_ack(struct irq_data *data)
>  {
> -	__raw_writel(eint_irq_to_bit(irq), S3C64XX_EINT0PEND);
> +	__raw_writel(eint_irq_to_bit(data->irq), S3C64XX_EINT0PEND);
>  }
> 
> -static void s3c_irq_eint_maskack(unsigned int irq)
> +static void s3c_irq_eint_maskack(struct irq_data *data)
>  {
>  	/* compiler should in-line these */
> -	s3c_irq_eint_mask(irq);
> -	s3c_irq_eint_ack(irq);
> +	s3c_irq_eint_mask(data);
> +	s3c_irq_eint_ack(data);
>  }
> 
> -static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type)
> +static int s3c_irq_eint_set_type(struct irq_data *data, unsigned int
type)
>  {
> -	int offs = eint_offset(irq);
> +	int offs = eint_offset(data->irq);
>  	int pin, pin_val;
>  	int shift;
>  	u32 ctrl, mask;
> @@ -140,11 +140,11 @@ static int s3c_irq_eint_set_type(unsigned int irq,
> unsigned int type)
> 
>  static struct irq_chip s3c_irq_eint = {
>  	.name		= "s3c-eint",
> -	.mask		= s3c_irq_eint_mask,
> -	.unmask		= s3c_irq_eint_unmask,
> -	.mask_ack	= s3c_irq_eint_maskack,
> -	.ack		= s3c_irq_eint_ack,
> -	.set_type	= s3c_irq_eint_set_type,
> +	.irq_mask	= s3c_irq_eint_mask,
> +	.irq_unmask	= s3c_irq_eint_unmask,
> +	.irq_mask_ack	= s3c_irq_eint_maskack,
> +	.irq_ack	= s3c_irq_eint_ack,
> +	.irq_set_type	= s3c_irq_eint_set_type,
>  	.irq_set_wake	= s3c_irqext_wake,
>  };
> 
> --

Ok...will apply.

Thanks.

Best regards,
Kgene.
--
Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.

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

* [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods
  2010-12-01 11:28 ` Kukjin Kim
@ 2010-12-01 11:33   ` Mark Brown
  0 siblings, 0 replies; 15+ messages in thread
From: Mark Brown @ 2010-12-01 11:33 UTC (permalink / raw)
  To: linux-arm-kernel

On Wed, Dec 01, 2010 at 08:28:22PM +0900, Kukjin Kim wrote:

> And...as you know, need to convert s3c_irq_wake() to new irq_ interrupt
> method also.
> Ok...I will do it or will check Lennert Buytenhek's patch for it :-)

Yup, there's a lot of other IRQ stuff in the various Samsung platforms
that can be converted - as you can see I was working through the various
interrupts one at a time.  Lennart's patch covers everything but only
does the mechanical side of things.

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

* [PATCH 3/3] ARM: S3C64XX: Use chip_data to store the shift for EINTs
  2010-11-25 15:18 ` [PATCH 3/3] ARM: S3C64XX: Use chip_data to store the shift for EINTs Mark Brown
@ 2010-12-01 11:44   ` Kukjin Kim
  2010-12-01 11:55     ` Mark Brown
  0 siblings, 1 reply; 15+ messages in thread
From: Kukjin Kim @ 2010-12-01 11:44 UTC (permalink / raw)
  To: linux-arm-kernel

Mark Brown wrote:
> 
> This makes all the functions that use the shift slightly smaller, one
> instruction in most cases but more for ack() and maskack().
> 
Hi Mark,

Uhm...I'm not sure to use chip_data for the eint_irq_to_bit() is best to us.


Thanks.

Best regards,
Kgene.
--
Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.

> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
> ---
>  arch/arm/mach-s3c64xx/irq-eint.c |    9 +++++----
>  1 files changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/arm/mach-s3c64xx/irq-eint.c b/arch/arm/mach-s3c64xx/irq-
> eint.c
> index 169ee29..2ead818 100644
> --- a/arch/arm/mach-s3c64xx/irq-eint.c
> +++ b/arch/arm/mach-s3c64xx/irq-eint.c
> @@ -30,14 +30,14 @@
>  #include <plat/pm.h>
> 
>  #define eint_offset(irq)	((irq) - IRQ_EINT(0))
> -#define eint_irq_to_bit(irq)	(1 << eint_offset(irq))
> +#define eint_irq_to_bit(irq)	((u32)(1 << eint_offset(irq)))
> 
>  static inline void s3c_irq_eint_mask(struct irq_data *data)
>  {
>  	u32 mask;
> 
>  	mask = __raw_readl(S3C64XX_EINT0MASK);
> -	mask |= eint_irq_to_bit(data->irq);
> +	mask |= (u32)data->chip_data;
>  	__raw_writel(mask, S3C64XX_EINT0MASK);
>  }
> 
> @@ -46,13 +46,13 @@ static void s3c_irq_eint_unmask(struct irq_data *data)
>  	u32 mask;
> 
>  	mask = __raw_readl(S3C64XX_EINT0MASK);
> -	mask &= ~eint_irq_to_bit(data->irq);
> +	mask &= ~((u32)data->chip_data);
>  	__raw_writel(mask, S3C64XX_EINT0MASK);
>  }
> 
>  static inline void s3c_irq_eint_ack(struct irq_data *data)
>  {
> -	__raw_writel(eint_irq_to_bit(data->irq), S3C64XX_EINT0PEND);
> +	__raw_writel((u32)data->chip_data, S3C64XX_EINT0PEND);
>  }
> 
>  static void s3c_irq_eint_maskack(struct irq_data *data)
> @@ -198,6 +198,7 @@ static int __init s3c64xx_init_irq_eint(void)
> 
>  	for (irq = IRQ_EINT(0); irq <= IRQ_EINT(27); irq++) {
>  		set_irq_chip(irq, &s3c_irq_eint);
> +		set_irq_chip_data(irq, (void *)eint_irq_to_bit(irq));
>  		set_irq_handler(irq, handle_level_irq);
>  		set_irq_flags(irq, IRQF_VALID);
>  	}
> --

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

* [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods
  2010-12-01 11:08   ` Mark Brown
@ 2010-12-01 11:45     ` Lennert Buytenhek
  2010-12-01 11:47       ` Mark Brown
  0 siblings, 1 reply; 15+ messages in thread
From: Lennert Buytenhek @ 2010-12-01 11:45 UTC (permalink / raw)
  To: linux-arm-kernel

On Wed, Dec 01, 2010 at 11:08:27AM +0000, Mark Brown wrote:

> > It would seem that this patch breaks s3c:
> 
> > ./mach-s3c64xx/irq-eint.c:	.irq_set_wake	= s3c_irqext_wake,
> > ./plat-s3c24xx/irq.c:	.irq_set_wake	= s3c_irqext_wake
> 
> Could you please elaborate on what you mean by "s3c" and why you think
> it has been broken?

My mistake, sorry -- I thought you had missed the two uses of
s3c_irqext_wake in ./mach-s3c64xx/irq-eint.c and ./plat-s3c24xx/irq.c,
but your patch does actually fix those up as well.

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

* [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods
  2010-12-01 11:45     ` Lennert Buytenhek
@ 2010-12-01 11:47       ` Mark Brown
  0 siblings, 0 replies; 15+ messages in thread
From: Mark Brown @ 2010-12-01 11:47 UTC (permalink / raw)
  To: linux-arm-kernel

On Wed, Dec 01, 2010 at 12:45:31PM +0100, Lennert Buytenhek wrote:

> My mistake, sorry -- I thought you had missed the two uses of
> s3c_irqext_wake in ./mach-s3c64xx/irq-eint.c and ./plat-s3c24xx/irq.c,
> but your patch does actually fix those up as well.

No problem, no wonder I couldn't figure out what you were talking about!

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

* [PATCH 3/3] ARM: S3C64XX: Use chip_data to store the shift for EINTs
  2010-12-01 11:44   ` Kukjin Kim
@ 2010-12-01 11:55     ` Mark Brown
  2010-12-01 12:11       ` Kukjin Kim
  2010-12-08  0:36       ` Ben Dooks
  0 siblings, 2 replies; 15+ messages in thread
From: Mark Brown @ 2010-12-01 11:55 UTC (permalink / raw)
  To: linux-arm-kernel

On Wed, Dec 01, 2010 at 08:44:25PM +0900, Kukjin Kim wrote:
> Mark Brown wrote:

> > This makes all the functions that use the shift slightly smaller, one
> > instruction in most cases but more for ack() and maskack().

> Uhm...I'm not sure to use chip_data for the eint_irq_to_bit() is best to us.

Could you elaborate on your concern here?  I can't think of anything
else we might want to include in the data, and avoiding the shifts
and/or dereferences seems useful for anyone doing interrupt heavy work.

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

* [PATCH 3/3] ARM: S3C64XX: Use chip_data to store the shift for EINTs
  2010-12-01 11:55     ` Mark Brown
@ 2010-12-01 12:11       ` Kukjin Kim
  2010-12-08  0:36       ` Ben Dooks
  1 sibling, 0 replies; 15+ messages in thread
From: Kukjin Kim @ 2010-12-01 12:11 UTC (permalink / raw)
  To: linux-arm-kernel

Mark Brown wrote:
> 
> On Wed, Dec 01, 2010 at 08:44:25PM +0900, Kukjin Kim wrote:
> > Mark Brown wrote:
> 
> > > This makes all the functions that use the shift slightly smaller, one
> > > instruction in most cases but more for ack() and maskack().
> 
> > Uhm...I'm not sure to use chip_data for the eint_irq_to_bit() is best to
us.
> 
> Could you elaborate on your concern here?  I can't think of anything
> else we might want to include in the data, and avoiding the shifts
> and/or dereferences seems useful for anyone doing interrupt heavy work.

Hehehe :-)
I just thought it again, I agree with you. Your patch looks ok to me...will
apply.

Thanks.

Best regards,
Kgene.
--
Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.

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

* [PATCH 3/3] ARM: S3C64XX: Use chip_data to store the shift for EINTs
  2010-12-01 11:55     ` Mark Brown
  2010-12-01 12:11       ` Kukjin Kim
@ 2010-12-08  0:36       ` Ben Dooks
  1 sibling, 0 replies; 15+ messages in thread
From: Ben Dooks @ 2010-12-08  0:36 UTC (permalink / raw)
  To: linux-arm-kernel

On 01/12/10 11:55, Mark Brown wrote:
> On Wed, Dec 01, 2010 at 08:44:25PM +0900, Kukjin Kim wrote:
>> Mark Brown wrote:
> 
>>> This makes all the functions that use the shift slightly smaller, one
>>> instruction in most cases but more for ack() and maskack().
> 
>> Uhm...I'm not sure to use chip_data for the eint_irq_to_bit() is best to us.
> 
> Could you elaborate on your concern here?  I can't think of anything
> else we might want to include in the data, and avoiding the shifts
> and/or dereferences seems useful for anyone doing interrupt heavy work.

Hi, post code to show difference in output would be good!

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

end of thread, other threads:[~2010-12-08  0:36 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-25 15:18 [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods Mark Brown
2010-11-25 15:18 ` [PATCH 2/3] ARM: S3C64XX: Convert S3C64xx irq-eint to use new irq_ methods Mark Brown
2010-12-01 11:30   ` Kukjin Kim
2010-11-25 15:18 ` [PATCH 3/3] ARM: S3C64XX: Use chip_data to store the shift for EINTs Mark Brown
2010-12-01 11:44   ` Kukjin Kim
2010-12-01 11:55     ` Mark Brown
2010-12-01 12:11       ` Kukjin Kim
2010-12-08  0:36       ` Ben Dooks
2010-12-01 10:19 ` [PATCH 1/3] ARM: SAMSUNG: Convert s3c_irqext_wake() to new irq_ interrupt methods Lennert Buytenhek
2010-12-01 11:08   ` Mark Brown
2010-12-01 11:45     ` Lennert Buytenhek
2010-12-01 11:47       ` Mark Brown
2010-12-01 11:24 ` Kukjin Kim
2010-12-01 11:28 ` Kukjin Kim
2010-12-01 11:33   ` Mark Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).