Linux MIPS Architecture development
 help / color / mirror / Atom feed
* __do_IRQ() going away
@ 2009-03-11 11:28 Ralf Baechle
  2009-03-11 23:23 ` Markus Gothe
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Ralf Baechle @ 2009-03-11 11:28 UTC (permalink / raw)
  To: linux-mips; +Cc: Thomas Gleixner

__do_IRQ() is deprecated since a long time and there are plans to remove
it for 2.6.30.  The MIPS platforms seem to fall into three classes:

 o Platforms setting CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ to explicitly disable
   __do_IRQ():
	capcella_defconfig, cobalt_defconfig, e55_defconfig,
	fulong_defconfig, ip27_defconfig, jazz_defconfig, jmr3927_defconfig,
	lasat_defconfig, mpc30x_defconfig, pnx8335-stb225_defconfig,
	pnx8550-jbs_defconfig, pnx8550-stb810_defconfig, rb532_defconfig,
	rbtx49xx_defconfig, tb0219_defconfig, tb0226_defconfig,
	tb0287_defconfig and workpad_defconfig.

 o Platforms that don't set CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ but don't
   seem to use __do_IRQ():

	bcm47xx_defconfig, cavium-octeon_defconfig, excite_defconfig,
	ip22_defconfig, ip28_defconfig, msp71xx_defconfig, wrppmc_defconfig,

 o Platforms that still seem to rely on __do_IRQ():
     o All Sibyte platforms:
	bigsur_defconfig and sb1250-swarm_defconfig

     o All Alchemy platforms:
	db1000_defconfig, db1100_defconfig, db1200_defconfig, db1500_defconfig,
	db1550_defconfig, mtx1_defconfig, pb1100_defconfig, pb1500_defconfig
	and pb1550_defconfig

     o malta_defconfig.  The platform code itself is ok but irq-gic.c,
	irq-msc01.c, irq-msc01.c and irq_cpu.c are still using set_irq_chip
	and need fixing.

     o And the rest:
	decstation_defconfig, emma2rh_defconfig, ip32_defconfig,
	yosemite_defconfig, mipssim_defconfig and rm200_defconfig.

For now I've checked in the following patch into linux-queue.

  Ralf

MIPS: Enable GENERIC_HARDIRQS_NO__DO_IRQ for all platforms

__do_IRQ() is deprecated and will go away.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

 arch/mips/Kconfig |   12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)

--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -77,7 +77,6 @@ config MIPS_COBALT
 	select SYS_SUPPORTS_32BIT_KERNEL
 	select SYS_SUPPORTS_64BIT_KERNEL
 	select SYS_SUPPORTS_LITTLE_ENDIAN
-	select GENERIC_HARDIRQS_NO__DO_IRQ
 
 config MACH_DECSTATION
 	bool "DECstations"
@@ -132,7 +131,6 @@ config MACH_JAZZ
 	select SYS_SUPPORTS_32BIT_KERNEL
 	select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
 	select SYS_SUPPORTS_100HZ
-	select GENERIC_HARDIRQS_NO__DO_IRQ
 	help
 	 This a family of machines based on the MIPS R4030 chipset which was
 	 used by several vendors to build RISC/os and Windows NT workstations.
@@ -154,7 +152,6 @@ config LASAT
 	select SYS_SUPPORTS_32BIT_KERNEL
 	select SYS_SUPPORTS_64BIT_KERNEL if BROKEN
 	select SYS_SUPPORTS_LITTLE_ENDIAN
-	select GENERIC_HARDIRQS_NO__DO_IRQ
 
 config LEMOTE_FULONG
 	bool "Lemote Fulong mini-PC"
@@ -175,7 +172,6 @@ config LEMOTE_FULONG
 	select SYS_SUPPORTS_LITTLE_ENDIAN
 	select SYS_SUPPORTS_HIGHMEM
 	select SYS_HAS_EARLY_PRINTK
-	select GENERIC_HARDIRQS_NO__DO_IRQ
 	select GENERIC_ISA_DMA_SUPPORT_BROKEN
 	select CPU_HAS_WB
 	help
@@ -246,7 +242,6 @@ config MACH_VR41XX
 	select CEVT_R4K
 	select CSRC_R4K
 	select SYS_HAS_CPU_VR41XX
-	select GENERIC_HARDIRQS_NO__DO_IRQ
 
 config NXP_STB220
 	bool "NXP STB220 board"
@@ -360,7 +355,6 @@ config SGI_IP27
 	select SYS_SUPPORTS_BIG_ENDIAN
 	select SYS_SUPPORTS_NUMA
 	select SYS_SUPPORTS_SMP
-	select GENERIC_HARDIRQS_NO__DO_IRQ
 	help
 	  This are the SGI Origin 200, Origin 2000 and Onyx 2 Graphics
 	  workstations.  To compile a Linux kernel that runs on these, say Y
@@ -559,7 +553,6 @@ config MIKROTIK_RB532
 	select CEVT_R4K
 	select CSRC_R4K
 	select DMA_NONCOHERENT
-	select GENERIC_HARDIRQS_NO__DO_IRQ
 	select HW_HAS_PCI
 	select IRQ_CPU
 	select SYS_HAS_CPU_MIPS32_R1
@@ -697,8 +690,7 @@ config SCHED_OMIT_FRAME_POINTER
 	default y
 
 config GENERIC_HARDIRQS_NO__DO_IRQ
-	bool
-	default n
+	def_bool y
 
 #
 # Select some configuration options automatically based on user selections.
@@ -905,7 +897,6 @@ config SOC_PNX833X
 	select SYS_SUPPORTS_32BIT_KERNEL
 	select SYS_SUPPORTS_LITTLE_ENDIAN
 	select SYS_SUPPORTS_BIG_ENDIAN
-	select GENERIC_HARDIRQS_NO__DO_IRQ
 	select GENERIC_GPIO
 	select CPU_MIPSR2_IRQ_VI
 
@@ -924,7 +915,6 @@ config SOC_PNX8550
 	select SYS_HAS_CPU_MIPS32_R1
 	select SYS_HAS_EARLY_PRINTK
 	select SYS_SUPPORTS_32BIT_KERNEL
-	select GENERIC_HARDIRQS_NO__DO_IRQ
 	select GENERIC_GPIO
 
 config SWAP_IO_SPACE

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

* Re: __do_IRQ() going away
  2009-03-11 11:28 __do_IRQ() going away Ralf Baechle
@ 2009-03-11 23:23 ` Markus Gothe
  2009-03-12  7:26 ` Manuel Lauss
  2009-03-13 15:31 ` MIPS: EMMA2RH: Use handle_edge_irq() handler for GPIO interrupts Shinya Kuribayashi
  2 siblings, 0 replies; 7+ messages in thread
From: Markus Gothe @ 2009-03-11 23:23 UTC (permalink / raw)
  To: Ralf Baechle; +Cc: linux-mips, Thomas Gleixner

[-- Attachment #1: Type: text/plain, Size: 4532 bytes --]

I'll have a quick look at the NEC EMMA2 code, for review...

//Markus
On 11 Mar 2009, at 12:28, Ralf Baechle wrote:

> __do_IRQ() is deprecated since a long time and there are plans to  
> remove
> it for 2.6.30.  The MIPS platforms seem to fall into three classes:
>
> o Platforms setting CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ to explicitly  
> disable
>   __do_IRQ():
> 	capcella_defconfig, cobalt_defconfig, e55_defconfig,
> 	fulong_defconfig, ip27_defconfig, jazz_defconfig, jmr3927_defconfig,
> 	lasat_defconfig, mpc30x_defconfig, pnx8335-stb225_defconfig,
> 	pnx8550-jbs_defconfig, pnx8550-stb810_defconfig, rb532_defconfig,
> 	rbtx49xx_defconfig, tb0219_defconfig, tb0226_defconfig,
> 	tb0287_defconfig and workpad_defconfig.
>
> o Platforms that don't set CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ but  
> don't
>   seem to use __do_IRQ():
>
> 	bcm47xx_defconfig, cavium-octeon_defconfig, excite_defconfig,
> 	ip22_defconfig, ip28_defconfig, msp71xx_defconfig, wrppmc_defconfig,
>
> o Platforms that still seem to rely on __do_IRQ():
>     o All Sibyte platforms:
> 	bigsur_defconfig and sb1250-swarm_defconfig
>
>     o All Alchemy platforms:
> 	db1000_defconfig, db1100_defconfig, db1200_defconfig,  
> db1500_defconfig,
> 	db1550_defconfig, mtx1_defconfig, pb1100_defconfig, pb1500_defconfig
> 	and pb1550_defconfig
>
>     o malta_defconfig.  The platform code itself is ok but irq-gic.c,
> 	irq-msc01.c, irq-msc01.c and irq_cpu.c are still using set_irq_chip
> 	and need fixing.
>
>     o And the rest:
> 	decstation_defconfig, emma2rh_defconfig, ip32_defconfig,
> 	yosemite_defconfig, mipssim_defconfig and rm200_defconfig.
>
> For now I've checked in the following patch into linux-queue.
>
>  Ralf
>
> MIPS: Enable GENERIC_HARDIRQS_NO__DO_IRQ for all platforms
>
> __do_IRQ() is deprecated and will go away.
>
> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
>
> arch/mips/Kconfig |   12 +-----------
> 1 file changed, 1 insertion(+), 11 deletions(-)
>
> --- a/arch/mips/Kconfig
> +++ b/arch/mips/Kconfig
> @@ -77,7 +77,6 @@ config MIPS_COBALT
> 	select SYS_SUPPORTS_32BIT_KERNEL
> 	select SYS_SUPPORTS_64BIT_KERNEL
> 	select SYS_SUPPORTS_LITTLE_ENDIAN
> -	select GENERIC_HARDIRQS_NO__DO_IRQ
>
> config MACH_DECSTATION
> 	bool "DECstations"
> @@ -132,7 +131,6 @@ config MACH_JAZZ
> 	select SYS_SUPPORTS_32BIT_KERNEL
> 	select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
> 	select SYS_SUPPORTS_100HZ
> -	select GENERIC_HARDIRQS_NO__DO_IRQ
> 	help
> 	 This a family of machines based on the MIPS R4030 chipset which was
> 	 used by several vendors to build RISC/os and Windows NT  
> workstations.
> @@ -154,7 +152,6 @@ config LASAT
> 	select SYS_SUPPORTS_32BIT_KERNEL
> 	select SYS_SUPPORTS_64BIT_KERNEL if BROKEN
> 	select SYS_SUPPORTS_LITTLE_ENDIAN
> -	select GENERIC_HARDIRQS_NO__DO_IRQ
>
> config LEMOTE_FULONG
> 	bool "Lemote Fulong mini-PC"
> @@ -175,7 +172,6 @@ config LEMOTE_FULONG
> 	select SYS_SUPPORTS_LITTLE_ENDIAN
> 	select SYS_SUPPORTS_HIGHMEM
> 	select SYS_HAS_EARLY_PRINTK
> -	select GENERIC_HARDIRQS_NO__DO_IRQ
> 	select GENERIC_ISA_DMA_SUPPORT_BROKEN
> 	select CPU_HAS_WB
> 	help
> @@ -246,7 +242,6 @@ config MACH_VR41XX
> 	select CEVT_R4K
> 	select CSRC_R4K
> 	select SYS_HAS_CPU_VR41XX
> -	select GENERIC_HARDIRQS_NO__DO_IRQ
>
> config NXP_STB220
> 	bool "NXP STB220 board"
> @@ -360,7 +355,6 @@ config SGI_IP27
> 	select SYS_SUPPORTS_BIG_ENDIAN
> 	select SYS_SUPPORTS_NUMA
> 	select SYS_SUPPORTS_SMP
> -	select GENERIC_HARDIRQS_NO__DO_IRQ
> 	help
> 	  This are the SGI Origin 200, Origin 2000 and Onyx 2 Graphics
> 	  workstations.  To compile a Linux kernel that runs on these, say Y
> @@ -559,7 +553,6 @@ config MIKROTIK_RB532
> 	select CEVT_R4K
> 	select CSRC_R4K
> 	select DMA_NONCOHERENT
> -	select GENERIC_HARDIRQS_NO__DO_IRQ
> 	select HW_HAS_PCI
> 	select IRQ_CPU
> 	select SYS_HAS_CPU_MIPS32_R1
> @@ -697,8 +690,7 @@ config SCHED_OMIT_FRAME_POINTER
> 	default y
>
> config GENERIC_HARDIRQS_NO__DO_IRQ
> -	bool
> -	default n
> +	def_bool y
>
> #
> # Select some configuration options automatically based on user  
> selections.
> @@ -905,7 +897,6 @@ config SOC_PNX833X
> 	select SYS_SUPPORTS_32BIT_KERNEL
> 	select SYS_SUPPORTS_LITTLE_ENDIAN
> 	select SYS_SUPPORTS_BIG_ENDIAN
> -	select GENERIC_HARDIRQS_NO__DO_IRQ
> 	select GENERIC_GPIO
> 	select CPU_MIPSR2_IRQ_VI
>
> @@ -924,7 +915,6 @@ config SOC_PNX8550
> 	select SYS_HAS_CPU_MIPS32_R1
> 	select SYS_HAS_EARLY_PRINTK
> 	select SYS_SUPPORTS_32BIT_KERNEL
> -	select GENERIC_HARDIRQS_NO__DO_IRQ
> 	select GENERIC_GPIO
>
> config SWAP_IO_SPACE
>


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 194 bytes --]

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

* Re: __do_IRQ() going away
  2009-03-11 11:28 __do_IRQ() going away Ralf Baechle
  2009-03-11 23:23 ` Markus Gothe
@ 2009-03-12  7:26 ` Manuel Lauss
  2009-03-12  9:28   ` Ralf Baechle
  2009-03-13 15:31 ` MIPS: EMMA2RH: Use handle_edge_irq() handler for GPIO interrupts Shinya Kuribayashi
  2 siblings, 1 reply; 7+ messages in thread
From: Manuel Lauss @ 2009-03-12  7:26 UTC (permalink / raw)
  To: Ralf Baechle; +Cc: linux-mips, Thomas Gleixner

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=unknown-8bit, Size: 664 bytes --]

On Wed, Mar 11, 2009 at 12:28:06PM +0100, Ralf Baechle wrote:
> __do_IRQ() is deprecated since a long time and there are plans to remove
> it for 2.6.30.  The MIPS platforms seem to fall into three classes:

>  o Platforms that still seem to rely on __do_IRQ():
>      o All Alchemy platforms:
> 	db1000_defconfig, db1100_defconfig, db1200_defconfig, db1500_defconfig,
> 	db1550_defconfig, mtx1_defconfig, pb1100_defconfig, pb1500_defconfig
> 	and pb1550_defconfig

I believe that the defconfigs just need to be updated.  There are no
__do_IRQ invocations in the alchemy/ tree anymore, and generic hardirqs are
enabled by CONFIG_SOC_AU1X00.

Grüsse,
	Manuel Lauss

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

* Re: __do_IRQ() going away
  2009-03-12  7:26 ` Manuel Lauss
@ 2009-03-12  9:28   ` Ralf Baechle
  2009-03-12  9:46     ` Manuel Lauss
  0 siblings, 1 reply; 7+ messages in thread
From: Ralf Baechle @ 2009-03-12  9:28 UTC (permalink / raw)
  To: Manuel Lauss; +Cc: linux-mips, Thomas Gleixner

On Thu, Mar 12, 2009 at 08:26:18AM +0100, Manuel Lauss wrote:

> 
> On Wed, Mar 11, 2009 at 12:28:06PM +0100, Ralf Baechle wrote:
> > __do_IRQ() is deprecated since a long time and there are plans to remove
> > it for 2.6.30.  The MIPS platforms seem to fall into three classes:
> 
> >  o Platforms that still seem to rely on __do_IRQ():
> >      o All Alchemy platforms:
> > 	db1000_defconfig, db1100_defconfig, db1200_defconfig, db1500_defconfig,
> > 	db1550_defconfig, mtx1_defconfig, pb1100_defconfig, pb1500_defconfig
> > 	and pb1550_defconfig
> 
> I believe that the defconfigs just need to be updated.  There are no
> __do_IRQ invocations in the alchemy/ tree anymore, and generic hardirqs are
> enabled by CONFIG_SOC_AU1X00.

__do_IRQ will be called from the generic code if irq_desc->handle_irq is
not set for an interrupt and handle_irq will be left NULL if a platform
only calls set_irq_chip or even does a homebrew initialization.  Fix is
to call set_irq_chip_and_handler or better set_irq_chip_and_handler_name.
Iow, now with CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ always set half the
platforms will blow up because the function pointer irq_desc->handle_irq
is unset.

  Ralf

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

* Re: __do_IRQ() going away
  2009-03-12  9:28   ` Ralf Baechle
@ 2009-03-12  9:46     ` Manuel Lauss
  2009-03-12 11:20       ` Ralf Baechle
  0 siblings, 1 reply; 7+ messages in thread
From: Manuel Lauss @ 2009-03-12  9:46 UTC (permalink / raw)
  To: Ralf Baechle; +Cc: linux-mips, Thomas Gleixner

On Thu, Mar 12, 2009 at 10:28 AM, Ralf Baechle <ralf@linux-mips.org> wrote:
> On Thu, Mar 12, 2009 at 08:26:18AM +0100, Manuel Lauss wrote:
>
>>
>> On Wed, Mar 11, 2009 at 12:28:06PM +0100, Ralf Baechle wrote:
>> > __do_IRQ() is deprecated since a long time and there are plans to remove
>> > it for 2.6.30.  The MIPS platforms seem to fall into three classes:
>>
>> >  o Platforms that still seem to rely on __do_IRQ():
>> >      o All Alchemy platforms:
>> >     db1000_defconfig, db1100_defconfig, db1200_defconfig, db1500_defconfig,
>> >     db1550_defconfig, mtx1_defconfig, pb1100_defconfig, pb1500_defconfig
>> >     and pb1550_defconfig
>>
>> I believe that the defconfigs just need to be updated.  There are no
>> __do_IRQ invocations in the alchemy/ tree anymore, and generic hardirqs are
>> enabled by CONFIG_SOC_AU1X00.
>
> __do_IRQ will be called from the generic code if irq_desc->handle_irq is
> not set for an interrupt and handle_irq will be left NULL if a platform
> only calls set_irq_chip or even does a homebrew initialization.  Fix is
> to call set_irq_chip_and_handler or better set_irq_chip_and_handler_name.

Alchemy does all that...


> Iow, now with CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ always set half the
> platforms will blow up because the function pointer irq_desc->handle_irq
> is unset.

...and it works fine so far on the DB1200 and another 2 boards I have.
(I.e. your patch didn't break anything).  Unless I'm missing something
very big.

Manuel Lauss

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

* Re: __do_IRQ() going away
  2009-03-12  9:46     ` Manuel Lauss
@ 2009-03-12 11:20       ` Ralf Baechle
  0 siblings, 0 replies; 7+ messages in thread
From: Ralf Baechle @ 2009-03-12 11:20 UTC (permalink / raw)
  To: Manuel Lauss; +Cc: linux-mips, Thomas Gleixner

On Thu, Mar 12, 2009 at 10:46:28AM +0100, Manuel Lauss wrote:

> > Iow, now with CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ always set half the
> > platforms will blow up because the function pointer irq_desc->handle_irq
> > is unset.
> 
> ...and it works fine so far on the DB1200 and another 2 boards I have.
> (I.e. your patch didn't break anything).  Unless I'm missing something
> very big.

Ah, there is a remaining call to set_irq_chip in the Alchemy code - but
that seems to be in "does not happen" code so should be benign.

  Ralf

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

* MIPS: EMMA2RH: Use handle_edge_irq() handler for GPIO interrupts
  2009-03-11 11:28 __do_IRQ() going away Ralf Baechle
  2009-03-11 23:23 ` Markus Gothe
  2009-03-12  7:26 ` Manuel Lauss
@ 2009-03-13 15:31 ` Shinya Kuribayashi
  2 siblings, 0 replies; 7+ messages in thread
From: Shinya Kuribayashi @ 2009-03-13 15:31 UTC (permalink / raw)
  To: Ralf Baechle; +Cc: linux-mips, Thomas Gleixner

EMMA's GPIO interrupts are latched by GPIO interrupt status register.
In this case, we're encouraged to use handle_edge_irq() handler.

The following changes are made along with replacing set_irq_chip() with
set_irq_chip_and_handler_name(,,handle_edge_irq,"edge"):

* Fix emma2rh_gpio_irq_ack not to disable interrupts

  With handle_edge_irq(), we're not expected to disable interrupts
  when chip->ack is served, so fix it accordingly.  We also add a
  new emma2rh_gpio_irq_mask_ack() for chip->mask_ack operation.

* Remove emma2rh_gpio_irq_end() as chip->end is no longer served.

Signed-off-by: Shinya Kuribayashi <shinya.kuribayashi@necel.com>
---

Ralf Baechle wrote:
> __do_IRQ() is deprecated since a long time and there are plans to remove
> it for 2.6.30.  The MIPS platforms seem to fall into three classes:
[snip]
>  o Platforms that still seem to rely on __do_IRQ():
>      o All Sibyte platforms:
> 	bigsur_defconfig and sb1250-swarm_defconfig
> 
>      o All Alchemy platforms:
> 	db1000_defconfig, db1100_defconfig, db1200_defconfig, db1500_defconfig,
> 	db1550_defconfig, mtx1_defconfig, pb1100_defconfig, pb1500_defconfig
> 	and pb1550_defconfig
> 
>      o malta_defconfig.  The platform code itself is ok but irq-gic.c,
> 	irq-msc01.c, irq-msc01.c and irq_cpu.c are still using set_irq_chip
> 	and need fixing.
> 
>      o And the rest:
> 	decstation_defconfig, emma2rh_defconfig, ip32_defconfig,
> 	yosemite_defconfig, mipssim_defconfig and rm200_defconfig.

Here's a patch for EMMA2RH not to call __do_IRQ(). Please review.

Thanks,

  Shinya

 arch/mips/emma/markeins/irq.c |   28 ++++++++++------------------
 1 files changed, 10 insertions(+), 18 deletions(-)

diff --git a/arch/mips/emma/markeins/irq.c b/arch/mips/emma/markeins/irq.c
index ce8f5f2..d15556c 100644
--- a/arch/mips/emma/markeins/irq.c
+++ b/arch/mips/emma/markeins/irq.c
@@ -149,37 +149,28 @@ static void emma2rh_gpio_irq_disable(unsigned int irq)
 
 static void emma2rh_gpio_irq_ack(unsigned int irq)
 {
-	u32 reg;
-
 	irq -= EMMA2RH_GPIO_IRQ_BASE;
 	emma2rh_out32(EMMA2RH_GPIO_INT_ST, ~(1 << irq));
-
-	reg = emma2rh_in32(EMMA2RH_GPIO_INT_MASK);
-	reg &= ~(1 << irq);
-	emma2rh_out32(EMMA2RH_GPIO_INT_MASK, reg);
 }
 
-static void emma2rh_gpio_irq_end(unsigned int irq)
+static void emma2rh_gpio_irq_mask_ack(unsigned int irq)
 {
 	u32 reg;
 
-	if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) {
-
-		irq -= EMMA2RH_GPIO_IRQ_BASE;
+	irq -= EMMA2RH_GPIO_IRQ_BASE;
+	emma2rh_out32(EMMA2RH_GPIO_INT_ST, ~(1 << irq));
 
-		reg = emma2rh_in32(EMMA2RH_GPIO_INT_MASK);
-		reg |= 1 << irq;
-		emma2rh_out32(EMMA2RH_GPIO_INT_MASK, reg);
-	}
+	reg = emma2rh_in32(EMMA2RH_GPIO_INT_MASK);
+	reg &= ~(1 << irq);
+	emma2rh_out32(EMMA2RH_GPIO_INT_MASK, reg);
 }
 
 struct irq_chip emma2rh_gpio_irq_controller = {
 	.name = "emma2rh_gpio_irq",
 	.ack = emma2rh_gpio_irq_ack,
 	.mask = emma2rh_gpio_irq_disable,
-	.mask_ack = emma2rh_gpio_irq_ack,
+	.mask_ack = emma2rh_gpio_irq_mask_ack,
 	.unmask = emma2rh_gpio_irq_enable,
-	.end = emma2rh_gpio_irq_end,
 };
 
 void emma2rh_gpio_irq_init(void)
@@ -187,8 +178,9 @@ void emma2rh_gpio_irq_init(void)
 	u32 i;
 
 	for (i = 0; i < NUM_EMMA2RH_IRQ_GPIO; i++)
-		set_irq_chip(EMMA2RH_GPIO_IRQ_BASE + i,
-			     &emma2rh_gpio_irq_controller);
+		set_irq_chip_and_handler_name(EMMA2RH_GPIO_IRQ_BASE + i,
+					      &emma2rh_gpio_irq_controller,
+					      handle_edge_irq, "edge");
 }
 
 static struct irqaction irq_cascade = {

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

end of thread, other threads:[~2009-03-13 15:31 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-11 11:28 __do_IRQ() going away Ralf Baechle
2009-03-11 23:23 ` Markus Gothe
2009-03-12  7:26 ` Manuel Lauss
2009-03-12  9:28   ` Ralf Baechle
2009-03-12  9:46     ` Manuel Lauss
2009-03-12 11:20       ` Ralf Baechle
2009-03-13 15:31 ` MIPS: EMMA2RH: Use handle_edge_irq() handler for GPIO interrupts Shinya Kuribayashi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox