From: Iyappan Subramanian <isubramanian@apm.com> 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 <isubramanian@apm.com> Subject: [PATCH net-next 3/4] drivers: net: xgene-v2: Fix port reset Date: Tue, 21 Mar 2017 12:24:42 -0700 [thread overview] Message-ID: <1490124283-10371-4-git-send-email-isubramanian@apm.com> (raw) In-Reply-To: <1490124283-10371-1-git-send-email-isubramanian@apm.com> Fixed port reset sequence by adding ECC init. Signed-off-by: Iyappan Subramanian <isubramanian@apm.com> --- 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__ */ -- 1.9.1
WARNING: multiple messages have this Message-ID (diff)
From: isubramanian@apm.com (Iyappan Subramanian) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH net-next 3/4] drivers: net: xgene-v2: Fix port reset Date: Tue, 21 Mar 2017 12:24:42 -0700 [thread overview] Message-ID: <1490124283-10371-4-git-send-email-isubramanian@apm.com> (raw) In-Reply-To: <1490124283-10371-1-git-send-email-isubramanian@apm.com> Fixed port reset sequence by adding ECC init. Signed-off-by: Iyappan Subramanian <isubramanian@apm.com> --- 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__ */ -- 1.9.1
next prev parent reply other threads:[~2017-03-21 19:25 UTC|newest] Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-03-21 19:24 [PATCH net-next 0/4] drivers: net: xgene-v2: Add MDIO and ethtool support Iyappan Subramanian 2017-03-21 19:24 ` Iyappan Subramanian 2017-03-21 19:24 ` [PATCH net-next 1/4] drivers: net: xgene-v2: Add MDIO support Iyappan Subramanian 2017-03-21 19:24 ` Iyappan Subramanian 2017-03-21 20:35 ` Andrew Lunn 2017-03-21 20:35 ` Andrew Lunn 2017-03-21 23:18 ` Iyappan Subramanian 2017-03-21 23:18 ` Iyappan Subramanian 2017-03-22 0:08 ` Keyur Chudgar 2017-03-22 0:08 ` Keyur Chudgar 2017-03-21 19:24 ` [PATCH net-next 2/4] drivers: net: xgene-v2: Add ethtool support Iyappan Subramanian 2017-03-21 19:24 ` Iyappan Subramanian 2017-03-21 19:24 ` Iyappan Subramanian [this message] 2017-03-21 19:24 ` [PATCH net-next 3/4] drivers: net: xgene-v2: Fix port reset Iyappan Subramanian 2017-03-21 19:24 ` [PATCH net-next 4/4] drivers: net: xgene-v2: misc fixes Iyappan Subramanian 2017-03-21 19:24 ` Iyappan Subramanian
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1490124283-10371-4-git-send-email-isubramanian@apm.com \ --to=isubramanian@apm.com \ --cc=David.Laight@aculab.com \ --cc=andrew@lunn.ch \ --cc=davem@davemloft.net \ --cc=f.fainelli@gmail.com \ --cc=kchudgar@apm.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=netdev@vger.kernel.org \ --cc=patches@apm.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.