From patchwork Tue Mar 17 05:50:57 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nobuhiro Iwamatsu X-Patchwork-Id: 12555 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n2H5p7W8021539 for ; Tue, 17 Mar 2009 05:51:07 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751403AbZCQFvE (ORCPT ); Tue, 17 Mar 2009 01:51:04 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751614AbZCQFvE (ORCPT ); Tue, 17 Mar 2009 01:51:04 -0400 Received: from mail.renesas.com ([202.234.163.13]:48799 "EHLO mail05.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751049AbZCQFvC (ORCPT ); Tue, 17 Mar 2009 01:51:02 -0400 X-AuditID: ac140388-0000000600006b18-7f-49bf3a403dc3 Received: from guardian02.idc.renesas.com ([172.20.8.201]) by mail05.idc.renesas.com (sendmail) with ESMTP id n2H5otYr018081; Tue, 17 Mar 2009 14:50:55 +0900 (JST) Received: (from root@localhost) by guardian02.idc.renesas.com with id n2H5owT9008719; Tue, 17 Mar 2009 14:50:58 +0900 (JST) Received: from mta02.idc.renesas.com (localhost [127.0.0.1]) by mta02.idc.renesas.com with ESMTP id n2H5ovGV019388; Tue, 17 Mar 2009 14:50:57 +0900 (JST) Received: from [172.30.8.158] by ims05.idc.renesas.com (Sendmail) with ESMTPA id <0KGM00IPKYWX3W@ims05.idc.renesas.com>; Tue, 17 Mar 2009 14:50:57 +0900 (JST) Date: Tue, 17 Mar 2009 14:50:57 +0900 From: Nobuhiro Iwamatsu Subject: [PATCH] sh_eth: Change handling of IRQ To: netdev@vger.kernel.org Cc: Linux-sh , Paul Mundt Message-id: <49BF3A41.6040309@renesas.com> MIME-version: 1.0 Content-type: text/plain; charset=ISO-2022-JP Content-transfer-encoding: 7bit User-Agent: Thunderbird 1.5.0.14 (Windows/20071210) X-Brightmail-Tracker: AAAAAA== Sender: linux-sh-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org 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 --- drivers/net/sh_eth.c | 20 +++++++++++++++++--- 1 files changed, 17 insertions(+), 3 deletions(-) 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;