From patchwork Sat Dec 23 23:40:59 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Blumenstingl X-Patchwork-Id: 10131701 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id CDE5160318 for ; Sat, 23 Dec 2017 23:41:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C0B4628FA3 for ; Sat, 23 Dec 2017 23:41:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B556628FA6; Sat, 23 Dec 2017 23:41:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 2935A28FA3 for ; Sat, 23 Dec 2017 23:41:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=zck2iOUhjKmwt8n/wm2Ta3RCrnWseGs6Eh4dzAAsBSo=; b=osCl7MIe0iKBSHrhF6QvbkulP+ B+byj6mYfi812cB/wko2lUCprmP3THrKRjh+2beY0pCfwO52YWj2UaTvxEhHP1t+8B+94odWx7XAf KtQV9x9z7C/7PONOdY6aPkMPD1Ie7uIXKFrHzR3tUzr3UJi6HO93H+5AoSuPTDzpGycgwYf4hF4MK 6rrHwE4b1hBTb6v1+EMzD5aNjill3fkeGg8nP6ucZq4xWnKRBsBHVJ1HB4369iPzvof2gm/WL2fbK X39J+UhAIaJ4Vq1uDVO6qSo361k/p0RsxgczW/dgEu48H3Z+rRAtOHuqY07CYnRS//J4uxlzUWaOM DnSivqyw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.89 #1 (Red Hat Linux)) id 1eStQJ-00067t-0c; Sat, 23 Dec 2017 23:41:47 +0000 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1eStQ8-00062I-Po for linux-amlogic@lists.infradead.org; Sat, 23 Dec 2017 23:41:40 +0000 Received: by mail-wm0-x243.google.com with SMTP id b199so27680198wme.1 for ; Sat, 23 Dec 2017 15:41:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=QNy9kNF32jJLTAQnfoP3wRvZv9LyfaYH3HiKrm4WxUQ=; b=EcPX59QnYNU2dPanQS7ANf+j5baiAvP1ml3T+pqScDBQmTUS0VjNKIV1/jULQzV7u2 HdfpagBo5HNaBgD37djMJeZdCzn6bhHEF4Hl/IHW5BJYrj0Sg/zjJm0lrqsTCI/SvsML OXl40E80iPx8kYOjyD5w7z2Ss9kQFhiZPphIBzVp1woIN7q9xfisprkF0HTlzSoPpgrA FpMcINGOHYVXa4ekggOaGKrDNjlRxTcvEfDwCszCpRCy2vH5f3a3641tnjg80wHDK8xc 6OxV7lScdfXk/d0HdO8lvTtdAm4MDcA1++ZQXjNHQQ9XFzpugjJqdZKkad/H1670/aJd HwnQ== 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=QNy9kNF32jJLTAQnfoP3wRvZv9LyfaYH3HiKrm4WxUQ=; b=LvqKz5XpSAR1ENAURciQ0lkmBoNPvxecYMYMIH23DSETcpHnn0ZrGTe46rRTbKnxZz 1DqDms7evXpg4ZPO70ZEBkhgXNSNcD2ETsJI+ULr5ub9HtoD8G1KrOXpa4HuDlMEIz/i 3CIS6QXNm01YdPK7v7Cri87JxDAeou/ecKAa442eP14tvZRQBYAxfqJgTFmeApGCVfih NsW5gzRBGOF+dYzN917gxZJ4Wj60n5jIpu8RqmMTcDYKYSq+7FSg5Jfn/zwTJ7k7oMPq HAOc1nF2RwgkzacDwFnd8zoXnZlxAHAF3A8bcBOoqmyfxl4cPjXwVB9Z2GQNlSBBzE+J LExg== X-Gm-Message-State: AKGB3mLcAJuF/abMe3XXwSBfy2/+sc0rQ753p4MlGIKZk5sjOsrU5DIY 6BVBOhULhK7mqwQC5tthdXw= X-Google-Smtp-Source: ACJfBouSAHEdmCVGSLM8oApYMyyci94Qf2anitR42IShgC+AOWLbl+pfsY04nnwD8d8NUT+/LVdO9A== X-Received: by 10.28.225.197 with SMTP id y188mr15184520wmg.12.1514072484983; Sat, 23 Dec 2017 15:41:24 -0800 (PST) Received: from blackbox.darklights.net (p200300DCD3DA8504EC6066EA0395CAD7.dip0.t-ipconnect.de. [2003:dc:d3da:8504:ec60:66ea:395:cad7]) by smtp.googlemail.com with ESMTPSA id g16sm31600337wra.38.2017.12.23.15.41.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 23 Dec 2017 15:41:24 -0800 (PST) From: Martin Blumenstingl To: netdev@vger.kernel.org, ingrassia@epigenesys.com Subject: [RFT net-next v2 2/3] net: stmmac: dwmac-meson8b: fix setting the RGMII clock on Meson8b Date: Sun, 24 Dec 2017 00:40:59 +0100 Message-Id: <20171223234100.11814-3-martin.blumenstingl@googlemail.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20171223234100.11814-1-martin.blumenstingl@googlemail.com> References: <20171223234100.11814-1-martin.blumenstingl@googlemail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20171223_154136_951819_ADBECE5A X-CRM114-Status: GOOD ( 13.26 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linus.luessing@c0d3.blue, narmstrong@baylibre.com, Martin Blumenstingl , khilman@baylibre.com, alexandre.torgue@st.com, linux-amlogic@lists.infradead.org, peppe.cavallaro@st.com, jbrunet@baylibre.com MIME-Version: 1.0 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+patchwork-linux-amlogic=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Meson8b only supports MPLL2 as clock input. The rate of the MPLL2 clock set by Odroid-C1's u-boot is close to 500MHz. The exact rate is 500002394Hz, which is calculated in drivers/clk/meson/clk-mpll.c using the following formula: DIV_ROUND_UP_ULL((u64)parent_rate * SDM_DEN, (SDM_DEN * n2) + sdm) Odroid-C1's u-boot configures MPLL2 with the following values: - SDM_DEN = 16384 - SDM = 1638 - N2 = 5 The 250MHz and 25MHz clocks inside dwmac-meson8b driver are derived from the MPLL2 clock. Due to MPLL2 running slightly faster than 500MHz the common clock framework chooses dividers which are too big to generate the 250MHz and 25MHz clocks. Emiliano Ingrassia observed that the divider for the 250MHz clock was set to 0x5 which results in a clock rate of close to 100MHz instead of 250MHz. The divider for the 25MHz clock is set to 0x0 (which means "divide by 5") so the resulting RGMII clock is running at 20MHz (plus a few additional Hz). The RTL8211F PHY on Odroid-C1 however fails to operate with a 20MHz RGMII clock. Round the divider's clock rates to prevent this issue on Meson8b. This means we'll now end up with a clock rate of 25000120Hz (= 25MHz plus 120Hz). This has no effect on the Meson GX SoCs since there fclk_div2 is used as input clock, which has a rate of 1000MHz (and thus is divisible cleanly to 250MHz and 25MHz). Fixes: 566e8251625304 ("net: stmmac: add a glue driver for the Amlogic Meson 8b / GXBB DWMAC") Reported-by: Emiliano Ingrassia Signed-off-by: Martin Blumenstingl Reviewed-by: Jerome Brunet --- drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c index e1d5907e481c..0da551c84fe8 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c @@ -144,7 +144,9 @@ static int meson8b_init_rgmii_clk(struct meson8b_dwmac *dwmac) dwmac->m250_div.shift = PRG_ETH0_CLK_M250_DIV_SHIFT; dwmac->m250_div.width = PRG_ETH0_CLK_M250_DIV_WIDTH; dwmac->m250_div.hw.init = &init; - dwmac->m250_div.flags = CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO; + dwmac->m250_div.flags = CLK_DIVIDER_ONE_BASED | + CLK_DIVIDER_ALLOW_ZERO | + CLK_DIVIDER_ROUND_CLOSEST; dwmac->m250_div_clk = devm_clk_register(dev, &dwmac->m250_div.hw); if (WARN_ON(IS_ERR(dwmac->m250_div_clk))) @@ -164,7 +166,8 @@ static int meson8b_init_rgmii_clk(struct meson8b_dwmac *dwmac) dwmac->m25_div.width = PRG_ETH0_CLK_M25_DIV_WIDTH; dwmac->m25_div.table = clk_25m_div_table; dwmac->m25_div.hw.init = &init; - dwmac->m25_div.flags = CLK_DIVIDER_ALLOW_ZERO; + dwmac->m25_div.flags = CLK_DIVIDER_ALLOW_ZERO | + CLK_DIVIDER_ROUND_CLOSEST; dwmac->m25_div_clk = devm_clk_register(dev, &dwmac->m25_div.hw); if (WARN_ON(IS_ERR(dwmac->m25_div_clk)))