From patchwork Wed Mar 22 01:18:04 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iyappan Subramanian X-Patchwork-Id: 741815 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 3vnsHl4SFyz9s7g for ; Wed, 22 Mar 2017 12:17:55 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=apm.com header.i=@apm.com header.b="jifOgf0T"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758379AbdCVBRq (ORCPT ); Tue, 21 Mar 2017 21:17:46 -0400 Received: from mail-pg0-f53.google.com ([74.125.83.53]:36700 "EHLO mail-pg0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751268AbdCVBRo (ORCPT ); Tue, 21 Mar 2017 21:17:44 -0400 Received: by mail-pg0-f53.google.com with SMTP id g2so100889961pge.3 for ; Tue, 21 Mar 2017 18:16:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=apm.com; s=apm; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=YlOz59zBCHQnTKvIlumR7elQJJ3mELGVzkzBK3kDKDE=; b=jifOgf0TPOAdrlQhwqNhFPYK1Bq/EyiDZ9ol+WxUYs97PbBRWBG6epEBQoz+ldLCPo qbsbLmXgwRhQw1X8AVv34OpiNAc+nvykEXxHnd3ZfAPtpEjFVoNwvIMr3CJ2jUpofTGf ZKVIz7dBFv6kbVJPCUW5WjzKBaIVe5dBrFD+c= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=YlOz59zBCHQnTKvIlumR7elQJJ3mELGVzkzBK3kDKDE=; b=dJzOYQA9ZLpi5VZYkcs8VgRGz4WeLaLuQpLLFYdo3xCrpb5TrmJ8nw1ldASYFAP0Fi vbtAeKC0MzwzYrx4vwGo7Tjpwmgyy7SQYRTc8dPGE9GVf2kuhoiKyxHUQLWKPUsFldBs 9VuXDGtPg+M/wTQPN19N1V1wo7QotY+3pQOyQIiW7uSFyW/bo/JbH/y/pzG0LRe50bnd 7HtILw/LaCrxdl365unFrlng6XhqWzZ6RiUN5cstFOtutP2id6anKB0e2fWVXrwoT1IC 0/Q/7P40vysQ3fBs4Wb1q270JoHn+NbhisrMp2wBaHWcnbqjxjsyyNRjrciz3Rhf66hG hyaw== X-Gm-Message-State: AFeK/H0LkFJL8Xuc1DK8KyLvSJsr+JcB9sAoEyer9lFGzMmKgcdOhH2PD4N+jcI8+nyoTk+3 X-Received: by 10.99.102.134 with SMTP id a128mr39978248pgc.215.1490145413285; Tue, 21 Mar 2017 18:16:53 -0700 (PDT) Received: from isubrama-dev.amcc.com ([206.80.4.98]) by smtp.gmail.com with ESMTPSA id k184sm42142703pgc.23.2017.03.21.18.16.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 21 Mar 2017 18:16:52 -0700 (PDT) From: Iyappan Subramanian To: davem@davemloft.net, netdev@vger.kernel.org, andrew@lunn.ch, f.fainelli@gmail.com, David.Laight@aculab.com Cc: linux-arm-kernel@lists.infradead.org, patches@apm.com, kchudgar@apm.com, Iyappan Subramanian Subject: [PATCH v2 net-next 3/4] drivers: net: xgene-v2: Fix port reset Date: Tue, 21 Mar 2017 18:18:04 -0700 Message-Id: <1490145485-32661-4-git-send-email-isubramanian@apm.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1490145485-32661-1-git-send-email-isubramanian@apm.com> References: <1490145485-32661-1-git-send-email-isubramanian@apm.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Fixed port reset sequence by adding ECC init. Signed-off-by: Iyappan Subramanian --- drivers/net/ethernet/apm/xgene-v2/enet.c | 24 ++++++++++++++++++------ drivers/net/ethernet/apm/xgene-v2/enet.h | 2 ++ drivers/net/ethernet/apm/xgene-v2/mac.h | 1 - 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/apm/xgene-v2/enet.c b/drivers/net/ethernet/apm/xgene-v2/enet.c index b49edee..5998da0 100644 --- a/drivers/net/ethernet/apm/xgene-v2/enet.c +++ b/drivers/net/ethernet/apm/xgene-v2/enet.c @@ -38,10 +38,24 @@ u32 xge_rd_csr(struct xge_pdata *pdata, u32 offset) int xge_port_reset(struct net_device *ndev) { struct xge_pdata *pdata = netdev_priv(ndev); + struct device *dev = &pdata->pdev->dev; + u32 data, wait = 10; - xge_wr_csr(pdata, ENET_SRST, 0x3); - xge_wr_csr(pdata, ENET_SRST, 0x2); - xge_wr_csr(pdata, ENET_SRST, 0x0); + xge_wr_csr(pdata, ENET_CLKEN, 0x3); + xge_wr_csr(pdata, ENET_SRST, 0xf); + xge_wr_csr(pdata, ENET_SRST, 0); + xge_wr_csr(pdata, CFG_MEM_RAM_SHUTDOWN, 1); + xge_wr_csr(pdata, CFG_MEM_RAM_SHUTDOWN, 0); + + do { + usleep_range(100, 110); + data = xge_rd_csr(pdata, BLOCK_MEM_RDY); + } while (data != MEM_RDY && wait--); + + if (data != MEM_RDY) { + dev_err(dev, "ECC init failed: %x\n", data); + return -ETIMEDOUT; + } xge_wr_csr(pdata, ENET_SHIM, DEVM_ARAUX_COH | DEVM_AWAUX_COH); @@ -59,13 +73,11 @@ static void xge_traffic_resume(struct net_device *ndev) xge_wr_csr(pdata, RX_DV_GATE_REG, 1); } -int xge_port_init(struct net_device *ndev) +void xge_port_init(struct net_device *ndev) { struct xge_pdata *pdata = netdev_priv(ndev); pdata->phy_speed = SPEED_1000; xge_mac_init(pdata); xge_traffic_resume(ndev); - - return 0; } diff --git a/drivers/net/ethernet/apm/xgene-v2/enet.h b/drivers/net/ethernet/apm/xgene-v2/enet.h index 40371cf..3fd36dc6 100644 --- a/drivers/net/ethernet/apm/xgene-v2/enet.h +++ b/drivers/net/ethernet/apm/xgene-v2/enet.h @@ -28,6 +28,7 @@ #define CFG_MEM_RAM_SHUTDOWN 0xd070 #define BLOCK_MEM_RDY 0xd074 +#define MEM_RDY 0xffffffff #define DEVM_ARAUX_COH BIT(19) #define DEVM_AWAUX_COH BIT(3) @@ -39,5 +40,6 @@ void xge_wr_csr(struct xge_pdata *pdata, u32 offset, u32 val); u32 xge_rd_csr(struct xge_pdata *pdata, u32 offset); int xge_port_reset(struct net_device *ndev); +void xge_port_init(struct net_device *ndev); #endif /* __XGENE_ENET_V2_ENET__H__ */ diff --git a/drivers/net/ethernet/apm/xgene-v2/mac.h b/drivers/net/ethernet/apm/xgene-v2/mac.h index 74397c9..18a9c9d 100644 --- a/drivers/net/ethernet/apm/xgene-v2/mac.h +++ b/drivers/net/ethernet/apm/xgene-v2/mac.h @@ -105,7 +105,6 @@ static inline u32 xgene_get_reg_bits(u32 var, int pos, int len) void xge_mac_enable(struct xge_pdata *pdata); void xge_mac_disable(struct xge_pdata *pdata); void xge_mac_init(struct xge_pdata *pdata); -int xge_port_init(struct net_device *ndev); void xge_mac_set_station_addr(struct xge_pdata *pdata); #endif /* __XGENE_ENET_V2_MAC_H__ */