From patchwork Wed May 22 07:09:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bin Meng X-Patchwork-Id: 1103216 X-Patchwork-Delegate: joe.hershberger@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="B2qhpmB+"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 4583gY2gFhz9s7h for ; Wed, 22 May 2019 17:10:33 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 1E6FAC21E0D; Wed, 22 May 2019 07:10:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id B6D4AC21DED; Wed, 22 May 2019 07:10:08 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 3A34FC21C2F; Wed, 22 May 2019 07:10:06 +0000 (UTC) Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) by lists.denx.de (Postfix) with ESMTPS id 9A1C8C21BE5 for ; Wed, 22 May 2019 07:10:05 +0000 (UTC) Received: by mail-pf1-f194.google.com with SMTP id n19so843226pfa.1 for ; Wed, 22 May 2019 00:10:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=6qseEKsMmO5qRUtBA26j6MeLzYDyKWvilcTsisivo7A=; b=B2qhpmB+CUdqLA4gGOIfjIaqWM9+oBOLFYVeFRC30aB3W2GM6x7DTN+iikVaL+mIZK 5glBLkWFPk8Liec/njdPEwk1l3BqPknflPItCgsKf9DPtMpEYIuf9Vp0FNeXQlrKgu/s o7qMxPNV8HW/eneN5F35R5qRlyXK/QvNH6BsSjg9/hXnRamiLZzq/bipvATW7I0J1dNV 6m+e9SPcEWlcGvKS60uSPULC6NERCy2I5P5EmFsnBp6WyHww6i6jnN/5vpvAanaxsN9U nIsNI0skj6Iax+DaOKa5qJwixRSf7Ny1kDlNjcrZbDkY3tywsg9nYbmcOX2qdc6BVmHE QcFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=6qseEKsMmO5qRUtBA26j6MeLzYDyKWvilcTsisivo7A=; b=M8+9kbVwrrMkPiZB8gy9Gd8PV9s8EJK3QQURAzz2z5D/ymQo4pQegb+8O/LK8N+MeS gbCgMBK6ChNQjXMPq6UlqrblhirjIahzyrsQuL8pkDOy4AWVXadU9jj3hidSXdPFBpG+ RAZZaIIri74CuhuYXMtfSz9ymYemAxEfPVeovTJDFBnc16n/7rrWGbRp+dpYg51M/Lt7 xh+Zh4TAmZvt8v27D7ZH+FOC1dFP2+9MXA8UQzzZKWfr57yiel3sI7vIB56gTUh0xJQZ AYZ1t4iecFpPEnT24Lm89ylSdOAKloLpB4Z2zs21XzajP1o8Ey/Z2cs28SEIMKZhbgeC cPvw== X-Gm-Message-State: APjAAAV6z+iu1/kvTINKF7zqh/VchCa/8XJgP6ZWiYfg9ARkA9NsqdjT vpnbvPQsbTOhryquv23UQAQ= X-Google-Smtp-Source: APXvYqxWr6XYtLZpjFyvw2MrpUzqR+XBy0lqGo6vgmunQ6xBWR+o6ZibtCgRQ1p++0pmh8xw0TqwMw== X-Received: by 2002:a62:414a:: with SMTP id o71mr94853352pfa.240.1558509004273; Wed, 22 May 2019 00:10:04 -0700 (PDT) Received: from localhost.localdomain (unknown-224-80.windriver.com. [147.11.224.80]) by smtp.gmail.com with ESMTPSA id t25sm40147111pfq.91.2019.05.22.00.10.03 (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 22 May 2019 00:10:03 -0700 (PDT) From: Bin Meng To: Rick Chen , Lukas Auer , Anup Patel , Joe Hershberger , Palmer Dabbelt , U-Boot Mailing List Date: Wed, 22 May 2019 00:09:44 -0700 Message-Id: <1558508987-3239-2-git-send-email-bmeng.cn@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1558508987-3239-1-git-send-email-bmeng.cn@gmail.com> References: <1558508987-3239-1-git-send-email-bmeng.cn@gmail.com> Subject: [U-Boot] [PATCH v2 1/4] clk: sifive: Add clock driver for GEMGXL MGMT X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" This adds a clock driver to support the GEMGXL management IP block found in FU540 SoCs to control GEM TX clock operation mode for 10/100/1000 Mbps. Signed-off-by: Bin Meng Reviewed-by: Lukas Auer Tested-by: Lukas Auer --- Changes in v2: - rename driver name to "sifive-gemgxl-mgmt" drivers/clk/sifive/Kconfig | 7 +++++ drivers/clk/sifive/Makefile | 2 ++ drivers/clk/sifive/gemgxl-mgmt.c | 60 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 drivers/clk/sifive/gemgxl-mgmt.c diff --git a/drivers/clk/sifive/Kconfig b/drivers/clk/sifive/Kconfig index 81fc9f8..644881b 100644 --- a/drivers/clk/sifive/Kconfig +++ b/drivers/clk/sifive/Kconfig @@ -17,3 +17,10 @@ config CLK_SIFIVE_FU540_PRCI Supports the Power Reset Clock interface (PRCI) IP block found in FU540 SoCs. If this kernel is meant to run on a SiFive FU540 SoC, enable this driver. + +config CLK_SIFIVE_GEMGXL_MGMT + bool "GEMGXL management for SiFive FU540 SoCs" + depends on CLK_SIFIVE + help + Supports the GEMGXL management IP block found in FU540 SoCs to + control GEM TX clock operation mode for 10/100/1000 Mbps. diff --git a/drivers/clk/sifive/Makefile b/drivers/clk/sifive/Makefile index 1155e07..f8263e7 100644 --- a/drivers/clk/sifive/Makefile +++ b/drivers/clk/sifive/Makefile @@ -3,3 +3,5 @@ obj-$(CONFIG_CLK_ANALOGBITS_WRPLL_CLN28HPC) += wrpll-cln28hpc.o obj-$(CONFIG_CLK_SIFIVE_FU540_PRCI) += fu540-prci.o + +obj-$(CONFIG_CLK_SIFIVE_GEMGXL_MGMT) += gemgxl-mgmt.o diff --git a/drivers/clk/sifive/gemgxl-mgmt.c b/drivers/clk/sifive/gemgxl-mgmt.c new file mode 100644 index 0000000..eb37416 --- /dev/null +++ b/drivers/clk/sifive/gemgxl-mgmt.c @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2019, Bin Meng + */ + +#include +#include +#include +#include + +struct gemgxl_mgmt_regs { + __u32 tx_clk_sel; +}; + +struct gemgxl_mgmt_platdata { + struct gemgxl_mgmt_regs *regs; +}; + +static int gemgxl_mgmt_ofdata_to_platdata(struct udevice *dev) +{ + struct gemgxl_mgmt_platdata *plat = dev_get_platdata(dev); + + plat->regs = (struct gemgxl_mgmt_regs *)dev_read_addr(dev); + + return 0; +} + +static ulong gemgxl_mgmt_set_rate(struct clk *clk, ulong rate) +{ + struct gemgxl_mgmt_platdata *plat = dev_get_platdata(clk->dev); + + /* + * GEMGXL TX clock operation mode: + * + * 0 = GMII mode. Use 125 MHz gemgxlclk from PRCI in TX logic + * and output clock on GMII output signal GTX_CLK + * 1 = MII mode. Use MII input signal TX_CLK in TX logic + */ + writel(rate != 125000000, &plat->regs->tx_clk_sel); + + return 0; +} + +const struct clk_ops gemgxl_mgmt_ops = { + .set_rate = gemgxl_mgmt_set_rate, +}; + +static const struct udevice_id gemgxl_mgmt_match[] = { + { .compatible = "sifive,cadencegemgxlmgmt0", }, + { /* sentinel */ } +}; + +U_BOOT_DRIVER(sifive_gemgxl_mgmt) = { + .name = "sifive-gemgxl-mgmt", + .id = UCLASS_CLK, + .of_match = gemgxl_mgmt_match, + .ofdata_to_platdata = gemgxl_mgmt_ofdata_to_platdata, + .platdata_auto_alloc_size = sizeof(struct gemgxl_mgmt_platdata), + .ops = &gemgxl_mgmt_ops, +};