Patchwork [1/3] powerpc/mpic: add irq_set_wake support

login
register
mail settings
Submitter Dongsheng Wang
Date March 8, 2013, 7:38 a.m.
Message ID <1362728327-21013-1-git-send-email-dongsheng.wang@freescale.com>
Download mbox | patch
Permalink /patch/226034/
State Superseded
Delegated to: Kumar Gala
Headers show

Comments

Dongsheng Wang - March 8, 2013, 7:38 a.m.
Add irq_set_wake support. Just add IRQF_NO_SUSPEND to desc->action->flag.
So the wake up interrupt will not be disable in suspend_device_irqs.

Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
---
 arch/powerpc/sysdev/mpic.c |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)
Wang Dongsheng-B40534 - March 18, 2013, 9:28 a.m.
Hi Benjamin & Kumar,

I am not sure who can apply these patches...

Could you apply these patches?

Thanks.

[1/3] powerpc/mpic: add irq_set_wake support
http://patchwork.ozlabs.org/patch/226034/

[2/3] powerpc/mpic: add global timer support
http://patchwork.ozlabs.org/patch/226035/

[3/3] powerpc/fsl: add MPIC timer wakeup support
http://patchwork.ozlabs.org/patch/226036/

> -----Original Message-----
> From: Wang Dongsheng-B40534
> Sent: Friday, March 08, 2013 3:39 PM
> To: Wood Scott-B07421; Gala Kumar-B11780
> Cc: linuxppc-dev@lists.ozlabs.org; Wang Dongsheng-B40534
> Subject: [PATCH 1/3] powerpc/mpic: add irq_set_wake support
> 
> Add irq_set_wake support. Just add IRQF_NO_SUSPEND to desc->action->flag.
> So the wake up interrupt will not be disable in suspend_device_irqs.
> 
> Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
> ---
>  arch/powerpc/sysdev/mpic.c |   15 +++++++++++++++
>  1 files changed, 15 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
> index 3b2efd4..10e474e 100644
> --- a/arch/powerpc/sysdev/mpic.c
> +++ b/arch/powerpc/sysdev/mpic.c
> @@ -920,6 +920,18 @@ int mpic_set_irq_type(struct irq_data *d, unsigned
> int flow_type)
>  	return IRQ_SET_MASK_OK_NOCOPY;
>  }
> 
> +static int mpic_irq_set_wake(struct irq_data *d, unsigned int on) {
> +	struct irq_desc *desc = container_of(d, struct irq_desc, irq_data);
> +
> +	if (on)
> +		desc->action->flags |= IRQF_NO_SUSPEND;
> +	else
> +		desc->action->flags &= ~IRQF_NO_SUSPEND;
> +
> +	return 0;
> +}
> +
>  void mpic_set_vector(unsigned int virq, unsigned int vector)  {
>  	struct mpic *mpic = mpic_from_irq(virq); @@ -957,6 +969,7 @@ static
> struct irq_chip mpic_irq_chip = {
>  	.irq_unmask	= mpic_unmask_irq,
>  	.irq_eoi	= mpic_end_irq,
>  	.irq_set_type	= mpic_set_irq_type,
> +	.irq_set_wake	= mpic_irq_set_wake,
>  };
> 
>  #ifdef CONFIG_SMP
> @@ -971,6 +984,7 @@ static struct irq_chip mpic_tm_chip = {
>  	.irq_mask	= mpic_mask_tm,
>  	.irq_unmask	= mpic_unmask_tm,
>  	.irq_eoi	= mpic_end_irq,
> +	.irq_set_wake	= mpic_irq_set_wake,
>  };
> 
>  #ifdef CONFIG_MPIC_U3_HT_IRQS
> @@ -981,6 +995,7 @@ static struct irq_chip mpic_irq_ht_chip = {
>  	.irq_unmask	= mpic_unmask_ht_irq,
>  	.irq_eoi	= mpic_end_ht_irq,
>  	.irq_set_type	= mpic_set_irq_type,
> +	.irq_set_wake	= mpic_irq_set_wake,
>  };
>  #endif /* CONFIG_MPIC_U3_HT_IRQS */
> 
> --
> 1.7.5.1
Benjamin Herrenschmidt - March 18, 2013, 2:41 p.m.
On Mon, 2013-03-18 at 09:28 +0000, Wang Dongsheng-B40534 wrote:
> Hi Benjamin & Kumar,
> 
> I am not sure who can apply these patches...
> 
> Could you apply these patches?

I can but I need somebody to review them, I don't have the bandwidth nor
am I familiar with the FSL changes to the MPIC.

Cheers,
Ben.

> Thanks.
> 
> [1/3] powerpc/mpic: add irq_set_wake support
> http://patchwork.ozlabs.org/patch/226034/
> 
> [2/3] powerpc/mpic: add global timer support
> http://patchwork.ozlabs.org/patch/226035/
> 
> [3/3] powerpc/fsl: add MPIC timer wakeup support
> http://patchwork.ozlabs.org/patch/226036/
> 
> > -----Original Message-----
> > From: Wang Dongsheng-B40534
> > Sent: Friday, March 08, 2013 3:39 PM
> > To: Wood Scott-B07421; Gala Kumar-B11780
> > Cc: linuxppc-dev@lists.ozlabs.org; Wang Dongsheng-B40534
> > Subject: [PATCH 1/3] powerpc/mpic: add irq_set_wake support
> > 
> > Add irq_set_wake support. Just add IRQF_NO_SUSPEND to desc->action->flag.
> > So the wake up interrupt will not be disable in suspend_device_irqs.
> > 
> > Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
> > ---
> >  arch/powerpc/sysdev/mpic.c |   15 +++++++++++++++
> >  1 files changed, 15 insertions(+), 0 deletions(-)
> > 
> > diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
> > index 3b2efd4..10e474e 100644
> > --- a/arch/powerpc/sysdev/mpic.c
> > +++ b/arch/powerpc/sysdev/mpic.c
> > @@ -920,6 +920,18 @@ int mpic_set_irq_type(struct irq_data *d, unsigned
> > int flow_type)
> >  	return IRQ_SET_MASK_OK_NOCOPY;
> >  }
> > 
> > +static int mpic_irq_set_wake(struct irq_data *d, unsigned int on) {
> > +	struct irq_desc *desc = container_of(d, struct irq_desc, irq_data);
> > +
> > +	if (on)
> > +		desc->action->flags |= IRQF_NO_SUSPEND;
> > +	else
> > +		desc->action->flags &= ~IRQF_NO_SUSPEND;
> > +
> > +	return 0;
> > +}
> > +
> >  void mpic_set_vector(unsigned int virq, unsigned int vector)  {
> >  	struct mpic *mpic = mpic_from_irq(virq); @@ -957,6 +969,7 @@ static
> > struct irq_chip mpic_irq_chip = {
> >  	.irq_unmask	= mpic_unmask_irq,
> >  	.irq_eoi	= mpic_end_irq,
> >  	.irq_set_type	= mpic_set_irq_type,
> > +	.irq_set_wake	= mpic_irq_set_wake,
> >  };
> > 
> >  #ifdef CONFIG_SMP
> > @@ -971,6 +984,7 @@ static struct irq_chip mpic_tm_chip = {
> >  	.irq_mask	= mpic_mask_tm,
> >  	.irq_unmask	= mpic_unmask_tm,
> >  	.irq_eoi	= mpic_end_irq,
> > +	.irq_set_wake	= mpic_irq_set_wake,
> >  };
> > 
> >  #ifdef CONFIG_MPIC_U3_HT_IRQS
> > @@ -981,6 +995,7 @@ static struct irq_chip mpic_irq_ht_chip = {
> >  	.irq_unmask	= mpic_unmask_ht_irq,
> >  	.irq_eoi	= mpic_end_ht_irq,
> >  	.irq_set_type	= mpic_set_irq_type,
> > +	.irq_set_wake	= mpic_irq_set_wake,
> >  };
> >  #endif /* CONFIG_MPIC_U3_HT_IRQS */
> > 
> > --
> > 1.7.5.1
>
Gala Kumar-B11780 - March 18, 2013, 2:44 p.m.
On Mar 18, 2013, at 9:41 AM, Benjamin Herrenschmidt wrote:

> On Mon, 2013-03-18 at 09:28 +0000, Wang Dongsheng-B40534 wrote:
>> Hi Benjamin & Kumar,
>> 
>> I am not sure who can apply these patches...
>> 
>> Could you apply these patches?
> 
> I can but I need somebody to review them, I don't have the bandwidth nor
> am I familiar with the FSL changes to the MPIC.
> 
> Cheers,
> Ben.

I'd ask for Scott's ack/signoff on these patches for ben or I to accept them.

- k

> 
>> Thanks.
>> 
>> [1/3] powerpc/mpic: add irq_set_wake support
>> http://patchwork.ozlabs.org/patch/226034/
>> 
>> [2/3] powerpc/mpic: add global timer support
>> http://patchwork.ozlabs.org/patch/226035/
>> 
>> [3/3] powerpc/fsl: add MPIC timer wakeup support
>> http://patchwork.ozlabs.org/patch/226036/
>> 
>>> -----Original Message-----
>>> From: Wang Dongsheng-B40534
>>> Sent: Friday, March 08, 2013 3:39 PM
>>> To: Wood Scott-B07421; Gala Kumar-B11780
>>> Cc: linuxppc-dev@lists.ozlabs.org; Wang Dongsheng-B40534
>>> Subject: [PATCH 1/3] powerpc/mpic: add irq_set_wake support
>>> 
>>> Add irq_set_wake support. Just add IRQF_NO_SUSPEND to desc->action->flag.
>>> So the wake up interrupt will not be disable in suspend_device_irqs.
>>> 
>>> Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
>>> ---
>>> arch/powerpc/sysdev/mpic.c |   15 +++++++++++++++
>>> 1 files changed, 15 insertions(+), 0 deletions(-)
>>> 
>>> diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
>>> index 3b2efd4..10e474e 100644
>>> --- a/arch/powerpc/sysdev/mpic.c
>>> +++ b/arch/powerpc/sysdev/mpic.c
>>> @@ -920,6 +920,18 @@ int mpic_set_irq_type(struct irq_data *d, unsigned
>>> int flow_type)
>>> 	return IRQ_SET_MASK_OK_NOCOPY;
>>> }
>>> 
>>> +static int mpic_irq_set_wake(struct irq_data *d, unsigned int on) {
>>> +	struct irq_desc *desc = container_of(d, struct irq_desc, irq_data);
>>> +
>>> +	if (on)
>>> +		desc->action->flags |= IRQF_NO_SUSPEND;
>>> +	else
>>> +		desc->action->flags &= ~IRQF_NO_SUSPEND;
>>> +
>>> +	return 0;
>>> +}
>>> +
>>> void mpic_set_vector(unsigned int virq, unsigned int vector)  {
>>> 	struct mpic *mpic = mpic_from_irq(virq); @@ -957,6 +969,7 @@ static
>>> struct irq_chip mpic_irq_chip = {
>>> 	.irq_unmask	= mpic_unmask_irq,
>>> 	.irq_eoi	= mpic_end_irq,
>>> 	.irq_set_type	= mpic_set_irq_type,
>>> +	.irq_set_wake	= mpic_irq_set_wake,
>>> };
>>> 
>>> #ifdef CONFIG_SMP
>>> @@ -971,6 +984,7 @@ static struct irq_chip mpic_tm_chip = {
>>> 	.irq_mask	= mpic_mask_tm,
>>> 	.irq_unmask	= mpic_unmask_tm,
>>> 	.irq_eoi	= mpic_end_irq,
>>> +	.irq_set_wake	= mpic_irq_set_wake,
>>> };
>>> 
>>> #ifdef CONFIG_MPIC_U3_HT_IRQS
>>> @@ -981,6 +995,7 @@ static struct irq_chip mpic_irq_ht_chip = {
>>> 	.irq_unmask	= mpic_unmask_ht_irq,
>>> 	.irq_eoi	= mpic_end_ht_irq,
>>> 	.irq_set_type	= mpic_set_irq_type,
>>> +	.irq_set_wake	= mpic_irq_set_wake,
>>> };
>>> #endif /* CONFIG_MPIC_U3_HT_IRQS */
>>> 
>>> --
>>> 1.7.5.1
>> 
> 
> 
>

Patch

diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index 3b2efd4..10e474e 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -920,6 +920,18 @@  int mpic_set_irq_type(struct irq_data *d, unsigned int flow_type)
 	return IRQ_SET_MASK_OK_NOCOPY;
 }
 
+static int mpic_irq_set_wake(struct irq_data *d, unsigned int on)
+{
+	struct irq_desc *desc = container_of(d, struct irq_desc, irq_data);
+
+	if (on)
+		desc->action->flags |= IRQF_NO_SUSPEND;
+	else
+		desc->action->flags &= ~IRQF_NO_SUSPEND;
+
+	return 0;
+}
+
 void mpic_set_vector(unsigned int virq, unsigned int vector)
 {
 	struct mpic *mpic = mpic_from_irq(virq);
@@ -957,6 +969,7 @@  static struct irq_chip mpic_irq_chip = {
 	.irq_unmask	= mpic_unmask_irq,
 	.irq_eoi	= mpic_end_irq,
 	.irq_set_type	= mpic_set_irq_type,
+	.irq_set_wake	= mpic_irq_set_wake,
 };
 
 #ifdef CONFIG_SMP
@@ -971,6 +984,7 @@  static struct irq_chip mpic_tm_chip = {
 	.irq_mask	= mpic_mask_tm,
 	.irq_unmask	= mpic_unmask_tm,
 	.irq_eoi	= mpic_end_irq,
+	.irq_set_wake	= mpic_irq_set_wake,
 };
 
 #ifdef CONFIG_MPIC_U3_HT_IRQS
@@ -981,6 +995,7 @@  static struct irq_chip mpic_irq_ht_chip = {
 	.irq_unmask	= mpic_unmask_ht_irq,
 	.irq_eoi	= mpic_end_ht_irq,
 	.irq_set_type	= mpic_set_irq_type,
+	.irq_set_wake	= mpic_irq_set_wake,
 };
 #endif /* CONFIG_MPIC_U3_HT_IRQS */