From patchwork Fri Oct 13 04:16:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joel Stanley X-Patchwork-Id: 825222 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=jms.id.au header.i=@jms.id.au header.b="H2Dh7/wl"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yCvYx09H9z9sNx for ; Fri, 13 Oct 2017 15:17:09 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755342AbdJMEQ7 (ORCPT ); Fri, 13 Oct 2017 00:16:59 -0400 Received: from mail-pf0-f193.google.com ([209.85.192.193]:51205 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753830AbdJMEQ5 (ORCPT ); Fri, 13 Oct 2017 00:16:57 -0400 Received: by mail-pf0-f193.google.com with SMTP id n14so8107789pfh.8 for ; Thu, 12 Oct 2017 21:16:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jms.id.au; s=google; h=from:to:cc:subject:date:message-id; bh=bd0D4CYJE4uDc5hOoiPU2lA++m0w8z3bF1O2GLcG8k0=; b=H2Dh7/wlSoiOPu9w0CDIDQASIKhV8Q5c/47tpQMBJyHTojfdsqJ6u3cZxPEQaHGzvl q/asxTNaIPcWgwIdLKar/b6BPbxvRF19zEYsMGM2t2/WlxV0PcasNi99RjTv7K5jILJp vmUjsoEOynDCO8t2M7cMRjCPkkBS2CK8Er2So= 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; bh=bd0D4CYJE4uDc5hOoiPU2lA++m0w8z3bF1O2GLcG8k0=; b=qzCMWCm+ZZIwdPokBNwb/z8E4CpDdOz0WjZIYzqCA0RikrFIFomTpswyM4s+xNlMtv uua4VLw+LjAmbgR+hF7rMFvrRyO0Jyk5wipWdmH6ueQxWpGTnorHe/AQ0fFhVv0S1jqv YKt1hIIX4zqeefao010/zECbCGcdAZFQFjmH94E+JpN0r5s/kHSW64vKgd7NY475qEwg BgdQJJsA5Jsj1+DmdTW1HqiSHXnnIBTa70MWy/JR/QVGwIoARhhcHvvtQpphAAQKIng2 UHfNLqlLvj7kw8weR9jygsZPtmHkMjGJ8keFOOfmdYQjy5lG1qYlkrmwIUXaQ6rqhYpA QHJw== X-Gm-Message-State: AMCzsaXhmpVVI7/zvnw26IDPeoShXAbvd5G3QvS+R4rzVxJlNjtliuD/ PdVXRSVO66F6X193KXWrMr+q3AN01ds= X-Google-Smtp-Source: AOwi7QAJgoLmYgtDEkr0jfHHsQUc3mC4xU1kescw4d3hulNM6N9jiO9IO9CyRSm9a9ytx4wm5zCnNw== X-Received: by 10.99.112.82 with SMTP id a18mr155344pgn.84.1507868216664; Thu, 12 Oct 2017 21:16:56 -0700 (PDT) Received: from E402SA.smb.com (36-230-69-201.dynamic-ip.hinet.net. [36.230.69.201]) by smtp.gmail.com with ESMTPSA id 125sm161592pff.14.2017.10.12.21.16.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 12 Oct 2017 21:16:55 -0700 (PDT) From: Joel Stanley To: "David S . Miller" , Benjamin Herrenschmidt Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Andrew Jeffery Subject: [PATCH v3] net: ftgmac100: Request clock and set speed Date: Fri, 13 Oct 2017 12:16:38 +0800 Message-Id: <20171013041638.30763-1-joel@jms.id.au> X-Mailer: git-send-email 2.14.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org According to the ASPEED datasheet, gigabit speeds require a clock of 100MHz or higher. Other speeds require 25MHz or higher. This patch configures a 100MHz clock if the system has a direct-attached PHY, or 25MHz if the system is running NC-SI which is limited to 100MHz. There appear to be no other upstream users of the FTGMAC100 driver it is hard to know the clocking requirements of other platforms. Therefore a conservative approach was taken with enabling clocks. If the platform is not ASPEED, both requesting the clock and configuring the speed is skipped. Signed-off-by: Joel Stanley Tested-by: Andrew Jeffery --- Andrew, can you please give this one a spin on hardware? v3: - Fix errors from v2 v2: - only touch the clocks on Aspeed platforms - unconditionally call clk_unprepare_disable drivers/net/ethernet/faraday/ftgmac100.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c index 9ed8e4b81530..78db8e62a83f 100644 --- a/drivers/net/ethernet/faraday/ftgmac100.c +++ b/drivers/net/ethernet/faraday/ftgmac100.c @@ -21,6 +21,7 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#include #include #include #include @@ -59,6 +60,9 @@ /* Min number of tx ring entries before stopping queue */ #define TX_THRESHOLD (MAX_SKB_FRAGS + 1) +#define FTGMAC_100MHZ 100000000 +#define FTGMAC_25MHZ 25000000 + struct ftgmac100 { /* Registers */ struct resource *res; @@ -96,6 +100,7 @@ struct ftgmac100 { struct napi_struct napi; struct work_struct reset_task; struct mii_bus *mii_bus; + struct clk *clk; /* Link management */ int cur_speed; @@ -1734,6 +1739,22 @@ static void ftgmac100_ncsi_handler(struct ncsi_dev *nd) nd->link_up ? "up" : "down"); } +static void ftgmac100_setup_clk(struct ftgmac100 *priv) +{ + priv->clk = devm_clk_get(priv->dev, NULL); + if (IS_ERR(priv->clk)) + return; + + clk_prepare_enable(priv->clk); + + /* Aspeed specifies a 100MHz clock is required for up to + * 1000Mbit link speeds. As NCSI is limited to 100Mbit, 25MHz + * is sufficient + */ + clk_set_rate(priv->clk, priv->use_ncsi ? FTGMAC_25MHZ : + FTGMAC_100MHZ); +} + static int ftgmac100_probe(struct platform_device *pdev) { struct resource *res; @@ -1830,6 +1851,9 @@ static int ftgmac100_probe(struct platform_device *pdev) goto err_setup_mdio; } + if (priv->is_aspeed) + ftgmac100_setup_clk(priv); + /* Default ring sizes */ priv->rx_q_entries = priv->new_rx_q_entries = DEF_RX_QUEUE_ENTRIES; priv->tx_q_entries = priv->new_tx_q_entries = DEF_TX_QUEUE_ENTRIES; @@ -1883,6 +1907,8 @@ static int ftgmac100_remove(struct platform_device *pdev) unregister_netdev(netdev); + clk_disable_unprepare(priv->clk); + /* There's a small chance the reset task will have been re-queued, * during stop, make sure it's gone before we free the structure. */