blob: f8fd6ac1420478dba8c9020aa3b6d4a106402cc5 [file] [log] [blame]
Caleb Connollydd673122023-10-23 16:05:10 +01001/*
2 * Copyright (c) 2019, Linaro Ltd.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice,
12 * this list of conditions and the following disclaimer in the documentation
13 * and/or other materials provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its contributors
16 * may be used to endorse or promote products derived from this software without
17 * specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */
31#ifndef __DEBUGCC_H__
32#define __DEBUGCC_H__
33
34#include <linux/bitops.h>
35#include <linux/types.h>
36
37#define CORE_CC_BLOCK "core"
38
39struct measure_clk;
40
41struct debug_mux {
42 unsigned long base;
43 const char *block_name;
44 size_t size;
45
46 unsigned int enable_reg;
47 unsigned int enable_mask;
48
49 unsigned int mux_reg;
50 unsigned int mux_mask;
51 unsigned int mux_shift;
52
53 unsigned int div_reg;
54 unsigned int div_shift;
55 unsigned int div_mask;
56 unsigned int div_val;
57
58 unsigned int xo_div4_reg;
59 unsigned int debug_ctl_reg;
60 unsigned int debug_status_reg;
61
62 unsigned int ahb_reg;
63 unsigned int ahb_mask;
64
65 void (*premeasure)(struct debug_mux *mux);
66 unsigned long (*measure)(const struct measure_clk *clk);
67 void (*postmeasure)(struct debug_mux *mux);
68};
69
70struct measure_clk {
71 char *name;
72 struct debug_mux *primary;
73 int mux;
74
75 struct debug_mux *leaf;
76 int leaf_mux;
77
78 unsigned int fixed_div;
79};
80
81struct debugcc_platform {
82 const char *name;
83 const struct measure_clk *clocks;
84 const struct debug_mux **blocks;
85};
86
87#ifdef CONFIG_CLK_QCOM_DEBUG
88int qcom_debugcc_run(int argc, char *const argv[]);
89
90int mmap_mux(int devmem, struct debug_mux *mux);
91void mux_enable(struct debug_mux *mux);
92void mux_disable(struct debug_mux *mux);
93unsigned long measure_mccc(const struct measure_clk *clk);
94
95extern struct debugcc_platform qcs404_debugcc;
96extern struct debugcc_platform sdm845_debugcc;
97extern struct debugcc_platform sm6115_debugcc;
98extern struct debugcc_platform sm8250_debugcc;
99#else
100int qcom_debugcc_run(int argc, char *const argv[]) { return 0; }
101#endif
102
103#endif