From patchwork Tue Apr 18 00:55:33 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 751603 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3w6RXY36nFz9s2x for ; Tue, 18 Apr 2017 10:56:29 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=verge.net.au header.i=@verge.net.au header.b="bDxR6XEK"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755706AbdDRAzr (ORCPT ); Mon, 17 Apr 2017 20:55:47 -0400 Received: from kirsty.vergenet.net ([202.4.237.240]:35450 "EHLO kirsty.vergenet.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753768AbdDRAzq (ORCPT ); Mon, 17 Apr 2017 20:55:46 -0400 Received: from penelope.horms.nl (y168073.dynamic.ppp.asahi-net.or.jp [118.243.168.73]) by kirsty.vergenet.net (Postfix) with ESMTPSA id 6055625B78B; Tue, 18 Apr 2017 10:55:43 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=verge.net.au; s=mail; t=1492476943; bh=hKyJFH9lmnpF2U1TaailLELhstOJpOaYGcuFEEKF/HE=; h=From:To:Cc:Subject:Date:From; b=bDxR6XEKIWu/jmNvqbk+rN0Bl3aiUiVsdTk0Ok8inchtP02M2P1F5lMt1SH5/CINv Errkk2tjlqPwzpghvEtZu7ZHlrR5AkXP8aMg5HZs0jAy3Enozvxwua9QV5v2kxghLL 0lWeorsvpQZCiMf6lGymljBFWHH78YFWJTYfwKb4= Received: by penelope.horms.nl (Postfix, from userid 7100) id 0B4C260769; Tue, 18 Apr 2017 02:55:40 +0200 (CEST) From: Simon Horman To: David Miller , Sergei Shtylyov Cc: Magnus Damm , netdev@vger.kernel.org, linux-renesas-soc@vger.kernel.org Subject: [PATCH net-next] ravb: Fix ravb_ptp_interrupt clear interrupt all status Date: Tue, 18 Apr 2017 09:55:33 +0900 Message-Id: <1492476933-7952-1-git-send-email-horms+renesas@verge.net.au> X-Mailer: git-send-email 2.7.0.rc3.207.g0ac5344 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Tsutomu Izawa This patch fixes ravb_ptp_interrupt clears GIS register of all interrupts status. It corrects to clear PTCF bit or PTMF bit. Also it fixes returned value to IRQ_HANDLED or IRQ_NONE. Signed-off-by: Tsutomu Izawa Signed-off-by: Kazuya Mizuguchi Signed-off-by: Simon Horman --- drivers/net/ethernet/renesas/ravb.h | 4 ++-- drivers/net/ethernet/renesas/ravb_main.c | 12 ++++-------- drivers/net/ethernet/renesas/ravb_ptp.c | 15 ++++++++++++--- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/drivers/net/ethernet/renesas/ravb.h b/drivers/net/ethernet/renesas/ravb.h index 0525bd696d5d..fbfdefa659ce 100644 --- a/drivers/net/ethernet/renesas/ravb.h +++ b/drivers/net/ethernet/renesas/ravb.h @@ -1,6 +1,6 @@ /* Renesas Ethernet AVB device driver * - * Copyright (C) 2014-2015 Renesas Electronics Corporation + * Copyright (C) 2014-2017 Renesas Electronics Corporation * Copyright (C) 2015 Renesas Solutions Corp. * Copyright (C) 2015-2016 Cogent Embedded, Inc. * @@ -1054,7 +1054,7 @@ void ravb_modify(struct net_device *ndev, enum ravb_reg reg, u32 clear, u32 set); int ravb_wait(struct net_device *ndev, enum ravb_reg reg, u32 mask, u32 value); -void ravb_ptp_interrupt(struct net_device *ndev); +irqreturn_t ravb_ptp_interrupt(struct net_device *ndev); void ravb_ptp_init(struct net_device *ndev, struct platform_device *pdev); void ravb_ptp_stop(struct net_device *ndev); diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c index 8cfc4a54f2dc..747686386513 100644 --- a/drivers/net/ethernet/renesas/ravb_main.c +++ b/drivers/net/ethernet/renesas/ravb_main.c @@ -820,10 +820,8 @@ static irqreturn_t ravb_interrupt(int irq, void *dev_id) } /* gPTP interrupt status summary */ - if (iss & ISS_CGIS) { - ravb_ptp_interrupt(ndev); - result = IRQ_HANDLED; - } + if (iss & ISS_CGIS) + result = ravb_ptp_interrupt(ndev); mmiowb(); spin_unlock(&priv->lock); @@ -853,10 +851,8 @@ static irqreturn_t ravb_multi_interrupt(int irq, void *dev_id) } /* gPTP interrupt status summary */ - if (iss & ISS_CGIS) { - ravb_ptp_interrupt(ndev); - result = IRQ_HANDLED; - } + if (iss & ISS_CGIS) + result = ravb_ptp_interrupt(ndev); mmiowb(); spin_unlock(&priv->lock); diff --git a/drivers/net/ethernet/renesas/ravb_ptp.c b/drivers/net/ethernet/renesas/ravb_ptp.c index eede70ec37f8..403cf85631ba 100644 --- a/drivers/net/ethernet/renesas/ravb_ptp.c +++ b/drivers/net/ethernet/renesas/ravb_ptp.c @@ -1,6 +1,6 @@ /* PTP 1588 clock using the Renesas Ethernet AVB * - * Copyright (C) 2013-2015 Renesas Electronics Corporation + * Copyright (C) 2013-2017 Renesas Electronics Corporation * Copyright (C) 2015 Renesas Solutions Corp. * Copyright (C) 2015-2016 Cogent Embedded, Inc. * @@ -296,10 +296,11 @@ static const struct ptp_clock_info ravb_ptp_info = { }; /* Caller must hold the lock */ -void ravb_ptp_interrupt(struct net_device *ndev) +irqreturn_t ravb_ptp_interrupt(struct net_device *ndev) { struct ravb_private *priv = netdev_priv(ndev); u32 gis = ravb_read(ndev, GIS); + irqreturn_t result = IRQ_NONE; gis &= ravb_read(ndev, GIC); if (gis & GIS_PTCF) { @@ -309,6 +310,9 @@ void ravb_ptp_interrupt(struct net_device *ndev) event.index = 0; event.timestamp = ravb_read(ndev, GCPT); ptp_clock_event(priv->ptp.clock, &event); + + result = IRQ_HANDLED; + gis &= ~GIS_PTCF; } if (gis & GIS_PTMF) { struct ravb_ptp_perout *perout = priv->ptp.perout; @@ -317,9 +321,14 @@ void ravb_ptp_interrupt(struct net_device *ndev) perout->target += perout->period; ravb_ptp_update_compare(priv, perout->target); } + + result = IRQ_HANDLED; + gis &= ~GIS_PTMF; } - ravb_write(ndev, ~gis, GIS); + ravb_write(ndev, gis, GIS); + + return result; } void ravb_ptp_init(struct net_device *ndev, struct platform_device *pdev)