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