| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /* SPDX-License-Identifier: GPL-2.0-only */
- /*
- * Copyright (c) 2022 MediaTek Inc.
- * Author: Edward-JW Yang <edward-jw.yang@mediatek.com>
- */
- #ifndef __CLK_PLLFH_H
- #define __CLK_PLLFH_H
- #include "clk-pll.h"
- struct fh_pll_state {
- void __iomem *base;
- u32 fh_enable;
- u32 ssc_rate;
- };
- struct fh_pll_data {
- int pll_id;
- int fh_id;
- int fh_ver;
- u32 fhx_offset;
- u32 dds_mask;
- u32 slope0_value;
- u32 slope1_value;
- u32 sfstrx_en;
- u32 frddsx_en;
- u32 fhctlx_en;
- u32 tgl_org;
- u32 dvfs_tri;
- u32 pcwchg;
- u32 dt_val;
- u32 df_val;
- u32 updnlmt_shft;
- u32 msk_frddsx_dys;
- u32 msk_frddsx_dts;
- };
- struct mtk_pllfh_data {
- struct fh_pll_state state;
- const struct fh_pll_data data;
- };
- struct fh_pll_regs {
- void __iomem *reg_hp_en;
- void __iomem *reg_clk_con;
- void __iomem *reg_rst_con;
- void __iomem *reg_slope0;
- void __iomem *reg_slope1;
- void __iomem *reg_cfg;
- void __iomem *reg_updnlmt;
- void __iomem *reg_dds;
- void __iomem *reg_dvfs;
- void __iomem *reg_mon;
- };
- struct mtk_fh {
- struct mtk_clk_pll clk_pll;
- struct fh_pll_regs regs;
- struct mtk_pllfh_data *pllfh_data;
- const struct fh_operation *ops;
- spinlock_t *lock;
- };
- struct fh_operation {
- int (*hopping)(struct mtk_fh *fh, unsigned int new_dds,
- unsigned int postdiv);
- int (*ssc_enable)(struct mtk_fh *fh, u32 rate);
- };
- int mtk_clk_register_pllfhs(struct device_node *node,
- const struct mtk_pll_data *plls, int num_plls,
- struct mtk_pllfh_data *pllfhs, int num_pllfhs,
- struct clk_hw_onecell_data *clk_data);
- void mtk_clk_unregister_pllfhs(const struct mtk_pll_data *plls, int num_plls,
- struct mtk_pllfh_data *pllfhs, int num_fhs,
- struct clk_hw_onecell_data *clk_data);
- void fhctl_parse_dt(const u8 *compatible_node, struct mtk_pllfh_data *pllfhs,
- int num_pllfhs);
- #endif /* __CLK_PLLFH_H */
|