[v1 04/17] drivers: clk: Add clock driver for Intel N5X device
Tan, Ley Foon
ley.foon.tan at intel.com
Mon Apr 5 09:37:09 CEST 2021
> -----Original Message-----
> From: Lim, Elly Siew Chin <elly.siew.chin.lim at intel.com>
> Sent: Wednesday, March 31, 2021 10:39 PM
> To: u-boot at lists.denx.de
> Cc: Marek Vasut <marex at denx.de>; Tan, Ley Foon
> <ley.foon.tan at intel.com>; See, Chin Liang <chin.liang.see at intel.com>;
> Simon Goldschmidt <simon.k.r.goldschmidt at gmail.com>; Chee, Tien Fong
> <tien.fong.chee at intel.com>; Westergreen, Dalon
> <dalon.westergreen at intel.com>; Simon Glass <sjg at chromium.org>; Gan,
> Yau Wai <yau.wai.gan at intel.com>; Lim, Elly Siew Chin
> <elly.siew.chin.lim at intel.com>
> Subject: [v1 04/17] drivers: clk: Add clock driver for Intel N5X device
>
> Add clock manager driver for N5X. Provides clock initialization and get_rate
> functions.
>
> Signed-off-by: Siew Chin Lim <elly.siew.chin.lim at intel.com>
> ---
> drivers/clk/altera/Makefile | 3 +-
> drivers/clk/altera/clk-n5x.c | 489
> ++++++++++++++++++++++++++++++++++
> drivers/clk/altera/clk-n5x.h | 217 +++++++++++++++
> include/dt-bindings/clock/n5x-clock.h | 71 +++++
> 4 files changed, 779 insertions(+), 1 deletion(-) create mode 100644
> drivers/clk/altera/clk-n5x.c create mode 100644 drivers/clk/altera/clk-n5x.h
> create mode 100644 include/dt-bindings/clock/n5x-clock.h
>
> diff --git a/drivers/clk/altera/Makefile b/drivers/clk/altera/Makefile index
> 96215ad5c4..38cd730685 100644
> --- a/drivers/clk/altera/Makefile
> +++ b/drivers/clk/altera/Makefile
> @@ -1,7 +1,8 @@
> # SPDX-License-Identifier: GPL-2.0+
> #
> -# Copyright (C) 2018 Marek Vasut <marex at denx.de>
> +# Copyright (C) 2018-2021 Marek Vasut <marex at denx.de>
> #
>
> obj-$(CONFIG_TARGET_SOCFPGA_AGILEX) += clk-agilex.o
> obj-$(CONFIG_TARGET_SOCFPGA_ARRIA10) += clk-arria10.o
> +obj-$(CONFIG_TARGET_SOCFPGA_N5X) += clk-n5x.o
> diff --git a/drivers/clk/altera/clk-n5x.c b/drivers/clk/altera/clk-n5x.c new file
> mode 100644 index 0000000000..12e6aa9ac2
> --- /dev/null
> +++ b/drivers/clk/altera/clk-n5x.c
> @@ -0,0 +1,489 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright (C) 2020-2021 Intel Corporation <www.intel.com> */
> +
> +#include <common.h>
Sorting the include name.
> +#include <asm/arch/clock_manager.h>
> +#include <asm/global_data.h>
> +#include <asm/io.h>
> +#include <clk-uclass.h>
> +#include <dm.h>
> +#include <dm/lists.h>
> +#include <dm/util.h>
> +#include <dt-bindings/clock/n5x-clock.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
[...]
> +
> + /* Take all PLLs out of bypass */
> + clk_write_bypass_mainpll(plat, 0);
> + clk_write_bypass_perpll(plat, 0);
> +
> + /* Clear the loss of lock bits (write 1 to clear) */
> + CM_REG_CLRBITS(plat, CLKMGR_INTRCLR,
> + CLKMGR_INTER_PERPLLLOST_MASK |
> + CLKMGR_INTER_MAINPLLLOST_MASK);
Comment "write 1 to clear" is valid?
> +
> + /* Take all ping pong counters out of reset */
> + CM_REG_CLRBITS(plat, CLKMGR_ALTR_EXTCNTRST,
> + CLKMGR_ALT_EXTCNTRST_ALLCNTRST_MASK);
> +
> + /* Out of boot mode */
> + clk_write_ctrl(plat,
> + CM_REG_READL(plat, CLKMGR_CTRL) &
> ~CLKMGR_CTRL_BOOTMODE); }
> +
> +static u32 clk_get_5_1_clk_src(struct socfpga_clk_plat *plat, u32 reg)
> +{
> + u32 clksrc = CM_REG_READL(plat, reg);
> +
> + return (clksrc & CLKMGR_CLKSRC_MASK) >>
> CLKMGR_CLKSRC_OFFSET; }
> +
> +static u64 clk_get_pll_output_hz(struct socfpga_clk_plat *plat,
> + u32 pllglob_reg, u32 plldiv_reg)
> +{
> + u64 clock = 0;
> + u32 clklsrc, divf, divr, divq, power = 1;
> +
> + /* Get input clock frequency */
> + clklsrc = (CM_REG_READL(plat, pllglob_reg) &
Redundant () can be removed. Same for other code in this source file.
> + CLKMGR_PLLGLOB_VCO_PSRC_MASK) >>
> + CLKMGR_PLLGLOB_VCO_PSRC_OFFSET;
> +
> + switch (clklsrc) {
> + case CLKMGR_VCO_PSRC_EOSC1:
> + clock = cm_get_osc_clk_hz();
> + break;
> + case CLKMGR_VCO_PSRC_INTOSC:
> + clock = cm_get_intosc_clk_hz();
> + break;
> + case CLKMGR_VCO_PSRC_F2S:
> + clock = cm_get_fpga_clk_hz();
> + break;
> + }
> +
Regards
Ley Foon
More information about the U-Boot
mailing list