linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
To: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Cc: Andrew Lunn <andrew@lunn.ch>, Jason Cooper <jason@lakedaemon.net>,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linuxppc-dev@lists.ozlabs.org, David Miller <davem@davemloft.net>,
	Lennert Buytenhek <buytenh@wantstofly.org>
Subject: [PATCH v5 05/13] net: mv643xx_eth: proper initialization for Kirkwood SoCs
Date: Wed, 29 May 2013 21:32:47 +0200	[thread overview]
Message-ID: <1369855975-21489-6-git-send-email-sebastian.hesselbarth@gmail.com> (raw)
In-Reply-To: <1369855975-21489-1-git-send-email-sebastian.hesselbarth@gmail.com>

Ethernet controllers found on Kirkwood SoCs not only suffer from loosing
MAC address register contents on clock gating but also some important
registers are reset to values that would break ethernet. This patch
clears the CLK125_BYPASS_EN bit for DT enabled Kirkwood only by using
of_device_is_compatible() instead of #ifdefs. Non-DT Kirkwood is not
affected as it installs a clock gating workaround because of the MAC
address issue above. Other Orion SoCs do not suffer from register reset,
do not have the bit in question, or do not have the register at all.
Moreover, system controllers on PPC using this driver should also be
protected from clearing that bit.

Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
---
Note: In contrast to the reset value of 0 for CLK125_BYPASS_EN bit as
stated in Kirkwood datasheet, we confirmed that reset value is 1 instead.
Either datasheet is wrong about it, there is some post-boot self-check or
BootROM flips that bit.

Changelog
v4->v5:
- check for device compatible instead of machine compatible
  (Suggested by Jason Gunthorpe)

Cc: David Miller <davem@davemloft.net>
Cc: Lennert Buytenhek <buytenh@wantstofly.org>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: netdev@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linuxppc-dev@lists.ozlabs.org
Cc: linux-kernel@vger.kernel.org
---
 drivers/net/ethernet/marvell/mv643xx_eth.c |   11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/net/ethernet/marvell/mv643xx_eth.c b/drivers/net/ethernet/marvell/mv643xx_eth.c
index fa8c84a..5b375ee 100644
--- a/drivers/net/ethernet/marvell/mv643xx_eth.c
+++ b/drivers/net/ethernet/marvell/mv643xx_eth.c
@@ -116,6 +116,8 @@ static char mv643xx_eth_driver_version[] = "1.4";
 #define  LINK_UP			0x00000002
 #define TXQ_COMMAND			0x0048
 #define TXQ_FIX_PRIO_CONF		0x004c
+#define PORT_SERIAL_CONTROL1		0x004c
+#define  CLK125_BYPASS_EN		0x00000010
 #define TX_BW_RATE			0x0050
 #define TX_BW_MTU			0x0058
 #define TX_BW_BURST			0x005c
@@ -2701,6 +2703,15 @@ static int mv643xx_eth_probe(struct platform_device *pdev)
 
 	mp->dev = dev;
 
+	/* Kirkwood resets some registers on gated clocks. Especially
+	 * CLK125_BYPASS_EN must be cleared but is not available on
+	 * all other SoCs/System Controllers using this driver.
+	 */
+	if (of_device_is_compatible(pdev->dev.of_node,
+				    "marvell,kirkwood-eth-port"))
+		wrlp(mp, PORT_SERIAL_CONTROL1,
+		     rdlp(mp, PORT_SERIAL_CONTROL1) & ~CLK125_BYPASS_EN);
+
 	/*
 	 * Start with a default rate, and if there is a clock, allow
 	 * it to override the default.
-- 
1.7.10.4

  parent reply	other threads:[~2013-05-29 19:33 UTC|newest]

Thread overview: 93+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1367854420-8006-1-git-send-email-sebastian.hesselbarth@gmail.com>
2013-05-21 16:41 ` [PATCH v4 00/12] net: mv643xx_eth DT support and fixes Sebastian Hesselbarth
2013-05-21 16:41   ` [PATCH v4 01/12] net: mv643xx_eth: use phy_disconnect instead of phy_detach Sebastian Hesselbarth
2013-05-21 16:41   ` [PATCH v4 02/12] net: mv643xx_eth: use managed devm_ioremap for port registers Sebastian Hesselbarth
2013-05-21 16:41   ` [PATCH v4 03/12] net: mv643xx_eth: add phy_node to platform_data struct Sebastian Hesselbarth
2013-05-21 16:41   ` [PATCH v4 04/12] net: mv643xx_eth: use of_phy_connect if phy_node present Sebastian Hesselbarth
2013-05-21 16:41   ` [PATCH v4 05/12] net: mv643xx_eth: add DT parsing support Sebastian Hesselbarth
2013-05-21 16:41   ` [PATCH v4 06/12] ARM: dove: add gigabit ethernet and mvmdio device tree nodes Sebastian Hesselbarth
2013-05-21 17:48     ` Andrew Lunn
2013-05-22  9:43       ` Sebastian Hesselbarth
2013-05-22 10:04         ` tiejun.chen
2013-05-22 10:13           ` Sebastian Hesselbarth
2013-05-22 13:10             ` Jason Cooper
2013-05-22 16:59               ` Jason Gunthorpe
2013-05-22 17:01                 ` Jason Cooper
2013-05-22 17:32                 ` Sebastian Hesselbarth
2013-05-22 17:35                   ` Jason Cooper
2013-05-22 17:42                     ` Sebastian Hesselbarth
2013-05-22 17:48                       ` Jason Cooper
2013-05-22 18:44                         ` Sebastian Hesselbarth
2013-05-22 18:49                           ` Jason Cooper
2013-05-22 18:55                             ` Sebastian Hesselbarth
2013-05-22 18:58                               ` Jason Cooper
2013-05-22 19:52                         ` Sebastian Hesselbarth
2013-05-22 18:24                   ` Jason Gunthorpe
2013-05-22 18:51                     ` Sebastian Hesselbarth
2013-05-21 16:41   ` [PATCH v4 07/12] ARM: kirkwood: " Sebastian Hesselbarth
2013-05-21 16:41   ` [PATCH v4 08/12] ARM: orion5x: " Sebastian Hesselbarth
2013-05-21 16:41   ` [PATCH v4 09/12] ARM: dove: remove legacy mv643xx_eth setup Sebastian Hesselbarth
2013-05-21 16:41   ` [PATCH v4 10/12] ARM: kirkwood: remove legacy clk alias for mv643xx_eth Sebastian Hesselbarth
2013-05-21 16:41   ` [PATCH v4 11/12] ARM: kirkwood: remove redundant DT board files Sebastian Hesselbarth
2013-05-22 20:36     ` Simon Baatz
2013-05-22 20:55       ` Sebastian Hesselbarth
2013-05-22 21:02         ` Jason Cooper
2013-05-22 21:17           ` Sebastian Hesselbarth
2013-05-21 16:41   ` [PATCH v4 12/12] ARM: orion5x: remove legacy mv643xx_eth board setup Sebastian Hesselbarth
2013-05-22 16:16   ` [PATCH v4 00/12] net: mv643xx_eth DT support and fixes Andrew Lunn
2013-05-22 20:04   ` [PATCH 1/2] ARM: kirkwood: proper retain MAC address workaround on DT ethernet Sebastian Hesselbarth
2013-05-22 20:04     ` [PATCH 2/2] net: mv643xx_eth: proper initialization for Kirkwood SoCs Sebastian Hesselbarth
2013-05-22 20:16       ` Jason Gunthorpe
2013-05-22 21:02         ` Sebastian Hesselbarth
2013-05-23 16:01         ` Jason Cooper
2013-05-23 17:11           ` Jason Gunthorpe
2013-05-23 17:23             ` Jason Cooper
2013-05-23 17:53               ` Jason Gunthorpe
2013-05-23 18:40                 ` Jason Cooper
2013-05-23 19:01                   ` Jason Gunthorpe
2013-05-24 16:46                     ` Jason Cooper
2013-05-24 16:53                       ` Andrew Lunn
2013-05-24 17:03                         ` Jason Cooper
2013-05-24 17:33                       ` Jason Gunthorpe
2013-05-28 18:02                         ` Jason Cooper
2013-05-23 22:40                   ` Sebastian Hesselbarth
2013-05-24 11:03                     ` Linus Walleij
2013-05-24 17:01                       ` Jason Cooper
2013-05-24 17:13                         ` Russell King - ARM Linux
2013-05-24 17:25                           ` Sebastian Hesselbarth
2013-05-24 16:53                     ` Jason Cooper
2013-05-26  4:04     ` [PATCH 1/2] ARM: kirkwood: proper retain MAC address workaround on DT ethernet David Miller
2013-05-26 20:06       ` Sebastian Hesselbarth
2013-05-27  9:23         ` David Miller
2013-05-27  9:39           ` Benjamin Herrenschmidt
2013-05-27 10:24             ` Sebastian Hesselbarth
2013-05-27 11:50               ` Benjamin Herrenschmidt
2013-05-27 12:47                 ` Arnd Bergmann
2013-05-27 21:50                   ` Benjamin Herrenschmidt
2013-05-27 22:12                     ` Sebastian Hesselbarth
2013-05-27 22:17                     ` David Miller
2013-05-27 20:18                 ` David Miller
2013-05-27 21:48                   ` Benjamin Herrenschmidt
2013-05-27  9:38         ` Benjamin Herrenschmidt
2013-05-29 19:32   ` [PATCH v5 00/13] net: mv643xx_eth DT support and fixes Sebastian Hesselbarth
2013-05-29 19:32     ` [PATCH v5 01/13] net: mv643xx_eth: use phy_disconnect instead of phy_detach Sebastian Hesselbarth
2013-05-29 20:00       ` Jason Cooper
2013-05-29 19:32     ` [PATCH v5 02/13] net: mv643xx_eth: use managed devm_ioremap for port registers Sebastian Hesselbarth
2013-05-29 19:32     ` [PATCH v5 03/13] net: mv643xx_eth: add phy_node to platform_data struct Sebastian Hesselbarth
2013-05-29 19:32     ` [PATCH v5 04/13] net: mv643xx_eth: use of_phy_connect if phy_node present Sebastian Hesselbarth
2013-05-29 19:32     ` Sebastian Hesselbarth [this message]
2013-05-29 19:32     ` [PATCH v5 06/13] net: mv643xx_eth: add DT parsing support Sebastian Hesselbarth
2013-05-29 19:32     ` [PATCH v5 07/13] ARM: dove: add gigabit ethernet and mvmdio device tree nodes Sebastian Hesselbarth
2013-05-29 19:32     ` [PATCH v5 08/13] ARM: kirkwood: " Sebastian Hesselbarth
2013-05-29 19:32     ` [PATCH v5 09/13] ARM: orion5x: " Sebastian Hesselbarth
2013-05-29 19:32     ` [PATCH v5 10/13] ARM: dove: remove legacy mv643xx_eth setup Sebastian Hesselbarth
2013-05-29 19:32     ` [PATCH v5 11/13] ARM: kirkwood: remove legacy clk alias for mv643xx_eth Sebastian Hesselbarth
2013-05-29 19:32     ` [PATCH v5 12/13] ARM: kirkwood: remove redundant DT board files Sebastian Hesselbarth
2013-05-30  9:06       ` Arnaud Ebalard
2013-05-30  9:08         ` Sebastian Hesselbarth
2013-05-30 19:37         ` Jason Cooper
2013-05-30 22:28           ` Arnaud Ebalard
2013-05-31 11:54             ` Jason Cooper
2013-05-29 19:32     ` [PATCH v5 13/13] ARM: orion5x: remove legacy mv643xx_eth board setup Sebastian Hesselbarth
2013-05-31  0:55     ` [PATCH v5 00/13] net: mv643xx_eth DT support and fixes David Miller
2013-05-31  6:28       ` Sebastian Hesselbarth
2013-05-31  9:32         ` David Miller

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=1369855975-21489-6-git-send-email-sebastian.hesselbarth@gmail.com \
    --to=sebastian.hesselbarth@gmail.com \
    --cc=andrew@lunn.ch \
    --cc=buytenh@wantstofly.org \
    --cc=davem@davemloft.net \
    --cc=jason@lakedaemon.net \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=netdev@vger.kernel.org \
    /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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).