blob: 01e5872cae7f98c74a1ce45a752faf573dacd2d8 [file] [log] [blame]
xjb04a4022021-11-25 15:01:52 +08001/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Copyright (c) 2020 MediaTek Inc.
4 */
5
6struct seq_file;
7#define clk_readl(addr) readl(addr)
8#define clk_writel(addr, val) \
9 do { writel(val, addr); wmb(); } while (0) /* sync write */
10#define clk_setl(addr, val) clk_writel(addr, clk_readl(addr) | (val))
11#define clk_clrl(addr, val) clk_writel(addr, clk_readl(addr) & ~(val))
12enum FMETER_TYPE {
13 FT_NULL,
14 ABIST,
15 CKGEN,
16 ABIST_2,
17};
18struct fmeter_clk {
19 enum FMETER_TYPE type;
20 u32 id;
21 const char *name;
22 u32 ofs;
23 u32 pdn;
24};
25struct regbase {
26 u32 phys;
27 void __iomem *virt;
28 const char *name;
29 const char *pg;
30};
31struct regname {
32 struct regbase *base;
33 u32 ofs;
34 const char *name;
35};
36#define ADDR(rn) (rn->base->virt + rn->ofs)
37#define PHYSADDR(rn) (rn->base->phys + rn->ofs)
38struct cmd_fn {
39 const char *cmd;
40 int (*fn)(struct seq_file *s, void *v);
41};
42#define CMDFN(_cmd, _fn) { \
43 .cmd = _cmd, \
44 .fn = _fn, \
45}
46struct provider_clk {
47 const char *provider_name;
48 u32 idx;
49 struct clk *ck;
50 u32 pwr_mask;
51};
52struct clkdbg_ops {
53 const struct fmeter_clk *(*get_all_fmeter_clks)(void);
54 void *(*prepare_fmeter)(void);
55 void (*unprepare_fmeter)(void *data);
56 u32 (*fmeter_freq)(const struct fmeter_clk *fclk);
57 const struct regname *(*get_all_regnames)(void);
58 const char * const *(*get_all_clk_names)(void);
59 const char * const *(*get_pwr_names)(void);
60 void (*setup_provider_clk)(struct provider_clk *pvdck);
61 u32 (*get_spm_pwr_status)(void);
62 bool (*is_pwr_on)(struct provider_clk *pvdck);
63};
64void set_clkdbg_ops(const struct clkdbg_ops *ops);
65void set_custom_cmds(const struct cmd_fn *cmds);
66struct provider_clk *get_all_provider_clks(void);
67const char *get_last_cmd(void);
68void reg_pdrv(const char *pdname);
69void unreg_pdrv(const char *pdname);
70void prepare_enable_provider(const char *pvd);
71void disable_unprepare_provider(const char *pvd);
72void print_regs(void);
73void print_fmeter_all(void);