Hi Heiko,

On 2024-11-21 15:27, Heiko Stuebner wrote:
> From: Elaine Zhang <zhangq...@rock-chips.com>
> 
> Add clock driver support for Rockchip RK3576 SoC.
> 
> Signed-off-by: Elaine Zhang <zhangq...@rock-chips.com>
> [adapted to mainline u-boot]
> Signed-off-by: Heiko Stuebner <he...@sntech.de>
> ---
>  .../include/asm/arch-rockchip/cru_rk3576.h    |  486 ++++
>  drivers/clk/rockchip/Makefile                 |    1 +
>  drivers/clk/rockchip/clk_rk3576.c             | 2517 +++++++++++++++++
>  3 files changed, 3004 insertions(+)
>  create mode 100644 arch/arm/include/asm/arch-rockchip/cru_rk3576.h
>  create mode 100644 drivers/clk/rockchip/clk_rk3576.c
> 
> diff --git a/arch/arm/include/asm/arch-rockchip/cru_rk3576.h 
> b/arch/arm/include/asm/arch-rockchip/cru_rk3576.h
> new file mode 100644
> index 00000000000..893d92ff5f7
> --- /dev/null
> +++ b/arch/arm/include/asm/arch-rockchip/cru_rk3576.h
> @@ -0,0 +1,486 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +/*
> + * Copyright (c) 2020 Rockchip Electronics Co. Ltd.
> + * Author: Elaine Zhang <zhangq...@rock-chips.com>
> + */
> +
> +#ifndef _ASM_ARCH_CRU_RK3576_H
> +#define _ASM_ARCH_CRU_RK3576_H
> +
> +#define MHz          1000000
> +#define KHz          1000
> +#define OSC_HZ               (24 * MHz)
> +
> +#define CPU_PVTPLL_HZ        (1008 * MHz)
> +#define LPLL_HZ              (816 * MHz)
> +#define GPLL_HZ              (1188 * MHz)
> +#define CPLL_HZ              (1000 * MHz)
> +#define PPLL_HZ              (1100 * MHz)
> +#define GMAC0_PTP_REFCLK_IN  (24 * MHz)
> +#define GMAC1_PTP_REFCLK_IN  (24 * MHz)
> +
> +/* RK3576 pll id */
> +enum rk3576_pll_id {
> +     BPLL,
> +     LPLL,
> +     DPLL,
> +     CPLL,
> +     GPLL,
> +     VPLL,
> +     AUPLL,
> +     SPLL,
> +     PPLL,
> +     PLL_COUNT,
> +};
> +
> +struct rk3576_clk_info {
> +     unsigned long id;
> +     char *name;
> +     bool is_cru;
> +};

rk3576_clk_info is not used for anything and can be dropped.

> +
> +struct rk3576_clk_priv {
> +     struct rk3576_cru *cru;
> +     struct rk3576_grf *grf;

This grf member is not used for anything in the clk driver and can be
dropped.

> +     ulong ppll_hz;
> +     ulong gpll_hz;
> +     ulong cpll_hz;
> +     ulong vpll_hz;
> +     ulong aupll_hz;
> +     ulong spll_hz;
> +     ulong lpll_hz;
> +     ulong bpll_hz;
> +     ulong armclk_hz;
> +     ulong armclk_enter_hz;
> +     ulong armclk_init_hz;
> +     bool sync_kernel;
> +     bool set_armclk_rate;
> +};
> +

[snip]

> diff --git a/drivers/clk/rockchip/Makefile b/drivers/clk/rockchip/Makefile
> index 9e379cc2e3b..855bf318de7 100644
> --- a/drivers/clk/rockchip/Makefile
> +++ b/drivers/clk/rockchip/Makefile
> @@ -16,6 +16,7 @@ obj-$(CONFIG_ROCKCHIP_RK3328) += clk_rk3328.o
>  obj-$(CONFIG_ROCKCHIP_RK3368) += clk_rk3368.o
>  obj-$(CONFIG_ROCKCHIP_RK3399) += clk_rk3399.o
>  obj-$(CONFIG_ROCKCHIP_RK3568) += clk_rk3568.o
> +obj-$(CONFIG_ROCKCHIP_RK3576) += clk_rk3576.o
>  obj-$(CONFIG_ROCKCHIP_RK3588) += clk_rk3588.o
>  obj-$(CONFIG_ROCKCHIP_RV1108) += clk_rv1108.o
>  obj-$(CONFIG_ROCKCHIP_RV1126) += clk_rv1126.o
> diff --git a/drivers/clk/rockchip/clk_rk3576.c 
> b/drivers/clk/rockchip/clk_rk3576.c
> new file mode 100644
> index 00000000000..c11dd594a72
> --- /dev/null
> +++ b/drivers/clk/rockchip/clk_rk3576.c
> @@ -0,0 +1,2517 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright (c) 2021 Fuzhou Rockchip Electronics Co., Ltd
> + * Author: Elaine Zhang <zhangq...@rock-chips.com>
> + */
> +

[snip]

> +
> +static int rk3576_clk_probe(struct udevice *dev)
> +{
> +     struct rk3576_clk_priv *priv = dev_get_priv(dev);
> +     int ret;
> +
> +     priv->sync_kernel = false;
> +
> +#ifdef CONFIG_SPL_BUILD
> +     /* relase presetn_bigcore_biu/cru/grf */
> +     writel(0x1c001c00, 0x26010010);
> +     /* set spll to normal mode */
> +     writel(BITS_WITH_WMASK(2, 0x7U, 6),
> +            RK3576_SCRU_BASE + RK3576_PLL_CON(137));
> +     writel(BITS_WITH_WMASK(1, 0x3U, 0),
> +            RK3576_SCRU_BASE + RK3576_MODE_CON0);
> +     /* fix ppll\aupll\cpll */
> +     writel(BITS_WITH_WMASK(2, 0x7U, 6),
> +            RK3576_CRU_BASE + RK3576_PMU_PLL_CON(129));
> +     writel(BITS_WITH_WMASK(2, 0x7U, 6),
> +            RK3576_CRU_BASE + RK3576_PLL_CON(97));
> +     writel(BITS_WITH_WMASK(2, 0x7U, 6),
> +            RK3576_CRU_BASE + RK3576_PLL_CON(105));
> +     writel(BITS_WITH_WMASK(1, 0x3U, 6),
> +            RK3576_CRU_BASE + RK3576_MODE_CON0);
> +     writel(BITS_WITH_WMASK(1, 0x3U, 8),
> +            RK3576_CRU_BASE + RK3576_MODE_CON0);
> +     /* init cci */
> +     writel(0xffff0000, RK3576_CRU_BASE + RK3576_CCI_CLKSEL_CON(4));
> +     rockchip_pll_set_rate(&rk3576_pll_clks[BPLL], priv->cru,
> +                           BPLL, LPLL_HZ);
> +     if (!priv->armclk_enter_hz) {
> +             ret = rockchip_pll_set_rate(&rk3576_pll_clks[LPLL], priv->cru,
> +                                         LPLL, LPLL_HZ);
> +             priv->armclk_enter_hz =
> +                     rockchip_pll_get_rate(&rk3576_pll_clks[LPLL],
> +                                           priv->cru, LPLL);
> +             priv->armclk_init_hz = priv->armclk_enter_hz;
> +             rk_clrsetreg(&priv->cru->litclksel_con[0], CLK_LITCORE_DIV_MASK,
> +                          0 << CLK_LITCORE_DIV_SHIFT);
> +     }
> +     /* init cci */
> +     writel(0xffff20cb, RK3576_CRU_BASE + RK3576_CCI_CLKSEL_CON(4));
> +
> +     /* Change bigcore rm from 4 to 3 */
> +     writel(0x001c000c, RK3576_BIGCORE_GRF_BASE + 0x3c);
> +     writel(0x001c000c, RK3576_BIGCORE_GRF_BASE + 0x44);
> +     writel(0x00020002, RK3576_BIGCORE_GRF_BASE + 0x38);
> +     udelay(1);
> +     writel(0x00020000, RK3576_BIGCORE_GRF_BASE + 0x38);
> +     /* Change litcore rm from 4 to 3 */
> +     writel(0x001c000c, RK3576_LITCORE_GRF_BASE + 0x3c);
> +     writel(0x001c000c, RK3576_LITCORE_GRF_BASE + 0x44);
> +     writel(0x00020002, RK3576_LITCORE_GRF_BASE + 0x38);
> +     udelay(1);
> +     writel(0x00020000, RK3576_LITCORE_GRF_BASE + 0x38);
> +     /* Change cci rm form 4 to 3 */
> +     writel(0x001c000c, RK3576_CCI_GRF_BASE + 0x54);
> +#endif
> +
> +     priv->grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
> +     if (IS_ERR(priv->grf))
> +             return PTR_ERR(priv->grf);

This driver is not using grf, so this can be dropped and should also
save a few ms of boot time.

Regards,
Jonas

> +
> +     rk3576_clk_init(priv);
> +
> +     /* Process 'assigned-{clocks/clock-parents/clock-rates}' properties */
> +     ret = clk_set_defaults(dev, 1);
> +     if (ret)
> +             debug("%s clk_set_defaults failed %d\n", __func__, ret);
> +     else
> +             priv->sync_kernel = true;
> +
> +     return 0;
> +}

[snip]

Reply via email to