Received: by 2002:a05:6358:11c7:b0:104:8066:f915 with SMTP id i7csp1244671rwl; Fri, 7 Apr 2023 12:17:00 -0700 (PDT) X-Google-Smtp-Source: AKy350ad0A1QOiM8hJxdJ/tdsvdHahHGxW7WWC5VDKQ3GD3c04CJcUIdEH6EMhO90Xrn9slfB39E X-Received: by 2002:a17:903:18a:b0:1a1:d54b:71df with SMTP id z10-20020a170903018a00b001a1d54b71dfmr3167305plg.0.1680895020093; Fri, 07 Apr 2023 12:17:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1680895020; cv=none; d=google.com; s=arc-20160816; b=hzcsyLCtvWbRTi4X6WIevwcNj93gxbEcevjgzL2pjDvBxxbFaOWghXHclF5IcI/GHe UpO100eFY7JK187n2ehQXAORlV7erX7igghbUf1LaThvbhs5eimvN4vu9L4Op/QXaFn1 Bt8wDHt2a63I+91/SJ7eJsxCaSo+ccOX550TOUzvPHS8pda22udyTE48YW5RzEdU26WV a3LawvRtyspY+eBrrz7s2PX9YkWSFQtTB1hyIud0RW3vFNyS3z4754wYo1OTpq6AV06C 4gcN6HNYj9I00V8A5bxFR6ZDr9y/EKtpzR5cWXx5S2AvNhOr58F5Pk70AGZEphar4jXz YstA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=w6xTUwQ3JL7AvAeCA6lcpSlPVx3TyBza2dRcNivqo/k=; b=t2w0WCuekPx5ciriIPlQV1GyRM0rjKIwyrJ4PdKpInU2bMfARhDxY4tHeM3NNB4RGy n2MISeSuzgFKjyWz99qKAS3gzB6MEjdD3FarqCetp7XLZRazfgS47VPtZVM+IudFKvFh w7Sjz0oPsyPxZYu2qgcOiCqQXamBQW/gbcP574qr9G+Dk1udGVGHOgB0TX/Fec0pUOvR eRH28mGDLZ2ISJa/s1NTE+sqWXzx/B3ST4jTg30ZQjE5lR5JDap+/Mkr59DCc9HQMMq5 jtmNCf+YpW7/UDitKpyY1w9JFJK2PQghMrZqciK9bxHSTcGUJXDQ0gq73kAnNQCTJEg5 mmtQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=V09WM05K; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v20-20020a170902f0d400b0019e9c8e51f4si4253499pla.165.2023.04.07.12.16.48; Fri, 07 Apr 2023 12:17:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=V09WM05K; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229741AbjDGTMB (ORCPT + 99 others); Fri, 7 Apr 2023 15:12:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41298 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229524AbjDGTMA (ORCPT ); Fri, 7 Apr 2023 15:12:00 -0400 Received: from smtp-relay-internal-0.canonical.com (smtp-relay-internal-0.canonical.com [185.125.188.122]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 724B35B83 for ; Fri, 7 Apr 2023 12:11:58 -0700 (PDT) Received: from mail-qv1-f72.google.com (mail-qv1-f72.google.com [209.85.219.72]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-0.canonical.com (Postfix) with ESMTPS id 365923F238 for ; Fri, 7 Apr 2023 19:11:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1680894717; bh=w6xTUwQ3JL7AvAeCA6lcpSlPVx3TyBza2dRcNivqo/k=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=V09WM05KMadk5jPYZRF8Zp3N1T4Ba4NhnBZSzIm1ZNZVu4PeeAffPVn48HqX4ZYdb btf0y5q/Fpenyx+shrUTyS3/zR2tlYUtr6mI1s7MBnwxo4MTjWJh0XNh1j/CCaLSP3 BF3U91VCi2XDhR2Ap397l+sZh/XW9YcWrZfR7rwDZWg5az3/rEWR4nOIxHsUTswipX 5A58z/ByRXrZ74LkNQfSdW9zy+YjVEj0CyNuR8H7IZdrg/zD/FifAy/LI6vgPL0JOA x2M1jwoOA8fCSk1JYuIVjMM7b0ngE3nbqVf/uaM+LC2Oi5PBzn3cfSPoUfPJyOpxVv Got0FOntRTQIA== Received: by mail-qv1-f72.google.com with SMTP id r4-20020ad44044000000b005ad0ce58902so19623392qvp.5 for ; Fri, 07 Apr 2023 12:11:57 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680894716; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=w6xTUwQ3JL7AvAeCA6lcpSlPVx3TyBza2dRcNivqo/k=; b=WgyaC/OnpusfrPiRGDfxP7EiqnfX8WzhH9mtZLMBNiURs1wfhEYFZjrY7aDRkfqn+e 0NWhcQl768uls3yZ7PW0VDp9k/1xtaQvqkmEc23jKCT52uG6zDfUZp9OHEb6Q8fsfEu2 6Xv7IYgxNQG+PVAH6wwGzSQwhpvJYCo9sCNFQxUCIvWXVbTxC+YiCod7teAbI0tOvLeK a6XEmO0Ky6xD94jUZQOOtTqFhte79mF3/xyIiGVBr8E3XftP2BDtvMXb+8tSlg3/EYF/ xjaZMc7UeVq+Q7zG3UaVssFomjIvE+aewvOlz58K/cZZVEW8eX1r8poK7lPjvQpVa1uq gABw== X-Gm-Message-State: AAQBX9ct4uS9V59nC3g7WJK+xc4PaVTYE9cMM2ZsBnr/Mb3pMcnnTUnz k02kova+exNUAVRttDGP4iLmGafWH9/meC0Vad2BdtPh9JsJZwHmgzUsm4WiXYSS9/a8H4yqSpz 2enSCF/W/kd4U4D/6VF/nwAzZ5H3w24X8ch9oDQ5flq4bYLyd3jJO3pTL4A== X-Received: by 2002:a05:620a:c4a:b0:74a:505:b63 with SMTP id u10-20020a05620a0c4a00b0074a05050b63mr836691qki.13.1680894715952; Fri, 07 Apr 2023 12:11:55 -0700 (PDT) X-Received: by 2002:a05:620a:c4a:b0:74a:505:b63 with SMTP id u10-20020a05620a0c4a00b0074a05050b63mr836684qki.13.1680894715666; Fri, 07 Apr 2023 12:11:55 -0700 (PDT) MIME-Version: 1.0 References: <20230407110356.8449-1-samin.guo@starfivetech.com> <20230407110356.8449-6-samin.guo@starfivetech.com> In-Reply-To: <20230407110356.8449-6-samin.guo@starfivetech.com> From: Emil Renner Berthing Date: Fri, 7 Apr 2023 21:11:39 +0200 Message-ID: Subject: Re: [-net-next v11 5/6] net: stmmac: Add glue layer for StarFive JH7110 SoC To: Samin Guo Cc: linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, netdev@vger.kernel.org, "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Emil Renner Berthing , Pedro Moreira , Richard Cochran , Conor Dooley , Paul Walmsley , Palmer Dabbelt , Albert Ou , Andrew Lunn , Heiner Kallweit , Peter Geis , Yanhong Wang , Tommaso Merciai Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-2.5 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 7 Apr 2023 at 13:05, Samin Guo wrote: > > This adds StarFive dwmac driver support on the StarFive JH7110 SoC. > > Tested-by: Tommaso Merciai > Co-developed-by: Emil Renner Berthing > Signed-off-by: Emil Renner Berthing > Signed-off-by: Samin Guo > --- > MAINTAINERS | 1 + > drivers/net/ethernet/stmicro/stmmac/Kconfig | 12 ++ > drivers/net/ethernet/stmicro/stmmac/Makefile | 1 + > .../ethernet/stmicro/stmmac/dwmac-starfive.c | 123 ++++++++++++++++++ > 4 files changed, 137 insertions(+) > create mode 100644 drivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c > > diff --git a/MAINTAINERS b/MAINTAINERS > index 6b6b67468b8f..46b366456cee 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -19910,6 +19910,7 @@ M: Emil Renner Berthing > M: Samin Guo > S: Maintained > F: Documentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml > +F: drivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c > > STARFIVE JH7100 CLOCK DRIVERS > M: Emil Renner Berthing > diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig > index f77511fe4e87..5f5a997f21f3 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/Kconfig > +++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig > @@ -165,6 +165,18 @@ config DWMAC_SOCFPGA > for the stmmac device driver. This driver is used for > arria5 and cyclone5 FPGA SoCs. > > +config DWMAC_STARFIVE > + tristate "StarFive dwmac support" > + depends on OF && (ARCH_STARFIVE || COMPILE_TEST) > + select MFD_SYSCON > + default m if ARCH_STARFIVE > + help > + Support for ethernet controllers on StarFive RISC-V SoCs > + > + This selects the StarFive platform specific glue layer support for > + the stmmac device driver. This driver is used for StarFive JH7110 > + ethernet controller. > + > config DWMAC_STI > tristate "STi GMAC support" > default ARCH_STI > diff --git a/drivers/net/ethernet/stmicro/stmmac/Makefile b/drivers/net/ethernet/stmicro/stmmac/Makefile > index 057e4bab5c08..8738fdbb4b2d 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/Makefile > +++ b/drivers/net/ethernet/stmicro/stmmac/Makefile > @@ -23,6 +23,7 @@ obj-$(CONFIG_DWMAC_OXNAS) += dwmac-oxnas.o > obj-$(CONFIG_DWMAC_QCOM_ETHQOS) += dwmac-qcom-ethqos.o > obj-$(CONFIG_DWMAC_ROCKCHIP) += dwmac-rk.o > obj-$(CONFIG_DWMAC_SOCFPGA) += dwmac-altr-socfpga.o > +obj-$(CONFIG_DWMAC_STARFIVE) += dwmac-starfive.o > obj-$(CONFIG_DWMAC_STI) += dwmac-sti.o > obj-$(CONFIG_DWMAC_STM32) += dwmac-stm32.o > obj-$(CONFIG_DWMAC_SUNXI) += dwmac-sunxi.o > diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c > new file mode 100644 > index 000000000000..4963d4008485 > --- /dev/null > +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c > @@ -0,0 +1,123 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * StarFive DWMAC platform driver > + * > + * Copyright (C) 2021 Emil Renner Berthing > + * Copyright (C) 2022 StarFive Technology Co., Ltd. > + * > + */ > + > +#include > +#include > +#include > + > +#include "stmmac_platform.h" > + > +struct starfive_dwmac { > + struct device *dev; > + struct clk *clk_tx; > +}; > + > +static void starfive_dwmac_fix_mac_speed(void *priv, unsigned int speed) > +{ > + struct starfive_dwmac *dwmac = priv; > + unsigned long rate; > + int err; > + > + rate = clk_get_rate(dwmac->clk_tx); Hi Samin, I'm not sure why you added this line in this revision. If it's just to not call clk_set_rate on the uninitialized rate, I'd much rather you just returned early and don't call clk_set_rate at all in case of errors. > + > + switch (speed) { > + case SPEED_1000: > + rate = 125000000; > + break; > + case SPEED_100: > + rate = 25000000; > + break; > + case SPEED_10: > + rate = 2500000; > + break; > + default: > + dev_err(dwmac->dev, "invalid speed %u\n", speed); > + break; That is skip the clk_get_rate above and just change this break to a return. > + } > + > + err = clk_set_rate(dwmac->clk_tx, rate); > + if (err) > + dev_err(dwmac->dev, "failed to set tx rate %lu\n", rate); > +} > + > +static int starfive_dwmac_probe(struct platform_device *pdev) > +{ > + struct plat_stmmacenet_data *plat_dat; > + struct stmmac_resources stmmac_res; > + struct starfive_dwmac *dwmac; > + struct clk *clk_gtx; > + int err; > + > + err = stmmac_get_platform_resources(pdev, &stmmac_res); > + if (err) > + return dev_err_probe(&pdev->dev, err, > + "failed to get resources\n"); > + > + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac); > + if (IS_ERR(plat_dat)) > + return dev_err_probe(&pdev->dev, PTR_ERR(plat_dat), > + "dt configuration failed\n"); > + > + dwmac = devm_kzalloc(&pdev->dev, sizeof(*dwmac), GFP_KERNEL); > + if (!dwmac) > + return -ENOMEM; > + > + dwmac->clk_tx = devm_clk_get_enabled(&pdev->dev, "tx"); > + if (IS_ERR(dwmac->clk_tx)) > + return dev_err_probe(&pdev->dev, PTR_ERR(dwmac->clk_tx), > + "error getting tx clock\n"); > + > + clk_gtx = devm_clk_get_enabled(&pdev->dev, "gtx"); > + if (IS_ERR(clk_gtx)) > + return dev_err_probe(&pdev->dev, PTR_ERR(clk_gtx), > + "error getting gtx clock\n"); > + > + /* Generally, the rgmii_tx clock is provided by the internal clock, > + * which needs to match the corresponding clock frequency according > + * to different speeds. If the rgmii_tx clock is provided by the > + * external rgmii_rxin, there is no need to configure the clock > + * internally, because rgmii_rxin will be adaptively adjusted. > + */ > + if (!device_property_read_bool(&pdev->dev, "starfive,tx-use-rgmii-clk")) > + plat_dat->fix_mac_speed = starfive_dwmac_fix_mac_speed; > + > + dwmac->dev = &pdev->dev; > + plat_dat->bsp_priv = dwmac; > + plat_dat->dma_cfg->dche = true; > + > + err = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res); > + if (err) { > + stmmac_remove_config_dt(pdev, plat_dat); > + return err; > + } > + > + return 0; > +} > + > +static const struct of_device_id starfive_dwmac_match[] = { > + { .compatible = "starfive,jh7110-dwmac" }, > + { /* sentinel */ } > +}; > +MODULE_DEVICE_TABLE(of, starfive_dwmac_match); > + > +static struct platform_driver starfive_dwmac_driver = { > + .probe = starfive_dwmac_probe, > + .remove = stmmac_pltfr_remove, > + .driver = { > + .name = "starfive-dwmac", > + .pm = &stmmac_pltfr_pm_ops, > + .of_match_table = starfive_dwmac_match, > + }, > +}; > +module_platform_driver(starfive_dwmac_driver); > + > +MODULE_LICENSE("GPL"); > +MODULE_DESCRIPTION("StarFive DWMAC platform driver"); > +MODULE_AUTHOR("Emil Renner Berthing "); > +MODULE_AUTHOR("Samin Guo "); > -- > 2.17.1 > > > _______________________________________________ > linux-riscv mailing list > linux-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-riscv