From patchwork Fri Jul 7 10:50:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hal Feng X-Patchwork-Id: 1804865 X-Patchwork-Delegate: uboot@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4QyCNw1jb2z20Nq for ; Fri, 7 Jul 2023 22:28:32 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 377FF865D8; Fri, 7 Jul 2023 14:27:21 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=starfivetech.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by phobos.denx.de (Postfix, from userid 109) id 2AFBB863ED; Fri, 7 Jul 2023 12:50:25 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.2 Received: from ex01.ufhost.com (ex01.ufhost.com [61.152.239.75]) by phobos.denx.de (Postfix) with ESMTP id 25A0F86307 for ; Fri, 7 Jul 2023 12:50:20 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=starfivetech.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=hal.feng@starfivetech.com Received: from EXMBX166.cuchost.com (unknown [175.102.18.54]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "EXMBX166", Issuer "EXMBX166" (not verified)) by ex01.ufhost.com (Postfix) with ESMTP id 2827924E250; Fri, 7 Jul 2023 18:50:13 +0800 (CST) Received: from EXMBX172.cuchost.com (172.16.6.92) by EXMBX166.cuchost.com (172.16.6.76) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Fri, 7 Jul 2023 18:50:13 +0800 Received: from ubuntu.localdomain (113.72.145.114) by EXMBX172.cuchost.com (172.16.6.92) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Fri, 7 Jul 2023 18:50:12 +0800 From: Hal Feng To: Lukasz Majewski , Sean Anderson , "Rick Chen" , Leo , Torsten Duwe , Conor Dooley , Yanhong Wang , Emil Renner Berthing , Xingyu Wu , Hal Feng CC: Subject: [PATCH v1 1/5] clk: starfive: jh7110: Separate the PLL driver Date: Fri, 7 Jul 2023 18:50:07 +0800 Message-ID: <20230707105011.129241-2-hal.feng@starfivetech.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20230707105011.129241-1-hal.feng@starfivetech.com> References: <20230707105011.129241-1-hal.feng@starfivetech.com> MIME-Version: 1.0 X-Originating-IP: [113.72.145.114] X-ClientProxiedBy: EXCAS066.cuchost.com (172.16.6.26) To EXMBX172.cuchost.com (172.16.6.92) X-YovoleRuleAgent: yovoleflag X-Mailman-Approved-At: Fri, 07 Jul 2023 14:27:05 +0200 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean From: Xingyu Wu Drop the PLL part in SYSCRG driver and separate to be a single PLL driver of which the compatible is "starfive,jh7110-pll". Signed-off-by: Xingyu Wu Signed-off-by: Hal Feng Reviewed-by: Leo Yu-Chi Liang --- drivers/clk/starfive/clk-jh7110-pll.c | 86 +++++++++++++++++++++++++-- drivers/clk/starfive/clk-jh7110.c | 25 +------- drivers/clk/starfive/clk.h | 57 ------------------ 3 files changed, 84 insertions(+), 84 deletions(-) delete mode 100644 drivers/clk/starfive/clk.h diff --git a/drivers/clk/starfive/clk-jh7110-pll.c b/drivers/clk/starfive/clk-jh7110-pll.c index 02e6d9000e..48c08bbe95 100644 --- a/drivers/clk/starfive/clk-jh7110-pll.c +++ b/drivers/clk/starfive/clk-jh7110-pll.c @@ -3,6 +3,7 @@ * Copyright (C) 2022-23 StarFive Technology Co., Ltd. * * Author: Yanhong Wang + * Xingyu Wu */ #include @@ -11,13 +12,13 @@ #include #include #include +#include +#include #include #include #include #include -#include "clk.h" - #define UBOOT_DM_CLK_JH7110_PLLX "jh7110_clk_pllx" #define PLL_PD_OFF 1 @@ -30,6 +31,45 @@ #define CLK_DDR_BUS_PLL1_DIV4 2 #define CLK_DDR_BUS_PLL1_DIV8 3 +enum starfive_pll_type { + PLL0 = 0, + PLL1, + PLL2, + PLL_MAX = PLL2 +}; + +struct starfive_pllx_rate { + u64 rate; + u32 prediv; + u32 fbdiv; + u32 frac; +}; + +struct starfive_pllx_offset { + u32 pd; + u32 prediv; + u32 fbdiv; + u32 frac; + u32 postdiv1; + u32 dacpd; + u32 dsmpd; + u32 pd_mask; + u32 prediv_mask; + u32 fbdiv_mask; + u32 frac_mask; + u32 postdiv1_mask; + u32 dacpd_mask; + u32 dsmpd_mask; +}; + +struct starfive_pllx_clk { + enum starfive_pll_type type; + const struct starfive_pllx_offset *offset; + const struct starfive_pllx_rate *rate_table; + int rate_count; + int flags; +}; + struct clk_jh7110_pllx { struct clk clk; void __iomem *base; @@ -271,7 +311,7 @@ static ulong jh7110_pllx_set_rate(struct clk *clk, ulong drate) return jh7110_pllx_recalc_rate(clk); } -static const struct clk_ops clk_jh7110_ops = { +static const struct clk_ops jh7110_clk_pllx_ops = { .set_rate = jh7110_pllx_set_rate, .get_rate = jh7110_pllx_recalc_rate, }; @@ -314,8 +354,46 @@ struct clk *starfive_jh7110_pll(const char *name, const char *parent_name, return clk; } +/* PLLx clock implementation */ U_BOOT_DRIVER(jh7110_clk_pllx) = { .name = UBOOT_DM_CLK_JH7110_PLLX, .id = UCLASS_CLK, - .ops = &clk_jh7110_ops, + .ops = &jh7110_clk_pllx_ops, + .flags = DM_FLAG_PRE_RELOC, +}; + +static int jh7110_pll_clk_probe(struct udevice *dev) +{ + void __iomem *reg = (void __iomem *)dev_read_addr_ptr(dev->parent); + fdt_addr_t sysreg = ofnode_get_addr(ofnode_by_compatible(ofnode_null(), + "starfive,jh7110-syscrg")); + + if (sysreg == FDT_ADDR_T_NONE) + return -EINVAL; + + clk_dm(JH7110_SYSCLK_PLL0_OUT, + starfive_jh7110_pll("pll0_out", "oscillator", reg, + (void __iomem *)sysreg, &starfive_jh7110_pll0)); + clk_dm(JH7110_SYSCLK_PLL1_OUT, + starfive_jh7110_pll("pll1_out", "oscillator", reg, + (void __iomem *)sysreg, &starfive_jh7110_pll1)); + clk_dm(JH7110_SYSCLK_PLL2_OUT, + starfive_jh7110_pll("pll2_out", "oscillator", reg, + (void __iomem *)sysreg, &starfive_jh7110_pll2)); + + return 0; +} + +static const struct udevice_id jh7110_pll_clk_of_match[] = { + { .compatible = "starfive,jh7110-pll", }, + { } +}; + +/* PLL clk device */ +U_BOOT_DRIVER(jh7110_pll_clk) = { + .name = "jh7110_pll_clk", + .id = UCLASS_CLK, + .of_match = jh7110_pll_clk_of_match, + .probe = jh7110_pll_clk_probe, + .ops = &ccf_clk_ops, }; diff --git a/drivers/clk/starfive/clk-jh7110.c b/drivers/clk/starfive/clk-jh7110.c index a74b70906a..d2aea8d7d1 100644 --- a/drivers/clk/starfive/clk-jh7110.c +++ b/drivers/clk/starfive/clk-jh7110.c @@ -3,6 +3,7 @@ * Copyright (C) 2022-23 StarFive Technology Co., Ltd. * * Author: Yanhong Wang + * Xingyu Wu */ #include @@ -16,8 +17,6 @@ #include #include -#include "clk.h" - #define STARFIVE_CLK_ENABLE_SHIFT 31 /* [31] */ #define STARFIVE_CLK_INVERT_SHIFT 30 /* [30] */ #define STARFIVE_CLK_MUX_SHIFT 24 /* [29:24] */ @@ -230,28 +229,8 @@ static struct clk *starfive_clk_gate_divider(void __iomem *reg, static int jh7110_syscrg_init(struct udevice *dev) { struct jh7110_clk_priv *priv = dev_get_priv(dev); - struct ofnode_phandle_args args; - fdt_addr_t addr; struct clk *pclk; - int ret; - - ret = ofnode_parse_phandle_with_args(dev->node_, "starfive,sys-syscon", NULL, 0, 0, &args); - if (ret) - return ret; - - addr = ofnode_get_addr(args.node); - if (addr == FDT_ADDR_T_NONE) - return -EINVAL; - - clk_dm(JH7110_SYSCLK_PLL0_OUT, - starfive_jh7110_pll("pll0_out", "oscillator", (void __iomem *)addr, - priv->reg, &starfive_jh7110_pll0)); - clk_dm(JH7110_SYSCLK_PLL1_OUT, - starfive_jh7110_pll("pll1_out", "oscillator", (void __iomem *)addr, - priv->reg, &starfive_jh7110_pll1)); - clk_dm(JH7110_SYSCLK_PLL2_OUT, - starfive_jh7110_pll("pll2_out", "oscillator", (void __iomem *)addr, - priv->reg, &starfive_jh7110_pll2)); + clk_dm(JH7110_SYSCLK_CPU_ROOT, starfive_clk_mux(priv->reg, "cpu_root", OFFSET(JH7110_SYSCLK_CPU_ROOT), 1, diff --git a/drivers/clk/starfive/clk.h b/drivers/clk/starfive/clk.h deleted file mode 100644 index 4dee12fe89..0000000000 --- a/drivers/clk/starfive/clk.h +++ /dev/null @@ -1,57 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ -/* - * Copyright (C) 2022 Starfive, Inc. - * Author: Yanhong Wang - * - */ - -#ifndef __CLK_STARFIVE_H -#define __CLK_STARFIVE_H - -enum starfive_pll_type { - PLL0 = 0, - PLL1, - PLL2, - PLL_MAX = PLL2 -}; - -struct starfive_pllx_rate { - u64 rate; - u32 prediv; - u32 fbdiv; - u32 frac; -}; - -struct starfive_pllx_offset { - u32 pd; - u32 prediv; - u32 fbdiv; - u32 frac; - u32 postdiv1; - u32 dacpd; - u32 dsmpd; - u32 pd_mask; - u32 prediv_mask; - u32 fbdiv_mask; - u32 frac_mask; - u32 postdiv1_mask; - u32 dacpd_mask; - u32 dsmpd_mask; -}; - -struct starfive_pllx_clk { - enum starfive_pll_type type; - const struct starfive_pllx_offset *offset; - const struct starfive_pllx_rate *rate_table; - int rate_count; - int flags; -}; - -extern struct starfive_pllx_clk starfive_jh7110_pll0; -extern struct starfive_pllx_clk starfive_jh7110_pll1; -extern struct starfive_pllx_clk starfive_jh7110_pll2; - -struct clk *starfive_jh7110_pll(const char *name, const char *parent_name, - void __iomem *base, void __iomem *sysreg, - const struct starfive_pllx_clk *pll_clk); -#endif