1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * Utility functions for parsing Tegra CVB voltage tables |
4 | */ |
5 | |
6 | #ifndef __DRIVERS_CLK_TEGRA_CVB_H |
7 | #define __DRIVERS_CLK_TEGRA_CVB_H |
8 | |
9 | #include <linux/types.h> |
10 | |
11 | struct device; |
12 | |
13 | #define MAX_DVFS_FREQS 40 |
14 | |
15 | struct rail_alignment { |
16 | int offset_uv; |
17 | int step_uv; |
18 | }; |
19 | |
20 | struct cvb_coefficients { |
21 | int c0; |
22 | int c1; |
23 | int c2; |
24 | }; |
25 | |
26 | struct cvb_table_freq_entry { |
27 | unsigned long freq; |
28 | struct cvb_coefficients coefficients; |
29 | }; |
30 | |
31 | struct cvb_cpu_dfll_data { |
32 | u32 tune0_low; |
33 | u32 tune0_high; |
34 | u32 tune1; |
35 | unsigned int tune_high_min_millivolts; |
36 | }; |
37 | |
38 | struct cvb_table { |
39 | int speedo_id; |
40 | int process_id; |
41 | |
42 | int min_millivolts; |
43 | int max_millivolts; |
44 | |
45 | int speedo_scale; |
46 | int voltage_scale; |
47 | struct cvb_table_freq_entry entries[MAX_DVFS_FREQS]; |
48 | struct cvb_cpu_dfll_data cpu_dfll_data; |
49 | }; |
50 | |
51 | const struct cvb_table * |
52 | tegra_cvb_add_opp_table(struct device *dev, const struct cvb_table *cvb_tables, |
53 | size_t count, struct rail_alignment *align, |
54 | int process_id, int speedo_id, int speedo_value, |
55 | unsigned long max_freq); |
56 | void tegra_cvb_remove_opp_table(struct device *dev, |
57 | const struct cvb_table *table, |
58 | unsigned long max_freq); |
59 | |
60 | #endif |
61 | |