sh_eth: Change handling of IRQ
diff mbox

Message ID 49BF3A41.6040309@renesas.com
State Accepted
Headers show

Commit Message

Nobuhiro Iwamatsu March 17, 2009, 5:50 a.m. UTC
Handling of IRQ of the SH7763/SH7764 CPU which sh_eth supported was
changed.
This revises it for this change.

Signed-off-by: Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>
---
 drivers/net/sh_eth.c |   20 +++++++++++++++++---
 1 files changed, 17 insertions(+), 3 deletions(-)

Comments

Paul Mundt March 30, 2009, 11:15 p.m. UTC | #1
On Tue, Mar 17, 2009 at 02:50:57PM +0900, Nobuhiro Iwamatsu wrote:
> Handling of IRQ of the SH7763/SH7764 CPU which sh_eth supported was
> changed.
> This revises it for this change.
> 
> Signed-off-by: Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>

On Tue, Mar 17, 2009 at 02:52:23PM +0900, Nobuhiro Iwamatsu wrote:
> Address of SH_TSU_ADDR and ARSTR of SH7763 was wrong.
> This revise it.
> 
> Signed-off-by: Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>

The sh changes this depends on for the CPU subtypes are merged upstream
now, so this can go through either tree. As there is nothing really
netdev specific about this, I suppose the easiest is to just roll both of
these in to the sh tree.
--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Paul Mundt March 30, 2009, 11:16 p.m. UTC | #2
On Tue, Mar 31, 2009 at 08:15:13AM +0900, Paul Mundt wrote:
> On Tue, Mar 17, 2009 at 02:50:57PM +0900, Nobuhiro Iwamatsu wrote:
> > Handling of IRQ of the SH7763/SH7764 CPU which sh_eth supported was
> > changed.
> > This revises it for this change.
> > 
> > Signed-off-by: Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>
> 
> On Tue, Mar 17, 2009 at 02:52:23PM +0900, Nobuhiro Iwamatsu wrote:
> > Address of SH_TSU_ADDR and ARSTR of SH7763 was wrong.
> > This revise it.
> > 
> > Signed-off-by: Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>
> 
> The sh changes this depends on for the CPU subtypes are merged upstream
> now, so this can go through either tree. As there is nothing really
> netdev specific about this, I suppose the easiest is to just roll both of
> these in to the sh tree.

Oh, nevermind, I see these were merged already through the net tree..
--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Nobuhiro Iwamatsu March 31, 2009, 12:58 a.m. UTC | #3
Paul Mundt wrote:
> On Tue, Mar 31, 2009 at 08:15:13AM +0900, Paul Mundt wrote:
>> On Tue, Mar 17, 2009 at 02:50:57PM +0900, Nobuhiro Iwamatsu wrote:
>>> Handling of IRQ of the SH7763/SH7764 CPU which sh_eth supported was
>>> changed.
>>> This revises it for this change.
>>>
>>> Signed-off-by: Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>
>> On Tue, Mar 17, 2009 at 02:52:23PM +0900, Nobuhiro Iwamatsu wrote:
>>> Address of SH_TSU_ADDR and ARSTR of SH7763 was wrong.
>>> This revise it.
>>>
>>> Signed-off-by: Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>
>> The sh changes this depends on for the CPU subtypes are merged upstream
>> now, so this can go through either tree. As there is nothing really
>> netdev specific about this, I suppose the easiest is to just roll both of
>> these in to the sh tree.
> 
> Oh, nevermind, I see these were merged already through the net tree..
> 
I should have reported that these were taken in.
I will report it from the next time.

Best regards,
  Nobuhiro
--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch
diff mbox

diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c
index 7f8e514..7b18827 100644
--- a/drivers/net/sh_eth.c
+++ b/drivers/net/sh_eth.c
@@ -687,6 +687,7 @@  static irqreturn_t sh_eth_interrupt(int irq, void *netdev)
 {
 	struct net_device *ndev = netdev;
 	struct sh_eth_private *mdp = netdev_priv(ndev);
+	irqreturn_t ret = IRQ_NONE;
 	u32 ioaddr, boguscnt = RX_RING_SIZE;
 	u32 intr_status = 0;

@@ -696,7 +697,13 @@  static irqreturn_t sh_eth_interrupt(int irq, void *netdev)
 	/* Get interrpt stat */
 	intr_status = ctrl_inl(ioaddr + EESR);
 	/* Clear interrupt */
-	ctrl_outl(intr_status, ioaddr + EESR);
+	if (intr_status & (EESR_FRC | EESR_RMAF | EESR_RRF |
+			EESR_RTLF | EESR_RTSF | EESR_PRE | EESR_CERF |
+			TX_CHECK | EESR_ERR_CHECK)) {
+		ctrl_outl(intr_status, ioaddr + EESR);
+		ret = IRQ_HANDLED;
+	} else
+		goto other_irq;

 	if (intr_status & (EESR_FRC | /* Frame recv*/
 			EESR_RMAF | /* Multi cast address recv*/
@@ -723,9 +730,10 @@  static irqreturn_t sh_eth_interrupt(int irq, void *netdev)
 		       ndev->name, intr_status);
 	}

+other_irq:
 	spin_unlock(&mdp->lock);

-	return IRQ_HANDLED;
+	return ret;
 }

 static void sh_eth_timer(unsigned long data)
@@ -844,7 +852,13 @@  static int sh_eth_open(struct net_device *ndev)
 	int ret = 0;
 	struct sh_eth_private *mdp = netdev_priv(ndev);

-	ret = request_irq(ndev->irq, &sh_eth_interrupt, 0, ndev->name, ndev);
+	ret = request_irq(ndev->irq, &sh_eth_interrupt,
+#if defined(CONFIG_CPU_SUBTYPE_SH7763) || defined(CONFIG_CPU_SUBTYPE_SH7764)
+				IRQF_SHARED,
+#else
+				0,
+#endif
+				ndev->name, ndev);
 	if (ret) {
 		printk(KERN_ERR "Can not assign IRQ number to %s\n", CARDNAME);
 		return ret;