| /* SPDX-License-Identifier: GPL-2.0 */ | 
 | /* | 
 |  * Copyright (c) 2020 MediaTek Inc. | 
 |  */ | 
 |  | 
 | struct seq_file; | 
 | #define clk_readl(addr)		readl(addr) | 
 | #define clk_writel(addr, val)	\ | 
 | 	do { writel(val, addr); wmb(); } while (0) /* sync write */ | 
 | #define clk_setl(addr, val)	clk_writel(addr, clk_readl(addr) | (val)) | 
 | #define clk_clrl(addr, val)	clk_writel(addr, clk_readl(addr) & ~(val)) | 
 | enum FMETER_TYPE { | 
 | 	FT_NULL, | 
 | 	ABIST, | 
 | 	CKGEN, | 
 | 	ABIST_2, | 
 | }; | 
 | struct fmeter_clk { | 
 | 	enum FMETER_TYPE type; | 
 | 	u32 id; | 
 | 	const char *name; | 
 | 	u32 ofs; | 
 | 	u32 pdn; | 
 | }; | 
 | struct regbase { | 
 | 	u32 phys; | 
 | 	void __iomem *virt; | 
 | 	const char *name; | 
 | 	const char *pg; | 
 | }; | 
 | struct regname { | 
 | 	struct regbase *base; | 
 | 	u32 ofs; | 
 | 	const char *name; | 
 | }; | 
 | #define ADDR(rn)	(rn->base->virt + rn->ofs) | 
 | #define PHYSADDR(rn)	(rn->base->phys + rn->ofs) | 
 | struct cmd_fn { | 
 | 	const char	*cmd; | 
 | 	int (*fn)(struct seq_file *s, void *v); | 
 | }; | 
 | #define CMDFN(_cmd, _fn) {	\ | 
 | 	.cmd = _cmd,		\ | 
 | 	.fn = _fn,		\ | 
 | } | 
 | struct provider_clk { | 
 | 	const char *provider_name; | 
 | 	u32 idx; | 
 | 	struct clk *ck; | 
 | 	u32 pwr_mask; | 
 | }; | 
 | struct clkdbg_ops { | 
 | 	const struct fmeter_clk *(*get_all_fmeter_clks)(void); | 
 | 	void *(*prepare_fmeter)(void); | 
 | 	void (*unprepare_fmeter)(void *data); | 
 | 	u32 (*fmeter_freq)(const struct fmeter_clk *fclk); | 
 | 	const struct regname *(*get_all_regnames)(void); | 
 | 	const char * const *(*get_all_clk_names)(void); | 
 | 	const char * const *(*get_pwr_names)(void); | 
 | 	void (*setup_provider_clk)(struct provider_clk *pvdck); | 
 | 	u32 (*get_spm_pwr_status)(void); | 
 | 	bool (*is_pwr_on)(struct provider_clk *pvdck); | 
 | }; | 
 | void set_clkdbg_ops(const struct clkdbg_ops *ops); | 
 | void set_custom_cmds(const struct cmd_fn *cmds); | 
 | struct provider_clk *get_all_provider_clks(void); | 
 | const char *get_last_cmd(void); | 
 | void reg_pdrv(const char *pdname); | 
 | void unreg_pdrv(const char *pdname); | 
 | void prepare_enable_provider(const char *pvd); | 
 | void disable_unprepare_provider(const char *pvd); | 
 | void print_regs(void); | 
 | void print_fmeter_all(void); |