cvb.h (1163B)
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 11struct device; 12 13#define MAX_DVFS_FREQS 40 14 15struct rail_alignment { 16 int offset_uv; 17 int step_uv; 18}; 19 20struct cvb_coefficients { 21 int c0; 22 int c1; 23 int c2; 24}; 25 26struct cvb_table_freq_entry { 27 unsigned long freq; 28 struct cvb_coefficients coefficients; 29}; 30 31struct cvb_cpu_dfll_data { 32 u32 tune0_low; 33 u32 tune0_high; 34 u32 tune1; 35 unsigned int tune_high_min_millivolts; 36}; 37 38struct 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 51const struct cvb_table * 52tegra_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); 56void tegra_cvb_remove_opp_table(struct device *dev, 57 const struct cvb_table *table, 58 unsigned long max_freq); 59 60#endif