From patchwork Tue Mar 21 19:24:42 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iyappan Subramanian X-Patchwork-Id: 741721 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 3vnjXQ5wm0z9s7M for ; Wed, 22 Mar 2017 06:28:22 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=apm.com header.i=@apm.com header.b="jpNlbQJW"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933883AbdCUT2V (ORCPT ); Tue, 21 Mar 2017 15:28:21 -0400 Received: from mail-pg0-f44.google.com ([74.125.83.44]:34104 "EHLO mail-pg0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933227AbdCUTZW (ORCPT ); Tue, 21 Mar 2017 15:25:22 -0400 Received: by mail-pg0-f44.google.com with SMTP id 21so64810104pgg.1 for ; Tue, 21 Mar 2017 12:23:39 -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=jpNlbQJWBKJfTNDoWoerhfZv8zRzegTWjop/bwnln0KZigaFxBr57Rzk8lWi8tWopI YEnQDNIrXrdqrKiHFvAFBPIYPbCKdvSIuEdcW4wenBhH/t52fNRGTgMxTMgiAxDazOxD 6Vq79V8A6b9DAp9utChnoxWUDyTO4tN7/QIKw= 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=nPeDwbSuhBsKXyC7u4wH3gmifKC73W3fa2/zWYnhtFMZnFag+xB3fdWcwZ1mWtJTOR u340G273st149sGL5KXSkqRpECo7ct7GKE78fYt9mNNvZr9oE2e12CfatKv6g9dK0yql kKYSqaZEM2fnvunVrE1buojHtBMq0/52YvWsrYfXKs6eDN3RBZO/zzeBD9Q8G0OvKgxg c9l2ZW3hC1peBfHLGIdZhfDdGO1ssagmVWjoa9yAqO7xjAwawkhrp7upi1D3Yu9NNkOZ ncTsgSq6aHyiu5ALXTSyrhvFolJyUjNTkosTa1uUUAWMOvDQVrVSmiHqVRqD8Ljd+E0R Qtbg== X-Gm-Message-State: AFeK/H32WRyrtSplqmzM4qMkAG3Cem3D8nxnmFANs+9laDDalpRWZNq8R622wSJL4jrI0Q5a X-Received: by 10.98.63.140 with SMTP id z12mr41731459pfj.129.1490124209287; Tue, 21 Mar 2017 12:23:29 -0700 (PDT) Received: from isubrama-dev.amcc.com ([206.80.4.98]) by smtp.gmail.com with ESMTPSA id u69sm41113642pfg.121.2017.03.21.12.23.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 21 Mar 2017 12:23:28 -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 net-next 3/4] drivers: net: xgene-v2: Fix port reset Date: Tue, 21 Mar 2017 12:24:42 -0700 Message-Id: <1490124283-10371-4-git-send-email-isubramanian@apm.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1490124283-10371-1-git-send-email-isubramanian@apm.com> References: <1490124283-10371-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__ */