From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756350AbcAOIZg (ORCPT ); Fri, 15 Jan 2016 03:25:36 -0500 Received: from eusmtp01.atmel.com ([212.144.249.242]:46415 "EHLO eusmtp01.atmel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756286AbcAOIZf (ORCPT ); Fri, 15 Jan 2016 03:25:35 -0500 Subject: Re: [PATCH] net: macb: clear interrupts when disabling them To: Nathan Sullivan References: <1452799647-1426-1-git-send-email-nathan.sullivan@ni.com> CC: , From: Nicolas Ferre Organization: atmel Message-ID: <5698ACF9.7020601@atmel.com> Date: Fri, 15 Jan 2016 09:25:29 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: <1452799647-1426-1-git-send-email-nathan.sullivan@ni.com> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 8bit X-Originating-IP: [10.161.30.18] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Le 14/01/2016 20:27, Nathan Sullivan a écrit : > Disabling interrupts with the IDR register does not stop the macb hardware > from asserting its interrupt line if there are interrupts pending. Always > clear the interrupts using ISR, and be sure to write it on hardware that > is not read-to-clear, like Zynq. Not doing so will cause interrupts when > the driver doesn't expect them. > > Signed-off-by: Nathan Sullivan It seems okay: Acked-by: Nicolas Ferre > --- > drivers/net/ethernet/cadence/macb.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c > index c563475..9d9984a 100644 > --- a/drivers/net/ethernet/cadence/macb.c > +++ b/drivers/net/ethernet/cadence/macb.c > @@ -1040,6 +1040,8 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id) > /* close possible race with dev_close */ > if (unlikely(!netif_running(dev))) { > queue_writel(queue, IDR, -1); > + if (bp->caps & MACB_CAPS_ISR_CLEAR_ON_WRITE) > + queue_writel(queue, ISR, -1); > break; > } > > @@ -1561,6 +1563,8 @@ static void macb_reset_hw(struct macb *bp) > for (q = 0, queue = bp->queues; q < bp->num_queues; ++q, ++queue) { > queue_writel(queue, IDR, -1); > queue_readl(queue, ISR); > + if (bp->caps & MACB_CAPS_ISR_CLEAR_ON_WRITE) > + queue_writel(queue, ISR, -1); > } > } > > -- Nicolas Ferre